commit c9ae8e02e1db25cc3055afde2bb6129ad9057057 Author: lnkosadmin Date: Wed Apr 1 18:18:05 2026 +0800 add item commands diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d5b7269 --- /dev/null +++ b/LICENSE @@ -0,0 +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, +or 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.md b/README.md new file mode 100644 index 0000000..3edf45c --- /dev/null +++ b/README.md @@ -0,0 +1,206 @@ +# BedwarsRel - 指令商店物品扩展版 + +基于 [BedwarsRel](https://github.com/BedwarsRel/BedwarsRel) 的改进版本,添加了**指令商店物品**功能支持。 + +[![License](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) +[![Minecraft](https://img.shields.io/badge/Minecraft-1.12.2-green.svg)](https://www.minecraft.net/) +[![API](https://img.shields.io/badge/API-Spigot%201.12-orange.svg)](https://www.spigotmc.org/) + +## 📋 项目说明 + +本项目是 BedwarsRel 的分支版本,在保留原项目所有功能的基础上,添加了**商店物品执行指令**功能。这使得服务器管理员可以配置特殊的商店物品,当玩家购买时执行自定义命令而非给予物品。 + +### 原项目信息 + +- **原作者**: BedwarsRel-Team +- **原仓库**: https://github.com/BedwarsRel/BedwarsRel +- **原许可证**: GNU General Public License v3.0 + +## ✨ 新增功能 + +### 1. 指令商店物品支持 + +在 `shop.yml` 中配置带命令的商店物品: + +```yaml +shop: + special: + item: STICK + name: "§d特殊商店" + order: 1 + offers: + - reward: + - item: STONE + amount: 1 + name: "§c测试命令物品" + commands: + - 'say %player% 购买了命令物品' + - 'give %player% diamond 1' + price: + - type: IRON_INGOT + amount: 4 +``` + +### 2. 支持两种配置格式 + +**格式1 - 扩展格式**(推荐): +```yaml +reward: + - item: LINGERING_POTION + amount: 1 + name: "§c力量药水" + lore: + - '§7效果: 力量 I' + effects: + - type: STRENGTH + duration: 180 + amplifier: 1 +``` + +**格式2 - 标准格式**: +```yaml +reward: + - type: STONE + amount: 1 + meta: + display-name: "§c测试物品" +``` + +### 3. 与 BedwarsXP 兼容 + +修改后的版本同时支持 BedwarsXP 经验商店插件,在经验模式下也能正常使用指令商店物品。 + +## 📥 安装说明 + +### 前置要求 + +- Spigot/Paper 1.12.2 服务器 +- Java 8 或更高版本 + +### 安装步骤 + +1. 下载 `BedwarsRel-1.3.6.jar` +2. 将 jar 文件放入服务器的 `plugins/` 目录 +3. 重启服务器 +4. 编辑 `plugins/BedwarsRel/shop.yml` 添加带命令的商店物品 +5. 使用 `/bw reload` 重载配置 + +## 🔧 配置示例 + +### 完整 shop.yml 示例 + +```yaml +shop: + blocks: + item: SANDSTONE + name: "§e方块" + order: 10 + lore: + - "§7建筑方块" + offers: + # 普通物品 + - reward: + - type: SANDSTONE + amount: 4 + price: + - type: BRONZE + amount: 1 + meta: + display-name: "§c青铜" + + # 命令物品示例 + - reward: + - item: STONE + amount: 1 + name: "§c传送物品" + lore: + - "§7点击传送到基地" + commands: + - 'tp %player% 0 100 0' + - 'say %player% 使用了传送物品!' + price: + - type: IRON_INGOT + amount: 2 + meta: + display-name: "§7铁锭" + + weapons: + item: DIAMOND_SWORD + name: "§c武器" + order: 20 + offers: + - reward: + - type: DIAMOND_SWORD + amount: 1 + meta: + enchants: + DAMAGE_ALL: 1 + price: + - type: GOLD_INGOT + amount: 4 + meta: + display-name: "§6金锭" +``` + +## 🏗️ 构建说明 + +### 环境要求 + +- Maven 3.6+ +- Java 8 +- Git + +### 构建步骤 + +```bash +# 克隆仓库 +git clone https://git.lnkos.cn/atob/BedwarsRel.git +cd BedwarsRel-CommandShop + +# 构建项目 +mvn clean package -DskipTests + +# 生成的 jar 文件位于: +# plugin/target/BedwarsRel-1.3.6.jar +``` + +### 模块说明 + +- `common/` - 核心代码模块 +- `v1_12_r1/` - 1.12.2 版本 NMS 适配 +- `plugin/` - 最终打包模块 + +## 📜 许可证 + +本项目基于 [GNU General Public License v3.0](LICENSE) 发布。 + +### 改进内容版权声明 + +本改进版本在 BedwarsRel 原项目基础上添加了以下功能: +- 指令商店物品支持 +- 改进的物品匹配逻辑 +- BedwarsXP 插件兼容性支持 + +所有新增代码同样遵循 GPL-3.0 许可证。 + +## 🤝 贡献指南 + +欢迎提交 Issue 和 Pull Request! + +## 📝 更新日志 + +### v1.3.6+ (2026-04-01) + +- ✨ 新增指令商店物品功能 +- ✨ 兼容 BedwarsXP 经验商店插件 +- 🔧 修复物品匹配逻辑问题 +- 🔧 优化药水类物品解析 + +## 👥 致谢 + +- [BedwarsRel-Team](https://github.com/BedwarsRel) - 原项目开发团队 +- [SpigotMC](https://www.spigotmc.org/) - 提供服务器 API + +--- + +**免责声明**: 本插件按"原样"提供,不对因使用本插件造成的任何损失负责。 diff --git a/build/get-dependencies.sh b/build/get-dependencies.sh new file mode 100644 index 0000000..f22018f --- /dev/null +++ b/build/get-dependencies.sh @@ -0,0 +1,18 @@ +mkdir CraftBukkit +cd CraftBukkit +wget https://cdn.getbukkit.org/craftbukkit/craftbukkit-1.8-R0.1-SNAPSHOT-latest.jar +mvn install:install-file -Dfile=craftbukkit-1.8-R0.1-SNAPSHOT-latest.jar -DgroupId=org.bukkit -DartifactId=craftbukkit -Dversion=1.8-R0.1-SNAPSHOT -Dpackaging=jar +wget https://cdn.getbukkit.org/craftbukkit/craftbukkit-1.8.3-R0.1-SNAPSHOT-latest.jar +mvn install:install-file -Dfile=craftbukkit-1.8.3-R0.1-SNAPSHOT-latest.jar -DgroupId=org.bukkit -DartifactId=craftbukkit -Dversion=1.8.3-R0.1-SNAPSHOT -Dpackaging=jar +wget https://cdn.getbukkit.org/craftbukkit/craftbukkit-1.8.8-R0.1-SNAPSHOT-latest.jar +mvn install:install-file -Dfile=craftbukkit-1.8.8-R0.1-SNAPSHOT-latest.jar -DgroupId=org.bukkit -DartifactId=craftbukkit -Dversion=1.8.8-R0.1-SNAPSHOT -Dpackaging=jar +wget https://cdn.getbukkit.org/craftbukkit/craftbukkit-1.9.2-R0.1-SNAPSHOT-latest.jar +mvn install:install-file -Dfile=craftbukkit-1.9.2-R0.1-SNAPSHOT-latest.jar -DgroupId=org.bukkit -DartifactId=craftbukkit -Dversion=1.9.2-R0.1-SNAPSHOT -Dpackaging=jar +wget https://cdn.getbukkit.org/craftbukkit/craftbukkit-1.9.4-R0.1-SNAPSHOT-latest.jar +mvn install:install-file -Dfile=craftbukkit-1.9.4-R0.1-SNAPSHOT-latest.jar -DgroupId=org.bukkit -DartifactId=craftbukkit -Dversion=1.9.4-R0.1-SNAPSHOT -Dpackaging=jar +wget https://cdn.getbukkit.org/craftbukkit/craftbukkit-1.10.2-R0.1-SNAPSHOT-latest.jar +mvn install:install-file -Dfile=craftbukkit-1.10.2-R0.1-SNAPSHOT-latest.jar -DgroupId=org.bukkit -DartifactId=craftbukkit -Dversion=1.10.2-R0.1-SNAPSHOT -Dpackaging=jar +wget https://cdn.getbukkit.org/craftbukkit/craftbukkit-1.11.2.jar +mvn install:install-file -Dfile=craftbukkit-1.11.2.jar -DgroupId=org.bukkit -DartifactId=craftbukkit -Dversion=1.11.2-R0.1-SNAPSHOT -Dpackaging=jar +wget https://cdn.getbukkit.org/craftbukkit/craftbukkit-1.12.jar +mvn install:install-file -Dfile=craftbukkit-1.12.jar -DgroupId=org.bukkit -DartifactId=craftbukkit -Dversion=1.12-R0.1-SNAPSHOT -Dpackaging=jar \ No newline at end of file diff --git a/circle.yml b/circle.yml new file mode 100644 index 0000000..a79aeab --- /dev/null +++ b/circle.yml @@ -0,0 +1,38 @@ +version: 2 +executorType: docker +containerInfo: + - image: maven:3.5-jdk-8 +jobs: + build: + branches: + ignore: + - l10n + working_directory: "~/BedwarsRel" + steps: + - type: checkout + - run: + name: "Getting Dependencies" + command: './get-dependencies.sh' + working_directory: "~/BedwarsRel/build" + - run: + name: "Building and deploying BedwarsRel" + command: | + export SHORT_HASH=$(echo $CIRCLE_SHA1 | cut -c -7) + if [ "${CIRCLE_BRANCH}" == "master" ] + then + mvn deploy -fae -P ci-release,deploy-snapshot,attach-javadocs,attach-sources --settings settings.xml + elif [ "${CIRCLE_BRANCH}" == "develop" ] + then + mvn deploy -fae -P ci-snapshot,deploy-snapshot,attach-javadocs,attach-sources --settings settings.xml + else + mvn clean install -fae -P ci-snapshot,attach-javadocs,attach-sources + fi + mkdir -p plugin/target/artifacts/ + cp plugin/target/BedwarsRel-*.jar plugin/target/artifacts/. + - type: artifacts-store + path: plugin/target/artifacts + destination: artifacts + + - type: artifacts-store + path: plugin/target/apidocs + destination: apidocs \ No newline at end of file diff --git a/common/pom.xml b/common/pom.xml new file mode 100644 index 0000000..759a0cc --- /dev/null +++ b/common/pom.xml @@ -0,0 +1,35 @@ + + + + BedwarsRel-Parent + io.github.bedwarsrel + 1.3.6 + + 4.0.0 + + BedwarsRel-Common + + + + com.bugsnag + bugsnag + 3.0.2 + compile + + + org.slf4j + slf4j-log4j12 + 1.7.22 + compile + + + com.zaxxer + HikariCP-java7 + 2.4.11 + compile + + + + \ No newline at end of file diff --git a/common/src/main/java/io/github/bedwarsrel/BedwarsRel.java b/common/src/main/java/io/github/bedwarsrel/BedwarsRel.java new file mode 100644 index 0000000..6d4900a --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/BedwarsRel.java @@ -0,0 +1,917 @@ +package io.github.bedwarsrel; + +import com.bugsnag.Bugsnag; +import com.bugsnag.Report; +import com.bugsnag.callbacks.Callback; +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.commands.*; +import io.github.bedwarsrel.database.DatabaseManager; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameManager; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.game.ResourceSpawner; +import io.github.bedwarsrel.game.Team; +import io.github.bedwarsrel.listener.BlockListener; +import io.github.bedwarsrel.listener.ChunkListener; +import io.github.bedwarsrel.listener.EntityListener; +import io.github.bedwarsrel.listener.HangingListener; +import io.github.bedwarsrel.listener.Player19Listener; +import io.github.bedwarsrel.listener.PlayerListener; +import io.github.bedwarsrel.listener.PlayerSpigotListener; +import io.github.bedwarsrel.listener.ServerListener; +import io.github.bedwarsrel.listener.SignListener; +import io.github.bedwarsrel.listener.WeatherListener; +import io.github.bedwarsrel.localization.LocalizationConfig; +import io.github.bedwarsrel.shop.Specials.SpecialItem; +import io.github.bedwarsrel.statistics.PlayerStatistic; +import io.github.bedwarsrel.statistics.PlayerStatisticManager; +import io.github.bedwarsrel.statistics.StorageType; +import io.github.bedwarsrel.updater.ConfigUpdater; +import io.github.bedwarsrel.updater.PluginUpdater; +import io.github.bedwarsrel.updater.PluginUpdater.UpdateCallback; +import io.github.bedwarsrel.updater.PluginUpdater.UpdateResult; +import io.github.bedwarsrel.utils.BStatsMetrics; +import io.github.bedwarsrel.utils.BedwarsCommandExecutor; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.McStatsMetrics; +import io.github.bedwarsrel.utils.SupportData; +import io.github.bedwarsrel.utils.Utils; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.UUID; +import java.util.concurrent.TimeUnit; +import lombok.Getter; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.configuration.serialization.ConfigurationSerialization; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; +import org.bukkit.scoreboard.ScoreboardManager; + +public class BedwarsRel extends JavaPlugin { + + public static int PROJECT_ID = 91743; + private static BedwarsRel instance = null; + private static Boolean locationSerializable = null; + private List breakableTypes = null; + @Getter + private Bugsnag bugsnag; + private ArrayList commands = new ArrayList<>(); + private Package craftbukkit = null; + private DatabaseManager dbManager = null; + @Getter + private GameManager gameManager = null; + private boolean isSpigot = false; + @Getter + private HashMap localization = new HashMap<>(); + private Package minecraft = null; + @Getter + private HashMap playerLocales = new HashMap<>(); + private PlayerStatisticManager playerStatisticManager = null; + private ScoreboardManager scoreboardManager = null; + private YamlConfiguration shopConfig = null; + private BukkitTask timeTask = null; + private BukkitTask updateChecker = null; + private String version = null; + + public static String _l(CommandSender commandSender, String key, String singularValue, + Map params) { + return BedwarsRel + ._l(BedwarsRel.getInstance().getSenderLocale(commandSender), key, singularValue, params); + } + + public static String _l(String locale, String key, String singularValue, + Map params) { + if ("1".equals(params.get(singularValue))) { + return BedwarsRel._l(locale, key + "-one", params); + } + return BedwarsRel._l(locale, key, params); + } + + public static String _l(CommandSender commandSender, String key, Map params) { + return BedwarsRel._l(BedwarsRel.getInstance().getSenderLocale(commandSender), key, params); + } + + public static String _l(String locale, String key, Map params) { + if (!BedwarsRel.getInstance().localization.containsKey(locale)) { + BedwarsRel.getInstance().loadLocalization(locale); + } + return (String) BedwarsRel.getInstance().getLocalization().get(locale).get(key, params); + } + + public static String _l(CommandSender commandSender, String key) { + return BedwarsRel._l(BedwarsRel.getInstance().getSenderLocale(commandSender), key); + } + + public static String _l(String key) { + return BedwarsRel._l(BedwarsRel.getInstance().getConfig().getString("locale"), key); + } + + public static String _l(String locale, String key) { + if (!BedwarsRel.getInstance().localization.containsKey(locale)) { + BedwarsRel.getInstance().loadLocalization(locale); + } + return (String) BedwarsRel.getInstance().getLocalization().get(locale).get(key); + } + + public static BedwarsRel getInstance() { + return BedwarsRel.instance; + } + + public boolean allPlayersBackToMainLobby() { + if (this.getConfig().contains("endgame.all-players-to-mainlobby") + && this.getConfig().isBoolean("endgame.all-players-to-mainlobby")) { + return this.getConfig().getBoolean("endgame.all-players-to-mainlobby"); + } + + return false; + + } + + private void checkUpdates() { + try { + if (this.getBooleanConfig("check-updates", true)) { + this.updateChecker = new BukkitRunnable() { + + @Override + public void run() { + final BukkitRunnable task = this; + UpdateCallback callback = new UpdateCallback() { + + @Override + public void onFinish(PluginUpdater updater) { + if (updater.getResult() == UpdateResult.SUCCESS) { + task.cancel(); + } + } + }; + + new PluginUpdater( + BedwarsRel.getInstance(), BedwarsRel.PROJECT_ID, BedwarsRel.getInstance().getFile(), + PluginUpdater.UpdateType.DEFAULT, callback, + BedwarsRel.getInstance().getBooleanConfig("update-infos", true)); + } + + }.runTaskTimerAsynchronously(BedwarsRel.getInstance(), 40L, 36000L); + } + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + this.getServer().getConsoleSender().sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + "Check for updates not successful: Error!")); + } + } + + + private void disableBugsnag() { + this.bugsnag.addCallback(new Callback() { + @Override + public void beforeNotify(Report report) { + report.cancel(); + } + }); + } + + public void dispatchRewardCommands(List commands, Map replacements) { + for (String command : commands) { + command = command.trim(); + if ("".equals(command)) { + continue; + } + + if ("none".equalsIgnoreCase(command)) { + break; + } + + if (command.startsWith("/")) { + command = command.substring(1); + } + + for (Entry entry : replacements.entrySet()) { + command = command.replace(entry.getKey(), entry.getValue()); + } + + BedwarsRel.getInstance().getServer() + .dispatchCommand(BedwarsRel.getInstance().getServer().getConsoleSender(), command); + } + } + + private void enableBugsnag() { + this.bugsnag.addCallback(new Callback() { + @Override + public void beforeNotify(Report report) { + Boolean shouldBeSent = false; + for (StackTraceElement stackTraceElement : report.getException().getStackTrace()) { + if (stackTraceElement.toString().contains("io.github.bedwarsrel.BedwarsRel")) { + shouldBeSent = true; + break; + } + } + if (!shouldBeSent) { + report.cancel(); + } + + report.setUserId(SupportData.getIdentifier()); + if (!SupportData.getPluginVersionBuild().equalsIgnoreCase("unknown")) { + report.addToTab("Server", "Version Build", + BedwarsRel.getInstance().getDescription().getVersion() + " " + + SupportData.getPluginVersionBuild()); + } + report.addToTab("Server", "Version", SupportData.getServerVersion()); + report.addToTab("Server", "Version Bukkit", SupportData.getBukkitVersion()); + report.addToTab("Server", "Server Mode", SupportData.getServerMode()); + report.addToTab("Server", "Plugins", SupportData.getPlugins()); + } + }); + } + + private ArrayList filterCommandsByPermission(ArrayList commands, + String permission) { + Iterator it = commands.iterator(); + + while (it.hasNext()) { + BaseCommand command = it.next(); + if (!command.getPermission().equals(permission)) { + it.remove(); + } + } + + return commands; + } + + public List getAllowedCommands() { + FileConfiguration config = this.getConfig(); + if (config.contains("allowed-commands") && config.isList("allowed-commands")) { + return config.getStringList("allowed-commands"); + } + + return new ArrayList(); + } + + @SuppressWarnings("unchecked") + public ArrayList getBaseCommands() { + ArrayList commands = (ArrayList) this.commands.clone(); + commands = this.filterCommandsByPermission(commands, "base"); + + return commands; + } + + public boolean getBooleanConfig(String key, boolean defaultBool) { + FileConfiguration config = this.getConfig(); + if (config.contains(key) && config.isBoolean(key)) { + return config.getBoolean(key); + } + return defaultBool; + } + + public String getBungeeHub() { + if (this.getConfig().contains("bungeecord.hubserver")) { + return this.getConfig().getString("bungeecord.hubserver"); + } + + return null; + } + + public ArrayList getCommands() { + return this.commands; + } + + @SuppressWarnings("unchecked") + public ArrayList getCommandsByPermission(String permission) { + ArrayList commands = (ArrayList) this.commands.clone(); + commands = this.filterCommandsByPermission(commands, permission); + + return commands; + } + + public Package getCraftBukkit() { + try { + if (this.craftbukkit == null) { + return Package.getPackage("org.bukkit.craftbukkit." + + Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3]); + } else { + return this.craftbukkit; + } + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + this.getServer().getConsoleSender().sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel._l(this.getServer().getConsoleSender(), "errors.packagenotfound", + ImmutableMap.of("package", "craftbukkit")))); + return null; + } + } + + @SuppressWarnings("rawtypes") + public Class getCraftBukkitClass(String classname) { + try { + if (this.craftbukkit == null) { + this.craftbukkit = this.getCraftBukkit(); + } + + return Class.forName(this.craftbukkit.getName() + "." + classname); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + this.getServer().getConsoleSender() + .sendMessage(ChatWriter.pluginMessage( + ChatColor.RED + BedwarsRel + ._l(this.getServer().getConsoleSender(), "errors.classnotfound", + ImmutableMap.of("package", "craftbukkit", "class", classname)))); + return null; + } + } + + public String getCurrentVersion() { + return this.version; + } + + public DatabaseManager getDatabaseManager() { + return this.dbManager; + } + + public String getFallbackLocale() { + return "en_US"; + } + + public int getIntConfig(String key, int defaultInt) { + FileConfiguration config = this.getConfig(); + if (config.contains(key) && config.isInt(key)) { + return config.getInt(key); + } + return defaultInt; + } + + private boolean getIsSpigot() { + try { + Package spigotPackage = Package.getPackage("org.spigotmc"); + return (spigotPackage != null); + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + } + + return false; + } + + /** + * Returns the max length of a game in seconds + * + * @return The length of the game in seconds + */ + public int getMaxLength() { + if (this.getConfig().contains("gamelength") && this.getConfig().isInt("gamelength")) { + return this.getConfig().getInt("gamelength") * 60; + } + + // fallback time is 60 minutes + return 60 * 60; + } + + public Package getMinecraftPackage() { + try { + if (this.minecraft == null) { + return Package.getPackage("net.minecraft.server." + + Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3]); + } else { + return this.minecraft; + } + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + this.getServer().getConsoleSender().sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel._l(this.getServer().getConsoleSender(), "errors.packagenotfound", + ImmutableMap.of("package", "minecraft server")))); + return null; + } + } + + @SuppressWarnings("rawtypes") + public Class getMinecraftServerClass(String classname) { + try { + if (this.minecraft == null) { + this.minecraft = this.getMinecraftPackage(); + } + + return Class.forName(this.minecraft.getName() + "." + classname); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + this.getServer().getConsoleSender() + .sendMessage(ChatWriter.pluginMessage( + ChatColor.RED + BedwarsRel + ._l(this.getServer().getConsoleSender(), "errors.classnotfound", + ImmutableMap.of("package", "minecraft server", "class", classname)))); + return null; + } + } + + public String getMissingHoloDependency() { + // 全息功能已禁用 + return null; + } + + public PlayerStatisticManager getPlayerStatisticManager() { + return this.playerStatisticManager; + } + + public Integer getRespawnProtectionTime() { + FileConfiguration config = this.getConfig(); + if (config.contains("respawn-protection") && config.isInt("respawn-protection")) { + return config.getInt("respawn-protection"); + } + return 0; + } + + public ScoreboardManager getScoreboardManager() { + return this.scoreboardManager; + } + + public String getSenderLocale(CommandSender commandSender) { + String locale = BedwarsRel.getInstance().getConfig().getString("locale"); + if (commandSender instanceof Player) { + Player player = (Player) commandSender; + if (BedwarsRel.getInstance().getPlayerLocales().containsKey(player.getUniqueId())) { + locale = BedwarsRel.getInstance().getPlayerLocales().get(player.getUniqueId()); + } + } + return locale; + } + + @SuppressWarnings("unchecked") + public ArrayList getSetupCommands() { + ArrayList commands = (ArrayList) this.commands.clone(); + commands = this.filterCommandsByPermission(commands, "setup"); + + return commands; + } + + public FileConfiguration getShopConfig() { + return this.shopConfig; + } + + public StorageType getStatisticStorageType() { + String storage = this.getStringConfig("statistics.storage", "yaml"); + return StorageType.getByName(storage); + } + + public String getStringConfig(String key, String defaultString) { + FileConfiguration config = this.getConfig(); + if (config.contains(key) && config.isString(key)) { + return config.getString(key); + } + return defaultString; + } + + public Class getVersionRelatedClass(String className) { + try { + Class clazz = Class.forName( + "io.github.bedwarsrel.com." + this.getCurrentVersion().toLowerCase() + "." + className); + return clazz; + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + this.getServer().getConsoleSender() + .sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + "Couldn't find version related class io.github.bedwarsrel.com." + + this.getCurrentVersion() + "." + className)); + } + + return null; + } + + public String getYamlDump(YamlConfiguration config) { + try { + String fullstring = config.saveToString(); + String endstring = fullstring; + endstring = Utils.unescape_perl_string(fullstring); + + return endstring; + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + ex.printStackTrace(); + } + + return null; + } + + public boolean isBreakableType(Material type) { + return ((BedwarsRel.getInstance().getConfig().getBoolean("breakable-blocks.use-as-blacklist") + && !this.breakableTypes.contains(type)) + || (!BedwarsRel.getInstance().getConfig().getBoolean("breakable-blocks.use-as-blacklist") + && this.breakableTypes.contains(type))); + } + + public boolean isBungee() { + return this.getConfig().getBoolean("bungeecord.enabled"); + } + + public boolean isHologramsEnabled() { + // 全息功能已禁用 + return false; + } + + public boolean isLocationSerializable() { + if (BedwarsRel.locationSerializable == null) { + try { + Location.class.getMethod("serialize"); + BedwarsRel.locationSerializable = true; + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + BedwarsRel.locationSerializable = false; + } + } + + return BedwarsRel.locationSerializable; + } + + public boolean isMineshafterPresent() { + try { + Class.forName("mineshafter.MineServer"); + return true; + } catch (Exception e) { + // NO ERROR + return false; + } + } + + public boolean isSpigot() { + return this.isSpigot; + } + + public void loadConfigInUTF() { + File configFile = new File(this.getDataFolder(), "config.yml"); + if (!configFile.exists()) { + return; + } + + try { + BufferedReader reader = + new BufferedReader(new InputStreamReader(new FileInputStream(configFile), "UTF-8")); + this.getConfig().load(reader); + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + } + + if (this.getConfig() == null) { + return; + } + + // load breakable materials + this.breakableTypes = new ArrayList(); + for (String material : this.getConfig().getStringList("breakable-blocks.list")) { + if (material.equalsIgnoreCase("none")) { + continue; + } + + Material mat = Utils.parseMaterial(material); + if (mat == null) { + continue; + } + + if (this.breakableTypes.contains(mat)) { + continue; + } + + this.breakableTypes.add(mat); + } + } + + private void loadDatabase() { + if (!this.getBooleanConfig("statistics.enabled", false) + || !"database".equals(this.getStringConfig("statistics.storage", "yaml"))) { + return; + } + + this.getServer().getConsoleSender() + .sendMessage(ChatWriter.pluginMessage(ChatColor.GREEN + "Initialize database ...")); + + String host = this.getStringConfig("database.host", null); + int port = this.getIntConfig("database.port", 3306); + String user = this.getStringConfig("database.user", null); + String password = this.getStringConfig("database.password", null); + String db = this.getStringConfig("database.db", null); + String tablePrefix = this.getStringConfig("database.table-prefix", "bw_"); + + if (host == null || user == null || password == null || db == null) { + return; + } + + this.dbManager = new DatabaseManager(host, port, user, password, db, tablePrefix); + this.dbManager.initialize(); + + this.getServer().getConsoleSender() + .sendMessage(ChatWriter.pluginMessage(ChatColor.GREEN + "Update database ...")); + + this.getServer().getConsoleSender() + .sendMessage(ChatWriter.pluginMessage(ChatColor.GREEN + "Done.")); + } + + private void loadLocalization(String locale) { + if (!this.localization.containsKey(locale)) { + this.localization.put(locale, new LocalizationConfig(locale)); + } + } + + public void loadShop() { + File file = new File(BedwarsRel.getInstance().getDataFolder(), "shop.yml"); + if (!file.exists()) { + // create default file + this.saveResource("shop.yml", false); + + // wait until it's really saved + try { + Thread.sleep(100); + } catch (InterruptedException e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + } + } + + this.shopConfig = new YamlConfiguration(); + + try { + BufferedReader reader = + new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8")); + this.shopConfig.load(reader); + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + this.getServer().getConsoleSender().sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + "Couldn't load shop! Error in parsing shop!")); + e.printStackTrace(); + } + } + + private void loadStatistics() { + this.playerStatisticManager = new PlayerStatisticManager(); + this.playerStatisticManager.initialize(); + } + + private String loadVersion() { + String packName = Bukkit.getServer().getClass().getPackage().getName(); + return packName.substring(packName.lastIndexOf('.') + 1); + } + + public boolean metricsEnabled() { + if (this.getConfig().contains("plugin-metrics") + && this.getConfig().isBoolean("plugin-metrics")) { + return this.getConfig().getBoolean("plugin-metrics"); + } + + return false; + } + + @Override + public void onDisable() { + this.stopTimeListener(); + this.gameManager.unloadGames(); + } + + @Override + public void onEnable() { + BedwarsRel.instance = this; + + if (this.getDescription().getVersion().contains("-SNAPSHOT") + && System.getProperty("IReallyKnowWhatIAmDoingISwear") == null) { + this.getServer().getConsoleSender().sendMessage(ChatWriter.pluginMessage(ChatColor.RED + "*** Warning, you are using a development build ***")); + this.getServer().getConsoleSender().sendMessage(ChatWriter.pluginMessage(ChatColor.RED + "*** You will get NO support regarding this build ***")); + this.getServer().getConsoleSender().sendMessage(ChatWriter.pluginMessage(ChatColor.RED + "*** Please download a stable build from https://github.com/BedwarsRel/BedwarsRel/releases ***")); + this.getServer().getConsoleSender().sendMessage(ChatWriter.pluginMessage(ChatColor.RED + "*** Server will start in 10 seconds ***")); + try { + Thread.sleep(TimeUnit.SECONDS.toMillis(10)); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + this.registerBugsnag(); + + // register classes + this.registerConfigurationClasses(); + + // save default config + this.saveDefaultConfig(); + this.loadConfigInUTF(); + + this.getConfig().options().copyDefaults(true); + this.getConfig().options().copyHeader(true); + + this.craftbukkit = this.getCraftBukkit(); + this.minecraft = this.getMinecraftPackage(); + this.version = this.loadVersion(); + + ConfigUpdater configUpdater = new ConfigUpdater(); + configUpdater.addConfigs(); + this.saveConfiguration(); + this.loadConfigInUTF(); + + if (this.getBooleanConfig("send-error-data", true) && this.bugsnag != null) { + this.enableBugsnag(); + } else { + this.disableBugsnag(); + } + + this.loadShop(); + + this.isSpigot = this.getIsSpigot(); + this.loadDatabase(); + + this.registerCommands(); + this.registerListener(); + + this.gameManager = new GameManager(); + + // bungeecord + if (BedwarsRel.getInstance().isBungee()) { + this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord"); + } + + this.loadStatistics(); + this.loadLocalization(this.getConfig().getString("locale")); + + this.checkUpdates(); + + // Loading + this.scoreboardManager = Bukkit.getScoreboardManager(); + this.gameManager.loadGames(); + this.startTimeListener(); + this.startMetricsIfEnabled(); + } + + private void registerBugsnag() { + try { + this.bugsnag = new Bugsnag("c23593c1e2f40fc0da36564af1bd00c6"); + this.bugsnag.setAppVersion(SupportData.getPluginVersion()); + this.bugsnag.setProjectPackages("io.github.bedwarsrel"); + this.bugsnag.setReleaseStage(SupportData.getPluginVersionType()); + } catch (Exception e) { + this.getServer().getConsoleSender().sendMessage( + ChatWriter.pluginMessage(ChatColor.GOLD + "Couldn't register Bugsnag.")); + } + } + + private void registerCommands() { + BedwarsCommandExecutor executor = new BedwarsCommandExecutor(this); + + this.commands.add(new HelpCommand(this)); + this.commands.add(new SetSpawnerCommand(this)); + this.commands.add(new AddGameCommand(this)); + this.commands.add(new StartGameCommand(this)); + this.commands.add(new StopGameCommand(this)); + this.commands.add(new SetRegionCommand(this)); + this.commands.add(new AddTeamCommand(this)); + this.commands.add(new SaveGameCommand(this)); + this.commands.add(new JoinGameCommand(this)); + this.commands.add(new SetSpawnCommand(this)); + this.commands.add(new SetLobbyCommand(this)); + this.commands.add(new LeaveGameCommand(this)); + this.commands.add(new SetTargetCommand(this)); + this.commands.add(new SetBedCommand(this)); + this.commands.add(new ReloadCommand(this)); + this.commands.add(new SetMainLobbyCommand(this)); + this.commands.add(new ListGamesCommand(this)); + this.commands.add(new RegionNameCommand(this)); + this.commands.add(new RemoveTeamCommand(this)); + this.commands.add(new RemoveGameCommand(this)); + this.commands.add(new ClearSpawnerCommand(this)); + this.commands.add(new GameTimeCommand(this)); + this.commands.add(new StatsCommand(this)); + this.commands.add(new SetMinPlayersCommand(this)); + this.commands.add(new SetGameBlockCommand(this)); + this.commands.add(new SetBuilderCommand(this)); + this.commands.add(new SetAutobalanceCommand(this)); + this.commands.add(new KickCommand(this)); + this.commands.add(new AddTeamJoinCommand(this)); + this.commands.add(new DebugPasteCommand(this)); + this.commands.add(new ItemsPasteCommand(this)); + this.commands.add(new AutoConnectCommand(this)); + this.getCommand("bw").setExecutor(executor); + } + + private void registerConfigurationClasses() { + ConfigurationSerialization.registerClass(ResourceSpawner.class, "RessourceSpawner"); + ConfigurationSerialization.registerClass(Team.class, "Team"); + ConfigurationSerialization.registerClass(PlayerStatistic.class, "PlayerStatistic"); + } + + private void registerListener() { + new WeatherListener(); + new BlockListener(); + new PlayerListener(); + if (!BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_8")) { + new Player19Listener(); + } + new HangingListener(); + new EntityListener(); + new ServerListener(); + new SignListener(); + new ChunkListener(); + + if (this.isSpigot()) { + new PlayerSpigotListener(); + } + + SpecialItem.loadSpecials(); + } + + public void reloadLocalization() { + this.localization = new HashMap<>(); + this.loadLocalization(this.getConfig().getString("locale")); + } + + public void saveConfiguration() { + File file = new File(BedwarsRel.getInstance().getDataFolder(), "config.yml"); + try { + file.mkdirs(); + + String data = this.getYamlDump((YamlConfiguration) this.getConfig()); + + FileOutputStream stream = new FileOutputStream(file); + OutputStreamWriter writer = new OutputStreamWriter(stream, "UTF-8"); + + try { + writer.write(data); + } finally { + writer.close(); + stream.close(); + } + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + ex.printStackTrace(); + } + } + + public boolean spectationEnabled() { + if (this.getConfig().contains("spectation-enabled") + && this.getConfig().isBoolean("spectation-enabled")) { + return this.getConfig().getBoolean("spectation-enabled"); + } + return true; + } + + public void startMetricsIfEnabled() { + if (this.metricsEnabled()) { + new BStatsMetrics(this); + try { + McStatsMetrics mcStatsMetrics = new McStatsMetrics(this); + mcStatsMetrics.start(); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + this.getServer().getConsoleSender().sendMessage(ChatWriter + .pluginMessage(ChatColor.RED + "Metrics are enabled, but couldn't send data!")); + } + } + } + + private void startTimeListener() { + this.timeTask = this.getServer().getScheduler().runTaskTimer(this, new Runnable() { + + @Override + public void run() { + for (Game g : BedwarsRel.getInstance().getGameManager().getGames()) { + if (g.getState() == GameState.RUNNING) { + g.getRegion().getWorld().setTime(g.getTime()); + } + } + } + }, (long) 5 * 20, (long) 5 * 20); + } + + public boolean statisticsEnabled() { + return this.getBooleanConfig("statistics.enabled", false); + } + + private void stopTimeListener() { + try { + this.timeTask.cancel(); + } catch (Exception ex) { + // Timer isn't running. Just ignore. + } + + try { + this.updateChecker.cancel(); + } catch (Exception ex) { + // Timer isn't running. Just ignore. + } + } + + public boolean toMainLobby() { + if (this.getConfig().contains("endgame.mainlobby-enabled")) { + return this.getConfig().getBoolean("endgame.mainlobby-enabled"); + } + + return false; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/com/fallback/PerformRespawnRunnable.java b/common/src/main/java/io/github/bedwarsrel/com/fallback/PerformRespawnRunnable.java new file mode 100644 index 0000000..f0961d3 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/com/fallback/PerformRespawnRunnable.java @@ -0,0 +1,99 @@ +package io.github.bedwarsrel.com.fallback; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.Utils; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.List; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +public class PerformRespawnRunnable extends BukkitRunnable { + + private Player player = null; + + public PerformRespawnRunnable(Player player) { + this.player = player; + } + + private Object getPacketObject(String packetName, Class[] constructorClasses, + Object[] constructorParams) { + try { + Class clazz = BedwarsRel.getInstance().getMinecraftServerClass(packetName); + if (clazz == null) { + // TODO + } + + Constructor constr = clazz.getDeclaredConstructor(constructorClasses); + if (constr == null) { + // TODO + } + + constr.setAccessible(true); + return constr.newInstance(constructorParams); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + BedwarsRel.getInstance().getServer().getConsoleSender().sendMessage(ChatWriter.pluginMessage( + ChatColor.RED + "Couldn't catch packet class " + ChatColor.YELLOW + packetName)); + } + + return null; + } + + @Override + public void run() { + try { + Class enumClientCommand = BedwarsRel.getInstance() + .getMinecraftServerClass("EnumClientCommand"); + Class packetClass = + BedwarsRel.getInstance().getMinecraftServerClass("PacketPlayInClientCommand"); + if (enumClientCommand == null) { + for (Class clazz : packetClass.getDeclaredClasses()) { + if (clazz.getSimpleName().equals("EnumClientCommand")) { + enumClientCommand = clazz; + break; + } + } + } + + @SuppressWarnings("unchecked") + List constants = (List) Arrays.asList(enumClientCommand.getEnumConstants()); + Object respawnObject = null; + + for (Object constant : constants) { + if (constant.toString().equals("PERFORM_RESPAWN")) { + respawnObject = constant; + break; + } + } + + // Create packet instance + Object packetPlayInClientCommand = this.getPacketObject("PacketPlayInClientCommand", + new Class[]{enumClientCommand}, new Object[]{respawnObject}); + Object craftPlayer = Utils.getCraftPlayer(this.player); + Class craftPlayerClass = BedwarsRel.getInstance() + .getCraftBukkitClass("entity.CraftPlayer"); + Field playerConnectionField = craftPlayerClass.getField("playerConnection"); + playerConnectionField.setAccessible(true); + + // player connection method + Object playerConnection = playerConnectionField.get(craftPlayer); + Class playerConnectionClass = + BedwarsRel.getInstance().getMinecraftServerClass("PlayerConnection"); + Method aMethod = playerConnectionClass.getMethod("a", new Class[]{packetClass}); + aMethod.setAccessible(true); + + // invoke respawn + aMethod.invoke(playerConnection, new Object[]{packetPlayInClientCommand}); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + BedwarsRel.getInstance().getServer().getConsoleSender().sendMessage(ChatWriter + .pluginMessage(ChatColor.RED + "Plugin not compatible with your server version!")); + } + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/AddGameCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/AddGameCommand.java new file mode 100644 index 0000000..bac0125 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/AddGameCommand.java @@ -0,0 +1,77 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.Utils; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +public class AddGameCommand extends BaseCommand { + + public AddGameCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!sender.hasPermission("bw." + this.getPermission())) { + return false; + } + + Game addGame = this.getPlugin().getGameManager().addGame(args.get(0)); + String minPlayers = args.get(1); + + if (!Utils.isNumber(minPlayers)) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.minplayersmustnumber"))); + return false; + } + + if (addGame == null) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(sender, "errors.gameexists"))); + return false; + } + + int min = Integer.parseInt(minPlayers); + if (min <= 0) { + min = 1; + } + + addGame.setMinPlayers(min); + sender.sendMessage(ChatWriter.pluginMessage(ChatColor.GREEN + + BedwarsRel + ._l(sender, "success.gameadded", ImmutableMap.of("game", args.get(0).toString())))); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"name", "minplayers"}; + } + + @Override + public String getCommand() { + return "addgame"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.addgame.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.addgame.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/AddTeamCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/AddTeamCommand.java new file mode 100644 index 0000000..615fa12 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/AddTeamCommand.java @@ -0,0 +1,108 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.game.TeamColor; +import io.github.bedwarsrel.utils.ChatWriter; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +public class AddTeamCommand extends BaseCommand { + + public AddTeamCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!sender.hasPermission("bw." + this.getPermission())) { + return false; + } + + Game game = this.getPlugin().getGameManager().getGame(args.get(0)); + String name = args.get(1); + String color = args.get(2); + String maxPlayers = args.get(3); + TeamColor tColor = null; + + try { + tColor = TeamColor.valueOf(color.toUpperCase()); + } catch (Exception e) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.teamcolornotallowed"))); + return false; + } + + if (game == null) { + sender.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(sender, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return false; + } + + if (game.getState() != GameState.STOPPED) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.notwhilegamerunning"))); + return false; + } + + int playerMax = Integer.parseInt(maxPlayers); + + if (playerMax < 1 || playerMax > 24) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(sender, "errors.playeramount"))); + return false; + } + + if (name.length() < 3 || name.length() > 20) { + sender + .sendMessage( + ChatWriter + .pluginMessage(ChatColor.RED + BedwarsRel._l(sender, "errors.teamnamelength"))); + return false; + } + + if (game.getTeam(name) != null) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(sender, "errors.teamnameinuse"))); + return false; + } + + game.addTeam(name, tColor, playerMax); + sender.sendMessage(ChatWriter.pluginMessage( + ChatColor.GREEN + BedwarsRel + ._l(sender, "success.teamadded", ImmutableMap.of("team", name)))); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"game", "name", "color", "maxplayers"}; + } + + @Override + public String getCommand() { + return "addteam"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.addteam.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.addteam.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/AddTeamJoinCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/AddTeamJoinCommand.java new file mode 100644 index 0000000..0b17ce3 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/AddTeamJoinCommand.java @@ -0,0 +1,118 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.game.Team; +import io.github.bedwarsrel.game.TeamJoinMetaDataValue; +import io.github.bedwarsrel.utils.ChatWriter; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +public class AddTeamJoinCommand extends BaseCommand { + + public AddTeamJoinCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!super.hasPermission(sender)) { + return false; + } + + Player player = (Player) sender; + String team = args.get(1); + + Game game = this.getPlugin().getGameManager().getGame(args.get(0)); + if (game == null) { + player.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(sender, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return false; + } + + if (game.getState() == GameState.RUNNING) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.notwhilegamerunning"))); + return false; + } + + Team gameTeam = game.getTeam(team); + + if (gameTeam == null) { + player.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(player, "errors.teamnotfound"))); + return false; + } + + // only in lobby + if (game.getLobby() == null || !player.getWorld().equals(game.getLobby().getWorld())) { + player.sendMessage( + ChatWriter + .pluginMessage(ChatColor.RED + BedwarsRel._l(player, "errors.mustbeinlobbyworld"))); + return false; + } + + if (player.hasMetadata("bw-addteamjoin")) { + player.removeMetadata("bw-addteamjoin", BedwarsRel.getInstance()); + } + + player.setMetadata("bw-addteamjoin", new TeamJoinMetaDataValue(gameTeam)); + final Player runnablePlayer = player; + + new BukkitRunnable() { + + @Override + public void run() { + try { + if (!runnablePlayer.hasMetadata("bw-addteamjoin")) { + return; + } + + runnablePlayer.removeMetadata("bw-addteamjoin", BedwarsRel.getInstance()); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + // just ignore + } + } + }.runTaskLater(BedwarsRel.getInstance(), 20L * 10L); + + player.sendMessage( + ChatWriter + .pluginMessage( + ChatColor.GREEN + BedwarsRel._l(player, "success.selectteamjoinentity"))); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"game", "team"}; + } + + @Override + public String getCommand() { + return "addteamjoin"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.addteamjoin.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.addteamjoin.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/AutoConnectCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/AutoConnectCommand.java new file mode 100644 index 0000000..d3aa35e --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/AutoConnectCommand.java @@ -0,0 +1,102 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameCheckCode; +import io.github.bedwarsrel.game.GameManager; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.Utils; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.util.ChatPaginator; +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameCheckCode; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.utils.Utils; +import java.util.ArrayList; +import java.util.List; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.util.ChatPaginator; +import org.bukkit.util.ChatPaginator.ChatPage; +import java.util.ArrayList; + +import static org.bukkit.Bukkit.getServer; + +public class AutoConnectCommand extends BaseCommand { + + private BedwarsRel plugin = null; + + public AutoConnectCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + + + ArrayList showedGames = new ArrayList(); + List games = BedwarsRel.getInstance().getGameManager().getGames(); + for (Game game : games) { + GameCheckCode code = game.checkGame(); + if (code != GameCheckCode.OK && !sender.hasPermission("bw.setup")) { + continue; + } + + showedGames.add(game); + int players = 0; + if (game.getState() == GameState.RUNNING) { + players = game.getCurrentPlayerAmount(); + } else { + players = game.getPlayers().size(); + } +String status = game.getState().toString().toLowerCase(); + if(game.getState() == GameState.WAITING){ + sender.sendMessage(ChatColor.GREEN + "Connecting to the game lobby."); + Player player = getServer().getPlayer(sender.getName()); + String command = "bw join " + game.getName(); + player.performCommand(command); + } + } + + if (showedGames.size() == 0) { + sender.sendMessage(ChatColor.RED + "No Games :("); + } + + return true; + } + + @Override + public String[] getArguments() { + return new String[]{}; + } + + @Override + public String getCommand() { + return "autojoin"; + } + + @Override + public String getDescription() { + return "Auto connect to first lobby"; + } + + @Override + public String getName() { + return "autojoin"; + } + + @Override + public String getPermission() { + return "base"; + } + @Override + public boolean hasPermission(CommandSender sender){ + return true; + } + } diff --git a/common/src/main/java/io/github/bedwarsrel/commands/BaseCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/BaseCommand.java new file mode 100644 index 0000000..0715303 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/BaseCommand.java @@ -0,0 +1,53 @@ +package io.github.bedwarsrel.commands; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.utils.ChatWriter; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public abstract class BaseCommand implements ICommand { + + private BedwarsRel plugin = null; + + public BaseCommand(BedwarsRel plugin) { + this.plugin = plugin; + } + + @Override + public abstract boolean execute(CommandSender sender, ArrayList args); + + @Override + public abstract String[] getArguments(); + + @Override + public abstract String getCommand(); + + @Override + public abstract String getDescription(); + + @Override + public abstract String getName(); + + protected BedwarsRel getPlugin() { + return this.plugin; + } + + @Override + public boolean hasPermission(CommandSender sender) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatWriter.pluginMessage("Only players should execute this command!")); + return false; + } + + if (!sender.hasPermission("bw." + this.getPermission())) { + sender.sendMessage(ChatWriter + .pluginMessage(ChatColor.RED + "You don't have permission to execute this command!")); + return false; + } + + return true; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/ClearSpawnerCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/ClearSpawnerCommand.java new file mode 100644 index 0000000..768ae3b --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/ClearSpawnerCommand.java @@ -0,0 +1,72 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.utils.ChatWriter; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +public class ClearSpawnerCommand extends BaseCommand implements ICommand { + + public ClearSpawnerCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!sender.hasPermission("bw." + this.getPermission())) { + return false; + } + + Game game = this.getPlugin().getGameManager().getGame(args.get(0)); + if (game == null) { + sender.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(sender, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return false; + } + + if (game.getState() == GameState.RUNNING) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.notwhilegamerunning"))); + return false; + } + + game.getRessourceSpawner().clear(); + sender + .sendMessage( + ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel + ._l(sender, "success.spawnercleared"))); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"game"}; + } + + @Override + public String getCommand() { + return "clearspawner"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.clearspawner.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.clearspawner.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/DebugPasteCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/DebugPasteCommand.java new file mode 100644 index 0000000..6c0c036 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/DebugPasteCommand.java @@ -0,0 +1,133 @@ +package io.github.bedwarsrel.commands; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.HastebinUtility; +import io.github.bedwarsrel.utils.SupportData; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Date; +import net.md_5.bungee.api.ChatColor; +import org.bukkit.command.CommandSender; + +public class DebugPasteCommand extends BaseCommand implements ICommand { + + public DebugPasteCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(final CommandSender sender, ArrayList args) { + if (!super.hasPermission(sender) && !sender.isOp()) { + return false; + } + + BedwarsRel.getInstance().getServer().getScheduler() + .runTaskAsynchronously(BedwarsRel.getInstance(), + new Runnable() { + @Override + public void run() { + try { + String configYML = HastebinUtility.upload(SupportData.getConfigFile()); + String shopYML = HastebinUtility.upload(SupportData.getShopConfigFile()); + String latestLOG; + try { + latestLOG = HastebinUtility + .upload(new File(BedwarsRel.getInstance().getDataFolder(), + "../../logs/latest.log")); + } catch (IOException ignored) { + sender.sendMessage( + ChatWriter + .pluginMessage("&clatest.log is too big to be pasted, will ignore")); + latestLOG = "too big :("; + } + StringBuilder b = new StringBuilder(); + b.append( + "# Welcome to this paste\n# It is meant to provide us with better information about your problem\n\n# We will start with some informational files\n"); + b.append("files:\n"); + b.append(" config_yml: ").append("\"" + configYML + "\"").append('\n'); + b.append(" shop_yml: ").append("\"" + shopYML + "\"").append('\n'); + b.append(" latest_log: ").append("\"" + latestLOG + "\"").append('\n'); + b.append("\n# General Information\n"); + b.append("version:\n"); + b.append(" plugin: ") + .append("\"" + BedwarsRel.getInstance().getDescription().getVersion() + "\""); + if (SupportData.getPluginVersionArray().length == 3 + && !SupportData.getPluginVersionArray()[1].equals("unknown")) { + b.append("(https://github.com/BedwarsRel/BedwarsRel/tree/" + + SupportData.getPluginVersionArray()[1] + ")"); + } + b.append('\n'); + b.append(" server: ").append("\"" + SupportData.getServerVersion() + "\"") + .append('\n'); + b.append(" bukkit: ").append("\"" + SupportData.getBukkitVersion() + "\"") + .append('\n'); + b.append("online_mode: ") + .append(BedwarsRel.getInstance().getServer().getOnlineMode()) + .append('\n'); + b.append("plugins(" + + BedwarsRel.getInstance().getServer().getPluginManager().getPlugins().length + + "):"); + for (String plugin : SupportData.getPlugins()) { + b.append("\n ").append("\"" + plugin + "\""); + } + b.append("\n\n# JVM\n"); + Runtime runtime = Runtime.getRuntime(); + b.append("memory:\n"); + b.append(" free: ").append(runtime.freeMemory() / 1000000).append(" MB\n"); + b.append(" max: ").append(runtime.maxMemory() / 1000000).append(" MB\n"); + b.append("java:\n"); + b.append(" specification:\n version: \"") + .append(System.getProperty("java.specification.version")).append("\"\n"); + b.append(" vendor: \"").append(System.getProperty("java.vendor")).append("\"\n"); + b.append(" version: \"").append(System.getProperty("java.version")) + .append("\"\n"); + b.append("os:\n"); + b.append(" arch: \"").append(System.getProperty("os.arch")).append("\"\n"); + b.append(" name: \"").append(System.getProperty("os.name")).append("\"\n"); + b.append(" version: \"").append(System.getProperty("os.version")) + .append("\"\n\n"); + b.append("# Date\n"); + b.append("date: ").append(new Date()) + .append('\n'); + b.append("\n# Please add a link to this file to your bug report!"); + b.append("\n# https://github.com/BedwarsRel/BedwarsRel/issues"); + + String link = HastebinUtility.upload(b.toString()); + sender.sendMessage(ChatWriter + .pluginMessage(ChatColor.GREEN + "Success! Support data pasted on " + link)); + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{}; + } + + @Override + public String getCommand() { + return "debugpaste"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.debugpaste.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.debugpaste.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/GameTimeCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/GameTimeCommand.java new file mode 100644 index 0000000..1d2f1bb --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/GameTimeCommand.java @@ -0,0 +1,91 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.Utils; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class GameTimeCommand extends BaseCommand implements ICommand { + + public GameTimeCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!sender.hasPermission("bw." + this.getPermission())) { + return false; + } + + Player player = (Player) sender; + + Game game = this.getPlugin().getGameManager().getGame(args.get(0)); + String gametime = args.get(1).toString(); + + if (game == null) { + player.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(sender, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return false; + } + + if (game.getState() == GameState.RUNNING) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.notwhilegamerunning"))); + return false; + } + + if (!Utils.isNumber(gametime) && !"day".equals(gametime) && !"night".equals(gametime)) { + player.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(player, "errors.timeincorrect"))); + return true; + } + + int time = 1000; + if ("day".equals(gametime)) { + time = 6000; + } else if ("night".equals(gametime)) { + time = 18000; + } else { + time = Integer.valueOf(gametime); + } + + game.setTime(time); + player.sendMessage( + ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel._l(player, "success.gametimeset"))); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"game", "time"}; + } + + @Override + public String getCommand() { + return "gametime"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.gametime.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.gametime.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/HelpCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/HelpCommand.java new file mode 100644 index 0000000..32e6029 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/HelpCommand.java @@ -0,0 +1,126 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.utils.Utils; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.util.ChatPaginator; +import org.bukkit.util.ChatPaginator.ChatPage; + +public class HelpCommand extends BaseCommand { + + public HelpCommand(BedwarsRel plugin) { + super(plugin); + } + + private void appendCommand(BaseCommand command, StringBuilder sb) { + String arg = ""; + for (String argument : command.getArguments()) { + arg = arg + " {" + argument + "}"; + } + + if (command.getCommand().equals("help")) { + arg = " {page?}"; + } else if (command.getCommand().equalsIgnoreCase("list")) { + arg = " {page?}"; + } else if (command.getCommand().equalsIgnoreCase("stats")) { + arg = " {player?}"; + } else if (command.getCommand().equalsIgnoreCase("reload")) { + arg = " {config;locale;shop;games;all?}"; + } else if (command.getCommand().equalsIgnoreCase("stop")) { + arg = " {game?}"; + } + + sb.append(ChatColor.YELLOW + "/" + "bw" + + " " + command.getCommand() + arg + " - " + command.getDescription() + "\n"); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!sender.hasPermission("bw." + this.getPermission())) { + return false; + } + + String paginate; + int page = 1; + + if (args.size() == 0 || args.size() > 1) { + paginate = "1"; + } else { + paginate = args.get(0); + if (paginate.isEmpty()) { + paginate = "1"; + } + + if (!Utils.isNumber(paginate)) { + paginate = "1"; + } + } + + page = Integer.parseInt(paginate); + StringBuilder sb = new StringBuilder(); + sender.sendMessage(ChatColor.GREEN + "---------- Bedwars Help ----------"); + + ArrayList baseCommands = BedwarsRel.getInstance().getBaseCommands(); + ArrayList setupCommands = BedwarsRel.getInstance().getSetupCommands(); + ArrayList kickCommands = BedwarsRel.getInstance().getCommandsByPermission("kick"); + + for (BaseCommand command : baseCommands) { + this.appendCommand(command, sb); + } + + if (sender.hasPermission("bw.kick")) { + for (BaseCommand command : kickCommands) { + this.appendCommand(command, sb); + } + } + + if (sender.hasPermission("bw.setup")) { + sb.append(ChatColor.BLUE + "------- Bedwars Admin Help -------\n"); + + for (BaseCommand command : setupCommands) { + this.appendCommand(command, sb); + } + } + + ChatPage chatPage = ChatPaginator.paginate(sb.toString(), page); + for (String line : chatPage.getLines()) { + sender.sendMessage(line); + } + sender.sendMessage(ChatColor.GREEN + "---------- " + + BedwarsRel._l(sender, "default.pages", + ImmutableMap.of("current", String.valueOf(chatPage.getPageNumber()), "max", + String.valueOf(chatPage.getTotalPages()))) + + " ----------"); + + return true; + } + + @Override + public String[] getArguments() { + return new String[]{}; + } + + @Override + public String getCommand() { + return "help"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.help.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.help.name"); + } + + @Override + public String getPermission() { + return "base"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/ICommand.java b/common/src/main/java/io/github/bedwarsrel/commands/ICommand.java new file mode 100644 index 0000000..9b24abf --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/ICommand.java @@ -0,0 +1,22 @@ +package io.github.bedwarsrel.commands; + +import java.util.ArrayList; +import org.bukkit.command.CommandSender; + +public interface ICommand { + + public boolean execute(CommandSender sender, ArrayList args); + + public String[] getArguments(); + + public String getCommand(); + + public String getDescription(); + + public String getName(); + + public String getPermission(); + + public boolean hasPermission(CommandSender sender); + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/ItemsPasteCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/ItemsPasteCommand.java new file mode 100644 index 0000000..842d110 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/ItemsPasteCommand.java @@ -0,0 +1,98 @@ +package io.github.bedwarsrel.commands; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.HastebinUtility; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Map; +import net.md_5.bungee.api.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public class ItemsPasteCommand extends BaseCommand implements ICommand { + + public ItemsPasteCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(final CommandSender sender, ArrayList args) { + if (!super.hasPermission(sender) && !sender.isOp()) { + return false; + } + + if (!(sender instanceof Player)) { + return false; + } + + final Player player = (Player) sender; + BedwarsRel.getInstance().getServer().getScheduler() + .runTaskAsynchronously(BedwarsRel.getInstance(), + new Runnable() { + @Override + public void run() { + try { + + ItemStack[] playerItems = player.getInventory().getContents(); + + String uploadConfigFile; + + ArrayList> itemsList = new ArrayList<>(); + for (ItemStack item : playerItems) { + if (item == null) { + continue; + } + itemsList.add(item.serialize()); + } + + YamlConfiguration uploadConfig = new YamlConfiguration(); + uploadConfig.set("sampleItems", itemsList); + + StringBuilder b = new StringBuilder(); + b.append( + "# Welcome to this paste\n# This might help you to better add your custom items to BedwarsRel's shop.yml\n\n"); + b.append(uploadConfig.saveToString()); + b.append("\n"); + b.append( + "\n# This is not a working shop - it's just a list of items you can add to your shop!"); + + String link = HastebinUtility.upload(b.toString()); + sender.sendMessage(ChatWriter + .pluginMessage(ChatColor.GREEN + "Success! Items pasted on " + link)); + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{}; + } + + @Override + public String getCommand() { + return "itemspaste"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.itemspaste.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.itemspaste.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/JoinGameCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/JoinGameCommand.java new file mode 100644 index 0000000..b7ea4f7 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/JoinGameCommand.java @@ -0,0 +1,97 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.Utils; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class JoinGameCommand extends BaseCommand { + + public JoinGameCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!super.hasPermission(sender)) { + return false; + } + + Player player = (Player) sender; + Game game = this.getPlugin().getGameManager().getGame(args.get(0)); + Game gameOfPlayer = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (gameOfPlayer != null) { + if (gameOfPlayer.getState() == GameState.RUNNING) { + sender.sendMessage( + ChatWriter + .pluginMessage(ChatColor.RED + BedwarsRel._l(sender, "errors.notwhileingame"))); + return false; + } + + if (gameOfPlayer.getState() == GameState.WAITING) { + gameOfPlayer.playerLeave(player, false); + } + } + + if (game == null) { + if (!args.get(0).equalsIgnoreCase("random")) { + sender.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(sender, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return true; + } + + ArrayList games = new ArrayList<>(); + for (Game g : this.getPlugin().getGameManager().getGames()) { + if (g.getState() == GameState.WAITING) { + games.add(g); + } + } + if (games.size() == 0) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(sender, "errors.nofreegames"))); + return true; + } + game = games.get(Utils.randInt(0, games.size() - 1)); + } + + if (game.playerJoins(player)) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel._l(sender, "success.joined"))); + } + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"game"}; + } + + @Override + public String getCommand() { + return "join"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.join.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.join.name"); + } + + @Override + public String getPermission() { + return "base"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/KickCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/KickCommand.java new file mode 100644 index 0000000..b240f91 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/KickCommand.java @@ -0,0 +1,73 @@ +package io.github.bedwarsrel.commands; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.utils.ChatWriter; +import java.util.ArrayList; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class KickCommand extends BaseCommand implements ICommand { + + public KickCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!super.hasPermission(sender) && !sender.isOp()) { + return false; + } + + Player player = (Player) sender; + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + // find player + Player kickPlayer = BedwarsRel.getInstance().getServer().getPlayer(args.get(0).toString()); + + if (game == null) { + player + .sendMessage(ChatWriter.pluginMessage(BedwarsRel._l(player, "errors.notingameforkick"))); + return true; + } + + if (kickPlayer == null || !kickPlayer.isOnline()) { + player.sendMessage(ChatWriter.pluginMessage(BedwarsRel._l(player, "errors.playernotfound"))); + return true; + } + + if (!game.isInGame(kickPlayer)) { + player.sendMessage(ChatWriter.pluginMessage(BedwarsRel._l(player, "errors.playernotingame"))); + return true; + } + + game.playerLeave(kickPlayer, true); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"player"}; + } + + @Override + public String getCommand() { + return "kick"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.kick.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.kick.name"); + } + + @Override + public String getPermission() { + return "kick"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/LeaveGameCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/LeaveGameCommand.java new file mode 100644 index 0000000..d39ac3e --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/LeaveGameCommand.java @@ -0,0 +1,57 @@ +package io.github.bedwarsrel.commands; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import java.util.ArrayList; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class LeaveGameCommand extends BaseCommand { + + public LeaveGameCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!super.hasPermission(sender)) { + return false; + } + + Player player = (Player) sender; + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return true; + } + + game.playerLeave(player, false); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{}; + } + + @Override + public String getCommand() { + return "leave"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.leave.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.leave.name"); + } + + @Override + public String getPermission() { + return "base"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/ListGamesCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/ListGamesCommand.java new file mode 100644 index 0000000..5ba78ef --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/ListGamesCommand.java @@ -0,0 +1,122 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameCheckCode; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.utils.Utils; +import java.util.ArrayList; +import java.util.List; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.util.ChatPaginator; +import org.bukkit.util.ChatPaginator.ChatPage; + +public class ListGamesCommand extends BaseCommand { + + public ListGamesCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!sender.hasPermission("bw." + this.getPermission())) { + return false; + } + + String paginate; + int page = 1; + ArrayList showedGames = new ArrayList(); + + if (args != null) { + if (args.size() == 0 || args.size() > 1) { + paginate = "1"; + } else { + paginate = args.get(0); + if (paginate.isEmpty()) { + paginate = "1"; + } + + if (!Utils.isNumber(paginate)) { + paginate = "1"; + } + } + } else { + paginate = "1"; + } + + page = Integer.parseInt(paginate); + StringBuilder sb = new StringBuilder(); + sender.sendMessage(ChatColor.GREEN + "---------- Bedwars Games ----------"); + + List games = BedwarsRel.getInstance().getGameManager().getGames(); + for (Game game : games) { + GameCheckCode code = game.checkGame(); + if (code != GameCheckCode.OK && !sender.hasPermission("bw.setup")) { + continue; + } + + showedGames.add(game); + int players = 0; + if (game.getState() == GameState.RUNNING) { + players = game.getCurrentPlayerAmount(); + } else { + players = game.getPlayers().size(); + } + + sb.append(ChatColor.YELLOW + + ((code != GameCheckCode.OK) ? ChatColor.RED + game.getName() + ChatColor.YELLOW + : game.getName()) + + " - " + game.getRegion().getName() + " - " + + BedwarsRel._l(sender, "sign.gamestate." + game.getState().toString().toLowerCase()) + + ChatColor.YELLOW + + " - " + BedwarsRel._l(sender, "sign.players") + ": " + ChatColor.WHITE + "[" + + ChatColor.YELLOW + + players + ChatColor.WHITE + "/" + ChatColor.YELLOW + game.getMaxPlayers() + + ChatColor.WHITE + "]\n"); + } + + if (showedGames.size() == 0) { + sb.append(ChatColor.RED + BedwarsRel._l(sender, "errors.nogames")); + } + + ChatPage chatPage = ChatPaginator.paginate(sb.toString(), page); + for (String line : chatPage.getLines()) { + sender.sendMessage(line); + } + sender.sendMessage(ChatColor.GREEN + "---------- " + + BedwarsRel._l(sender, "default.pages", + ImmutableMap.of("current", String.valueOf(chatPage.getPageNumber()), "max", + String.valueOf(chatPage.getTotalPages()))) + + " ----------"); + + return true; + } + + @Override + public String[] getArguments() { + return new String[]{}; + } + + @Override + public String getCommand() { + return "list"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.list.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.list.name"); + } + + @Override + public String getPermission() { + return "base"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/RegionNameCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/RegionNameCommand.java new file mode 100644 index 0000000..8bfdf1a --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/RegionNameCommand.java @@ -0,0 +1,84 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.utils.ChatWriter; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class RegionNameCommand extends BaseCommand implements ICommand { + + public RegionNameCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!sender.hasPermission("bw." + this.getPermission())) { + return false; + } + + Player player = (Player) sender; + + Game game = this.getPlugin().getGameManager().getGame(args.get(0)); + String name = args.get(1).toString(); + + if (game == null) { + player.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(sender, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return false; + } + + if (game.getState() == GameState.RUNNING) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.notwhilegamerunning"))); + return false; + } + + if (name.length() > 15) { + player.sendMessage( + ChatWriter + .pluginMessage(ChatColor.RED + BedwarsRel._l(player, "errors.toolongregionname"))); + return true; + } + + game.setRegionName(name); + player + .sendMessage( + ChatWriter + .pluginMessage(ChatColor.GREEN + BedwarsRel._l(player, "success.regionnameset"))); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"game", "name"}; + } + + @Override + public String getCommand() { + return "regionname"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.regionname.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.regionname.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/ReloadCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/ReloadCommand.java new file mode 100644 index 0000000..16fec96 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/ReloadCommand.java @@ -0,0 +1,106 @@ +package io.github.bedwarsrel.commands; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.updater.ConfigUpdater; +import io.github.bedwarsrel.utils.ChatWriter; +import java.io.File; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +public class ReloadCommand extends BaseCommand { + + public ReloadCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!sender.hasPermission(this.getPermission())) { + return false; + } + + File config = new File(BedwarsRel.getInstance().getDataFolder(), "config.yml"); + String command = ""; + + if (args.size() > 0) { + command = args.get(0); + } else { + command = "all"; + } + + if (command.equalsIgnoreCase("all")) { + // save default config + if (!config.exists()) { + BedwarsRel.getInstance().saveDefaultConfig(); + } + + BedwarsRel.getInstance().loadConfigInUTF(); + + BedwarsRel.getInstance().getConfig().options().copyDefaults(true); + BedwarsRel.getInstance().getConfig().options().copyHeader(true); + + ConfigUpdater configUpdater = new ConfigUpdater(); + configUpdater.addConfigs(); + BedwarsRel.getInstance().saveConfiguration(); + BedwarsRel.getInstance().loadConfigInUTF(); + BedwarsRel.getInstance().loadShop(); + + BedwarsRel.getInstance().reloadLocalization(); + BedwarsRel.getInstance().getGameManager().reloadGames(); + } else if (command.equalsIgnoreCase("shop")) { + BedwarsRel.getInstance().loadShop(); + } else if (command.equalsIgnoreCase("games")) { + BedwarsRel.getInstance().getGameManager().reloadGames(); + } else if (command.equalsIgnoreCase("config")) { + // save default config + if (!config.exists()) { + BedwarsRel.getInstance().saveDefaultConfig(); + } + + BedwarsRel.getInstance().loadConfigInUTF(); + + BedwarsRel.getInstance().getConfig().options().copyDefaults(true); + BedwarsRel.getInstance().getConfig().options().copyHeader(true); + + ConfigUpdater configUpdater = new ConfigUpdater(); + configUpdater.addConfigs(); + BedwarsRel.getInstance().saveConfiguration(); + BedwarsRel.getInstance().loadConfigInUTF(); + } else if (command.equalsIgnoreCase("locale")) { + BedwarsRel.getInstance().reloadLocalization(); + } else { + return false; + } + + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel._l(sender, "success.reloadconfig"))); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{}; + } + + @Override + public String getCommand() { + return "reload"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.reload.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.reload.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/RemoveGameCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/RemoveGameCommand.java new file mode 100644 index 0000000..9d67475 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/RemoveGameCommand.java @@ -0,0 +1,72 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.utils.ChatWriter; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +public class RemoveGameCommand extends BaseCommand { + + public RemoveGameCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!sender.hasPermission("bw." + this.getPermission())) { + return false; + } + + Game game = this.getPlugin().getGameManager().getGame(args.get(0)); + + if (game == null) { + sender.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(sender, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return false; + } + + if (game.getState() == GameState.RUNNING) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.notwhilegamerunning"))); + return false; + } + + BedwarsRel.getInstance().getGameManager().unloadGame(game); + BedwarsRel.getInstance().getGameManager().removeGame(game); + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel._l(sender, "success.gameremoved"))); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"game"}; + } + + @Override + public String getCommand() { + return "removegame"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.removegame.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.removegame.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/RemoveTeamCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/RemoveTeamCommand.java new file mode 100644 index 0000000..84b6d5a --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/RemoveTeamCommand.java @@ -0,0 +1,80 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.game.Team; +import io.github.bedwarsrel.utils.ChatWriter; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +public class RemoveTeamCommand extends BaseCommand { + + public RemoveTeamCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!sender.hasPermission("bw." + this.getPermission())) { + return false; + } + + Game game = this.getPlugin().getGameManager().getGame(args.get(0)); + String name = args.get(1); + + if (game == null) { + sender.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(sender, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return false; + } + + if (game.getState() != GameState.STOPPED) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.notwhilegamerunning"))); + return false; + } + + Team theTeam = game.getTeam(name); + if (theTeam == null) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(sender, "errors.teamnotfound"))); + return false; + } + + game.removeTeam(theTeam); + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel._l(sender, "success.teamremoved"))); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"game", "name"}; + } + + @Override + public String getCommand() { + return "removeteam"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.removeteam.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.removeteam.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/SaveGameCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/SaveGameCommand.java new file mode 100644 index 0000000..c44d043 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/SaveGameCommand.java @@ -0,0 +1,74 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.utils.ChatWriter; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +public class SaveGameCommand extends BaseCommand implements ICommand { + + public SaveGameCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!sender.hasPermission("bw." + this.getPermission())) { + return false; + } + + Game game = this.getPlugin().getGameManager().getGame(args.get(0)); + if (game == null) { + sender.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(sender, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return false; + } + + if (game.getState() == GameState.RUNNING) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.notwhilegamerunning"))); + return false; + } + + if (!game.saveGame(sender, true)) { + return false; + } + + sender + .sendMessage(ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel + ._l(sender, "success.saved"))); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"game"}; + } + + @Override + public String getCommand() { + return "save"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.save.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.save.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/SetAutobalanceCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/SetAutobalanceCommand.java new file mode 100644 index 0000000..dced2ad --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/SetAutobalanceCommand.java @@ -0,0 +1,99 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.utils.ChatWriter; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class SetAutobalanceCommand extends BaseCommand implements ICommand { + + public SetAutobalanceCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!sender.hasPermission("bw." + this.getPermission())) { + return false; + } + + Player player = (Player) sender; + + Game game = this.getPlugin().getGameManager().getGame(args.get(0)); + String value = args.get(1).toString().trim(); + + if (game == null) { + player.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(player, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return false; + } + + if (game.getState() == GameState.RUNNING) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.notwhilegamerunning"))); + return false; + } + + if (!value.equalsIgnoreCase("true") && !value.equalsIgnoreCase("false") + && !value.equalsIgnoreCase("off") && !value.equalsIgnoreCase("on") + && !value.equalsIgnoreCase("1") && !value.equalsIgnoreCase("0")) { + player + .sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(player, "errors.wrongvalueonoff"))); + return true; + } + + boolean autobalance = false; + if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("on") + || value.equalsIgnoreCase("1")) { + autobalance = true; + } + + game.setAutobalance(autobalance); + + if (autobalance) { + player.sendMessage( + ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel + ._l(player, "success.autobalanceseton"))); + } else { + player.sendMessage( + ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel + ._l(player, "success.autobalancesetoff"))); + } + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"game", "value"}; + } + + @Override + public String getCommand() { + return "setautobalance"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.setautobalance.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.setautobalance.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/SetBedCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/SetBedCommand.java new file mode 100644 index 0000000..fabcd0f --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/SetBedCommand.java @@ -0,0 +1,164 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.game.Team; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.Utils; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.material.Bed; + +public class SetBedCommand extends BaseCommand implements ICommand { + + public SetBedCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!super.hasPermission(sender)) { + return false; + } + + Player player = (Player) sender; + String team = args.get(1); + + Game game = this.getPlugin().getGameManager().getGame(args.get(0)); + if (game == null) { + player.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(sender, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return false; + } + + if (game.getState() == GameState.RUNNING) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.notwhilegamerunning"))); + return false; + } + + Team gameTeam = game.getTeam(team); + + if (gameTeam == null) { + player.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(player, "errors.teamnotfound"))); + return false; + } + + HashSet transparent = new HashSet(); + transparent.add(Material.AIR); + + Class hashsetType = Utils.getGenericTypeOfParameter(player.getClass(), "getTargetBlock", 0); + Method targetBlockMethod = null; + Block targetBlock = null; + + // 1.7 compatible + try { + try { + targetBlockMethod = + player.getClass().getMethod("getTargetBlock", new Class[]{Set.class, int.class}); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + try { + targetBlockMethod = player.getClass().getMethod("getTargetBlock", + new Class[]{HashSet.class, int.class}); + } catch (Exception exc) { + BedwarsRel.getInstance().getBugsnag().notify(exc); + exc.printStackTrace(); + } + } + + if (hashsetType.equals(Byte.class)) { + targetBlock = (Block) targetBlockMethod.invoke(player, new Object[]{null, 15}); + } else { + targetBlock = (Block) targetBlockMethod.invoke(player, new Object[]{transparent, 15}); + } + + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + } + + Block standingBlock = player.getLocation().getBlock().getRelative(BlockFace.DOWN); + + if (targetBlock == null || standingBlock == null) { + player.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(player, "errors.bedtargeting"))); + return false; + } + + Material targetMaterial = game.getTargetMaterial(); + if (targetBlock.getType() != targetMaterial && standingBlock.getType() != targetMaterial) { + player.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(player, "errors.bedtargeting"))); + return false; + } + + Block theBlock = null; + if (targetBlock.getType() == targetMaterial) { + theBlock = targetBlock; + } else { + theBlock = standingBlock; + } + + if (targetMaterial.equals(Material.BED_BLOCK)) { + Block neighbor = null; + Bed theBed = (Bed) theBlock.getState().getData(); + + if (!theBed.isHeadOfBed()) { + neighbor = theBlock; + theBlock = Utils.getBedNeighbor(neighbor); + } else { + neighbor = Utils.getBedNeighbor(theBlock); + } + + gameTeam.setTargets(theBlock, neighbor); + } else { + gameTeam.setTargets(theBlock, null); + } + + player.sendMessage(ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel + ._l(player, "success.bedset", + ImmutableMap + .of("team", gameTeam.getChatColor() + gameTeam.getName() + ChatColor.GREEN)))); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"game", "team"}; + } + + @Override + public String getCommand() { + return "setbed"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.setbed.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.setbed.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/SetBuilderCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/SetBuilderCommand.java new file mode 100644 index 0000000..7284713 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/SetBuilderCommand.java @@ -0,0 +1,64 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.utils.ChatWriter; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +public class SetBuilderCommand extends BaseCommand implements ICommand { + + public SetBuilderCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!sender.hasPermission("bw." + this.getPermission())) { + return false; + } + + Game game = this.getPlugin().getGameManager().getGame(args.get(0)); + String builder = args.get(1).toString(); + + if (game == null) { + sender.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(sender, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return false; + } + + game.setBuilder(builder); + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel._l(sender, "success.builderset"))); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"game", "builder"}; + } + + @Override + public String getCommand() { + return "setbuilder"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.setbuilder.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.setbuilder.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/SetGameBlockCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/SetGameBlockCommand.java new file mode 100644 index 0000000..07e1bc1 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/SetGameBlockCommand.java @@ -0,0 +1,88 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.Utils; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.command.CommandSender; + +public class SetGameBlockCommand extends BaseCommand implements ICommand { + + public SetGameBlockCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!sender.hasPermission("bw." + this.getPermission())) { + return false; + } + + Game game = this.getPlugin().getGameManager().getGame(args.get(0)); + String material = args.get(1).toString(); + + if (game == null) { + sender.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(sender, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return false; + } + + if (game.getState() == GameState.RUNNING) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.notwhilegamerunning"))); + return false; + } + + Material targetMaterial = Utils.parseMaterial(material); + if (targetMaterial == null && !"DEFAULT".equals(material)) { + sender + .sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.novalidmaterial"))); + return true; + } + + if ("DEFAULT".equalsIgnoreCase(material)) { + game.setTargetMaterial(null); + } else { + game.setTargetMaterial(targetMaterial); + } + + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel._l(sender, "success.materialset"))); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"game", "blocktype"}; + } + + @Override + public String getCommand() { + return "setgameblock"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.setgameblock.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.setgameblock.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/SetLobbyCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/SetLobbyCommand.java new file mode 100644 index 0000000..4931623 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/SetLobbyCommand.java @@ -0,0 +1,71 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.utils.ChatWriter; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class SetLobbyCommand extends BaseCommand implements ICommand { + + public SetLobbyCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!super.hasPermission(sender)) { + return false; + } + + Player player = (Player) sender; + + Game game = this.getPlugin().getGameManager().getGame(args.get(0)); + if (game == null) { + player.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(player, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return false; + } + + if (game.getState() != GameState.STOPPED) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.notwhilegamerunning"))); + return false; + } + + game.setLobby(player); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"game"}; + } + + @Override + public String getCommand() { + return "setlobby"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.setlobby.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.setlobby.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/SetMainLobbyCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/SetMainLobbyCommand.java new file mode 100644 index 0000000..f0ddbf8 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/SetMainLobbyCommand.java @@ -0,0 +1,73 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.utils.ChatWriter; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class SetMainLobbyCommand extends BaseCommand implements ICommand { + + public SetMainLobbyCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!super.hasPermission(sender)) { + return false; + } + + Player player = (Player) sender; + + Game game = this.getPlugin().getGameManager().getGame(args.get(0)); + if (game == null) { + player.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(player, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return false; + } + + if (game.getState() != GameState.STOPPED) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.notwhilegamerunning"))); + return false; + } + + game.setMainLobby(player.getLocation()); + player.sendMessage( + ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel._l(player, "success.mainlobbyset"))); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"game"}; + } + + @Override + public String getCommand() { + return "setmainlobby"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.setmainlobby.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.setmainlobby.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/SetMinPlayersCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/SetMinPlayersCommand.java new file mode 100644 index 0000000..4971ac9 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/SetMinPlayersCommand.java @@ -0,0 +1,82 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.Utils; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +public class SetMinPlayersCommand extends BaseCommand implements ICommand { + + public SetMinPlayersCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!sender.hasPermission("bw." + this.getPermission())) { + return false; + } + + Game game = this.getPlugin().getGameManager().getGame(args.get(0)); + String minplayers = args.get(1).toString(); + + if (game == null) { + sender.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(sender, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return false; + } + + if (game.getState() == GameState.RUNNING) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.notwhilegamerunning"))); + return false; + } + + if (!Utils.isNumber(minplayers)) { + sender.sendMessage( + ChatWriter + .pluginMessage(ChatColor.RED + BedwarsRel._l(sender, "errors.minplayersnumeric"))); + return true; + } + + game.setMinPlayers(Integer.valueOf(minplayers)); + sender + .sendMessage( + ChatWriter + .pluginMessage(ChatColor.GREEN + BedwarsRel._l(sender, "success.minplayersset"))); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"game", "players"}; + } + + @Override + public String getCommand() { + return "setminplayers"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.setminplayers.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.setminplayers.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/SetRegionCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/SetRegionCommand.java new file mode 100644 index 0000000..5603f1a --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/SetRegionCommand.java @@ -0,0 +1,83 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.utils.ChatWriter; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class SetRegionCommand extends BaseCommand implements ICommand { + + public SetRegionCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!super.hasPermission(sender)) { + return false; + } + + Player player = (Player) sender; + + Game game = this.getPlugin().getGameManager().getGame(args.get(0)); + if (game == null) { + player.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(player, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return false; + } + + if (game.getState() == GameState.RUNNING) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.notwhilegamerunning"))); + return false; + } + + String loc = args.get(1); + if (!loc.equalsIgnoreCase("loc1") && !loc.equalsIgnoreCase("loc2")) { + player + .sendMessage( + ChatWriter + .pluginMessage(ChatColor.RED + BedwarsRel._l(player, "errors.regionargument"))); + return false; + } + + game.setLoc(player.getLocation(), loc); + player.sendMessage(ChatWriter.pluginMessage(ChatColor.GREEN + + BedwarsRel._l(player, "success.regionset", + ImmutableMap.of("location", loc, "game", game.getName())))); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"game", "loc1;loc2"}; + } + + @Override + public String getCommand() { + return "setregion"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.setregion.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.setregion.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/SetSpawnCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/SetSpawnCommand.java new file mode 100644 index 0000000..6f88fff --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/SetSpawnCommand.java @@ -0,0 +1,84 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.game.Team; +import io.github.bedwarsrel.utils.ChatWriter; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class SetSpawnCommand extends BaseCommand implements ICommand { + + public SetSpawnCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!super.hasPermission(sender)) { + return false; + } + + Player player = (Player) sender; + + Game game = this.getPlugin().getGameManager().getGame(args.get(0)); + if (game == null) { + player.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(player, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return false; + } + + if (game.getState() == GameState.RUNNING) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.notwhilegamerunning"))); + return false; + } + + Team team = game.getTeam(args.get(1)); + if (team == null) { + player.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(player, "errors.teamnotfound"))); + return false; + } + + team.setSpawnLocation(player.getLocation()); + player + .sendMessage(ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel + ._l(player, "success.spawnset", + ImmutableMap + .of("team", team.getChatColor() + team.getDisplayName() + ChatColor.GREEN)))); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"game", "team"}; + } + + @Override + public String getCommand() { + return "setspawn"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.setspawn.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.setspawn.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/SetSpawnerCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/SetSpawnerCommand.java new file mode 100644 index 0000000..f617bba --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/SetSpawnerCommand.java @@ -0,0 +1,106 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.game.ResourceSpawner; +import io.github.bedwarsrel.utils.ChatWriter; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; + +public class SetSpawnerCommand extends BaseCommand { + + public SetSpawnerCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!super.hasPermission(sender)) { + return false; + } + + Player player = (Player) sender; + ArrayList arguments = new ArrayList(Arrays.asList(this.getResources())); + String material = args.get(1).toString().toLowerCase(); + Game game = this.getPlugin().getGameManager().getGame(args.get(0)); + + if (game == null) { + player.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(player, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return false; + } + + if (game.getState() == GameState.RUNNING) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.notwhilegamerunning"))); + return false; + } + + if (!arguments.contains(material)) { + player + .sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(player, "errors.spawnerargument"))); + return false; + } + + Location location = player.getLocation(); + ResourceSpawner spawner = new ResourceSpawner(game, material, location); + game.addResourceSpawner(spawner); + player.sendMessage( + ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel._l(player, "success.spawnerset", + ImmutableMap.of("name", material + ChatColor.GREEN)))); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"game", "ressource"}; + } + + @Override + public String getCommand() { + return "setspawner"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.setspawner.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.setspawner.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + + private String[] getResources() { + ConfigurationSection section = + BedwarsRel.getInstance().getConfig().getConfigurationSection("resource"); + if (section == null) { + return new String[]{}; + } + + List resources = new ArrayList(); + for (String key : section.getKeys(false)) { + resources.add(key.toLowerCase()); + } + + return resources.toArray(new String[resources.size()]); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/SetTargetCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/SetTargetCommand.java new file mode 100644 index 0000000..1f2219e --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/SetTargetCommand.java @@ -0,0 +1,177 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.game.Team; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.Utils; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.material.Bed; + +public class SetTargetCommand extends BaseCommand implements ICommand { + + public SetTargetCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!super.hasPermission(sender)) { + return false; + } + + Player player = (Player) sender; + String team = args.get(1); + + Game game = this.getPlugin().getGameManager().getGame(args.get(0)); + if (game == null) { + player.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(player, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return false; + } + + if (game.getState() == GameState.RUNNING) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.notwhilegamerunning"))); + return false; + } + + Team gameTeam = game.getTeam(team); + + if (gameTeam == null) { + player.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(player, "errors.teamnotfound"))); + return false; + } + + Class hashsetType = Utils.getGenericTypeOfParameter(player.getClass(), "getTargetBlock", 0); + Method targetBlockMethod = this.getTargetBlockMethod(player); + Block targetBlock = null; + + if (targetBlockMethod != null) { + targetBlock = this.getTargetBlock(targetBlockMethod, hashsetType, player); + } + + Block standingBlock = player.getLocation().getBlock().getRelative(BlockFace.DOWN); + + if (targetBlock == null || standingBlock == null) { + player.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(player, "errors.bedtargeting"))); + return false; + } + + Material targetMaterial = game.getTargetMaterial(); + if (targetBlock.getType() != targetMaterial && standingBlock.getType() != targetMaterial) { + player.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(player, "errors.bedtargeting"))); + return false; + } + + Block theBlock = null; + if (targetBlock.getType() == targetMaterial) { + theBlock = targetBlock; + } else { + theBlock = standingBlock; + } + + if (targetMaterial.equals(Material.BED_BLOCK)) { + Block neighbor = null; + Bed theBed = (Bed) theBlock.getState().getData(); + + if (!theBed.isHeadOfBed()) { + neighbor = theBlock; + theBlock = Utils.getBedNeighbor(neighbor); + } else { + neighbor = Utils.getBedNeighbor(theBlock); + } + + gameTeam.setTargets(theBlock, neighbor); + } else { + gameTeam.setTargets(theBlock, null); + } + + player.sendMessage(ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel + ._l(player, "success.bedset", + ImmutableMap + .of("team", gameTeam.getChatColor() + gameTeam.getName() + ChatColor.GREEN)))); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"game", "team"}; + } + + @Override + public String getCommand() { + return "settarget"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.settarget.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.settarget.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + + private Block getTargetBlock(Method targetBlockMethod, Class hashsetType, Player player) { + Block targetBlock = null; + HashSet transparent = new HashSet(); + transparent.add(Material.AIR); + + try { + if (hashsetType.equals(Byte.class)) { + targetBlock = (Block) targetBlockMethod.invoke(player, new Object[]{null, 15}); + } else { + targetBlock = (Block) targetBlockMethod.invoke(player, new Object[]{transparent, 15}); + } + + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + } + + return targetBlock; + } + + private Method getTargetBlockMethod(Player player) { + Method targetBlockMethod = null; + try { + targetBlockMethod = + player.getClass().getMethod("getTargetBlock", new Class[]{Set.class, int.class}); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + try { + targetBlockMethod = player.getClass().getMethod("getTargetBlock", + new Class[]{HashSet.class, int.class}); + } catch (Exception exc) { + BedwarsRel.getInstance().getBugsnag().notify(exc); + exc.printStackTrace(); + } + } + + return targetBlockMethod; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/StartGameCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/StartGameCommand.java new file mode 100644 index 0000000..e7fd438 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/StartGameCommand.java @@ -0,0 +1,60 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.utils.ChatWriter; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +public class StartGameCommand extends BaseCommand implements ICommand { + + public StartGameCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!sender.hasPermission("bw." + this.getPermission())) { + return false; + } + + Game game = this.getPlugin().getGameManager().getGame(args.get(0)); + if (game == null) { + sender.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(sender, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return false; + } + + game.run(sender); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{"game"}; + } + + @Override + public String getCommand() { + return "start"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.start.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.start.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/StatsCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/StatsCommand.java new file mode 100644 index 0000000..8328e5f --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/StatsCommand.java @@ -0,0 +1,136 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.statistics.PlayerStatistic; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.UUIDFetcher; +import java.util.ArrayList; +import java.util.UUID; +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class StatsCommand extends BaseCommand implements ICommand { + + public StatsCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!super.hasPermission(sender)) { + return false; + } + + Player player = (Player) sender; + + if (!player.hasPermission("bw.otherstats") && args.size() > 0) { + args.clear(); + } + + player.sendMessage(ChatWriter.pluginMessage( + ChatColor.GREEN + "----------- " + BedwarsRel._l(player, "stats.header") + " -----------")); + + if (args.size() == 1) { + String playerStats = args.get(0).toString(); + OfflinePlayer offPlayer = BedwarsRel.getInstance().getServer().getPlayerExact(playerStats); + + if (offPlayer != null) { + PlayerStatistic statistic = + BedwarsRel.getInstance().getPlayerStatisticManager().getStatistic(offPlayer); + if (statistic == null) { + player.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(player, "stats.statsnotfound", ImmutableMap.of("player", playerStats)))); + return true; + } + + this.sendStats(player, statistic); + return true; + } + + UUID offUUID = null; + try { + offUUID = UUIDFetcher.getUUIDOf(playerStats); + if (offUUID == null) { + player.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(player, "stats.statsnotfound", ImmutableMap.of("player", playerStats)))); + return true; + } + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + } + + offPlayer = BedwarsRel.getInstance().getServer().getOfflinePlayer(offUUID); + if (offPlayer == null) { + player.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(player, "stats.statsnotfound", ImmutableMap.of("player", playerStats)))); + return true; + } + + PlayerStatistic statistic = + BedwarsRel.getInstance().getPlayerStatisticManager().getStatistic(offPlayer); + if (statistic == null) { + player.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(player, "stats.statsnotfound", ImmutableMap.of("player", offPlayer.getName())))); + return true; + } + + this.sendStats(player, statistic); + return true; + } else if (args.size() == 0) { + PlayerStatistic statistic = + BedwarsRel.getInstance().getPlayerStatisticManager().getStatistic(player); + if (statistic == null) { + player.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(player, "stats.statsnotfound", ImmutableMap.of("player", player.getName())))); + return true; + } + + this.sendStats(player, statistic); + return true; + } + + return false; + } + + @Override + public String[] getArguments() { + return new String[]{}; + } + + @Override + public String getCommand() { + return "stats"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.stats.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.stats.name"); + } + + @Override + public String getPermission() { + return "base"; + } + + private void sendStats(Player player, PlayerStatistic statistic) { + for (String line : BedwarsRel.getInstance().getPlayerStatisticManager() + .createStatisticLines(statistic, false, ChatColor.GRAY, ChatColor.YELLOW)) { + player.sendMessage(line); + } + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/commands/StopGameCommand.java b/common/src/main/java/io/github/bedwarsrel/commands/StopGameCommand.java new file mode 100644 index 0000000..9d8a7cb --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/commands/StopGameCommand.java @@ -0,0 +1,85 @@ +package io.github.bedwarsrel.commands; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.utils.ChatWriter; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class StopGameCommand extends BaseCommand implements ICommand { + + public StopGameCommand(BedwarsRel plugin) { + super(plugin); + } + + @Override + public boolean execute(CommandSender sender, ArrayList args) { + if (!sender.hasPermission("bw." + this.getPermission())) { + return false; + } + + Game game = null; + + if (args.size() == 0) { + game = this.getPlugin().getGameManager().getGameOfPlayer((Player) sender); + + if (game == null) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(sender, "errors.notingame"))); + return false; + } + } + + if (args.size() != 0) { + game = this.getPlugin().getGameManager().getGame(args.get(0)); + + if (game == null) { + sender.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + BedwarsRel + ._l(sender, "errors.gamenotfound", ImmutableMap.of("game", args.get(0).toString())))); + return false; + } + } + + if (!game.stop()) { + sender + .sendMessage( + ChatWriter + .pluginMessage(ChatColor.RED + BedwarsRel._l(sender, "errors.gamenotrunning"))); + return false; + } + + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel._l(sender, "success.stopped"))); + return true; + } + + @Override + public String[] getArguments() { + return new String[]{}; + } + + @Override + public String getCommand() { + return "stop"; + } + + @Override + public String getDescription() { + return BedwarsRel._l("commands.stop.desc"); + } + + @Override + public String getName() { + return BedwarsRel._l("commands.stop.name"); + } + + @Override + public String getPermission() { + return "setup"; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/database/DatabaseManager.java b/common/src/main/java/io/github/bedwarsrel/database/DatabaseManager.java new file mode 100644 index 0000000..6326835 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/database/DatabaseManager.java @@ -0,0 +1,69 @@ +package io.github.bedwarsrel.database; + +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; +import java.sql.Connection; +import java.sql.SQLException; +import java.util.TimeZone; +import lombok.Getter; + +public class DatabaseManager { + + @Getter + private String tablePrefix = "bw_"; + private String database = null; + private HikariDataSource dataSource = null; + private String host = null; + private String password = null; + private int port = 3306; + private String user = null; + + public DatabaseManager(String host, int port, String user, String password, String database, + String tablePrefix) { + this.host = host; + this.port = port; + this.user = user; + this.password = password; + this.database = database; + this.tablePrefix = tablePrefix; + } + + + public void initialize() { + HikariConfig config = new HikariConfig(); + config.setJdbcUrl("jdbc:mysql://" + this.host + ":" + String.valueOf(this.port) + "/" + + this.database + "?autoReconnect=true&serverTimezone=" + TimeZone + .getDefault().getID()); + config.setUsername(this.user); + config.setPassword(this.password); + config.addDataSourceProperty("cachePrepStmts", "true"); + config.addDataSourceProperty("prepStmtCacheSize", "250"); + config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); + + this.dataSource = new HikariDataSource(config); + } + + public Connection getConnection() { + try { + return this.dataSource.getConnection(); + } catch (SQLException e) { + e.printStackTrace(); + } + return null; + } + + public String getCreateTableSql() { + return "CREATE TABLE IF NOT EXISTS `" + this.getTablePrefix() + + "stats_players` (`kills` int(11) NOT NULL DEFAULT '0', `wins` int(11) NOT NULL DEFAULT '0', `score` int(11) NOT NULL DEFAULT '0', `loses` int(11) NOT NULL DEFAULT '0', `name` varchar(255) NOT NULL, `destroyedBeds` int(11) NOT NULL DEFAULT '0', `uuid` varchar(255) NOT NULL, `deaths` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`uuid`))"; + } + + public String getReadObjectSql() { + return "SELECT * FROM " + this.getTablePrefix() + + "stats_players WHERE uuid = ? LIMIT 1"; + } + + public String getWriteObjectSql() { + return "INSERT INTO " + this.getTablePrefix() + + "stats_players(uuid, name, deaths, destroyedBeds, kills, loses, score, wins) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE uuid=VALUES(uuid),name=VALUES(name),deaths=deaths+VALUES(deaths),destroyedBeds=destroyedBeds+VALUES(destroyedBeds),kills=kills+VALUES(kills),loses=loses+VALUES(loses),score=score+VALUES(score),wins=wins+VALUES(wins)"; + } +} diff --git a/common/src/main/java/io/github/bedwarsrel/events/BedwarsCommandExecutedEvent.java b/common/src/main/java/io/github/bedwarsrel/events/BedwarsCommandExecutedEvent.java new file mode 100644 index 0000000..6c29dee --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/events/BedwarsCommandExecutedEvent.java @@ -0,0 +1,50 @@ +package io.github.bedwarsrel.events; + +import io.github.bedwarsrel.commands.BaseCommand; +import java.util.ArrayList; +import org.bukkit.command.CommandSender; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class BedwarsCommandExecutedEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + private BaseCommand command = null; + private ArrayList params = null; + private boolean result = false; + private CommandSender sender = null; + + public BedwarsCommandExecutedEvent(CommandSender sender, BaseCommand command, + ArrayList params, boolean result) { + this.sender = sender; + this.command = command; + this.params = params; + this.result = result; + } + + public static HandlerList getHandlerList() { + return BedwarsCommandExecutedEvent.handlers; + } + + public BaseCommand getCommand() { + return this.command; + } + + @Override + public HandlerList getHandlers() { + return BedwarsCommandExecutedEvent.handlers; + } + + public ArrayList getParameter() { + return this.params; + } + + public CommandSender getSender() { + return this.sender; + } + + public boolean isSuccess() { + return this.result; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/events/BedwarsExecuteCommandEvent.java b/common/src/main/java/io/github/bedwarsrel/events/BedwarsExecuteCommandEvent.java new file mode 100644 index 0000000..0f9dc7d --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/events/BedwarsExecuteCommandEvent.java @@ -0,0 +1,56 @@ +package io.github.bedwarsrel.events; + +import io.github.bedwarsrel.commands.BaseCommand; +import java.util.ArrayList; +import org.bukkit.command.CommandSender; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class BedwarsExecuteCommandEvent extends Event implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled = false; + private BaseCommand command = null; + private ArrayList params = null; + private CommandSender sender = null; + + public BedwarsExecuteCommandEvent(CommandSender sender, BaseCommand command, + ArrayList params) { + this.sender = sender; + this.command = command; + this.params = params; + } + + public static HandlerList getHandlerList() { + return BedwarsExecuteCommandEvent.handlers; + } + + public BaseCommand getCommand() { + return this.command; + } + + @Override + public HandlerList getHandlers() { + return BedwarsExecuteCommandEvent.handlers; + } + + public ArrayList getParameter() { + return this.params; + } + + public CommandSender getSender() { + return this.sender; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/events/BedwarsGameEndEvent.java b/common/src/main/java/io/github/bedwarsrel/events/BedwarsGameEndEvent.java new file mode 100644 index 0000000..ebb4d41 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/events/BedwarsGameEndEvent.java @@ -0,0 +1,29 @@ +package io.github.bedwarsrel.events; + +import io.github.bedwarsrel.game.Game; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class BedwarsGameEndEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + private Game game = null; + + public BedwarsGameEndEvent(Game game) { + this.game = game; + } + + public static HandlerList getHandlerList() { + return BedwarsGameEndEvent.handlers; + } + + public Game getGame() { + return this.game; + } + + @Override + public HandlerList getHandlers() { + return BedwarsGameEndEvent.handlers; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/events/BedwarsGameOverEvent.java b/common/src/main/java/io/github/bedwarsrel/events/BedwarsGameOverEvent.java new file mode 100644 index 0000000..8b326f0 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/events/BedwarsGameOverEvent.java @@ -0,0 +1,48 @@ +package io.github.bedwarsrel.events; + +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.Team; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class BedwarsGameOverEvent extends Event implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled = false; + private Game game = null; + private Team winner = null; + + public BedwarsGameOverEvent(Game game, Team winner) { + this.game = game; + this.winner = winner; + } + + public static HandlerList getHandlerList() { + return BedwarsGameOverEvent.handlers; + } + + public Game getGame() { + return this.game; + } + + @Override + public HandlerList getHandlers() { + return BedwarsGameOverEvent.handlers; + } + + public Team getWinner() { + return this.winner; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/events/BedwarsGameStartEvent.java b/common/src/main/java/io/github/bedwarsrel/events/BedwarsGameStartEvent.java new file mode 100644 index 0000000..56e8595 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/events/BedwarsGameStartEvent.java @@ -0,0 +1,41 @@ +package io.github.bedwarsrel.events; + +import io.github.bedwarsrel.game.Game; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class BedwarsGameStartEvent extends Event implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled = false; + private Game game = null; + + public BedwarsGameStartEvent(Game game) { + this.game = game; + } + + public static HandlerList getHandlerList() { + return BedwarsGameStartEvent.handlers; + } + + public Game getGame() { + return this.game; + } + + @Override + public HandlerList getHandlers() { + return BedwarsGameStartEvent.handlers; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/events/BedwarsGameStartedEvent.java b/common/src/main/java/io/github/bedwarsrel/events/BedwarsGameStartedEvent.java new file mode 100644 index 0000000..962ab27 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/events/BedwarsGameStartedEvent.java @@ -0,0 +1,29 @@ +package io.github.bedwarsrel.events; + +import io.github.bedwarsrel.game.Game; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class BedwarsGameStartedEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + private Game game = null; + + public BedwarsGameStartedEvent(Game game) { + this.game = game; + } + + public static HandlerList getHandlerList() { + return BedwarsGameStartedEvent.handlers; + } + + public Game getGame() { + return this.game; + } + + @Override + public HandlerList getHandlers() { + return BedwarsGameStartedEvent.handlers; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/events/BedwarsOpenShopEvent.java b/common/src/main/java/io/github/bedwarsrel/events/BedwarsOpenShopEvent.java new file mode 100644 index 0000000..c36f91e --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/events/BedwarsOpenShopEvent.java @@ -0,0 +1,66 @@ +package io.github.bedwarsrel.events; + +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.villager.MerchantCategory; +import java.util.HashMap; +import org.bukkit.Material; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class BedwarsOpenShopEvent extends Event implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled = false; + private Entity clickedEntity = null; + private Game game = null; + private HashMap itemshop = null; + private Player player = null; + + public BedwarsOpenShopEvent(Game game, Player player, + HashMap itemshop, Entity clickedEntity) { + this.player = player; + this.game = game; + this.itemshop = itemshop; + this.clickedEntity = clickedEntity; + } + + public static HandlerList getHandlerList() { + return BedwarsOpenShopEvent.handlers; + } + + public Entity getEntity() { + return this.clickedEntity; + } + + public Game getGame() { + return this.game; + } + + @Override + public HandlerList getHandlers() { + return BedwarsOpenShopEvent.handlers; + } + + public HashMap getItemshop() { + return this.itemshop; + } + + public CommandSender getPlayer() { + return this.player; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/events/BedwarsOpenTeamSelectionEvent.java b/common/src/main/java/io/github/bedwarsrel/events/BedwarsOpenTeamSelectionEvent.java new file mode 100644 index 0000000..e769452 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/events/BedwarsOpenTeamSelectionEvent.java @@ -0,0 +1,49 @@ +package io.github.bedwarsrel.events; + +import io.github.bedwarsrel.game.Game; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class BedwarsOpenTeamSelectionEvent extends Event implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled = false; + private Game game = null; + private Player player = null; + + public BedwarsOpenTeamSelectionEvent(Game game, Player player) { + this.player = player; + this.game = game; + } + + public static HandlerList getHandlerList() { + return BedwarsOpenTeamSelectionEvent.handlers; + } + + public Game getGame() { + return this.game; + } + + @Override + public HandlerList getHandlers() { + return BedwarsOpenTeamSelectionEvent.handlers; + } + + public CommandSender getPlayer() { + return this.player; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/events/BedwarsPlayerJoinEvent.java b/common/src/main/java/io/github/bedwarsrel/events/BedwarsPlayerJoinEvent.java new file mode 100644 index 0000000..0f918a9 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/events/BedwarsPlayerJoinEvent.java @@ -0,0 +1,67 @@ +package io.github.bedwarsrel.events; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class BedwarsPlayerJoinEvent extends Event implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled = false; + private Game game = null; + private Player player = null; + private Boolean kickOnCancel = true; + + public BedwarsPlayerJoinEvent(Game game, Player player) { + this.game = game; + this.player = player; + } + + public static HandlerList getHandlerList() { + return BedwarsPlayerJoinEvent.handlers; + } + + public Game getGame() { + return this.game; + } + + @Override + public HandlerList getHandlers() { + return BedwarsPlayerJoinEvent.handlers; + } + + public Player getPlayer() { + return this.player; + } + + public Boolean getKickOnCancel() { + return kickOnCancel; + } + + public void setKickOnCancel(Boolean kick) { + this.kickOnCancel = kick; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } + + public void setPlayerLocale(String locale) { + if (BedwarsRel.getInstance().getPlayerLocales().containsKey(this.player.getUniqueId()) + && !locale + .equals(BedwarsRel.getInstance().getPlayerLocales().get(this.player.getUniqueId()))) { + BedwarsRel.getInstance().getPlayerLocales().remove(this.player.getUniqueId()); + } + BedwarsRel.getInstance().getPlayerLocales().put(this.player.getUniqueId(), locale); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/events/BedwarsPlayerJoinTeamEvent.java b/common/src/main/java/io/github/bedwarsrel/events/BedwarsPlayerJoinTeamEvent.java new file mode 100644 index 0000000..3061457 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/events/BedwarsPlayerJoinTeamEvent.java @@ -0,0 +1,52 @@ +package io.github.bedwarsrel.events; + +import io.github.bedwarsrel.game.Team; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class BedwarsPlayerJoinTeamEvent extends Event implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled = false; + private Player player = null; + private Team team = null; + + public BedwarsPlayerJoinTeamEvent(Team team, Player player) { + this.player = player; + this.team = team; + } + + public static HandlerList getHandlerList() { + return BedwarsPlayerJoinTeamEvent.handlers; + } + + @Override + public HandlerList getHandlers() { + return BedwarsPlayerJoinTeamEvent.handlers; + } + + public Player getPlayer() { + return this.player; + } + + public Team getTeam() { + return this.team; + } + + public void setTeam(Team team) { + this.team = team; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/events/BedwarsPlayerJoinedEvent.java b/common/src/main/java/io/github/bedwarsrel/events/BedwarsPlayerJoinedEvent.java new file mode 100644 index 0000000..aa1b730 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/events/BedwarsPlayerJoinedEvent.java @@ -0,0 +1,43 @@ +package io.github.bedwarsrel.events; + +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.Team; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class BedwarsPlayerJoinedEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + private Game game = null; + private Player player = null; + private Team team = null; + + public BedwarsPlayerJoinedEvent(Game game, Team team, Player player) { + this.game = game; + this.player = player; + this.team = team; + } + + public static HandlerList getHandlerList() { + return BedwarsPlayerJoinedEvent.handlers; + } + + public Game getGame() { + return this.game; + } + + @Override + public HandlerList getHandlers() { + return BedwarsPlayerJoinedEvent.handlers; + } + + public Player getPlayer() { + return this.player; + } + + public Team getTeam() { + return this.team; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/events/BedwarsPlayerKilledEvent.java b/common/src/main/java/io/github/bedwarsrel/events/BedwarsPlayerKilledEvent.java new file mode 100644 index 0000000..bdf0203 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/events/BedwarsPlayerKilledEvent.java @@ -0,0 +1,42 @@ +package io.github.bedwarsrel.events; + +import io.github.bedwarsrel.game.Game; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class BedwarsPlayerKilledEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + private Game game = null; + private Player killer = null; + private Player player = null; + + public BedwarsPlayerKilledEvent(Game game, Player player, Player killer) { + this.player = player; + this.killer = killer; + this.game = game; + } + + public static HandlerList getHandlerList() { + return BedwarsPlayerKilledEvent.handlers; + } + + public Game getGame() { + return this.game; + } + + @Override + public HandlerList getHandlers() { + return BedwarsPlayerKilledEvent.handlers; + } + + public Player getKiller() { + return this.killer; + } + + public Player getPlayer() { + return this.player; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/events/BedwarsPlayerLeaveEvent.java b/common/src/main/java/io/github/bedwarsrel/events/BedwarsPlayerLeaveEvent.java new file mode 100644 index 0000000..bcd1f3f --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/events/BedwarsPlayerLeaveEvent.java @@ -0,0 +1,43 @@ +package io.github.bedwarsrel.events; + +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.Team; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class BedwarsPlayerLeaveEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + private Game game = null; + private Player player = null; + private Team team = null; + + public BedwarsPlayerLeaveEvent(Game game, Player player, Team team) { + this.game = game; + this.player = player; + this.team = team; + } + + public static HandlerList getHandlerList() { + return BedwarsPlayerLeaveEvent.handlers; + } + + public Game getGame() { + return this.game; + } + + @Override + public HandlerList getHandlers() { + return BedwarsPlayerLeaveEvent.handlers; + } + + public Player getPlayer() { + return this.player; + } + + public Team getTeam() { + return this.team; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/events/BedwarsPlayerSetNameEvent.java b/common/src/main/java/io/github/bedwarsrel/events/BedwarsPlayerSetNameEvent.java new file mode 100644 index 0000000..77acad0 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/events/BedwarsPlayerSetNameEvent.java @@ -0,0 +1,69 @@ +package io.github.bedwarsrel.events; + +import io.github.bedwarsrel.game.Team; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class BedwarsPlayerSetNameEvent extends Event implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled = false; + private String displayName = null; + private Player player = null; + private String playerListName = null; + private Team team = null; + + public BedwarsPlayerSetNameEvent(Team team, String displayName, String playerListName, + Player player) { + this.team = team; + this.player = player; + this.displayName = displayName; + this.playerListName = playerListName; + } + + public static HandlerList getHandlerList() { + return BedwarsPlayerSetNameEvent.handlers; + } + + public String getDisplayName() { + return this.displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + @Override + public HandlerList getHandlers() { + return BedwarsPlayerSetNameEvent.handlers; + } + + public Player getPlayer() { + return this.player; + } + + public String getPlayerListName() { + return this.playerListName; + } + + public void setPlayerListName(String playerListName) { + this.playerListName = playerListName; + } + + public Team getTeam() { + return this.team; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/events/BedwarsResourceSpawnEvent.java b/common/src/main/java/io/github/bedwarsrel/events/BedwarsResourceSpawnEvent.java new file mode 100644 index 0000000..a01b158 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/events/BedwarsResourceSpawnEvent.java @@ -0,0 +1,59 @@ +package io.github.bedwarsrel.events; + +import io.github.bedwarsrel.game.Game; +import org.bukkit.Location; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.bukkit.inventory.ItemStack; + +public class BedwarsResourceSpawnEvent extends Event implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled = false; + private Game game = null; + private Location location = null; + private ItemStack resource = null; + + public BedwarsResourceSpawnEvent(Game game, Location location, ItemStack resource) { + this.game = game; + this.location = location; + this.resource = resource; + } + + public static HandlerList getHandlerList() { + return BedwarsResourceSpawnEvent.handlers; + } + + public Game getGame() { + return this.game; + } + + @Override + public HandlerList getHandlers() { + return BedwarsResourceSpawnEvent.handlers; + } + + public Location getLocation() { + return this.location; + } + + public ItemStack getResource() { + return this.resource; + } + + public void setResource(ItemStack resource) { + this.resource = resource; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/events/BedwarsSaveGameEvent.java b/common/src/main/java/io/github/bedwarsrel/events/BedwarsSaveGameEvent.java new file mode 100644 index 0000000..65b1d78 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/events/BedwarsSaveGameEvent.java @@ -0,0 +1,48 @@ +package io.github.bedwarsrel.events; + +import io.github.bedwarsrel.game.Game; +import org.bukkit.command.CommandSender; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class BedwarsSaveGameEvent extends Event implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled = false; + private Game game = null; + private CommandSender sender = null; + + public BedwarsSaveGameEvent(Game game, CommandSender sender) { + this.sender = sender; + this.game = game; + } + + public static HandlerList getHandlerList() { + return BedwarsSaveGameEvent.handlers; + } + + public Game getGame() { + return this.game; + } + + @Override + public HandlerList getHandlers() { + return BedwarsSaveGameEvent.handlers; + } + + public CommandSender getSender() { + return this.sender; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/events/BedwarsSavePlayerStatisticEvent.java b/common/src/main/java/io/github/bedwarsrel/events/BedwarsSavePlayerStatisticEvent.java new file mode 100644 index 0000000..b6985cb --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/events/BedwarsSavePlayerStatisticEvent.java @@ -0,0 +1,41 @@ +package io.github.bedwarsrel.events; + +import io.github.bedwarsrel.statistics.PlayerStatistic; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class BedwarsSavePlayerStatisticEvent extends Event implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled = false; + private PlayerStatistic playerStatistic = null; + + public BedwarsSavePlayerStatisticEvent(PlayerStatistic playerStatistic) { + this.playerStatistic = playerStatistic; + } + + public static HandlerList getHandlerList() { + return BedwarsSavePlayerStatisticEvent.handlers; + } + + @Override + public HandlerList getHandlers() { + return BedwarsSavePlayerStatisticEvent.handlers; + } + + public PlayerStatistic getPlayerStatistic() { + return this.playerStatistic; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/events/BedwarsTargetBlockDestroyedEvent.java b/common/src/main/java/io/github/bedwarsrel/events/BedwarsTargetBlockDestroyedEvent.java new file mode 100644 index 0000000..103491b --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/events/BedwarsTargetBlockDestroyedEvent.java @@ -0,0 +1,43 @@ +package io.github.bedwarsrel.events; + +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.Team; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class BedwarsTargetBlockDestroyedEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + private Game game = null; + private Player player = null; + private Team team = null; + + public BedwarsTargetBlockDestroyedEvent(Game game, Player player, Team team) { + this.player = player; + this.team = team; + this.game = game; + } + + public static HandlerList getHandlerList() { + return BedwarsTargetBlockDestroyedEvent.handlers; + } + + public Game getGame() { + return this.game; + } + + @Override + public HandlerList getHandlers() { + return BedwarsTargetBlockDestroyedEvent.handlers; + } + + public Player getPlayer() { + return this.player; + } + + public Team getTeam() { + return this.team; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/events/BedwarsUseTNTSheepEvent.java b/common/src/main/java/io/github/bedwarsrel/events/BedwarsUseTNTSheepEvent.java new file mode 100644 index 0000000..110a049 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/events/BedwarsUseTNTSheepEvent.java @@ -0,0 +1,71 @@ +package io.github.bedwarsrel.events; + +import io.github.bedwarsrel.game.Game; +import org.bukkit.Location; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class BedwarsUseTNTSheepEvent extends Event implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled = false; + private Game game = null; + private Player player = null; + private Location startLocation = null; + private Player targetPlayer = null; + + public BedwarsUseTNTSheepEvent(Game game, Player player, Player targetPlayer, + Location startLocation) { + this.player = player; + this.game = game; + this.startLocation = startLocation; + this.targetPlayer = targetPlayer; + } + + public static HandlerList getHandlerList() { + return BedwarsUseTNTSheepEvent.handlers; + } + + public Game getGame() { + return this.game; + } + + @Override + public HandlerList getHandlers() { + return BedwarsUseTNTSheepEvent.handlers; + } + + public CommandSender getPlayer() { + return this.player; + } + + public Location getStartLocation() { + return this.startLocation; + } + + public void setStartLocation(Location loc) { + this.startLocation = loc; + } + + public Player getTargetPlayer() { + return this.targetPlayer; + } + + public void setTargetPlayer(Player target) { + this.targetPlayer = target; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/game/BungeeGameCycle.java b/common/src/main/java/io/github/bedwarsrel/game/BungeeGameCycle.java new file mode 100644 index 0000000..e142d31 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/game/BungeeGameCycle.java @@ -0,0 +1,315 @@ +package io.github.bedwarsrel.game; + +import com.google.common.collect.ImmutableMap; +import com.google.common.io.ByteArrayDataOutput; +import com.google.common.io.ByteStreams; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.events.BedwarsGameEndEvent; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.Utils; +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.util.ArrayList; +import java.util.List; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.scheduler.BukkitRunnable; + +public class BungeeGameCycle extends GameCycle { + + public BungeeGameCycle(Game game) { + super(game); + } + + public void bungeeSendToServer(final String server, final Player player, boolean preventDelay) { + if (server == null) { + player + .sendMessage( + ChatWriter + .pluginMessage(ChatColor.RED + BedwarsRel._l(player, "errors.bungeenoserver"))); + return; + } + + new BukkitRunnable() { + + @Override + public void run() { + ByteArrayOutputStream b = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(b); + + try { + out.writeUTF("Connect"); + out.writeUTF(server); + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + return; + } + + if (b != null) { + player.sendPluginMessage(BedwarsRel.getInstance(), "BungeeCord", b.toByteArray()); + } + } + }.runTaskLater(BedwarsRel.getInstance(), (preventDelay) ? 0L : 20L); + } + + private void kickAllPlayers() { + for (Player player : this.getGame().getTeamPlayers()) { + for (Player freePlayer : this.getGame().getFreePlayers()) { + player.showPlayer(freePlayer); + } + this.getGame().playerLeave(player, false); + } + + for (Player freePlayer : this.getGame().getFreePlayersClone()) { + this.getGame().playerLeave(freePlayer, false); + } + } + + @Override + public void onGameEnds() { + if (BedwarsRel.getInstance().getBooleanConfig("bungeecord.full-restart", true)) { + this.kickAllPlayers(); + + this.getGame().resetRegion(); + new BukkitRunnable() { + + @Override + public void run() { + if (BedwarsRel.getInstance().isSpigot() + && BedwarsRel.getInstance().getBooleanConfig("bungeecord.spigot-restart", true)) { + BedwarsRel.getInstance().getServer() + .dispatchCommand(BedwarsRel.getInstance().getServer().getConsoleSender(), + "restart"); + } else { + Bukkit.shutdown(); + } + } + }.runTaskLater(BedwarsRel.getInstance(), 70L); + } else { + // Reset scoreboard first + this.getGame().resetScoreboard(); + + // Kick all players + this.kickAllPlayers(); + + // reset countdown prevention breaks + this.setEndGameRunning(false); + + // Reset team chests + for (Team team : this.getGame().getTeams().values()) { + team.setInventory(null); + team.getChests().clear(); + } + + // clear protections + this.getGame().clearProtections(); + + // set state and with that, the sign + this.getGame().setState(GameState.WAITING); + this.getGame().updateScoreboard(); + + // reset region + this.getGame().resetRegion(); + } + } + + @Override + public void onGameLoaded() { + // Reset on game end + } + + @Override + public void onGameOver(GameOverTask task) { + if (BedwarsRel.getInstance().getBooleanConfig("bungeecord.endgame-in-lobby", true)) { + final ArrayList players = new ArrayList(); + final Game game = this.getGame(); + players.addAll(this.getGame().getTeamPlayers()); + players.addAll(this.getGame().getFreePlayers()); + for (Player player : players) { + + if (!player.getWorld().equals(this.getGame().getLobby().getWorld())) { + game.getPlayerSettings(player).setTeleporting(true); + player.teleport(this.getGame().getLobby()); + game.getPlayerStorage(player).clean(); + } + } + + new BukkitRunnable() { + @Override + public void run() { + for (Player player : players) { + game.setPlayerGameMode(player); + game.setPlayerVisibility(player); + + if (!player.getInventory().contains(Material.SLIME_BALL)) { + // Leave game (Slimeball) + ItemStack leaveGame = new ItemStack(Material.SLIME_BALL, 1); + ItemMeta im = leaveGame.getItemMeta(); + im.setDisplayName(BedwarsRel._l(player, "lobby.leavegame")); + leaveGame.setItemMeta(im); + player.getInventory().setItem(8, leaveGame); + player.updateInventory(); + } + } + } + }.runTaskLater(BedwarsRel.getInstance(), 20L); + } + if (task.getCounter() == task.getStartCount() && task.getWinner() != null) { + for (Player aPlayer : this.getGame().getPlayers()) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage( + ChatWriter.pluginMessage(ChatColor.GOLD + BedwarsRel._l(aPlayer, "ingame.teamwon", + ImmutableMap.of("team", task.getWinner().getDisplayName() + ChatColor.GOLD)))); + } + } + } else if (task.getCounter() == task.getStartCount() && task.getWinner() == null) { + for (Player aPlayer : this.getGame().getPlayers()) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage( + ChatWriter.pluginMessage(ChatColor.GOLD + BedwarsRel._l(aPlayer, "ingame.draw"))); + } + } + } + + // game over + if (this.getGame().getPlayers().size() == 0 || task.getCounter() == 0) { + BedwarsGameEndEvent endEvent = new BedwarsGameEndEvent(this.getGame()); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(endEvent); + + this.onGameEnds(); + task.cancel(); + } else if ((task.getCounter() == task.getStartCount()) || (task.getCounter() % 10 == 0) + || (task.getCounter() <= 5 && (task.getCounter() > 0))) { + for (Player aPlayer : this.getGame().getPlayers()) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage(ChatWriter + .pluginMessage(ChatColor.AQUA + BedwarsRel + ._l(aPlayer, "ingame.serverrestart", ImmutableMap + .of("sec", + ChatColor.YELLOW.toString() + task.getCounter() + ChatColor.AQUA)))); + } + } + } + + task.decCounter(); + } + + @Override + public void onGameStart() { + // do nothing, world will be reseted on restarting + } + + @Override + public boolean onPlayerJoins(Player player) { + final Player p = player; + + if (this.getGame().isFull() && !player.hasPermission("bw.vip.joinfull")) { + if (this.getGame().getState() != GameState.RUNNING + || !BedwarsRel.getInstance().spectationEnabled()) { + this.bungeeSendToServer(BedwarsRel.getInstance().getBungeeHub(), p, false); + new BukkitRunnable() { + + @Override + public void run() { + BungeeGameCycle.this.sendBungeeMessage(p, + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(p, "lobby.gamefull"))); + } + }.runTaskLater(BedwarsRel.getInstance(), 60L); + + return false; + } + } else if (this.getGame().isFull() && player.hasPermission("bw.vip.joinfull")) { + if (this.getGame().getState() == GameState.WAITING) { + List players = this.getGame().getNonVipPlayers(); + + if (players.size() == 0) { + this.bungeeSendToServer(BedwarsRel.getInstance().getBungeeHub(), p, false); + new BukkitRunnable() { + + @Override + public void run() { + BungeeGameCycle.this.sendBungeeMessage(p, + ChatWriter + .pluginMessage(ChatColor.RED + BedwarsRel._l(p, "lobby.gamefullpremium"))); + } + }.runTaskLater(BedwarsRel.getInstance(), 60L); + return false; + } + + Player kickPlayer = null; + if (players.size() == 1) { + kickPlayer = players.get(0); + } else { + kickPlayer = players.get(Utils.randInt(0, players.size() - 1)); + } + + final Player kickedPlayer = kickPlayer; + + this.getGame().playerLeave(kickedPlayer, false); + new BukkitRunnable() { + + @Override + public void run() { + BungeeGameCycle.this.sendBungeeMessage(kickedPlayer, + ChatWriter + .pluginMessage( + ChatColor.RED + BedwarsRel._l(kickedPlayer, "lobby.kickedbyvip"))); + } + }.runTaskLater(BedwarsRel.getInstance(), 60L); + } else { + if (this.getGame().getState() == GameState.RUNNING + && !BedwarsRel.getInstance().spectationEnabled()) { + + new BukkitRunnable() { + + @Override + public void run() { + BungeeGameCycle.this + .bungeeSendToServer(BedwarsRel.getInstance().getBungeeHub(), p, false); + } + + }.runTaskLater(BedwarsRel.getInstance(), 5L); + + new BukkitRunnable() { + + @Override + public void run() { + BungeeGameCycle.this.sendBungeeMessage(p, + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(p, "lobby.gamefull"))); + } + }.runTaskLater(BedwarsRel.getInstance(), 60L); + return false; + } + } + } + + return true; + } + + @Override + public void onPlayerLeave(Player player) { + if (player.isOnline() || player.isDead()) { + this.bungeeSendToServer(BedwarsRel.getInstance().getBungeeHub(), player, true); + } + + if (this.getGame().getState() == GameState.RUNNING && !this.getGame().isStopping()) { + this.checkGameOver(); + } + } + + public void sendBungeeMessage(Player player, String message) { + ByteArrayDataOutput out = ByteStreams.newDataOutput(); + + out.writeUTF("Message"); + out.writeUTF(player.getName()); + out.writeUTF(message); + + player.sendPluginMessage(BedwarsRel.getInstance(), "BungeeCord", out.toByteArray()); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/game/Game.java b/common/src/main/java/io/github/bedwarsrel/game/Game.java new file mode 100644 index 0000000..7db6416 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/game/Game.java @@ -0,0 +1,2045 @@ +package io.github.bedwarsrel.game; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.events.BedwarsGameStartEvent; +import io.github.bedwarsrel.events.BedwarsGameStartedEvent; +import io.github.bedwarsrel.events.BedwarsPlayerJoinEvent; +import io.github.bedwarsrel.events.BedwarsPlayerJoinedEvent; +import io.github.bedwarsrel.events.BedwarsPlayerLeaveEvent; +import io.github.bedwarsrel.events.BedwarsSaveGameEvent; +import io.github.bedwarsrel.events.BedwarsTargetBlockDestroyedEvent; +import io.github.bedwarsrel.shop.NewItemShop; +import io.github.bedwarsrel.shop.Specials.SpecialItem; +import io.github.bedwarsrel.statistics.PlayerStatistic; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.Utils; +import io.github.bedwarsrel.villager.MerchantCategory; +import io.github.bedwarsrel.villager.MerchantCategoryComparator; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import lombok.Data; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Chunk; +import org.bukkit.DyeColor; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.block.Sign; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.material.Bed; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; +import org.bukkit.scoreboard.DisplaySlot; +import org.bukkit.scoreboard.Objective; +import org.bukkit.scoreboard.Score; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.util.Vector; + +@Data +public class Game { + + private boolean autobalance = false; + private String builder = null; + private YamlConfiguration config = null; + private GameCycle cycle = null; + private List freePlayers = null; + private GameLobbyCountdown gameLobbyCountdown = null; + private Location hologramLocation = null; + private boolean isOver = false; + private boolean isStopping = false; + private HashMap joinSigns = null; + private int length = 0; + private Location lobby = null; + private Location loc1 = null; + private Location loc2 = null; + private Location mainLobby = null; + private int minPlayers = 0; + private String name = null; + // Itemshops + private HashMap newItemShops = null; + private List orderedShopCategories = null; + private Map playerDamages = null; + private Map playerSettings = null; + private HashMap playerStorages = null; + private List playingTeams = null; + private int record = 0; + private List recordHolders = null; + private Region region = null; + private String regionName = null; + private List resourceSpawners = null; + private Map respawnProtections = null; + private List runningTasks = null; + private Scoreboard scoreboard = null; + private HashMap shopCategories = null; + private List specialItems = null; + private GameState state = null; + private Material targetMaterial = null; + private HashMap teams = null; + private int time = 1000; + private int timeLeft = 0; + + public Game(String name) { + super(); + + this.name = name; + this.runningTasks = new ArrayList(); + + this.freePlayers = new ArrayList(); + this.resourceSpawners = new ArrayList(); + this.teams = new HashMap(); + this.playingTeams = new ArrayList(); + + this.playerStorages = new HashMap(); + this.state = GameState.STOPPED; + this.scoreboard = BedwarsRel.getInstance().getScoreboardManager().getNewScoreboard(); + + this.gameLobbyCountdown = null; + this.joinSigns = new HashMap(); + this.timeLeft = BedwarsRel.getInstance().getMaxLength(); + this.isOver = false; + this.newItemShops = new HashMap(); + this.respawnProtections = new HashMap(); + this.playerDamages = new HashMap(); + this.specialItems = new ArrayList(); + + this.record = BedwarsRel.getInstance().getMaxLength(); + this.length = BedwarsRel.getInstance().getMaxLength(); + this.recordHolders = new ArrayList(); + + this.playerSettings = new HashMap(); + + this.autobalance = BedwarsRel.getInstance().getBooleanConfig("global-autobalance", false); + + if (BedwarsRel.getInstance().isBungee()) { + this.cycle = new BungeeGameCycle(this); + } else { + this.cycle = new SingleGameCycle(this); + } + } + + /* + * STATIC + */ + + public static String bedExistString() { + return "\u2714"; + } + + public static String bedLostString() { + return "\u2718"; + } + + public static String getPlayerWithTeamString(Player player, Team team, ChatColor before) { + if (BedwarsRel.getInstance().getBooleanConfig("teamname-in-chat", true)) { + return player.getDisplayName() + before + " (" + team.getChatColor() + team.getDisplayName() + + before + ")"; + } + + return player.getDisplayName() + before; + } + + public static String getPlayerWithTeamString(Player player, Team team, ChatColor before, + String playerAdding) { + if (BedwarsRel.getInstance().getBooleanConfig("teamname-in-chat", true)) { + return player.getDisplayName() + before + playerAdding + before + " (" + team.getChatColor() + + team.getDisplayName() + before + ")"; + } + + return player.getDisplayName() + before + playerAdding + before; + } + + /* + * PUBLIC + */ + + public void addJoinSign(Location signLocation) { + if (this.joinSigns.containsKey(signLocation)) { + this.joinSigns.remove(signLocation); + } + + this.joinSigns.put(signLocation, new GameJoinSign(this, signLocation)); + this.updateSignConfig(); + } + + public void addPlayerSettings(Player player) { + this.playerSettings.put(player, new PlayerSettings(player)); + } + + public PlayerStorage addPlayerStorage(Player p) { + PlayerStorage storage = new PlayerStorage(p); + this.playerStorages.put(p, storage); + + return storage; + } + + public RespawnProtectionRunnable addProtection(Player player) { + RespawnProtectionRunnable rpr = + new RespawnProtectionRunnable(this, player, + BedwarsRel.getInstance().getRespawnProtectionTime()); + this.respawnProtections.put(player, rpr); + + return rpr; + } + + public void addRecordHolder(String holder) { + this.recordHolders.add(holder); + } + + public void addResourceSpawner(ResourceSpawner rs) { + this.resourceSpawners.add(rs); + } + + public void addRunningTask(BukkitTask task) { + this.runningTasks.add(task); + } + + public void addSpecialItem(SpecialItem item) { + this.specialItems.add(item); + } + + public void addTeam(String name, TeamColor color, int maxPlayers) { + org.bukkit.scoreboard.Team newTeam = this.scoreboard.registerNewTeam(name); + newTeam.setDisplayName(name); + newTeam.setPrefix(color.getChatColor().toString()); + + Team theTeam = new Team(name, color, maxPlayers, newTeam); + this.teams.put(name, theTeam); + } + + public void addTeam(Team team) { + org.bukkit.scoreboard.Team newTeam = this.scoreboard.registerNewTeam(team.getName()); + newTeam.setDisplayName(team.getName()); + newTeam.setPrefix(team.getChatColor().toString()); + + team.setScoreboardTeam(newTeam); + + this.teams.put(team.getName(), team); + } + + public void broadcastSound(Sound sound, float volume, float pitch) { + for (Player p : this.getPlayers()) { + if (p.isOnline()) { + p.playSound(p.getLocation(), sound, volume, pitch); + } + } + } + + public void broadcastSound(Sound sound, float volume, float pitch, List players) { + for (Player p : players) { + if (p.isOnline()) { + p.playSound(p.getLocation(), sound, volume, pitch); + } + } + } + + public GameCheckCode checkGame() { + if (this.loc1 == null || this.loc2 == null) { + return GameCheckCode.LOC_NOT_SET_ERROR; + } + + if (this.teams == null || this.teams.size() <= 1) { + return GameCheckCode.TEAM_SIZE_LOW_ERROR; + } + + GameCheckCode teamCheck = this.checkTeams(); + if (teamCheck != GameCheckCode.OK) { + return teamCheck; + } + + if (this.getRessourceSpawner().size() == 0) { + return GameCheckCode.NO_RES_SPAWNER_ERROR; + } + + if (this.lobby == null) { + return GameCheckCode.NO_LOBBY_SET; + } + + if (BedwarsRel.getInstance().toMainLobby() && this.mainLobby == null) { + return GameCheckCode.NO_MAIN_LOBBY_SET; + } + + return GameCheckCode.OK; + } + + private GameCheckCode checkTeams() { + for (Team t : this.teams.values()) { + if (t.getSpawnLocation() == null) { + return GameCheckCode.TEAMS_WITHOUT_SPAWNS; + } + + Material targetMaterial = this.getTargetMaterial(); + + if (targetMaterial.equals(Material.BED_BLOCK)) { + if ((t.getHeadTarget() == null || t.getFeetTarget() == null) + || (!Utils.isBedBlock(t.getHeadTarget()) || !Utils.isBedBlock(t.getFeetTarget()))) { + return GameCheckCode.TEAM_NO_WRONG_BED; + } + } else { + if (t.getHeadTarget() == null) { + return GameCheckCode.TEAM_NO_WRONG_TARGET; + } + + if (!t.getHeadTarget().getType().equals(targetMaterial)) { + return GameCheckCode.TEAM_NO_WRONG_TARGET; + } + } + + } + + return GameCheckCode.OK; + } + + private void cleanUsersInventory() { + for (PlayerStorage storage : this.playerStorages.values()) { + storage.clean(); + } + } + + public void clearProtections() { + for (RespawnProtectionRunnable protection : this.respawnProtections.values()) { + try { + protection.cancel(); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + // isn't running, ignore + } + } + + this.respawnProtections.clear(); + } + + private void createGameConfig(File config) { + YamlConfiguration yml = new YamlConfiguration(); + + yml.set("name", this.name); + yml.set("world", this.getRegion().getWorld().getName()); + yml.set("loc1", Utils.locationSerialize(this.loc1)); + yml.set("loc2", Utils.locationSerialize(this.loc2)); + yml.set("lobby", Utils.locationSerialize(this.lobby)); + yml.set("minplayers", this.getMinPlayers()); + + if (BedwarsRel.getInstance().getBooleanConfig("store-game-records", true)) { + yml.set("record", this.record); + + if (BedwarsRel.getInstance().getBooleanConfig("store-game-records-holder", true)) { + yml.set("record-holders", this.recordHolders); + } + } + + if (this.regionName == null) { + this.regionName = this.region.getName(); + } + + yml.set("regionname", this.regionName); + yml.set("time", this.time); + + yml.set("targetmaterial", this.getTargetMaterial().name()); + yml.set("builder", this.builder); + + if (this.hologramLocation != null) { + yml.set("hololoc", Utils.locationSerialize(this.hologramLocation)); + } + + if (this.mainLobby != null) { + yml.set("mainlobby", Utils.locationSerialize(this.mainLobby)); + } + + yml.set("autobalance", this.autobalance); + + yml.set("spawner", this.resourceSpawners); + yml.createSection("teams", this.teams); + + try { + yml.save(config); + this.config = yml; + } catch (IOException e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + BedwarsRel.getInstance().getLogger().info(ChatWriter.pluginMessage(e.getMessage())); + } + } + + private void displayMapInfo() { + for (Player player : this.getPlayers()) { + this.displayMapInfo(player); + } + } + + private void displayMapInfo(Player player) { + try { + Class clazz = Class.forName("io.github.bedwarsrel.com." + + BedwarsRel.getInstance().getCurrentVersion().toLowerCase() + ".Title"); + Method showTitle = clazz.getMethod("showTitle", Player.class, String.class, double.class, + double.class, double.class); + double titleFadeIn = BedwarsRel.getInstance().getConfig() + .getDouble("titles.map.title-fade-in"); + double titleStay = BedwarsRel.getInstance().getConfig().getDouble("titles.map.title-stay"); + double titleFadeOut = BedwarsRel.getInstance().getConfig() + .getDouble("titles.map.title-fade-out"); + + showTitle.invoke(null, player, this.getRegion().getName(), titleFadeIn, titleStay, + titleFadeOut); + + if (this.builder != null) { + Method showSubTitle = clazz.getMethod("showSubTitle", Player.class, String.class, + double.class, double.class, double.class); + double subtitleFadeIn = + BedwarsRel.getInstance().getConfig().getDouble("titles.map.subtitle-fade-in"); + double subtitleStay = BedwarsRel.getInstance().getConfig() + .getDouble("titles.map.subtitle-stay"); + double subtitleFadeOut = + BedwarsRel.getInstance().getConfig().getDouble("titles.map.subtitle-fade-out"); + + showSubTitle.invoke(null, player, + BedwarsRel._l(player, "ingame.title.map-builder", + ImmutableMap.of("builder", + ChatColor.translateAlternateColorCodes('&', this.builder))), + subtitleFadeIn, subtitleStay, subtitleFadeOut); + } + + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + ex.printStackTrace(); + } + } + + private void displayRecord() { + for (Player player : this.getPlayers()) { + this.displayRecord(player); + } + } + + private void displayRecord(Player player) { + boolean displayHolders = BedwarsRel + .getInstance().getBooleanConfig("store-game-records-holder", true); + + if (displayHolders && this.getRecordHolders().size() > 0) { + StringBuilder holders = new StringBuilder(); + + for (String holder : this.recordHolders) { + if (holders.length() == 0) { + holders.append(ChatColor.WHITE + holder); + } else { + holders.append(ChatColor.GOLD + ", " + ChatColor.WHITE + holder); + } + } + + player + .sendMessage(ChatWriter.pluginMessage(BedwarsRel._l(player, "ingame.record-with-holders", + ImmutableMap + .of("record", this.getFormattedRecord(), "holders", holders.toString())))); + } else { + player.sendMessage(ChatWriter.pluginMessage( + BedwarsRel + ._l(player, "ingame.record", ImmutableMap.of("record", this.getFormattedRecord())))); + } + } + + private void dropTargetBlock(Block targetBlock) { + if (targetBlock.getType().equals(Material.BED_BLOCK)) { + Block bedHead; + Block bedFeet; + Bed bedBlock = (Bed) targetBlock.getState().getData(); + + if (!bedBlock.isHeadOfBed()) { + bedFeet = targetBlock; + bedHead = Utils.getBedNeighbor(bedFeet); + } else { + bedHead = targetBlock; + bedFeet = Utils.getBedNeighbor(bedHead); + } + + if (!BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_12")) { + bedFeet.setType(Material.AIR); + } else { + bedHead.setType(Material.AIR); + } + } else { + targetBlock.setType(Material.AIR); + } + } + + private String formatLobbyScoreboardString(String str) { + String finalStr = str; + + finalStr = finalStr.replace("$regionname$", this.region.getName()); + finalStr = finalStr.replace("$gamename$", this.name); + finalStr = finalStr.replace("$players$", String.valueOf(this.getPlayerAmount())); + finalStr = finalStr.replace("$maxplayers$", String.valueOf(this.getMaxPlayers())); + + return ChatColor.translateAlternateColorCodes('&', finalStr); + } + + private String formatScoreboardTeam(Team team, boolean destroyed) { + String format = null; + + if (team == null) { + return ""; + } + + if (destroyed) { + format = BedwarsRel.getInstance().getStringConfig("scoreboard.format-bed-destroyed", + "&c$status$ $team$"); + } else { + format = + BedwarsRel + .getInstance().getStringConfig("scoreboard.format-bed-alive", "&a$status$ $team$"); + } + + format = format.replace("$status$", (destroyed) ? Game.bedLostString() : Game.bedExistString()); + format = format.replace("$team$", team.getChatColor() + team.getName()); + + return ChatColor.translateAlternateColorCodes('&', format); + } + + private String formatScoreboardTitle() { + String format = + BedwarsRel.getInstance() + .getStringConfig("scoreboard.format-title", "&e$region$&f - $time$"); + + // replaces + format = format.replace("$region$", this.getRegion().getName()); + format = format.replace("$game$", this.name); + format = format.replace("$time$", this.getFormattedTimeLeft()); + + return ChatColor.translateAlternateColorCodes('&', format); + } + + public int getCurrentPlayerAmount() { + int amount = 0; + for (Team t : this.teams.values()) { + amount += t.getPlayers().size(); + } + + return amount; + } + + public String getFormattedRecord() { + return Utils.getFormattedTime(this.record); + } + + private String getFormattedTimeLeft() { + int min = 0; + int sec = 0; + String minStr = ""; + String secStr = ""; + + min = (int) Math.floor(this.timeLeft / 60); + sec = this.timeLeft % 60; + + minStr = (min < 10) ? "0" + String.valueOf(min) : String.valueOf(min); + secStr = (sec < 10) ? "0" + String.valueOf(sec) : String.valueOf(sec); + + return minStr + ":" + secStr; + } + + public List getFreePlayersClone() { + List players = new ArrayList(); + if (this.freePlayers.size() > 0) { + players.addAll(this.freePlayers); + } + + return players; + } + + public HashMap getItemShopCategories() { + return this.shopCategories; + } + + public void setItemShopCategories(HashMap cats) { + this.shopCategories = cats; + } + + public GameLobbyCountdown getLobbyCountdown() { + return this.gameLobbyCountdown; + } + + public void setLobbyCountdown(GameLobbyCountdown glc) { + this.gameLobbyCountdown = glc; + } + + private Team getLowestTeam() { + Team lowest = null; + for (Team team : this.teams.values()) { + if (lowest == null) { + lowest = team; + continue; + } + + if (team.getPlayers().size() < lowest.getPlayers().size()) { + lowest = team; + } + } + + return lowest; + } + + public int getMaxPlayers() { + int max = 0; + for (Team t : this.teams.values()) { + max += t.getMaxPlayers(); + } + + return max; + } + + public NewItemShop getNewItemShop(Player player) { + return this.newItemShops.get(player); + } + + public List getNonVipPlayers() { + List players = this.getPlayers(); + + Iterator playerIterator = players.iterator(); + while (playerIterator.hasNext()) { + Player player = playerIterator.next(); + if (player.hasPermission("bw.vip.joinfull") || player.hasPermission("bw.vip.forcestart") + || player.hasPermission("bw.vip")) { + playerIterator.remove(); + } + } + + return players; + } + + public List getOrderedItemShopCategories() { + return this.orderedShopCategories; + } + + public int getPlayerAmount() { + return this.getPlayers().size(); + } + + public Player getPlayerDamager(Player p) { + return this.playerDamages.get(p); + } + + public PlayerSettings getPlayerSettings(Player player) { + return this.playerSettings.get(player); + } + + public PlayerStorage getPlayerStorage(Player p) { + return this.playerStorages.get(p); + } + + public Team getPlayerTeam(Player p) { + for (Team team : this.getTeams().values()) { + if (team.isInTeam(p)) { + return team; + } + } + + return null; + } + + public Location getPlayerTeleportLocation(Player player) { + if (this.isSpectator(player) + && !(this.getCycle() instanceof BungeeGameCycle && this.getCycle().isEndGameRunning() + && BedwarsRel.getInstance().getBooleanConfig("bungeecord.endgame-in-lobby", true))) { + return ((Team) this.teams.values().toArray()[Utils.randInt(0, this.teams.size() - 1)]) + .getSpawnLocation(); + } + + if (this.getPlayerTeam(player) != null + && !(this.getCycle() instanceof BungeeGameCycle && this.getCycle().isEndGameRunning() + && BedwarsRel.getInstance().getBooleanConfig("bungeecord.endgame-in-lobby", true))) { + return this.getPlayerTeam(player).getSpawnLocation(); + } + + return this.getLobby(); + } + + public ArrayList getPlayers() { + ArrayList players = new ArrayList<>(); + + players.addAll(this.freePlayers); + + for (Team team : this.teams.values()) { + players.addAll(team.getPlayers()); + } + + return players; + } + + public List getRessourceSpawner() { + return this.resourceSpawners; + } + + public HashMap getSigns() { + return this.joinSigns; + } + + public List getSpecialItems() { + return this.specialItems; + } + + public Material getTargetMaterial() { + if (this.targetMaterial == null) { + return Utils.getMaterialByConfig("game-block", Material.BED_BLOCK); + } + + return this.targetMaterial; + } + + public Team getTeam(String name) { + return this.teams.get(name); + } + + public Team getTeamByDyeColor(DyeColor color) { + for (Team t : this.teams.values()) { + if (t.getColor().getDyeColor().equals(color)) { + return t; + } + } + + return null; + } + + public Team getTeamOfBed(Block bed) { + for (Team team : this.getTeams().values()) { + if (team.getFeetTarget() == null) { + if (team.getHeadTarget().equals(bed)) { + return team; + } + } else { + if (team.getHeadTarget().equals(bed) || team.getFeetTarget().equals(bed)) { + return team; + } + } + } + + return null; + } + + public Team getTeamOfEnderChest(Block chest) { + for (Team team : this.teams.values()) { + if (team.getChests().contains(chest)) { + return team; + } + } + + return null; + } + + public ArrayList getTeamPlayers() { + ArrayList players = new ArrayList<>(); + + for (Team team : this.teams.values()) { + players.addAll(team.getPlayers()); + } + + return players; + } + + public HashMap getTeams() { + return this.teams; + } + + public boolean handleDestroyTargetMaterial(Player p, Block block) { + Team team = this.getPlayerTeam(p); + if (team == null) { + return false; + } + + Team bedDestroyTeam = null; + Block bedBlock = team.getHeadTarget(); + + if (block.getType().equals(Material.BED_BLOCK)) { + Block breakBlock = block; + Block neighbor = null; + Bed breakBed = (Bed) breakBlock.getState().getData(); + + if (!breakBed.isHeadOfBed()) { + neighbor = breakBlock; + breakBlock = Utils.getBedNeighbor(neighbor); + } else { + neighbor = Utils.getBedNeighbor(breakBlock); + } + + if (bedBlock.equals(breakBlock)) { + p.sendMessage( + ChatWriter + .pluginMessage(ChatColor.RED + BedwarsRel._l(p, "ingame.blocks.ownbeddestroy"))); + return false; + } + + bedDestroyTeam = this.getTeamOfBed(breakBlock); + if (bedDestroyTeam == null) { + return false; + } + this.dropTargetBlock(block); + } else { + if (bedBlock.equals(block)) { + p.sendMessage( + ChatWriter + .pluginMessage(ChatColor.RED + BedwarsRel._l(p, "ingame.blocks.ownbeddestroy"))); + return false; + } + + bedDestroyTeam = this.getTeamOfBed(block); + if (bedDestroyTeam == null) { + return false; + } + + this.dropTargetBlock(block); + } + + // set statistics + if (BedwarsRel.getInstance().statisticsEnabled()) { + PlayerStatistic statistic = BedwarsRel.getInstance().getPlayerStatisticManager() + .getStatistic(p); + statistic.setCurrentDestroyedBeds(statistic.getCurrentDestroyedBeds() + 1); + statistic.setCurrentScore(statistic.getCurrentScore() + BedwarsRel.getInstance() + .getIntConfig("statistics.scores.bed-destroy", 25)); + } + + // reward when destroy bed + if (BedwarsRel.getInstance().getBooleanConfig("rewards.enabled", false)) { + List commands = + BedwarsRel.getInstance().getConfig().getStringList("rewards.player-destroy-bed"); + BedwarsRel.getInstance() + .dispatchRewardCommands(commands, ImmutableMap.of("{player}", p.getName(), + "{score}", + String.valueOf( + BedwarsRel.getInstance().getIntConfig("statistics.scores.bed-destroy", 25)))); + } + + BedwarsTargetBlockDestroyedEvent targetBlockDestroyedEvent = + new BedwarsTargetBlockDestroyedEvent(this, p, bedDestroyTeam); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(targetBlockDestroyedEvent); + + for (Player aPlayer : this.getPlayers()) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(aPlayer, "ingame.blocks.beddestroyed", + ImmutableMap.of("team", + bedDestroyTeam.getChatColor() + bedDestroyTeam.getName() + ChatColor.RED, + "player", + Game.getPlayerWithTeamString(p, team, ChatColor.RED))))); + } + } + + this.broadcastSound( + Sound.valueOf( + BedwarsRel.getInstance().getStringConfig("bed-sound", "ENDERDRAGON_GROWL") + .toUpperCase()), + 30.0F, 10.0F); + this.updateScoreboard(); + return true; + } + + public boolean hasEnoughPlayers() { + return this.getPlayers().size() >= this.getMinPlayers(); + } + + public boolean hasEnoughTeams() { + int teamsWithPlayers = 0; + for (Team team : this.getTeams().values()) { + if (team.getPlayers().size() > 0) { + teamsWithPlayers++; + } + } + + return (teamsWithPlayers > 1 || (teamsWithPlayers == 1 && this.getFreePlayers().size() >= 1) + || (teamsWithPlayers == 0 && this.getFreePlayers().size() >= 2)); + } + + public boolean isAutobalanceEnabled() { + if (BedwarsRel.getInstance().getBooleanConfig("global-autobalance", false)) { + return true; + } + + return this.autobalance; + } + + /* + * GETTER / SETTER + */ + + public boolean isFull() { + return (this.getMaxPlayers() <= this.getPlayerAmount()); + } + + public boolean isInGame(Player p) { + for (Team t : this.teams.values()) { + if (t.isInTeam(p)) { + return true; + } + } + + return this.freePlayers.contains(p); + } + + public Team isOver() { + if (this.isOver || this.state != GameState.RUNNING) { + return null; + } + + ArrayList players = this.getTeamPlayers(); + ArrayList teams = new ArrayList<>(); + + if (players.size() == 0 || players.isEmpty()) { + return null; + } + + for (Player player : players) { + Team playerTeam = this.getPlayerTeam(player); + if (teams.contains(playerTeam)) { + continue; + } + + if (!player.isDead()) { + teams.add(playerTeam); + } else if (!playerTeam.isDead(this)) { + teams.add(playerTeam); + } + } + + if (teams.size() == 1) { + return teams.get(0); + } else { + return null; + } + } + + public boolean isOverSet() { + return this.isOver; + } + + public boolean isProtected(Player player) { + return (this.respawnProtections.containsKey(player) && this.getState() == GameState.RUNNING); + } + + public boolean isSpectator(Player player) { + return (this.getState() == GameState.RUNNING && this.freePlayers.contains(player)); + } + + public boolean isStartable() { + return (this.hasEnoughPlayers() && this.hasEnoughTeams()); + } + + public void kickAllPlayers() { + for (Player p : this.getPlayers()) { + this.playerLeave(p, false); + } + } + + public void loadItemShopCategories() { + this.shopCategories = MerchantCategory.loadCategories(BedwarsRel.getInstance().getShopConfig()); + this.orderedShopCategories = this.loadOrderedItemShopCategories(); + } + + private List loadOrderedItemShopCategories() { + List list = new ArrayList(this.shopCategories.values()); + Collections.sort(list, new MerchantCategoryComparator()); + return list; + } + + private void makeTeamsReady() { + this.playingTeams.clear(); + + for (Team team : this.teams.values()) { + team.getScoreboardTeam() + .setAllowFriendlyFire(BedwarsRel.getInstance().getConfig().getBoolean("friendlyfire")); + if (team.getPlayers().size() == 0) { + this.dropTargetBlock(team.getHeadTarget()); + } else { + this.playingTeams.add(team); + } + } + + this.updateScoreboard(); + } + + private void moveFreePlayersToTeam() { + for (Player player : this.freePlayers) { + Team lowest = this.getLowestTeam(); + lowest.addPlayer(player); + } + + this.freePlayers = new ArrayList(); + this.updateScoreboard(); + } + + public void nonFreePlayer(Player p) { + if (this.freePlayers.contains(p)) { + this.freePlayers.remove(p); + } + } + + public NewItemShop openNewItemShop(Player player) { + NewItemShop newShop = new NewItemShop(this.orderedShopCategories); + this.newItemShops.put(player, newShop); + + return newShop; + } + + public void openSpectatorCompass(Player player) { + if (!this.isSpectator(player)) { + return; + } + + int teamplayers = this.getTeamPlayers().size(); + int nom = (teamplayers % 9 == 0) ? 9 : (teamplayers % 9); + int size = teamplayers + (9 - nom); + Inventory compass = Bukkit + .createInventory(null, size, BedwarsRel._l(player, "ingame.spectator")); + for (Team t : this.getTeams().values()) { + for (Player p : t.getPlayers()) { + ItemStack head = new ItemStack(Material.SKULL_ITEM, 1, (short) 3); + SkullMeta meta = (SkullMeta) head.getItemMeta(); + meta.setDisplayName(t.getChatColor() + p.getDisplayName()); + meta.setLore(Arrays.asList(t.getChatColor() + t.getDisplayName())); + meta.setOwner(p.getName()); + head.setItemMeta(meta); + + compass.addItem(head); + } + } + + player.openInventory(compass); + } + + public void playerJoinTeam(Player player, Team team) { + if (team.getPlayers().size() >= team.getMaxPlayers()) { + player.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(player, "errors.teamfull"))); + return; + } + + if (team.addPlayer(player)) { + this.nonFreePlayer(player); + + // Team color chestplate + ItemStack chestplate = new ItemStack(Material.LEATHER_CHESTPLATE, 1); + LeatherArmorMeta meta = (LeatherArmorMeta) chestplate.getItemMeta(); + meta.setColor(team.getColor().getColor()); + meta.setDisplayName(team.getChatColor() + team.getDisplayName()); + chestplate.setItemMeta(meta); + + player.getInventory().setItem(7, chestplate); + player.updateInventory(); + } else { + player.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(player, "errors.teamfull"))); + return; + } + + this.updateScoreboard(); + + if (this.isStartable() && this.getLobbyCountdown() == null) { + GameLobbyCountdown lobbyCountdown = new GameLobbyCountdown(this); + lobbyCountdown.runTaskTimer(BedwarsRel.getInstance(), 20L, 20L); + this.setLobbyCountdown(lobbyCountdown); + } + + player + .sendMessage(ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel + ._l(player, "lobby.teamjoined", + ImmutableMap.of("team", team.getDisplayName() + ChatColor.GREEN)))); + } + + public boolean playerJoins(final Player p) { + + if (this.state == GameState.STOPPED + || (this.state == GameState.RUNNING && !BedwarsRel.getInstance().spectationEnabled())) { + if (this.cycle instanceof BungeeGameCycle) { + ((BungeeGameCycle) this.cycle).sendBungeeMessage(p, + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(p, "errors.cantjoingame"))); + } else { + p.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(p, "errors.cantjoingame"))); + } + return false; + } + + if (!this.cycle.onPlayerJoins(p)) { + return false; + } + + BedwarsPlayerJoinEvent joiningEvent = new BedwarsPlayerJoinEvent(this, p); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(joiningEvent); + + if (joiningEvent.isCancelled()) { + if (joiningEvent.getKickOnCancel()) { + new BukkitRunnable() { + @Override + public void run() { + if (Game.this.getCycle() instanceof BungeeGameCycle) { + ((BungeeGameCycle) Game.this.getCycle()) + .bungeeSendToServer(BedwarsRel.getInstance().getBungeeHub(), p, true); + } + } + }.runTaskLater(BedwarsRel.getInstance(), 5L); + } + return false; + } + + BedwarsRel.getInstance().getGameManager().addGamePlayer(p, this); + if (BedwarsRel.getInstance().statisticsEnabled()) { + // load statistics + BedwarsRel.getInstance().getPlayerStatisticManager().getStatistic(p); + } + + // add damager and set it to null + this.playerDamages.put(p, null); + + // add player settings + this.addPlayerSettings(p); + + new BukkitRunnable() { + + @Override + public void run() { + for (Player playerInGame : Game.this.getPlayers()) { + playerInGame.hidePlayer(p); + p.hidePlayer(playerInGame); + } + } + + }.runTaskLater(BedwarsRel.getInstance(), 5L); + + if (this.state == GameState.RUNNING) { + this.toSpectator(p); + this.displayMapInfo(p); + } else { + + PlayerStorage storage = this.addPlayerStorage(p); + storage.store(); + storage.clean(); + + if (!BedwarsRel.getInstance().isBungee()) { + final Location location = this.getPlayerTeleportLocation(p); + if (!p.getLocation().equals(location)) { + this.getPlayerSettings(p).setTeleporting(true); + if (BedwarsRel.getInstance().isBungee()) { + new BukkitRunnable() { + + @Override + public void run() { + p.teleport(location); + } + + }.runTaskLater(BedwarsRel.getInstance(), 10L); + } else { + p.teleport(location); + } + } + } + + storage.loadLobbyInventory(this); + + new BukkitRunnable() { + + @Override + public void run() { + Game.this.setPlayerGameMode(p); + Game.this.setPlayerVisibility(p); + } + + }.runTaskLater(BedwarsRel.getInstance(), 15L); + + for (Player aPlayer : this.getPlayers()) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage( + ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel._l(aPlayer, "lobby.playerjoin", + ImmutableMap.of("player", p.getDisplayName() + ChatColor.GREEN)))); + } + } + + if (!this.isAutobalanceEnabled()) { + this.freePlayers.add(p); + } else { + Team team = this.getLowestTeam(); + team.addPlayer(p); + } + + if (BedwarsRel.getInstance().getBooleanConfig("store-game-records", true)) { + this.displayRecord(p); + } + + if (this.isStartable()) { + if (this.gameLobbyCountdown == null) { + this.gameLobbyCountdown = new GameLobbyCountdown(this); + this.gameLobbyCountdown.runTaskTimer(BedwarsRel.getInstance(), 20L, 20L); + } + } else { + if (!this.hasEnoughPlayers()) { + int playersNeeded = this.getMinPlayers() - this.getPlayerAmount(); + for (Player aPlayer : this.getPlayers()) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage(ChatWriter + .pluginMessage( + ChatColor.GREEN + BedwarsRel._l(aPlayer, "lobby.moreplayersneeded", "count", + ImmutableMap.of("count", String.valueOf(playersNeeded))))); + } + } + } else if (!this.hasEnoughTeams()) { + for (Player aPlayer : this.getPlayers()) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage(ChatWriter + .pluginMessage(ChatColor.RED + BedwarsRel._l(aPlayer, "lobby.moreteamsneeded"))); + } + } + } + } + } + + BedwarsPlayerJoinedEvent joinEvent = new BedwarsPlayerJoinedEvent(this, null, p); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(joinEvent); + + this.updateScoreboard(); + this.updateSigns(); + return true; + + } + + public boolean playerLeave(Player p, boolean kicked) { + this.getPlayerSettings(p).setTeleporting(true); + Team team = this.getPlayerTeam(p); + + BedwarsPlayerLeaveEvent leaveEvent = new BedwarsPlayerLeaveEvent(this, p, team); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(leaveEvent); + + PlayerStatistic statistic = null; + if (BedwarsRel.getInstance().statisticsEnabled()) { + statistic = BedwarsRel.getInstance().getPlayerStatisticManager().getStatistic(p); + } + + if (this.isSpectator(p)) { + if (!this.getCycle().isEndGameRunning()) { + for (Player player : this.getPlayers()) { + if (player.equals(p)) { + continue; + } + + player.showPlayer(p); + p.showPlayer(player); + } + } + } else { + if (this.state == GameState.RUNNING && !this.getCycle().isEndGameRunning()) { + if (!team.isDead(this) && !p.isDead() && BedwarsRel.getInstance().statisticsEnabled() + && BedwarsRel.getInstance().getBooleanConfig("statistics.player-leave-kills", false)) { + statistic.setCurrentDeaths(statistic.getCurrentDeaths() + 1); + statistic.setCurrentScore(statistic.getCurrentScore() + BedwarsRel.getInstance() + .getIntConfig("statistics.scores.die", 0)); + if (this.getPlayerDamager(p) != null) { + PlayerStatistic killerPlayer = BedwarsRel.getInstance().getPlayerStatisticManager() + .getStatistic(this.getPlayerDamager(p)); + killerPlayer.setCurrentKills(killerPlayer.getCurrentKills() + 1); + killerPlayer.setCurrentScore(killerPlayer.getCurrentScore() + BedwarsRel.getInstance() + .getIntConfig("statistics.scores.kill", 10)); + } + statistic.setCurrentLoses(statistic.getCurrentLoses() + 1); + statistic.setCurrentScore(statistic.getCurrentScore() + BedwarsRel.getInstance() + .getIntConfig("statistics.scores.lose", 0)); + } + } + } + + if (this.isProtected(p)) { + this.removeProtection(p); + } + + this.playerDamages.remove(p); + if (team != null && BedwarsRel.getInstance().getGameManager().getGameOfPlayer(p) != null + && !BedwarsRel.getInstance().getGameManager().getGameOfPlayer(p).isSpectator(p)) { + if (kicked) { + for (Player aPlayer : this.getPlayers()) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(aPlayer, "ingame.player.kicked", ImmutableMap.of("player", + Game.getPlayerWithTeamString(p, team, ChatColor.RED) + ChatColor.RED)))); + } + } + } else { + for (Player aPlayer : this.getPlayers()) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage( + ChatWriter.pluginMessage( + ChatColor.RED + BedwarsRel + ._l(aPlayer, "ingame.player.left", ImmutableMap.of("player", + Game.getPlayerWithTeamString(p, team, ChatColor.RED) + + ChatColor.RED)))); + } + } + } + team.removePlayer(p); + } + + BedwarsRel.getInstance().getGameManager().removeGamePlayer(p); + + if (this.freePlayers.contains(p)) { + this.freePlayers.remove(p); + } + + if (BedwarsRel.getInstance().isBungee()) { + this.cycle.onPlayerLeave(p); + } + + if (BedwarsRel.getInstance().statisticsEnabled()) { + if (BedwarsRel.getInstance().getBooleanConfig("statistics.show-on-game-end", true)) { + BedwarsRel.getInstance().getServer().dispatchCommand(p, "bw stats"); + } + BedwarsRel.getInstance().getPlayerStatisticManager().storeStatistic(statistic); + + BedwarsRel.getInstance().getPlayerStatisticManager().unloadStatistic(p); + } + + PlayerStorage storage = this.playerStorages.get(p); + storage.clean(); + storage.restore(); + + this.playerSettings.remove(p); + this.updateScoreboard(); + + try { + p.setScoreboard(BedwarsRel.getInstance().getScoreboardManager().getMainScoreboard()); + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + } + + this.removeNewItemShop(p); + + if (!BedwarsRel.getInstance().isBungee() && p.isOnline()) { + if (kicked) { + p.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(p, "ingame.player.waskicked"))); + } else { + p.sendMessage(ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel._l(p, "success.left"))); + } + } + + if (!BedwarsRel.getInstance().isBungee()) { + this.cycle.onPlayerLeave(p); + } + + this.updateSigns(); + this.playerStorages.remove(p); + return true; + } + + public void removeJoinSign(Location location) { + this.joinSigns.remove(location); + this.updateSignConfig(); + } + + public void removeNewItemShop(Player player) { + if (!this.newItemShops.containsKey(player)) { + return; + } + + this.newItemShops.remove(player); + } + + public void removePlayerSettings(Player player) { + this.playerSettings.remove(player); + } + + public void removeProtection(Player player) { + RespawnProtectionRunnable rpr = this.respawnProtections.get(player); + if (rpr == null) { + return; + } + + try { + rpr.cancel(); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + // isn't running, ignore + } + + this.respawnProtections.remove(player); + } + + public void removeRunningTask(BukkitTask task) { + this.runningTasks.remove(task); + } + + public void removeRunningTask(BukkitRunnable bukkitRunnable) { + this.runningTasks.remove(bukkitRunnable); + } + + public void removeSpecialItem(SpecialItem item) { + this.specialItems.remove(item); + } + + public void removeTeam(Team team) { + this.teams.remove(team.getName()); + this.updateSigns(); + } + + public void resetRegion() { + if (this.region == null) { + return; + } + + this.region.reset(this); + } + + public void resetScoreboard() { + this.timeLeft = BedwarsRel.getInstance().getMaxLength(); + this.length = this.timeLeft; + this.scoreboard.clearSlot(DisplaySlot.SIDEBAR); + } + + public boolean run(CommandSender sender) { + if (this.state != GameState.STOPPED) { + sender + .sendMessage( + ChatWriter + .pluginMessage(ChatColor.RED + BedwarsRel._l(sender, "errors.cantstartagain"))); + return false; + } + + GameCheckCode gcc = this.checkGame(); + if (gcc != GameCheckCode.OK) { + sender.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + gcc.getCodeMessage())); + return false; + } + + if (sender instanceof Player) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel._l(sender, "success.gamerun"))); + } + + this.isStopping = false; + this.state = GameState.WAITING; + this.updateSigns(); + return true; + } + + public boolean saveGame(CommandSender sender, boolean direct) { + BedwarsSaveGameEvent saveEvent = new BedwarsSaveGameEvent(this, sender); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(saveEvent); + + if (saveEvent.isCancelled()) { + return true; + } + + GameCheckCode check = this.checkGame(); + + if (check != GameCheckCode.OK) { + sender.sendMessage(ChatWriter.pluginMessage(ChatColor.RED + check.getCodeMessage())); + return false; + } + + File gameConfig = new File( + BedwarsRel.getInstance().getDataFolder() + "/" + GameManager.gamesPath + + "/" + this.name + "/game.yml"); + gameConfig.mkdirs(); + + if (gameConfig.exists()) { + gameConfig.delete(); + } + + this.saveRegion(direct); + this.createGameConfig(gameConfig); + + return true; + } + + public void saveRecord() { + File gameConfig = new File( + BedwarsRel.getInstance().getDataFolder() + "/" + GameManager.gamesPath + + "/" + this.name + "/game.yml"); + + if (!gameConfig.exists()) { + return; + } + + this.config.set("record", this.record); + if (BedwarsRel.getInstance().getBooleanConfig("store-game-records-holder", true)) { + this.config.set("record-holders", this.recordHolders); + } + + try { + this.config.save(gameConfig); + } catch (IOException e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + } + } + + private void saveRegion(boolean direct) { + if (this.region == null || direct) { + if (this.regionName == null) { + this.regionName = this.loc1.getWorld().getName(); + } + + this.region = new Region(this.loc1, this.loc2, this.regionName); + } + + // nametag the villager + this.region.setVillagerNametag(); + + this.updateSigns(); + } + + public void setGameLobbyCountdown(GameLobbyCountdown countdown) { + this.gameLobbyCountdown = countdown; + } + + public void setLobby(Player sender) { + Location lobby = sender.getLocation(); + + if (this.region != null && this.region.getWorld().equals(lobby.getWorld())) { + sender.sendMessage( + ChatWriter + .pluginMessage(ChatColor.RED + BedwarsRel._l(sender, "errors.lobbyongameworld"))); + return; + } + + this.lobby = lobby; + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel._l(sender, "success.lobbyset"))); + } + + public void setLobby(Location lobby) { + if (this.region != null) { + if (this.region.getWorld().equals(lobby.getWorld())) { + BedwarsRel.getInstance().getServer().getConsoleSender().sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(BedwarsRel.getInstance().getServer().getConsoleSender(), + "errors.lobbyongameworld"))); + return; + } + } + + this.lobby = lobby; + } + + /* + * PRIVATE + */ + + public void setLoc(Location loc, String type) { + if (type.equalsIgnoreCase("loc1")) { + this.loc1 = loc; + } else { + this.loc2 = loc; + } + } + + public void setMinPlayers(int players) { + int max = this.getMaxPlayers(); + int minPlayers = players; + + if (max < players && max > 0) { + minPlayers = max; + } + + this.minPlayers = minPlayers; + } + + public void setPlayerDamager(Player p, Player damager) { + this.playerDamages.remove(p); + this.playerDamages.put(p, damager); + } + + public void setPlayerGameMode(Player player) { + if (this.isSpectator(player) + && !(this.getCycle() instanceof BungeeGameCycle && this.getCycle().isEndGameRunning() + && BedwarsRel.getInstance().getBooleanConfig("bungeecord.endgame-in-lobby", true))) { + + player.setAllowFlight(true); + player.setFlying(true); + player.setGameMode(GameMode.SPECTATOR); + + } else { + if (this.getState().equals(GameState.RUNNING)) { + player.setGameMode(GameMode.SURVIVAL); + } else if (this.getState().equals(GameState.WAITING)) { + Integer gameMode = BedwarsRel.getInstance().getIntConfig("lobby-gamemode", 0); + if (gameMode == 0) { + player.setGameMode(GameMode.SURVIVAL); + } else if (gameMode == 1) { + player.setGameMode(GameMode.CREATIVE); + } else if (gameMode == 2) { + player.setGameMode(GameMode.ADVENTURE); + } else if (gameMode == 3) { + player.setGameMode(GameMode.SPECTATOR); + } + } + } + } + + public void setPlayerVisibility(Player player) { + ArrayList players = new ArrayList(); + players.addAll(this.getPlayers()); + + if (this.state == GameState.RUNNING + && !(this.getCycle() instanceof BungeeGameCycle && this.getCycle().isEndGameRunning() + && BedwarsRel.getInstance().getBooleanConfig("bungeecord.endgame-in-lobby", true))) { + if (this.isSpectator(player)) { + if (player.getGameMode().equals(GameMode.SURVIVAL)) { + for (Player playerInGame : players) { + playerInGame.hidePlayer(player); + player.showPlayer(playerInGame); + } + } else { + for (Player teamPlayer : this.getTeamPlayers()) { + teamPlayer.hidePlayer(player); + player.showPlayer(teamPlayer); + } + for (Player freePlayer : this.getFreePlayers()) { + freePlayer.showPlayer(player); + player.showPlayer(freePlayer); + } + } + } else { + for (Player playerInGame : players) { + playerInGame.showPlayer(player); + player.showPlayer(playerInGame); + } + } + } else { + for (Player playerInGame : players) { + if (!playerInGame.equals(player)) { + playerInGame.showPlayer(player); + player.showPlayer(playerInGame); + } + } + } + + } + + public void setScoreboard(Scoreboard sb) { + this.scoreboard = sb; + } + + public void setState(GameState state) { + this.state = state; + this.updateSigns(); + } + + public boolean start(CommandSender sender) { + if (this.state != GameState.WAITING) { + sender.sendMessage( + ChatWriter + .pluginMessage(ChatColor.RED + BedwarsRel._l(sender, "errors.startoutofwaiting"))); + return false; + } + + BedwarsGameStartEvent startEvent = new BedwarsGameStartEvent(this); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(startEvent); + + if (startEvent.isCancelled()) { + return false; + } + + this.isOver = false; + for (Player aPlayer : this.getPlayers()) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage( + ChatWriter + .pluginMessage(ChatColor.GREEN + BedwarsRel._l(aPlayer, "ingame.gamestarting"))); + } + } + + // load shop categories again (if shop was changed) + this.loadItemShopCategories(); + + this.runningTasks.clear(); + this.cleanUsersInventory(); + this.clearProtections(); + this.moveFreePlayersToTeam(); + this.makeTeamsReady(); + + this.cycle.onGameStart(); + this.startResourceSpawners(); + + // Update world time before game starts + this.getRegion().getWorld().setTime(this.time); + + this.teleportPlayersToTeamSpawn(); + + this.state = GameState.RUNNING; + + for (Player player : this.getPlayers()) { + this.setPlayerGameMode(player); + this.setPlayerVisibility(player); + } + + this.startActionBarRunnable(); + this.updateScoreboard(); + + if (BedwarsRel.getInstance().getBooleanConfig("store-game-records", true)) { + this.displayRecord(); + } + + this.startTimerCountdown(); + + if (BedwarsRel.getInstance().getBooleanConfig("titles.map.enabled", false)) { + this.displayMapInfo(); + } + + this.updateSigns(); + + if (BedwarsRel.getInstance().getBooleanConfig("global-messages", true)) { + for (Player aPlayer : BedwarsRel.getInstance().getServer().getOnlinePlayers()) { + aPlayer.sendMessage(ChatWriter.pluginMessage(ChatColor.GREEN + + BedwarsRel._l(aPlayer, "ingame.gamestarted", + ImmutableMap.of("game", this.getRegion().getName())))); + } + BedwarsRel.getInstance().getServer().getConsoleSender() + .sendMessage(ChatWriter.pluginMessage(ChatColor.GREEN + + BedwarsRel + ._l(BedwarsRel.getInstance().getServer().getConsoleSender(), "ingame.gamestarted", + ImmutableMap.of("game", this.getRegion().getName())))); + } + + BedwarsGameStartedEvent startedEvent = new BedwarsGameStartedEvent(this); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(startedEvent); + + return true; + } + + private void startActionBarRunnable() { + if (BedwarsRel.getInstance().getBooleanConfig("show-team-in-actionbar", false)) { + try { + Class clazz = Class.forName("io.github.bedwarsrel.com." + + BedwarsRel.getInstance().getCurrentVersion().toLowerCase() + ".ActionBar"); + final Method sendActionBar = + clazz.getDeclaredMethod("sendActionBar", Player.class, String.class); + + BukkitTask task = new BukkitRunnable() { + + @Override + public void run() { + for (Team team : Game.this.getTeams().values()) { + for (Player player : team.getPlayers()) { + try { + sendActionBar.invoke(null, player, + team.getChatColor() + BedwarsRel._l(player, "ingame.team") + " " + team + .getDisplayName()); + } catch (IllegalAccessException | IllegalArgumentException + | InvocationTargetException e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + } + } + } + } + }.runTaskTimer(BedwarsRel.getInstance(), 0L, 20L); + this.addRunningTask(task); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + ex.printStackTrace(); + } + } + } + + private void startResourceSpawners() { + for (ResourceSpawner rs : this.getRessourceSpawner()) { + rs.setGame(this); + this.runningTasks.add(BedwarsRel.getInstance().getServer().getScheduler().runTaskTimer( + BedwarsRel.getInstance(), rs, Math.round((((double) rs.getInterval()) / 1000.0) * 20.0), + Math.round((((double) rs.getInterval()) / 1000.0) * 20.0))); + } + } + + private void startTimerCountdown() { + this.timeLeft = BedwarsRel.getInstance().getMaxLength(); + this.length = BedwarsRel.getInstance().getMaxLength(); + BukkitRunnable task = new BukkitRunnable() { + + @Override + public void run() { + Game.this.updateScoreboardTimer(); + if (Game.this.timeLeft == 0) { + Game.this.isOver = true; + Game.this.getCycle().checkGameOver(); + this.cancel(); + return; + } + + Game.this.timeLeft--; + } + }; + + this.runningTasks.add(task.runTaskTimer(BedwarsRel.getInstance(), 0L, 20L)); + } + + public boolean stop() { + if (this.state == GameState.STOPPED) { + return false; + } + + this.isStopping = true; + + this.stopWorkers(); + this.clearProtections(); + + try { + this.kickAllPlayers(); + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + } + this.resetRegion(); + this.state = GameState.STOPPED; + this.updateSigns(); + + this.isStopping = false; + return true; + } + + public void stopWorkers() { + for (BukkitTask task : this.runningTasks) { + try { + task.cancel(); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + // already cancelled + } + } + + this.runningTasks.clear(); + } + + private void teleportPlayersToTeamSpawn() { + for (Team team : this.teams.values()) { + for (Player player : team.getPlayers()) { + if (!player.getWorld().equals(team.getSpawnLocation().getWorld())) { + this.getPlayerSettings(player).setTeleporting(true); + } + player.setVelocity(new Vector(0, 0, 0)); + player.setFallDistance(0.0F); + player.teleport(team.getSpawnLocation()); + if (this.getPlayerStorage(player) != null) { + this.getPlayerStorage(player).clean(); + } + } + } + } + + public void toSpectator(Player player) { + final Player p = player; + + if (!this.freePlayers.contains(player)) { + this.freePlayers.add(player); + } + + PlayerStorage storage = this.getPlayerStorage(player); + if (storage != null) { + storage.clean(); + } else { + storage = this.addPlayerStorage(player); + storage.store(); + storage.clean(); + } + + final Location location = this.getPlayerTeleportLocation(p); + + if (!p.getLocation().getWorld().equals(location.getWorld())) { + this.getPlayerSettings(p).setTeleporting(true); + if (BedwarsRel.getInstance().isBungee()) { + new BukkitRunnable() { + + @Override + public void run() { + p.teleport(location); + } + + }.runTaskLater(BedwarsRel.getInstance(), 10L); + + } else { + p.teleport(location); + } + } + + new BukkitRunnable() { + + @Override + public void run() { + Game.this.setPlayerGameMode(p); + Game.this.setPlayerVisibility(p); + } + + }.runTaskLater(BedwarsRel.getInstance(), 15L); + + // Leave game (Slimeball) + ItemStack leaveGame = new ItemStack(Material.SLIME_BALL, 1); + ItemMeta im = leaveGame.getItemMeta(); + im.setDisplayName(BedwarsRel._l(player, "lobby.leavegame")); + leaveGame.setItemMeta(im); + p.getInventory().setItem(8, leaveGame); + + if (this.getCycle() instanceof BungeeGameCycle && this.getCycle().isEndGameRunning() + && BedwarsRel.getInstance().getBooleanConfig("bungeecord.endgame-in-lobby", true)) { + p.updateInventory(); + return; + } + + // Teleport to player (Compass) + ItemStack teleportPlayer = new ItemStack(Material.COMPASS, 1); + im = teleportPlayer.getItemMeta(); + im.setDisplayName(BedwarsRel._l(p, "ingame.spectate")); + teleportPlayer.setItemMeta(im); + p.getInventory().setItem(0, teleportPlayer); + + p.updateInventory(); + this.updateScoreboard(); + + } + + private void updateLobbyScoreboard() { + this.scoreboard.clearSlot(DisplaySlot.SIDEBAR); + + Objective obj = this.scoreboard.getObjective("lobby"); + if (obj != null) { + obj.unregister(); + } + + obj = this.scoreboard.registerNewObjective("lobby", "dummy"); + obj.setDisplaySlot(DisplaySlot.SIDEBAR); + obj.setDisplayName(this.formatLobbyScoreboardString( + BedwarsRel.getInstance().getStringConfig("lobby-scoreboard.title", "&eBEDWARS"))); + + List rows = BedwarsRel.getInstance().getConfig() + .getStringList("lobby-scoreboard.content"); + int rowMax = rows.size(); + if (rows == null || rows.isEmpty()) { + return; + } + + for (String row : rows) { + if (row.trim().equals("")) { + for (int i = 0; i <= rowMax; i++) { + row = row + " "; + } + } + + Score score = obj.getScore(this.formatLobbyScoreboardString(row)); + score.setScore(rowMax); + rowMax--; + } + + for (Player player : this.getPlayers()) { + player.setScoreboard(this.scoreboard); + } + } + + public void updateScoreboard() { + if (this.state == GameState.WAITING + && BedwarsRel.getInstance().getBooleanConfig("lobby-scoreboard.enabled", true)) { + this.updateLobbyScoreboard(); + return; + } + + Objective obj = this.scoreboard.getObjective("display"); + if (obj == null) { + obj = this.scoreboard.registerNewObjective("display", "dummy"); + } + + obj.setDisplaySlot(DisplaySlot.SIDEBAR); + obj.setDisplayName(this.formatScoreboardTitle()); + + for (Team t : this.teams.values()) { + this.scoreboard.resetScores(this.formatScoreboardTeam(t, false)); + this.scoreboard.resetScores(this.formatScoreboardTeam(t, true)); + + boolean teamDead = (t.isDead(this) && this.getState() == GameState.RUNNING) ? true : false; + Score score = obj.getScore(this.formatScoreboardTeam(t, teamDead)); + score.setScore(t.getPlayers().size()); + } + + for (Player player : this.getPlayers()) { + player.setScoreboard(this.scoreboard); + } + } + + private void updateScoreboardTimer() { + Objective obj = this.scoreboard.getObjective("display"); + if (obj == null) { + obj = this.scoreboard.registerNewObjective("display", "dummy"); + } + + obj.setDisplayName(this.formatScoreboardTitle()); + + for (Player player : this.getPlayers()) { + player.setScoreboard(this.scoreboard); + } + } + + private void updateSignConfig() { + try { + File config = new File( + BedwarsRel.getInstance().getDataFolder() + "/" + GameManager.gamesPath + "/" + + this.name + "/sign.yml"); + + YamlConfiguration cfg = new YamlConfiguration(); + if (config.exists()) { + cfg = YamlConfiguration.loadConfiguration(config); + } + + List> locList = new ArrayList>(); + for (Location loc : this.joinSigns.keySet()) { + locList.add(Utils.locationSerialize(loc)); + } + + cfg.set("signs", locList); + cfg.save(config); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + BedwarsRel.getInstance().getServer().getConsoleSender() + .sendMessage(ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(BedwarsRel.getInstance().getServer().getConsoleSender(), "errors.savesign"))); + } + } + + public void updateSigns() { + boolean removedItem = false; + + Iterator iterator = Game.this.joinSigns.values().iterator(); + while (iterator.hasNext()) { + GameJoinSign sign = iterator.next(); + + Chunk signChunk = sign.getSign().getLocation().getChunk(); + if (!signChunk.isLoaded()) { + signChunk.load(true); + } + + if (sign.getSign() == null) { + iterator.remove(); + removedItem = true; + continue; + } + + Block signBlock = sign.getSign().getLocation().getBlock(); + if (!(signBlock.getState() instanceof Sign)) { + iterator.remove(); + removedItem = true; + continue; + } + sign.updateSign(); + } + + if (removedItem) { + Game.this.updateSignConfig(); + } + } +} diff --git a/common/src/main/java/io/github/bedwarsrel/game/GameCheckCode.java b/common/src/main/java/io/github/bedwarsrel/game/GameCheckCode.java new file mode 100644 index 0000000..bc913c6 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/game/GameCheckCode.java @@ -0,0 +1,34 @@ +package io.github.bedwarsrel.game; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import java.util.HashMap; + +public enum GameCheckCode { + OK(200), LOC_NOT_SET_ERROR(400), TEAM_SIZE_LOW_ERROR(401), NO_RES_SPAWNER_ERROR( + 402), NO_LOBBY_SET(403), TEAMS_WITHOUT_SPAWNS(404), NO_ITEMSHOP_CATEGORIES( + 405), TEAM_NO_WRONG_BED(406), NO_MAIN_LOBBY_SET(407), TEAM_NO_WRONG_TARGET(408); + + public static HashMap GameCheckCodeMessages = null; + private int code; + + GameCheckCode(int code) { + this.code = code; + } + + public int getCode() { + return this.code; + } + + public String getCodeMessage(ImmutableMap map) { + return BedwarsRel + ._l(BedwarsRel.getInstance().getServer().getConsoleSender(), "gamecheck." + this.toString(), + map); + } + + public String getCodeMessage() { + return BedwarsRel + ._l(BedwarsRel.getInstance().getServer().getConsoleSender(), + "gamecheck." + this.toString()); + } +} diff --git a/common/src/main/java/io/github/bedwarsrel/game/GameCycle.java b/common/src/main/java/io/github/bedwarsrel/game/GameCycle.java new file mode 100644 index 0000000..0c02d73 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/game/GameCycle.java @@ -0,0 +1,493 @@ +package io.github.bedwarsrel.game; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.events.BedwarsGameOverEvent; +import io.github.bedwarsrel.events.BedwarsPlayerKilledEvent; +import io.github.bedwarsrel.shop.Specials.RescuePlatform; +import io.github.bedwarsrel.shop.Specials.SpecialItem; +import io.github.bedwarsrel.statistics.PlayerStatistic; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.SoundMachine; +import io.github.bedwarsrel.utils.Utils; +import java.lang.reflect.Method; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.scheduler.BukkitRunnable; + +public abstract class GameCycle { + + private boolean endGameRunning = false; + private Game game = null; + + public GameCycle(Game game) { + this.game = game; + } + + public void checkGameOver() { + if (!BedwarsRel.getInstance().isEnabled()) { + return; + } + + Team winner = this.getGame().isOver(); + if (winner != null) { + if (!this.isEndGameRunning()) { + this.runGameOver(winner); + } + } else { + if ((this.getGame().getTeamPlayers().size() == 0 || this.getGame().isOverSet()) + && !this.isEndGameRunning()) { + this.runGameOver(null); + } + } + } + + public Game getGame() { + return game; + } + + private Map getRewardPlaceholders(Player player) { + Map placeholders = new HashMap(); + + placeholders.put("{player}", player.getName()); + if (BedwarsRel.getInstance().statisticsEnabled()) { + PlayerStatistic statistic = + BedwarsRel.getInstance().getPlayerStatisticManager().getStatistic(player); + placeholders.put("{score}", String.valueOf(statistic.getCurrentScore())); + } + + return placeholders; + } + + public boolean isEndGameRunning() { + return this.endGameRunning; + } + + public void setEndGameRunning(boolean running) { + this.endGameRunning = running; + } + + public abstract void onGameEnds(); + + public abstract void onGameLoaded(); + + public abstract void onGameOver(GameOverTask task); + + public abstract void onGameStart(); + + public void onPlayerDies(Player player, Player killer) { + if (this.isEndGameRunning()) { + return; + } + + BedwarsPlayerKilledEvent killedEvent = + new BedwarsPlayerKilledEvent(this.getGame(), player, killer); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(killedEvent); + + PlayerStatistic diePlayer = null; + PlayerStatistic killerPlayer = null; + + Iterator itemIterator = this.game.getSpecialItems().iterator(); + while (itemIterator.hasNext()) { + SpecialItem item = itemIterator.next(); + if (!(item instanceof RescuePlatform)) { + continue; + } + + RescuePlatform rescue = (RescuePlatform) item; + if (rescue.getOwner().equals(player)) { + itemIterator.remove(); + } + } + + Team deathTeam = this.getGame().getPlayerTeam(player); + if (BedwarsRel.getInstance().statisticsEnabled()) { + diePlayer = BedwarsRel.getInstance().getPlayerStatisticManager().getStatistic(player); + + boolean onlyOnBedDestroy = + BedwarsRel.getInstance().getBooleanConfig("statistics.bed-destroyed-kills", false); + boolean teamIsDead = deathTeam.isDead(this.getGame()); + + if ((onlyOnBedDestroy && teamIsDead) || !onlyOnBedDestroy) { + diePlayer.setCurrentDeaths(diePlayer.getCurrentDeaths() + 1); + diePlayer.setCurrentScore(diePlayer.getCurrentScore() + BedwarsRel + .getInstance().getIntConfig("statistics.scores.die", 0)); + } + + if (killer != null) { + if ((onlyOnBedDestroy && teamIsDead) || !onlyOnBedDestroy) { + killerPlayer = BedwarsRel.getInstance().getPlayerStatisticManager().getStatistic(killer); + if (killerPlayer != null) { + killerPlayer.setCurrentKills(killerPlayer.getCurrentKills() + 1); + killerPlayer.setCurrentScore(killerPlayer.getCurrentScore() + BedwarsRel + .getInstance().getIntConfig("statistics.scores.kill", 10)); + } + } + } + + // dispatch reward commands directly + if (BedwarsRel.getInstance().getBooleanConfig("rewards.enabled", false) && killer != null + && ((onlyOnBedDestroy && teamIsDead) || !onlyOnBedDestroy)) { + List commands = BedwarsRel.getInstance().getConfig() + .getStringList("rewards.player-kill"); + BedwarsRel.getInstance().dispatchRewardCommands(commands, + ImmutableMap.of("{player}", killer.getName(), "{score}", + String + .valueOf(BedwarsRel.getInstance().getIntConfig("statistics.scores.kill", 10)))); + } + } + + if (killer == null) { + for (Player aPlayer : this.getGame().getPlayers()) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage( + ChatWriter.pluginMessage( + ChatColor.GOLD + BedwarsRel._l(aPlayer, "ingame.player.died", ImmutableMap + .of("player", + Game.getPlayerWithTeamString(player, deathTeam, ChatColor.GOLD))))); + } + } + + this.sendTeamDeadMessage(deathTeam); + this.checkGameOver(); + return; + } + + Team killerTeam = this.getGame().getPlayerTeam(killer); + if (killerTeam == null) { + for (Player aPlayer : this.getGame().getPlayers()) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage( + ChatWriter.pluginMessage( + ChatColor.GOLD + BedwarsRel._l(aPlayer, "ingame.player.died", ImmutableMap + .of("player", + Game.getPlayerWithTeamString(player, deathTeam, ChatColor.GOLD))))); + } + } + this.sendTeamDeadMessage(deathTeam); + this.checkGameOver(); + return; + } + + String hearts = ""; + DecimalFormat format = new DecimalFormat("#"); + double health = ((double) killer.getHealth()) / ((double) killer.getMaxHealth()) + * ((double) killer.getHealthScale()); + if (!BedwarsRel.getInstance().getBooleanConfig("hearts-in-halfs", true)) { + format = new DecimalFormat("#.#"); + health = health / 2; + } + + if (BedwarsRel.getInstance().getBooleanConfig("hearts-on-death", true)) { + hearts = "[" + ChatColor.RED + "\u2764" + format.format(health) + ChatColor.GOLD + "]"; + } + + for (Player aPlayer : this.getGame().getPlayers()) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage( + ChatWriter.pluginMessage(ChatColor.GOLD + BedwarsRel._l(aPlayer, "ingame.player.killed", + ImmutableMap.of("killer", + Game.getPlayerWithTeamString(killer, killerTeam, ChatColor.GOLD, hearts), + "player", + Game.getPlayerWithTeamString(player, deathTeam, ChatColor.GOLD))))); + } + } + + if (deathTeam.isDead(this.getGame())) { + killer.playSound(killer.getLocation(), SoundMachine.get("LEVEL_UP", "ENTITY_PLAYER_LEVELUP"), + Float.valueOf("1.0"), Float.valueOf("1.0")); + } + this.sendTeamDeadMessage(deathTeam); + this.checkGameOver(); + } + + public abstract boolean onPlayerJoins(Player player); + + public abstract void onPlayerLeave(Player player); + + public void onPlayerRespawn(PlayerRespawnEvent pre, Player player) { + Team team = this.getGame().getPlayerTeam(player); + + // reset damager + this.getGame().setPlayerDamager(player, null); + + if (this.getGame().isSpectator(player)) { + Collection teams = this.getGame().getTeams().values(); + pre.setRespawnLocation( + ((Team) teams.toArray()[Utils.randInt(0, teams.size() - 1)]).getSpawnLocation()); + return; + } + + if (team.isDead(this.getGame())) { + PlayerStorage storage = this.getGame().getPlayerStorage(player); + + if (BedwarsRel.getInstance().statisticsEnabled()) { + PlayerStatistic statistic = + BedwarsRel.getInstance().getPlayerStatisticManager().getStatistic(player); + statistic.setCurrentLoses(statistic.getCurrentLoses() + 1); + } + + if (BedwarsRel.getInstance().spectationEnabled()) { + if (storage != null && storage.getLeft() != null) { + pre.setRespawnLocation(team.getSpawnLocation()); + } + + this.getGame().toSpectator(player); + } else { + if (this.game.getCycle() instanceof BungeeGameCycle) { + this.getGame().playerLeave(player, false); + return; + } + + if (!BedwarsRel.getInstance().toMainLobby()) { + if (storage != null) { + if (storage.getLeft() != null) { + pre.setRespawnLocation(storage.getLeft()); + } + } + } else { + if (this.getGame().getMainLobby() != null) { + pre.setRespawnLocation(this.getGame().getMainLobby()); + } else { + if (storage != null) { + if (storage.getLeft() != null) { + pre.setRespawnLocation(storage.getLeft()); + } + } + } + } + + this.getGame().playerLeave(player, false); + } + + } else { + if (BedwarsRel.getInstance().getRespawnProtectionTime() > 0) { + RespawnProtectionRunnable protection = this.getGame().addProtection(player); + protection.runProtection(); + } + pre.setRespawnLocation(team.getSpawnLocation()); + } + + new BukkitRunnable() { + + @Override + public void run() { + GameCycle.this.checkGameOver(); + } + }.runTaskLater(BedwarsRel.getInstance(), 20L); + + } + + @SuppressWarnings("unchecked") + private void runGameOver(Team winner) { + BedwarsGameOverEvent overEvent = new BedwarsGameOverEvent(this.getGame(), winner); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(overEvent); + + if (overEvent.isCancelled()) { + return; + } + + this.getGame().stopWorkers(); + this.setEndGameRunning(true); + + // new record? + boolean storeRecords = BedwarsRel.getInstance().getBooleanConfig("store-game-records", true); + boolean storeHolders = BedwarsRel + .getInstance().getBooleanConfig("store-game-records-holder", true); + boolean madeRecord = false; + if (storeRecords && winner != null) { + madeRecord = this.storeRecords(storeHolders, winner); + } + + int delay = BedwarsRel.getInstance().getConfig().getInt("gameoverdelay"); // configurable + // delay + + if (BedwarsRel.getInstance().statisticsEnabled() + || BedwarsRel.getInstance().getBooleanConfig("rewards.enabled", false) + || (BedwarsRel.getInstance().getBooleanConfig("titles.win.enabled", true))) { + if (winner != null) { + for (Player player : winner.getPlayers()) { + String title = this + .winTitleReplace(BedwarsRel._l(player, "ingame.title.win-title"), winner); + String subtitle = this + .winTitleReplace(BedwarsRel._l(player, "ingame.title.win-subtitle"), winner); + if (!"".equals(title) || !"".equals(subtitle)) { + if (BedwarsRel.getInstance().getBooleanConfig("titles.win.enabled", true) + && (!"".equals(title) || !"".equals(subtitle))) { + try { + Class clazz = Class.forName("io.github.bedwarsrel.com." + + BedwarsRel.getInstance().getCurrentVersion().toLowerCase() + ".Title"); + + if (!"".equals(title)) { + double titleFadeIn = + BedwarsRel.getInstance().getConfig() + .getDouble("titles.win.title-fade-in", 1.5); + double titleStay = + BedwarsRel.getInstance().getConfig().getDouble("titles.win.title-stay", 5.0); + double titleFadeOut = + BedwarsRel + .getInstance().getConfig().getDouble("titles.win.title-fade-out", 2.0); + Method showTitle = clazz + .getDeclaredMethod("showTitle", Player.class, String.class, + double.class, double.class, double.class); + + showTitle.invoke(null, player, title, titleFadeIn, titleStay, titleFadeOut); + } + + if (!"".equals(subtitle)) { + double subTitleFadeIn = + BedwarsRel + .getInstance().getConfig().getDouble("titles.win.subtitle-fade-in", 1.5); + double subTitleStay = + BedwarsRel.getInstance().getConfig() + .getDouble("titles.win.subtitle-stay", 5.0); + double subTitleFadeOut = + BedwarsRel + .getInstance().getConfig().getDouble("titles.win.subtitle-fade-out", 2.0); + Method showSubTitle = clazz.getDeclaredMethod("showSubTitle", Player.class, + String.class, double.class, double.class, double.class); + + showSubTitle.invoke(null, player, subtitle, subTitleFadeIn, subTitleStay, + subTitleFadeOut); + } + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + ex.printStackTrace(); + } + } + } + + if (BedwarsRel.getInstance().getBooleanConfig("rewards.enabled", false)) { + List commands = new ArrayList(); + commands = (List) BedwarsRel.getInstance().getConfig() + .getList("rewards.player-win"); + BedwarsRel.getInstance() + .dispatchRewardCommands(commands, this.getRewardPlaceholders(player)); + } + + if (BedwarsRel.getInstance().statisticsEnabled()) { + PlayerStatistic statistic = + BedwarsRel.getInstance().getPlayerStatisticManager().getStatistic(player); + statistic.setCurrentWins(statistic.getCurrentWins() + 1); + statistic.setCurrentScore(statistic.getCurrentScore() + BedwarsRel + .getInstance().getIntConfig("statistics.scores.win", 50)); + + if (madeRecord) { + statistic.setCurrentScore(statistic.getCurrentScore() + + BedwarsRel.getInstance().getIntConfig("statistics.scores.record", 100)); + } + } + } + } + + for (Player player : this.game.getPlayers()) { + if (this.game.isSpectator(player)) { + continue; + } + + if (BedwarsRel.getInstance().getBooleanConfig("rewards.enabled", false)) { + List commands = new ArrayList(); + commands = + (List) BedwarsRel.getInstance().getConfig() + .getList("rewards.player-end-game"); + BedwarsRel.getInstance() + .dispatchRewardCommands(commands, this.getRewardPlaceholders(player)); + } + } + } + + this.getGame().getPlayingTeams().clear(); + + GameOverTask gameOver = new GameOverTask(this, delay, winner); + gameOver.runTaskTimer(BedwarsRel.getInstance(), 0L, 20L); + } + + private void sendTeamDeadMessage(Team deathTeam) { + if (deathTeam.getPlayers().size() == 1 && deathTeam.isDead(this.getGame())) { + for (Player aPlayer : this.getGame().getPlayers()) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage( + ChatWriter.pluginMessage( + ChatColor.RED + BedwarsRel._l(aPlayer, "ingame.team-dead", ImmutableMap.of("team", + deathTeam.getChatColor() + deathTeam.getDisplayName() + ChatColor.RED)))); + } + } + } + } + + private boolean storeRecords(boolean storeHolders, Team winner) { + int playTime = this.getGame().getLength() - this.getGame().getTimeLeft(); + boolean throughBed = false; + + if (playTime <= this.getGame().getRecord()) { + + // check for winning through bed destroy + for (Team team : this.getGame().getPlayingTeams()) { + if (team.isDead(this.getGame())) { + throughBed = true; + break; + } + } + + if (!throughBed) { + for (Player aPlayer : this.getGame().getPlayers()) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage( + ChatWriter.pluginMessage(BedwarsRel._l(aPlayer, "ingame.record-nobeddestroy"))); + } + } + return false; + } + + if (storeHolders) { + if (playTime < this.getGame().getRecord()) { + this.getGame().getRecordHolders().clear(); + } + + for (Player player : winner.getPlayers()) { + this.getGame().addRecordHolder(player.getName()); + } + } + + this.getGame().setRecord(playTime); + this.getGame().saveRecord(); + + for (Player aPlayer : this.getGame().getPlayers()) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage( + ChatWriter.pluginMessage(BedwarsRel._l(aPlayer, "ingame.newrecord", + ImmutableMap.of("record", this.getGame().getFormattedRecord(), "team", + winner.getChatColor() + winner.getDisplayName())))); + } + } + + return true; + } + + return false; + } + + private String winTitleReplace(String str, Team winner) { + int playTime = this.getGame().getLength() - this.getGame().getTimeLeft(); + String finalStr = str; + String formattedTime = Utils.getFormattedTime(playTime); + + finalStr = finalStr.replace("$time$", formattedTime); + + if (winner == null) { + return finalStr; + } + + finalStr = finalStr.replace("$team$", winner.getChatColor() + winner.getDisplayName()); + return finalStr; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/game/GameJoinSign.java b/common/src/main/java/io/github/bedwarsrel/game/GameJoinSign.java new file mode 100644 index 0000000..bac4541 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/game/GameJoinSign.java @@ -0,0 +1,119 @@ +package io.github.bedwarsrel.game; + +import io.github.bedwarsrel.BedwarsRel; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.block.BlockState; +import org.bukkit.block.Sign; + +public class GameJoinSign { + + private Game game = null; + private Location signLocation = null; + + public GameJoinSign(Game game, Location sign) { + this.game = game; + this.signLocation = sign; + } + + private String getCurrentPlayersString() { + int maxPlayers = this.game.getMaxPlayers(); + int currentPlayers = 0; + if (this.game.getState() == GameState.RUNNING) { + currentPlayers = this.game.getTeamPlayers().size(); + } else if (this.game.getState() == GameState.WAITING) { + currentPlayers = this.game.getPlayers().size(); + } else { + currentPlayers = 0; + } + + String current = "0"; + if (currentPlayers >= maxPlayers) { + current = ChatColor.RED + String.valueOf(currentPlayers) + ChatColor.WHITE; + } else { + current = String.valueOf(currentPlayers); + } + + return current; + } + + private String getMaxPlayersString() { + int maxPlayers = this.game.getMaxPlayers(); + int currentPlayers = 0; + if (this.game.getState() == GameState.RUNNING) { + currentPlayers = this.game.getTeamPlayers().size(); + } else if (this.game.getState() == GameState.WAITING) { + currentPlayers = this.game.getPlayers().size(); + } else { + currentPlayers = 0; + } + + String max = String.valueOf(maxPlayers); + + if (currentPlayers >= maxPlayers) { + max = ChatColor.RED + max + ChatColor.WHITE; + } + + return max; + } + + public Sign getSign() { + BlockState state = this.signLocation.getBlock().getState(); + + if (!(state instanceof Sign)) { + return null; + } + + return (Sign) state; + } + + private String[] getSignLines() { + String[] sign = new String[4]; + sign[0] = this.replacePlaceholder(ChatColor.translateAlternateColorCodes('&', + BedwarsRel.getInstance().getConfig().getString("sign.first-line"))); + sign[1] = this.replacePlaceholder(ChatColor.translateAlternateColorCodes('&', + BedwarsRel.getInstance().getConfig().getString("sign.second-line"))); + sign[2] = this.replacePlaceholder(ChatColor.translateAlternateColorCodes('&', + BedwarsRel.getInstance().getConfig().getString("sign.third-line"))); + sign[3] = this.replacePlaceholder(ChatColor.translateAlternateColorCodes('&', + BedwarsRel.getInstance().getConfig().getString("sign.fourth-line"))); + + return sign; + } + + private String getStatus() { + String status = null; + if (this.game.getState() == GameState.WAITING && this.game.isFull()) { + status = ChatColor.RED + BedwarsRel._l("sign.gamestate.full"); + } else { + status = BedwarsRel._l("sign.gamestate." + this.game.getState().toString().toLowerCase()); + } + + return status; + } + + private String replacePlaceholder(String line) { + String finalLine = line; + + finalLine = finalLine.replace("$title$", BedwarsRel._l("sign.firstline")); + finalLine = finalLine.replace("$gamename$", this.game.getName()); + finalLine = finalLine.replace("$regionname$", this.game.getRegion().getName()); + finalLine = finalLine.replace("$maxplayers$", this.getMaxPlayersString()); + finalLine = finalLine.replace("$currentplayers$", this.getCurrentPlayersString()); + finalLine = finalLine.replace("$status$", this.getStatus()); + + return finalLine; + } + + public void updateSign() { + Sign sign = (Sign) this.signLocation.getBlock().getState(); + + String[] signLines = this.getSignLines(); + for (int i = 0; i < signLines.length; i++) { + sign.setLine(i, signLines[i]); + } + + sign.update(true, true); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/game/GameLobbyCountdown.java b/common/src/main/java/io/github/bedwarsrel/game/GameLobbyCountdown.java new file mode 100644 index 0000000..0d5d1f5 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/game/GameLobbyCountdown.java @@ -0,0 +1,193 @@ +package io.github.bedwarsrel.game; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.SoundMachine; +import java.lang.reflect.Method; +import java.util.ArrayList; +import lombok.Getter; +import lombok.Setter; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +public class GameLobbyCountdown extends BukkitRunnable { + + @Getter + @Setter + private int counter = 0; + private Game game = null; + @Getter + private int lobbytime; + @Getter + private int lobbytimeWhenFull; + + public GameLobbyCountdown(Game game) { + this.game = game; + this.counter = BedwarsRel.getInstance().getConfig().getInt("lobbytime"); + this.lobbytime = this.counter; + this.lobbytimeWhenFull = BedwarsRel.getInstance().getConfig().getInt("lobbytime-full"); + } + + @Override + public void run() { + ArrayList players = this.game.getPlayers(); + float xpPerLevel = 1.0F / this.lobbytime; + + if (this.game.getState() != GameState.WAITING) { + this.game.setGameLobbyCountdown(null); + this.cancel(); + return; + } + + if (this.counter > this.lobbytimeWhenFull + && this.game.getPlayerAmount() == this.game.getMaxPlayers()) { + this.counter = this.lobbytimeWhenFull; + for (Player aPlayer : players) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage(ChatWriter.pluginMessage(ChatColor.YELLOW + + BedwarsRel + ._l(aPlayer, "lobby.countdown", + ImmutableMap.of("sec", + ChatColor.RED.toString() + this.counter + ChatColor.YELLOW)))); + } + } + } + + if (this.counter == this.lobbytimeWhenFull) { + for (Player p : players) { + if (p.getInventory().contains(Material.EMERALD)) { + p.getInventory().remove(Material.EMERALD); + } + } + } + + for (Player p : players) { + p.setLevel(this.counter); + if (this.counter == this.lobbytime) { + p.setExp(1.0F); + } else { + p.setExp(1.0F - (xpPerLevel * (this.lobbytime - this.counter))); + } + + } + + if (this.counter == this.lobbytime) { + for (Player aPlayer : players) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage(ChatWriter.pluginMessage(ChatColor.YELLOW + + BedwarsRel + ._l(aPlayer, "lobby.countdown", + ImmutableMap.of("sec", + ChatColor.RED.toString() + this.counter + ChatColor.YELLOW)))); + } + } + + for (Player p : players) { + if (!p.getInventory().contains(Material.DIAMOND) && p.hasPermission("bw.vip.forcestart")) { + this.game.getPlayerStorage(p).addGameStartItem(); + } + + if (!p.getInventory().contains(Material.EMERALD) && (p.isOp() || p.hasPermission("bw.setup") + || p.hasPermission("bw.vip.reducecountdown"))) { + this.game.getPlayerStorage(p).addReduceCountdownItem(); + } + } + } + + if (!this.game.isStartable()) { + if (!this.game.hasEnoughPlayers()) { + for (Player aPlayer : players) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage(ChatWriter.pluginMessage( + ChatColor.RED + BedwarsRel + ._l(aPlayer, "lobby.cancelcountdown.not_enough_players"))); + } + } + } else if (!this.game.hasEnoughTeams()) { + for (Player aPlayer : players) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage(ChatWriter.pluginMessage( + ChatColor.RED + BedwarsRel._l(aPlayer, "lobby.cancelcountdown.not_enough_teams"))); + } + } + } + + this.counter = this.lobbytime; + for (Player p : players) { + p.setLevel(0); + p.setExp(0.0F); + if (p.getInventory().contains(Material.EMERALD)) { + p.getInventory().remove(Material.EMERALD); + } + } + + this.game.setGameLobbyCountdown(null); + this.cancel(); + } + + if (this.counter <= 10 && this.counter > 0) { + for (Player aPlayer : players) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage(ChatWriter.pluginMessage(ChatColor.YELLOW + + BedwarsRel + ._l(aPlayer, "lobby.countdown", + ImmutableMap.of("sec", + ChatColor.RED.toString() + this.counter + ChatColor.YELLOW)))); + } + } + + Class titleClass = null; + Method showTitle = null; + String title = ChatColor.translateAlternateColorCodes('&', + BedwarsRel.getInstance().getStringConfig("titles.countdown.format", "&3{countdown}")); + title = title.replace("{countdown}", String.valueOf(this.counter)); + + if (BedwarsRel.getInstance().getBooleanConfig("titles.countdown.enabled", true)) { + try { + titleClass = BedwarsRel.getInstance().getVersionRelatedClass("Title"); + showTitle = titleClass.getMethod("showTitle", Player.class, String.class, double.class, + double.class, double.class); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + ex.printStackTrace(); + } + } + + for (Player player : players) { + player.playSound(player.getLocation(), SoundMachine.get("CLICK", "UI_BUTTON_CLICK"), + Float.valueOf("1.0"), Float.valueOf("1.0")); + + if (titleClass == null) { + continue; + } + + try { + showTitle.invoke(null, player, title, 0.2, 0.6, 0.2); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + ex.printStackTrace(); + } + } + } + + if (this.counter == 0) { + this.game.setGameLobbyCountdown(null); + this.cancel(); + for (Player player : players) { + player.playSound(player.getLocation(), + SoundMachine.get("LEVEL_UP", "ENTITY_PLAYER_LEVELUP"), Float.valueOf("1.0"), + Float.valueOf("1.0")); + player.setLevel(0); + player.setExp(0.0F); + } + + this.game.start(BedwarsRel.getInstance().getServer().getConsoleSender()); + return; + } + + this.counter--; + } +} diff --git a/common/src/main/java/io/github/bedwarsrel/game/GameManager.java b/common/src/main/java/io/github/bedwarsrel/game/GameManager.java new file mode 100644 index 0000000..fc4a660 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/game/GameManager.java @@ -0,0 +1,382 @@ +package io.github.bedwarsrel.game; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.Utils; +import java.io.File; +import java.io.FileFilter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +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.file.YamlConfiguration; +import org.bukkit.entity.Player; + +public class GameManager { + + public static String gamesPath = "games"; + private Map gamePlayer = null; + private ArrayList games = null; + + public GameManager() { + this.games = new ArrayList(); + this.gamePlayer = new HashMap(); + } + + public Game addGame(String name) { + Game existing = this.getGame(name); + if (existing != null) { + return null; + } + + Game newGame = new Game(name); + this.games.add(newGame); + return newGame; + } + + public void addGamePlayer(Player player, Game game) { + if (this.gamePlayer.containsKey(player)) { + this.gamePlayer.remove(player); + } + + this.gamePlayer.put(player, game); + } + + public Game getGame(String name) { + for (Game game : this.games) { + if (game.getName().equals(name)) { + return game; + } + } + + return null; + } + + public Game getGameByChunkLocation(int x, int z) { + for (Game game : this.games) { + if (game.getRegion().chunkIsInRegion(x, z)) { + return game; + } + } + + return null; + } + + public Game getGameByLocation(Location loc) { + for (Game game : this.games) { + if (game.getRegion() == null) { + continue; + } + + if (game.getRegion().getWorld() == null) { + continue; + } + + if (game.getRegion().isInRegion(loc)) { + return game; + } + } + + return null; + } + + public Game getGameBySignLocation(Location location) { + for (Game game : this.games) { + if (game.getSigns().containsKey(location)) { + return game; + } + } + + return null; + } + + public Game getGameOfPlayer(Player player) { + return this.gamePlayer.get(player); + } + + public int getGamePlayerAmount() { + return this.gamePlayer.size(); + } + + public ArrayList getGames() { + return this.games; + } + + public List getGamesByWorld(World world) { + List games = new ArrayList(); + + for (Game game : this.games) { + if (game.getRegion() == null) { + continue; + } + + if (game.getRegion().getWorld() == null) { + continue; + } + + if (game.getRegion().getWorld().equals(world)) { + games.add(game); + } + } + + return games; + } + + @SuppressWarnings("unchecked") + private void loadGame(File configFile) { + try { + + YamlConfiguration cfg = YamlConfiguration.loadConfiguration(configFile); + String name = cfg.get("name").toString(); + if (name.isEmpty()) { + return; + } + + Game game = new Game(name); + game.setConfig(cfg); + + Map teams = new HashMap(); + Map spawner = new HashMap(); + String targetMaterialObj = null; + + if (cfg.contains("teams")) { + teams = cfg.getConfigurationSection("teams").getValues(false); + } + + if (cfg.contains("spawner")) { + if (cfg.isConfigurationSection("spawner")) { + spawner = cfg.getConfigurationSection("spawner").getValues(false); + + for (Object obj : spawner.values()) { + if (!(obj instanceof ResourceSpawner)) { + continue; + } + + ResourceSpawner rs = (ResourceSpawner) obj; + rs.setGame(game); + game.addResourceSpawner(rs); + } + } + + if (cfg.isList("spawner")) { + for (Object rs : cfg.getList("spawner")) { + if (!(rs instanceof ResourceSpawner)) { + continue; + } + + ResourceSpawner rsp = (ResourceSpawner) rs; + rsp.setGame(game); + game.addResourceSpawner(rsp); + } + } + } + + for (Object obj : teams.values()) { + if (!(obj instanceof Team)) { + continue; + } + + game.addTeam((Team) obj); + } + + Location loc1 = Utils.locationDeserialize(cfg.get("loc1")); + Location loc2 = Utils.locationDeserialize(cfg.get("loc2")); + + File signFile = new File(BedwarsRel.getInstance().getDataFolder() + File.separator + + GameManager.gamesPath + File.separator + game.getName(), "sign.yml"); + if (signFile.exists()) { + YamlConfiguration signConfig = YamlConfiguration.loadConfiguration(signFile); + + List signs = (List) signConfig.get("signs"); + for (Object sign : signs) { + Location signLocation = Utils.locationDeserialize(sign); + if (signLocation == null) { + continue; + } + + signLocation.getChunk().load(true); + + Block signBlock = signLocation.getBlock(); + if (!(signBlock.getState() instanceof Sign)) { + continue; + } + + signBlock.getState().update(true, true); + game.addJoinSign(signBlock.getLocation()); + } + } + + game.setLoc(loc1, "loc1"); + game.setLoc(loc2, "loc2"); + game.setLobby(Utils.locationDeserialize(cfg.get("lobby"))); + + String regionName = ""; + + if (loc1.getWorld() != null) { + regionName = loc1.getWorld().getName(); + } + + if (cfg.contains("regionname")) { + regionName = cfg.getString("regionname"); + } + + if (cfg.contains("time") && cfg.isInt("time")) { + game.setTime(cfg.getInt("time")); + } + + game.setRegionName(regionName); + game.setRegion(new Region(loc1, loc2, regionName)); + + if (cfg.contains("autobalance")) { + game.setAutobalance(cfg.getBoolean("autobalance")); + } + + if (cfg.contains("minplayers")) { + game.setMinPlayers(cfg.getInt("minplayers")); + } + + if (cfg.contains("mainlobby")) { + game.setMainLobby(Utils.locationDeserialize(cfg.get("mainlobby"))); + } + + if (cfg.contains("record")) { + game.setRecord(cfg.getInt("record", BedwarsRel.getInstance().getMaxLength())); + } + + if (cfg.contains("targetmaterial")) { + targetMaterialObj = cfg.getString("targetmaterial"); + if (targetMaterialObj != null && !targetMaterialObj.equals("")) { + game.setTargetMaterial(Utils.parseMaterial(targetMaterialObj)); + } + } + + if (cfg.contains("builder")) { + game.setBuilder(cfg.getString("builder")); + } + + if (cfg.contains("record-holders")) { + List list = (List) cfg.getList("record-holders", new ArrayList()); + for (Object holder : list) { + game.addRecordHolder(holder.toString()); + } + } + + game.getFreePlayers().clear(); + game.updateSigns(); + + this.games.add(game); + BedwarsRel.getInstance().getServer().getConsoleSender() + .sendMessage(ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel + ._l(BedwarsRel.getInstance().getServer().getConsoleSender(), "success.gameloaded", + ImmutableMap.of("game", game.getRegion().getName())))); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + BedwarsRel.getInstance().getServer().getConsoleSender() + .sendMessage(ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(BedwarsRel.getInstance().getServer().getConsoleSender(), "errors.gameloaderror", + ImmutableMap.of("game", configFile.getParentFile().getName())))); + } + } + + public void loadGames() { + String path = BedwarsRel.getInstance().getDataFolder() + File.separator + GameManager.gamesPath; + File file = new File(path); + + if (!file.exists()) { + return; + } + + File[] files = file.listFiles(new FileFilter() { + + @Override + public boolean accept(File pathname) { + return pathname.isDirectory(); + } + }); + + if (files.length > 0) { + for (File dir : files) { + File[] configFiles = dir.listFiles(); + for (File cfg : configFiles) { + if (!cfg.isFile()) { + continue; + } + + if (cfg.getName().equals("game.yml")) { + this.loadGame(cfg); + } + } + } + } + + for (Game g : this.games) { + if (!g.run(BedwarsRel.getInstance().getServer().getConsoleSender())) { + BedwarsRel.getInstance().getServer().getConsoleSender() + .sendMessage(ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(BedwarsRel.getInstance().getServer().getConsoleSender(), + "errors.gamenotloaded"))); + } else { + g.getCycle().onGameLoaded(); + } + } + } + + public void reloadGames() { + this.unloadGames(); + + this.gamePlayer.clear(); + this.loadGames(); + } + + public void removeGame(Game game) { + if (game == null) { + return; + } + + File configs = new File(BedwarsRel.getInstance().getDataFolder() + File.separator + + GameManager.gamesPath + File.separator + game.getName()); + + if (configs.exists()) { + configs.delete(); + } + + this.games.remove(game); + } + + public void removeGamePlayer(Player player) { + this.gamePlayer.remove(player); + } + + public void unloadGame(Game game) { + if (game.getState() != GameState.STOPPED) { + game.stop(); + } + + game.setState(GameState.STOPPED); + game.setScoreboard(BedwarsRel.getInstance().getScoreboardManager().getNewScoreboard()); + + try { + game.kickAllPlayers(); + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + } + game.resetRegion(); + game.updateSigns(); + } + + public void unloadGames() { + for (Game g : this.games) { + this.unloadGame(g); + } + + this.games.clear(); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/game/GameOverTask.java b/common/src/main/java/io/github/bedwarsrel/game/GameOverTask.java new file mode 100644 index 0000000..a24be3e --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/game/GameOverTask.java @@ -0,0 +1,48 @@ +package io.github.bedwarsrel.game; + +import org.bukkit.scheduler.BukkitRunnable; + +public class GameOverTask extends BukkitRunnable { + + private int counter = 10; + private int counterStart = 10; + private GameCycle cycle = null; + private Team winner = null; + + public GameOverTask(GameCycle cycle, int counter, Team winner) { + this.counterStart = counter; + this.counter = counter; + this.cycle = cycle; + this.winner = winner; + } + + public void decCounter() { + this.counter--; + } + + public int getCounter() { + return this.counter; + } + + public void setCounter(int counter) { + this.counter = counter; + } + + public GameCycle getCycle() { + return this.cycle; + } + + public int getStartCount() { + return this.counterStart; + } + + public Team getWinner() { + return this.winner; + } + + @Override + public void run() { + this.cycle.onGameOver(this); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/game/GameState.java b/common/src/main/java/io/github/bedwarsrel/game/GameState.java new file mode 100644 index 0000000..92575c9 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/game/GameState.java @@ -0,0 +1,5 @@ +package io.github.bedwarsrel.game; + +public enum GameState { + RUNNING, WAITING, STOPPED +} diff --git a/common/src/main/java/io/github/bedwarsrel/game/PlayerSettings.java b/common/src/main/java/io/github/bedwarsrel/game/PlayerSettings.java new file mode 100644 index 0000000..6c9c286 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/game/PlayerSettings.java @@ -0,0 +1,58 @@ +package io.github.bedwarsrel.game; + +import io.github.bedwarsrel.BedwarsRel; +import org.bukkit.entity.Player; + +public class PlayerSettings { + + private Object hologram = null; + private boolean isTeleporting = false; + private boolean oneStackPerShift = false; + private Player player = null; + private boolean useOldShop = false; + + public PlayerSettings(Player player) { + this.player = player; + this.oneStackPerShift = BedwarsRel.getInstance() + .getBooleanConfig("player-settings.one-stack-on-shift", false); + this.useOldShop = BedwarsRel.getInstance() + .getBooleanConfig("player-settings.old-shop-as-default", false); + } + + public Object getHologram() { + return this.hologram; + } + + public void setHologram(Object holo) { + this.hologram = holo; + } + + public Player getPlayer() { + return this.player; + } + + public boolean isTeleporting() { + return isTeleporting; + } + + public void setTeleporting(boolean isTeleporting) { + this.isTeleporting = isTeleporting; + } + + public boolean oneStackPerShift() { + return this.oneStackPerShift; + } + + public void setOneStackPerShift(boolean value) { + this.oneStackPerShift = value; + } + + public void setUseOldShop(boolean value) { + this.useOldShop = value; + } + + public boolean useOldShop() { + return this.useOldShop; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/game/PlayerStorage.java b/common/src/main/java/io/github/bedwarsrel/game/PlayerStorage.java new file mode 100644 index 0000000..6ce17e2 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/game/PlayerStorage.java @@ -0,0 +1,264 @@ +package io.github.bedwarsrel.game; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.events.BedwarsOpenTeamSelectionEvent; +import io.github.bedwarsrel.events.BedwarsPlayerSetNameEvent; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.material.Wool; +import org.bukkit.potion.PotionEffect; + +public class PlayerStorage { + + private ItemStack[] armor = null; + private String displayName = null; + private Collection effects = null; + private int foodLevel = 0; + private ItemStack[] inventory = null; + private Location left = null; + private int level = 0; + private String listName = null; + private GameMode mode = null; + private Player player = null; + private float xp = 0.0F; + + public PlayerStorage(Player p) { + super(); + + this.player = p; + } + + public void addGameStartItem() { + ItemStack startGame = new ItemStack(Material.DIAMOND, 1); + ItemMeta im = startGame.getItemMeta(); + im.setDisplayName(BedwarsRel._l(player, "lobby.startgame")); + startGame.setItemMeta(im); + this.player.getInventory().addItem(startGame); + } + + public void addReduceCountdownItem() { + ItemStack reduceCountdownItem = new ItemStack(Material.EMERALD, 1); + ItemMeta im = reduceCountdownItem.getItemMeta(); + im.setDisplayName(BedwarsRel._l(player, "lobby.reduce_countdown")); + reduceCountdownItem.setItemMeta(im); + this.player.getInventory().addItem(reduceCountdownItem); + } + + public void clean() { + + PlayerInventory inv = this.player.getInventory(); + inv.setArmorContents(new ItemStack[4]); + inv.setContents(new ItemStack[]{}); + + this.player.setAllowFlight(false); + this.player.setFlying(false); + this.player.setExp(0.0F); + this.player.setLevel(0); + this.player.setSneaking(false); + this.player.setSprinting(false); + this.player.setFoodLevel(20); + this.player.setSaturation(10); + this.player.setExhaustion(0); + this.player.setMaxHealth(20.0D); + this.player.setHealth(20.0D); + this.player.setFireTicks(0); + + boolean teamnameOnTab = BedwarsRel.getInstance().getBooleanConfig("teamname-on-tab", true); + boolean overwriteNames = BedwarsRel.getInstance().getBooleanConfig("overwrite-names", false); + + String displayName = this.player.getDisplayName(); + String playerListName = this.player.getPlayerListName(); + + if (overwriteNames || teamnameOnTab) { + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(this.player); + if (game != null) { + game.setPlayerGameMode(player); + Team team = game.getPlayerTeam(this.player); + + if (overwriteNames) { + if (team != null) { + displayName = team.getChatColor() + ChatColor.stripColor(this.player.getName()); + } else { + displayName = ChatColor.stripColor(this.player.getName()); + } + } + + if (teamnameOnTab) { + if (team != null) { + playerListName = team.getChatColor() + team.getName() + ChatColor.WHITE + " | " + + team.getChatColor() + ChatColor.stripColor(this.player.getDisplayName()); + } else { + playerListName = ChatColor.stripColor(this.player.getDisplayName()); + } + } + + BedwarsPlayerSetNameEvent playerSetNameEvent = + new BedwarsPlayerSetNameEvent(team, displayName, playerListName, player); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(playerSetNameEvent); + + if (!playerSetNameEvent.isCancelled()) { + this.player.setDisplayName(playerSetNameEvent.getDisplayName()); + this.player.setPlayerListName(playerSetNameEvent.getPlayerListName()); + } + } + } + + if (this.player.isInsideVehicle()) { + this.player.leaveVehicle(); + } + + for (PotionEffect e : this.player.getActivePotionEffects()) { + this.player.removePotionEffect(e.getType()); + } + + this.player.updateInventory(); + } + + public Location getLeft() { + return this.left; + } + + public void loadLobbyInventory(Game game) { + ItemMeta im = null; + + // choose team only when autobalance is disabled + if (!game.isAutobalanceEnabled()) { + // Choose team (Wool) + ItemStack teamSelection = new ItemStack(Material.BED, 1); + im = teamSelection.getItemMeta(); + im.setDisplayName(BedwarsRel._l(this.player, "lobby.chooseteam")); + teamSelection.setItemMeta(im); + this.player.getInventory().addItem(teamSelection); + } + + // Leave game (Slimeball) + ItemStack leaveGame = new ItemStack(Material.SLIME_BALL, 1); + im = leaveGame.getItemMeta(); + im.setDisplayName(BedwarsRel._l(this.player, "lobby.leavegame")); + leaveGame.setItemMeta(im); + this.player.getInventory().setItem(8, leaveGame); + + if ((this.player.hasPermission("bw.setup") || this.player.isOp() + || this.player.hasPermission("bw.vip.forcestart")) + || (game.getGameLobbyCountdown() != null && (this.player.hasPermission("bw.setup") + || this.player.isOp() || this.player.hasPermission("bw.vip.forcestart")))) { + this.addGameStartItem(); + } + + if (game.getGameLobbyCountdown() != null + && game.getGameLobbyCountdown().getLobbytime() > game.getGameLobbyCountdown() + .getLobbytimeWhenFull() + && (this.player.hasPermission("bw.setup") || this.player.isOp() + || this.player.hasPermission("bw.vip.reducecountdown"))) { + this.addReduceCountdownItem(); + } + + this.player.updateInventory(); + } + + public void openTeamSelection(Game game) { + BedwarsOpenTeamSelectionEvent openEvent = new BedwarsOpenTeamSelectionEvent(game, this.player); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(openEvent); + + if (openEvent.isCancelled()) { + return; + } + + HashMap teams = game.getTeams(); + + int nom = (teams.size() % 9 == 0) ? 9 : (teams.size() % 9); + Inventory inv = + Bukkit.createInventory(this.player, teams.size() + (9 - nom), + BedwarsRel._l(this.player, "lobby.chooseteam")); + for (Team team : teams.values()) { + List players = team.getPlayers(); + if (players.size() >= team.getMaxPlayers()) { + continue; + } + Wool wool = new Wool(team.getColor().getDyeColor()); + ItemStack is = wool.toItemStack(1); + ItemMeta im = is.getItemMeta(); + + im.setDisplayName(team.getChatColor() + team.getName()); + ArrayList teamplayers = new ArrayList<>(); + + int teamPlayerSize = team.getPlayers().size(); + int maxPlayers = team.getMaxPlayers(); + + String current = "0"; + if (teamPlayerSize >= maxPlayers) { + current = ChatColor.RED + String.valueOf(teamPlayerSize); + } else { + current = ChatColor.YELLOW + String.valueOf(teamPlayerSize); + } + + teamplayers.add(ChatColor.GRAY + "(" + current + ChatColor.GRAY + "/" + ChatColor.YELLOW + + String.valueOf(maxPlayers) + ChatColor.GRAY + ")"); + teamplayers.add(ChatColor.WHITE + "---------"); + + for (Player teamPlayer : players) { + teamplayers.add(team.getChatColor() + ChatColor.stripColor(teamPlayer.getDisplayName())); + } + + im.setLore(teamplayers); + is.setItemMeta(im); + inv.addItem(is); + } + + this.player.openInventory(inv); + } + + public void restore() { + if (BedwarsRel.getInstance().getBooleanConfig("save-inventory", true)) { + this.player.getInventory().setContents(this.inventory); + this.player.getInventory().setArmorContents(this.armor); + + this.player.addPotionEffects(this.effects); + this.player.setLevel(this.level); + this.player.setExp(this.xp); + this.player.setFoodLevel(this.foodLevel); + + for (PotionEffect e : this.player.getActivePotionEffects()) { + this.player.removePotionEffect(e.getType()); + } + + this.player.addPotionEffects(this.effects); + } + + this.player.setPlayerListName(this.listName); + this.player.setDisplayName(this.displayName); + + this.player.setGameMode(this.mode); + + if (this.mode == GameMode.CREATIVE) { + this.player.setAllowFlight(true); + } + this.player.updateInventory(); + } + + public void store() { + this.inventory = this.player.getInventory().getContents(); + this.armor = this.player.getInventory().getArmorContents(); + this.xp = Float.valueOf(this.player.getExp()); + this.effects = this.player.getActivePotionEffects(); + this.mode = this.player.getGameMode(); + this.left = this.player.getLocation(); + this.level = this.player.getLevel(); + this.listName = this.player.getPlayerListName(); + this.displayName = this.player.getDisplayName(); + this.foodLevel = this.player.getFoodLevel(); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/game/Region.java b/common/src/main/java/io/github/bedwarsrel/game/Region.java new file mode 100644 index 0000000..fe2bb24 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/game/Region.java @@ -0,0 +1,388 @@ +package io.github.bedwarsrel.game; + +import io.github.bedwarsrel.BedwarsRel; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import org.bukkit.Chunk; +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; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Item; +import org.bukkit.entity.LivingEntity; +import org.bukkit.inventory.Inventory; +import org.bukkit.material.Bed; +import org.bukkit.material.Directional; +import org.bukkit.material.Lever; +import org.bukkit.material.MaterialData; +import org.bukkit.material.Redstone; + +public class Region { + + public final static int CHUNK_SIZE = 16; + private HashMap breakedBlockData = null; + private HashMap breakedBlockFace = null; + private HashMap breakedBlockPower = null; + private HashMap breakedBlockTypes = null; + private List breakedBlocks = null; + private List inventories = null; + private Location maxCorner = null; + private Location minCorner = null; + private String name = null; + private List placedBlocks = null; + private List placedUnbreakableBlocks = null; + private List removingEntities = null; + private World world = null; + + public Region(Location pos1, Location pos2, String name) { + if (pos1 == null || pos2 == null) { + return; + } + + if (!pos1.getWorld().getName().equals(pos2.getWorld().getName())) { + return; + } + + this.world = pos1.getWorld(); + this.setMinMax(pos1, pos2); + this.placedBlocks = new ArrayList(); + this.breakedBlocks = new ArrayList(); + this.breakedBlockTypes = new HashMap(); + this.breakedBlockData = new HashMap(); + this.breakedBlockFace = new HashMap(); + this.placedUnbreakableBlocks = new ArrayList(); + this.breakedBlockPower = new HashMap(); + this.inventories = new ArrayList(); + this.removingEntities = new ArrayList(); + + this.name = name; + } + + public Region(World w, int x1, int y1, int z1, int x2, int y2, int z2) { + this(new Location(w, x1, y1, z1), new Location(w, x2, y2, z2), w.getName()); + } + + @SuppressWarnings("deprecation") + public void addBreakedBlock(Block bedBlock) { + if (bedBlock.getState().getData() instanceof Directional) { + this.breakedBlockFace.put(bedBlock, + ((Directional) bedBlock.getState().getData()).getFacing()); + } + + this.breakedBlockTypes.put(bedBlock, bedBlock.getTypeId()); + this.breakedBlockData.put(bedBlock, bedBlock.getData()); + + if (bedBlock.getState().getData() instanceof Redstone) { + this.breakedBlockPower.put(bedBlock, ((Redstone) bedBlock.getState().getData()).isPowered()); + } + + this.breakedBlocks.add(bedBlock); + } + + public void addInventory(Inventory inventory) { + this.inventories.add(inventory); + } + + @SuppressWarnings("deprecation") + public void addPlacedBlock(Block placeBlock, BlockState replacedBlock) { + this.placedBlocks.add(placeBlock); + if (replacedBlock != null) { + if (replacedBlock.getData() instanceof Directional) { + this.breakedBlockFace.put(replacedBlock.getBlock(), + ((Directional) replacedBlock.getData()).getFacing()); + } + + this.breakedBlockTypes.put(replacedBlock.getBlock(), replacedBlock.getTypeId()); + this.breakedBlockData.put(replacedBlock.getBlock(), replacedBlock.getData().getData()); + + this.breakedBlocks.add(replacedBlock.getBlock()); + } + } + + @SuppressWarnings("deprecation") + public void addPlacedUnbreakableBlock(Block placed, BlockState replaced) { + this.placedUnbreakableBlocks.add(placed); + if (replaced != null) { + if (replaced.getData() instanceof Directional) { + this.breakedBlockFace.put(replaced.getBlock(), + ((Directional) replaced.getData()).getFacing()); + } + + this.breakedBlockTypes.put(replaced.getBlock(), replaced.getTypeId()); + this.breakedBlockData.put(replaced.getBlock(), replaced.getData().getData()); + this.breakedBlocks.add(replaced.getBlock()); + + if (replaced.getData() instanceof Redstone) { + this.breakedBlockPower.put(placed, ((Redstone) replaced.getData()).isPowered()); + } + } + } + + public void addRemovingEntity(Entity removing) { + this.removingEntities.add(removing); + } + + public boolean check() { + return (this.minCorner != null && this.maxCorner != null && this.world != null); + } + + public boolean chunkIsInRegion(Chunk chunk) { + return (chunk.getX() >= this.minCorner.getX() && chunk.getX() <= this.maxCorner.getX() + && chunk.getZ() >= this.minCorner.getZ() && chunk.getZ() <= this.maxCorner.getZ()); + } + + public boolean chunkIsInRegion(double x, double z) { + return (x >= this.minCorner.getX() && x <= this.maxCorner.getX() && z >= this.minCorner.getZ() + && z <= this.maxCorner.getZ()); + } + + public List getInventories() { + return this.inventories; + } + + private Location getMaximumCorner(Location pos1, Location pos2) { + return new Location(this.world, Math.max(pos1.getBlockX(), pos2.getBlockX()), + Math.max(pos1.getBlockY(), pos2.getBlockY()), Math.max(pos1.getBlockZ(), pos2.getBlockZ())); + } + + private Location getMinimumCorner(Location pos1, Location pos2) { + return new Location(this.world, Math.min(pos1.getBlockX(), pos2.getBlockX()), + Math.min(pos1.getBlockY(), pos2.getBlockY()), Math.min(pos1.getBlockZ(), pos2.getBlockZ())); + } + + public String getName() { + if (this.name == null) { + this.name = this.world.getName(); + } + + return this.name; + } + + public World getWorld() { + return this.minCorner.getWorld(); + } + + public boolean isInRegion(Location location) { + if (!location.getWorld().equals(this.world)) { + return false; + } + + return (location.getBlockX() >= this.minCorner.getBlockX() + && location.getBlockX() <= this.maxCorner.getBlockX() + && location.getBlockY() >= this.minCorner.getBlockY() + && location.getBlockY() <= this.maxCorner.getBlockY() + && location.getBlockZ() >= this.minCorner.getBlockZ() + && location.getBlockZ() <= this.maxCorner.getBlockZ()); + } + + public boolean isPlacedBlock(Block block) { + return this.placedBlocks.contains(block); + } + + public boolean isPlacedUnbreakableBlock(Block clickedBlock) { + return this.placedUnbreakableBlocks.contains(clickedBlock); + } + + public void loadChunks() { + int minX = (int) Math.floor(this.minCorner.getX()); + int maxX = (int) Math.ceil(this.maxCorner.getX()); + int minZ = (int) Math.floor(this.minCorner.getZ()); + int maxZ = (int) Math.ceil(this.maxCorner.getZ()); + + for (int x = minX; x <= maxX; x += Region.CHUNK_SIZE) { + for (int z = minZ; z <= maxZ; z += Region.CHUNK_SIZE) { + Chunk chunk = this.world.getChunkAt(x, z); + if (!chunk.isLoaded()) { + chunk.load(); + } + } + } + } + + public void removePlacedBlock(Block block) { + this.placedBlocks.remove(block); + } + + public void removePlacedUnbreakableBlock(Block block) { + this.placedUnbreakableBlocks.remove(block); + } + + public void removeRemovingEntity(Entity removing) { + this.removingEntities.remove(removing); + } + + @SuppressWarnings("deprecation") + public void reset(Game game) { + this.loadChunks(); + + for (Inventory inventory : this.inventories) { + inventory.clear(); + } + + for (Block placed : this.placedBlocks) { + Block blockInWorld = this.world.getBlockAt(placed.getLocation()); + if (blockInWorld.getType() == Material.AIR) { + continue; + } + + if (blockInWorld.equals(placed)) { + blockInWorld.setType(Material.AIR); + } + } + + this.placedBlocks.clear(); + + for (Block placed : this.placedUnbreakableBlocks) { + Block blockInWorld = this.world.getBlockAt(placed.getLocation()); + if (blockInWorld.getType() == Material.AIR) { + continue; + } + + if (blockInWorld.getLocation().equals(placed.getLocation())) { + blockInWorld.setType(Material.AIR); + } + } + + this.placedUnbreakableBlocks.clear(); + + for (Block block : this.breakedBlocks) { + Block theBlock = this.getWorld().getBlockAt(block.getLocation()); + theBlock.setTypeId(this.breakedBlockTypes.get(block)); + theBlock.setData(this.breakedBlockData.get(block)); + + if (this.breakedBlockFace.containsKey(theBlock)) { + MaterialData data = theBlock.getState().getData(); + if (data instanceof Directional) { + ((Directional) data).setFacingDirection(this.breakedBlockFace.get(block)); + theBlock.getState().setData(data); + } + } + + if (theBlock.getState().getData() instanceof Lever) { + Lever attach = (Lever) theBlock.getState().getData(); + BlockState supportState = theBlock.getState(); + BlockState initalState = theBlock.getState(); + attach.setPowered(this.breakedBlockPower.get(block)); + theBlock.getState().setData(attach); + + supportState.setType(Material.AIR); + supportState.update(true, false); + initalState.update(true); + } else { + theBlock.getState().update(true, true); + } + } + + this.breakedBlocks.clear(); + + Material targetMaterial = game.getTargetMaterial(); + for (Team team : game.getTeams().values()) { + if (team.getHeadTarget() == null) { + continue; + } + + if ((targetMaterial.equals(Material.BED_BLOCK) || targetMaterial.equals(Material.BED)) + && team.getFeetTarget() != null) { + Block blockHead = this.world.getBlockAt(team.getHeadTarget().getLocation()); + Block blockFeed = this.world.getBlockAt(team.getFeetTarget().getLocation()); + BlockState headState = blockHead.getState(); + BlockState feedState = blockFeed.getState(); + + headState.setType(Material.BED_BLOCK); + feedState.setType(Material.BED_BLOCK); + headState.setRawData((byte) 0x0); + feedState.setRawData((byte) 0x8); + feedState.update(true, false); + headState.update(true, false); + + Bed bedHead = (Bed) headState.getData(); + bedHead.setHeadOfBed(true); + bedHead.setFacingDirection(blockHead.getFace(blockFeed).getOppositeFace()); + + Bed bedFeed = (Bed) feedState.getData(); + bedFeed.setHeadOfBed(false); + bedFeed.setFacingDirection(blockFeed.getFace(blockHead)); + + feedState.update(true, false); + headState.update(true, true); + } else { + Block blockHead = this.world.getBlockAt(team.getHeadTarget().getLocation()); + BlockState headState = blockHead.getState(); + + headState.setType(targetMaterial); + headState.update(true, true); + } + } + + for (ResourceSpawner spawner : game.getRessourceSpawner()) { + spawner.getLocation().getChunk().load(); + } + + for (Entity entity : this.removingEntities) { + entity.remove(); + } + + Iterator entityIterator = this.world.getEntities().iterator(); + while (entityIterator.hasNext()) { + Entity e = entityIterator.next(); + + if (this.removingEntities.contains(e)) { + continue; + } + + if (!this.isInRegion(e.getLocation())) { + continue; + } + + if (e instanceof Item) { + e.remove(); + continue; + } + + if (e.getType().equals(EntityType.CREEPER) || e.getType().equals(EntityType.CAVE_SPIDER) + || e.getType().equals(EntityType.SPIDER) || e.getType().equals(EntityType.ZOMBIE) + || e.getType().equals(EntityType.SKELETON) || e.getType().equals(EntityType.SILVERFISH) + || e.getType().equals(EntityType.ARROW)) { + e.remove(); + continue; + } + + if (e instanceof LivingEntity) { + LivingEntity le = (LivingEntity) e; + le.setRemoveWhenFarAway(false); + } + } + + this.removingEntities.clear(); + } + + private void setMinMax(Location pos1, Location pos2) { + this.minCorner = this.getMinimumCorner(pos1, pos2); + this.maxCorner = this.getMaximumCorner(pos1, pos2); + } + + public void setVillagerNametag() { + Iterator entityIterator = this.world.getEntities().iterator(); + while (entityIterator.hasNext()) { + Entity e = entityIterator.next(); + + if (!this.isInRegion(e.getLocation())) { + continue; + } + + if (e.getType() == EntityType.VILLAGER) { + LivingEntity le = (LivingEntity) e; + le.setCustomNameVisible(false); + le.setCustomName( + BedwarsRel + ._l(BedwarsRel.getInstance().getServer().getConsoleSender(), "ingame.shop.name")); + } + } + } +} diff --git a/common/src/main/java/io/github/bedwarsrel/game/ResourceSpawner.java b/common/src/main/java/io/github/bedwarsrel/game/ResourceSpawner.java new file mode 100644 index 0000000..5307608 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/game/ResourceSpawner.java @@ -0,0 +1,169 @@ +package io.github.bedwarsrel.game; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.events.BedwarsResourceSpawnEvent; +import io.github.bedwarsrel.utils.Utils; +import io.github.bedwarsrel.villager.ItemStackParser; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import lombok.Getter; +import lombok.Setter; +import org.bukkit.Location; +import org.bukkit.block.BlockState; +import org.bukkit.block.Chest; +import org.bukkit.configuration.serialization.ConfigurationSerializable; +import org.bukkit.configuration.serialization.SerializableAs; +import org.bukkit.entity.Item; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +@Getter +@Setter +@SerializableAs("RessourceSpawner") +public class ResourceSpawner implements Runnable, ConfigurationSerializable { + + private Game game = null; + private int interval = 1000; + private List resources = new ArrayList<>(); + private Location location = null; + private double spread = 1.0; + private String name = null; + + public ResourceSpawner(Map deserialize) { + this.location = Utils.locationDeserialize(deserialize.get("location")); + + if (deserialize.containsKey("name")) { + String name = deserialize.get("name").toString(); + + if (BedwarsRel.getInstance().getConfig().contains("resource." + name)) { + List resourceList = (List) BedwarsRel.getInstance().getConfig() + .getList("resource." + name + ".item"); + for (Object resource : resourceList) { + ItemStack itemStack = ItemStack.deserialize((Map) resource); + if (itemStack != null) { + this.resources.add(itemStack); + } + } + this.interval = + BedwarsRel.getInstance().getIntConfig("resource." + name + ".spawn-interval", 1000); + this.spread = + BedwarsRel.getInstance().getConfig().getDouble("resource." + name + ".spread", 1.0); + this.name = name; + } else { + List resourceList = (List) BedwarsRel.getInstance().getConfig() + .getList("resource." + name + ".item"); + for (Object resource : resourceList) { + ItemStack itemStack = ItemStack.deserialize((Map) resource); + if (itemStack != null) { + this.resources.add(itemStack); + } + } + this.interval = Integer.parseInt(deserialize.get("interval").toString()); + if (deserialize.containsKey("spread")) { + this.spread = Double.parseDouble(deserialize.get("spread").toString()); + } + } + } else { + List resourceList = (List) BedwarsRel.getInstance().getConfig() + .getList("resource." + name + ".item"); + for (Object resource : resourceList) { + ItemStack itemStack = ItemStack.deserialize((Map) resource); + if (itemStack != null) { + this.resources.add(itemStack); + } + } + this.interval = Integer.parseInt(deserialize.get("interval").toString()); + if (deserialize.containsKey("spread")) { + this.spread = Double.parseDouble(deserialize.get("spread").toString()); + } + } + } + + public ResourceSpawner(Game game, String name, Location location) { + this.game = game; + this.name = name; + this.interval = + BedwarsRel.getInstance().getIntConfig("resource." + name + ".spawn-interval", 1000); + this.location = location; + List resourceList = (List) BedwarsRel.getInstance().getConfig() + .getList("resource." + name + ".item"); + for (Object resource : resourceList) { + ItemStack itemStack = ItemStack.deserialize((Map) resource); + if (itemStack != null) { + this.resources.add(itemStack); + } + } + this.spread = + BedwarsRel.getInstance().getConfig().getDouble("resource." + name + ".spread", 1.0); + } + + public static ItemStack createSpawnerStackByConfig(Object section) { + ItemStackParser parser = new ItemStackParser(section); + return parser.parse(); + } + + public boolean canContainItem(Inventory inv, ItemStack item) { + int space = 0; + for (ItemStack stack : inv.getContents()) { + if (stack == null) { + space += item.getMaxStackSize(); + } else if (stack.getType() == item.getType() + && stack.getDurability() == item.getDurability()) { + space += item.getMaxStackSize() - stack.getAmount(); + } + } + return space >= item.getAmount(); + } + + public void dropItem(Location dropLocation, ItemStack itemStack) { + Item item = this.game.getRegion().getWorld().dropItemNaturally(dropLocation, itemStack); + item.setPickupDelay(0); + if (this.spread != 1.0) { + item.setVelocity(item.getVelocity().multiply(this.spread)); + } + } + + @Override + public void run() { + Location dropLocation = this.location.clone(); + for (ItemStack itemStack : this.resources) { + ItemStack item = itemStack.clone(); + + BedwarsResourceSpawnEvent resourceSpawnEvent = + new BedwarsResourceSpawnEvent(this.game, this.location, item); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(resourceSpawnEvent); + + if (resourceSpawnEvent.isCancelled()) { + return; + } + + item = resourceSpawnEvent.getResource(); + + if (BedwarsRel.getInstance().getBooleanConfig("spawn-resources-in-chest", true)) { + BlockState blockState = dropLocation.getBlock().getState(); + if (blockState instanceof Chest) { + Chest chest = (Chest) blockState; + if (canContainItem(chest.getInventory(), item)) { + chest.getInventory().addItem(item); + continue; + } else { + dropLocation.setY(dropLocation.getY() + 1); + } + } + } + dropItem(dropLocation, item); + } + } + + @Override + public Map serialize() { + HashMap rs = new HashMap<>(); + + rs.put("location", Utils.locationSerialize(this.location)); + rs.put("name", this.name); + return rs; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/game/RespawnProtectionRunnable.java b/common/src/main/java/io/github/bedwarsrel/game/RespawnProtectionRunnable.java new file mode 100644 index 0000000..3401148 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/game/RespawnProtectionRunnable.java @@ -0,0 +1,43 @@ +package io.github.bedwarsrel.game; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.utils.ChatWriter; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +public class RespawnProtectionRunnable extends BukkitRunnable { + + private Game game = null; + private int length = 0; + private Player player = null; + + public RespawnProtectionRunnable(Game game, Player player, int seconds) { + this.game = game; + this.player = player; + this.length = seconds; + } + + @Override + public void run() { + if (this.length > 0) { + this.player + .sendMessage(ChatWriter.pluginMessage(BedwarsRel._l(player, "ingame.protectionleft", + ImmutableMap.of("length", String.valueOf(this.length))))); + } + + if (this.length <= 0) { + this.player + .sendMessage( + ChatWriter.pluginMessage(BedwarsRel._l(this.player, "ingame.protectionend"))); + this.game.removeProtection(this.player); + } + + this.length--; + } + + public void runProtection() { + this.runTaskTimerAsynchronously(BedwarsRel.getInstance(), 5L, 20L); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/game/SingleGameCycle.java b/common/src/main/java/io/github/bedwarsrel/game/SingleGameCycle.java new file mode 100644 index 0000000..9b0ac9f --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/game/SingleGameCycle.java @@ -0,0 +1,215 @@ +package io.github.bedwarsrel.game; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.events.BedwarsGameEndEvent; +import io.github.bedwarsrel.statistics.PlayerStatistic; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.Utils; +import java.util.ArrayList; +import java.util.List; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; + +public class SingleGameCycle extends GameCycle { + + public SingleGameCycle(Game game) { + super(game); + } + + private void kickPlayer(Player player, boolean wasSpectator) { + for (Player freePlayer : this.getGame().getFreePlayers()) { + player.showPlayer(freePlayer); + } + + if (wasSpectator && this.getGame().isFull()) { + this.getGame().playerLeave(player, false); + return; + } + + if (BedwarsRel.getInstance().toMainLobby()) { + if (BedwarsRel.getInstance().allPlayersBackToMainLobby()) { + this.getGame().playerLeave(player, false); + return; + } else { + player.teleport(this.getGame().getLobby()); + } + } else { + player.teleport(this.getGame().getLobby()); + } + + if (BedwarsRel.getInstance().statisticsEnabled()) { + PlayerStatistic statistic = + BedwarsRel.getInstance().getPlayerStatisticManager().getStatistic(player); + BedwarsRel.getInstance().getPlayerStatisticManager().storeStatistic(statistic); + + if (BedwarsRel.getInstance().getBooleanConfig("statistics.show-on-game-end", true)) { + BedwarsRel.getInstance().getServer().dispatchCommand(player, "bw stats"); + } + } + + this.getGame().setPlayerDamager(player, null); + + PlayerStorage storage = this.getGame().getPlayerStorage(player); + storage.clean(); + storage.loadLobbyInventory(this.getGame()); + } + + @Override + public void onGameEnds() { + // Reset scoreboard first + this.getGame().resetScoreboard(); + + // First team players, they get a reserved slot in lobby + for (Player p : this.getGame().getTeamPlayers()) { + this.kickPlayer(p, false); + } + + // and now the spectators + List freePlayers = new ArrayList(this.getGame().getFreePlayers()); + for (Player p : freePlayers) { + this.kickPlayer(p, true); + } + + // reset countdown prevention breaks + this.setEndGameRunning(false); + + // Reset team chests + for (Team team : this.getGame().getTeams().values()) { + team.setInventory(null); + team.getChests().clear(); + } + + // clear protections + this.getGame().clearProtections(); + + // reset region + this.getGame().resetRegion(); + + // Restart lobby directly? + if (this.getGame().isStartable() && this.getGame().getLobbyCountdown() == null) { + GameLobbyCountdown lobbyCountdown = new GameLobbyCountdown(this.getGame()); + lobbyCountdown.runTaskTimer(BedwarsRel.getInstance(), 20L, 20L); + this.getGame().setLobbyCountdown(lobbyCountdown); + } + + // set state and with that, the sign + this.getGame().setState(GameState.WAITING); + this.getGame().updateScoreboard(); + } + + @Override + public void onGameLoaded() { + // Reset on game end + } + + @Override + public void onGameOver(GameOverTask task) { + if (task.getCounter() == task.getStartCount() && task.getWinner() != null) { + for (Player aPlayer : this.getGame().getPlayers()) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage( + ChatWriter.pluginMessage(ChatColor.GOLD + BedwarsRel._l(aPlayer, "ingame.teamwon", + ImmutableMap.of("team", task.getWinner().getDisplayName() + ChatColor.GOLD)))); + } + } + this.getGame().stopWorkers(); + } else if (task.getCounter() == task.getStartCount() && task.getWinner() == null) { + for (Player aPlayer : this.getGame().getPlayers()) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage( + ChatWriter.pluginMessage(ChatColor.GOLD + BedwarsRel._l(aPlayer, "ingame.draw"))); + } + } + } + + if (this.getGame().getPlayers().size() == 0 || task.getCounter() == 0) { + BedwarsGameEndEvent endEvent = new BedwarsGameEndEvent(this.getGame()); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(endEvent); + + this.onGameEnds(); + task.cancel(); + } else { + for (Player aPlayer : this.getGame().getPlayers()) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage( + ChatWriter.pluginMessage( + ChatColor.AQUA + BedwarsRel + ._l(aPlayer, "ingame.backtolobby", ImmutableMap.of("sec", + ChatColor.YELLOW.toString() + task.getCounter() + ChatColor.AQUA)))); + } + } + } + + task.decCounter(); + } + + @Override + public void onGameStart() { + // Reset on game end + } + + @Override + public boolean onPlayerJoins(Player player) { + if (this.getGame().isFull() && !player.hasPermission("bw.vip.joinfull")) { + if (this.getGame().getState() != GameState.RUNNING + || !BedwarsRel.getInstance().spectationEnabled()) { + player.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(player, "lobby.gamefull"))); + return false; + } + } else if (this.getGame().isFull() && player.hasPermission("bw.vip.joinfull")) { + if (this.getGame().getState() == GameState.WAITING) { + List players = this.getGame().getNonVipPlayers(); + + if (players.size() == 0) { + player.sendMessage( + ChatWriter + .pluginMessage(ChatColor.RED + BedwarsRel._l(player, "lobby.gamefullpremium"))); + return false; + } + + Player kickPlayer = null; + if (players.size() == 1) { + kickPlayer = players.get(0); + } else { + kickPlayer = players.get(Utils.randInt(0, players.size() - 1)); + } + + kickPlayer + .sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(kickPlayer, "lobby.kickedbyvip"))); + this.getGame().playerLeave(kickPlayer, false); + } else { + if (this.getGame().getState() == GameState.RUNNING + && !BedwarsRel.getInstance().spectationEnabled()) { + player.sendMessage( + ChatWriter + .pluginMessage(ChatColor.RED + BedwarsRel._l(player, "errors.cantjoingame"))); + return false; + } + } + } + + return true; + } + + @Override + public void onPlayerLeave(Player player) { + // teleport to join location + PlayerStorage storage = this.getGame().getPlayerStorage(player); + + if (BedwarsRel.getInstance().toMainLobby()) { + player.teleport(this.getGame().getMainLobby()); + } else { + player.teleport(storage.getLeft()); + } + + if (this.getGame().getState() == GameState.RUNNING && !this.getGame().isStopping() + && !this.getGame().isSpectator(player)) { + this.checkGameOver(); + } + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/game/Team.java b/common/src/main/java/io/github/bedwarsrel/game/Team.java new file mode 100644 index 0000000..9f34521 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/game/Team.java @@ -0,0 +1,292 @@ +package io.github.bedwarsrel.game; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.events.BedwarsPlayerJoinTeamEvent; +import io.github.bedwarsrel.events.BedwarsPlayerSetNameEvent; +import io.github.bedwarsrel.utils.Utils; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import lombok.Data; +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.configuration.serialization.ConfigurationSerializable; +import org.bukkit.configuration.serialization.SerializableAs; +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.LeatherArmorMeta; + +@Data +@SerializableAs("Team") +public class Team implements ConfigurationSerializable { + + private List chests = null; + private TeamColor color = null; + private Inventory inventory = null; + private int maxPlayers = 0; + private String name = null; + private org.bukkit.scoreboard.Team scoreboardTeam = null; + private Location spawnLocation = null; + private Location targetFeetBlock = null; + private Location targetHeadBlock = null; + + public Team(Map deserialize) { + this.setName(deserialize.get("name").toString()); + this.setMaxPlayers(Integer.parseInt(deserialize.get("maxplayers").toString())); + this.setColor(TeamColor.valueOf(deserialize.get("color").toString().toUpperCase())); + this.setSpawnLocation(Utils.locationDeserialize(deserialize.get("spawn"))); + this.setChests(new ArrayList()); + + if (deserialize.containsKey("bedhead")) { + this.setTargetHeadBlock(Utils.locationDeserialize(deserialize.get("bedhead"))); + + if (this.getTargetHeadBlock() != null && deserialize.containsKey("bedfeed") + && this.getTargetHeadBlock().getBlock().getType().equals(Material.BED_BLOCK)) { + this.setTargetFeetBlock(Utils.locationDeserialize(deserialize.get("bedfeed"))); + } + } + } + + public Team(String name, TeamColor color, int maxPlayers, + org.bukkit.scoreboard.Team scoreboardTeam) { + this.setName(name); + this.setColor(color); + this.setMaxPlayers(maxPlayers); + this.setScoreboardTeam(scoreboardTeam); + this.setChests(new ArrayList()); + } + + public void addChest(Block chestBlock) { + this.getChests().add(chestBlock); + } + + @SuppressWarnings("deprecation") + public boolean addPlayer(Player player) { + + BedwarsPlayerJoinTeamEvent playerJoinTeamEvent = new BedwarsPlayerJoinTeamEvent(this, player); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(playerJoinTeamEvent); + + if (playerJoinTeamEvent.isCancelled()) { + return false; + } + + if (BedwarsRel.getInstance().isSpigot()) { + if (this.getScoreboardTeam().getEntries().size() >= this.getMaxPlayers()) { + return false; + } + } else { + if (this.getScoreboardTeam().getPlayers().size() >= this.getMaxPlayers()) { + return false; + } + } + + String displayName = player.getDisplayName(); + String playerListName = player.getPlayerListName(); + + if (BedwarsRel.getInstance().getBooleanConfig("overwrite-names", false)) { + displayName = this.getChatColor() + ChatColor.stripColor(player.getName()); + playerListName = this.getChatColor() + ChatColor.stripColor(player.getName()); + } + + if (BedwarsRel.getInstance().getBooleanConfig("teamname-on-tab", true)) { + playerListName = this.getChatColor() + this.getName() + ChatColor.WHITE + " | " + + this.getChatColor() + ChatColor.stripColor(player.getDisplayName()); + } + + BedwarsPlayerSetNameEvent playerSetNameEvent = + new BedwarsPlayerSetNameEvent(this, displayName, playerListName, player); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(playerSetNameEvent); + + if (!playerSetNameEvent.isCancelled()) { + player.setDisplayName(playerSetNameEvent.getDisplayName()); + player.setPlayerListName(playerSetNameEvent.getPlayerListName()); + } + + if (BedwarsRel.getInstance().isSpigot()) { + this.getScoreboardTeam().addEntry(player.getName()); + } else { + this.getScoreboardTeam().addPlayer(player); + } + this.equipPlayerWithLeather(player); + + return true; + } + + public void createTeamInventory() { + Inventory inventory = + Bukkit.createInventory(null, InventoryType.ENDER_CHEST, BedwarsRel._l("ingame.teamchest")); + this.setInventory(inventory); + } + + private void equipPlayerWithLeather(Player player) { + // helmet + ItemStack helmet = new ItemStack(Material.LEATHER_HELMET, 1); + LeatherArmorMeta meta = (LeatherArmorMeta) helmet.getItemMeta(); + meta.setColor(this.getColor().getColor()); + helmet.setItemMeta(meta); + + // chestplate + ItemStack chestplate = new ItemStack(Material.LEATHER_CHESTPLATE, 1); + meta = (LeatherArmorMeta) chestplate.getItemMeta(); + meta.setColor(this.getColor().getColor()); + chestplate.setItemMeta(meta); + + // leggings + ItemStack leggings = new ItemStack(Material.LEATHER_LEGGINGS, 1); + meta = (LeatherArmorMeta) leggings.getItemMeta(); + meta.setColor(this.getColor().getColor()); + leggings.setItemMeta(meta); + + // boots + ItemStack boots = new ItemStack(Material.LEATHER_BOOTS, 1); + meta = (LeatherArmorMeta) boots.getItemMeta(); + meta.setColor(this.getColor().getColor()); + boots.setItemMeta(meta); + + player.getInventory().setHelmet(helmet); + player.getInventory().setChestplate(chestplate); + player.getInventory().setLeggings(leggings); + player.getInventory().setBoots(boots); + player.updateInventory(); + } + + public ChatColor getChatColor() { + return this.getColor().getChatColor(); + } + + public String getDisplayName() { + return this.getScoreboardTeam().getDisplayName(); + } + + public Block getFeetTarget() { + if (this.getTargetFeetBlock() == null) { + return null; + } + + this.getTargetFeetBlock().getBlock().getChunk().load(true); + return this.getTargetFeetBlock().getBlock(); + } + + public Block getHeadTarget() { + if (this.targetHeadBlock == null) { + return null; + } + + this.getTargetHeadBlock().getBlock().getChunk().load(true); + return this.getTargetHeadBlock().getBlock(); + } + + @SuppressWarnings("deprecation") + public List getPlayers() { + List players = new ArrayList<>(); + if (BedwarsRel.getInstance().isSpigot()) { + for (String aPlayer : this.getScoreboardTeam().getEntries()) { + Player player = BedwarsRel.getInstance().getServer().getPlayer(aPlayer); + if (player != null + && BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player) != null + && !BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player) + .isSpectator(player)) { + players.add(player); + } + } + } else { + for (OfflinePlayer offlinePlayer : this.getScoreboardTeam().getPlayers()) { + Player player = BedwarsRel.getInstance().getServer().getPlayer(offlinePlayer.getName()); + if (player != null + && BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player) != null + && !BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player) + .isSpectator(player)) { + players.add(player); + } + } + } + + return players; + } + + public boolean isDead(Game game) { + Material targetMaterial = game.getTargetMaterial(); + + this.getTargetHeadBlock().getBlock().getChunk().load(true); + if (this.getTargetFeetBlock() == null) { + return this.getTargetHeadBlock().getBlock().getType() != targetMaterial; + } + + this.getTargetFeetBlock().getBlock().getChunk().load(true); + return (this.getTargetHeadBlock().getBlock().getType() != targetMaterial + && this.getTargetFeetBlock().getBlock().getType() != targetMaterial); + } + + @SuppressWarnings("deprecation") + public boolean isInTeam(Player p) { + if (BedwarsRel.getInstance().isSpigot()) { + return this.getScoreboardTeam().hasEntry(p.getName()); + } else { + return this.getScoreboardTeam().hasPlayer(p); + } + } + + public void removeChest(Block chest) { + this.getChests().remove(chest); + if (this.getChests().size() == 0) { + this.setInventory(null); + } + } + + @SuppressWarnings("deprecation") + public void removePlayer(Player player) { + if (BedwarsRel.getInstance().isSpigot()) { + if (this.getScoreboardTeam().hasEntry(player.getName())) { + this.getScoreboardTeam().removeEntry(player.getName()); + } + } else { + if (this.getScoreboardTeam().hasPlayer(player)) { + this.getScoreboardTeam().removePlayer(player); + } + } + + if (BedwarsRel.getInstance().getBooleanConfig("overwrite-names", false) && player.isOnline()) { + player.setDisplayName(ChatColor.RESET + ChatColor.stripColor(player.getName())); + player.setPlayerListName(ChatColor.RESET + player.getPlayer().getName()); + } + } + + @Override + public Map serialize() { + HashMap team = new HashMap<>(); + + team.put("name", this.getName()); + team.put("color", this.getColor().toString()); + team.put("maxplayers", this.getMaxPlayers()); + team.put("spawn", Utils.locationSerialize(this.getSpawnLocation())); + team.put("bedhead", Utils.locationSerialize(this.getTargetHeadBlock())); + + if (this.targetFeetBlock != null) { + team.put("bedfeed", Utils.locationSerialize(this.targetFeetBlock)); + } + + return team; + } + + public void setScoreboardTeam(org.bukkit.scoreboard.Team scoreboardTeam) { + scoreboardTeam.setDisplayName(this.getChatColor() + this.name); + this.scoreboardTeam = scoreboardTeam; + } + + public void setTargets(Block headBlock, Block feetBlock) { + this.setTargetHeadBlock(headBlock.getLocation()); + if (feetBlock != null) { + this.setTargetFeetBlock(feetBlock.getLocation()); + } else { + this.setTargetFeetBlock(null); + } + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/game/TeamColor.java b/common/src/main/java/io/github/bedwarsrel/game/TeamColor.java new file mode 100644 index 0000000..f70e981 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/game/TeamColor.java @@ -0,0 +1,45 @@ +package io.github.bedwarsrel.game; + +import org.bukkit.ChatColor; +import org.bukkit.Color; +import org.bukkit.DyeColor; + +public enum TeamColor { + GREEN(Color.fromRGB(85, 255, 85), ChatColor.GREEN, DyeColor.LIME), + RED(Color.fromRGB(255, 85, 85), ChatColor.RED, DyeColor.RED), + BLUE(Color.fromRGB(85, 85, 255), ChatColor.BLUE, DyeColor.LIGHT_BLUE), + YELLOW(Color.fromRGB(255, 255, 85), ChatColor.YELLOW, DyeColor.YELLOW), + AQUA(Color.fromRGB(85, 255, 255), ChatColor.AQUA, DyeColor.CYAN), + BLACK(Color.BLACK, ChatColor.BLACK, DyeColor.BLACK), + GOLD(Color.fromRGB(255, 170, 0), ChatColor.GOLD, DyeColor.ORANGE), + DARK_BLUE(Color.fromRGB(0, 0, 170), ChatColor.DARK_BLUE, DyeColor.BLUE), + DARK_GREEN(Color.fromRGB(0, 170, 0), ChatColor.DARK_GREEN, DyeColor.GREEN), + DARK_RED(Color.fromRGB(170, 0, 0), ChatColor.DARK_RED, DyeColor.BROWN), + DARK_PURPLE(Color.fromRGB(170, 0, 170), ChatColor.DARK_PURPLE, DyeColor.MAGENTA), + GRAY(Color.fromRGB(170, 170, 170), ChatColor.GRAY, DyeColor.SILVER), + DARK_GRAY(Color.fromRGB(85, 85, 85), ChatColor.DARK_GRAY, DyeColor.GRAY), + LIGHT_PURPLE(Color.fromRGB(255, 85, 255), ChatColor.LIGHT_PURPLE, DyeColor.PINK), + WHITE(Color.WHITE, ChatColor.WHITE, DyeColor.WHITE); + + private ChatColor chatColor; + private Color color; + private DyeColor dyeColor; + + private TeamColor(Color color, ChatColor chatColor, DyeColor dye) { + this.chatColor = chatColor; + this.color = color; + this.dyeColor = dye; + } + + public ChatColor getChatColor() { + return this.chatColor; + } + + public Color getColor() { + return this.color; + } + + public DyeColor getDyeColor() { + return this.dyeColor; + } +} diff --git a/common/src/main/java/io/github/bedwarsrel/game/TeamJoinMetaDataValue.java b/common/src/main/java/io/github/bedwarsrel/game/TeamJoinMetaDataValue.java new file mode 100644 index 0000000..95e2740 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/game/TeamJoinMetaDataValue.java @@ -0,0 +1,75 @@ +package io.github.bedwarsrel.game; + +import io.github.bedwarsrel.BedwarsRel; +import org.bukkit.metadata.MetadataValue; +import org.bukkit.plugin.Plugin; + +public class TeamJoinMetaDataValue implements MetadataValue { + + private Team team = null; + private boolean teamjoin = true; + + public TeamJoinMetaDataValue(Team team) { + this.team = team; + } + + @Override + public boolean asBoolean() { + return true; + } + + @Override + public byte asByte() { + return this.asBoolean() ? (byte) 1 : (byte) 0; + } + + @Override + public double asDouble() { + return this.asBoolean() ? 1 : 0; + } + + @Override + public float asFloat() { + return this.asBoolean() ? 1F : 0F; + } + + @Override + public int asInt() { + return this.asBoolean() ? 1 : 0; + } + + @Override + public long asLong() { + return this.asBoolean() ? 1 : 0; + } + + @Override + public short asShort() { + return this.asBoolean() ? (short) 1 : (short) 0; + } + + @Override + public String asString() { + return this.asBoolean() ? "true" : "false"; + } + + @Override + public Plugin getOwningPlugin() { + return BedwarsRel.getInstance(); + } + + public Team getTeam() { + return this.team; + } + + @Override + public void invalidate() { + this.teamjoin = false; + } + + @Override + public Object value() { + return this.teamjoin; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/listener/BaseListener.java b/common/src/main/java/io/github/bedwarsrel/listener/BaseListener.java new file mode 100644 index 0000000..27a03b7 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/listener/BaseListener.java @@ -0,0 +1,17 @@ +package io.github.bedwarsrel.listener; + +import io.github.bedwarsrel.BedwarsRel; +import org.bukkit.event.Listener; + +public abstract class BaseListener implements Listener { + + public BaseListener() { + this.registerEvents(); + } + + private void registerEvents() { + BedwarsRel.getInstance().getServer().getPluginManager() + .registerEvents(this, BedwarsRel.getInstance()); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/listener/BlockListener.java b/common/src/main/java/io/github/bedwarsrel/listener/BlockListener.java new file mode 100644 index 0000000..5648813 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/listener/BlockListener.java @@ -0,0 +1,414 @@ +package io.github.bedwarsrel.listener; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.game.Team; +import io.github.bedwarsrel.utils.ChatWriter; +import java.util.List; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.BlockState; +import org.bukkit.block.Sign; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockBurnEvent; +import org.bukkit.event.block.BlockFadeEvent; +import org.bukkit.event.block.BlockFormEvent; +import org.bukkit.event.block.BlockGrowEvent; +import org.bukkit.event.block.BlockIgniteEvent; +import org.bukkit.event.block.BlockIgniteEvent.IgniteCause; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.block.BlockSpreadEvent; +import org.bukkit.event.world.StructureGrowEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class BlockListener extends BaseListener { + + @EventHandler(ignoreCancelled = true) + public void onBlockGrow(BlockGrowEvent grow) { + + Game game = + BedwarsRel.getInstance().getGameManager().getGameByLocation(grow.getBlock().getLocation()); + if (game == null) { + return; + } + + grow.setCancelled(true); + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onBreak(BlockBreakEvent e) { + + Player p = e.getPlayer(); + if (p == null) { + Block block = e.getBlock(); + if (block == null) { + return; + } + + Game game = BedwarsRel.getInstance().getGameManager().getGameByLocation(block.getLocation()); + if (game == null) { + return; + } + + if (game.getState() != GameState.RUNNING) { + return; + } + + e.setCancelled(true); + return; + } + + Game g = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(p); + if (g == null) { + Block breaked = e.getBlock(); + if (!(breaked.getState() instanceof Sign)) { + return; + } + + if (!p.hasPermission("bw.setup") || e.isCancelled()) { + return; + } + + Game game = BedwarsRel.getInstance().getGameManager() + .getGameBySignLocation(breaked.getLocation()); + if (game == null) { + return; + } + + game.removeJoinSign(breaked.getLocation()); + return; + } + + if (g.getState() != GameState.RUNNING && g.getState() != GameState.WAITING) { + return; + } + + if (g.getState() == GameState.WAITING) { + e.setCancelled(true); + return; + } + + if (g.isSpectator(p)) { + e.setCancelled(true); + return; + } + + Material targetMaterial = g.getTargetMaterial(); + if (e.getBlock().getType() == targetMaterial) { + e.setCancelled(true); + + g.handleDestroyTargetMaterial(p, e.getBlock()); + return; + } + + Block breakedBlock = e.getBlock(); + + if (!g.getRegion().isPlacedBlock(breakedBlock)) { + if (breakedBlock == null) { + e.setCancelled(true); + return; + } + + if (BedwarsRel.getInstance().isBreakableType(breakedBlock.getType())) { + g.getRegion().addBreakedBlock(breakedBlock); + e.setCancelled(false); + return; + } + + e.setCancelled(true); + } else { + if (!BedwarsRel.getInstance().getBooleanConfig("friendlybreak", true)) { + Team playerTeam = g.getPlayerTeam(p); + for (Player player : playerTeam.getPlayers()) { + if (player.equals(p)) { + continue; + } + + if (player.getLocation().getBlock().getRelative(BlockFace.DOWN).equals(e.getBlock())) { + p.sendMessage( + ChatWriter + .pluginMessage(ChatColor.RED + BedwarsRel._l(p, "ingame.no-friendlybreak"))); + e.setCancelled(true); + return; + } + } + } + + if (e.getBlock().getType() == Material.ENDER_CHEST) { + for (Team team : g.getTeams().values()) { + List teamChests = team.getChests(); + if (teamChests.contains(breakedBlock)) { + team.removeChest(breakedBlock); + for (Player aPlayer : team.getPlayers()) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage( + ChatWriter.pluginMessage(BedwarsRel._l(aPlayer, "ingame.teamchestdestroy"))); + } + } + break; + } + } + + // Drop ender chest + ItemStack enderChest = new ItemStack(Material.ENDER_CHEST, 1); + ItemMeta meta = enderChest.getItemMeta(); + meta.setDisplayName(BedwarsRel._l("ingame.teamchest")); + enderChest.setItemMeta(meta); + + e.setCancelled(true); + breakedBlock.getDrops().clear(); + breakedBlock.setType(Material.AIR); + breakedBlock.getWorld().dropItemNaturally(breakedBlock.getLocation(), enderChest); + } + + for (ItemStack drop : breakedBlock.getDrops()) { + if (!drop.getType().equals(breakedBlock.getType())) { + breakedBlock.getDrops().remove(drop); + breakedBlock.setType(Material.AIR); + break; + } + } + + g.getRegion().removePlacedBlock(breakedBlock); + } + } + + @EventHandler(priority = EventPriority.HIGH) + public void onBurn(BlockBurnEvent bbe) { + Block block = bbe.getBlock(); + if (block == null) { + return; + } + + Game game = BedwarsRel.getInstance().getGameManager().getGameByLocation(block.getLocation()); + if (game == null) { + return; + } + + if (game.getState() == GameState.STOPPED) { + return; + } + + bbe.setCancelled(true); + } + + @EventHandler(ignoreCancelled = true) + public void onFade(BlockFadeEvent e) { + + Game game = BedwarsRel.getInstance().getGameManager() + .getGameByLocation(e.getBlock().getLocation()); + if (game == null) { + return; + } + + if (game.getState() == GameState.STOPPED) { + return; + } + + if (!game.getRegion().isPlacedBlock(e.getBlock())) { + e.setCancelled(true); + } + } + + @EventHandler(ignoreCancelled = true) + public void onForm(BlockFormEvent form) { + + if (form.getNewState().getType() != Material.SNOW) { + return; + } + + Game game = + BedwarsRel.getInstance().getGameManager().getGameByLocation(form.getBlock().getLocation()); + if (game == null) { + return; + } + + if (game.getState() == GameState.STOPPED) { + return; + } + + form.setCancelled(true); + } + + @EventHandler(ignoreCancelled = true) + public void onIgnite(BlockIgniteEvent ignite) { + + if (ignite.getIgnitingBlock() == null && ignite.getIgnitingEntity() == null) { + return; + } + + Game game = null; + if (ignite.getIgnitingBlock() == null) { + if (ignite.getIgnitingEntity() instanceof Player) { + game = BedwarsRel.getInstance().getGameManager() + .getGameOfPlayer((Player) ignite.getIgnitingEntity()); + } else { + game = BedwarsRel.getInstance().getGameManager() + .getGameByLocation(ignite.getIgnitingEntity().getLocation()); + } + } else { + game = BedwarsRel.getInstance().getGameManager() + .getGameByLocation(ignite.getIgnitingBlock().getLocation()); + } + + if (game == null) { + return; + } + + if (game.getState() == GameState.STOPPED) { + return; + } + + if (ignite.getCause() == IgniteCause.ENDER_CRYSTAL || ignite.getCause() == IgniteCause.LIGHTNING + || ignite.getCause() == IgniteCause.SPREAD) { + ignite.setCancelled(true); + return; + } + + if (ignite.getIgnitingEntity() == null) { + ignite.setCancelled(true); + return; + } + + if (game.getState() == GameState.WAITING) { + return; + } + + if (!game.getRegion().isPlacedBlock(ignite.getIgnitingBlock()) + && ignite.getIgnitingBlock() != null) { + game.getRegion().addPlacedBlock(ignite.getIgnitingBlock(), + ignite.getIgnitingBlock().getState()); + } + } + + @EventHandler(priority = EventPriority.NORMAL) + public void onPlace(BlockPlaceEvent bpe) { + Player player = bpe.getPlayer(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() == GameState.STOPPED) { + return; + } + + if (game.getState() == GameState.WAITING) { + bpe.setCancelled(true); + bpe.setBuild(false); + return; + } + + if (game.getState() == GameState.RUNNING) { + if (game.isSpectator(player)) { + bpe.setCancelled(true); + bpe.setBuild(false); + return; + } + + Block placeBlock = bpe.getBlockPlaced(); + BlockState replacedBlock = bpe.getBlockReplacedState(); + + if (placeBlock.getType() == game.getTargetMaterial()) { + bpe.setCancelled(true); + bpe.setBuild(false); + return; + } + + if (!game.getRegion().isInRegion(placeBlock.getLocation())) { + bpe.setCancelled(true); + bpe.setBuild(false); + return; + } + + if (replacedBlock != null && !BedwarsRel + .getInstance().getBooleanConfig("place-in-liquid", true) + && (replacedBlock.getType().equals(Material.WATER) + || replacedBlock.getType().equals(Material.STATIONARY_WATER) + || replacedBlock.getType().equals(Material.LAVA) + || replacedBlock.getType().equals(Material.STATIONARY_LAVA))) { + bpe.setCancelled(true); + bpe.setBuild(false); + return; + } + + if (replacedBlock != null && placeBlock.getType().equals(Material.WEB) + && (replacedBlock.getType().equals(Material.WATER) + || replacedBlock.getType().equals(Material.STATIONARY_WATER) + || replacedBlock.getType().equals(Material.LAVA) + || replacedBlock.getType().equals(Material.STATIONARY_LAVA))) { + bpe.setCancelled(true); + bpe.setBuild(false); + return; + } + + if (placeBlock.getType() == Material.ENDER_CHEST) { + Team playerTeam = game.getPlayerTeam(player); + if (playerTeam.getInventory() == null) { + playerTeam.createTeamInventory(); + } + + playerTeam.addChest(placeBlock); + } + + if (!bpe.isCancelled()) { + game.getRegion().addPlacedBlock(placeBlock, + (replacedBlock.getType().equals(Material.AIR) ? null : replacedBlock)); + } + } + } + + @EventHandler(ignoreCancelled = true) + public void onSpread(BlockSpreadEvent spread) { + + if (spread.getBlock() == null) { + return; + } + + Game game = + BedwarsRel.getInstance().getGameManager() + .getGameByLocation(spread.getBlock().getLocation()); + if (game == null) { + return; + } + + if (game.getState() != GameState.RUNNING) { + return; + } + + if (spread.getNewState() == null || spread.getSource() == null) { + return; + } + + if (spread.getNewState().getType().equals(Material.FIRE)) { + spread.setCancelled(true); + return; + } + + if (game.getRegion().isPlacedBlock(spread.getSource())) { + game.getRegion().addPlacedBlock(spread.getBlock(), spread.getBlock().getState()); + } else { + game.getRegion().addPlacedUnbreakableBlock(spread.getBlock(), spread.getBlock().getState()); + } + } + + @EventHandler(ignoreCancelled = true) + public void onStructureGrow(StructureGrowEvent grow) { + + Game game = BedwarsRel.getInstance().getGameManager().getGameByLocation(grow.getLocation()); + if (game == null) { + return; + } + + grow.setCancelled(true); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/listener/ChunkListener.java b/common/src/main/java/io/github/bedwarsrel/listener/ChunkListener.java new file mode 100644 index 0000000..20ca11f --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/listener/ChunkListener.java @@ -0,0 +1,28 @@ +package io.github.bedwarsrel.listener; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.world.ChunkUnloadEvent; + +public class ChunkListener implements Listener { + + @EventHandler + public void onUnload(ChunkUnloadEvent unload) { + Game game = BedwarsRel.getInstance().getGameManager() + .getGameByChunkLocation(unload.getChunk().getX(), + unload.getChunk().getZ()); + if (game == null) { + return; + } + + if (game.getState() != GameState.RUNNING) { + return; + } + + unload.setCancelled(true); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/listener/EntityListener.java b/common/src/main/java/io/github/bedwarsrel/listener/EntityListener.java new file mode 100644 index 0000000..482b888 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/listener/EntityListener.java @@ -0,0 +1,331 @@ +package io.github.bedwarsrel.listener; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.game.Team; +import io.github.bedwarsrel.game.TeamJoinMetaDataValue; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.Utils; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.TNTPrimed; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.entity.CreatureSpawnEvent; +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.EntityRegainHealthEvent; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; +import org.bukkit.metadata.MetadataValue; + +public class EntityListener extends BaseListener { + + @EventHandler(priority = EventPriority.HIGHEST) + public void onEntityDamage(EntityDamageEvent ede) { + List canDamageTypes = new ArrayList(); + canDamageTypes.add(EntityType.PLAYER); + + if (BedwarsRel.getInstance().getServer().getPluginManager().isPluginEnabled("AntiAura") + || BedwarsRel.getInstance().getServer().getPluginManager().isPluginEnabled("AAC")) { + canDamageTypes.add(EntityType.SQUID); + } + + if (canDamageTypes.contains(ede.getEntityType())) { + return; + } + + Game game = + BedwarsRel.getInstance().getGameManager().getGameByLocation(ede.getEntity().getLocation()); + if (game == null) { + return; + } + + if (game.getState() == GameState.STOPPED) { + return; + } + + ede.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onEntityDamageByEntity(EntityDamageByEntityEvent ede) { + List canDamageTypes = new ArrayList(); + canDamageTypes.add(EntityType.PLAYER); + + if (BedwarsRel.getInstance().getServer().getPluginManager().isPluginEnabled("AntiAura") + || BedwarsRel.getInstance().getServer().getPluginManager().isPluginEnabled("AAC")) { + canDamageTypes.add(EntityType.SQUID); + } + + if (canDamageTypes.contains(ede.getEntityType())) { + return; + } + + Game game = + BedwarsRel.getInstance().getGameManager().getGameByLocation(ede.getEntity().getLocation()); + if (game == null) { + return; + } + + if (game.getState() == GameState.STOPPED) { + return; + } + + ede.setCancelled(true); + } + + @EventHandler + public void onEntityInteract(EntityInteractEvent event) { + if (!(event.getEntity() instanceof Player)) { + return; + } + + if (event.getBlock().getType() != Material.SOIL + && event.getBlock().getType() != Material.WHEAT) { + return; + } + + Player player = (Player) event.getEntity(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() == GameState.WAITING) { + event.setCancelled(true); + } + } + + @EventHandler + public void onEntitySpawn(CreatureSpawnEvent ese) { + if (BedwarsRel.getInstance().getGameManager() == null) { + return; + } + + if (ese.getLocation() == null) { + return; + } + + if (ese.getLocation().getWorld() == null) { + return; + } + + Game game = BedwarsRel.getInstance().getGameManager().getGameByLocation(ese.getLocation()); + if (game == null) { + return; + } + + if (game.getState() == GameState.STOPPED) { + return; + } + + if (ese.getEntityType().equals(EntityType.CREEPER) + || ese.getEntityType().equals(EntityType.CAVE_SPIDER) + || ese.getEntityType().equals(EntityType.SPIDER) + || ese.getEntityType().equals(EntityType.ZOMBIE) + || ese.getEntityType().equals(EntityType.SKELETON) + || ese.getEntityType().equals(EntityType.SILVERFISH)) { + ese.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onExplodeDestroy(EntityExplodeEvent eev) { + if (eev.isCancelled()) { + return; + } + + if (eev.getEntity() == null) { + return; + } + + if (eev.getEntity().getWorld() == null) { + return; + } + + Game game = + BedwarsRel.getInstance().getGameManager().getGameByLocation(eev.getEntity().getLocation()); + + if (game == null) { + return; + } + + if (game.getState() == GameState.STOPPED) { + return; + } + + Iterator explodeBlocks = eev.blockList().iterator(); + boolean tntDestroyEnabled = + BedwarsRel.getInstance().getBooleanConfig("explodes.destroy-worldblocks", false); + boolean tntDestroyBeds = BedwarsRel + .getInstance().getBooleanConfig("explodes.destroy-beds", false); + + if (!BedwarsRel.getInstance().getBooleanConfig("explodes.drop-blocks", false)) { + eev.setYield(0F); + } + + Material targetMaterial = game.getTargetMaterial(); + while (explodeBlocks.hasNext()) { + Block exploding = explodeBlocks.next(); + if (!game.getRegion().isInRegion(exploding.getLocation())) { + explodeBlocks.remove(); + continue; + } + + if ((!tntDestroyEnabled && !tntDestroyBeds) || (!tntDestroyEnabled && tntDestroyBeds + && exploding.getType() != Material.BED_BLOCK && exploding.getType() != Material.BED)) { + if (!game.getRegion().isPlacedBlock(exploding)) { + if (BedwarsRel.getInstance().isBreakableType(exploding.getType())) { + game.getRegion().addBreakedBlock(exploding); + continue; + } + + explodeBlocks.remove(); + } else { + game.getRegion().removePlacedBlock(exploding); + } + + continue; + } + + if (game.getRegion().isPlacedBlock(exploding)) { + game.getRegion().removePlacedBlock(exploding); + continue; + } + + if (exploding.getType().equals(targetMaterial)) { + if (!tntDestroyBeds) { + explodeBlocks.remove(); + continue; + } + + // only destroyable by tnt + if (!eev.getEntityType().equals(EntityType.PRIMED_TNT) + && !eev.getEntityType().equals(EntityType.MINECART_TNT)) { + explodeBlocks.remove(); + continue; + } + + // when it wasn't player who ignited the tnt + TNTPrimed primedTnt = (TNTPrimed) eev.getEntity(); + if (!(primedTnt.getSource() instanceof Player)) { + explodeBlocks.remove(); + continue; + } + + Player p = (Player) primedTnt.getSource(); + if (!game.handleDestroyTargetMaterial(p, exploding)) { + explodeBlocks.remove(); + continue; + } + } else { + game.getRegion().addBreakedBlock(exploding); + } + } + } + + @EventHandler(priority = EventPriority.HIGH) + public void onInteractEntity(PlayerInteractAtEntityEvent event) { + if (event.getRightClicked() == null) { + return; + } + + Entity entity = event.getRightClicked(); + Player player = event.getPlayer(); + if (!player.hasMetadata("bw-addteamjoin")) { + if (!(entity instanceof LivingEntity)) { + return; + } + + LivingEntity livEntity = (LivingEntity) entity; + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + if (game == null) { + return; + } + + if (game.getState() != GameState.WAITING) { + return; + } + + Team team = game.getTeam(ChatColor.stripColor(livEntity.getCustomName())); + if (team == null) { + return; + } + + game.playerJoinTeam(player, team); + event.setCancelled(true); + return; + } + + List values = player.getMetadata("bw-addteamjoin"); + if (values == null || values.size() == 0) { + return; + } + + event.setCancelled(true); + TeamJoinMetaDataValue value = (TeamJoinMetaDataValue) values.get(0); + if (!((boolean) value.value())) { + return; + } + + if (!(entity instanceof LivingEntity)) { + player.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(player, "errors.entitynotcompatible"))); + return; + } + + LivingEntity living = (LivingEntity) entity; + living.setRemoveWhenFarAway(false); + living.setCanPickupItems(false); + living.setCustomName(value.getTeam().getChatColor() + value.getTeam().getDisplayName()); + living.setCustomNameVisible( + BedwarsRel.getInstance().getBooleanConfig("jointeam-entity.show-name", true)); + + if (living.getType().equals(EntityType.valueOf("ARMOR_STAND"))) { + Utils.equipArmorStand(living, value.getTeam()); + } + + player.removeMetadata("bw-addteamjoin", BedwarsRel.getInstance()); + player.sendMessage(ChatWriter + .pluginMessage( + ChatColor.GREEN + BedwarsRel._l(player, "success.teamjoinadded", ImmutableMap.of("team", + value.getTeam().getChatColor() + value.getTeam().getDisplayName() + + ChatColor.GREEN)))); + } + + @EventHandler(priority = EventPriority.HIGH) + public void onRegainHealth(EntityRegainHealthEvent rhe) { + if (rhe.getEntityType() != EntityType.PLAYER) { + return; + } + + Player player = (Player) rhe.getEntity(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() != GameState.RUNNING) { + return; + } + + if (player.getHealth() >= player.getMaxHealth()) { + game.setPlayerDamager(player, null); + } + } +} diff --git a/common/src/main/java/io/github/bedwarsrel/listener/HangingListener.java b/common/src/main/java/io/github/bedwarsrel/listener/HangingListener.java new file mode 100644 index 0000000..ffc4366 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/listener/HangingListener.java @@ -0,0 +1,22 @@ +package io.github.bedwarsrel.listener; + +import org.bukkit.entity.Hanging; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.hanging.HangingBreakEvent; +import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause; + +public class HangingListener extends BaseListener { + + @EventHandler(priority = EventPriority.HIGHEST) + public void onHangingBreak(HangingBreakEvent event) { + Hanging hanging = event.getEntity(); + if (event.getCause().equals(RemoveCause.OBSTRUCTION)) { + hanging.getLocation().getBlock().breakNaturally(); + event.setCancelled(true); + } else if (event.getCause().equals(RemoveCause.EXPLOSION)) { + event.setCancelled(true); + } + + } +} diff --git a/common/src/main/java/io/github/bedwarsrel/listener/Player19Listener.java b/common/src/main/java/io/github/bedwarsrel/listener/Player19Listener.java new file mode 100644 index 0000000..5447a78 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/listener/Player19Listener.java @@ -0,0 +1,30 @@ +package io.github.bedwarsrel.listener; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.BungeeGameCycle; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerSwapHandItemsEvent; + +public class Player19Listener extends BaseListener { + + @EventHandler + public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) { + Player player = event.getPlayer(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() == GameState.WAITING + || (game.getCycle() instanceof BungeeGameCycle && game.getCycle().isEndGameRunning() + && BedwarsRel.getInstance().getBooleanConfig("bungeecord.endgame-in-lobby", true))) { + event.setCancelled(true); + return; + } + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/listener/PlayerListener.java b/common/src/main/java/io/github/bedwarsrel/listener/PlayerListener.java new file mode 100644 index 0000000..48d9c94 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/listener/PlayerListener.java @@ -0,0 +1,1238 @@ +package io.github.bedwarsrel.listener; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.events.BedwarsOpenShopEvent; +import io.github.bedwarsrel.events.BedwarsPlayerSetNameEvent; +import io.github.bedwarsrel.game.BungeeGameCycle; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.game.Team; +import io.github.bedwarsrel.shop.NewItemShop; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.villager.MerchantCategory; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.Sign; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.entity.FoodLevelChangeEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.inventory.CraftItemEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryOpenEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerBedEnterEvent; +import org.bukkit.event.player.PlayerChangedWorldEvent; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerPickupItemEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.player.PlayerToggleFlightEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.material.Wool; +import org.bukkit.scheduler.BukkitRunnable; + +public class PlayerListener extends BaseListener { + + private String getChatFormat(String format, Team team, boolean isSpectator, boolean all) { + String form = format; + + if (all) { + form = form.replace("$all$", BedwarsRel._l("ingame.all") + ChatColor.RESET); + } + + form = form.replace("$player$", + ((!isSpectator && team != null) ? team.getChatColor() : "") + "%1$s" + ChatColor.RESET); + form = form.replace("$msg$", "%2$s"); + + if (isSpectator) { + form = form.replace("$team$", BedwarsRel._l("ingame.spectator")); + } else if (team != null) { + form = form.replace("$team$", team.getDisplayName() + ChatColor.RESET); + } + + return ChatColor.translateAlternateColorCodes('&', form); + } + + @SuppressWarnings("deprecation") + private void inGameInteractEntity(PlayerInteractEntityEvent iee, Game game, Player player) { + + if (BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_8")) { + if (iee.getPlayer().getItemInHand().getType().equals(Material.MONSTER_EGG) + || iee.getPlayer().getItemInHand().getType().equals(Material.MONSTER_EGGS) + || iee.getPlayer().getItemInHand().getType().equals(Material.DRAGON_EGG)) { + iee.setCancelled(true); + return; + } + } else { + if (iee.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.MONSTER_EGG) + || iee.getPlayer().getInventory().getItemInMainHand().getType() + .equals(Material.MONSTER_EGGS) + || iee.getPlayer().getInventory().getItemInMainHand().getType() + .equals(Material.DRAGON_EGG) + || iee.getPlayer().getInventory().getItemInOffHand().getType() + .equals(Material.MONSTER_EGG) + || iee.getPlayer().getInventory().getItemInOffHand().getType() + .equals(Material.MONSTER_EGGS) + || iee.getPlayer().getInventory().getItemInOffHand().getType() + .equals(Material.DRAGON_EGG)) { + iee.setCancelled(true); + return; + } + } + + if (iee.getRightClicked() != null + && !iee.getRightClicked().getType().equals(EntityType.VILLAGER)) { + List preventClickTypes = + Arrays.asList(EntityType.ITEM_FRAME, EntityType.ARMOR_STAND); + + if (preventClickTypes.contains(iee.getRightClicked().getType())) { + iee.setCancelled(true); + } + + return; + } + + if (game.isSpectator(player)) { + return; + } + + if (!BedwarsRel.getInstance().getBooleanConfig("use-build-in-shop", true)) { + return; + } + + iee.setCancelled(true); + + BedwarsOpenShopEvent openShopEvent = + new BedwarsOpenShopEvent(game, player, game.getItemShopCategories(), iee.getRightClicked()); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(openShopEvent); + + if (openShopEvent.isCancelled()) { + return; + } + + if (game.getPlayerSettings(player).useOldShop()) { + MerchantCategory.openCategorySelection(player, game); + } else { + NewItemShop itemShop = game.getNewItemShop(player); + if (itemShop == null) { + itemShop = game.openNewItemShop(player); + } + + itemShop.setCurrentCategory(null); + itemShop.openCategoryInventory(player); + } + } + + /* + * GAME + */ + + @EventHandler(priority = EventPriority.HIGHEST) + public void onChat(AsyncPlayerChatEvent ce) { + if (ce.isCancelled()) { + return; + } + + Player player = ce.getPlayer(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + boolean seperateGameChat = BedwarsRel + .getInstance().getBooleanConfig("seperate-game-chat", true); + if (!seperateGameChat) { + return; + } + + Iterator recipients = ce.getRecipients().iterator(); + while (recipients.hasNext()) { + Player recipient = recipients.next(); + Game recipientGame = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(recipient); + if (recipientGame != null) { + recipients.remove(); + } + } + return; + } + + if (game.getState() == GameState.STOPPED) { + return; + } + + Team team = game.getPlayerTeam(player); + String message = ce.getMessage(); + boolean isSpectator = game.isSpectator(player); + + String displayName = player.getDisplayName(); + String playerListName = player.getPlayerListName(); + + if (BedwarsRel.getInstance().getBooleanConfig("overwrite-names", false)) { + if (team == null) { + displayName = ChatColor.stripColor(player.getName()); + + playerListName = ChatColor.stripColor(player.getName()); + } else { + displayName = team.getChatColor() + ChatColor.stripColor(player.getName()); + playerListName = team.getChatColor() + ChatColor.stripColor(player.getName()); + } + + } + + if (BedwarsRel.getInstance().getBooleanConfig("teamname-on-tab", false)) { + if (team == null || isSpectator) { + playerListName = ChatColor.stripColor(player.getDisplayName()); + } else { + playerListName = team.getChatColor() + team.getName() + ChatColor.WHITE + " | " + + team.getChatColor() + ChatColor.stripColor(player.getDisplayName()); + } + } + + BedwarsPlayerSetNameEvent playerSetNameEvent = + new BedwarsPlayerSetNameEvent(team, displayName, playerListName, player); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(playerSetNameEvent); + + if (!playerSetNameEvent.isCancelled()) { + player.setDisplayName(playerSetNameEvent.getDisplayName()); + player.setPlayerListName(playerSetNameEvent.getPlayerListName()); + } + + if (game.getState() != GameState.RUNNING && game.getState() == GameState.WAITING) { + String format = null; + if (team == null) { + format = this.getChatFormat( + BedwarsRel.getInstance().getStringConfig("lobby-chatformat", "$player$: $msg$"), null, + false, + true); + } else { + format = this.getChatFormat( + BedwarsRel.getInstance() + .getStringConfig("ingame-chatformat", "<$team$>$player$: $msg$"), + team, false, true); + } + + ce.setFormat(format); + + if (!BedwarsRel.getInstance().getBooleanConfig("seperate-game-chat", true)) { + return; + } + + Iterator recipiens = ce.getRecipients().iterator(); + while (recipiens.hasNext()) { + Player recipient = recipiens.next(); + if (!game.isInGame(recipient)) { + recipiens.remove(); + } + } + + return; + } + + @SuppressWarnings("unchecked") + List toAllPrefixList = (List) BedwarsRel.getInstance().getConfig() + .getList("chat-to-all-prefix", Arrays.asList("@")); + + String toAllPrefix = null; + + for (String oneToAllPrefix : toAllPrefixList) { + if (message.trim().startsWith(oneToAllPrefix)) { + toAllPrefix = oneToAllPrefix; + } + } + + if (toAllPrefix != null || isSpectator || (game.getCycle().isEndGameRunning() + && BedwarsRel.getInstance().getBooleanConfig("global-chat-after-end", true))) { + boolean seperateSpectatorChat = + BedwarsRel.getInstance().getBooleanConfig("seperate-spectator-chat", false); + + message = message.trim(); + String format = null; + if (!isSpectator && !(game.getCycle().isEndGameRunning() + && BedwarsRel.getInstance().getBooleanConfig("global-chat-after-end", true))) { + ce.setMessage(message.substring(toAllPrefix.length(), message.length()).trim()); + format = this + .getChatFormat(BedwarsRel.getInstance().getStringConfig("ingame-chatformat-all", + "[$all$] <$team$>$player$: $msg$"), team, false, true); + } else { + ce.setMessage(message); + format = this.getChatFormat( + BedwarsRel.getInstance() + .getStringConfig("ingame-chatformat", "<$team$>$player$: $msg$"), + team, isSpectator, true); + } + + ce.setFormat(format); + + if (!BedwarsRel.getInstance().isBungee() || seperateSpectatorChat) { + Iterator recipiens = ce.getRecipients().iterator(); + while (recipiens.hasNext()) { + Player recipient = recipiens.next(); + if (!game.isInGame(recipient)) { + recipiens.remove(); + continue; + } + + if (!seperateSpectatorChat || (game.getCycle().isEndGameRunning() + && BedwarsRel.getInstance().getBooleanConfig("global-chat-after-end", true))) { + continue; + } + + if (isSpectator && !game.isSpectator(recipient)) { + recipiens.remove(); + } else if (!isSpectator && game.isSpectator(recipient)) { + recipiens.remove(); + } + } + } + } else { + message = message.trim(); + ce.setMessage(message); + ce.setFormat(this.getChatFormat( + BedwarsRel.getInstance().getStringConfig("ingame-chatformat", "<$team$>$player$: $msg$"), + team, + false, false)); + + Iterator recipiens = ce.getRecipients().iterator(); + while (recipiens.hasNext()) { + Player recipient = recipiens.next(); + if (!game.isInGame(recipient) || !team.isInTeam(recipient)) { + recipiens.remove(); + } + } + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onCommand(PlayerCommandPreprocessEvent pcpe) { + Player player = pcpe.getPlayer(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() == GameState.STOPPED) { + return; + } + + String message = pcpe.getMessage(); + if (!message.startsWith("/bw")) { + + for (String allowed : BedwarsRel.getInstance().getAllowedCommands()) { + if (!allowed.startsWith("/")) { + allowed = "/" + allowed; + } + + if (message.startsWith(allowed.trim())) { + return; + } + } + + if (player.hasPermission("bw.cmd")) { + return; + } + + pcpe.setCancelled(true); + return; + } + } + + @EventHandler + public void onCraft(CraftItemEvent cie) { + Player player = (Player) cie.getWhoClicked(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() == GameState.STOPPED) { + return; + } + + if (BedwarsRel.getInstance().getBooleanConfig("allow-crafting", false)) { + return; + } + + cie.setCancelled(true); + } + + @EventHandler + public void onDamage(EntityDamageEvent ede) { + if (!(ede.getEntity() instanceof Player)) { + if (!(ede instanceof EntityDamageByEntityEvent)) { + return; + } + + EntityDamageByEntityEvent edbee = (EntityDamageByEntityEvent) ede; + if (edbee.getDamager() == null || !(edbee.getDamager() instanceof Player)) { + return; + } + + Player player = (Player) edbee.getDamager(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() == GameState.WAITING) { + ede.setCancelled(true); + } + + return; + } + + Player p = (Player) ede.getEntity(); + Game g = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(p); + if (g == null) { + return; + } + + if (g.getState() == GameState.STOPPED) { + return; + } + + if (g.getState() == GameState.RUNNING) { + if (g.isSpectator(p)) { + ede.setCancelled(true); + return; + } + + if (g.isProtected(p) && ede.getCause() != DamageCause.VOID) { + ede.setCancelled(true); + return; + } + + if (BedwarsRel.getInstance().getBooleanConfig("die-on-void", false) + && ede.getCause() == DamageCause.VOID) { + ede.setCancelled(true); + p.setHealth(0); + return; + } + + if (ede instanceof EntityDamageByEntityEvent) { + EntityDamageByEntityEvent edbee = (EntityDamageByEntityEvent) ede; + + if (edbee.getDamager() instanceof Player) { + Player damager = (Player) edbee.getDamager(); + if (g.isSpectator(damager)) { + ede.setCancelled(true); + return; + } + + g.setPlayerDamager(p, damager); + } else if (edbee.getDamager().getType().equals(EntityType.ARROW)) { + Arrow arrow = (Arrow) edbee.getDamager(); + if (arrow.getShooter() instanceof Player) { + Player shooter = (Player) arrow.getShooter(); + if (g.isSpectator(shooter)) { + ede.setCancelled(true); + return; + } + + g.setPlayerDamager(p, (Player) arrow.getShooter()); + } + } + } + + if (!g.getCycle().isEndGameRunning()) { + return; + } else if (ede.getCause() == DamageCause.VOID) { + p.teleport(g.getPlayerTeam(p).getSpawnLocation()); + } + } else if (g.getState() == GameState.WAITING + && ede.getCause() == EntityDamageEvent.DamageCause.VOID) { + p.teleport(g.getLobby()); + } + + ede.setCancelled(true); + } + + @EventHandler + public void onDrop(PlayerDropItemEvent die) { + Player p = die.getPlayer(); + Game g = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(p); + if (g == null) { + return; + } + + if (g.getState() != GameState.WAITING) { + if (g.isSpectator(p)) { + die.setCancelled(true); + } + + return; + } + + die.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onFly(PlayerToggleFlightEvent tfe) { + Player p = tfe.getPlayer(); + + Game g = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(p); + if (g == null) { + return; + } + + if (g.getState() == GameState.STOPPED) { + return; + } + + if (g.getState() == GameState.RUNNING && g.isSpectator(p)) { + tfe.setCancelled(false); + return; + } + + tfe.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGH) + public void onHunger(FoodLevelChangeEvent flce) { + if (!(flce.getEntity() instanceof Player)) { + return; + } + + Player player = (Player) flce.getEntity(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() == GameState.RUNNING) { + if (game.isSpectator(player) || game.getCycle().isEndGameRunning()) { + flce.setCancelled(true); + return; + } + + flce.setCancelled(false); + return; + } + + flce.setCancelled(true); + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + private void onIngameInventoryClick(InventoryClickEvent ice, Player player, Game game) { + String expectedName = BedwarsRel._l(player, "ingame.shop.name"); + String actualName = ice.getInventory().getName(); + + if (!actualName.equals(expectedName)) { + if (game.isSpectator(player) + || (game.getCycle() instanceof BungeeGameCycle && game.getCycle().isEndGameRunning() + && BedwarsRel.getInstance().getBooleanConfig("bungeecord.endgame-in-lobby", true))) { + + ItemStack clickedStack = ice.getCurrentItem(); + if (clickedStack == null) { + return; + } + + if (ice.getInventory().getName().equals(BedwarsRel._l(player, "ingame.spectator"))) { + ice.setCancelled(true); + if (!clickedStack.getType().equals(Material.SKULL_ITEM)) { + return; + } + + SkullMeta meta = (SkullMeta) clickedStack.getItemMeta(); + Player pl = BedwarsRel.getInstance().getServer().getPlayer(meta.getOwner()); + if (pl == null) { + return; + } + + if (!game.isInGame(pl)) { + return; + } + + player.teleport(pl); + player.closeInventory(); + return; + } + + Material clickedMat = ice.getCurrentItem().getType(); + if (clickedMat.equals(Material.SLIME_BALL)) { + game.playerLeave(player, false); + } + + if (clickedMat.equals(Material.COMPASS)) { + game.openSpectatorCompass(player); + } + } + return; + } + + ice.setCancelled(true); + ItemStack clickedStack = ice.getCurrentItem(); + + if (clickedStack == null) { + return; + } + + if (game.getPlayerSettings(player).useOldShop()) { + try { + if (clickedStack.getType() == Material.SNOW_BALL) { + game.getPlayerSettings(player).setUseOldShop(false); + + // open new shop + NewItemShop itemShop = game.openNewItemShop(player); + itemShop.setCurrentCategory(null); + itemShop.openCategoryInventory(player); + return; + } + + MerchantCategory cat = game.getItemShopCategories().get(clickedStack.getType()); + if (cat == null) { + return; + } + + Class clazz = Class.forName("io.github.bedwarsrel.com." + + BedwarsRel.getInstance().getCurrentVersion().toLowerCase() + ".VillagerItemShop"); + Object villagerItemShop = + clazz.getDeclaredConstructor(Game.class, Player.class, MerchantCategory.class) + .newInstance(game, player, cat); + + Method openTrade = clazz.getDeclaredMethod("openTrading", new Class[]{}); + openTrade.invoke(villagerItemShop, new Object[]{}); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + ex.printStackTrace(); + } + } else { + game.getNewItemShop(player).handleInventoryClick(ice, game, player); + } + } + + @EventHandler + public void onInteractEntity(PlayerInteractEntityEvent iee) { + Player p = iee.getPlayer(); + Game g = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(p); + if (g == null) { + return; + } + + if (g.getState() == GameState.WAITING) { + iee.setCancelled(true); + return; + } + + if (g.getState() == GameState.RUNNING) { + this.inGameInteractEntity(iee, g, p); + } + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent ice) { + Player player = (Player) ice.getWhoClicked(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + // 处理村民交易界面的命令物品 + InventoryType invType = ice.getInventory().getType(); + if (invType == InventoryType.MERCHANT || invType.toString().contains("MERCHANT")) { + this.onMerchantInventoryClick(ice, player, game); + return; + } + + if (game.getState() == GameState.WAITING) { + this.onLobbyInventoryClick(ice, player, game); + } + + if (game.getState() == GameState.RUNNING) { + this.onIngameInventoryClick(ice, player, game); + } + } + + @SuppressWarnings({"unchecked", "rawtypes"}) + private void onMerchantInventoryClick(InventoryClickEvent ice, Player player, Game game) { + // 只在点击结果槽时处理 (槽位2是结果槽) + if (ice.getRawSlot() != 2) { + return; + } + + // 检查是否是旧版商店的命令物品 + try { + String className = "io.github.bedwarsrel.com." + + BedwarsRel.getInstance().getCurrentVersion().toLowerCase() + ".VillagerItemShop"; + + Class villagerItemShopClass = Class.forName(className); + java.lang.reflect.Field commandItemsField = villagerItemShopClass.getDeclaredField("playerCommandItems"); + + java.util.Map>> commandMap = + (java.util.Map>>) commandItemsField.get(null); + + if (commandMap == null || !commandMap.containsKey(player)) { + return; + } + + // 获取结果物品 + ItemStack result = ice.getCurrentItem(); + + if (result == null || result.getType() == Material.AIR) { + return; + } + + // 查找对应的命令 + java.util.Map> playerCommands = commandMap.get(player); + + java.util.List commands = null; + + for (java.util.Map.Entry> entry : playerCommands.entrySet()) { + ItemStack key = entry.getKey(); + + // 比较物品类型和显示名 + if (key.getType() == result.getType()) { + ItemMeta keyMeta = key.getItemMeta(); + ItemMeta resultMeta = result.getItemMeta(); + String keyName = keyMeta != null ? keyMeta.getDisplayName() : null; + String resultName = resultMeta != null ? resultMeta.getDisplayName() : null; + + if ((keyName == null && resultName == null) || + (keyName != null && keyName.equals(resultName))) { + commands = entry.getValue(); + break; + } + } + } + + if (commands == null || commands.isEmpty()) { + return; + } + + // 取消事件,防止获得物品 + ice.setCancelled(true); + player.closeInventory(); + + // 扣除材料 + org.bukkit.inventory.MerchantInventory merchantInv = (org.bukkit.inventory.MerchantInventory) ice.getInventory(); + ItemStack item1 = merchantInv.getItem(0); + ItemStack item2 = merchantInv.getItem(1); + + if (item1 != null && item1.getType() != Material.AIR) { + item1.setAmount(0); + merchantInv.setItem(0, item1); + } + if (item2 != null && item2.getType() != Material.AIR) { + item2.setAmount(0); + merchantInv.setItem(1, item2); + } + + // 执行命令 + for (String cmd : commands) { + String formattedCmd = cmd.replace("%player%", player.getName()); + BedwarsRel.getInstance().getServer().dispatchCommand( + BedwarsRel.getInstance().getServer().getConsoleSender(), formattedCmd); + } + + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + /* + * LOBBY & GAME + */ + + @EventHandler(priority = EventPriority.HIGHEST) + public void onJoin(PlayerJoinEvent je) { + + final Player player = je.getPlayer(); + + if (BedwarsRel.getInstance().statisticsEnabled()) { + BedwarsRel.getInstance().getPlayerStatisticManager().loadStatistic(player.getUniqueId()); + } + + ArrayList games = BedwarsRel.getInstance().getGameManager().getGames(); + if (games.size() == 0) { + return; + } + + if (!BedwarsRel.getInstance().isBungee()) { + Game game = BedwarsRel.getInstance().getGameManager().getGameByLocation(player.getLocation()); + + if (game != null) { + if (game.getMainLobby() != null) { + player.teleport(game.getMainLobby()); + } else { + game.playerJoins(player); + } + return; + } + } + + if (BedwarsRel.getInstance().isBungee()) { + je.setJoinMessage(null); + final Game firstGame = games.get(0); + + if (firstGame.getState() == GameState.STOPPED && player.hasPermission("bw.setup")) { + return; + } + + firstGame.playerJoins(player); + + } + } + + private void onLobbyInventoryClick(InventoryClickEvent ice, Player player, Game game) { + Inventory inv = ice.getInventory(); + ItemStack clickedStack = ice.getCurrentItem(); + + if (!inv.getTitle().equals(BedwarsRel._l(player, "lobby.chooseteam"))) { + ice.setCancelled(true); + return; + } + + if (clickedStack == null) { + ice.setCancelled(true); + return; + } + + if (clickedStack.getType() != Material.WOOL) { + ice.setCancelled(true); + return; + } + + ice.setCancelled(true); + Wool wool = (Wool) clickedStack.getData(); + Team team = game.getTeamByDyeColor(wool.getColor()); + if (team == null) { + return; + } + + game.playerJoinTeam(player, team); + player.closeInventory(); + } + + @EventHandler + public void onPickup(PlayerPickupItemEvent ppie) { + Player player = ppie.getPlayer(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + game = BedwarsRel.getInstance().getGameManager().getGameByLocation(player.getLocation()); + if (game == null) { + return; + } + } + + if (game.getState() != GameState.WAITING && game.isInGame(player)) { + return; + } + + ppie.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerDie(PlayerDeathEvent pde) { + final Player player = pde.getEntity(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() == GameState.RUNNING) { + pde.setDroppedExp(0); + pde.setDeathMessage(null); + + if (!BedwarsRel.getInstance().getBooleanConfig("player-drops", false)) { + pde.getDrops().clear(); + } + + try { + if (!BedwarsRel.getInstance().isSpigot()) { + Class clazz = null; + try { + clazz = Class.forName("io.github.bedwarsrel.com." + + BedwarsRel.getInstance().getCurrentVersion().toLowerCase() + + ".PerformRespawnRunnable"); + } catch (ClassNotFoundException ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + clazz = Class + .forName("io.github.bedwarsrel.com.fallback.PerformRespawnRunnable"); + } + + BukkitRunnable respawnRunnable = + (BukkitRunnable) clazz.getDeclaredConstructor(Player.class).newInstance(player); + respawnRunnable.runTaskLater(BedwarsRel.getInstance(), 20L); + } else { + new BukkitRunnable() { + + @Override + public void run() { + player.spigot().respawn(); + } + }.runTaskLater(BedwarsRel.getInstance(), 20L); + } + + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + } + + pde.setKeepInventory( + BedwarsRel.getInstance().getBooleanConfig("keep-inventory-on-death", false)); + + Player killer = player.getKiller(); + if (killer == null) { + killer = game.getPlayerDamager(player); + } + + game.getCycle().onPlayerDies(player, killer); + } + } + + /* + * LOBBY + */ + + @EventHandler + public void onPlayerInteract(PlayerInteractEvent pie) { + Player player = pie.getPlayer(); + Game g = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (g == null) { + if (pie.getAction() != Action.RIGHT_CLICK_BLOCK + && pie.getAction() != Action.RIGHT_CLICK_AIR) { + return; + } + + Block clicked = pie.getClickedBlock(); + + if (clicked == null) { + return; + } + + if (!(clicked.getState() instanceof Sign)) { + return; + } + + Game game = BedwarsRel.getInstance().getGameManager() + .getGameBySignLocation(clicked.getLocation()); + if (game == null) { + return; + } + + if (game.playerJoins(player)) { + player.sendMessage( + ChatWriter.pluginMessage(ChatColor.GREEN + BedwarsRel._l(player, "success.joined"))); + } + return; + } + + if (g.getState() == GameState.STOPPED) { + return; + } + + Material interactingMaterial = pie.getMaterial(); + Block clickedBlock = pie.getClickedBlock(); + + if (g.getState() == GameState.RUNNING) { + if (pie.getAction() == Action.PHYSICAL && clickedBlock != null + && (clickedBlock.getType() == Material.WHEAT + || clickedBlock.getType() == Material.SOIL)) { + pie.setCancelled(true); + return; + } + + if (pie.getAction() != Action.RIGHT_CLICK_BLOCK + && pie.getAction() != Action.RIGHT_CLICK_AIR) { + return; + } + + if (clickedBlock != null && clickedBlock.getType() == Material.LEVER && !g.isSpectator(player) + && pie.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (!g.getRegion().isPlacedUnbreakableBlock(clickedBlock)) { + g.getRegion().addPlacedUnbreakableBlock(clickedBlock, clickedBlock.getState()); + } + return; + } + + if (g.isSpectator(player) + || (g.getCycle() instanceof BungeeGameCycle && g.getCycle().isEndGameRunning() + && BedwarsRel.getInstance().getBooleanConfig("bungeecord.endgame-in-lobby", true))) { + if (interactingMaterial == Material.SLIME_BALL) { + g.playerLeave(player, false); + return; + } + + if (interactingMaterial == Material.COMPASS) { + g.openSpectatorCompass(player); + pie.setCancelled(true); + return; + } + } + + // Spectators want to block + if (clickedBlock != null) { + try { + GameMode.valueOf("SPECTATOR"); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + for (Player p : g.getFreePlayers()) { + if (!g.getRegion().isInRegion(p.getLocation())) { + continue; + } + + if (pie.getClickedBlock().getLocation().distance(p.getLocation()) < 2) { + Location oldLocation = p.getLocation(); + if (oldLocation.getY() >= pie.getClickedBlock().getLocation().getY()) { + oldLocation.setY(oldLocation.getY() + 2); + } else { + oldLocation.setY(oldLocation.getY() - 2); + } + + p.teleport(oldLocation); + } + } + } + } + + if (clickedBlock != null && clickedBlock.getType() == Material.ENDER_CHEST + && !g.isSpectator(player)) { + pie.setCancelled(true); + + Block chest = pie.getClickedBlock(); + Team chestTeam = g.getTeamOfEnderChest(chest); + Team playerTeam = g.getPlayerTeam(player); + + if (chestTeam == null) { + return; + } + + if (chestTeam.equals(playerTeam)) { + player.openInventory(chestTeam.getInventory()); + } else { + player.sendMessage( + ChatWriter + .pluginMessage(ChatColor.RED + BedwarsRel._l(player, "ingame.noturteamchest"))); + } + + return; + } + + return; + } else if (g.getState() == GameState.WAITING) { + if (interactingMaterial == null) { + pie.setCancelled(true); + return; + } + + if (pie.getAction() == Action.PHYSICAL) { + if (clickedBlock != null && (clickedBlock.getType() == Material.WHEAT + || clickedBlock.getType() == Material.SOIL)) { + pie.setCancelled(true); + return; + } + } + + if (pie.getAction() != Action.RIGHT_CLICK_BLOCK + && pie.getAction() != Action.RIGHT_CLICK_AIR) { + return; + } + + switch (interactingMaterial) { + case BED: + pie.setCancelled(true); + if (!g.isAutobalanceEnabled()) { + g.getPlayerStorage(player).openTeamSelection(g); + } + + break; + case DIAMOND: + pie.setCancelled(true); + if (player.isOp() || player.hasPermission("bw.setup")) { + g.start(player); + } else if (player.hasPermission("bw.vip.forcestart")) { + if (g.isStartable()) { + g.start(player); + } else { + if (!g.hasEnoughPlayers()) { + player.sendMessage(ChatWriter.pluginMessage( + ChatColor.RED + BedwarsRel._l(player, "lobby.cancelstart.not_enough_players"))); + } else if (!g.hasEnoughTeams()) { + player.sendMessage(ChatWriter + .pluginMessage( + ChatColor.RED + BedwarsRel + ._l(player, "lobby.cancelstart.not_enough_teams"))); + } + } + } + break; + case EMERALD: + pie.setCancelled(true); + if ((player.isOp() || player.hasPermission("bw.setup") + || player.hasPermission("bw.vip.reducecountdown")) + && g.getGameLobbyCountdown().getCounter() > g.getGameLobbyCountdown() + .getLobbytimeWhenFull()) { + g.getGameLobbyCountdown().setCounter(g.getGameLobbyCountdown().getLobbytimeWhenFull()); + } + break; + case SLIME_BALL: + pie.setCancelled(true); + g.playerLeave(player, false); + break; + case LEATHER_CHESTPLATE: + pie.setCancelled(true); + player.updateInventory(); + break; + default: + break; + } + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerRespawn(PlayerRespawnEvent pre) { + Player p = pre.getPlayer(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(p); + + if (game == null) { + return; + } + + if (game.getState() == GameState.RUNNING) { + game.getCycle().onPlayerRespawn(pre, p); + return; + } + + if (game.getState() == GameState.WAITING) { + pre.setRespawnLocation(game.getLobby()); + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onQuit(PlayerQuitEvent pqe) { + Player player = pqe.getPlayer(); + + if (BedwarsRel.getInstance().isBungee()) { + pqe.setQuitMessage(null); + } + + // Remove holographs + if (BedwarsRel.getInstance().statisticsEnabled()) { + BedwarsRel.getInstance().getPlayerStatisticManager().unloadStatistic(player); + } + + Game g = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (g == null) { + return; + } + + g.playerLeave(player, false); + } + + @EventHandler + public void onSleep(PlayerBedEnterEvent bee) { + + Player p = bee.getPlayer(); + + Game g = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(p); + if (g == null) { + return; + } + + if (g.getState() == GameState.STOPPED) { + return; + } + + bee.setCancelled(true); + } + + @EventHandler + public void onSwitchWorld(PlayerChangedWorldEvent change) { + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(change.getPlayer()); + if (game != null) { + if (game.getState() == GameState.RUNNING) { + if (!game.getCycle().isEndGameRunning()) { + if (!game.getPlayerSettings(change.getPlayer()).isTeleporting()) { + game.playerLeave(change.getPlayer(), false); + } else { + game.getPlayerSettings(change.getPlayer()).setTeleporting(false); + } + } + } else if (game.getState() == GameState.WAITING) { + if (!game.getPlayerSettings(change.getPlayer()).isTeleporting()) { + game.playerLeave(change.getPlayer(), false); + } else { + game.getPlayerSettings(change.getPlayer()).setTeleporting(false); + } + } + } + } + + @EventHandler + public void openInventory(InventoryOpenEvent ioe) { + if (!(ioe.getPlayer() instanceof Player)) { + return; + } + + Player player = (Player) ioe.getPlayer(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() != GameState.RUNNING) { + return; + } + + if (ioe.getInventory().getType() == InventoryType.ENCHANTING + || ioe.getInventory().getType() == InventoryType.BREWING + || (ioe.getInventory().getType() == InventoryType.CRAFTING + && !BedwarsRel.getInstance().getBooleanConfig("allow-crafting", false))) { + ioe.setCancelled(true); + return; + } else if (ioe.getInventory().getType() == InventoryType.CRAFTING + && BedwarsRel.getInstance().getBooleanConfig("allow-crafting", false)) { + return; + } + + if (game.isSpectator(player)) { + if (ioe.getInventory().getName().equals(BedwarsRel._l(player, "ingame.spectator"))) { + return; + } + + ioe.setCancelled(true); + } + + if (ioe.getInventory().getHolder() == null) { + return; + } + + if (game.getRegion().getInventories().contains(ioe.getInventory())) { + return; + } + + game.getRegion().addInventory(ioe.getInventory()); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/listener/PlayerSpigotListener.java b/common/src/main/java/io/github/bedwarsrel/listener/PlayerSpigotListener.java new file mode 100644 index 0000000..b156bc8 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/listener/PlayerSpigotListener.java @@ -0,0 +1,29 @@ +package io.github.bedwarsrel.listener; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import java.util.ArrayList; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.spigotmc.event.player.PlayerSpawnLocationEvent; + +public class PlayerSpigotListener extends BaseListener { + + @EventHandler(priority = EventPriority.HIGH) + public void onPlayerSpawnLocation(PlayerSpawnLocationEvent event) { + if (BedwarsRel.getInstance().isBungee()) { + Player player = event.getPlayer(); + + ArrayList games = BedwarsRel.getInstance().getGameManager().getGames(); + if (games.size() == 0) { + return; + } + + Game firstGame = games.get(0); + + event.setSpawnLocation(firstGame.getPlayerTeleportLocation(player)); + } + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/listener/ServerListener.java b/common/src/main/java/io/github/bedwarsrel/listener/ServerListener.java new file mode 100644 index 0000000..7c085f2 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/listener/ServerListener.java @@ -0,0 +1,101 @@ +package io.github.bedwarsrel.listener; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import org.bukkit.ChatColor; +import org.bukkit.event.EventHandler; +import org.bukkit.event.server.ServerListPingEvent; + +public class ServerListener extends BaseListener { + + private String getCurrentPlayersString(Game game) { + int currentPlayers = 0; + if (game.getState() == GameState.RUNNING) { + currentPlayers = game.getTeamPlayers().size(); + } else if (game.getState() == GameState.WAITING) { + currentPlayers = game.getPlayers().size(); + } else { + currentPlayers = 0; + } + + return String.valueOf(currentPlayers); + } + + private String getMaxPlayersString(Game game) { + int maxPlayers = game.getMaxPlayers(); + return String.valueOf(maxPlayers); + } + + private String getStatus(Game game) { + String status = null; + if (game.getState() == GameState.WAITING && game.isFull()) { + status = ChatColor.RED + BedwarsRel._l("sign.gamestate.full"); + } else { + status = BedwarsRel._l("sign.gamestate." + game.getState().toString().toLowerCase()); + } + + return status; + } + + @EventHandler + public void onServerListPing(ServerListPingEvent slpe) { + // Only enabled on bungeecord + if (!BedwarsRel.getInstance().isBungee()) { + return; + } + if (BedwarsRel.getInstance().getGameManager() == null + || BedwarsRel.getInstance().getGameManager().getGames() == null + || BedwarsRel.getInstance().getGameManager().getGames().size() == 0) { + return; + } + + Game game = BedwarsRel.getInstance().getGameManager().getGames().get(0); + + if (game == null) { + return; + } + + switch (game.getState()) { + case STOPPED: + slpe.setMotd(replacePlaceholder(game, ChatColor.translateAlternateColorCodes('&', + BedwarsRel.getInstance().getConfig().getString("bungeecord.motds.stopped")))); + break; + case WAITING: + if (game.isFull()) { + slpe.setMotd(replacePlaceholder(game, ChatColor.translateAlternateColorCodes('&', + BedwarsRel.getInstance().getConfig().getString("bungeecord.motds.full")))); + } else { + slpe.setMotd(replacePlaceholder(game, ChatColor.translateAlternateColorCodes('&', + BedwarsRel.getInstance().getConfig().getString("bungeecord.motds.lobby")))); + } + + break; + case RUNNING: + slpe.setMotd(replacePlaceholder(game, ChatColor.translateAlternateColorCodes('&', + BedwarsRel.getInstance().getConfig().getString("bungeecord.motds.running")))); + break; + default: + slpe.setMotd(ChatColor.RED + "INVALID GAME STATE!"); + break; + } + } + + private String replacePlaceholder(Game game, String line) { + String finalLine = line; + + finalLine = finalLine.replace("$title$", BedwarsRel._l("sign.firstline")); + finalLine = finalLine.replace("$gamename$", game.getName()); + if (game.getRegion().getName() != null) { + finalLine = finalLine.replace("$regionname$", game.getRegion().getName()); + } else { + finalLine = finalLine.replace("$regionname$", game.getName()); + } + finalLine = finalLine.replace("$maxplayers$", getMaxPlayersString(game)); + finalLine = finalLine.replace("$currentplayers$", getCurrentPlayersString(game)); + finalLine = finalLine.replace("$status$", getStatus(game)); + + return finalLine; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/listener/SignListener.java b/common/src/main/java/io/github/bedwarsrel/listener/SignListener.java new file mode 100644 index 0000000..70c0e08 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/listener/SignListener.java @@ -0,0 +1,49 @@ +package io.github.bedwarsrel.listener; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.SignChangeEvent; + +public class SignListener extends BaseListener { + + @EventHandler + public void onSignChange(SignChangeEvent sce) { + String firstLine = sce.getLine(0).trim(); + if (!"[bw]".equals(firstLine)) { + return; + } + + Player player = sce.getPlayer(); + if (!player.hasPermission("bw.setup")) { + return; + } + + String gameName = sce.getLine(1).trim(); + Game game = BedwarsRel.getInstance().getGameManager().getGame(gameName); + + if (game == null) { + String notfound = BedwarsRel._l("errors.gamenotfoundsimple"); + if (notfound.length() > 16) { + String[] splitted = notfound.split(" ", 4); + for (int i = 0; i < splitted.length; i++) { + sce.setLine(i, ChatColor.RED + splitted[i]); + } + } else { + sce.setLine(0, ChatColor.RED + notfound); + sce.setLine(1, ""); + sce.setLine(2, ""); + sce.setLine(3, ""); + } + + return; + } + + sce.setCancelled(true); + game.addJoinSign(sce.getBlock().getLocation()); + game.updateSigns(); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/listener/WeatherListener.java b/common/src/main/java/io/github/bedwarsrel/listener/WeatherListener.java new file mode 100644 index 0000000..249646c --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/listener/WeatherListener.java @@ -0,0 +1,32 @@ +package io.github.bedwarsrel.listener; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import java.util.List; +import org.bukkit.event.EventHandler; +import org.bukkit.event.weather.WeatherChangeEvent; + +public class WeatherListener extends BaseListener { + + @EventHandler + public void onWeatherEvent(WeatherChangeEvent we) { + if (we.isCancelled()) { + return; + } + + List games = BedwarsRel.getInstance().getGameManager().getGamesByWorld(we.getWorld()); + + if (games.size() == 0) { + return; + } + + for (Game game : games) { + if (game.getState() != GameState.STOPPED) { + we.setCancelled(true); + break; + } + } + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/localization/LocalizationConfig.java b/common/src/main/java/io/github/bedwarsrel/localization/LocalizationConfig.java new file mode 100644 index 0000000..a16baaa --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/localization/LocalizationConfig.java @@ -0,0 +1,120 @@ +package io.github.bedwarsrel.localization; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.utils.ChatWriter; +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.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Map; +import org.bukkit.ChatColor; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; + +public class LocalizationConfig extends YamlConfiguration { + + private String locale; + + public LocalizationConfig(String locale) { + this.locale = locale; + this.loadLocale(); + } + + @Override + public Object get(String path) { + return this.getString(path); + } + + public Object get(String path, Map params) { + return this.getFormatString(path, params); + } + + public String getFormatString(String path, Map params) { + String str = this.getString(path); + for (String key : params.keySet()) { + str = str.replace("$" + key.toLowerCase() + "$", params.get(key)); + } + + return ChatColor.translateAlternateColorCodes('&', str); + } + + @SuppressWarnings("unchecked") + public String getPlayerLocale(Player player) { + try { + Method getHandleMethod = BedwarsRel.getInstance().getCraftBukkitClass("entity.CraftPlayer") + .getMethod("getHandle", new Class[]{}); + getHandleMethod.setAccessible(true); + Object nmsPlayer = getHandleMethod.invoke(player, new Object[]{}); + + Field localeField = nmsPlayer.getClass().getDeclaredField("locale"); + localeField.setAccessible(true); + return localeField.get(nmsPlayer).toString().split("_")[0].toLowerCase(); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + return BedwarsRel.getInstance().getFallbackLocale(); + } + } + + @Override + public String getString(String path) { + if (super.get(path) == null) { + BedwarsRel.getInstance().getServer().getConsoleSender() + .sendMessage(ChatWriter + .pluginMessage(ChatColor.GOLD + "No translation found for: \"" + path + "\"")); + return "LOCALE_NOT_FOUND"; + } + + return ChatColor.translateAlternateColorCodes('&', super.getString(path)); + } + + public void loadLocale() { + File locFile = + new File( + BedwarsRel.getInstance().getDataFolder().getPath() + "/locale/" + this.locale + ".yml"); + BufferedReader reader = null; + InputStream inputStream = null; + if (locFile.exists()) { + try { + inputStream = new FileInputStream(locFile); + } catch (FileNotFoundException e) { + // NO ERROR + } + BedwarsRel.getInstance().getServer().getConsoleSender().sendMessage(ChatWriter + .pluginMessage(ChatColor.GOLD + "Using your custom locale \"" + this.locale + "\".")); + } else { + if (inputStream == null) { + inputStream = BedwarsRel.getInstance().getResource("locale/" + this.locale + ".yml"); + } + if (inputStream == null) { + BedwarsRel.getInstance().getServer().getConsoleSender() + .sendMessage(ChatWriter.pluginMessage(ChatColor.GOLD + "The locale \"" + this.locale + + "\" defined in your config is not available. Using fallback locale: " + + BedwarsRel.getInstance().getFallbackLocale())); + inputStream = BedwarsRel.getInstance() + .getResource("locale/" + BedwarsRel.getInstance().getFallbackLocale() + ".yml"); + } + } + try { + reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); + this.load(reader); + } catch (Exception e) { + BedwarsRel.getInstance().getServer().getConsoleSender().sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + "Failed to load localization language!")); + return; + } finally { + if (reader != null) { + try { + reader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/shop/NewItemShop.java b/common/src/main/java/io/github/bedwarsrel/shop/NewItemShop.java new file mode 100644 index 0000000..f89e4b9 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/shop/NewItemShop.java @@ -0,0 +1,605 @@ +package io.github.bedwarsrel.shop; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.SoundMachine; +import io.github.bedwarsrel.utils.Utils; +import io.github.bedwarsrel.villager.MerchantCategory; +import io.github.bedwarsrel.villager.VillagerTrade; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map.Entry; +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.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.PotionMeta; + +public class NewItemShop { + + private List categories = null; + private MerchantCategory currentCategory = null; + + public NewItemShop(List categories) { + this.categories = categories; + } + + @SuppressWarnings("deprecation") + private void addCategoriesToInventory(Inventory inventory, Player player, Game game) { + for (MerchantCategory category : this.categories) { + + if (category.getMaterial() == null) { + BedwarsRel.getInstance().getServer().getConsoleSender() + .sendMessage(ChatWriter.pluginMessage(ChatColor.RED + + "Careful: Not supported material in shop category '" + category.getName() + "'")); + continue; + } + + if (player != null && !player.hasPermission(category.getPermission())) { + continue; + } + + ItemStack is = new ItemStack(category.getMaterial(), 1); + ItemMeta im = is.getItemMeta(); + + if (Utils.isColorable(is)) { + is.setDurability(game.getPlayerTeam(player).getColor().getDyeColor().getWoolData()); + } + if (this.currentCategory != null && this.currentCategory.equals(category)) { + im.addEnchant(Enchantment.DAMAGE_ALL, 1, true); + im.addItemFlags(ItemFlag.HIDE_ENCHANTS); + } + + im.setDisplayName(category.getName()); + im.setLore(category.getLores()); + im.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_POTION_EFFECTS); + is.setItemMeta(im); + + inventory.addItem(is); + } + + } + + @SuppressWarnings("unchecked") + private boolean buyItem(VillagerTrade trade, ItemStack item, Player player, Game game) { + PlayerInventory inventory = player.getInventory(); + boolean success = true; + + int item1ToPay = trade.getItem1().getAmount(); + Iterator stackIterator = inventory.all(trade.getItem1().getType()).entrySet().iterator(); + + int firstItem1 = inventory.first(trade.getItem1()); + if (firstItem1 > -1) { + inventory.clear(firstItem1); + } else { + // pay + while (stackIterator.hasNext()) { + Entry entry = + (Entry) stackIterator.next(); + ItemStack stack = (ItemStack) entry.getValue(); + + int endAmount = stack.getAmount() - item1ToPay; + if (endAmount < 0) { + endAmount = 0; + } + + item1ToPay = item1ToPay - stack.getAmount(); + stack.setAmount(endAmount); + inventory.setItem(entry.getKey(), stack); + + if (item1ToPay <= 0) { + break; + } + } + } + + if (trade.getItem2() != null) { + int item2ToPay = trade.getItem2().getAmount(); + stackIterator = inventory.all(trade.getItem2().getType()).entrySet().iterator(); + + int firstItem2 = inventory.first(trade.getItem2()); + if (firstItem2 > -1) { + inventory.clear(firstItem2); + } else { + // pay item2 + while (stackIterator.hasNext()) { + Entry entry = + (Entry) stackIterator.next(); + ItemStack stack = (ItemStack) entry.getValue(); + + int endAmount = stack.getAmount() - item2ToPay; + if (endAmount < 0) { + endAmount = 0; + } + + item2ToPay = item2ToPay - stack.getAmount(); + stack.setAmount(endAmount); + inventory.setItem(entry.getKey(), stack); + + if (item2ToPay <= 0) { + break; + } + } + } + } + + if (trade.hasCommands()) { + BedwarsRel.getInstance().getServer().getConsoleSender().sendMessage( + ChatColor.GREEN + "[BW-Shop] 准备执行 " + trade.getCommands().size() + " 条命令,玩家: " + player.getName()); + for (String command : trade.getCommands()) { + String formattedCommand = command.replace("%player%", player.getName()); + BedwarsRel.getInstance().getServer().getConsoleSender().sendMessage( + ChatColor.GREEN + "[BW-Shop] 正在推送到控制台: " + formattedCommand); + boolean cmdSuccess = Bukkit.dispatchCommand(Bukkit.getConsoleSender(), formattedCommand); + BedwarsRel.getInstance().getServer().getConsoleSender().sendMessage( + ChatColor.GREEN + "[BW-Shop] 命令执行结果: " + (cmdSuccess ? "成功" : "失败")); + } + BedwarsRel.getInstance().getServer().getConsoleSender().sendMessage( + ChatColor.GREEN + "[BW-Shop] 所有命令执行完毕"); + } else { + BedwarsRel.getInstance().getServer().getConsoleSender().sendMessage( + ChatColor.YELLOW + "[BW-Shop] 该物品没有命令,将直接给予物品"); + ItemStack addingItem = item.clone(); + ItemMeta meta = addingItem.getItemMeta(); + List lore = meta.getLore(); + + if (lore.size() > 0) { + lore.remove(lore.size() - 1); + if (trade.getItem2() != null) { + lore.remove(lore.size() - 1); + } + } + + meta.setLore(lore); + addingItem.setItemMeta(meta); + + HashMap notStored = inventory.addItem(addingItem); + if (notStored.size() > 0) { + ItemStack notAddedItem = notStored.get(0); + int removingAmount = addingItem.getAmount() - notAddedItem.getAmount(); + addingItem.setAmount(removingAmount); + inventory.removeItem(addingItem); + + // restore + inventory.addItem(trade.getItem1()); + if (trade.getItem2() != null) { + inventory.addItem(trade.getItem2()); + } + + success = false; + } + } + + player.updateInventory(); + return success; + } + + private void changeToOldShop(Game game, Player player) { + game.getPlayerSettings(player).setUseOldShop(true); + + player.playSound(player.getLocation(), SoundMachine.get("CLICK", "UI_BUTTON_CLICK"), + Float.valueOf("1.0"), Float.valueOf("1.0")); + + // open old shop + MerchantCategory.openCategorySelection(player, game); + } + + private int getBuyInventorySize(int sizeCategories, int sizeOffers) { + return this.getInventorySize(sizeCategories) + this.getInventorySize(sizeOffers); + } + + public List getCategories() { + return this.categories; + } + + private int getCategoriesSize(Player player) { + int size = 0; + for (MerchantCategory cat : this.categories) { + if (cat.getMaterial() == null) { + continue; + } + + if (player != null && !player.hasPermission(cat.getPermission())) { + continue; + } + + size++; + } + + return size; + } + + private MerchantCategory getCategoryByMaterial(Material material) { + for (MerchantCategory category : this.categories) { + if (category.getMaterial() == material) { + return category; + } + } + + return null; + } + + private int getInventorySize(int itemAmount) { + int nom = (itemAmount % 9 == 0) ? 9 : (itemAmount % 9); + return itemAmount + (9 - nom); + } + + private VillagerTrade getTradingItem(MerchantCategory category, ItemStack stack, Game game, + Player player) { + for (VillagerTrade trade : category.getOffers()) { + if (trade.getItem1().getType() == Material.AIR + && trade.getRewardItem().getType() == Material.AIR) { + continue; + } + + // 获取原始奖励物品(不经过toItemStack处理) + ItemStack reward = trade.getRewardItem(); + + // 首先比较类型 + if (reward.getType() != stack.getType()) { + continue; + } + + // 对于药水类特殊处理 + if (reward.getType() == Material.POTION + || (!BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_8") + && (reward.getType().equals(Material.valueOf("TIPPED_ARROW")) + || reward.getType().equals(Material.valueOf("LINGERING_POTION")) + || reward.getType().equals(Material.valueOf("SPLASH_POTION"))))) { + if (BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_8")) { + if (reward.getItemMeta().equals(stack.getItemMeta())) { + return trade; + } + } else { + PotionMeta rewardMeta = (PotionMeta) reward.getItemMeta(); + PotionMeta stackMeta = (PotionMeta) stack.getItemMeta(); + if (rewardMeta.getBasePotionData().equals(stackMeta.getBasePotionData()) && rewardMeta + .getCustomEffects().equals(stackMeta.getCustomEffects())) { + return trade; + } + } + } else { + // 对于普通物品,比较显示名和基础属性 + ItemMeta rewardMeta = reward.getItemMeta(); + ItemMeta stackMeta = stack.getItemMeta(); + + String rewardName = rewardMeta != null ? rewardMeta.getDisplayName() : null; + String stackName = stackMeta != null ? stackMeta.getDisplayName() : null; + + // 比较显示名 + if ((rewardName == null && stackName == null) || + (rewardName != null && rewardName.equals(stackName))) { + // 输出匹配的物品信息 + BedwarsRel.getInstance().getServer().getConsoleSender().sendMessage( + ChatColor.YELLOW + "[BW-Shop] 找到匹配物品: 名称='" + rewardName + "', 类型=" + reward.getType() + + ", 是否有命令=" + trade.hasCommands()); + return trade; + } + } + } + + BedwarsRel.getInstance().getServer().getConsoleSender().sendMessage( + ChatColor.RED + "[BW-Shop] 未找到匹配物品"); + return null; + } + + private void handleBuyInventoryClick(InventoryClickEvent ice, Game game, Player player) { + int sizeCategories = this.getCategoriesSize(player); + List offers = this.currentCategory.getOffers(); + int sizeItems = offers.size(); + int invSizeCategories = this.getInventorySize(sizeCategories); + int totalSize = this.getBuyInventorySize(sizeCategories, sizeItems); + + ItemStack item = ice.getCurrentItem(); + boolean cancel = false; + int bought = 0; + boolean oneStackPerShift = game.getPlayerSettings(player).oneStackPerShift(); + + if (this.currentCategory == null) { + player.closeInventory(); + return; + } + + if (ice.getRawSlot() < invSizeCategories) { + // is category click + ice.setCancelled(true); + + if (item == null) { + return; + } + + if (item.getType().equals(this.currentCategory.getMaterial())) { + // back to default category view + this.currentCategory = null; + this.openCategoryInventory(player); + } else { + // open the clicked buy inventory + this.handleCategoryInventoryClick(ice, game, player); + } + } else if (ice.getRawSlot() < totalSize) { + // its a buying item + ice.setCancelled(true); + + if (item == null || item.getType() == Material.AIR) { + return; + } + + MerchantCategory category = this.currentCategory; + + // 输出点击的物品信息 + ItemMeta itemMeta = item.getItemMeta(); + String itemName = itemMeta != null ? itemMeta.getDisplayName() : "无名称"; + BedwarsRel.getInstance().getServer().getConsoleSender().sendMessage( + ChatColor.AQUA + "[BW-Shop] 玩家点击物品: 名称='" + itemName + "', 类型=" + item.getType()); + + VillagerTrade trade = this.getTradingItem(category, item, game, player); + + if (trade == null) { + BedwarsRel.getInstance().getServer().getConsoleSender().sendMessage( + ChatColor.RED + "[BW-Shop] getTradingItem 返回 null,无法找到对应交易"); + return; + } + + player.playSound(player.getLocation(), SoundMachine.get("ITEM_PICKUP", "ENTITY_ITEM_PICKUP"), + Float.valueOf("1.0"), Float.valueOf("1.0")); + + // enough ressources? + if (!this.hasEnoughRessource(player, trade)) { + player + .sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(player, "errors.notenoughress"))); + return; + } + + if (ice.isShiftClick()) { + while (this.hasEnoughRessource(player, trade) && !cancel) { + cancel = !this.buyItem(trade, ice.getCurrentItem(), player, game); + if (!cancel && oneStackPerShift) { + bought = bought + item.getAmount(); + cancel = ((bought + item.getAmount()) > 64); + } + } + + bought = 0; + } else { + this.buyItem(trade, ice.getCurrentItem(), player, game); + } + } else { + if (ice.isShiftClick()) { + ice.setCancelled(true); + } else { + ice.setCancelled(false); + } + + return; + } + } + + private void handleCategoryInventoryClick(InventoryClickEvent ice, Game game, Player player) { + + int catSize = this.getCategoriesSize(player); + int sizeCategories = this.getInventorySize(catSize) + 9; + int rawSlot = ice.getRawSlot(); + + if (rawSlot >= this.getInventorySize(catSize) && rawSlot < sizeCategories) { + ice.setCancelled(true); + if (ice.getCurrentItem().getType() == Material.SLIME_BALL) { + this.changeToOldShop(game, player); + return; + } + + if (ice.getCurrentItem().getType() == Material.BUCKET) { + game.getPlayerSettings(player).setOneStackPerShift(false); + player.playSound(player.getLocation(), SoundMachine.get("CLICK", "UI_BUTTON_CLICK"), + Float.valueOf("1.0"), Float.valueOf("1.0")); + this.openCategoryInventory(player); + return; + } else if (ice.getCurrentItem().getType() == Material.LAVA_BUCKET) { + game.getPlayerSettings(player).setOneStackPerShift(true); + player.playSound(player.getLocation(), SoundMachine.get("CLICK", "UI_BUTTON_CLICK"), + Float.valueOf("1.0"), Float.valueOf("1.0")); + this.openCategoryInventory(player); + return; + } + + } + + if (rawSlot >= sizeCategories) { + if (ice.isShiftClick()) { + ice.setCancelled(true); + return; + } + + ice.setCancelled(false); + return; + } + + MerchantCategory clickedCategory = this.getCategoryByMaterial(ice.getCurrentItem().getType()); + if (clickedCategory == null) { + if (ice.isShiftClick()) { + ice.setCancelled(true); + return; + } + + ice.setCancelled(false); + return; + } + + this.openBuyInventory(clickedCategory, player, game); + } + + public void handleInventoryClick(InventoryClickEvent ice, Game game, Player player) { + if (!this.hasOpenCategory()) { + this.handleCategoryInventoryClick(ice, game, player); + } else { + this.handleBuyInventoryClick(ice, game, player); + } + } + + private boolean hasEnoughRessource(Player player, VillagerTrade trade) { + ItemStack item1 = trade.getItem1(); + ItemStack item2 = trade.getItem2(); + PlayerInventory inventory = player.getInventory(); + + if (item2 != null) { + if (!inventory.contains(item1.getType(), item1.getAmount()) + || !inventory.contains(item2.getType(), item2.getAmount())) { + return false; + } + } else { + if (!inventory.contains(item1.getType(), item1.getAmount())) { + return false; + } + } + + return true; + } + + public boolean hasOpenCategory() { + return (this.currentCategory != null); + } + + public boolean hasOpenCategory(MerchantCategory category) { + if (this.currentCategory == null) { + return false; + } + + return (this.currentCategory.equals(category)); + } + + private void openBuyInventory(MerchantCategory category, Player player, Game game) { + List offers = category.getOffers(); + int sizeCategories = this.getCategoriesSize(player); + int sizeItems = offers.size(); + int invSize = this.getBuyInventorySize(sizeCategories, sizeItems); + + player.playSound(player.getLocation(), SoundMachine.get("CLICK", "UI_BUTTON_CLICK"), + Float.valueOf("1.0"), Float.valueOf("1.0")); + + this.currentCategory = category; + Inventory buyInventory = Bukkit + .createInventory(player, invSize, BedwarsRel._l(player, "ingame.shop.name")); + this.addCategoriesToInventory(buyInventory, player, game); + + for (int i = 0; i < offers.size(); i++) { + VillagerTrade trade = offers.get(i); + if (trade.getItem1().getType() == Material.AIR + && trade.getRewardItem().getType() == Material.AIR) { + continue; + } + + int slot = (this.getInventorySize(sizeCategories)) + i; + ItemStack tradeStack = this.toItemStack(trade, player, game); + + buyInventory.setItem(slot, tradeStack); + } + + player.openInventory(buyInventory); + } + + public void openCategoryInventory(Player player) { + int catSize = this.getCategoriesSize(player); + int nom = (catSize % 9 == 0) ? 9 : (catSize % 9); + int size = (catSize + (9 - nom)) + 9; + + Inventory inventory = Bukkit.createInventory(player, size, BedwarsRel + ._l(player, "ingame.shop.name")); + + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + this.addCategoriesToInventory(inventory, player, game); + + ItemStack slime = new ItemStack(Material.SLIME_BALL, 1); + ItemMeta slimeMeta = slime.getItemMeta(); + + slimeMeta.setDisplayName(BedwarsRel._l(player, "ingame.shop.oldshop")); + slimeMeta.setLore(new ArrayList()); + slime.setItemMeta(slimeMeta); + ItemStack stack = null; + + if (game != null) { + if (game.getPlayerSettings(player).oneStackPerShift()) { + stack = new ItemStack(Material.BUCKET, 1); + ItemMeta meta = stack.getItemMeta(); + + meta.setDisplayName( + ChatColor.AQUA + BedwarsRel._l(player, "default.currently") + ": " + ChatColor.WHITE + + BedwarsRel._l(player, "ingame.shop.onestackpershift")); + meta.setLore(new ArrayList()); + stack.setItemMeta(meta); + } else { + stack = new ItemStack(Material.LAVA_BUCKET, 1); + ItemMeta meta = stack.getItemMeta(); + + meta.setDisplayName( + ChatColor.AQUA + BedwarsRel._l(player, "default.currently") + ": " + ChatColor.WHITE + + BedwarsRel._l(player, "ingame.shop.fullstackpershift")); + meta.setLore(new ArrayList()); + stack.setItemMeta(meta); + } + + if (stack != null) { + inventory.setItem(size - 4, stack); + } + } + + if (stack == null) { + inventory.setItem(size - 5, slime); + } else { + inventory.setItem(size - 6, slime); + } + + player.openInventory(inventory); + } + + public void setCurrentCategory(MerchantCategory category) { + this.currentCategory = category; + } + + @SuppressWarnings("deprecation") + private ItemStack toItemStack(VillagerTrade trade, Player player, Game game) { + ItemStack tradeStack = trade.getRewardItem().clone(); + Method colorable = Utils.getColorableMethod(tradeStack.getType()); + ItemMeta meta = tradeStack.getItemMeta(); + ItemStack item1 = trade.getItem1(); + ItemStack item2 = trade.getItem2(); + if (Utils.isColorable(tradeStack)) { + tradeStack.setDurability(game.getPlayerTeam(player).getColor().getDyeColor().getWoolData()); + } else if (colorable != null) { + colorable.setAccessible(true); + try { + colorable.invoke(meta, new Object[]{game.getPlayerTeam(player).getColor().getColor()}); + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + } + } + List lores = meta.getLore(); + if (lores == null) { + lores = new ArrayList(); + } + + lores.add(ChatColor.WHITE + String.valueOf(item1.getAmount()) + " " + + item1.getItemMeta().getDisplayName()); + if (item2 != null) { + lores.add(ChatColor.WHITE + String.valueOf(item2.getAmount()) + " " + + item2.getItemMeta().getDisplayName()); + } + + meta.setLore(lores); + tradeStack.setItemMeta(meta); + return tradeStack; + } +} \ No newline at end of file diff --git a/common/src/main/java/io/github/bedwarsrel/shop/Specials/ArrowBlocker.java b/common/src/main/java/io/github/bedwarsrel/shop/Specials/ArrowBlocker.java new file mode 100644 index 0000000..a2982e6 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/shop/Specials/ArrowBlocker.java @@ -0,0 +1,149 @@ +package io.github.bedwarsrel.shop.Specials; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.Utils; +import java.util.ArrayList; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; + +public class ArrowBlocker extends SpecialItem { + + public boolean isActive = false; + private Game game = null; + private int livingTime = 0; + private Player owner = null; + private BukkitTask task = null; + + public ArrowBlocker() { + super(); + + this.game = null; + this.owner = null; + } + + @SuppressWarnings("deprecation") + public void create(Player player, Game game) { + this.game = game; + this.owner = player; + + int protectionTime = BedwarsRel.getInstance() + .getIntConfig("specials.arrow-blocker.protection-time", 10); + int waitTime = BedwarsRel + .getInstance().getIntConfig("specials.arrow-blocker.using-wait-time", 30); + + if (waitTime > 0) { + ArrayList livingBlockers = this.getLivingBlocker(); + if (!livingBlockers.isEmpty()) { + for (ArrowBlocker livingBlocker : livingBlockers) { + int waitLeft = waitTime - livingBlocker.getLivingTime(); + if (waitLeft > 0) { + player.sendMessage( + ChatWriter.pluginMessage(BedwarsRel._l(player, "ingame.specials.arrow-blocker.left", + ImmutableMap.of("time", String.valueOf(waitLeft))))); + return; + } + } + } + } + + ItemStack usedStack = null; + + if (BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_8")) { + usedStack = player.getInventory().getItemInHand(); + usedStack.setAmount(usedStack.getAmount() - 1); + player.getInventory().setItem(player.getInventory().getHeldItemSlot(), usedStack); + } else { + if (player.getInventory().getItemInOffHand().getType() == this.getItemMaterial()) { + usedStack = player.getInventory().getItemInOffHand(); + usedStack.setAmount(usedStack.getAmount() - 1); + player.getInventory().setItemInOffHand(usedStack); + } else if (player.getInventory().getItemInMainHand().getType() == this.getItemMaterial()) { + usedStack = player.getInventory().getItemInMainHand(); + usedStack.setAmount(usedStack.getAmount() - 1); + player.getInventory().setItemInMainHand(usedStack); + } + } + player.updateInventory(); + + player + .sendMessage(ChatWriter.pluginMessage( + BedwarsRel._l(player, "ingame.specials.arrow-blocker.start", + ImmutableMap.of("time", String.valueOf(protectionTime))))); + + if (protectionTime > 0 || waitTime > 0) { + isActive = true; + this.runTask(protectionTime, waitTime, player); + game.addSpecialItem(this); + } + } + + @Override + public Material getActivatedMaterial() { + // not needed + return null; + } + + public Game getGame() { + return this.game; + } + + @Override + public Material getItemMaterial() { + return Utils.getMaterialByConfig("specials.arrow-blocker.item", Material.EYE_OF_ENDER); + } + + private ArrayList getLivingBlocker() { + ArrayList livingBlocker = new ArrayList(); + for (SpecialItem item : game.getSpecialItems()) { + if (item instanceof ArrowBlocker) { + ArrowBlocker blocker = (ArrowBlocker) item; + if (blocker.getOwner().equals(this.getOwner())) { + livingBlocker.add(blocker); + } + } + } + return livingBlocker; + } + + public int getLivingTime() { + return this.livingTime; + } + + public Player getOwner() { + return this.owner; + } + + public void runTask(final int protectionTime, final int waitTime, final Player player) { + this.task = new BukkitRunnable() { + + @Override + public void run() { + ArrowBlocker.this.livingTime++; + + if (protectionTime > 0 && ArrowBlocker.this.livingTime == protectionTime) { + player.sendMessage( + ChatWriter.pluginMessage(BedwarsRel._l(player, "ingame.specials.arrow-blocker.end"))); + isActive = false; + } + + if (ArrowBlocker.this.livingTime >= waitTime + && ArrowBlocker.this.livingTime >= protectionTime) { + ArrowBlocker.this.game.removeRunningTask(this); + ArrowBlocker.this.game.removeSpecialItem(ArrowBlocker.this); + ArrowBlocker.this.task = null; + isActive = false; + this.cancel(); + return; + } + } + }.runTaskTimer(BedwarsRel.getInstance(), 0, 20L); + this.game.addRunningTask(this.task); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/shop/Specials/ArrowBlockerListener.java b/common/src/main/java/io/github/bedwarsrel/shop/Specials/ArrowBlockerListener.java new file mode 100644 index 0000000..5a03a18 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/shop/Specials/ArrowBlockerListener.java @@ -0,0 +1,88 @@ +package io.github.bedwarsrel.shop.Specials; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import org.bukkit.entity.EntityType; +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.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.player.PlayerInteractEvent; + +public class ArrowBlockerListener implements Listener { + + private boolean isBlockerActive(Player player, Game game) { + for (SpecialItem item : game.getSpecialItems()) { + if (item instanceof ArrowBlocker) { + ArrowBlocker blocker = (ArrowBlocker) item; + if (blocker.getOwner().equals(player)) { + if (blocker.isActive) { + return true; + } + } + } + } + return false; + } + + @EventHandler(priority = EventPriority.HIGH) + public void onDamage(EntityDamageEvent ev) { + if (!ev.getCause().equals(DamageCause.PROJECTILE)) { + return; + } + + if (!ev.getEntityType().equals(EntityType.PLAYER)) { + return; + } + Player player = (Player) ev.getEntity(); + + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() != GameState.RUNNING) { + return; + } + + if (!isBlockerActive(player, game)) { + return; + } + + ev.setCancelled(true); + } + + @EventHandler + public void onInteract(PlayerInteractEvent ev) { + if (ev.getAction().equals(Action.LEFT_CLICK_AIR) + || ev.getAction().equals(Action.LEFT_CLICK_BLOCK)) { + return; + } + + Player player = ev.getPlayer(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() != GameState.RUNNING) { + return; + } + + ArrowBlocker blocker = new ArrowBlocker(); + if (!ev.getMaterial().equals(blocker.getItemMaterial())) { + return; + } + + blocker.create(player, game); + ev.setCancelled(true); + player.updateInventory(); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/shop/Specials/ITNTSheep.java b/common/src/main/java/io/github/bedwarsrel/shop/Specials/ITNTSheep.java new file mode 100644 index 0000000..4f5bf71 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/shop/Specials/ITNTSheep.java @@ -0,0 +1,21 @@ +package io.github.bedwarsrel.shop.Specials; + +import org.bukkit.Location; +import org.bukkit.entity.Entity; +import org.bukkit.entity.TNTPrimed; + +public interface ITNTSheep { + + public Location getLocation(); + + public TNTPrimed getTNT(); + + public void setTNT(TNTPrimed tnt); + + public void remove(); + + public void setPassenger(TNTPrimed tnt); + + public void setTNTSource(Entity source); + +} diff --git a/common/src/main/java/io/github/bedwarsrel/shop/Specials/ITNTSheepRegister.java b/common/src/main/java/io/github/bedwarsrel/shop/Specials/ITNTSheepRegister.java new file mode 100644 index 0000000..cfe801c --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/shop/Specials/ITNTSheepRegister.java @@ -0,0 +1,14 @@ +package io.github.bedwarsrel.shop.Specials; + +import org.bukkit.DyeColor; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +public interface ITNTSheepRegister { + + public void registerEntities(int entityId); + + public ITNTSheep spawnCreature(TNTSheep specialItem, Location location, Player owner, + Player target, DyeColor color); + +} diff --git a/common/src/main/java/io/github/bedwarsrel/shop/Specials/MagnetShoe.java b/common/src/main/java/io/github/bedwarsrel/shop/Specials/MagnetShoe.java new file mode 100644 index 0000000..abd4dd4 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/shop/Specials/MagnetShoe.java @@ -0,0 +1,33 @@ +package io.github.bedwarsrel.shop.Specials; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.utils.Utils; +import org.bukkit.Material; + +public class MagnetShoe extends SpecialItem { + + @Override + public Material getActivatedMaterial() { + return null; + } + + @SuppressWarnings("deprecation") + @Override + public Material getItemMaterial() { + String item = BedwarsRel.getInstance() + .getStringConfig("specials.magnetshoe.boots", "IRON_BOOTS"); + Material material = null; + if (Utils.isNumber(item)) { + material = Material.getMaterial(Integer.valueOf(item)); + } else { + material = Material.getMaterial(item); + } + + if (material == null) { + return Material.IRON_BOOTS; + } + + return material; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/shop/Specials/MagnetShoeListener.java b/common/src/main/java/io/github/bedwarsrel/shop/Specials/MagnetShoeListener.java new file mode 100644 index 0000000..30ae09e --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/shop/Specials/MagnetShoeListener.java @@ -0,0 +1,60 @@ +package io.github.bedwarsrel.shop.Specials; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.utils.Utils; +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.EntityDamageByEntityEvent; +import org.bukkit.inventory.ItemStack; + +public class MagnetShoeListener implements Listener { + + @EventHandler(priority = EventPriority.HIGHEST) + public void onDamage(EntityDamageByEntityEvent ev) { + if (ev.isCancelled()) { + return; + } + + if (!(ev.getEntity() instanceof Player)) { + return; + } + + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer((Player) ev.getEntity()); + if (game == null) { + return; + } + + if (game.getState() != GameState.RUNNING) { + return; + } + + Player player = (Player) ev.getEntity(); + ItemStack boots = player.getInventory().getBoots(); + + if (boots == null) { + return; + } + + MagnetShoe shoe = new MagnetShoe(); + if (boots.getType() != shoe.getItemMaterial()) { + return; + } + + if (this.rollKnockbackDice()) { + ev.setCancelled(true); + player.damage(ev.getDamage()); + } + } + + private boolean rollKnockbackDice() { + int target = BedwarsRel.getInstance().getIntConfig("specials.magnetshoe.probability", 75); + int roll = Utils.randInt(0, 100); + + return (roll <= target); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/shop/Specials/ProtectionWall.java b/common/src/main/java/io/github/bedwarsrel/shop/Specials/ProtectionWall.java new file mode 100644 index 0000000..0d61332 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/shop/Specials/ProtectionWall.java @@ -0,0 +1,229 @@ +package io.github.bedwarsrel.shop.Specials; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.Utils; +import java.util.ArrayList; +import java.util.List; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; + +public class ProtectionWall extends SpecialItem { + + private Game game = null; + private int livingTime = 0; + private Player owner = null; + private BukkitTask task = null; + private List wallBlocks = null; + + public ProtectionWall() { + super(); + this.wallBlocks = new ArrayList(); + this.owner = null; + this.game = null; + } + + @SuppressWarnings("deprecation") + public void create(Player player, Game game) { + this.owner = player; + this.game = game; + + int breakTime = BedwarsRel.getInstance().getIntConfig("specials.protection-wall.break-time", 0); + int waitTime = BedwarsRel.getInstance().getIntConfig("specials.protection-wall.wait-time", 20); + int width = BedwarsRel.getInstance().getIntConfig("specials.protection-wall.width", 4); + int height = BedwarsRel.getInstance().getIntConfig("specials.protection-wall.height", 4); + int distance = BedwarsRel.getInstance().getIntConfig("specials.protection-wall.distance", 2); + boolean canBreak = + BedwarsRel.getInstance().getBooleanConfig("specials.protection-wall.can-break", true); + Material blockMaterial = + Utils.getMaterialByConfig("specials.protection-wall.block", Material.SANDSTONE); + + if (width % 2 == 0) { + BedwarsRel.getInstance().getServer().getConsoleSender().sendMessage(ChatWriter.pluginMessage( + "The width of a protection block has to be odd! " + width + " is not an odd number.")); + width = width + 1; + if (width % 2 == 0) { + return; + } + } + + if (player.getEyeLocation().getBlock().getType() != Material.AIR) { + player.sendMessage( + ChatWriter + .pluginMessage( + BedwarsRel._l(player, "ingame.specials.protection-wall.not-usable-here"))); + return; + } + + if (waitTime > 0) { + ArrayList livingWalls = this.getLivingWalls(); + if (!livingWalls.isEmpty()) { + for (ProtectionWall livingWall : livingWalls) { + int waitLeft = waitTime - livingWall.getLivingTime(); + if (waitLeft > 0) { + player.sendMessage( + ChatWriter.pluginMessage( + BedwarsRel._l(player, "ingame.specials.protection-wall.left", + ImmutableMap.of("time", String.valueOf(waitLeft))))); + return; + } + } + } + } + + Location wallLocation = Utils.getDirectionLocation(player.getLocation(), distance); + + ItemStack usedStack = null; + + if (BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_8")) { + usedStack = player.getInventory().getItemInHand(); + usedStack.setAmount(usedStack.getAmount() - 1); + player.getInventory().setItem(player.getInventory().getHeldItemSlot(), usedStack); + } else { + if (player.getInventory().getItemInOffHand().getType() == this.getItemMaterial()) { + usedStack = player.getInventory().getItemInOffHand(); + usedStack.setAmount(usedStack.getAmount() - 1); + player.getInventory().setItemInOffHand(usedStack); + } else if (player.getInventory().getItemInMainHand().getType() == this.getItemMaterial()) { + usedStack = player.getInventory().getItemInMainHand(); + usedStack.setAmount(usedStack.getAmount() - 1); + player.getInventory().setItemInMainHand(usedStack); + } + } + player.updateInventory(); + + BlockFace face = Utils.getCardinalDirection(player.getLocation()); + int widthStart = (int) Math.floor(((double) width) / 2.0); + + for (int w = widthStart * (-1); w < width - widthStart; w++) { + for (int h = 0; h < height; h++) { + Location wallBlock = wallLocation.clone(); + + switch (face) { + case SOUTH: + case NORTH: + case SELF: + wallBlock.add(0, h, w); + break; + case WEST: + case EAST: + wallBlock.add(w, h, 0); + break; + case SOUTH_EAST: + wallBlock.add(w, h, w); + break; + case SOUTH_WEST: + wallBlock.add(w, h, w * (-1)); + break; + case NORTH_EAST: + wallBlock.add(w * (-1), h, w); + break; + case NORTH_WEST: + wallBlock.add(w * (-1), h, w * (-1)); + break; + default: + wallBlock = null; + break; + } + + if (wallBlock == null) { + continue; + } + + Block block = wallBlock.getBlock(); + if (!block.getType().equals(Material.AIR)) { + continue; + } + + block.setType(blockMaterial); + if (!canBreak) { + game.getRegion().addPlacedUnbreakableBlock(wallBlock.getBlock(), null); + } else { + game.getRegion().addPlacedBlock(wallBlock.getBlock(), null); + } + this.wallBlocks.add(block); + } + } + + if (breakTime > 0 || waitTime > 0) { + this.createTask(breakTime, waitTime); + game.addSpecialItem(this); + } + } + + private void createTask(final int breakTime, final int waitTime) { + this.task = new BukkitRunnable() { + + @Override + public void run() { + ProtectionWall.this.livingTime++; + + if (breakTime > 0 && ProtectionWall.this.livingTime == breakTime) { + for (Block block : ProtectionWall.this.wallBlocks) { + block.getChunk().load(true); + block.setType(Material.AIR); + ProtectionWall.this.game.getRegion().removePlacedUnbreakableBlock(block); + } + } + + if (ProtectionWall.this.livingTime >= waitTime + && ProtectionWall.this.livingTime >= breakTime) { + ProtectionWall.this.game.removeRunningTask(this); + ProtectionWall.this.game.removeSpecialItem(ProtectionWall.this); + ProtectionWall.this.task = null; + this.cancel(); + return; + } + } + }.runTaskTimer(BedwarsRel.getInstance(), 20L, 20L); + this.game.addRunningTask(this.task); + } + + @Override + public Material getActivatedMaterial() { + return null; + } + + public Game getGame() { + return this.game; + } + + @Override + public Material getItemMaterial() { + return Utils.getMaterialByConfig("specials.protection-wall.item", Material.BRICK); + } + + public int getLivingTime() { + return this.livingTime; + } + + private ArrayList getLivingWalls() { + ArrayList livingWalls = new ArrayList(); + for (SpecialItem item : game.getSpecialItems()) { + if (item instanceof ProtectionWall) { + ProtectionWall wall = (ProtectionWall) item; + if (wall.getOwner().equals(this.getOwner())) { + livingWalls.add(wall); + } + } + } + return livingWalls; + } + + public Player getOwner() { + return this.owner; + } + + public List getWallBlocks() { + return this.wallBlocks; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/shop/Specials/ProtectionWallListener.java b/common/src/main/java/io/github/bedwarsrel/shop/Specials/ProtectionWallListener.java new file mode 100644 index 0000000..f4f326f --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/shop/Specials/ProtectionWallListener.java @@ -0,0 +1,46 @@ +package io.github.bedwarsrel.shop.Specials; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +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; + +public class ProtectionWallListener implements Listener { + + @EventHandler(priority = EventPriority.HIGHEST) + public void onInteract(PlayerInteractEvent interact) { + if (interact.getAction().equals(Action.LEFT_CLICK_AIR) + || interact.getAction().equals(Action.LEFT_CLICK_BLOCK)) { + return; + } + + if (interact.getMaterial() == null) { + return; + } + + ProtectionWall wall = new ProtectionWall(); + if (interact.getMaterial() != wall.getItemMaterial()) { + return; + } + + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(interact.getPlayer()); + if (game == null) { + return; + } + + if (game.getState() != GameState.RUNNING) { + return; + } + + if (game.isSpectator(interact.getPlayer())) { + return; + } + + wall.create(interact.getPlayer(), game); + interact.setCancelled(true); + } +} diff --git a/common/src/main/java/io/github/bedwarsrel/shop/Specials/RescuePlatform.java b/common/src/main/java/io/github/bedwarsrel/shop/Specials/RescuePlatform.java new file mode 100644 index 0000000..ce98ee9 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/shop/Specials/RescuePlatform.java @@ -0,0 +1,195 @@ +package io.github.bedwarsrel.shop.Specials; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.Team; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.Utils; +import java.util.ArrayList; +import java.util.List; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; + +public class RescuePlatform extends SpecialItem { + + private Game game = null; + private int livingTime = 0; + private Player owner = null; + private List platformBlocks = null; + private BukkitTask task = null; + + public RescuePlatform() { + super(); + + this.platformBlocks = new ArrayList(); + this.game = null; + this.owner = null; + } + + public void addPlatformBlock(Block block) { + this.platformBlocks.add(block); + } + + @SuppressWarnings("deprecation") + public void create(Player player, Game game) { + this.game = game; + this.owner = player; + + int breakTime = BedwarsRel.getInstance() + .getIntConfig("specials.rescue-platform.break-time", 10); + int waitTime = BedwarsRel + .getInstance().getIntConfig("specials.rescue-platform.using-wait-time", 20); + boolean canBreak = + BedwarsRel.getInstance().getBooleanConfig("specials.rescue-platform.can-break", false); + Material configMaterial = + Utils.getMaterialByConfig("specials.rescue-platform.block", Material.STAINED_GLASS); + + if (waitTime > 0) { + ArrayList livingPlatforms = this.getLivingPlatforms(); + if (!livingPlatforms.isEmpty()) { + for (RescuePlatform livingPlatform : livingPlatforms) { + int waitLeft = waitTime - livingPlatform.getLivingTime(); + if (waitLeft > 0) { + player.sendMessage( + ChatWriter.pluginMessage( + BedwarsRel._l(player, "ingame.specials.rescue-platform.left", + ImmutableMap.of("time", String.valueOf(waitLeft))))); + return; + } + } + } + } + + if (player.getLocation().getBlock().getRelative(BlockFace.DOWN).getType() != Material.AIR) { + player.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel._l(player, "errors.notinair"))); + return; + } + + Location mid = player.getLocation().clone(); + mid.setY(mid.getY() - 1.0D); + + Team team = game.getPlayerTeam(player); + + ItemStack usedStack = null; + + if (BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_8")) { + usedStack = player.getInventory().getItemInHand(); + usedStack.setAmount(usedStack.getAmount() - 1); + player.getInventory().setItem(player.getInventory().getHeldItemSlot(), usedStack); + } else { + if (player.getInventory().getItemInOffHand().getType() == this.getItemMaterial()) { + usedStack = player.getInventory().getItemInOffHand(); + usedStack.setAmount(usedStack.getAmount() - 1); + player.getInventory().setItemInOffHand(usedStack); + } else if (player.getInventory().getItemInMainHand().getType() == this.getItemMaterial()) { + usedStack = player.getInventory().getItemInMainHand(); + usedStack.setAmount(usedStack.getAmount() - 1); + player.getInventory().setItemInMainHand(usedStack); + } + } + player.updateInventory(); + + for (BlockFace face : BlockFace.values()) { + if (face.equals(BlockFace.DOWN) || face.equals(BlockFace.UP)) { + continue; + } + + Block placed = mid.getBlock().getRelative(face); + if (placed.getType() != Material.AIR) { + continue; + } + + placed.setType(configMaterial); + if (configMaterial.equals(Material.STAINED_GLASS) || configMaterial.equals(Material.WOOL) + || configMaterial.equals(Material.STAINED_CLAY)) { + placed.setData(team.getColor().getDyeColor().getWoolData()); + } + + if (!canBreak) { + game.getRegion().addPlacedUnbreakableBlock(placed, null); + } else { + game.getRegion().addPlacedBlock(placed, null); + } + + this.addPlatformBlock(placed); + } + if (breakTime > 0 || waitTime > 0) { + this.runTask(breakTime, waitTime); + game.addSpecialItem(this); + } + } + + @Override + public Material getActivatedMaterial() { + // not needed + return null; + } + + public Game getGame() { + return this.game; + } + + @Override + public Material getItemMaterial() { + return Utils.getMaterialByConfig("specials.rescue-platform.item", Material.BLAZE_ROD); + } + + private ArrayList getLivingPlatforms() { + ArrayList livingPlatforms = new ArrayList(); + for (SpecialItem item : game.getSpecialItems()) { + if (item instanceof RescuePlatform) { + RescuePlatform rescuePlatform = (RescuePlatform) item; + if (rescuePlatform.getOwner().equals(this.getOwner())) { + livingPlatforms.add(rescuePlatform); + } + } + } + return livingPlatforms; + } + + public int getLivingTime() { + return this.livingTime; + } + + public Player getOwner() { + return this.owner; + } + + public void runTask(final int breakTime, final int waitTime) { + this.task = new BukkitRunnable() { + + @Override + public void run() { + RescuePlatform.this.livingTime++; + + if (breakTime > 0 && RescuePlatform.this.livingTime == breakTime) { + for (Block block : RescuePlatform.this.platformBlocks) { + block.getChunk().load(true); + block.setType(Material.AIR); + RescuePlatform.this.game.getRegion().removePlacedUnbreakableBlock(block); + } + } + + if (RescuePlatform.this.livingTime >= waitTime + && RescuePlatform.this.livingTime >= breakTime) { + RescuePlatform.this.game.removeRunningTask(this); + RescuePlatform.this.game.removeSpecialItem(RescuePlatform.this); + RescuePlatform.this.task = null; + this.cancel(); + return; + } + } + }.runTaskTimer(BedwarsRel.getInstance(), 20L, 20L); + this.game.addRunningTask(this.task); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/shop/Specials/RescuePlatformListener.java b/common/src/main/java/io/github/bedwarsrel/shop/Specials/RescuePlatformListener.java new file mode 100644 index 0000000..955a0b4 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/shop/Specials/RescuePlatformListener.java @@ -0,0 +1,40 @@ +package io.github.bedwarsrel.shop.Specials; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; + +public class RescuePlatformListener implements Listener { + + @EventHandler + public void onInteract(PlayerInteractEvent ev) { + if (ev.getAction().equals(Action.LEFT_CLICK_AIR) + || ev.getAction().equals(Action.LEFT_CLICK_BLOCK)) { + return; + } + + Player player = ev.getPlayer(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() != GameState.RUNNING) { + return; + } + + RescuePlatform platform = new RescuePlatform(); + if (!ev.getMaterial().equals(platform.getItemMaterial())) { + return; + } + + platform.create(player, game); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/shop/Specials/SpecialItem.java b/common/src/main/java/io/github/bedwarsrel/shop/Specials/SpecialItem.java new file mode 100644 index 0000000..f02c64d --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/shop/Specials/SpecialItem.java @@ -0,0 +1,51 @@ +package io.github.bedwarsrel.shop.Specials; + +import io.github.bedwarsrel.BedwarsRel; +import java.util.ArrayList; +import java.util.List; +import org.bukkit.Material; + +public abstract class SpecialItem { + + private static List> availableSpecials = + new ArrayList>(); + + public static List> getSpecials() { + return SpecialItem.availableSpecials; + } + + public static void loadSpecials() { + SpecialItem.availableSpecials.add(RescuePlatform.class); + SpecialItem.availableSpecials.add(Trap.class); + SpecialItem.availableSpecials.add(MagnetShoe.class); + SpecialItem.availableSpecials.add(ProtectionWall.class); + SpecialItem.availableSpecials.add(WarpPowder.class); + SpecialItem.availableSpecials.add(TNTSheep.class); + SpecialItem.availableSpecials.add(Tracker.class); + SpecialItem.availableSpecials.add(ArrowBlocker.class); + BedwarsRel.getInstance().getServer().getPluginManager() + .registerEvents(new RescuePlatformListener(), + BedwarsRel.getInstance()); + BedwarsRel.getInstance().getServer().getPluginManager().registerEvents(new TrapListener(), + BedwarsRel.getInstance()); + BedwarsRel.getInstance().getServer().getPluginManager().registerEvents(new MagnetShoeListener(), + BedwarsRel.getInstance()); + BedwarsRel.getInstance().getServer().getPluginManager() + .registerEvents(new ProtectionWallListener(), + BedwarsRel.getInstance()); + BedwarsRel.getInstance().getServer().getPluginManager().registerEvents(new WarpPowderListener(), + BedwarsRel.getInstance()); + BedwarsRel.getInstance().getServer().getPluginManager().registerEvents(new TNTSheepListener(), + BedwarsRel.getInstance()); + BedwarsRel.getInstance().getServer().getPluginManager().registerEvents(new TrackerListener(), + BedwarsRel.getInstance()); + BedwarsRel.getInstance().getServer().getPluginManager() + .registerEvents(new ArrowBlockerListener(), + BedwarsRel.getInstance()); + } + + public abstract Material getActivatedMaterial(); + + public abstract Material getItemMaterial(); + +} diff --git a/common/src/main/java/io/github/bedwarsrel/shop/Specials/TNTSheep.java b/common/src/main/java/io/github/bedwarsrel/shop/Specials/TNTSheep.java new file mode 100644 index 0000000..ed5faa0 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/shop/Specials/TNTSheep.java @@ -0,0 +1,240 @@ +package io.github.bedwarsrel.shop.Specials; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.events.BedwarsUseTNTSheepEvent; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.game.Team; +import io.github.bedwarsrel.utils.ChatWriter; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.entity.TNTPrimed; +import org.bukkit.inventory.ItemStack; +import org.bukkit.material.SpawnEgg; +import org.bukkit.scheduler.BukkitRunnable; + +public class TNTSheep extends SpecialItem { + + private Game game = null; + private Player player = null; + private ITNTSheep sheep = null; + + private Player findTargetPlayer(Player player) { + Player foundPlayer = null; + + if (game.getPlayers().size() == 1) { + foundPlayer = player; + } else { + double distance = Double.MAX_VALUE; + + Team playerTeam = this.game.getPlayerTeam(player); + + ArrayList possibleTargets = new ArrayList(); + possibleTargets.addAll(this.game.getTeamPlayers()); + possibleTargets.removeAll(playerTeam.getPlayers()); + + for (Player p : possibleTargets) { + if (player.getWorld() != p.getWorld()) { + continue; + } + double dist = player.getLocation().distance(p.getLocation()); + if (dist < distance) { + foundPlayer = p; + distance = dist; + } + } + } + return foundPlayer; + } + + @Override + public Material getActivatedMaterial() { + return null; + } + + public int getEntityTypeId() { + return 91; + } + + public Game getGame() { + return this.game; + } + + public void setGame(Game game) { + this.game = game; + } + + @Override + public Material getItemMaterial() { + return Material.MONSTER_EGG; + } + + public Player getPlayer() { + return this.player; + } + + public void setPlayer(Player player) { + this.player = player; + } + + public ITNTSheep getSheep() { + return this.sheep; + } + + @SuppressWarnings("deprecation") + public void run(Location startLocation) { + + ItemStack usedStack = null; + + if (BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_8")) { + usedStack = player.getInventory().getItemInHand(); + if (((SpawnEgg) usedStack.getData()).getSpawnedType() != EntityType.SHEEP) { + return; + } + usedStack.setAmount(usedStack.getAmount() - 1); + player.getInventory().setItem(player.getInventory().getHeldItemSlot(), usedStack); + } else { + if (player.getInventory().getItemInOffHand().getType() == this.getItemMaterial()) { + usedStack = player.getInventory().getItemInOffHand(); + usedStack.setAmount(usedStack.getAmount() - 1); + player.getInventory().setItemInOffHand(usedStack); + } else if (player.getInventory().getItemInMainHand().getType() == this.getItemMaterial()) { + usedStack = player.getInventory().getItemInMainHand(); + usedStack.setAmount(usedStack.getAmount() - 1); + player.getInventory().setItemInMainHand(usedStack); + } + } + player.updateInventory(); + + final Team playerTeam = this.game.getPlayerTeam(this.player); + Player targetPlayer = this.findTargetPlayer(this.player); + if (targetPlayer == null) { + this.player.sendMessage(ChatWriter + .pluginMessage( + ChatColor.RED + BedwarsRel + ._l(this.player, "ingame.specials.tntsheep.no-target-found"))); + return; + } + + BedwarsUseTNTSheepEvent event = + new BedwarsUseTNTSheepEvent(this.game, this.player, targetPlayer, startLocation); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(event); + + if (event.isCancelled()) { + return; + } + + final Player target = event.getTargetPlayer(); + final Location start = event.getStartLocation(); + + // as task + new BukkitRunnable() { + + @Override + public void run() { + final TNTSheep that = TNTSheep.this; + + try { + // register entity + Class tntRegisterClass = BedwarsRel.getInstance() + .getVersionRelatedClass("TNTSheepRegister"); + ITNTSheepRegister register = (ITNTSheepRegister) tntRegisterClass.newInstance(); + TNTSheep.this.sheep = register.spawnCreature(that, start, TNTSheep.this.player, target, + playerTeam.getColor().getDyeColor()); + + new BukkitRunnable() { + + @Override + public void run() { + that.getGame().getRegion() + .removeRemovingEntity(that.getSheep().getTNT().getVehicle()); + that.getGame().getRegion().removeRemovingEntity(that.getSheep().getTNT()); + } + }.runTaskLater(BedwarsRel.getInstance(), + (long) (( + BedwarsRel.getInstance().getConfig().getDouble("specials.tntsheep.fuse-time", 8.0) + * 20) - 5)); + + new BukkitRunnable() { + + @Override + public void run() { + that.getSheep().getTNT().remove(); + that.getSheep().remove(); + that.getGame().removeSpecialItem(that); + } + }.runTaskLater(BedwarsRel.getInstance(), + (long) (( + BedwarsRel.getInstance().getConfig().getDouble("specials.tntsheep.fuse-time", 8.0) + * 20) + 13)); + + TNTSheep.this.game.addSpecialItem(that); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + ex.printStackTrace(); + } + } + }.runTask(BedwarsRel.getInstance()); + } + + public void updateTNT() { + new BukkitRunnable() { + + @Override + public void run() { + final TNTSheep that = TNTSheep.this; + + if (that.game.isStopping() || that.game.getState() != GameState.RUNNING) { + return; + } + + if (that.sheep == null) { + return; + } + + if (that.sheep.getTNT() == null) { + return; + } + + TNTPrimed old = that.sheep.getTNT(); + final int fuse = old.getFuseTicks(); + + if (fuse <= 0) { + return; + } + + final Entity source = old.getSource(); + final Location oldLoc = old.getLocation(); + final float yield = old.getYield(); + old.leaveVehicle(); + old.remove(); + + new BukkitRunnable() { + + @Override + public void run() { + TNTPrimed primed = (TNTPrimed) that.game.getRegion().getWorld().spawnEntity(oldLoc, + EntityType.PRIMED_TNT); + primed.setFuseTicks(fuse); + primed.setYield(yield); + primed.setIsIncendiary(false); + that.sheep.setPassenger(primed); + that.sheep.setTNT(primed); + that.sheep.setTNTSource(source); + + if (primed.getFuseTicks() >= 60) { + that.updateTNT(); + } + } + }.runTaskLater(BedwarsRel.getInstance(), 3L); + } + + }.runTaskLater(BedwarsRel.getInstance(), 60L); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/shop/Specials/TNTSheepListener.java b/common/src/main/java/io/github/bedwarsrel/shop/Specials/TNTSheepListener.java new file mode 100644 index 0000000..bca749f --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/shop/Specials/TNTSheepListener.java @@ -0,0 +1,171 @@ +package io.github.bedwarsrel.shop.Specials; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.game.Team; +import io.github.bedwarsrel.utils.Utils; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Player; +import org.bukkit.entity.TNTPrimed; +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.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; + +public class TNTSheepListener implements Listener { + + public TNTSheepListener() { + try { + // register entities + Class tntRegisterClass = BedwarsRel.getInstance() + .getVersionRelatedClass("TNTSheepRegister"); + ITNTSheepRegister register = (ITNTSheepRegister) tntRegisterClass.newInstance(); + register.registerEntities( + BedwarsRel.getInstance().getIntConfig("specials.tntsheep.entity-id", 91)); + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onDamageEntity(EntityDamageByEntityEvent event) { + if (event.getCause().equals(DamageCause.CUSTOM) || event.getCause().equals(DamageCause.VOID) + || event.getCause().equals(DamageCause.FALL)) { + return; + } + + if (event.getEntity() instanceof ITNTSheep) { + event.setDamage(0.0); + return; + } + + if (!(event.getEntity() instanceof Player)) { + return; + } + + if (!(event.getDamager() instanceof TNTPrimed)) { + return; + } + + TNTPrimed damager = (TNTPrimed) event.getDamager(); + + if (!(damager.getSource() instanceof Player)) { + return; + } + + Player damagerPlayer = (Player) damager.getSource(); + Player player = (Player) event.getEntity(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() != GameState.RUNNING) { + return; + } + + if (game.isSpectator(damagerPlayer) || game.isSpectator(player)) { + event.setCancelled(true); + return; + } + + Team damagerTeam = game.getPlayerTeam(damagerPlayer); + Team team = game.getPlayerTeam(player); + + if (damagerTeam.equals(team) && !damagerTeam.getScoreboardTeam().allowFriendlyFire()) { + event.setCancelled(true); + return; + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onInteract(PlayerInteractEvent event) { + if (event.getAction().equals(Action.LEFT_CLICK_AIR) + || event.getAction().equals(Action.LEFT_CLICK_BLOCK)) { + return; + } + + if (event.getPlayer() == null) { + return; + } + + Player player = event.getPlayer(); + + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() != GameState.RUNNING && !game.isStopping()) { + return; + } + + TNTSheep creature = new TNTSheep(); + + if (!event.getMaterial().equals(creature.getItemMaterial())) { + return; + } + + if (game.isSpectator(player)) { + return; + } + + Location startLocation = null; + if (event.getClickedBlock() == null + || event.getClickedBlock().getRelative(BlockFace.UP).getType() != Material.AIR) { + startLocation = player.getLocation().getBlock() + .getRelative(Utils.getCardinalDirection(player.getLocation())).getLocation(); + } else { + startLocation = event.getClickedBlock().getRelative(BlockFace.UP).getLocation(); + } + + creature.setPlayer(player); + creature.setGame(game); + creature.run(startLocation); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onInteractOtherUser(PlayerInteractEntityEvent event) { + if (event.getPlayer() == null) { + return; + } + + Player player = event.getPlayer(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() != GameState.RUNNING) { + return; + } + + if (event.getRightClicked() == null) { + return; + } + + if (event.getRightClicked() instanceof ITNTSheep) { + event.setCancelled(true); + return; + } + + if (event.getRightClicked().getVehicle() != null + && event.getRightClicked().getVehicle() instanceof ITNTSheep) { + event.setCancelled(true); + return; + } + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/shop/Specials/Tracker.java b/common/src/main/java/io/github/bedwarsrel/shop/Specials/Tracker.java new file mode 100644 index 0000000..f4eb6e7 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/shop/Specials/Tracker.java @@ -0,0 +1,111 @@ +package io.github.bedwarsrel.shop.Specials; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.Team; +import io.github.bedwarsrel.utils.ChatWriter; +import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; + +public class Tracker extends SpecialItem { + + private Game game = null; + private Player player = null; + private ItemStack stack = null; + + public void createTask() { + final Game game = this.game; + + BukkitTask task = new BukkitRunnable() { + + @Override + public void run() { + for (Player player : game.getTeamPlayers()) { + if (player.getInventory().contains(getItemMaterial())) { + Player target = findTargetPlayer(player); + if (target != null) { + player.setCompassTarget(target.getLocation()); + continue; + } + } + player.setCompassTarget(game.getPlayerTeam(player).getSpawnLocation()); + } + } + }.runTaskTimer(BedwarsRel.getInstance(), 20L, 20L); + this.game.addRunningTask(task); + } + + private Player findTargetPlayer(Player player) { + Player foundPlayer = null; + double distance = Double.MAX_VALUE; + + Team playerTeam = this.game.getPlayerTeam(player); + + ArrayList possibleTargets = new ArrayList(); + possibleTargets.addAll(this.game.getTeamPlayers()); + possibleTargets.removeAll(playerTeam.getPlayers()); + + for (Player p : possibleTargets) { + if (player.getWorld() != p.getWorld()) { + continue; + } + double dist = player.getLocation().distance(p.getLocation()); + if (dist < distance) { + foundPlayer = p; + distance = dist; + } + } + + return foundPlayer; + } + + @Override + public Material getActivatedMaterial() { + return null; + } + + @Override + public Material getItemMaterial() { + return Material.COMPASS; + } + + public Player getPlayer() { + return this.player; + } + + public void setPlayer(Player player) { + this.player = player; + } + + public ItemStack getStack() { + return this.stack; + } + + public void setGame(Game game) { + this.game = game; + } + + public void trackPlayer() { + Player target = findTargetPlayer(this.player); + + if (target == null) { + this.player.sendMessage(ChatWriter + .pluginMessage( + ChatColor.RED + BedwarsRel + ._l(this.player, "ingame.specials.tracker.no-target-found"))); + this.player.setCompassTarget(this.game.getPlayerTeam(this.player).getSpawnLocation()); + return; + } + + int blocks = (int) this.player.getLocation().distance(target.getLocation()); + this.player.sendMessage( + ChatWriter.pluginMessage(BedwarsRel._l(this.player, "ingame.specials.tracker.target-found", + ImmutableMap.of("player", target.getDisplayName(), "blocks", String.valueOf(blocks))))); + } +} diff --git a/common/src/main/java/io/github/bedwarsrel/shop/Specials/TrackerListener.java b/common/src/main/java/io/github/bedwarsrel/shop/Specials/TrackerListener.java new file mode 100644 index 0000000..6885b1f --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/shop/Specials/TrackerListener.java @@ -0,0 +1,62 @@ +package io.github.bedwarsrel.shop.Specials; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.events.BedwarsGameStartEvent; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; + +public class TrackerListener implements Listener { + + @EventHandler + public void onInteract(PlayerInteractEvent ev) { + Player player = ev.getPlayer(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() != GameState.RUNNING) { + return; + } + + if (game.isSpectator(player)) { + return; + } + + Tracker tracker = new Tracker(); + if (!ev.getMaterial().equals(tracker.getItemMaterial())) { + return; + } + + if (ev.getAction().equals(Action.LEFT_CLICK_AIR) + || ev.getAction().equals(Action.LEFT_CLICK_BLOCK)) { + return; + } + + tracker.setPlayer(player); + tracker.setGame(game); + tracker.trackPlayer(); + ev.setCancelled(true); + } + + @EventHandler + public void onStart(BedwarsGameStartEvent ev) { + final Game game = ev.getGame(); + + if (game == null) { + return; + } + + Tracker tracker = new Tracker(); + tracker.setGame(game); + tracker.createTask(); + + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/shop/Specials/Trap.java b/common/src/main/java/io/github/bedwarsrel/shop/Specials/Trap.java new file mode 100644 index 0000000..ec943e2 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/shop/Specials/Trap.java @@ -0,0 +1,128 @@ +package io.github.bedwarsrel.shop.Specials; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.Team; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.SoundMachine; +import java.util.ArrayList; +import java.util.List; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.scheduler.BukkitRunnable; + +public class Trap extends SpecialItem { + + private List effects = null; + private Game game = null; + private Location location = null; + private int maxDuration = 5; + private boolean playSound = true; + private Team team = null; + + public Trap() { + this.effects = new ArrayList(); + } + + public void activate(final Player player) { + try { + ConfigurationSection section = + BedwarsRel.getInstance().getConfig().getConfigurationSection("specials.trap"); + + if (section.contains("play-sound")) { + this.playSound = section.getBoolean("play-sound"); + } + + for (Object effect : section.getList("effects")) { + effects.add((PotionEffect) effect); + + if (((PotionEffect) effect).getDuration() / 20 > this.maxDuration) { + this.maxDuration = ((PotionEffect) effect).getDuration() / 20; + } + } + + this.game.addRunningTask(new BukkitRunnable() { + + private int counter = 0; + + @Override + public void run() { + if (this.counter >= Trap.this.maxDuration) { + Trap.this.game.removeRunningTask(this); + this.cancel(); + return; + } + this.counter++; + } + }.runTaskTimer(BedwarsRel.getInstance(), 0L, 20L)); + + if (effects.size() > 0) { + for (PotionEffect effect : effects) { + if (player.hasPotionEffect(effect.getType())) { + player.removePotionEffect(effect.getType()); + } + + player.addPotionEffect(effect); + } + } + + player.playSound(player.getLocation(), SoundMachine.get("FUSE", "ENTITY_TNT_PRIMED"), + Float.valueOf("1.0"), Float.valueOf("1.0")); + + for (Player aPlayer : this.team.getPlayers()) { + if (aPlayer.isOnline()) { + aPlayer.sendMessage( + ChatWriter.pluginMessage(BedwarsRel._l(aPlayer, "ingame.specials.trap.trapped"))); + } + } + if (this.playSound) { + this.game.broadcastSound(SoundMachine.get("SHEEP_IDLE", "ENTITY_SHEEP_AMBIENT"), + Float.valueOf("1.0"), Float.valueOf("1.0"), this.team.getPlayers()); + } + + this.game.getRegion().removePlacedUnbreakableBlock(this.location.getBlock()); + this.location.getBlock().setType(Material.AIR); + this.game.removeSpecialItem(this); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + ex.printStackTrace(); + } + } + + public void create(Game game, Team team, Location location) { + this.game = game; + this.team = team; + this.location = location; + + this.game.addSpecialItem(this); + } + + @Override + public Material getActivatedMaterial() { + return null; + } + + public Game getGame() { + return this.game; + } + + @Override + public Material getItemMaterial() { + return Material.TRIPWIRE; + } + + public Location getLocation() { + return this.location; + } + + public void setLocation(Location location) { + this.location = location; + } + + public Team getPlacedTeam() { + return this.team; + } +} diff --git a/common/src/main/java/io/github/bedwarsrel/shop/Specials/TrapListener.java b/common/src/main/java/io/github/bedwarsrel/shop/Specials/TrapListener.java new file mode 100644 index 0000000..aa42aad --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/shop/Specials/TrapListener.java @@ -0,0 +1,145 @@ +package io.github.bedwarsrel.shop.Specials; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.game.Team; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +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.BlockBreakEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.player.PlayerMoveEvent; + +public class TrapListener implements Listener { + + @EventHandler(priority = EventPriority.HIGH) + public void onBreak(BlockBreakEvent br) { + if (br.isCancelled()) { + return; + } + + Block toDestroy = br.getBlock(); + if (br.getBlock().getType() != Material.TRIPWIRE) { + Block relative = br.getBlock().getRelative(BlockFace.UP); + // check above + if (!relative.getType().equals(Material.TRIPWIRE)) { + return; + } + + toDestroy = relative; + } + + Player player = br.getPlayer(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() != GameState.RUNNING) { + return; + } + + if (br.getBlock().equals(toDestroy)) { + br.setCancelled(true); + return; + } + + toDestroy.setType(Material.AIR); + } + + @EventHandler + public void onMove(PlayerMoveEvent move) { + if (move.isCancelled()) { + return; + } + + double difX = Math.abs(move.getFrom().getX() - move.getTo().getX()); + double difZ = Math.abs(move.getFrom().getZ() - move.getTo().getZ()); + + if (difX == 0.0 && difZ == 0.0) { + return; + } + + Player player = move.getPlayer(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() != GameState.RUNNING) { + return; + } + + if (game.isSpectator(player)) { + return; + } + + Trap tmpTrap = new Trap(); + if (!move.getTo().getBlock().getType().equals(tmpTrap.getItemMaterial())) { + return; + } + + Team team = game.getPlayerTeam(player); + if (team == null || game.isSpectator(player)) { + return; + } + + // get trapped trap ;) + for (SpecialItem item : game.getSpecialItems()) { + if (!(item instanceof Trap)) { + continue; + } + + Trap trap = (Trap) item; + if (!trap.getLocation().equals(player.getLocation().getBlock().getLocation())) { + continue; + } + + if (trap.getPlacedTeam() == null) { + continue; + } + + if (!trap.getPlacedTeam().equals(team)) { + trap.activate(player); + return; + } + } + } + + @EventHandler(priority = EventPriority.HIGH) + public void onPlace(BlockPlaceEvent place) { + if (place.isCancelled()) { + return; + } + + Player player = place.getPlayer(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() != GameState.RUNNING) { + return; + } + + Team team = game.getPlayerTeam(player); + if (team == null) { + place.setCancelled(true); + place.setBuild(false); + return; + } + + Trap trap = new Trap(); + trap.create(game, team, place.getBlockPlaced().getLocation()); + game.getRegion().addPlacedUnbreakableBlock(place.getBlockPlaced(), null); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/shop/Specials/WarpPowder.java b/common/src/main/java/io/github/bedwarsrel/shop/Specials/WarpPowder.java new file mode 100644 index 0000000..6fec93a --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/shop/Specials/WarpPowder.java @@ -0,0 +1,199 @@ +package io.github.bedwarsrel.shop.Specials; + +import com.google.common.collect.ImmutableMap; +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.Team; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.Utils; +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 org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; + +public class WarpPowder extends SpecialItem { + + private int fullTeleportingTime = 6; + private Game game = null; + private Player player = null; + private ItemStack stack = null; + private BukkitTask teleportingTask = null; + private double teleportingTime = 6.0; + + public WarpPowder() { + super(); + + this.fullTeleportingTime = + BedwarsRel.getInstance().getIntConfig("specials.warp-powder.teleport-time", 6); + } + + public void cancelTeleport(boolean removeSpecial, boolean showMessage) { + try { + this.teleportingTask.cancel(); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + // already stopped + } + + this.teleportingTime = + (double) BedwarsRel.getInstance().getIntConfig("specials.warp-powder.teleport-time", 6); + this.game.removeRunningTask(this.teleportingTask); + this.player.setLevel(0); + + if (removeSpecial) { + this.game.removeSpecialItem(this); + } + + if (showMessage) { + this.player + .sendMessage(ChatWriter + .pluginMessage(BedwarsRel._l(this.player, "ingame.specials.warp-powder.cancelled"))); + } + + this.setStackAmount(this.getStack().getAmount() - 1); + + if (player.getInventory().first(this.getCancelItemStack()) != -1) { + this.player.getInventory().setItem(player.getInventory().first(this.getCancelItemStack()), + this.stack); + } else { + this.player.getInventory().setItemInOffHand(this.stack); + } + + this.player.updateInventory(); + } + + @Override + public Material getActivatedMaterial() { + return Material.GLOWSTONE_DUST; + } + + private ItemStack getCancelItemStack() { + ItemStack glowstone = new ItemStack(this.getActivatedMaterial(), 1); + ItemMeta meta = glowstone.getItemMeta(); + meta.setDisplayName(BedwarsRel._l("ingame.specials.warp-powder.cancel")); + glowstone.setItemMeta(meta); + + return glowstone; + } + + @Override + public Material getItemMaterial() { + return Material.SULPHUR; + } + + public Player getPlayer() { + return this.player; + } + + public void setPlayer(Player player) { + this.player = player; + } + + public ItemStack getStack() { + return this.stack; + } + + @SuppressWarnings("deprecation") + public void runTask() { + final int circles = 15; + final double height = 2.0; + + if (BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_8")) { + this.stack = player.getInventory().getItemInHand(); + this.player.getInventory().setItem(player.getInventory().getHeldItemSlot(), + this.getCancelItemStack()); + } else { + if (player.getInventory().getItemInOffHand().getType() == this.getItemMaterial()) { + this.stack = player.getInventory().getItemInOffHand(); + this.player.getInventory().setItemInOffHand(this.getCancelItemStack()); + } else if (player.getInventory().getItemInMainHand().getType() == this.getItemMaterial()) { + this.stack = player.getInventory().getItemInMainHand(); + this.player.getInventory().setItemInMainHand(this.getCancelItemStack()); + } + } + this.player.updateInventory(); + + this.teleportingTime = + (double) BedwarsRel.getInstance().getIntConfig("specials.warp-powder.teleport-time", 6); + this.player.sendMessage( + ChatWriter.pluginMessage(BedwarsRel._l(this.player, "ingame.specials.warp-powder.start", + ImmutableMap.of("time", String.valueOf(this.fullTeleportingTime))))); + + this.teleportingTask = new BukkitRunnable() { + + public String particle = + BedwarsRel.getInstance() + .getStringConfig("specials.warp-powder.particle", "fireworksSpark"); + public boolean showParticle = + BedwarsRel.getInstance().getBooleanConfig("specials.warp-powder.show-particles", true); + public double through = 0.0; + + @Override + public void run() { + try { + int circleElements = 20; + double radius = 1.0; + double height2 = 1.0; + double circles = 15.0; + double fulltime = (double) WarpPowder.this.fullTeleportingTime; + double teleportingTime = WarpPowder.this.teleportingTime; + + double perThrough = (Math.ceil((height / circles) * ((fulltime * 20) / circles)) / 20); + + WarpPowder.this.teleportingTime = teleportingTime - perThrough; + Team team = WarpPowder.this.game.getPlayerTeam(WarpPowder.this.player); + Location tLoc = team.getSpawnLocation(); + + if (WarpPowder.this.teleportingTime <= 1.0) { + WarpPowder.this.player.teleport(team.getSpawnLocation()); + WarpPowder.this.cancelTeleport(true, false); + return; + } + + WarpPowder.this.player.setLevel((int) WarpPowder.this.teleportingTime); + if (!showParticle) { + return; + } + + Location loc = WarpPowder.this.player.getLocation(); + + double y = (height2 / circles) * through; + for (int i = 0; i < 20; i++) { + double alpha = (360.0 / circleElements) * i; + double x = radius * Math.sin(Math.toRadians(alpha)); + double z = radius * Math.cos(Math.toRadians(alpha)); + + Location particleFrom = + new Location(loc.getWorld(), loc.getX() + x, loc.getY() + y, loc.getZ() + z); + Utils.createParticleInGame(game, this.particle, particleFrom); + + Location particleTo = + new Location(tLoc.getWorld(), tLoc.getX() + x, tLoc.getY() + y, tLoc.getZ() + z); + Utils.createParticleInGame(game, this.particle, particleTo); + } + + this.through += 1.0; + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + ex.printStackTrace(); + this.cancel(); + WarpPowder.this.cancelTeleport(true, false); + } + } + }.runTaskTimer(BedwarsRel.getInstance(), 0L, + (long) Math.ceil((height / circles) * ((this.fullTeleportingTime * 20) / circles))); + this.game.addRunningTask(this.teleportingTask); + this.game.addSpecialItem(this); + } + + public void setGame(Game game) { + this.game = game; + } + + public void setStackAmount(int amount) { + this.stack.setAmount(amount); + } +} diff --git a/common/src/main/java/io/github/bedwarsrel/shop/Specials/WarpPowderListener.java b/common/src/main/java/io/github/bedwarsrel/shop/Specials/WarpPowderListener.java new file mode 100644 index 0000000..57d0b21 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/shop/Specials/WarpPowderListener.java @@ -0,0 +1,197 @@ +package io.github.bedwarsrel.shop.Specials; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.GameState; +import io.github.bedwarsrel.utils.ChatWriter; +import org.bukkit.Material; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerMoveEvent; + +public class WarpPowderListener implements Listener { + + private WarpPowder getActiveWarpPowder(Game game, Player player) { + for (SpecialItem item : game.getSpecialItems()) { + if (item instanceof WarpPowder) { + WarpPowder powder = (WarpPowder) item; + if (powder.getPlayer().equals(player)) { + return powder; + } + } + } + + return null; + } + + @EventHandler + public void onDamage(EntityDamageEvent dmg) { + if (dmg.isCancelled()) { + return; + } + + if (!(dmg.getEntity() instanceof Player)) { + return; + } + + Player player = (Player) dmg.getEntity(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() != GameState.RUNNING) { + return; + } + + if (game.isSpectator(player)) { + return; + } + + WarpPowder powder = null; + for (SpecialItem item : game.getSpecialItems()) { + if (!(item instanceof WarpPowder)) { + continue; + } + + powder = (WarpPowder) item; + if (!powder.getPlayer().equals(player)) { + powder = null; + continue; + } + break; + } + + if (powder != null) { + powder.cancelTeleport(true, true); + return; + } + } + + @EventHandler + public void onDrop(PlayerDropItemEvent event) { + Player p = event.getPlayer(); + Game g = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(p); + if (g == null) { + return; + } + + if (g.getState() == GameState.RUNNING + && event.getItemDrop().getItemStack().getItemMeta().getDisplayName() != null + && event.getItemDrop().getItemStack().getItemMeta().getDisplayName() + .equals(BedwarsRel._l("ingame.specials.warp-powder.cancel"))) { + event.setCancelled(true); + } + + } + + @EventHandler + public void onInteract(PlayerInteractEvent ev) { + if (ev.getAction().equals(Action.LEFT_CLICK_AIR) + || ev.getAction().equals(Action.LEFT_CLICK_BLOCK)) { + return; + } + + Player player = ev.getPlayer(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() != GameState.RUNNING) { + return; + } + + WarpPowder warpPowder = new WarpPowder(); + if (!ev.getMaterial().equals(warpPowder.getItemMaterial()) + && !ev.getMaterial().equals(warpPowder.getActivatedMaterial())) { + return; + } + + WarpPowder powder = this.getActiveWarpPowder(game, player); + + if (ev.getMaterial().equals(warpPowder.getActivatedMaterial())) { + if (ev.getItem().getItemMeta().getDisplayName() != null && !ev.getItem().getItemMeta() + .getDisplayName().equals(BedwarsRel._l("ingame.specials.warp-powder.cancel"))) { + return; + } + + if (powder != null) { + powder.setStackAmount(powder.getStack().getAmount() + 1); + + player.updateInventory(); + powder.cancelTeleport(true, true); + ev.setCancelled(true); + } + + return; + } + + if (powder != null) { + player.sendMessage( + ChatWriter.pluginMessage(BedwarsRel._l(player, "ingame.specials.warp-powder.multiuse"))); + return; + } + + if (player.getLocation().getBlock().getRelative(BlockFace.DOWN).getType() == Material.AIR) { + return; + } + + warpPowder.setPlayer(player); + warpPowder.setGame(game); + warpPowder.runTask(); + ev.setCancelled(true); + } + + @EventHandler + public void onMove(PlayerMoveEvent mv) { + if (mv.isCancelled()) { + return; + } + + if (mv.getFrom().getBlock().equals(mv.getTo().getBlock())) { + return; + } + + Player player = mv.getPlayer(); + Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); + + if (game == null) { + return; + } + + if (game.getState() != GameState.RUNNING) { + return; + } + + WarpPowder powder = null; + for (SpecialItem item : game.getSpecialItems()) { + if (!(item instanceof WarpPowder)) { + continue; + } + + powder = (WarpPowder) item; + if (powder.getPlayer().equals(player)) { + break; + } + + powder = null; + } + + if (powder != null) { + powder.setStackAmount(powder.getStack().getAmount() + 1); + player.updateInventory(); + powder.cancelTeleport(true, true); + return; + } + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/statistics/PlayerStatistic.java b/common/src/main/java/io/github/bedwarsrel/statistics/PlayerStatistic.java new file mode 100644 index 0000000..fca51eb --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/statistics/PlayerStatistic.java @@ -0,0 +1,165 @@ +package io.github.bedwarsrel.statistics; + +import io.github.bedwarsrel.BedwarsRel; +import java.text.DecimalFormat; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.Setter; +import org.bukkit.OfflinePlayer; +import org.bukkit.configuration.serialization.ConfigurationSerializable; +import org.bukkit.entity.Player; + +@Getter +@Setter +public class PlayerStatistic implements ConfigurationSerializable { + + private int currentDeaths = 0; + private int currentDestroyedBeds = 0; + private int currentKills = 0; + private int currentLoses = 0; + private int currentScore = 0; + private int currentWins = 0; + @Setter(AccessLevel.NONE) + private int deaths = 0; + @Setter(AccessLevel.NONE) + private int destroyedBeds = 0; + @Setter(AccessLevel.NONE) + private int kills = 0; + @Setter(AccessLevel.NONE) + private int loses = 0; + private String name = ""; + @Setter(AccessLevel.NONE) + private int score = 0; + @Getter(AccessLevel.NONE) + @Setter(AccessLevel.NONE) + private UUID uuid; + @Setter(AccessLevel.NONE) + private int wins = 0; + + + public PlayerStatistic(UUID uuid) { + this.uuid = uuid; + + Player player = BedwarsRel.getInstance().getServer().getPlayer(uuid); + if (player != null && !this.name.equals(player.getName())) { + this.name = player.getName(); + } + } + + public PlayerStatistic(OfflinePlayer player) { + this.uuid = player.getUniqueId(); + this.name = player.getName(); + } + + public PlayerStatistic() { + + } + + public PlayerStatistic(Map deserialize) { + if (deserialize.containsKey("deaths")) { + this.deaths = (int) deserialize.get("deaths"); + } + if (deserialize.containsKey("deaths")) { + this.deaths = (int) deserialize.get("deaths"); + } + if (deserialize.containsKey("destroyedBeds")) { + this.destroyedBeds = (int) deserialize.get("destroyedBeds"); + } + if (deserialize.containsKey("kills")) { + this.kills = (int) deserialize.get("kills"); + } + if (deserialize.containsKey("loses")) { + this.loses = (int) deserialize.get("loses"); + } + if (deserialize.containsKey("score")) { + this.score = (int) deserialize.get("score"); + } + if (deserialize.containsKey("wins")) { + this.wins = (int) deserialize.get("wins"); + } + if (deserialize.containsKey("name")) { + this.name = (String) deserialize.get("name"); + } + if (deserialize.containsKey("uuid")) { + this.uuid = UUID.fromString((String) deserialize.get("uuid")); + } + } + + public void addCurrentValues() { + this.deaths = this.deaths + this.currentDeaths; + this.currentDeaths = 0; + this.destroyedBeds = this.destroyedBeds + this.currentDestroyedBeds; + this.currentDestroyedBeds = 0; + this.kills = this.kills + this.currentKills; + this.currentKills = 0; + this.loses = this.loses + this.currentLoses; + this.currentLoses = 0; + this.score = this.score + this.currentScore; + this.currentScore = 0; + this.wins = this.wins + this.currentWins; + this.currentWins = 0; + + } + + public int getCurrentGames() { + return this.getCurrentWins() + this.getCurrentLoses(); + } + + public double getCurrentKD() { + double kd = 0.0; + if (this.getDeaths() + this.getCurrentDeaths() == 0) { + kd = this.getKills(); + } else if (this.getKills() + this.getCurrentKills() == 0) { + kd = 0.0; + } else { + kd = ((double) this.getKills() + this.getCurrentKills()) / ((double) this.getDeaths() + this + .getCurrentDeaths()); + } + kd = Math.round(kd * 100.0) / 100.0; + + return kd; + } + + public int getGames() { + return this.getWins() + this.getLoses(); + } + + public UUID getId() { + return this.uuid; + } + + public void setId(UUID uuid) { + this.uuid = uuid; + } + + public double getKD() { + double kd = 0.0; + if (this.getDeaths() == 0) { + kd = this.getKills(); + } else if (this.getKills() == 0) { + kd = 0.0; + } else { + kd = ((double) this.getKills()) / ((double) this.getDeaths()); + } + DecimalFormat df = new DecimalFormat("#.##"); + kd = Double.valueOf(df.format(kd)); + + return kd; + } + + @Override + public Map serialize() { + HashMap playerStatistic = new HashMap<>(); + playerStatistic.put("deaths", this.deaths); + playerStatistic.put("destroyedBeds", this.destroyedBeds); + playerStatistic.put("kills", this.kills); + playerStatistic.put("loses", this.loses); + playerStatistic.put("score", this.score); + playerStatistic.put("wins", this.wins); + playerStatistic.put("name", this.name); + return playerStatistic; + } +} diff --git a/common/src/main/java/io/github/bedwarsrel/statistics/PlayerStatisticManager.java b/common/src/main/java/io/github/bedwarsrel/statistics/PlayerStatisticManager.java new file mode 100644 index 0000000..cd441df --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/statistics/PlayerStatisticManager.java @@ -0,0 +1,347 @@ +package io.github.bedwarsrel.statistics; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.events.BedwarsSavePlayerStatisticEvent; +import io.github.bedwarsrel.utils.ChatWriter; +import java.io.File; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; + +public class PlayerStatisticManager { + + private File databaseFile = null; + private FileConfiguration fileDatabase = null; + private Map playerStatistic = null; + + public PlayerStatisticManager() { + this.playerStatistic = new HashMap<>(); + this.fileDatabase = null; + } + + public List createStatisticLines(PlayerStatistic playerStatistic, boolean withPrefix, + ChatColor nameColor, + ChatColor valueColor) { + return this.createStatisticLines(playerStatistic, withPrefix, nameColor.toString(), + valueColor.toString()); + } + + public List createStatisticLines(PlayerStatistic playerStatistic, boolean withPrefix, + String nameColor, + String valueColor) { + List lines = new ArrayList<>(); + + lines.add(this.getStatisticLine("name", playerStatistic.getName(), null, withPrefix, nameColor, + valueColor)); + lines.add(this.getStatisticLine("kills", + playerStatistic.getKills() + playerStatistic.getCurrentKills(), + playerStatistic.getCurrentKills(), withPrefix, nameColor, + valueColor)); + lines.add(this.getStatisticLine("deaths", + playerStatistic.getDeaths() + playerStatistic.getCurrentDeaths(), + playerStatistic.getCurrentDeaths(), withPrefix, nameColor, + valueColor)); + Double kdDifference = playerStatistic.getCurrentKD() - playerStatistic.getKD(); + DecimalFormat df = new DecimalFormat("#.##"); + kdDifference = Double.valueOf(df.format(kdDifference)); + lines.add( + this.getStatisticLine("kd", playerStatistic.getCurrentKD(), kdDifference, withPrefix, + nameColor, + valueColor)); + lines.add( + this.getStatisticLine("wins", playerStatistic.getWins() + playerStatistic.getCurrentWins(), + playerStatistic.getCurrentWins(), withPrefix, nameColor, + valueColor)); + lines.add(this.getStatisticLine("loses", + playerStatistic.getLoses() + playerStatistic.getCurrentLoses(), + playerStatistic.getCurrentLoses(), withPrefix, nameColor, + valueColor)); + lines.add(this.getStatisticLine("games", + playerStatistic.getGames() + playerStatistic.getCurrentGames(), + playerStatistic.getCurrentGames(), withPrefix, nameColor, + valueColor)); + lines.add(this.getStatisticLine("destroyedBeds", + playerStatistic.getDestroyedBeds() + playerStatistic.getCurrentDestroyedBeds(), + playerStatistic.getCurrentDestroyedBeds(), withPrefix, nameColor, + valueColor)); + lines.add(this.getStatisticLine("score", + playerStatistic.getScore() + playerStatistic.getCurrentScore(), + playerStatistic.getCurrentScore(), withPrefix, nameColor, + valueColor)); + + return lines; + } + + private String getComparisonString(Double value) { + if (value > 0) { + return ChatColor.GREEN + "+" + value; + } else if (value < 0) { + return ChatColor.RED + String.valueOf(value); + } else { + return String.valueOf(value); + } + } + + private String getComparisonString(Integer value) { + if (value > 0) { + return ChatColor.GREEN + "+" + value; + } else if (value < 0) { + return ChatColor.RED + String.valueOf(value); + } else { + return String.valueOf(value); + } + } + + public PlayerStatistic getStatistic(OfflinePlayer player) { + if (player == null) { + return null; + } + + if (!this.playerStatistic.containsKey(player.getUniqueId())) { + return this.loadStatistic(player.getUniqueId()); + } + + return this.playerStatistic.get(player.getUniqueId()); + } + + private String getStatisticLine(String name, Object value1, Object value2, Boolean withPrefix, + String nameColor, + String valueColor) { + String line; + if (value2 != null && value2 instanceof Integer && (int) value2 != 0) { + line = nameColor + BedwarsRel._l("stats." + name) + ": " + + valueColor + value1 + " " + nameColor + "(" + this.getComparisonString((int) value2) + + nameColor + ")"; + } else if (value2 != null && value2 instanceof Double && (double) value2 != 0.00) { + line = nameColor + BedwarsRel._l("stats." + name) + ": " + + valueColor + value1 + " " + nameColor + "(" + this.getComparisonString((double) value2) + + nameColor + ")"; + } else { + line = nameColor + BedwarsRel._l("stats." + name) + ": " + + valueColor + value1; + } + if (withPrefix) { + line = ChatWriter.pluginMessage(line); + } + return line; + } + + public void initialize() { + if (!BedwarsRel.getInstance().getBooleanConfig("statistics.enabled", false)) { + return; + } + + if (BedwarsRel.getInstance().getStatisticStorageType() == StorageType.YAML) { + File file = new File( + BedwarsRel.getInstance().getDataFolder() + "/database/bw_stats_players.yml"); + this.loadYml(file); + } + + if (BedwarsRel.getInstance().getStatisticStorageType() == StorageType.DATABASE) { + this.initializeDatabase(); + } + } + + public void initializeDatabase() { + BedwarsRel.getInstance().getServer().getConsoleSender().sendMessage( + ChatWriter.pluginMessage(ChatColor.GREEN + "Loading statistics from database ...")); + + try { + Connection connection = BedwarsRel.getInstance().getDatabaseManager().getConnection(); + connection.setAutoCommit(false); + PreparedStatement preparedStatement = connection + .prepareStatement(BedwarsRel.getInstance().getDatabaseManager().getCreateTableSql()); + preparedStatement.executeUpdate(); + connection.commit(); + preparedStatement.close(); + connection.close(); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + ex.printStackTrace(); + } + + } + + private PlayerStatistic loadDatabaseStatistic(UUID uuid) { + if (this.playerStatistic.containsKey(uuid)) { + return this.playerStatistic.get(uuid); + } + HashMap deserialize = new HashMap<>(); + + try { + Connection connection = BedwarsRel.getInstance().getDatabaseManager().getConnection(); + PreparedStatement preparedStatement = connection + .prepareStatement(BedwarsRel.getInstance().getDatabaseManager().getReadObjectSql()); + preparedStatement.setString(1, uuid.toString()); + ResultSet resultSet = preparedStatement.executeQuery(); + + ResultSetMetaData meta = resultSet.getMetaData(); + while (resultSet.next()) { + for (int i = 1; i <= meta.getColumnCount(); i++) { + String key = meta.getColumnName(i); + Object value = resultSet.getObject(key); + deserialize.put(key, value); + } + } + + resultSet.close(); + preparedStatement.close(); + connection.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + + PlayerStatistic playerStatistic; + + if (deserialize.isEmpty()) { + playerStatistic = new PlayerStatistic(uuid); + } else { + playerStatistic = new PlayerStatistic(deserialize); + } + Player player = BedwarsRel.getInstance().getServer().getPlayer(uuid); + if (player != null && !playerStatistic.getName().equals(player.getName())) { + playerStatistic.setName(player.getName()); + } + + this.playerStatistic.put(playerStatistic.getId(), playerStatistic); + return playerStatistic; + } + + public PlayerStatistic loadStatistic(UUID uuid) { + if (BedwarsRel.getInstance().getStatisticStorageType() == StorageType.YAML) { + return this.loadYamlStatistic(uuid); + } else { + return this.loadDatabaseStatistic(uuid); + } + } + + private PlayerStatistic loadYamlStatistic(UUID uuid) { + + if (this.fileDatabase == null || !this.fileDatabase.contains("data." + uuid.toString())) { + PlayerStatistic playerStatistic = new PlayerStatistic(uuid); + this.playerStatistic.put(uuid, playerStatistic); + return playerStatistic; + } + + HashMap deserialize = new HashMap<>(); + deserialize.putAll( + this.fileDatabase.getConfigurationSection("data." + uuid.toString()).getValues(false)); + PlayerStatistic playerStatistic = new PlayerStatistic(deserialize); + playerStatistic.setId(uuid); + Player player = BedwarsRel.getInstance().getServer().getPlayer(uuid); + if (player != null && !playerStatistic.getName().equals(player.getName())) { + playerStatistic.setName(player.getName()); + } + this.playerStatistic.put(uuid, playerStatistic); + return playerStatistic; + } + + private void loadYml(File ymlFile) { + try { + BedwarsRel.getInstance().getServer().getConsoleSender().sendMessage( + ChatWriter.pluginMessage(ChatColor.GREEN + "Loading statistics from YAML-File ...")); + + YamlConfiguration config = null; + Map map = new HashMap<>(); + + this.databaseFile = ymlFile; + + if (!ymlFile.exists()) { + ymlFile.getParentFile().mkdirs(); + ymlFile.createNewFile(); + + config = new YamlConfiguration(); + config.createSection("data"); + config.save(ymlFile); + } else { + config = YamlConfiguration.loadConfiguration(ymlFile); + } + + this.fileDatabase = config; + + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + ex.printStackTrace(); + } + + BedwarsRel.getInstance().getServer().getConsoleSender() + .sendMessage(ChatWriter.pluginMessage(ChatColor.GREEN + "Done!")); + } + + private void storeDatabaseStatistic(PlayerStatistic playerStatistic) { + try { + Connection connection = BedwarsRel.getInstance().getDatabaseManager().getConnection(); + connection.setAutoCommit(false); + + PreparedStatement preparedStatement = connection + .prepareStatement(BedwarsRel.getInstance().getDatabaseManager().getWriteObjectSql()); + + preparedStatement.setString(1, playerStatistic.getId().toString()); + preparedStatement.setString(2, playerStatistic.getName()); + preparedStatement.setInt(3, playerStatistic.getCurrentDeaths()); + preparedStatement.setInt(4, playerStatistic.getCurrentDestroyedBeds()); + preparedStatement.setInt(5, playerStatistic.getCurrentKills()); + preparedStatement.setInt(6, playerStatistic.getCurrentLoses()); + preparedStatement.setInt(7, playerStatistic.getCurrentScore()); + preparedStatement.setInt(8, playerStatistic.getCurrentWins()); + preparedStatement.executeUpdate(); + connection.commit(); + preparedStatement.close(); + connection.close(); + playerStatistic.addCurrentValues(); + } catch (SQLException e) { + e.printStackTrace(); + } + + } + + public void storeStatistic(PlayerStatistic statistic) { + BedwarsSavePlayerStatisticEvent savePlayerStatisticEvent = + new BedwarsSavePlayerStatisticEvent(statistic); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(savePlayerStatisticEvent); + + if (savePlayerStatisticEvent.isCancelled()) { + return; + } + + if (BedwarsRel.getInstance().getStatisticStorageType() == StorageType.YAML) { + this.storeYamlStatistic(statistic); + } else { + this.storeDatabaseStatistic(statistic); + } + } + + private synchronized void storeYamlStatistic(PlayerStatistic statistic) { + statistic.addCurrentValues(); + this.fileDatabase.set("data." + statistic.getId().toString(), statistic.serialize()); + try { + this.fileDatabase.save(this.databaseFile); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + BedwarsRel.getInstance().getServer().getConsoleSender().sendMessage(ChatWriter.pluginMessage( + ChatColor.RED + "Couldn't store statistic data for player with uuid: " + statistic.getId() + .toString())); + } + } + + public void unloadStatistic(OfflinePlayer player) { + if (BedwarsRel.getInstance().getStatisticStorageType() != StorageType.YAML) { + this.playerStatistic.remove(player.getUniqueId()); + } + } + + +} diff --git a/common/src/main/java/io/github/bedwarsrel/statistics/StorageType.java b/common/src/main/java/io/github/bedwarsrel/statistics/StorageType.java new file mode 100644 index 0000000..0862d51 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/statistics/StorageType.java @@ -0,0 +1,25 @@ +package io.github.bedwarsrel.statistics; + +public enum StorageType { + DATABASE("database"), YAML("yaml"); + + private String name = null; + + StorageType(String configName) { + this.name = configName; + } + + public static StorageType getByName(String name) { + for (StorageType type : values()) { + if (type.getName().equals(name)) { + return type; + } + } + + return YAML; + } + + public String getName() { + return this.name; + } +} diff --git a/common/src/main/java/io/github/bedwarsrel/updater/ConfigUpdater.java b/common/src/main/java/io/github/bedwarsrel/updater/ConfigUpdater.java new file mode 100644 index 0000000..c96af21 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/updater/ConfigUpdater.java @@ -0,0 +1,285 @@ +package io.github.bedwarsrel.updater; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.villager.ItemStackParser; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import org.bukkit.Sound; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +public class ConfigUpdater { + + @SuppressWarnings("unchecked") + public void addConfigs() { + // <1.1.3> + BedwarsRel.getInstance().getConfig().addDefault("check-updates", true); + // + + // <1.1.4> + BedwarsRel.getInstance().getConfig().addDefault("sign.first-line", "$title$"); + BedwarsRel.getInstance().getConfig().addDefault("sign.second-line", "$regionname$"); + BedwarsRel.getInstance().getConfig().addDefault("sign.third-line", + "Players &7[&b$currentplayers$&7/&b$maxplayers$&7]"); + BedwarsRel.getInstance().getConfig().addDefault("sign.fourth-line", "$status$"); + BedwarsRel.getInstance().getConfig().addDefault("specials.rescue-platform.break-time", 10); + BedwarsRel.getInstance().getConfig().addDefault("specials.rescue-platform.using-wait-time", 20); + BedwarsRel.getInstance().getConfig().addDefault("explodes.destroy-worldblocks", false); + BedwarsRel.getInstance().getConfig().addDefault("explodes.destroy-beds", false); + BedwarsRel.getInstance().getConfig().addDefault("explodes.drop-blocking", false); + BedwarsRel.getInstance().getConfig().addDefault("rewards.enabled", false); + + List defaultRewards = new ArrayList(); + defaultRewards.add("/example {player} {score}"); + BedwarsRel.getInstance().getConfig().addDefault("rewards.player-win", defaultRewards); + BedwarsRel.getInstance().getConfig().addDefault("rewards.player-end-game", defaultRewards); + // + + // <1.1.6> + BedwarsRel.getInstance().getConfig().addDefault("global-messages", true); + BedwarsRel.getInstance().getConfig().addDefault("player-settings.one-stack-on-shift", false); + // + + // <1.1.8> + BedwarsRel.getInstance().getConfig().addDefault("seperate-game-chat", true); + BedwarsRel.getInstance().getConfig().addDefault("seperate-spectator-chat", false); + // + + // <1.1.9> + BedwarsRel.getInstance().getConfig().addDefault("specials.trap.play-sound", true); + // + + // <1.1.11> + BedwarsRel.getInstance().getConfig().addDefault("specials.magnetshoe.probability", 75); + BedwarsRel.getInstance().getConfig().addDefault("specials.magnetshoe.boots", "IRON_BOOTS"); + // + + // <1.1.13> + BedwarsRel.getInstance().getConfig().addDefault("specials.rescue-platform.block", "GLASS"); + BedwarsRel.getInstance().getConfig().addDefault("specials.rescue-platform.block", "BLAZE_ROD"); + BedwarsRel.getInstance().getConfig().addDefault("ingame-chatformat-all", + "[$all$] <$team$>$player$: $msg$"); + BedwarsRel.getInstance().getConfig().addDefault("ingame-chatformat", "<$team$>$player$: $msg$"); + // + + // <1.1.14> + BedwarsRel.getInstance().getConfig().addDefault("overwrite-names", false); + BedwarsRel.getInstance().getConfig().addDefault("specials.protection-wall.break-time", 0); + BedwarsRel.getInstance().getConfig().addDefault("specials.protection-wall.wait-time", 20); + BedwarsRel.getInstance().getConfig().addDefault("specials.protection-wall.can-break", true); + BedwarsRel.getInstance().getConfig().addDefault("specials.protection-wall.item", "BRICK"); + BedwarsRel.getInstance().getConfig().addDefault("specials.protection-wall.block", "SANDSTONE"); + BedwarsRel.getInstance().getConfig().addDefault("specials.protection-wall.width", 4); + BedwarsRel.getInstance().getConfig().addDefault("specials.protection-wall.height", 4); + BedwarsRel.getInstance().getConfig().addDefault("specials.protection-wall.distance", 2); + + if (BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_8")) { + BedwarsRel.getInstance().getConfig().addDefault("bed-sound", "ENDERDRAGON_GROWL"); + } else { + BedwarsRel.getInstance().getConfig().addDefault("bed-sound", "ENTITY_ENDERDRAGON_GROWL"); + } + + try { + Sound.valueOf( + BedwarsRel.getInstance().getStringConfig("bed-sound", "ENDERDRAGON_GROWL").toUpperCase()); + } catch (Exception e) { + if (BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_8")) { + BedwarsRel.getInstance().getConfig().set("bed-sound", "ENDERDRAGON_GROWL"); + } else { + BedwarsRel.getInstance().getConfig().set("bed-sound", "ENTITY_ENDERDRAGON_GROWL"); + } + } + // + + // <1.1.15> + BedwarsRel.getInstance().getConfig().addDefault("store-game-records", true); + BedwarsRel.getInstance().getConfig().addDefault("store-game-records-holder", true); + BedwarsRel.getInstance().getConfig().addDefault("statistics.scores.record", 100); + BedwarsRel.getInstance().getConfig().addDefault("game-block", "BED_BLOCK"); + // + + // <1.2.0> + BedwarsRel.getInstance().getConfig().addDefault("titles.win.enabled", true); + BedwarsRel.getInstance().getConfig().addDefault("titles.win.title-fade-in", 1.5); + BedwarsRel.getInstance().getConfig().addDefault("titles.win.title-stay", 5.0); + BedwarsRel.getInstance().getConfig().addDefault("titles.win.title-fade-out", 2.0); + BedwarsRel.getInstance().getConfig().addDefault("titles.win.subtitle-fade-in", 1.5); + BedwarsRel.getInstance().getConfig().addDefault("titles.win.subtitle-stay", 5.0); + BedwarsRel.getInstance().getConfig().addDefault("titles.win.subtitle-fade-out", 2.0); + BedwarsRel.getInstance().getConfig().addDefault("titles.map.enabled", false); + BedwarsRel.getInstance().getConfig().addDefault("titles.map.title-fade-in", 1.5); + BedwarsRel.getInstance().getConfig().addDefault("titles.map.title-stay", 5.0); + BedwarsRel.getInstance().getConfig().addDefault("titles.map.title-fade-out", 2.0); + BedwarsRel.getInstance().getConfig().addDefault("titles.map.subtitle-fade-in", 1.5); + BedwarsRel.getInstance().getConfig().addDefault("titles.map.subtitle-stay", 5.0); + BedwarsRel.getInstance().getConfig().addDefault("titles.map.subtitle-fade-out", 2.0); + BedwarsRel.getInstance().getConfig().addDefault("player-drops", false); + BedwarsRel.getInstance().getConfig().addDefault("bungeecord.spigot-restart", true); + BedwarsRel.getInstance().getConfig().addDefault("place-in-liquid", true); + BedwarsRel.getInstance().getConfig().addDefault("friendlybreak", true); + BedwarsRel.getInstance().getConfig().addDefault("breakable-blocks", Arrays.asList("none")); + BedwarsRel.getInstance().getConfig().addDefault("update-infos", true); + BedwarsRel.getInstance().getConfig().addDefault("lobby-chatformat", "$player$: $msg$"); + // <1.2.0> + + // <1.2.1> + BedwarsRel.getInstance().getConfig().addDefault("statistics.bed-destroyed-kills", false); + BedwarsRel.getInstance().getConfig().addDefault("rewards.player-destroy-bed", + Arrays.asList("/example {player} {score}")); + BedwarsRel.getInstance().getConfig().addDefault("rewards.player-kill", + Arrays.asList("/example {player} 10")); + BedwarsRel.getInstance().getConfig().addDefault("specials.tntsheep.fuse-time", 8.0); + BedwarsRel.getInstance().getConfig().addDefault("titles.countdown.enabled", true); + BedwarsRel.getInstance().getConfig().addDefault("titles.countdown.format", "&3{countdown}"); + BedwarsRel.getInstance().getConfig().addDefault("specials.tntsheep.speed", 0.4D); + // + + // <1.2.2> + BedwarsRel.getInstance().getConfig().addDefault("global-autobalance", false); + BedwarsRel.getInstance().getConfig().addDefault("scoreboard.format-bed-destroyed", + "&c$status$ $team$"); + BedwarsRel + .getInstance().getConfig().addDefault("scoreboard.format-bed-alive", "&a$status$ $team$"); + BedwarsRel + .getInstance().getConfig().addDefault("scoreboard.format-title", "&e$region$&f - $time$"); + BedwarsRel.getInstance().getConfig().addDefault("teamname-on-tab", false); + // + + // <1.2.3> + BedwarsRel.getInstance().getConfig().addDefault("bungeecord.motds.full", "&c[Full]"); + BedwarsRel.getInstance().getConfig().addDefault("teamname-in-chat", false); + BedwarsRel.getInstance().getConfig().addDefault("hearts-on-death", true); + BedwarsRel.getInstance().getConfig().addDefault("lobby-scoreboard.title", "&eBEDWARS"); + BedwarsRel.getInstance().getConfig().addDefault("lobby-scoreboard.enabled", true); + BedwarsRel.getInstance().getConfig().addDefault("lobby-scoreboard.content", + Arrays.asList("", "&fMap: &2$regionname$", "&fPlayers: &2$players$&f/&2$maxplayers$", "", + "&fWaiting ...", "")); + BedwarsRel.getInstance().getConfig().addDefault("jointeam-entity.show-name", true); + // + + // <1.2.6> + BedwarsRel.getInstance().getConfig().addDefault("die-on-void", false); + BedwarsRel.getInstance().getConfig().addDefault("global-chat-after-end", true); + // + + // <1.2.7> + BedwarsRel.getInstance().getConfig().addDefault("holographic-stats.show-prefix", false); + BedwarsRel.getInstance().getConfig().addDefault("holographic-stats.name-color", "&7"); + BedwarsRel.getInstance().getConfig().addDefault("holographic-stats.value-color", "&e"); + BedwarsRel.getInstance().getConfig().addDefault("holographic-stats.head-line", + "Your &eBEDWARS&f stats"); + BedwarsRel.getInstance().getConfig().addDefault("lobby-gamemode", 0); + BedwarsRel.getInstance().getConfig().addDefault("statistics.show-on-game-end", true); + BedwarsRel.getInstance().getConfig().addDefault("allow-crafting", false); + // + + // <1.2.8> + BedwarsRel.getInstance().getConfig().addDefault("specials.tntsheep.explosion-factor", 1.0); + BedwarsRel.getInstance().getConfig().addDefault("bungeecord.full-restart", true); + BedwarsRel.getInstance().getConfig().addDefault("lobbytime-full", 15); + BedwarsRel.getInstance().getConfig().addDefault("bungeecord.endgame-in-lobby", true); + // + + // <1.3.0> + BedwarsRel.getInstance().getConfig().addDefault("hearts-in-halfs", true); + // + + // <1.3.1> + if (BedwarsRel.getInstance().getConfig().isString("chat-to-all-prefix")) { + String chatToAllPrefixString = BedwarsRel.getInstance().getConfig() + .getString("chat-to-all-prefix"); + BedwarsRel.getInstance().getConfig().set("chat-to-all-prefix", + Arrays.asList(chatToAllPrefixString)); + } + if (BedwarsRel.getInstance().getConfig().isList("breakable-blocks")) { + List breakableBlocks = + (List) BedwarsRel.getInstance().getConfig().getList("breakable-blocks"); + BedwarsRel.getInstance().getConfig().set("breakable-blocks.list", breakableBlocks); + } + BedwarsRel.getInstance().getConfig().addDefault("breakable-blocks.use-as-blacklist", false); + // + + // <1.3.2> + BedwarsRel.getInstance().getConfig().addDefault("statistics.player-leave-kills", false); + + List oldPotions = new ArrayList(); + + if (BedwarsRel.getInstance().getConfig().getBoolean("specials.trap.blindness.enabled")) { + oldPotions.add(new PotionEffect(PotionEffectType.BLINDNESS, + BedwarsRel.getInstance().getConfig().getInt("specials.trap.duration"), + BedwarsRel.getInstance().getConfig().getInt("specials.trap.blindness.amplifier"), true, + BedwarsRel.getInstance().getConfig().getBoolean("specials.trap.show-particles"))); + } + if (BedwarsRel.getInstance().getConfig().getBoolean("specials.trap.slowness.enabled")) { + oldPotions.add(new PotionEffect(PotionEffectType.SLOW, + BedwarsRel.getInstance().getConfig().getInt("specials.trap.duration"), + BedwarsRel.getInstance().getConfig().getInt("specials.trap.slowness.amplifier"), true, + BedwarsRel.getInstance().getConfig().getBoolean("specials.trap.show-particles"))); + } + if (BedwarsRel.getInstance().getConfig().getBoolean("specials.trap.weakness.enabled")) { + oldPotions.add(new PotionEffect(PotionEffectType.WEAKNESS, + BedwarsRel.getInstance().getConfig().getInt("specials.trap.duration"), + BedwarsRel.getInstance().getConfig().getInt("specials.trap.weakness.amplifier"), true, + BedwarsRel.getInstance().getConfig().getBoolean("specials.trap.show-particles"))); + } + BedwarsRel.getInstance().getConfig().addDefault("specials.trap.effects", oldPotions); + BedwarsRel.getInstance().getConfig().set("specials.trap.duration", null); + BedwarsRel.getInstance().getConfig().set("specials.trap.blindness", null); + BedwarsRel.getInstance().getConfig().set("specials.trap.slowness", null); + BedwarsRel.getInstance().getConfig().set("specials.trap.weakness", null); + BedwarsRel.getInstance().getConfig().set("specials.trap.show-particles", null); + + List potionEffectList = new ArrayList<>(); + potionEffectList.add(new PotionEffect(PotionEffectType.BLINDNESS, 5 * 20, 2, true, true)); + potionEffectList.add(new PotionEffect(PotionEffectType.WEAKNESS, 5 * 20, 2, true, true)); + potionEffectList.add(new PotionEffect(PotionEffectType.SLOW, 5 * 20, 2, true, true)); + BedwarsRel.getInstance().getConfig().addDefault("specials.trap.effects", potionEffectList); + // + + // <1.3.3> + BedwarsRel.getInstance().getConfig().addDefault("show-team-in-actionbar", false); + BedwarsRel.getInstance().getConfig().addDefault("send-error-data", true); + BedwarsRel.getInstance().getConfig().addDefault("player-settings.old-shop-as-default", false); + // + + // <1.3.4> + BedwarsRel.getInstance().getConfig().addDefault("keep-inventory-on-death", false); + BedwarsRel.getInstance().getConfig().addDefault("use-internal-shop", true); + BedwarsRel.getInstance().getConfig().addDefault("save-inventory", true); + BedwarsRel.getInstance().getConfig().addDefault("specials.arrow-blocker.protection-time", 10); + BedwarsRel.getInstance().getConfig().addDefault("specials.arrow-blocker.using-wait-time", 30); + BedwarsRel.getInstance().getConfig().addDefault("specials.arrow-blocker.item", "ender_eye"); + // + + // <1.3.5> + BedwarsRel.getInstance().getConfig().addDefault("spawn-resources-in-chest", true); + BedwarsRel.getInstance().getConfig().addDefault("database.table-prefix", "bw_"); + Object ressourceObject = BedwarsRel.getInstance().getConfig().get("ressource"); + if (ressourceObject != null) { + BedwarsRel.getInstance().getConfig().set("resource", ressourceObject); + BedwarsRel.getInstance().getConfig().set("ressource", null); + } + + ConfigurationSection resourceSection = BedwarsRel.getInstance().getConfig() + .getConfigurationSection("resource"); + for (Entry entry : resourceSection.getValues(false).entrySet()) { + if (!BedwarsRel.getInstance().getConfig().isList("resource." + entry.getKey() + ".item")) { + ItemStackParser parser = new ItemStackParser(entry.getValue()); + ItemStack item = parser.parse(); + if (item != null) { + List> itemList = new ArrayList<>(); + itemList.add(item.serialize()); + resourceSection.set(entry.getKey() + ".item", itemList); + resourceSection.set(entry.getKey() + ".amount", null); + resourceSection.set(entry.getKey() + ".name", null); + } + } + } + // + } +} diff --git a/common/src/main/java/io/github/bedwarsrel/updater/DatabaseUpdate.java b/common/src/main/java/io/github/bedwarsrel/updater/DatabaseUpdate.java new file mode 100644 index 0000000..652eef8 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/updater/DatabaseUpdate.java @@ -0,0 +1,16 @@ +package io.github.bedwarsrel.updater; + +public class DatabaseUpdate { + + private String sql = null; + + public DatabaseUpdate(String sql) { + super(); + + this.sql = sql; + } + + public String getSql() { + return sql; + } +} diff --git a/common/src/main/java/io/github/bedwarsrel/updater/PluginUpdater.java b/common/src/main/java/io/github/bedwarsrel/updater/PluginUpdater.java new file mode 100644 index 0000000..8bc8c8e --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/updater/PluginUpdater.java @@ -0,0 +1,842 @@ +package io.github.bedwarsrel.updater; + +import io.github.bedwarsrel.BedwarsRel; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.MalformedURLException; +import java.net.Proxy; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.logging.Level; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitRunnable; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.JSONValue; + +/** + * Check for updates on BukkitDev for a given plugin, and download the updates if needed. + *

+ * VERY, VERY IMPORTANT: Because there are no standards for adding auto-update toggles in + * your plugin's config, this system provides NO CHECK WITH YOUR CONFIG to make sure the user has + * allowed auto-updating.
+ * It is a BUKKIT POLICY that you include a boolean value in your config that prevents the + * auto-updater from running AT ALL.
+ * If you fail to include this option in your config, your plugin will be REJECTED when you + * attempt to submit it to dev.bukkit.org. + *

+ * An example of a good configuration option would be something similar to 'auto-update: true' - if + * this value is set to false you may NOT run the auto-updater.
+ * If you are unsure about these rules, please read the plugin submission guidelines: + * http://goo.gl/8iU5l + * + * @author Gravity + * @version 2.3 + */ + +public class PluginUpdater { + + /* Constants */ + + // Config key for api key + private static final String API_KEY_CONFIG_KEY = "api-key"; + // Default api key value in config + private static final String API_KEY_DEFAULT = "c9012155bcd01874f55bfd2f38de962dc0dc353a"; + // Used for downloading files + private static final int BYTE_SIZE = 1024; + // Config key for disabling updater + private static final String DISABLE_CONFIG_KEY = "disable"; + // Default disable value in config + private static final boolean DISABLE_DEFAULT = false; + // Slugs will be appended to this to get to the project's RSS feed + private static final String HOST = "https://api.curseforge.com"; + // Remote file's download link + private static final String LINK_VALUE = "downloadUrl"; + // Path to GET + private static final String QUERY = "/servermods/files?projectIds="; + // Remote file's title + private static final String TITLE_VALUE = "name"; + // Remote file's release type + private static final String TYPE_VALUE = "releaseType"; + // User-agent when querying Curse + private static final String USER_AGENT = "Bedwars Plugin updater"; + // Remote file's build version + private static final String VERSION_VALUE = "gameVersion"; + + /* User-provided variables */ + // Whether to announce file downloads + private final boolean announce; + // The provided callback (if any) + private final UpdateCallback callback; + // The plugin file (jar) + private final File file; + // Plugin running updater + private final Plugin plugin; + // Type of update check to run + private final UpdateType type; + // The folder that downloads will be placed in + private final File updateFolder; + // BukkitDev ServerMods API key + private String apiKey = null; + // Project's Curse ID + private int id = -1; + + /* Collected from Curse API */ + private boolean lastVersionCheck = false; + // Used for determining the outcome of the update process + private PluginUpdater.UpdateResult result = PluginUpdater.UpdateResult.SUCCESS; + // updater thread + private Thread thread; + // Connection to RSS + private URL url; + private String versionCustom; + private String versionGameVersion; + + /* Update process variables */ + private String versionLink; + private String versionName; + private String versionType; + + /** + * Initialize the updater. + * + * @param plugin The plugin that is checking for an update. + * @param id The dev.bukkit.org id of the project. + * @param file The file that the plugin is running from, get this by doing this.getFile() from + * within your main class. + * @param type Specify the type of update this will be. See {@link UpdateType} + * @param announce True if the program should announce the progress of new updates in console. + */ + public PluginUpdater(Plugin plugin, int id, File file, UpdateType type, boolean announce) { + this(plugin, id, file, type, null, announce); + } + + /** + * Initialize the updater with the provided callback. + * + * @param plugin The plugin that is checking for an update. + * @param id The dev.bukkit.org id of the project. + * @param file The file that the plugin is running from, get this by doing this.getFile() from + * within your main class. + * @param type Specify the type of update this will be. See {@link UpdateType} + * @param callback The callback instance to notify when the updater has finished + */ + public PluginUpdater(Plugin plugin, int id, File file, UpdateType type, UpdateCallback callback) { + this(plugin, id, file, type, callback, false); + } + + /** + * Initialize the updater with the provided callback. + * + * @param plugin The plugin that is checking for an update. + * @param id The dev.bukkit.org id of the project. + * @param file The file that the plugin is running from, get this by doing this.getFile() from + * within your main class. + * @param type Specify the type of update this will be. See {@link UpdateType} + * @param callback The callback instance to notify when the updater has finished + * @param announce True if the program should announce the progress of new updates in console. + */ + public PluginUpdater(Plugin plugin, int id, File file, UpdateType type, UpdateCallback callback, + boolean announce) { + this.plugin = plugin; + this.type = type; + this.announce = announce; + this.file = file; + this.id = id; + this.updateFolder = this.plugin.getServer().getUpdateFolderFile(); + this.callback = callback; + + final File pluginFile = this.plugin.getDataFolder().getParentFile(); + final File updaterFile = new File(pluginFile, "updater"); + final File updaterConfigFile = new File(updaterFile, "bedwarsrel.yml"); + + YamlConfiguration config = new YamlConfiguration(); + config.options().header( + "This configuration file affects all plugins using the updater system (version 2+ - http://forums.bukkit.org/threads/96681/ )" + + '\n' + + "If you wish to use your API key, read http://wiki.bukkit.org/ServerMods_API and place it below." + + '\n' + + "Some updating systems will not adhere to the disabled value, but these may be turned off in their plugin's configuration."); + config.addDefault(API_KEY_CONFIG_KEY, API_KEY_DEFAULT); + config.addDefault(DISABLE_CONFIG_KEY, DISABLE_DEFAULT); + + if (!updaterFile.exists()) { + this.fileIOOrError(updaterFile, updaterFile.mkdir(), true); + } + + boolean createFile = !updaterConfigFile.exists(); + try { + if (createFile) { + this.fileIOOrError(updaterConfigFile, updaterConfigFile.createNewFile(), true); + config.options().copyDefaults(true); + config.save(updaterConfigFile); + } else { + config.load(updaterConfigFile); + } + } catch (final Exception e) { + final String message; + if (createFile) { + message = "The updater could not create configuration at " + updaterFile.getAbsolutePath(); + } else { + message = "The updater could not load configuration at " + updaterFile.getAbsolutePath(); + } + this.plugin.getLogger().log(Level.SEVERE, message, e); + } + + if (config.getBoolean(DISABLE_CONFIG_KEY)) { + this.result = UpdateResult.DISABLED; + return; + } + + String key = config.getString(API_KEY_CONFIG_KEY); + if (API_KEY_DEFAULT.equalsIgnoreCase(key) || "".equals(key)) { + key = null; + } + + this.apiKey = key; + + try { + this.url = new URL(PluginUpdater.HOST + PluginUpdater.QUERY + this.id); + } catch (final MalformedURLException e) { + this.plugin.getLogger().log(Level.SEVERE, + "The project ID provided for updating, " + this.id + " is invalid.", e); + this.result = UpdateResult.FAIL_BADID; + } + + if (this.result != UpdateResult.FAIL_BADID) { + this.thread = new Thread(new UpdateRunnable()); + this.thread.start(); + } else { + runUpdater(); + } + } + + /** + * Remove possibly leftover files from the update folder. + */ + private void deleteOldFiles() { + // Just a quick check to make sure we didn't leave any files from last + // time... + File[] list = listFilesOrError(this.updateFolder); + for (final File xFile : list) { + if (xFile.getName().endsWith(".zip")) { + this.fileIOOrError(xFile, xFile.mkdir(), true); + } + } + } + + /** + * Download a file and save it to the specified folder. + */ + private void downloadFile() { + BufferedInputStream in = null; + FileOutputStream fout = null; + try { + URL fileUrl = new URL(this.versionLink); + final int fileLength = fileUrl.openConnection().getContentLength(); + in = new BufferedInputStream(fileUrl.openStream()); + fout = new FileOutputStream(new File(this.updateFolder, file.getName())); + + final byte[] data = new byte[PluginUpdater.BYTE_SIZE]; + int count; + if (this.announce) { + this.plugin.getLogger().info("About to download a new update: " + this.versionName); + } + long downloaded = 0; + while ((count = in.read(data, 0, PluginUpdater.BYTE_SIZE)) != -1) { + downloaded += count; + fout.write(data, 0, count); + final int percent = (int) ((downloaded * 100) / fileLength); + if (this.announce && ((percent % 10) == 0)) { + this.plugin.getLogger() + .info("Downloading update: " + percent + "% of " + fileLength + " bytes."); + } + } + } catch (Exception ex) { + this.plugin.getLogger().log(Level.WARNING, + "The auto-updater tried to download a new update, but was unsuccessful.", ex); + this.result = PluginUpdater.UpdateResult.FAIL_DOWNLOAD; + } finally { + try { + if (in != null) { + in.close(); + } + } catch (final IOException ex) { + this.plugin.getLogger().log(Level.SEVERE, null, ex); + } + try { + if (fout != null) { + fout.close(); + } + } catch (final IOException ex) { + this.plugin.getLogger().log(Level.SEVERE, null, ex); + } + } + } + + /** + * Perform a file operation and log any errors if it fails. + * + * @param file file operation is performed on. + * @param result result of file operation. + * @param create true if a file is being created, false if deleted. + */ + private void fileIOOrError(File file, boolean result, boolean create) { + if (!result) { + this.plugin.getLogger().severe("The updater could not " + (create ? "create" : "delete") + + " file at: " + file.getAbsolutePath()); + } + } + + /** + * Check for the version in the bedwars github repository + * + * @return version string + */ + private String getCustomVersion() { + String version = null; + + try { + URL url = + new URL("https://raw.githubusercontent.com/Yannici/bedwars-reloaded/master/release.txt"); + URLConnection connection = null; + + if (BedwarsRel.getInstance().isMineshafterPresent()) { + connection = url.openConnection(Proxy.NO_PROXY); + } else { + connection = url.openConnection(); + } + + connection.setUseCaches(false); + connection.setDoOutput(true); + + // request + BufferedReader reader = + new BufferedReader(new InputStreamReader(connection.getInputStream())); + String line; + ArrayList versions = new ArrayList(); + while ((line = reader.readLine()) != null) { + versions.add(line); + } + if (BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_7")) { + version = versions.get(0); + } else { + version = versions.get(1); + } + reader.close(); + + } catch (Exception ex) { + this.plugin.getLogger().severe("The updater could not check version!"); + } + + return version; + } + + /** + * Get the latest version's direct file link. + * + * @return latest version's file link. + */ + public String getLatestFileLink() { + this.waitForThread(); + return this.versionLink; + } + + /** + * Get the latest version's game version (such as "CB 1.2.5-R1.0"). + * + * @return latest version's game version. + */ + public String getLatestGameVersion() { + this.waitForThread(); + return this.versionGameVersion; + } + + /** + * Get the latest version's name (such as "Project v1.0"). + * + * @return latest version's name. + */ + public String getLatestName() { + this.waitForThread(); + return this.versionName; + } + + /** + * Get the latest version's release type. + * + * @return latest version's release type. + * @see ReleaseType + */ + public ReleaseType getLatestType() { + this.waitForThread(); + if (this.versionType != null) { + for (ReleaseType type : ReleaseType.values()) { + if (this.versionType.equalsIgnoreCase(type.name())) { + return type; + } + } + } + return null; + } + + /** + * Get the result of the update process. + * + * @return result of the update process. + * @see UpdateResult + */ + public PluginUpdater.UpdateResult getResult() { + this.waitForThread(); + return this.result; + } + + /** + * Gets the latest version check result + * + * @return latest version check result + */ + public boolean isLatestVersionCheck() { + return this.lastVersionCheck; + } + + private File[] listFilesOrError(File folder) { + File[] contents = folder.listFiles(); + if (contents == null) { + this.plugin.getLogger() + .severe("The updater could not access files at: " + this.updateFolder.getAbsolutePath()); + return new File[0]; + } else { + return contents; + } + } + + /** + * Find any new files extracted from an update into the plugin's data directory. + * + * @param zipPath path of extracted files. + */ + private void moveNewZipFiles(String zipPath) { + File[] list = listFilesOrError(new File(zipPath)); + for (final File dFile : list) { + if (dFile.isDirectory() && this.pluginExists(dFile.getName())) { + // Current dir + final File oFile = new File(this.plugin.getDataFolder().getParent(), dFile.getName()); + // List of existing files in the new dir + final File[] dList = listFilesOrError(dFile); + // List of existing files in the current dir + final File[] oList = listFilesOrError(oFile); + for (File cFile : dList) { + // Loop through all the files in the new dir + boolean found = false; + for (final File xFile : oList) { + // Loop through all the contents in the current dir to + // see if it exists + if (xFile.getName().equals(cFile.getName())) { + found = true; + break; + } + } + if (!found) { + // Move the new file into the current dir + File output = new File(oFile, cFile.getName()); + this.fileIOOrError(output, cFile.renameTo(output), true); + } else { + // This file already exists, so we don't need it + // anymore. + this.fileIOOrError(cFile, cFile.delete(), false); + } + } + } + this.fileIOOrError(dFile, dFile.delete(), false); + } + File zip = new File(zipPath); + this.fileIOOrError(zip, zip.delete(), false); + } + + /** + * Check if the name of a jar is one of the plugins currently installed, used for extracting the + * correct files out of a zip. + * + * @param name a name to check for inside the plugins folder. + * @return true if a file inside the plugins folder is named this. + */ + private boolean pluginExists(String name) { + File[] plugins = listFilesOrError(new File("plugins")); + for (final File file : plugins) { + if (file.getName().equals(name)) { + return true; + } + } + return false; + } + + /** + * Make a connection to the BukkitDev API and request the newest file's details. + * + * @return true if successful. + */ + private boolean read() { + try { + final URLConnection conn = this.url.openConnection(); + conn.setConnectTimeout(5000); + + if (this.apiKey != null) { + conn.addRequestProperty("X-API-Key", this.apiKey); + } + conn.addRequestProperty("User-Agent", PluginUpdater.USER_AGENT); + conn.setDoOutput(true); + + final BufferedReader reader = + new BufferedReader(new InputStreamReader(conn.getInputStream())); + final String response = reader.readLine(); + + final JSONArray array = (JSONArray) JSONValue.parse(response); + + if (array.isEmpty()) { + this.plugin.getLogger() + .warning("The updater could not find any files for the project id " + this.id); + this.result = UpdateResult.FAIL_BADID; + return false; + } + + JSONObject latestUpdate = (JSONObject) array.get(array.size() - 1); + this.versionName = (String) latestUpdate.get(PluginUpdater.TITLE_VALUE); + this.versionLink = (String) latestUpdate.get(PluginUpdater.LINK_VALUE); + this.versionType = (String) latestUpdate.get(PluginUpdater.TYPE_VALUE); + this.versionGameVersion = (String) latestUpdate.get(PluginUpdater.VERSION_VALUE); + this.versionCustom = this.getCustomVersion(); + + return true; + } catch (final IOException e) { + if (e.getMessage().contains("HTTP response code: 403")) { + this.plugin.getLogger() + .severe("dev.bukkit.org rejected the API key provided in plugins/updater/config.yml"); + this.plugin.getLogger() + .severe("Please double-check your configuration to ensure it is correct."); + this.result = UpdateResult.FAIL_APIKEY; + } else { + this.plugin.getLogger() + .severe("The updater could not contact dev.bukkit.org for updating."); + this.plugin.getLogger().severe( + "If you have not recently modified your configuration and this is the first time you are seeing this message, the site may be experiencing temporary downtime."); + this.result = UpdateResult.FAIL_DBO; + } + this.plugin.getLogger().log(Level.SEVERE, null, e); + return false; + } + } + + private void runCallback() { + this.callback.onFinish(this); + } + + private void runUpdater() { + if (this.url != null && (this.read() && this.versionCheck())) { + this.lastVersionCheck = true; + // Obtain the results of the project's file feed + if ((this.versionLink != null) && (this.type != UpdateType.NO_DOWNLOAD)) { + String name = this.file.getName(); + // If it's a zip file, it shouldn't be downloaded as the + // plugin's name + if (this.versionLink.endsWith(".zip")) { + name = this.versionLink.substring(this.versionLink.lastIndexOf("/") + 1); + } + this.saveFile(name); + } else { + this.result = UpdateResult.UPDATE_AVAILABLE; + } + } else { + this.result = UpdateResult.NO_UPDATE; + this.lastVersionCheck = false; + } + + if (this.callback != null) { + new BukkitRunnable() { + @Override + public void run() { + runCallback(); + } + }.runTask(this.plugin); + } + } + + /** + * Save an update from dev.bukkit.org into the server's update folder. + * + * @param file the name of the file to save it as. + */ + private void saveFile(String file) { + final File folder = this.updateFolder; + + deleteOldFiles(); + if (!folder.exists()) { + this.fileIOOrError(folder, folder.mkdir(), true); + } + downloadFile(); + + // Check to see if it's a zip file, if it is, unzip it. + final File dFile = new File(folder.getAbsolutePath(), file); + if (dFile.getName().endsWith(".zip")) { + // Unzip + this.unzip(dFile.getAbsolutePath()); + } + if (this.announce) { + this.plugin.getLogger().info("Finished updating."); + } + } + + /** + * If you wish to run mathematical versioning checks, edit this method. + *

+ * With default behavior, updater will NOT verify that a remote version available on BukkitDev + * which is not this version is indeed an "update". If a version is present on BukkitDev that is + * not the version that is currently running, updater will assume that it is a newer version. This + * is because there is no standard versioning scheme, and creating a calculation that can + * determine whether a new update is actually an update is sometimes extremely complicated. + *

+ *

+ * updater will call this method from {@link #versionCheck()} before deciding whether the remote + * version is actually an update. If you have a specific versioning scheme with which a + * mathematical determination can be reliably made to decide whether one version is higher than + * another, you may revise this method, using the local and remote version parameters, to execute + * the appropriate check. + *

+ *

+ * Returning a value of false will tell the update process that this is NOT a new version. + * Without revision, this method will always consider a remote version at all different from that + * of the local version a new update. + *

+ * + * @param localVersion the current version + * @param remoteVersion the remote version + * @return true if updater should consider the remote version an update, false if not. + */ + public boolean shouldUpdate(String localVersion, String remoteVersion) { + return !localVersion.equalsIgnoreCase(remoteVersion); + } + + /** + * Part of Zip-File-Extractor, modified by Gravity for use with updater. + * + * @param file the location of the file to extract. + */ + private void unzip(String file) { + final File fSourceZip = new File(file); + try { + final String zipPath = file.substring(0, file.length() - 4); + ZipFile zipFile = new ZipFile(fSourceZip); + Enumeration e = zipFile.entries(); + while (e.hasMoreElements()) { + ZipEntry entry = e.nextElement(); + File destinationFilePath = new File(zipPath, entry.getName()); + this.fileIOOrError(destinationFilePath.getParentFile(), + destinationFilePath.getParentFile().mkdirs(), true); + if (!entry.isDirectory()) { + final BufferedInputStream bis = new BufferedInputStream(zipFile.getInputStream(entry)); + int b; + final byte[] buffer = new byte[PluginUpdater.BYTE_SIZE]; + final FileOutputStream fos = new FileOutputStream(destinationFilePath); + final BufferedOutputStream bos = new BufferedOutputStream(fos, PluginUpdater.BYTE_SIZE); + while ((b = bis.read(buffer, 0, PluginUpdater.BYTE_SIZE)) != -1) { + bos.write(buffer, 0, b); + } + bos.flush(); + bos.close(); + bis.close(); + final String name = destinationFilePath.getName(); + if (name.endsWith(".jar") && this.pluginExists(name)) { + File output = new File(this.updateFolder, name); + this.fileIOOrError(output, destinationFilePath.renameTo(output), true); + } + } + } + zipFile.close(); + + // Move any plugin data folders that were included to the right + // place, Bukkit won't do this for us. + moveNewZipFiles(zipPath); + + } catch (final IOException e) { + this.plugin.getLogger().log(Level.SEVERE, + "The auto-updater tried to unzip a new update file, but was unsuccessful.", e); + this.result = PluginUpdater.UpdateResult.FAIL_DOWNLOAD; + } finally { + this.fileIOOrError(fSourceZip, fSourceZip.delete(), false); + } + } + + /** + * Check to see if the program should continue by evaluating whether the plugin is already + * updated, or shouldn't be updated. + * + * @return true if the version was located and is not the same as the remote's newest. + */ + private boolean versionCheck() { + String currentVersion = this.versionCustom; + + if (currentVersion == null) { + return false; + } + + String[] activeVersionSplit = this.plugin.getDescription().getVersion().split("\\."); + String[] currentVersionSplit = currentVersion.split("\\."); + + try { + int activeMasterVersion = Integer.valueOf(activeVersionSplit[0]); + int currentMasterVersion = Integer.valueOf(currentVersionSplit[0]); + if (currentMasterVersion > activeMasterVersion) { + return true; + } else if (activeMasterVersion > currentMasterVersion) { + return false; + } + + int activeMilestoneVersion = Integer.valueOf(activeVersionSplit[1]); + int currentMilestoneVersion = Integer.valueOf(currentVersionSplit[1]); + if (currentMilestoneVersion > activeMilestoneVersion) { + return true; + } else if (activeMilestoneVersion > currentMilestoneVersion) { + return false; + } + + int activeBuildVersion = Integer.valueOf(activeVersionSplit[2]); + int currentBuildVersion = Integer.valueOf(currentVersionSplit[2]); + if (currentBuildVersion > activeBuildVersion) { + return true; + } else if (activeBuildVersion > currentBuildVersion) { + return false; + } + } catch (Exception ex) { + // just error handling + } + + return false; + } + + /** + * As the result of updater output depends on the thread's completion, it is necessary to wait for + * the thread to finish before allowing anyone to check the result. + */ + private void waitForThread() { + if ((this.thread != null) && this.thread.isAlive()) { + try { + this.thread.join(); + } catch (final InterruptedException e) { + this.plugin.getLogger().log(Level.SEVERE, null, e); + } + } + } + + /** + * Represents the various release types of a file on BukkitDev. + */ + public enum ReleaseType { + /** + * An "alpha" file. + */ + ALPHA, + /** + * A "beta" file. + */ + BETA, + /** + * A "release" file. + */ + RELEASE + } + + /** + * Gives the developer the result of the update process. Can be obtained by called + * {@link #getResult()} + */ + public enum UpdateResult { + /** + * The updater found an update, and has readied it to be loaded the next time the server + * restarts/reloads. + */ + SUCCESS, + /** + * The updater did not find an update, and nothing was downloaded. + */ + NO_UPDATE, + /** + * The server administrator has disabled the updating system. + */ + DISABLED, + /** + * The updater found an update, but was unable to download it. + */ + FAIL_DOWNLOAD, + /** + * For some reason, the updater was unable to contact dev.bukkit.org to download the file. + */ + FAIL_DBO, + /** + * When running the version check, the file on DBO did not contain a recognizable version. + */ + FAIL_NOVERSION, + /** + * The id provided by the plugin running the updater was invalid and doesn't exist on DBO. + */ + FAIL_BADID, + /** + * The server administrator has improperly configured their API key in the configuration. + */ + FAIL_APIKEY, + /** + * The updater found an update, but because of the UpdateType being set to NO_DOWNLOAD, it + * wasn't downloaded. + */ + UPDATE_AVAILABLE + } + + /** + * Allows the developer to specify the type of update that will be run. + */ + public enum UpdateType { + /** + * Run a version check, and then if the file is out of date, download the newest version. + */ + DEFAULT, + /** + * Don't run a version check, just find the latest update and download it. + */ + NO_VERSION_CHECK, + /** + * Get information about the version and the download size, but don't actually download + * anything. + */ + NO_DOWNLOAD + } + + /** + * Called on main thread when the updater has finished working, regardless of result. + */ + public interface UpdateCallback { + + /** + * Called when the updater has finished working. + * + * @param updater The updater instance + */ + void onFinish(PluginUpdater updater); + } + + private class UpdateRunnable implements Runnable { + + @Override + public void run() { + runUpdater(); + } + } +} diff --git a/common/src/main/java/io/github/bedwarsrel/utils/BStatsMetrics.java b/common/src/main/java/io/github/bedwarsrel/utils/BStatsMetrics.java new file mode 100644 index 0000000..bce5fa6 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/utils/BStatsMetrics.java @@ -0,0 +1,1032 @@ +package io.github.bedwarsrel.utils; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; +import java.util.logging.Level; +import java.util.zip.GZIPOutputStream; +import javax.net.ssl.HttpsURLConnection; +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.plugin.ServicePriority; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; + +/** + * bStats collects some data for plugin authors. + * + * Check out https://bStats.org/ to learn more about bStats! + */ +@SuppressWarnings("unchecked") +public class BStatsMetrics { + + // The version of this bStats class + public static final int B_STATS_VERSION = 1; + + // The url to which the data is sent + private static final String URL = "https://bStats.org/submitData"; + + // Should failed requests be logged? + private static boolean logFailedRequests; + + // The uuid of the server + private static String serverUUID; + // A list with all custom charts + private final List charts = new ArrayList<>(); + // The plugin + private final JavaPlugin plugin; + + /** + * Class constructor. + * + * @param plugin The plugin which stats should be submitted. + */ + public BStatsMetrics(JavaPlugin plugin) { + if (plugin == null) { + throw new IllegalArgumentException("Plugin cannot be null!"); + } + this.plugin = plugin; + + // Get the config file + File bStatsFolder = new File(plugin.getDataFolder().getParentFile(), "bStats"); + File configFile = new File(bStatsFolder, "config.yml"); + YamlConfiguration config = YamlConfiguration.loadConfiguration(configFile); + + // Check if the config file exists + if (!config.isSet("serverUuid")) { + + // Add default values + config.addDefault("enabled", true); + // Every server gets it's unique random id. + config.addDefault("serverUuid", UUID.randomUUID().toString()); + // Should failed request be logged? + config.addDefault("logFailedRequests", false); + + // Inform the server owners about bStats + config.options() + .header( + "bStats collects some data for plugin authors like how many servers are using their plugins.\n" + + "To honor their work, you should not disable it.\n" + + "This has nearly no effect on the server performance!\n" + + "Check out https://bStats.org/ to learn more :)") + .copyDefaults(true); + try { + config.save(configFile); + } catch (IOException ignored) { + } + } + + // Load the data + serverUUID = config.getString("serverUuid"); + logFailedRequests = config.getBoolean("logFailedRequests", false); + if (config.getBoolean("enabled", true)) { + boolean found = false; + // Search for all other bStats Metrics classes to see if we are the first one + for (Class service : Bukkit.getServicesManager().getKnownServices()) { + try { + service.getField("B_STATS_VERSION"); // Our identifier :) + found = true; // We aren't the first + break; + } catch (NoSuchFieldException ignored) { + } + } + // Register our service + Bukkit.getServicesManager().register(BStatsMetrics.class, this, plugin, + ServicePriority.Normal); + if (!found) { + // We are the first! + startSubmitting(); + } + } + } + + /** + * Gzips the given String. + * + * @param str The string to gzip. + * @return The gzipped String. + * @throws IOException If the compression failed. + */ + private static byte[] compress(final String str) throws IOException { + if (str == null) { + return null; + } + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + GZIPOutputStream gzip = new GZIPOutputStream(outputStream); + gzip.write(str.getBytes("UTF-8")); + gzip.close(); + return outputStream.toByteArray(); + } + + /** + * Sends the data to the bStats server. + * + * @param data The data to send. + * @throws Exception If the request failed. + */ + private static void sendData(JSONObject data) throws Exception { + if (data == null) { + throw new IllegalArgumentException("Data cannot be null!"); + } + if (Bukkit.isPrimaryThread()) { + throw new IllegalAccessException("This method must not be called from the main thread!"); + } + HttpsURLConnection connection = (HttpsURLConnection) new URL(URL).openConnection(); + + // Compress the data to save bandwidth + byte[] compressedData = compress(data.toString()); + + // Add headers + connection.setRequestMethod("POST"); + connection.addRequestProperty("Accept", "application/json"); + connection.addRequestProperty("Connection", "close"); + connection.addRequestProperty("Content-Encoding", "gzip"); // We gzip our request + connection.addRequestProperty("Content-Length", String.valueOf(compressedData.length)); + connection.setRequestProperty("Content-Type", "application/json"); // We send our data in JSON + // format + connection.setRequestProperty("User-Agent", "MC-Server/" + B_STATS_VERSION); + + // Send data + connection.setDoOutput(true); + DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream()); + outputStream.write(compressedData); + outputStream.flush(); + outputStream.close(); + + connection.getInputStream().close(); // We don't care about the response - Just send our data :) + } + + /** + * Adds a custom chart. + * + * @param chart The chart to add. + */ + public void addCustomChart(CustomChart chart) { + if (chart == null) { + throw new IllegalArgumentException("Chart cannot be null!"); + } + charts.add(chart); + } + + /** + * Gets the plugin specific data. This method is called using Reflection. + * + * @return The plugin specific data. + */ + public JSONObject getPluginData() { + JSONObject data = new JSONObject(); + + String pluginName = plugin.getDescription().getName(); + String pluginVersion = plugin.getDescription().getVersion(); + + data.put("pluginName", pluginName); // Append the name of the plugin + data.put("pluginVersion", pluginVersion); // Append the version of the plugin + JSONArray customCharts = new JSONArray(); + for (CustomChart customChart : charts) { + // Add the data of the custom charts + JSONObject chart = customChart.getRequestJsonObject(); + if (chart == null) { // If the chart is null, we skip it + continue; + } + customCharts.add(chart); + } + data.put("customCharts", customCharts); + + return data; + } + + /** + * Gets the server specific data. + * + * @return The server specific data. + */ + private JSONObject getServerData() { + // Minecraft specific data + int playerAmount = Bukkit.getOnlinePlayers().size(); + int onlineMode = Bukkit.getOnlineMode() ? 1 : 0; + String bukkitVersion = org.bukkit.Bukkit.getVersion(); + bukkitVersion = + bukkitVersion.substring(bukkitVersion.indexOf("MC: ") + 4, bukkitVersion.length() - 1); + + // OS/Java specific data + String javaVersion = System.getProperty("java.version"); + String osName = System.getProperty("os.name"); + String osArch = System.getProperty("os.arch"); + String osVersion = System.getProperty("os.version"); + int coreCount = Runtime.getRuntime().availableProcessors(); + + JSONObject data = new JSONObject(); + + data.put("serverUUID", serverUUID); + + data.put("playerAmount", playerAmount); + data.put("onlineMode", onlineMode); + data.put("bukkitVersion", bukkitVersion); + + data.put("javaVersion", javaVersion); + data.put("osName", osName); + data.put("osArch", osArch); + data.put("osVersion", osVersion); + data.put("coreCount", coreCount); + + return data; + } + + /** + * Starts the Scheduler which submits our data every 30 minutes. + */ + private void startSubmitting() { + final Timer timer = new Timer(true); // We use a timer cause the Bukkit scheduler is affected by + // server lags + timer.scheduleAtFixedRate(new TimerTask() { + @Override + public void run() { + if (!plugin.isEnabled()) { // Plugin was disabled + timer.cancel(); + return; + } + // Nevertheless we want our code to run in the Bukkit main thread, so we have to use the + // Bukkit scheduler + // Don't be afraid! The connection to the bStats server is still async, only the stats + // collection is sync ;) + Bukkit.getScheduler().runTask(plugin, new Runnable() { + @Override + public void run() { + submitData(); + } + }); + } + }, 1000 * 60 * 5, 1000 * 60 * 30); + // Submit the data every 30 minutes, first time after 5 minutes to give other plugins enough + // time to start + // WARNING: Changing the frequency has no effect but your plugin WILL be blocked/deleted! + // WARNING: Just don't do it! + } + + /** + * Collects the data and sends it afterwards. + */ + private void submitData() { + final JSONObject data = getServerData(); + + JSONArray pluginData = new JSONArray(); + // Search for all other bStats Metrics classes to get their plugin data + for (Class service : Bukkit.getServicesManager().getKnownServices()) { + try { + service.getField("B_STATS_VERSION"); // Our identifier :) + } catch (NoSuchFieldException ignored) { + continue; // Continue "searching" + } + // Found one! + try { + pluginData.add( + service.getMethod("getPluginData").invoke(Bukkit.getServicesManager().load(service))); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) { + } + } + + data.put("plugins", pluginData); + + // Create a new thread for the connection to the bStats server + new Thread(new Runnable() { + @Override + public void run() { + try { + // Send the data + sendData(data); + } catch (Exception e) { + // Something went wrong! :( + if (logFailedRequests) { + plugin.getLogger().log(Level.WARNING, + "Could not submit plugin stats of " + plugin.getName(), e); + } + } + } + }).start(); + + } + + /** + * A enum which is used for custom maps. + */ + public enum Country { + + /** + * bStats will use the country of the server. + */ + AUTO_DETECT("AUTO", "Auto Detected"), + + ANDORRA("AD", "Andorra"), + UNITED_ARAB_EMIRATES("AE", "United Arab Emirates"), + AFGHANISTAN("AF", "Afghanistan"), + ANTIGUA_AND_BARBUDA("AG", "Antigua and Barbuda"), + ANGUILLA("AI", "Anguilla"), + ALBANIA("AL", "Albania"), + ARMENIA("AM", "Armenia"), + NETHERLANDS_ANTILLES("AN", "Netherlands Antilles"), + ANGOLA("AO", "Angola"), + ANTARCTICA("AQ", "Antarctica"), + ARGENTINA("AR", "Argentina"), + AMERICAN_SAMOA("AS", "American Samoa"), + AUSTRIA("AT", "Austria"), + AUSTRALIA("AU", "Australia"), + ARUBA("AW", "Aruba"), + ÅLAND_ISLANDS("AX", "Åland Islands"), + AZERBAIJAN("AZ", "Azerbaijan"), + BOSNIA_AND_HERZEGOVINA("BA", "Bosnia and Herzegovina"), + BARBADOS("BB", "Barbados"), + BANGLADESH("BD", "Bangladesh"), + BELGIUM("BE", "Belgium"), + BURKINA_FASO("BF", "Burkina Faso"), + BULGARIA("BG", "Bulgaria"), + BAHRAIN("BH", "Bahrain"), + BURUNDI("BI", "Burundi"), + BENIN("BJ", "Benin"), + SAINT_BARTHÉLEMY("BL", "Saint Barthélemy"), + BERMUDA("BM", "Bermuda"), + BRUNEI("BN", "Brunei"), + BOLIVIA("BO", "Bolivia"), + BONAIRE_SINT_EUSTATIUS_AND_SABA("BQ", "Bonaire, Sint Eustatius and Saba"), + BRAZIL("BR", "Brazil"), + BAHAMAS("BS", "Bahamas"), + BHUTAN("BT", "Bhutan"), + BOUVET_ISLAND("BV", "Bouvet Island"), + BOTSWANA("BW", "Botswana"), + BELARUS("BY", "Belarus"), + BELIZE("BZ", "Belize"), + CANADA("CA", "Canada"), + COCOS_ISLANDS("CC", "Cocos Islands"), + THE_DEMOCRATIC_REPUBLIC_OF_CONGO("CD", "The Democratic Republic Of Congo"), + CENTRAL_AFRICAN_REPUBLIC("CF", "Central African Republic"), + CONGO("CG", "Congo"), + SWITZERLAND("CH", "Switzerland"), + CÔTE_D_IVOIRE("CI", "Côte d'Ivoire"), + COOK_ISLANDS("CK", "Cook Islands"), + CHILE("CL", "Chile"), + CAMEROON("CM", "Cameroon"), + CHINA("CN", "China"), + COLOMBIA("CO", "Colombia"), + COSTA_RICA("CR", "Costa Rica"), + CUBA("CU", "Cuba"), + CAPE_VERDE("CV", "Cape Verde"), + CURAÇAO("CW", "Curaçao"), + CHRISTMAS_ISLAND("CX", "Christmas Island"), + CYPRUS("CY", "Cyprus"), + CZECH_REPUBLIC("CZ", "Czech Republic"), + GERMANY("DE", "Germany"), + DJIBOUTI("DJ", "Djibouti"), + DENMARK("DK", "Denmark"), + DOMINICA("DM", "Dominica"), + DOMINICAN_REPUBLIC("DO", "Dominican Republic"), + ALGERIA("DZ", "Algeria"), + ECUADOR("EC", "Ecuador"), + ESTONIA("EE", "Estonia"), + EGYPT("EG", "Egypt"), + WESTERN_SAHARA("EH", "Western Sahara"), + ERITREA("ER", "Eritrea"), + SPAIN("ES", "Spain"), + ETHIOPIA("ET", "Ethiopia"), + FINLAND("FI", "Finland"), + FIJI("FJ", "Fiji"), + FALKLAND_ISLANDS("FK", "Falkland Islands"), + MICRONESIA("FM", "Micronesia"), + FAROE_ISLANDS("FO", "Faroe Islands"), + FRANCE("FR", "France"), + GABON("GA", "Gabon"), + UNITED_KINGDOM("GB", "United Kingdom"), + GRENADA("GD", "Grenada"), + GEORGIA("GE", "Georgia"), + FRENCH_GUIANA("GF", "French Guiana"), + GUERNSEY("GG", "Guernsey"), + GHANA("GH", "Ghana"), + GIBRALTAR("GI", "Gibraltar"), + GREENLAND("GL", "Greenland"), + GAMBIA("GM", "Gambia"), + GUINEA("GN", "Guinea"), + GUADELOUPE("GP", "Guadeloupe"), + EQUATORIAL_GUINEA("GQ", "Equatorial Guinea"), + GREECE("GR", "Greece"), + SOUTH_GEORGIA_AND_THE_SOUTH_SANDWICH_ISLANDS("GS", + "South Georgia And The South Sandwich Islands"), + GUATEMALA("GT", "Guatemala"), + GUAM("GU", "Guam"), + GUINEA_BISSAU("GW", "Guinea-Bissau"), + GUYANA("GY", "Guyana"), + HONG_KONG("HK", "Hong Kong"), + HEARD_ISLAND_AND_MCDONALD_ISLANDS("HM", "Heard Island And McDonald Islands"), + HONDURAS("HN", "Honduras"), + CROATIA("HR", "Croatia"), + HAITI("HT", "Haiti"), + HUNGARY("HU", "Hungary"), + INDONESIA("ID", "Indonesia"), + IRELAND("IE", "Ireland"), + ISRAEL("IL", "Israel"), + ISLE_OF_MAN("IM", "Isle Of Man"), + INDIA("IN", "India"), + BRITISH_INDIAN_OCEAN_TERRITORY("IO", "British Indian Ocean Territory"), + IRAQ("IQ", "Iraq"), + IRAN("IR", "Iran"), + ICELAND("IS", "Iceland"), + ITALY("IT", "Italy"), + JERSEY("JE", "Jersey"), + JAMAICA("JM", "Jamaica"), + JORDAN("JO", "Jordan"), + JAPAN("JP", "Japan"), + KENYA("KE", "Kenya"), + KYRGYZSTAN("KG", "Kyrgyzstan"), + CAMBODIA("KH", "Cambodia"), + KIRIBATI("KI", "Kiribati"), + COMOROS("KM", "Comoros"), + SAINT_KITTS_AND_NEVIS("KN", "Saint Kitts And Nevis"), + NORTH_KOREA("KP", "North Korea"), + SOUTH_KOREA("KR", "South Korea"), + KUWAIT("KW", "Kuwait"), + CAYMAN_ISLANDS("KY", "Cayman Islands"), + KAZAKHSTAN("KZ", "Kazakhstan"), + LAOS("LA", "Laos"), + LEBANON("LB", "Lebanon"), + SAINT_LUCIA("LC", "Saint Lucia"), + LIECHTENSTEIN("LI", "Liechtenstein"), + SRI_LANKA("LK", "Sri Lanka"), + LIBERIA("LR", "Liberia"), + LESOTHO("LS", "Lesotho"), + LITHUANIA("LT", "Lithuania"), + LUXEMBOURG("LU", "Luxembourg"), + LATVIA("LV", "Latvia"), + LIBYA("LY", "Libya"), + MOROCCO("MA", "Morocco"), + MONACO("MC", "Monaco"), + MOLDOVA("MD", "Moldova"), + MONTENEGRO("ME", "Montenegro"), + SAINT_MARTIN("MF", "Saint Martin"), + MADAGASCAR("MG", "Madagascar"), + MARSHALL_ISLANDS("MH", "Marshall Islands"), + MACEDONIA("MK", "Macedonia"), + MALI("ML", "Mali"), + MYANMAR("MM", "Myanmar"), + MONGOLIA("MN", "Mongolia"), + MACAO("MO", "Macao"), + NORTHERN_MARIANA_ISLANDS("MP", "Northern Mariana Islands"), + MARTINIQUE("MQ", "Martinique"), + MAURITANIA("MR", "Mauritania"), + MONTSERRAT("MS", "Montserrat"), + MALTA("MT", "Malta"), + MAURITIUS("MU", "Mauritius"), + MALDIVES("MV", "Maldives"), + MALAWI("MW", "Malawi"), + MEXICO("MX", "Mexico"), + MALAYSIA("MY", "Malaysia"), + MOZAMBIQUE("MZ", "Mozambique"), + NAMIBIA("NA", "Namibia"), + NEW_CALEDONIA("NC", "New Caledonia"), + NIGER("NE", "Niger"), + NORFOLK_ISLAND("NF", "Norfolk Island"), + NIGERIA("NG", "Nigeria"), + NICARAGUA("NI", "Nicaragua"), + NETHERLANDS("NL", "Netherlands"), + NORWAY("NO", "Norway"), + NEPAL("NP", "Nepal"), + NAURU("NR", "Nauru"), + NIUE("NU", "Niue"), + NEW_ZEALAND("NZ", "New Zealand"), + OMAN("OM", "Oman"), + PANAMA("PA", "Panama"), + PERU("PE", "Peru"), + FRENCH_POLYNESIA("PF", "French Polynesia"), + PAPUA_NEW_GUINEA("PG", "Papua New Guinea"), + PHILIPPINES("PH", "Philippines"), + PAKISTAN("PK", "Pakistan"), + POLAND("PL", "Poland"), + SAINT_PIERRE_AND_MIQUELON("PM", "Saint Pierre And Miquelon"), + PITCAIRN("PN", "Pitcairn"), + PUERTO_RICO("PR", "Puerto Rico"), + PALESTINE("PS", "Palestine"), + PORTUGAL("PT", "Portugal"), + PALAU("PW", "Palau"), + PARAGUAY("PY", "Paraguay"), + QATAR("QA", "Qatar"), + REUNION("RE", "Reunion"), + ROMANIA("RO", "Romania"), + SERBIA("RS", "Serbia"), + RUSSIA("RU", "Russia"), + RWANDA("RW", "Rwanda"), + SAUDI_ARABIA("SA", "Saudi Arabia"), + SOLOMON_ISLANDS("SB", "Solomon Islands"), + SEYCHELLES("SC", "Seychelles"), + SUDAN("SD", "Sudan"), + SWEDEN("SE", "Sweden"), + SINGAPORE("SG", "Singapore"), + SAINT_HELENA("SH", "Saint Helena"), + SLOVENIA("SI", "Slovenia"), + SVALBARD_AND_JAN_MAYEN("SJ", "Svalbard And Jan Mayen"), + SLOVAKIA("SK", "Slovakia"), + SIERRA_LEONE("SL", "Sierra Leone"), + SAN_MARINO("SM", "San Marino"), + SENEGAL("SN", "Senegal"), + SOMALIA("SO", "Somalia"), + SURINAME("SR", "Suriname"), + SOUTH_SUDAN("SS", "South Sudan"), + SAO_TOME_AND_PRINCIPE("ST", "Sao Tome And Principe"), + EL_SALVADOR("SV", "El Salvador"), + SINT_MAARTEN_DUTCH_PART("SX", "Sint Maarten (Dutch part)"), + SYRIA("SY", "Syria"), + SWAZILAND("SZ", "Swaziland"), + TURKS_AND_CAICOS_ISLANDS("TC", "Turks And Caicos Islands"), + CHAD("TD", "Chad"), + FRENCH_SOUTHERN_TERRITORIES("TF", "French Southern Territories"), + TOGO("TG", "Togo"), + THAILAND("TH", "Thailand"), + TAJIKISTAN("TJ", "Tajikistan"), + TOKELAU("TK", "Tokelau"), + TIMOR_LESTE("TL", "Timor-Leste"), + TURKMENISTAN("TM", "Turkmenistan"), + TUNISIA("TN", "Tunisia"), + TONGA("TO", "Tonga"), + TURKEY("TR", "Turkey"), + TRINIDAD_AND_TOBAGO("TT", "Trinidad and Tobago"), + TUVALU("TV", "Tuvalu"), + TAIWAN("TW", "Taiwan"), + TANZANIA("TZ", "Tanzania"), + UKRAINE("UA", "Ukraine"), + UGANDA("UG", "Uganda"), + UNITED_STATES_MINOR_OUTLYING_ISLANDS("UM", "United States Minor Outlying Islands"), + UNITED_STATES("US", "United States"), + URUGUAY("UY", "Uruguay"), + UZBEKISTAN("UZ", "Uzbekistan"), + VATICAN("VA", "Vatican"), + SAINT_VINCENT_AND_THE_GRENADINES("VC", "Saint Vincent And The Grenadines"), + VENEZUELA("VE", "Venezuela"), + BRITISH_VIRGIN_ISLANDS("VG", "British Virgin Islands"), + U_S__VIRGIN_ISLANDS("VI", "U.S. Virgin Islands"), + VIETNAM("VN", "Vietnam"), + VANUATU("VU", "Vanuatu"), + WALLIS_AND_FUTUNA("WF", "Wallis And Futuna"), + SAMOA("WS", "Samoa"), + YEMEN("YE", "Yemen"), + MAYOTTE("YT", "Mayotte"), + SOUTH_AFRICA("ZA", "South Africa"), + ZAMBIA("ZM", "Zambia"), + ZIMBABWE("ZW", "Zimbabwe"); + + private String isoTag; + private String name; + + Country(String isoTag, String name) { + this.isoTag = isoTag; + this.name = name; + } + + /** + * Gets a country by it's iso tag. + * + * @param isoTag The iso tag of the county. + * @return The country with the given iso tag or null if unknown. + */ + public static Country byIsoTag(String isoTag) { + for (Country country : Country.values()) { + if (country.getCountryIsoTag().equals(isoTag)) { + return country; + } + } + return null; + } + + /** + * Gets a country by a locale. + * + * @param locale The locale. + * @return The country from the giben locale or null if unknown country or if the + * locale does not contain a country. + */ + public static Country byLocale(Locale locale) { + return byIsoTag(locale.getCountry()); + } + + /** + * Gets the iso tag of the country. + * + * @return The iso tag of the country. + */ + public String getCountryIsoTag() { + return isoTag; + } + + /** + * Gets the name of the country. + * + * @return The name of the country. + */ + public String getCountryName() { + return name; + } + + } + + /** + * Represents a custom advanced bar chart. + */ + public static abstract class AdvancedBarChart extends CustomChart { + + /** + * Class constructor. + * + * @param chartId The id of the chart. + */ + public AdvancedBarChart(String chartId) { + super(chartId); + } + + @Override + protected JSONObject getChartData() { + JSONObject data = new JSONObject(); + JSONObject values = new JSONObject(); + HashMap map = getValues(new HashMap()); + if (map == null || map.isEmpty()) { + // Null = skip the chart + return null; + } + boolean allSkipped = true; + for (Map.Entry entry : map.entrySet()) { + if (entry.getValue().length == 0) { + continue; // Skip this invalid + } + allSkipped = false; + JSONArray categoryValues = new JSONArray(); + for (int categoryValue : entry.getValue()) { + categoryValues.add(categoryValue); + } + values.put(entry.getKey(), categoryValues); + } + if (allSkipped) { + // Null = skip the chart + return null; + } + data.put("values", values); + return data; + } + + /** + * Gets the value of the chart. + * + * @param valueMap Just an empty map. The only reason it exists is to make your life easier. You + * don't have to create a map yourself! + * @return The value of the chart. + */ + public abstract HashMap getValues(HashMap valueMap); + + } + + /** + * Represents a custom advanced map chart. + */ + public static abstract class AdvancedMapChart extends CustomChart { + + /** + * Class constructor. + * + * @param chartId The id of the chart. + */ + public AdvancedMapChart(String chartId) { + super(chartId); + } + + @Override + protected JSONObject getChartData() { + JSONObject data = new JSONObject(); + JSONObject values = new JSONObject(); + HashMap map = getValues(new HashMap()); + if (map == null || map.isEmpty()) { + // Null = skip the chart + return null; + } + boolean allSkipped = true; + for (Map.Entry entry : map.entrySet()) { + if (entry.getValue() == 0) { + continue; // Skip this invalid + } + allSkipped = false; + values.put(entry.getKey().getCountryIsoTag(), entry.getValue()); + } + if (allSkipped) { + // Null = skip the chart + return null; + } + data.put("values", values); + return data; + } + + /** + * Gets the value of the chart. + * + * @param valueMap Just an empty map. The only reason it exists is to make your life easier. You + * don't have to create a map yourself! + * @return The value of the chart. + */ + public abstract HashMap getValues(HashMap valueMap); + + } + + /** + * Represents a custom advanced pie. + */ + public static abstract class AdvancedPie extends CustomChart { + + /** + * Class constructor. + * + * @param chartId The id of the chart. + */ + public AdvancedPie(String chartId) { + super(chartId); + } + + @Override + protected JSONObject getChartData() { + JSONObject data = new JSONObject(); + JSONObject values = new JSONObject(); + HashMap map = getValues(new HashMap()); + if (map == null || map.isEmpty()) { + // Null = skip the chart + return null; + } + boolean allSkipped = true; + for (Map.Entry entry : map.entrySet()) { + if (entry.getValue() == 0) { + continue; // Skip this invalid + } + allSkipped = false; + values.put(entry.getKey(), entry.getValue()); + } + if (allSkipped) { + // Null = skip the chart + return null; + } + data.put("values", values); + return data; + } + + /** + * Gets the values of the pie. + * + * @param valueMap Just an empty map. The only reason it exists is to make your life easier. You + * don't have to create a map yourself! + * @return The values of the pie. + */ + public abstract HashMap getValues(HashMap valueMap); + } + + /** + * Represents a custom chart. + */ + public static abstract class CustomChart { + + // The id of the chart + protected final String chartId; + + /** + * Class constructor. + * + * @param chartId The id of the chart. + */ + public CustomChart(String chartId) { + if (chartId == null || chartId.isEmpty()) { + throw new IllegalArgumentException("ChartId cannot be null or empty!"); + } + this.chartId = chartId; + } + + protected abstract JSONObject getChartData(); + + protected JSONObject getRequestJsonObject() { + JSONObject chart = new JSONObject(); + chart.put("chartId", chartId); + try { + JSONObject data = getChartData(); + if (data == null) { + // If the data is null we don't send the chart. + return null; + } + chart.put("data", data); + } catch (Throwable t) { + if (logFailedRequests) { + Bukkit.getLogger().log(Level.WARNING, + "Failed to get data for custom chart with id " + chartId, t); + } + return null; + } + return chart; + } + + } + + /** + * Represents a custom multi line chart. + */ + public static abstract class MultiLineChart extends CustomChart { + + /** + * Class constructor. + * + * @param chartId The id of the chart. + */ + public MultiLineChart(String chartId) { + super(chartId); + } + + @Override + protected JSONObject getChartData() { + JSONObject data = new JSONObject(); + JSONObject values = new JSONObject(); + HashMap map = getValues(new HashMap()); + if (map == null || map.isEmpty()) { + // Null = skip the chart + return null; + } + boolean allSkipped = true; + for (Map.Entry entry : map.entrySet()) { + if (entry.getValue() == 0) { + continue; // Skip this invalid + } + allSkipped = false; + values.put(entry.getKey(), entry.getValue()); + } + if (allSkipped) { + // Null = skip the chart + return null; + } + data.put("values", values); + return data; + } + + /** + * Gets the values of the chart. + * + * @param valueMap Just an empty map. The only reason it exists is to make your life easier. You + * don't have to create a map yourself! + * @return The values of the chart. + */ + public abstract HashMap getValues(HashMap valueMap); + + } + + /** + * Represents a custom simple bar chart. + */ + public static abstract class SimpleBarChart extends CustomChart { + + /** + * Class constructor. + * + * @param chartId The id of the chart. + */ + public SimpleBarChart(String chartId) { + super(chartId); + } + + @Override + protected JSONObject getChartData() { + JSONObject data = new JSONObject(); + JSONObject values = new JSONObject(); + HashMap map = getValues(new HashMap()); + if (map == null || map.isEmpty()) { + // Null = skip the chart + return null; + } + for (Map.Entry entry : map.entrySet()) { + JSONArray categoryValues = new JSONArray(); + categoryValues.add(entry.getValue()); + values.put(entry.getKey(), categoryValues); + } + data.put("values", values); + return data; + } + + /** + * Gets the value of the chart. + * + * @param valueMap Just an empty map. The only reason it exists is to make your life easier. You + * don't have to create a map yourself! + * @return The value of the chart. + */ + public abstract HashMap getValues(HashMap valueMap); + + } + + /** + * Represents a custom simple map chart. + */ + public static abstract class SimpleMapChart extends CustomChart { + + /** + * Class constructor. + * + * @param chartId The id of the chart. + */ + public SimpleMapChart(String chartId) { + super(chartId); + } + + @Override + protected JSONObject getChartData() { + JSONObject data = new JSONObject(); + Country value = getValue(); + + if (value == null) { + // Null = skip the chart + return null; + } + data.put("value", value.getCountryIsoTag()); + return data; + } + + /** + * Gets the value of the chart. + * + * @return The value of the chart. + */ + public abstract Country getValue(); + + } + + /** + * Represents a custom simple pie. + */ + public static abstract class SimplePie extends CustomChart { + + /** + * Class constructor. + * + * @param chartId The id of the chart. + */ + public SimplePie(String chartId) { + super(chartId); + } + + @Override + protected JSONObject getChartData() { + JSONObject data = new JSONObject(); + String value = getValue(); + if (value == null || value.isEmpty()) { + // Null = skip the chart + return null; + } + data.put("value", value); + return data; + } + + /** + * Gets the value of the pie. + * + * @return The value of the pie. + */ + public abstract String getValue(); + } + + /** + * Represents a custom single line chart. + */ + public static abstract class SingleLineChart extends CustomChart { + + /** + * Class constructor. + * + * @param chartId The id of the chart. + */ + public SingleLineChart(String chartId) { + super(chartId); + } + + @Override + protected JSONObject getChartData() { + JSONObject data = new JSONObject(); + int value = getValue(); + if (value == 0) { + // Null = skip the chart + return null; + } + data.put("value", value); + return data; + } + + /** + * Gets the value of the chart. + * + * @return The value of the chart. + */ + public abstract int getValue(); + + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/utils/BedwarsCommandExecutor.java b/common/src/main/java/io/github/bedwarsrel/utils/BedwarsCommandExecutor.java new file mode 100644 index 0000000..c2dd1f0 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/utils/BedwarsCommandExecutor.java @@ -0,0 +1,68 @@ +package io.github.bedwarsrel.utils; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.commands.BaseCommand; +import io.github.bedwarsrel.events.BedwarsCommandExecutedEvent; +import io.github.bedwarsrel.events.BedwarsExecuteCommandEvent; +import java.util.ArrayList; +import java.util.Arrays; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +public class BedwarsCommandExecutor implements CommandExecutor { + + private BedwarsRel plugin = null; + + public BedwarsCommandExecutor(BedwarsRel plugin) { + super(); + + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { + if (!cmd.getName().equals("bw")) { + return false; + } + + if (args.length < 1) { + return false; + } + + String command = args[0]; + ArrayList arguments = new ArrayList(Arrays.asList(args)); + arguments.remove(0); + + for (BaseCommand bCommand : this.plugin.getCommands()) { + if (bCommand.getCommand().equalsIgnoreCase(command)) { + if (bCommand.getArguments().length > arguments.size()) { + sender.sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + BedwarsRel + ._l(sender, "errors.argumentslength"))); + return false; + } + + BedwarsExecuteCommandEvent commandEvent = + new BedwarsExecuteCommandEvent(sender, bCommand, arguments); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(commandEvent); + + if (commandEvent.isCancelled()) { + return true; + } + + boolean result = bCommand.execute(sender, arguments); + + BedwarsCommandExecutedEvent executedEvent = + new BedwarsCommandExecutedEvent(sender, bCommand, arguments, result); + BedwarsRel.getInstance().getServer().getPluginManager().callEvent(executedEvent); + + return result; + } + } + + return false; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/utils/ChatWriter.java b/common/src/main/java/io/github/bedwarsrel/utils/ChatWriter.java new file mode 100644 index 0000000..8831ebe --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/utils/ChatWriter.java @@ -0,0 +1,15 @@ +package io.github.bedwarsrel.utils; + +import io.github.bedwarsrel.BedwarsRel; +import org.bukkit.ChatColor; + +public class ChatWriter { + + public static String pluginMessage(String str) { + return ChatColor.translateAlternateColorCodes('&', + BedwarsRel.getInstance().getConfig().getString("chat-prefix", + ChatColor.GRAY + "[" + ChatColor.AQUA + "BedWars" + ChatColor.GRAY + "]")) + + " " + ChatColor.WHITE + str; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/utils/HastebinUtility.java b/common/src/main/java/io/github/bedwarsrel/utils/HastebinUtility.java new file mode 100644 index 0000000..f2a749f --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/utils/HastebinUtility.java @@ -0,0 +1,63 @@ +/* Original Author: https://github.com/IntellectualSites/PlotSquared */ +package io.github.bedwarsrel.utils; + +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class HastebinUtility { + + public static final String BIN_URL = "https://hastebin.com/documents", USER_AGENT = "Mozilla/5.0"; + public static final Pattern PATTERN = Pattern.compile("\\{\"key\":\"([\\S\\s]*)\"\\}"); + + public static String upload(final String string) throws IOException { + final URL url = new URL(BIN_URL); + final HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + + connection.setRequestMethod("POST"); + connection.setRequestProperty("User-Agent", USER_AGENT); + connection.setDoOutput(true); + + try (DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream())) { + outputStream.write(string.getBytes()); + outputStream.flush(); + } + + StringBuilder response; + try (BufferedReader in = + new BufferedReader(new InputStreamReader(connection.getInputStream()))) { + response = new StringBuilder(); + + String inputLine; + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + } + + Matcher matcher = PATTERN.matcher(response.toString()); + if (matcher.matches()) { + return "https://hastebin.com/" + matcher.group(1); + } + return "Error while communicating with hastebin!"; + } + + public static String upload(final File file) throws IOException { + final StringBuilder content = new StringBuilder(); + try (BufferedReader reader = new BufferedReader(new FileReader(file))) { + String line; + int i = 0; + while ((line = reader.readLine()) != null && i++ < 2500) { + content.append(line).append("\n"); + } + } + return upload(content.toString()); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/utils/McStatsMetrics.java b/common/src/main/java/io/github/bedwarsrel/utils/McStatsMetrics.java new file mode 100644 index 0000000..fb623cb --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/utils/McStatsMetrics.java @@ -0,0 +1,772 @@ +package io.github.bedwarsrel.utils; + +/* + * Copyright 2011-2013 Tyler Blair. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted + * provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions + * and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other materials provided with + * the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the authors + * and contributors and should not be interpreted as representing official policies, either + * expressed or implied, of anybody else. + */ + +import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.lang.reflect.Method; +import java.net.Proxy; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLEncoder; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.Set; +import java.util.UUID; +import java.util.logging.Level; +import java.util.zip.GZIPOutputStream; +import org.bukkit.Bukkit; +import org.bukkit.Server; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginDescriptionFile; +import org.bukkit.scheduler.BukkitTask; + +public class McStatsMetrics { + + /** + * The base url of the metrics domain + */ + private static final String BASE_URL = "http://report.mcstats.org"; + /** + * Interval of time to ping (in minutes) + */ + private static final int PING_INTERVAL = 15; + /** + * The url used to report a server's status + */ + private static final String REPORT_URL = "/plugin/%s"; + /** + * The current revision number + */ + private final static int REVISION = 7; + /** + * The plugin configuration file + */ + private final YamlConfiguration configuration; + /** + * The plugin configuration file + */ + private final File configurationFile; + /** + * Debug mode + */ + private final boolean debug; + /** + * All of the custom graphs to submit to metrics + */ + private final Set graphs = Collections.synchronizedSet(new HashSet()); + /** + * Unique server id + */ + private final String guid; + /** + * Lock for synchronization + */ + private final Object optOutLock = new Object(); + /** + * The plugin this metrics submits for + */ + private final Plugin plugin; + /** + * The scheduled task + */ + private volatile BukkitTask task = null; + + public McStatsMetrics(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); + } + + /** + * Appends a json encoded key/value pair to the given string builder. + */ + private static void appendJSONPair(StringBuilder json, String key, String value) + throws UnsupportedEncodingException { + boolean isValueNumeric = false; + + try { + if (value.equals("0") || !value.endsWith("0")) { + Double.parseDouble(value); + isValueNumeric = true; + } + } catch (NumberFormatException e) { + isValueNumeric = false; + } + + if (json.charAt(json.length() - 1) != '{') { + json.append(','); + } + + json.append(escapeJSON(key)); + json.append(':'); + + if (isValueNumeric) { + json.append(value); + } else { + json.append(escapeJSON(value)); + } + } + + /** + * Escape a string to create a valid JSON string + */ + private static String escapeJSON(String text) { + StringBuilder builder = new StringBuilder(); + + builder.append('"'); + for (int index = 0; index < text.length(); index++) { + char chr = text.charAt(index); + + switch (chr) { + case '"': + case '\\': + builder.append('\\'); + builder.append(chr); + break; + case '\b': + builder.append("\\b"); + break; + case '\t': + builder.append("\\t"); + break; + case '\n': + builder.append("\\n"); + break; + case '\r': + builder.append("\\r"); + break; + default: + if (chr < ' ') { + String t = "000" + Integer.toHexString(chr); + builder.append("\\u" + t.substring(t.length() - 4)); + } else { + builder.append(chr); + } + break; + } + } + builder.append('"'); + + return builder.toString(); + } + + /** + * GZip compress a string of bytes + */ + public static byte[] gzip(String input) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + GZIPOutputStream gzos = null; + + try { + gzos = new GZIPOutputStream(baos); + gzos.write(input.getBytes("UTF-8")); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (gzos != null) { + try { + gzos.close(); + } catch (IOException ignore) { + } + } + } + + return baos.toByteArray(); + } + + /** + * Encode text as UTF-8 + * + * @param text the text to encode + * @return the encoded text, as UTF-8 + */ + private static String urlEncode(final String text) throws UnsupportedEncodingException { + return URLEncoder.encode(text, "UTF-8"); + } + + /** + * 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"); + } + + graphs.add(graph); + } + + /** + * 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"); + } + + // Construct the graph object + final Graph graph = new Graph(name); + + // Now we can add our graph + graphs.add(graph); + + // and return back + return graph; + } + + /** + * Disables metrics for the server by setting "opt-out" to true in the config file and canceling + * the metrics task. + */ + 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; + } + } + } + + /** + * Enables metrics for the server by setting "opt-out" to false in the config file and starting + * the metrics task. + */ + 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(); + } + } + } + + /** + * 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"); + } + + /** + * Gets the online player (backwards compatibility) + * + * @return online player amount + */ + private int getOnlinePlayers() { + try { + Method onlinePlayerMethod = Server.class.getMethod("getOnlinePlayers"); + if (onlinePlayerMethod.getReturnType().equals(Collection.class)) { + return ((Collection) onlinePlayerMethod.invoke(Bukkit.getServer())).size(); + } else { + return ((Player[]) onlinePlayerMethod.invoke(Bukkit.getServer())).length; + } + } catch (Exception ex) { + if (debug) { + Bukkit.getLogger().log(Level.INFO, "[Metrics] " + ex.getMessage()); + } + } + + return 0; + } + + /** + * 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; + } + } + + /** + * 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); + } + } + + /** + * 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 = this.getOnlinePlayers(); + + // END server software specific section -- all code below does not use any code outside of this + // class / Java + + // Construct the post data + StringBuilder json = new StringBuilder(1024); + json.append('{'); + + // The plugin's description file containg all of the plugin data such as name, version, author, + // etc + appendJSONPair(json, "guid", guid); + appendJSONPair(json, "plugin_version", pluginVersion); + appendJSONPair(json, "server_version", serverVersion); + appendJSONPair(json, "players_online", Integer.toString(playersOnline)); + + // 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"; + } + + appendJSONPair(json, "osname", osname); + appendJSONPair(json, "osarch", osarch); + appendJSONPair(json, "osversion", osversion); + appendJSONPair(json, "cores", Integer.toString(coreCount)); + appendJSONPair(json, "auth_mode", onlineMode ? "1" : "0"); + appendJSONPair(json, "java_version", java_version); + + // If we're pinging, append it + if (isPing) { + appendJSONPair(json, "ping", "1"); + } + + if (graphs.size() > 0) { + synchronized (graphs) { + json.append(','); + json.append('"'); + json.append("graphs"); + json.append('"'); + json.append(':'); + json.append('{'); + + boolean firstGraph = true; + + final Iterator iter = graphs.iterator(); + + while (iter.hasNext()) { + Graph graph = iter.next(); + + StringBuilder graphJson = new StringBuilder(); + graphJson.append('{'); + + for (Plotter plotter : graph.getPlotters()) { + appendJSONPair(graphJson, plotter.getColumnName(), + Integer.toString(plotter.getValue())); + } + + graphJson.append('}'); + + if (!firstGraph) { + json.append(','); + } + + json.append(escapeJSON(graph.getName())); + json.append(':'); + json.append(graphJson); + + firstGraph = false; + } + + json.append('}'); + } + } + + // close json + json.append('}'); + + // Create the url + URL url = new URL(BASE_URL + String.format(REPORT_URL, urlEncode(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(); + } + + byte[] uncompressed = json.toString().getBytes(); + byte[] compressed = gzip(json.toString()); + + // Headers + connection.addRequestProperty("User-Agent", "MCStats/" + REVISION); + connection.addRequestProperty("Content-Type", "application/json"); + connection.addRequestProperty("Content-Encoding", "gzip"); + connection.addRequestProperty("Content-Length", Integer.toString(compressed.length)); + connection.addRequestProperty("Accept", "application/json"); + connection.addRequestProperty("Connection", "close"); + + connection.setDoOutput(true); + + if (debug) { + System.out.println("[Metrics] Prepared request for " + pluginName + " uncompressed=" + + uncompressed.length + " compressed=" + compressed.length); + } + + // Write the data + OutputStream os = connection.getOutputStream(); + os.write(compressed); + os.flush(); + + // Now read the response + final BufferedReader reader = + new BufferedReader(new InputStreamReader(connection.getInputStream())); + String response = reader.readLine(); + + // close resources + os.close(); + reader.close(); + + if (response == null || response.startsWith("ERR") || response.startsWith("7")) { + if (response == null) { + response = "null"; + } else if (response.startsWith("7")) { + response = response.substring(response.startsWith("7,") ? 2 : 1); + } + + throw new IOException(response); + } else { + // Is this the first update this hour? + if (response.equals("1") || response.contains("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(); + } + } + } + } + } + } + + /** + * 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; + } + } + + /** + * 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; + } + + /** + * 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); + } + + @Override + public boolean equals(final Object object) { + if (!(object instanceof Graph)) { + return false; + } + + final Graph graph = (Graph) object; + return graph.name.equals(name); + } + + /** + * Gets the graph's name + * + * @return the Graph's name + */ + public String getName() { + return name; + } + + /** + * 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(); + } + + /** + * Called when the server owner decides to opt-out of BukkitMetrics while the server is running. + */ + protected void onOptOut() { + } + + /** + * Remove a plotter from the graph + * + * @param plotter the plotter to remove from the graph + */ + public void removePlotter(final Plotter plotter) { + plotters.remove(plotter); + } + } + + /** + * 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; + } + + @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(); + } + + /** + * Get the column name for the plotted point + * + * @return the plotted point's column name + */ + public String getColumnName() { + return 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(); + + @Override + public int hashCode() { + return getColumnName().hashCode(); + } + + /** + * Called after the website graphs have been updated + */ + public void reset() { + } + } +} diff --git a/common/src/main/java/io/github/bedwarsrel/utils/SoundMachine.java b/common/src/main/java/io/github/bedwarsrel/utils/SoundMachine.java new file mode 100644 index 0000000..469349b --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/utils/SoundMachine.java @@ -0,0 +1,25 @@ +package io.github.bedwarsrel.utils; + +import io.github.bedwarsrel.BedwarsRel; +import org.bukkit.Sound; + +public class SoundMachine { + + public static Sound get(String v18, String v19) { + Sound finalSound = null; + + try { + if (BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_8")) { + finalSound = Sound.valueOf(v18); + } else { + finalSound = Sound.valueOf(v19); + } + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + // just compatibility + } + + return finalSound; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/utils/SupportData.java b/common/src/main/java/io/github/bedwarsrel/utils/SupportData.java new file mode 100644 index 0000000..37efb5c --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/utils/SupportData.java @@ -0,0 +1,131 @@ +package io.github.bedwarsrel.utils; + +import io.github.bedwarsrel.BedwarsRel; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.util.ArrayList; +import java.util.Collections; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.plugin.Plugin; + +public class SupportData { + + public static String getBukkitVersion() { + return BedwarsRel.getInstance().getServer().getBukkitVersion(); + } + + public static File getConfigFile() { + File configFile = new File(BedwarsRel.getInstance().getDataFolder(), "config.yml"); + File tmp = null; + + YamlConfiguration config = new YamlConfiguration(); + try { + BufferedReader reader = + new BufferedReader(new InputStreamReader(new FileInputStream(configFile), "UTF-8")); + config.load(reader); + } catch (Exception e) { + e.printStackTrace(); + } + + config.set("database.user", "***"); + config.set("database.password", "***"); + + try { + tmp = File.createTempFile("bedwarsrel-supportdata-config", null); + config.save(tmp); + } catch (IOException e) { + e.printStackTrace(); + } + + return tmp; + } + + public static String getIdentifier() { + String identifier = ""; + try { + for (NetworkInterface ni : Collections.list(NetworkInterface.getNetworkInterfaces())) { + byte[] adr = ni.getHardwareAddress(); + if (adr == null || adr.length != 6) { + continue; + } + String mac = String.format("%02X:%02X:%02X:%02X:%02X:%02X", adr[0], adr[1], adr[2], adr[3], + adr[4], adr[5]); + identifier = mac; + } + } catch (SocketException e) { + e.printStackTrace(); + } + return identifier; + } + + public static ArrayList getJavaInformation() { + ArrayList javaInformation = new ArrayList(); + Runtime runtime = Runtime.getRuntime(); + javaInformation.add("memory.free: " + runtime.freeMemory()); + javaInformation.add("memory.max: " + runtime.maxMemory()); + javaInformation + .add("java.specification.version: " + System.getProperty("java.specification.version")); + javaInformation.add("java.vendor: " + System.getProperty("java.vendor")); + javaInformation.add("java.version: " + System.getProperty("java.version")); + javaInformation.add("os.arch: " + System.getProperty("os.arch")); + javaInformation.add("os.name: " + System.getProperty("os.name")); + javaInformation.add("os.version: " + System.getProperty("os.version")); + javaInformation.add("os.name: " + System.getProperty("os.name")); + javaInformation.add("os.name: " + System.getProperty("os.name")); + return javaInformation; + } + + public static String getPluginVersion() { + if (getPluginVersionArray().length > 1) { + return getPluginVersionArray()[0]; + } + return BedwarsRel.getInstance().getDescription().getVersion(); + } + + public static String[] getPluginVersionArray() { + return BedwarsRel.getInstance().getDescription().getVersion().split("-"); + } + + public static String getPluginVersionBuild() { + if (getPluginVersionArray().length == 3) { + return getPluginVersionArray()[1]; + } + return "unknown"; + } + + public static String getPluginVersionType() { + if (BedwarsRel.getInstance().getDescription().getVersion().contains("SNAPSHOT")) { + return "SNAPSHOT"; + } + return "RELEASE"; + } + + public static ArrayList getPlugins() { + ArrayList pluginList = new ArrayList(); + Plugin[] plugins = BedwarsRel.getInstance().getServer().getPluginManager().getPlugins(); + for (Plugin plugin : plugins) { + pluginList.add(plugin.getName() + " (" + plugin.getDescription().getVersion() + ")"); + } + return pluginList; + } + + public static String getServerMode() { + if (BedwarsRel.getInstance().isBungee()) { + return "BungeeCord"; + } + return "Single Instance"; + } + + public static String getServerVersion() { + return BedwarsRel.getInstance().getServer().getVersion(); + } + + public static File getShopConfigFile() { + return new File(BedwarsRel.getInstance().getDataFolder(), "shop.yml"); + } +} diff --git a/common/src/main/java/io/github/bedwarsrel/utils/UUIDFetcher.java b/common/src/main/java/io/github/bedwarsrel/utils/UUIDFetcher.java new file mode 100644 index 0000000..ece6076 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/utils/UUIDFetcher.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2015 Nate Mortensen + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package io.github.bedwarsrel.utils; + +import com.google.common.collect.ImmutableList; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.ByteBuffer; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.Callable; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; + +public class UUIDFetcher implements Callable> { + + private static final double PROFILES_PER_REQUEST = 100; + private static final String PROFILE_URL = "https://api.mojang.com/profiles/minecraft"; + private final JSONParser jsonParser = new JSONParser(); + private final List names; + private final boolean rateLimiting; + + public UUIDFetcher(List names, boolean rateLimiting) { + this.names = ImmutableList.copyOf(names); + this.rateLimiting = rateLimiting; + } + + public UUIDFetcher(List names) { + this(names, true); + } + + private static HttpURLConnection createConnection() throws Exception { + URL url = new URL(PROFILE_URL); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Content-Type", "application/json"); + connection.setUseCaches(false); + connection.setDoInput(true); + connection.setDoOutput(true); + return connection; + } + + public static UUID fromBytes(byte[] array) { + if (array.length != 16) { + throw new IllegalArgumentException("Illegal byte array length: " + array.length); + } + ByteBuffer byteBuffer = ByteBuffer.wrap(array); + long mostSignificant = byteBuffer.getLong(); + long leastSignificant = byteBuffer.getLong(); + return new UUID(mostSignificant, leastSignificant); + } + + private static UUID getUUID(String id) { + return UUID.fromString(id.substring(0, 8) + "-" + id.substring(8, 12) + "-" + + id.substring(12, 16) + "-" + id.substring(16, 20) + "-" + id.substring(20, 32)); + } + + public static UUID getUUIDOf(String name) throws Exception { + return new UUIDFetcher(Arrays.asList(name)).call().get(name); + } + + public static byte[] toBytes(UUID uuid) { + ByteBuffer byteBuffer = ByteBuffer.wrap(new byte[16]); + byteBuffer.putLong(uuid.getMostSignificantBits()); + byteBuffer.putLong(uuid.getLeastSignificantBits()); + return byteBuffer.array(); + } + + private static void writeBody(HttpURLConnection connection, String body) throws Exception { + OutputStream stream = connection.getOutputStream(); + stream.write(body.getBytes()); + stream.flush(); + stream.close(); + } + + public Map call() throws Exception { + Map uuidMap = new HashMap(); + int requests = (int) Math.ceil(names.size() / PROFILES_PER_REQUEST); + for (int i = 0; i < requests; i++) { + HttpURLConnection connection = createConnection(); + String body = + JSONArray.toJSONString(names.subList(i * 100, Math.min((i + 1) * 100, names.size()))); + writeBody(connection, body); + JSONArray array = + (JSONArray) jsonParser.parse(new InputStreamReader(connection.getInputStream())); + for (Object profile : array) { + JSONObject jsonProfile = (JSONObject) profile; + String id = (String) jsonProfile.get("id"); + String name = (String) jsonProfile.get("name"); + UUID uuid = UUIDFetcher.getUUID(id); + uuidMap.put(name, uuid); + } + if (rateLimiting && i != requests - 1) { + Thread.sleep(100L); + } + } + return uuidMap; + } +} diff --git a/common/src/main/java/io/github/bedwarsrel/utils/Utils.java b/common/src/main/java/io/github/bedwarsrel/utils/Utils.java new file mode 100644 index 0000000..4f3b222 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/utils/Utils.java @@ -0,0 +1,762 @@ +package io.github.bedwarsrel.utils; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.game.Team; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.net.URISyntaxException; +import java.net.URL; +import java.net.URLDecoder; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Set; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; +import org.bukkit.Color; +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.configuration.ConfigurationSection; +import org.bukkit.configuration.MemorySection; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.LeatherArmorMeta; + +public final class Utils { + + public static boolean checkBungeePlugin() { + try { + Class.forName("net.md_5.bungee.BungeeCord"); + return true; + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + } + + return false; + } + + public static void createParticleInGame(Game game, String particle, Location loc) { + try { + Class clazz = Class.forName("io.github.bedwarsrel.com." + + BedwarsRel.getInstance().getCurrentVersion().toLowerCase() + ".ParticleSpawner"); + + Method particleMethod = clazz.getDeclaredMethod("spawnParticle", List.class, String.class, + float.class, float.class, float.class); + particleMethod.invoke(null, game.getPlayers(), particle, (float) loc.getX(), + (float) loc.getY(), (float) loc.getZ()); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + } + } + + private static final void die(String foa) { + throw new IllegalArgumentException(foa); + } + + public static void equipArmorStand(LivingEntity armor, Team team) { + if (!(armor instanceof ArmorStand)) { + return; + } + + ArmorStand stand = (ArmorStand) armor; + + // helmet + ItemStack helmet = new ItemStack(Material.LEATHER_HELMET, 1); + LeatherArmorMeta meta = (LeatherArmorMeta) helmet.getItemMeta(); + meta.setColor(team.getColor().getColor()); + helmet.setItemMeta(meta); + + // chestplate + ItemStack chestplate = new ItemStack(Material.LEATHER_CHESTPLATE, 1); + meta = (LeatherArmorMeta) chestplate.getItemMeta(); + meta.setColor(team.getColor().getColor()); + chestplate.setItemMeta(meta); + + // leggings + ItemStack leggings = new ItemStack(Material.LEATHER_LEGGINGS, 1); + meta = (LeatherArmorMeta) leggings.getItemMeta(); + meta.setColor(team.getColor().getColor()); + leggings.setItemMeta(meta); + + // boots + ItemStack boots = new ItemStack(Material.LEATHER_BOOTS, 1); + meta = (LeatherArmorMeta) boots.getItemMeta(); + meta.setColor(team.getColor().getColor()); + boots.setItemMeta(meta); + + stand.setHelmet(helmet); + stand.setChestplate(chestplate); + stand.setLeggings(leggings); + stand.setBoots(boots); + } + + public static Block getBedNeighbor(Block head) { + if (Utils.isBedBlock(head.getRelative(BlockFace.EAST))) { + return head.getRelative(BlockFace.EAST); + } else if (Utils.isBedBlock(head.getRelative(BlockFace.WEST))) { + return head.getRelative(BlockFace.WEST); + } else if (Utils.isBedBlock(head.getRelative(BlockFace.SOUTH))) { + return head.getRelative(BlockFace.SOUTH); + } else { + return head.getRelative(BlockFace.NORTH); + } + } + + public static BlockFace getCardinalDirection(Location location) { + double rotation = (location.getYaw() - 90) % 360; + if (rotation < 0) { + rotation += 360.0; + } + if (0 <= rotation && rotation < 22.5) { + return BlockFace.NORTH; + } else if (22.5 <= rotation && rotation < 67.5) { + return BlockFace.NORTH_EAST; + } else if (67.5 <= rotation && rotation < 112.5) { + return BlockFace.EAST; + } else if (112.5 <= rotation && rotation < 157.5) { + return BlockFace.SOUTH_EAST; + } else if (157.5 <= rotation && rotation < 202.5) { + return BlockFace.SOUTH; + } else if (202.5 <= rotation && rotation < 247.5) { + return BlockFace.SOUTH_WEST; + } else if (247.5 <= rotation && rotation < 292.5) { + return BlockFace.WEST; + } else if (292.5 <= rotation && rotation < 337.5) { + return BlockFace.NORTH_WEST; + } else if (337.5 <= rotation && rotation < 360.0) { + return BlockFace.NORTH; + } else { + return BlockFace.NORTH; + } + } + + public static Method getColorableMethod(Material mat) { + try { + ItemStack tempStack = new ItemStack(mat, 1); + Method method = + tempStack.getItemMeta().getClass().getMethod("setColor", new Class[]{Color.class}); + if (method != null) { + return method; + } + } catch (Exception ex) { + // NO ERROR + } + + return null; + } + + public static Object getCraftPlayer(Player player) { + try { + Class craftPlayerClass = BedwarsRel.getInstance() + .getCraftBukkitClass("entity.CraftPlayer"); + Method getHandle = craftPlayerClass.getMethod("getHandle", new Class[]{}); + getHandle.setAccessible(true); + + return getHandle.invoke(player, new Object[]{}); + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + return null; + } + } + + public static Location getDirectionLocation(Location location, int blockOffset) { + Location loc = location.clone(); + return loc.add(loc.getDirection().setY(0).normalize().multiply(blockOffset)); + } + + public static String getFormattedTime(int time) { + int hr = 0; + int min = 0; + int sec = 0; + String minStr = ""; + String secStr = ""; + String hrStr = ""; + + hr = (int) Math.floor((time / 60) / 60); + min = ((int) Math.floor((time / 60)) - (hr * 60)); + sec = time % 60; + + hrStr = (hr < 10) ? "0" + String.valueOf(hr) : String.valueOf(hr); + minStr = (min < 10) ? "0" + String.valueOf(min) : String.valueOf(min); + secStr = (sec < 10) ? "0" + String.valueOf(sec) : String.valueOf(sec); + + return hrStr + ":" + minStr + ":" + secStr; + } + + public static Class getGenericTypeOfParameter(Class clazz, String method, + int parameterIndex) { + try { + Method m = clazz.getMethod(method, new Class[]{Set.class, int.class}); + ParameterizedType type = (ParameterizedType) m.getGenericParameterTypes()[parameterIndex]; + return (Class) type.getActualTypeArguments()[0]; + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + try { + Method m = clazz.getMethod(method, new Class[]{HashSet.class, int.class}); + ParameterizedType type = (ParameterizedType) m.getGenericParameterTypes()[parameterIndex]; + return (Class) type.getActualTypeArguments()[0]; + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + ex.printStackTrace(); + } + } + + return null; + } + + @SuppressWarnings("deprecation") + public static Material getMaterialByConfig(String key, Material defaultMaterial) { + try { + String cfg = BedwarsRel.getInstance().getStringConfig(key, defaultMaterial.name()); + if (Utils.isNumber(cfg)) { + return Material.getMaterial(Integer.valueOf(cfg)); + } else { + return Material.getMaterial(cfg.toUpperCase()); + } + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + // just return default + } + + return defaultMaterial; + } + + public static Class getPrimitiveWrapper(Class primitive) { + if (!primitive.isPrimitive()) { + return primitive; + } + + if (primitive.getSimpleName().equals("int")) { + return Integer.class; + } else if (primitive.getSimpleName().equals("long")) { + return Long.class; + } else if (primitive.getSimpleName().equals("short")) { + return Short.class; + } else if (primitive.getSimpleName().equals("byte")) { + return Byte.class; + } else if (primitive.getSimpleName().equals("float")) { + return Float.class; + } else if (primitive.getSimpleName().equals("boolean")) { + return Boolean.class; + } else if (primitive.getSimpleName().equals("char")) { + return Character.class; + } else if (primitive.getSimpleName().equals("double")) { + return Double.class; + } else { + return primitive; + } + } + + @SuppressWarnings("resource") + public static String[] getResourceListing(Class clazz, String path) + throws URISyntaxException, IOException { + URL dirURL = clazz.getClassLoader().getResource(path); + if (dirURL != null && dirURL.getProtocol().equals("file")) { + /* A file path: easy enough */ + return new File(dirURL.toURI()).list(); + } + + if (dirURL == null) { + /* + * In case of a jar file, we can't actually find a directory. Have to assume the same jar as + * clazz. + */ + String me = clazz.getName().replace(".", "/") + ".class"; + dirURL = clazz.getClassLoader().getResource(me); + } + + if (dirURL.getProtocol().equals("jar")) { + /* A JAR path */ + String jarPath = dirURL.getPath().substring(5, dirURL.getPath().indexOf("!")); // strip + // out + // only + // the + // JAR + // file + JarFile jar = new JarFile(URLDecoder.decode(jarPath, "UTF-8")); + Enumeration entries = jar.entries(); // gives ALL entries + // in jar + Set result = new HashSet(); // avoid duplicates in + // case it is a + // subdirectory + while (entries.hasMoreElements()) { + String name = entries.nextElement().getName(); + if (name.startsWith(path)) { // filter according to the path + String entry = name.substring(path.length()); + int checkSubdir = entry.indexOf("/"); + if (checkSubdir >= 0) { + // if it is a subdirectory, we just return the directory + // name + entry = entry.substring(0, checkSubdir); + } + result.add(entry); + } + } + return result.toArray(new String[result.size()]); + } + + throw new UnsupportedOperationException("Cannot list files for URL " + dirURL); + } + + public static String implode(String glue, ArrayList strings) { + if (strings.isEmpty()) { + return ""; + } + + StringBuilder builder = new StringBuilder(); + builder.append(strings.remove(0)); + + for (String str : strings) { + builder.append(glue); + builder.append(str); + } + + return builder.toString(); + } + + public static boolean isBedBlock(Block isBed) { + if (isBed == null) { + return false; + } + + return (isBed.getType() == Material.BED || isBed.getType() == Material.BED_BLOCK); + } + + public static boolean isColorable(ItemStack itemstack) { + return (itemstack.getType().equals(Material.STAINED_CLAY) + || itemstack.getType().equals(Material.WOOL) + || itemstack.getType().equals(Material.CARPET) + || itemstack.getType().equals(Material.STAINED_GLASS) + || itemstack.getType().equals(Material.STAINED_GLASS_PANE)); + } + + public static boolean isNumber(String numberString) { + try { + Integer.parseInt(numberString); + return true; + } catch (Exception ex) { + // NO ERROR + return false; + } + } + + @SuppressWarnings("unchecked") + public static Location locationDeserialize(Object obj) { + if (obj instanceof Location) { + return (Location) obj; + } + + Map section = new HashMap(); + if (obj instanceof MemorySection) { + MemorySection sec = (MemorySection) obj; + for (String key : sec.getKeys(false)) { + section.put(key, sec.get(key)); + } + } else if (obj instanceof ConfigurationSection) { + ConfigurationSection sec = (ConfigurationSection) obj; + for (String key : sec.getKeys(false)) { + section.put(key, sec.get(key)); + } + } else { + section = (Map) obj; + } + + try { + if (section == null) { + return null; + } + + double x = Double.valueOf(section.get("x").toString()); + double y = Double.valueOf(section.get("y").toString()); + double z = Double.valueOf(section.get("z").toString()); + float yaw = Float.valueOf(section.get("yaw").toString()); + float pitch = Float.valueOf(section.get("pitch").toString()); + World world = BedwarsRel.getInstance().getServer().getWorld(section.get("world").toString()); + + if (world == null) { + return null; + } + + return new Location(world, x, y, z, yaw, pitch); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + ex.printStackTrace(); + } + + return null; + } + + @SuppressWarnings("unchecked") + public static Location locationDeserialize(String key, FileConfiguration config) { + if (!config.contains(key)) { + return null; + } + + Object locSec = config.get(key); + if (locSec instanceof Location) { + return (Location) locSec; + } + + try { + Map section = (Map) config.get(key); + if (section == null) { + return null; + } + + double x = Double.valueOf(section.get("x").toString()); + double y = Double.valueOf(section.get("y").toString()); + double z = Double.valueOf(section.get("z").toString()); + float yaw = Float.valueOf(section.get("yaw").toString()); + float pitch = Float.valueOf(section.get("pitch").toString()); + World world = BedwarsRel.getInstance().getServer().getWorld(section.get("world").toString()); + + if (world == null) { + return null; + } + + return new Location(world, x, y, z, yaw, pitch); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + ex.printStackTrace(); + } + + return null; + } + + public static Map locationSerialize(Location location) { + Map section = new HashMap(); + section.put("x", location.getX()); + section.put("y", location.getY()); + section.put("z", location.getZ()); + section.put("pitch", (double) location.getPitch()); + section.put("yaw", (double) location.getYaw()); + section.put("world", location.getWorld().getName()); + + return section; + } + + @SuppressWarnings("deprecation") + public static Material parseMaterial(String material) { + try { + if (Utils.isNumber(material)) { + return Material.getMaterial(Integer.parseInt(material)); + } else { + return Material.getMaterial(material.toUpperCase()); + } + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + // failed to parse + } + + return null; + } + + public static int randInt(int min, int max) { + Random rand = new Random(); + int randomNum = rand.nextInt((max - min) + 1) + min; + + return randomNum; + } + + public final static String unescape_perl_string(String oldstr) { + + /* + * In contrast to fixing Java's broken regex charclasses, this one need be no bigger, as + * unescaping shrinks the string here, where in the other one, it grows it. + */ + + StringBuffer newstr = new StringBuffer(oldstr.length()); + + boolean saw_backslash = false; + + for (int i = 0; i < oldstr.length(); i++) { + int cp = oldstr.codePointAt(i); + if (oldstr.codePointAt(i) > Character.MAX_VALUE) { + i++; + /**** WE HATES UTF-16! WE HATES IT FOREVERSES!!! ****/ + } + + if (!saw_backslash) { + if (cp == '\\') { + saw_backslash = true; + } else { + newstr.append(Character.toChars(cp)); + } + continue; /* switch */ + } + + if (cp == '\\') { + saw_backslash = false; + newstr.append('\\'); + newstr.append('\\'); + continue; /* switch */ + } + + switch (cp) { + + case 'r': + newstr.append('\r'); + break; /* switch */ + + case 'n': + newstr.append('\n'); + break; /* switch */ + + case 'f': + newstr.append('\f'); + break; /* switch */ + + /* PASS a \b THROUGH!! */ + case 'b': + newstr.append("\\b"); + break; /* switch */ + + case 't': + newstr.append('\t'); + break; /* switch */ + + case 'a': + newstr.append('\007'); + break; /* switch */ + + case 'e': + newstr.append('\033'); + break; /* switch */ + + /* + * A "control" character is what you get when you xor its codepoint with '@'==64. This only + * makes sense for ASCII, and may not yield a "control" character after all. + * + * Strange but true: "\c{" is ";", "\c}" is "=", etc. + */ + case 'c': { + if (++i == oldstr.length()) { + die("trailing \\c"); + } + cp = oldstr.codePointAt(i); + /* + * don't need to grok surrogates, as next line blows them up + */ + if (cp > 0x7f) { + die("expected ASCII after \\c"); + } + newstr.append(Character.toChars(cp ^ 64)); + break; /* switch */ + } + + case '8': + case '9': + die("illegal octal digit"); + /* NOTREACHED */ + + /* + * may be 0 to 2 octal digits following this one so back up one for fallthrough to next + * case; unread this digit and fall through to next case. + */ + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + --i; + /* FALLTHROUGH */ + + /* + * Can have 0, 1, or 2 octal digits following a 0 this permits larger values than octal + * 377, up to octal 777. + */ + case '0': { + if (i + 1 == oldstr.length()) { + /* found \0 at end of string */ + newstr.append(Character.toChars(0)); + break; /* switch */ + } + i++; + int digits = 0; + int j; + for (j = 0; j <= 2; j++) { + if (i + j == oldstr.length()) { + break; /* for */ + } + /* safe because will unread surrogate */ + int ch = oldstr.charAt(i + j); + if (ch < '0' || ch > '7') { + break; /* for */ + } + digits++; + } + if (digits == 0) { + --i; + newstr.append('\0'); + break; /* switch */ + } + int value = 0; + try { + value = Integer.parseInt(oldstr.substring(i, i + digits), 8); + } catch (NumberFormatException nfe) { + die("invalid octal value for \\0 escape"); + } + newstr.append(Character.toChars(value)); + i += digits - 1; + break; /* switch */ + } /* end case '0' */ + + case 'x': { + if (i + 2 > oldstr.length()) { + die("string too short for \\x escape"); + } + i++; + boolean saw_brace = false; + if (oldstr.charAt(i) == '{') { + /* ^^^^^^ ok to ignore surrogates here */ + i++; + saw_brace = true; + } + int j; + for (j = 0; j < 8; j++) { + + if (!saw_brace && j == 2) { + break; /* for */ + } + + /* + * ASCII test also catches surrogates + */ + int ch = oldstr.charAt(i + j); + if (ch > 127) { + die("illegal non-ASCII hex digit in \\x escape"); + } + + if (saw_brace && ch == '}') { + break; /* for */ + } + + if (!((ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'f') + || (ch >= 'A' && ch <= 'F'))) { + die(String.format("illegal hex digit #%d '%c' in \\x", ch, ch)); + } + + } + if (j == 0) { + die("empty braces in \\x{} escape"); + } + int value = 0; + try { + value = Integer.parseInt(oldstr.substring(i, i + j), 16); + } catch (NumberFormatException nfe) { + die("invalid hex value for \\x escape"); + } + newstr.append(Character.toChars(value)); + if (saw_brace) { + j++; + } + i += j - 1; + break; /* switch */ + } + + case 'u': { + if (i + 4 > oldstr.length()) { + die("string too short for \\u escape"); + } + i++; + int j; + for (j = 0; j < 4; j++) { + /* this also handles the surrogate issue */ + if (oldstr.charAt(i + j) > 127) { + die("illegal non-ASCII hex digit in \\u escape"); + } + } + int value = 0; + try { + value = Integer.parseInt(oldstr.substring(i, i + j), 16); + } catch (NumberFormatException nfe) { + die("invalid hex value for \\u escape"); + } + newstr.append(Character.toChars(value)); + i += j - 1; + break; /* switch */ + } + + case 'U': { + if (i + 8 > oldstr.length()) { + die("string too short for \\U escape"); + } + i++; + int j; + for (j = 0; j < 8; j++) { + /* this also handles the surrogate issue */ + if (oldstr.charAt(i + j) > 127) { + die("illegal non-ASCII hex digit in \\U escape"); + } + } + int value = 0; + try { + value = Integer.parseInt(oldstr.substring(i, i + j), 16); + } catch (NumberFormatException nfe) { + die("invalid hex value for \\U escape"); + } + newstr.append(Character.toChars(value)); + i += j - 1; + break; /* switch */ + } + + default: + newstr.append('\\'); + newstr.append(Character.toChars(cp)); + /* + * say(String.format( "DEFAULT unrecognized escape %c passed through", cp)); + */ + break; /* switch */ + + } + saw_backslash = false; + } + + /* weird to leave one at the end */ + if (saw_backslash) { + newstr.append('\\'); + } + + return newstr.toString(); + } + + /* + * Return a string "U+XX.XXX.XXXX" etc, where each XX set is the xdigits of the logical Unicode + * code point. No bloody brain-damaged UTF-16 surrogate crap, just true logical characters. + */ + public final static String uniplus(String s) { + if (s.length() == 0) { + return ""; + } + /* This is just the minimum; sb will grow as needed. */ + StringBuffer sb = new StringBuffer(2 + 3 * s.length()); + sb.append("U+"); + for (int i = 0; i < s.length(); i++) { + sb.append(String.format("%X", s.codePointAt(i))); + if (s.codePointAt(i) > Character.MAX_VALUE) { + i++; + /**** WE HATES UTF-16! WE HATES IT FOREVERSES!!! ****/ + } + if (i + 1 < s.length()) { + sb.append("."); + } + } + return sb.toString(); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/villager/CraftItemStack.java b/common/src/main/java/io/github/bedwarsrel/villager/CraftItemStack.java new file mode 100644 index 0000000..71309e9 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/villager/CraftItemStack.java @@ -0,0 +1,49 @@ +package io.github.bedwarsrel.villager; + +import io.github.bedwarsrel.BedwarsRel; +import java.lang.reflect.Method; +import org.bukkit.inventory.ItemStack; + +public class CraftItemStack { + + @SuppressWarnings("rawtypes") + private Class craftItemStack = null; + private Object stack = null; + + public CraftItemStack(ItemStack stack) { + this.craftItemStack = BedwarsRel.getInstance().getCraftBukkitClass("inventory.CraftItemStack"); + this.stack = stack; + } + + public CraftItemStack(Object stack) { + this.craftItemStack = BedwarsRel.getInstance().getCraftBukkitClass("inventory.CraftItemStack"); + this.stack = stack; + } + + @SuppressWarnings("unchecked") + public ItemStack asBukkitCopy() { + try { + Method m = + this.craftItemStack.getDeclaredMethod("asBukkitCopy", new Class[]{ItemStack.class}); + m.setAccessible(true); + return (ItemStack) m.invoke(null, new Object[]{this.stack}); + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + } + return null; + } + + @SuppressWarnings("unchecked") + public Object asNMSCopy() { + try { + Method m = this.craftItemStack.getDeclaredMethod("asNMSCopy", new Class[]{ItemStack.class}); + m.setAccessible(true); + return m.invoke(null, new Object[]{this.stack}); + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + } + return null; + } +} diff --git a/common/src/main/java/io/github/bedwarsrel/villager/ItemStackParser.java b/common/src/main/java/io/github/bedwarsrel/villager/ItemStackParser.java new file mode 100644 index 0000000..5fe83b2 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/villager/ItemStackParser.java @@ -0,0 +1,236 @@ +package io.github.bedwarsrel.villager; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.utils.Utils; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import lombok.Getter; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +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; + +public class ItemStackParser { + + private int amount = 1; + private Object configSection = null; + @Getter + private ItemStack finalStack = null; + private LinkedHashMap linkedSection = null; + private Material material = null; + + public ItemStackParser(Object section) { + this.configSection = section; + } + + @SuppressWarnings("unchecked") + private LinkedHashMap getLinkedMap() { + LinkedHashMap linkedMap = new LinkedHashMap(); + + if (!(this.configSection instanceof LinkedHashMap)) { + ConfigurationSection newSection = (ConfigurationSection) this.configSection; + for (String key : newSection.getKeys(false)) { + linkedMap.put(key, newSection.get(key)); + } + } else { + linkedMap = (LinkedHashMap) this.configSection; + } + + return linkedMap; + } + + private byte getMeta() { + return Byte.parseByte(this.linkedSection.get("meta").toString()); + } + + private short getPotionMeta() { + return Short.parseShort(this.linkedSection.get("meta").toString()); + } + + private int getStackAmount() { + int amount = 0; + try { + if (this.linkedSection.containsKey("amount")) { + amount = Integer.parseInt(this.linkedSection.get("amount").toString()); + } + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + amount = 1; + } + + return amount; + } + + private boolean hasMeta() { + return this.linkedSection.containsKey("meta"); + } + + private boolean isMetarizable() { + return (!this.material.equals(Material.POTION) + && !(!BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_8") + && (this.material.equals(Material.valueOf("TIPPED_ARROW")) + || this.material.equals(Material.valueOf("LINGERING_POTION")) + || this.material.equals(Material.valueOf("SPLASH_POTION"))))); + } + + private boolean isPotion() { + return (this.material.equals(Material.POTION) + || (!BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_8")) + && (this.material.equals(Material.valueOf("TIPPED_ARROW")) + || this.material.equals(Material.valueOf("LINGERING_POTION")) + || this.material.equals(Material.valueOf("SPLASH_POTION")))); + } + + public ItemStack parse() { + LinkedHashMap linkedMap = this.getLinkedMap(); + + try { + this.linkedSection = linkedMap; + this.material = this.parseMaterial(); + this.amount = this.getStackAmount(); + + if (this.hasMeta() && this.isMetarizable()) { + this.finalStack = new ItemStack(material, amount, this.getMeta()); + } else if (this.hasMeta() && !this.isMetarizable()) { + this.finalStack = new ItemStack(material, amount, this.getPotionMeta()); + } else { + this.finalStack = new ItemStack(material, amount); + } + + if (this.linkedSection.containsKey("lore")) { + this.parseLore(); + } + + if (this.isPotion() && this.linkedSection.containsKey("effects")) { + this.parsePotionEffects(); + } + + if (this.linkedSection.containsKey("enchants")) { + this.parseEnchants(); + } + + if (this.linkedSection.containsKey("name")) { + this.parseCustomName(); + } + + return this.finalStack; + + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + ex.printStackTrace(); + } + + return null; + } + + private void parseCustomName() { + String name = + ChatColor.translateAlternateColorCodes('&', this.linkedSection.get("name").toString()); + ItemMeta im = this.finalStack.getItemMeta(); + + im.setDisplayName(name); + this.finalStack.setItemMeta(im); + } + + @SuppressWarnings("deprecation") + private void parseEnchants() { + if (this.isMetarizable()) { + Enchantment en = null; + int level = 0; + + ConfigurationSection newSection = (ConfigurationSection) (this.configSection); + ConfigurationSection enchantSection = (ConfigurationSection) newSection.get("enchants"); + + for (String key : enchantSection.getKeys(false)) { + if (Utils.isNumber(key)) { + en = Enchantment.getById(Integer.parseInt(key)); + level = Integer.parseInt(enchantSection.get(key).toString()); + } else { + en = Enchantment.getByName(key.toUpperCase()); + level = Integer.parseInt(enchantSection.get(key).toString()); + } + + if (en == null) { + continue; + } + + this.finalStack.addUnsafeEnchantment(en, level); + } + } + } + + @SuppressWarnings("unchecked") + private void parseLore() { + List lores = new ArrayList(); + ItemMeta im = this.finalStack.getItemMeta(); + + for (Object lore : (List) this.linkedSection.get("lore")) { + lores.add(ChatColor.translateAlternateColorCodes('&', lore.toString())); + } + + im.setLore(lores); + this.finalStack.setItemMeta(im); + } + + @SuppressWarnings("deprecation") + private Material parseMaterial() { + Material material = null; + String materialString = this.linkedSection.get("item").toString(); + + try { + if (Utils.isNumber(materialString)) { + material = Material.getMaterial(Integer.parseInt(materialString)); + } else { + material = Material.getMaterial(materialString); + } + } catch (Exception e) { + // Failed to parse material + } + + return material; + } + + @SuppressWarnings("unchecked") + private void parsePotionEffects() { + PotionMeta customPotionMeta = (PotionMeta) this.finalStack.getItemMeta(); + for (Object potionEffect : (List) this.linkedSection.get("effects")) { + LinkedHashMap potionEffectSection = + (LinkedHashMap) potionEffect; + + if (!potionEffectSection.containsKey("type")) { + continue; + } + + PotionEffectType potionEffectType = null; + int duration = 1; + int amplifier = 0; + + potionEffectType = + PotionEffectType.getByName(potionEffectSection.get("type").toString().toUpperCase()); + + if (potionEffectSection.containsKey("duration")) { + duration = Integer.parseInt(potionEffectSection.get("duration").toString()) * 20; + } + + if (potionEffectSection.containsKey("amplifier")) { + amplifier = Integer.parseInt(potionEffectSection.get("amplifier").toString()) - 1; + } + + if (potionEffectType == null) { + continue; + } + + customPotionMeta.addCustomEffect(new PotionEffect(potionEffectType, duration, amplifier), + true); + } + + this.finalStack.setItemMeta(customPotionMeta); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/villager/MerchantCategory.java b/common/src/main/java/io/github/bedwarsrel/villager/MerchantCategory.java new file mode 100644 index 0000000..9d2904d --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/villager/MerchantCategory.java @@ -0,0 +1,294 @@ +package io.github.bedwarsrel.villager; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.utils.ChatWriter; +import io.github.bedwarsrel.utils.Utils; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class MerchantCategory { + + private Material item = null; + private List lores = null; + private String name = null; + private ArrayList offers = null; + private int order = 0; + private String permission = null; + + public MerchantCategory(String name, Material item) { + this(name, item, new ArrayList(), new ArrayList(), 0, "bw.base"); + } + + public MerchantCategory(String name, Material item, ArrayList offers, + List lores, int order, String permission) { + this.name = name; + this.item = item; + this.offers = offers; + this.lores = lores; + this.order = order; + this.permission = permission; + } + + @SuppressWarnings({"unchecked", "deprecation"}) + public static HashMap loadCategories(FileConfiguration cfg) { + if (cfg.getConfigurationSection("shop") == null) { + return new HashMap(); + } + + HashMap mc = new HashMap(); + + ConfigurationSection section = cfg.getConfigurationSection("shop"); + + for (String cat : section.getKeys(false)) { + String catName = + ChatColor.translateAlternateColorCodes('&', section.getString(cat + ".name")); + Material catItem = null; + List lores = new ArrayList(); + String item = section.get(cat + ".item").toString(); + String permission = "bw.base"; + int order = 0; + + if (!Utils.isNumber(item)) { + catItem = Material.getMaterial(section.getString(cat + ".item")); + } else { + catItem = Material.getMaterial(section.getInt(cat + ".item")); + } + + if (section.contains(cat + ".lore")) { + for (Object lore : section.getList(cat + ".lore")) { + lores.add(ChatColor.translateAlternateColorCodes('&', lore.toString())); + } + } + + if (section.contains(cat + ".order") && section.isInt(cat + ".order")) { + order = section.getInt(cat + ".order"); + } + + if (section.contains(cat + ".permission")) { + permission = section.getString(cat + ".permission", "bw.base"); + } + + ArrayList offers = new ArrayList(); + + for (Object offer : section.getList(cat + ".offers")) { + if (offer instanceof String) { + if (offer.toString().equalsIgnoreCase("empty") + || offer.toString().equalsIgnoreCase("null") + || offer.toString().equalsIgnoreCase("e")) { + VillagerTrade trade = + new VillagerTrade(new ItemStack(Material.AIR, 1), new ItemStack(Material.AIR, 1)); + offers.add(trade); + } + + continue; + } + + HashMap>> offerSection = + (HashMap>>) offer; + + if (!offerSection.containsKey("price") || !offerSection.containsKey("reward")) { + continue; + } + + ItemStack item1 = null; + + try { + item1 = setResourceName(ItemStack.deserialize(offerSection.get("price").get(0))); + } catch (Exception e) { + // CATCH EXCEPTION + } + + ItemStack item2 = null; + if (offerSection.get("price").size() == 2) { + try { + item2 = setResourceName(ItemStack.deserialize(offerSection.get("price").get(1))); + } catch (Exception e) { + // CATCH EXCEPTION + } + } + ItemStack reward = null; + List commands = null; + + // Parse commands from offerSection level (not inside reward) + if (offerSection.containsKey("commands")) { + commands = new java.util.ArrayList(); + for (Object cmd : offerSection.get("commands")) { + commands.add(cmd.toString()); + } + } + + try { + Object rewardObj = offerSection.get("reward").get(0); + if (rewardObj instanceof java.util.Map) { + java.util.Map rewardMap = (java.util.Map) rewardObj; + + // Use standard ItemStack.deserialize for "type" field format (supports full meta with display-name) + if (rewardMap.containsKey("type")) { + reward = ItemStack.deserialize(rewardMap); + } else if (rewardMap.containsKey("item")) { + // Use ItemStackParser for "item" field format (supports name, lore, enchantments, etc.) + ItemStackParser parser = new ItemStackParser(rewardObj); + reward = parser.parse(); + } + } else { + reward = ItemStack.deserialize((java.util.Map) rewardObj); + } + } catch (Exception e) { + // CATCH EXCEPTION + } + + if (item1 == null || reward == null) { + BedwarsRel.getInstance().getServer().getConsoleSender().sendMessage( + ChatWriter.pluginMessage(ChatColor.RED + "Couldn't parse item in category \"" + + section.getString(cat + ".name") + "\": " + offerSection.toString())); + continue; + } + + VillagerTrade tradeObj = null; + + if (item2 != null) { + if (commands != null && !commands.isEmpty()) { + tradeObj = new VillagerTrade(item1, item2, reward, commands); + } else { + tradeObj = new VillagerTrade(item1, item2, reward); + } + } else { + if (commands != null && !commands.isEmpty()) { + tradeObj = new VillagerTrade(item1, reward, commands); + } else { + tradeObj = new VillagerTrade(item1, reward); + } + } + + offers.add(tradeObj); + } + + mc.put(catItem, new MerchantCategory(catName, catItem, offers, lores, order, permission)); + } + + return mc; + } + + @SuppressWarnings("deprecation") + public static void openCategorySelection(Player p, Game g) { + List cats = g.getOrderedItemShopCategories(); + + int nom = (cats.size() % 9 == 0) ? 9 : (cats.size() % 9); + int size = (cats.size() + (9 - nom)) + 9; + + Inventory inv = Bukkit.createInventory(p, size, BedwarsRel._l(p, "ingame.shop.name")); + for (MerchantCategory cat : cats) { + if (p != null && !p.hasPermission(cat.getPermission())) { + continue; + } + + ItemStack is = new ItemStack(cat.getMaterial(), 1); + ItemMeta im = is.getItemMeta(); + + if (Utils.isColorable(is)) { + is.setDurability(g.getPlayerTeam(p).getColor().getDyeColor().getWoolData()); + } + + im.setDisplayName(cat.getName()); + im.setLore(cat.getLores()); + is.setItemMeta(im); + + inv.addItem(is); + } + + ItemStack snow = new ItemStack(Material.SNOW_BALL, 1); + ItemMeta snowMeta = snow.getItemMeta(); + + snowMeta.setDisplayName(BedwarsRel._l(p, "ingame.shop.newshop")); + snowMeta.setLore(new ArrayList()); + snow.setItemMeta(snowMeta); + + inv.setItem(size - 5, snow); + p.openInventory(inv); + } + + @SuppressWarnings("deprecation") + private static ItemStack setResourceName(ItemStack item) { + + ItemMeta im = item.getItemMeta(); + String name = im.getDisplayName(); + + // check if is ressource + ConfigurationSection resourceSection = + BedwarsRel.getInstance().getConfig().getConfigurationSection("resource"); + for (String key : resourceSection.getKeys(false)) { + + List resourceList = (List) BedwarsRel.getInstance().getConfig() + .getList("resource." + key + ".item"); + + for (Object resource : resourceList) { + ItemStack itemStack = ItemStack.deserialize((Map) resource); + if (itemStack != null && itemStack.getType().equals(item.getType()) + && itemStack.getItemMeta() != null + && itemStack.getItemMeta().getDisplayName() != null) { + name = + ChatColor.translateAlternateColorCodes('&', itemStack.getItemMeta().getDisplayName()); + } + } + } + + im.setDisplayName(name); + item.setItemMeta(im); + + return item; + } + + @SuppressWarnings("unchecked") + public ArrayList getFilteredOffers() { + ArrayList trades = (ArrayList) this.offers.clone(); + Iterator iterator = trades.iterator(); + + while (iterator.hasNext()) { + VillagerTrade trade = iterator.next(); + if (trade.getItem1().getType() == Material.AIR + && trade.getRewardItem().getType() == Material.AIR) { + iterator.remove(); + } + } + + return trades; + } + + public List getLores() { + return this.lores; + } + + public Material getMaterial() { + return this.item; + } + + public String getName() { + return this.name; + } + + public ArrayList getOffers() { + return this.offers; + } + + public int getOrder() { + return this.order; + } + + public String getPermission() { + return this.permission; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/villager/MerchantCategoryComparator.java b/common/src/main/java/io/github/bedwarsrel/villager/MerchantCategoryComparator.java new file mode 100644 index 0000000..a6c6039 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/villager/MerchantCategoryComparator.java @@ -0,0 +1,16 @@ +package io.github.bedwarsrel.villager; + +import java.util.Comparator; + +public class MerchantCategoryComparator implements Comparator { + + @Override + public int compare(MerchantCategory o1, MerchantCategory o2) { + + int order1 = o1.getOrder(); + int order2 = o2.getOrder(); + + return Integer.valueOf(order1).compareTo(Integer.valueOf(order2)); + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/villager/MerchantRecipe.java b/common/src/main/java/io/github/bedwarsrel/villager/MerchantRecipe.java new file mode 100644 index 0000000..1d96a45 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/villager/MerchantRecipe.java @@ -0,0 +1,76 @@ +package io.github.bedwarsrel.villager; + +import io.github.bedwarsrel.BedwarsRel; +import java.lang.reflect.Method; + +@SuppressWarnings({"unchecked", "rawtypes"}) +public class MerchantRecipe { + + private Object instance = null; + private Class merchantRecipe = null; + + public MerchantRecipe(Object recipe) { + this.instance = recipe; + } + + public MerchantRecipe(Object item1, Object item2, Object reward) { + this.merchantRecipe = BedwarsRel.getInstance().getMinecraftServerClass("MerchantRecipe"); + Class isClass = BedwarsRel.getInstance().getMinecraftServerClass("ItemStack"); + try { + this.instance = this.merchantRecipe.getDeclaredConstructor(isClass, isClass, isClass) + .newInstance(item1, item2, reward); + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + } + } + + public MerchantRecipe(Object item1, Object reward) { + this(item1, null, reward); + } + + public static Class getReflectionClass() { + return BedwarsRel.getInstance().getMinecraftServerClass("MerchantRecipe"); + } + + public Object getInstance() { + return this.instance; + } + + public Object getItem1() { + try { + Method m = this.merchantRecipe.getDeclaredMethod("getBuyItem1"); + m.setAccessible(true); + return m.invoke(this.merchantRecipe); + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + } + return null; + } + + public Object getItem2() { + try { + Method m = this.merchantRecipe.getDeclaredMethod("getBuyItem2"); + m.setAccessible(true); + return m.invoke(this.merchantRecipe); + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + } + return null; + } + + public Object getRewardItem() { + try { + Method m = this.merchantRecipe.getDeclaredMethod("getBuyItem3"); + m.setAccessible(true); + return m.invoke(this.merchantRecipe); + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + } + return null; + } + +} diff --git a/common/src/main/java/io/github/bedwarsrel/villager/VillagerTrade.java b/common/src/main/java/io/github/bedwarsrel/villager/VillagerTrade.java new file mode 100644 index 0000000..b74d8d9 --- /dev/null +++ b/common/src/main/java/io/github/bedwarsrel/villager/VillagerTrade.java @@ -0,0 +1,80 @@ +package io.github.bedwarsrel.villager; + +import java.util.List; +import org.bukkit.inventory.ItemStack; + +public class VillagerTrade { + + private ItemStack item1; + private ItemStack item2; + private ItemStack rewardItem; + private List commands; + + public VillagerTrade(ItemStack item1, ItemStack item2, ItemStack rewardItem) { + this.item1 = item1; + this.item2 = item2; + this.rewardItem = rewardItem; + this.commands = null; + } + + public VillagerTrade(ItemStack item1, ItemStack item2, ItemStack rewardItem, List commands) { + this.item1 = item1; + this.item2 = item2; + this.rewardItem = rewardItem; + this.commands = commands; + } + + public VillagerTrade(ItemStack item1, ItemStack rewardItem) { + this(item1, null, rewardItem); + } + + public VillagerTrade(ItemStack item1, ItemStack rewardItem, List commands) { + this(item1, null, rewardItem, commands); + } + + public VillagerTrade(MerchantRecipe handle) { + this.item1 = new CraftItemStack(handle.getItem1()).asBukkitCopy(); + this.item2 = + (handle.getItem1() == null ? null : new CraftItemStack(handle.getItem2()).asBukkitCopy()); + this.rewardItem = new CraftItemStack(handle.getRewardItem()).asBukkitCopy(); + } + + public MerchantRecipe getHandle() { + if (this.item2 == null) { + return new MerchantRecipe(new CraftItemStack(this.item1).asNMSCopy(), + new CraftItemStack(this.rewardItem).asNMSCopy()); + } + return new MerchantRecipe(new CraftItemStack(this.item1).asNMSCopy(), + new CraftItemStack(this.item2).asNMSCopy(), + new CraftItemStack(this.rewardItem).asNMSCopy()); + } + + public ItemStack getItem1() { + return this.item1; + } + + public ItemStack getItem2() { + return this.item2; + } + + public ItemStack getRewardItem() { + return this.rewardItem; + } + + public boolean hasItem2() { + return this.item2 != null; + } + + public List getCommands() { + return this.commands; + } + + public void setCommands(List commands) { + this.commands = commands; + } + + public boolean hasCommands() { + return this.commands != null && !this.commands.isEmpty(); + } + +} diff --git a/common/src/main/resources/config.yml b/common/src/main/resources/config.yml new file mode 100644 index 0000000..2297d8f --- /dev/null +++ b/common/src/main/resources/config.yml @@ -0,0 +1,964 @@ +# ############################### +# ####### BEDWARS CONFIG ######## +# ##### CREATED BY YANNICI ###### +# ############################### +# ###### EXPLANATION ABOUT ###### +# ##### EVERY CONFIGURATION ##### +# ### YOU CAN FIND ON GITHUB #### +# ############ WIKI ############# +# ############################### + +# # TYPE HELP # # +# int: number (not decimal) +# string: a normal text (in most cases you can use colorcodes with a beginning §) +# boolean: true or false (IMPORTANT: true OR false ONLY) +# list: a list of type ? (? is the type of the list items) +# byte: a int but limited between -128 ... 127 +# short: a int but limited between -32768 ... 32767 +# char: one character + +chat-prefix: "&7[&bBedWars&7]&f" + +# Enabled Metrics +# type: boolean +# Plugin Metrics sending anonymous data about your server +# to store statistics about the bedwars plugin. This is really +# helpful for the developers of this plugin. You can +# disable it anyway, that won't be a disadvantage +plugin-metrics: true + +# Send Error Data +# type: boolean +# If enabled, the plugin will automatically send error reports to "BugSnag". +# This is really helpful for fixing issues with the plugin. You can +# disable it anyway, that won't be a disadvantage +send-error-data: true + +# Global send messages +# type: boolean +# Send messages (like game started messages) +# in global chat +global-messages: true + +# Global autobalance +# type: boolean +# Enables autobalancing in every game +global-autobalance: false + +# Global chat after end +# type: boolean +# When true, after game ends all players + spectators can chat +global-chat-after-end: true + +# game length +# Type: int +# The time the game should maximum run (in minutes). When the countdown expires +# the game will end without a winner. +gamelength: 60 + +# Allow crafting +# type: boolean +# When true, crafting is allowed ingame +allow-crafting: false + +# Override player name +# type: boolean +# If true, all player display names will be overwritten (prefix etc. will be removed) +# If false, it'll try to change the name color only, but will leave prefix which maybe causes +# wrong colors in tablist or chat +overwrite-names: false + +# Gamemode in lobby +# type: int +# The gamemode which should the players have in lobby +lobby-gamemode: 0 + +# Holographic Stats configs +holographic-stats: + # Show prefx + # type: boolean + # If true, the bedwars prefix will be shown on the bedwars + # holographic stats. + show-prefix: false + + # Statistic names color + # type: string + # The color of the statistic names (like "Kills", "Deaths" ...) + name-color: "&7" + + # Statstic value color + # type: string + # The color of the statistic values + value-color: "&e" + + # statistics headline + # type: string + # Leave the headline empty to remove the headline + head-line: "Your &eBEDWARS&f stats" + +# Add teamname in tablist +# type: boolean +# Adds the teamname before the player name +# in the tablist +teamname-on-tab: false + +# Teamname after player name +# type: boolean +# If true, the teamname will be added behind the player name +# in chat messages. If false, teamname won't be visible +teamname-in-chat: false + +# Show hearts on death +# type: boolean +# If true the remaining hearts of the killing player +# will be displayed in the chat. If false, it is not visible +hearts-on-death: true + +# Die on void damage +# type: boolean +# If true, player will die directly when get damage from void +die-on-void: false + +# type: boolean +# If true the Ressourcespawner spawns items inside a chest if it is on top of a ressource spawner +# If the chest is full, the items will drop naturally +spawn-ressources-in-chest: true + +# Lobby Time +# Type: int +# The lobby time defines how long you have to +# wait in the lobby until the game starts (when enough players) in seconds. +lobbytime: 60 + +# Chat format (waiting) +# type: string +# The chat format for messages in lobby (waiting mode) when +# player is not in a team +lobby-chatformat: "$player$: $msg$" + +# Chat format (all) +# type: string +# The chat format for messages which will be sent to all ingame players +# if player is spectator $team$ will be "Spectator" (translated, of course!) +ingame-chatformat-all: "[$all$] <$team$>$player$: $msg$" + +# Chat format +# type: string +# The chat format for the normal ingame chat between team-players +ingame-chatformat: "<$team$>$player$: $msg$" + +# The main game block +# type: string or int +# The block which should be the main block for the game (respawn block) +game-block: BED_BLOCK + +# Save game records +# type: boolean +# If true, the time records for every game will be stored. +store-game-records: true + +# Save game records holder +# type: boolean +# If true, the record holders will be saved and displayed +store-game-records-holder: true + +# Bed sound +# type: string +# The sound which should be played when a bed will be destroyed +# Which sound are available you can find here: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Sound.html +# (in the Enum Constant Summery) +bed-sound: ENDERDRAGON_GROWL + +# Player drops +# type: boolean +# If true, player will drop his items +player-drops: false + +# KeepInventory +# type: boolean +# If true, player will keep his inventory on death +keep-inventory-on-death: false + +# Place in liquid +# type: boolean +# If true, it's possible to set blocks in liquid (like water, lava ...) +# If false, it will be prevented to set blocks in liquid +place-in-liquid: true + +# Breakable blocks +breakable-blocks: + # Use as blacklist + # type: boolean + # If true, it's possible to break all blocks except the blocks on the list below + # If false, it's only possible to break the blocks on the list below + use-as-blacklist: false + + # type: list or list + # Defines the block types which are allowed to be broken + list: + - 'none' + +# Join team with entity config +jointeam-entity: + # Team name visible + # type: boolean + # Should the name of the team be displayed above + # the entity? If so: true, if not: false + show-name: true + +# Lobby Scoreboard settings +# ONLY 1.8 OR HIGHER +lobby-scoreboard: + # Enable lobby scoreboard + # type: boolean + # If true, the lobby scoreboard will be used (configurable in this section) + # If false, the normal scoreboard (with team display) will be used + enabled: true + + # Lobby scoreboard title + # type: string + # The title of the lobby scoreboard + # Placeholders: + # $regionname$ = Region name (or map name) + # $gamename$ = Name of the game + # $players$ = Current number of players + # $maxplayers$ = The maximum players for this game + title: "&eBEDWARS" + + # Lobby scoreboard content + # type: List + # The content of the lobby scoreboard (list of texts) + # Use " " (see example) for an empty row + # Placeholders: + # $regionname$ = Region name (or map name) + # $gamename$ = Name of the game + # $players$ = Current number of players + # $maxplayers$ = The maximum players for this game + content: + - " " + - "&fMap: &2$regionname$" + - "&fPlayers: &2$players$&f/&2$maxplayers$" + - " " + - "&fWaiting ..." + - " " + +# Scoreboard settings +scoreboard: + # Format for scoreboard teams (bed destroyed) + # type: string + # The format how the teams on the scoreboard will be displayed + # Possible placeholders: + # - $status$ (bed status => destroyed/not destroyed) + # - $team$ (Colored team name) + format-bed-destroyed: "&c$status$ $team$" + + # Format for scoreboard teams (bed alive) + # type: string + # The format how the teams on the scoreboard will be displayed + # Possible placeholders: + # - $status$ (bed status => destroyed/not destroyed) + # - $team$ (Colored team name) + format-bed-alive: "&a$status$ $team$" + + # Format for scoreboard title + # type: string + # The format for the scoreboard title (above teams) + # Possible placeholders: + # - $game$ (game name) + # - $region$ (game's region- or worldname) + # - $time$ (the countdown-timer) + format-title: "&e$region$&f - $time$" + +# Titles configuration (only compatible with >= 1.8) +titles: + # Win title + win: + # Enable win title (default: true) + # type: boolean + # If true, the title configured in this section will be displayed + enabled: true + + # io.github.bedwarsrel.com.v1_8_r1.Title Fade-In time + # type: double + # The time how long the title fade-in should take in seconds + title-fade-in: 1.5 + + # io.github.bedwarsrel.com.v1_8_r1.Title Stay time + # type: double + # The time how long the title will stay in seconds + title-stay: 5.0 + + # io.github.bedwarsrel.com.v1_8_r1.Title Fade-Out time + # type: double + # The time how long the title fade-out should take in seconds + title-fade-out: 2.0 + + # SubTitle Fade-In time + # type: double + # The time how long the subtitle fade-in should take in seconds + subtitle-fade-in: 1.5 + + # SubTitle Stay time + # type: double + # The time how long the subtitle will stay in seconds + subtitle-stay: 5.0 + + # SubTitle Fade-Out time + # type: double + # The time how long the subtitle fade-out should take in seconds + subtitle-fade-out: 2.0 + + # Map title with builder + map: + # Enable map title (default: false) + # type: boolean + # If true, a title will be displayed on start + # with the region name displayed and if set, the builder + # as subtitle. (/bw setbuilder {game}) + enabled: false + + # io.github.bedwarsrel.com.v1_8_r1.Title Fade-In time + # type: double + # The time how long the title fade-in should take in seconds + title-fade-in: 1.5 + + # io.github.bedwarsrel.com.v1_8_r1.Title Stay time + # type: double + # The time how long the title will stay in seconds + title-stay: 2.0 + + # io.github.bedwarsrel.com.v1_8_r1.Title Fade-Out time + # type: double + # The time how long the title fade-out should take in seconds + title-fade-out: 1.5 + + # SubTitle Fade-In time + # type: double + # The time how long the subtitle fade-in should take in seconds + subtitle-fade-in: 1.5 + + # SubTitle Stay time + # type: double + # The time how long the subtitle will stay in seconds + subtitle-stay: 2.0 + + # SubTitle Fade-Out time + # type: double + # The time how long the subtitle fade-out should take in seconds + subtitle-fade-out: 1.5 + + # Countdown title + countdown: + # Enabled countdown title + # type: boolean + # If true, the countdown will be displayed as title when game is + # in countdown (from 10) in lobby + enabled: true + + # io.github.bedwarsrel.com.v1_8_r1.Title format + # type: string + # The format of the countdown (colors addable) + format: "&3{countdown}" + +# Explode Behaviour +explodes: + # Destroy world blocks + # type: boolean + # Set to true to allow destroying region blocks + # Set to false to prevent block destroying in region + destroy-worldblocks: false + + # Destroy beds + # type: boolean + # Set to true, to allow players to destroy beds with tnt + destroy-beds: false + + # Block drops + # type: boolean + # If set to true, blocks will be dropping on explosions + # on false, exploded blocks won't drop anything + drop-blocking: false + +# Friendly Fire +# Type: boolean (true or false) +# Sets if friendlyfire is enabled (damage team mates) +friendlyfire: false + +# Prevent breaking under team mate +# type: boolean +# If true, you can break the block right under a team-member +# If false, it will be prevented to break block under team-member +friendlybreak: true + +# game over delay +# Type: int +# How much time (in seconds) should be waited until all players +# will be teleported after a game ends. +gameoverdelay: 10 + +# Use the Bedwars shopvillager +# Type: boolean +# Decide if you want to use the internal bedwars shop +use-internal-shop: true + +# Restore inventory after game ends +# type boolean +# If true the inventory gets restore after the game ends +save-inventory: true + +# Show team in io.github.bedwarsrel.com.v1_8_r1.ActionBar +# Type: boolean +# Sets if the name of a player's team should be displayed +# in the io.github.bedwarsrel.com.v1_8_r1.ActionBar +show-team-in-actionbar: false + +# Chat to all prefix +# type: list +# The prefix character which indicates to chat +# to all ingame players (not only team) +chat-to-all-prefix: +- '@' +- '@a' +- '@all' + +# Seperate game chat +# type: boolean +# Configure to false if players in games can read all messages of server +# Configure to true if players receive only game messages +seperate-game-chat: true + +# Seperate spectator chat +# type: boolean +# If set to true, spectators and game-players are seperated +# and players don't see spectators chat +seperate-spectator-chat: false + +# Statistic-Configuration +statistics: + # statistics enable + # type: boolean + # Set to true to enable statistics. Otherwise set to false + enabled: false + + # Show on game end + # type: boolean + # If true, the stats will be displayed after the game ends + show-on-game-end: true + + # Achievements storage type + # type: string + # yaml or database + # Set to yaml to store statistics in a Yaml-Configuration file or + # set to database to store statistics in the defined database. If no database + # configured, the statistics will be stored in Yaml-Files + storage: yaml + + # Bed destroy kill + # type: boolean + # If true, kills will only count if the bed is destroyed + # If false, every kill will count as a kill + bed-destroyed-kills: false + + # Scores configuration + scores: + # Score per kill + # type: int + # Sets the score which a player gets when he kills someone + kill: 10 + + # Score per death + # type: int + # Sets the score which a player gets when he dies + die: 0 + + # Score per win + # type: int + # Sets the score which all team-players gets when a team wins + win: 50 + + # Score per bed destroy + # type: int + # Sets the score which a player gets when he destroys a bed + bed-destroy: 25 + + # Score per lose + # type: int + # Sets the score which all team-players gets when a lose + lose: 0 + + # New record set + # type: int + # Sets the score which all team-players gets when they made a new record + record: 100 + +# database (currently only mysql) configuration +database: + + # database host + # type: string + # Hostname of your database + host: localhost + + # database port + # type: int + # Port of your database. Default mysql port: 3306 + port: 3306 + + # database name + # type: string + # The name of your database + db: database + + # database user + # type: string + # User for database authentication + user: root + + # database password + # type: string + # Password of database user for authentication + password: secret + + # Table prefix + # type: string + # A prefix for the database tables + table-prefix: bw_ + +# Spectation enabled +# Type: boolean +# Defines if spectators are allowed +spectation-enabled: false + +# Respawn protection +# Type: int +# The time which players are protected after respawn in seconds +# Set it to 0 to disable respawn protection. +respawn-protection: 0 + +# Allowed ingame commands +# type: List +# Defines a list of commands which are allowed for all for default. +# Can be set with an starting / or without +allowed-commands: + - /help + +endgame: +### Main lobby enabled +### Type: boolean +### Not available with bungeecord! +### If you want, that all players will be teleported to a specific +### location (you can set with /bw setmainlobby {game}) after a game or when a player +### uses /bw leave. If this is set to false, the players will be teleported to the location +### where they joined the game! + mainlobby-enabled: false + +### All players to mainlobby +### Type: boolean +### Not available with bungeecord! +### Configures if all players will be teleported to mainlobby after game. +### If false, all players will be teleported back to lobby to restart +### a new game. This is only recognized if mainlobby-enabled set to true + all-players-to-mainlobby: false + +# Bungeecord configurations +bungeecord: + # Enable Bungeecord + # Type: boolean + # Set to true to enable bungeecord compatibility. Set to false when you have + # a single server and don't use bungeecord. + enabled: false + + # Bungeecord Hubserver + # Type: string + # The name of the hub/main server of the bungeecord server-farm. This will be + # the server where the player will be teleported when they leave. + hubserver: hub + + # Endgame Lobby + # type: boolean + # If true, it sends players to your lobby during the endgame before getting kicked. + endgame-in-lobby: true + + # Full server restart + # Type: boolean + # If true, the server will do a full restart, with false + # it tries just to restart the game + full-restart: true + + # Use spigot restart + # type: boolean + # If true, it tries to use spigot's /restart command (ONLY WHEN full-restart IS true) + # If spigot isn't running, it will just stop the server + spigot-restart: true + + # Message of the Day configuration + # Type: string (colorcodes with &) + # Here you can specify the MOTDs which should be used + # at this bedwars server of your bungeecord server-farm. + # Useful for bedwars join signs in your lobby + motds: + lobby: | + $regionname$ + &7[&b$currentplayers$&7/&b$maxplayers$&7] + running: | + $regionname$ + &7[&b$currentplayers$&7/&b$maxplayers$&7] + stopped: | + $regionname$ + &c[Stopped] + full: | + $regionname$ + &7[&b$currentplayers$&7/&b$maxplayers$&7] + +### localization (language) +### Type: string (length: 2) +### Sets the localization which should be used. +### Check the plugin description for possible languages! +### Currently available languages: https://github.com/BedwarsRel/BedwarsRel/tree/master/src/main/resources/locale +### The fallback language is en_US (english). +locale: en_US + +# Resources config +resource: +## Custom spawners list +### Spawners (unique key!): +### item: +### type: List of ItemStack (same as shop) +### spawn-interval: +### type: int +### The interval in milliseconds the ressource should spawn +### spread: +### type: double +### How far the items should spread on drop + bronze: + item: + - type: CLAY_BRICK + amount: 1 + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: "§4Bronze" + spawn-interval: 1000 + spread: 1.0 + iron: + item: + - type: IRON_INGOT + amount: 1 + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: "§7Iron" + spawn-interval: 10000 + spread: 1.0 + gold: + item: + - type: GOLD_INGOT + amount: 1 + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: "§6Gold" + spawn-interval: 20000 + spread: 1.0 + +# Check Updates +# type: boolean +# Allow check for updates and automatically download the new update +# and save it to the update folder of your server +check-updates: true + +# Update infos +# type: boolean +# If true, you will get information when a new update will be downloaded +# If false, you won't get noticed when a update was downloaded +update-infos: true + +# Reward commands +# It is prerequisite that every command can be executed from the console (sender). +# These placeholder can be used in every command: +# {player} - the player for which the command will be executed +# {score} - the score of the player in the current game (ONLY WHEN STATISTICS ENABLED!) +rewards: + # Enable rewards + # type: boolean + # Enables reward commands + enabled: false + + # game win + # type: List + # commands which will be executed for every player which wins + # possible placeholders: {player}, {score} + # set the first command to "none", no commands will be executed + player-win: + - /example {player} 200 + + # game end (every player in game) + # type: List + # commands which will be execute for every player in game + # after the game has end + # possible placeholders: {player}, {score} + # set the first command to "none", no commands will be executed + player-end-game: + - /example {player} {score} + + # Player destroy bed + # type: List + # commands which will be executed for the player which + # destroys a bed of a enemy team + # possible placeholders: {player}, {score} + # {score} here is the score how much is configured + # at "statistics => scores => bed-destroy" + # set the first command to "none", no commands will be executed + player-destroy-bed: + - /example {player} {score} + + # Player kill + # type: List + # commands which will be executed for the player which + # kills a enemy player + # possible placeholders: {player}, {score} + # {score} here is the score how much is configured + # at "statistics => scores => kill" + # set the first command to "none", no commands will be executed + player-kill: + - /example {player} 10 + +# Special items +specials: + # Rescue platform settings + rescue-platform: + # Remove platform time + # type: int + # The time in seconds when the platform will be break after using + # the rescue platform + break-time: 10 + + # Using wait time + # type: int + # The seconds how long a player has to wait until he can + # use a rescue platform again + using-wait-time: 20 + + # Item + # type: int or string + # The name or id of the item which should be used for the rescue platform + item: BLAZE_ROD + + # Can break + # type: boolean + # If true, the rescue platform can be breaked by other players. + can-break: false + + # Block + # type: int or string + # The block-type which should be used for the rescue platform + block: STAINED_GLASS + + # Protection wall settings + protection-wall: + # Break time + # type: int + # The time in seconds when the wall should be removed again or + # 0 when the wall shouldn't be breaked again + break-time: 0 + + # Wait time + # type: int + # The wait time in seconds a player has to wait until he can + # use a protection wall again or 0 if protection walls can be activated anytime + wait-time: 20 + + # Can break wall + # type: boolean + # If true, the wall can be breaked by other players or + # false if it shouldn't be breakable + can-break: true + + # Interact item + # type: int or string + # The item id or string which indicates which item should be in the + # hand to execute the protection wall on interaction + item: BRICK + + # Wall type + # type: int or string + # The item-type which should be used for the wall. Should be + # a real block! + block: SANDSTONE + + # Wall width + # type: int + # The width in blocks the wall should be + # !! ODD ONLY !! + width: 5 + + # Wall height + # type: int + # The height in blocks the wall should be + height: 3 + + # Distance to player + # type: int + # The distance in blocks the wall should be away from the player + distance: 2 + + # Magnetshoe settings + magnetshoe: + # Knockback probability + # type: int + # The probability in percent the knockback will be prevented + probability: 75 + + # Knockback boots + # type: item (boots only!!!) + # The boots which are used as magnetshoe + boots: IRON_BOOTS + + # Warp-Powder settings + warp-powder: + # Show particles + # type: boolean + # If true, particles will be shown + show-particles: true + + # Particles type + # type: string + # Decide which particles should be used at teleport. + particle: fireworksSpark + + # Teleport time + # type: int + # The time in seconds a teleportation should need + teleport-time: 6 + + # Trap settings + trap: + + # Trap play sound + # type: boolean + # Set to true, to play sound when someone step into a trap (sound only to players + # of the team, which placed the trap) + play-sound: true + + # List of effects the player gets after stepping on a trap + effects: + + # Now the custom PotionEffect + # It is a list of effects + - ==: PotionEffect + + # Potion id + # type: int + # The id 15 means the PotionEffect Blindness + # You can find a list of possible effect ids you can use on http://minecraft-helpandinfo.weebly.com/potion-effects-ids.html + effect: 15 + + + # Effect duration in ticks (20 ticks = 1 second) + # type: int + # The duration the trapeffect will have effects on the player in ticks + # 100 ticks is default (5 seconds) + duration: 100 + + # Effect amplifier + # type: int + # The higher the value, the heavier the effect. + amplifier: 2 + + # Effect ambient + # type: boolean + # Makes potion effect produce more, translucent, particles. + ambient: true + + # Effect has particles + # type: boolean + # Set to true, if trap effect should generate particles around the player + has-particles: true + + # Two more examples + # Feel free to customize and add more effects + - ==: PotionEffect + + # PotionEffect Weakness + effect: 18 + + duration: 100 + amplifier: 2 + ambient: true + has-particles: true + + - ==: PotionEffect + + # PotionEffect Slowness + effect: 2 + + duration: 100 + amplifier: 2 + ambient: true + has-particles: true + + # TNT-Creature settings + tntsheep: + # TNT fuse time + # type: double + # The time in seconds when the TNT will explode + fuse-time: 8.0 + + # Sheep movement speed + # type: double + # The movement speed of the sheep + # Prefered 0.4! Do not set higher than 0.8!!! + speed: 0.4 + + # Explosion factor + # type: double + # The factor for the explosive! 1.0 is default tnt-explosion. + # Its not recommended to use values above 1.0 + explosion-factor: 1.0 + + # arrow-blocker settings + arrow-blocker: + # Protection time + # type: int + # The time to protect the player from projectils + protection-time: 10 + + # Protection time + # type: int + # Time to wait for the next useage + using-wait-time: 5 + + # Interact item + # type: int or string + # The item id or string which indicates which item should be in the + # hand to execute the arrow-blocker on interaction + item: ender_eye + +# Sign configuration +# You can use following placeholder (colors with &): +# $gamename$ - display game name +# $regionname$ - display region name +# $maxplayers$ - display max players amount (color overwrite when full) +# $currentplayers$ - display current players in game (color overwrite when full) +# $status$ - display current game status (lobby, running or waiting) +# $title$ - display bedwars title (sign.firstline of locale file) +sign: + first-line: '$title$' + second-line: '$regionname$' + third-line: 'Players &7[&b$currentplayers$&7/&b$maxplayers$&7]' + fourth-line: '$status$' + +# Configure player default settings +player-settings: + + # shop: One Stack on shift click + # type: boolean + # Only one full stack when doing a shift click to buy items. + # Player can change that in shop, this is just a default + one-stack-on-shift: false + + # shop: Default shop on game start + # type: boolean + # Set the default shop on game start. + # Player can change that in shop, this is just a default + old-shop-as-default: false diff --git a/common/src/main/resources/locale.yml b/common/src/main/resources/locale.yml new file mode 100644 index 0000000..f597396 --- /dev/null +++ b/common/src/main/resources/locale.yml @@ -0,0 +1,297 @@ +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "The given team was not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + teamnotfound: "Team not found!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: "&aThe record on this map is &e$record$&a and is held by: $holders$" + newrecord: "&aTeam $team$&a set a new record: &6$record$" + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/af_ZA.yml b/common/src/main/resources/locale/af_ZA.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/af_ZA.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/ar_SA.yml b/common/src/main/resources/locale/ar_SA.yml new file mode 100644 index 0000000..b19e4ee --- /dev/null +++ b/common/src/main/resources/locale/ar_SA.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "اللعبة '$game$' لا يمكن ايجادها!" + nofreegames: "لا الألعاب متوفرة الان." + gamenotfoundsimple: "لا يمكن إيجاد اللعبة!" + playeramount: "الحد الأقصى للاعبين لا يمكن ان يكون تحت 1 او اعلى من 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "اسم الفريق يجب ان يكون بين حرفين و 20 حرف!" + teamnotfound: "لم يتم العثور على فريق!" + notingame: "أنت الآن ليس في لعبة!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "اللعبة لا تعمل!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "لا يمكنك الانضمام إلى لعبة قيد التشغيل أو تم إيقافها!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "لم يتم العثور على اي ألعاب!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "اسم الفريق مسبقاً قيد الاستخدام!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "الحد الأقصى لطول اسم المنطقة 15 حرف!" + notwhilegamerunning: "لا يمكن القيام بذلك أثناء تشغيل اللعبة!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "أنت لست في الهواء!" + teamfull: "الفريق كامل، يرجى إعادة فتح قائمة اختيار الفرق!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "يجب أن تكون في اللعبة لطرد لاعب!" + playernotingame: "اللاعب ليس في هذه اللعبة!" + mustbeinlobbyworld: "يجب أن تكون في عالم بهو اللعبة" + addteamjoincancel: "إضافة للانضمام إلى فريق ألغى!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "اللعبة '$game$' تمت اضافتها بنجاح!" + teamadded: "الفريق '$team$' تم اضفاته بنجاح!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "تم حفظ اللعبة بنجاح!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "تمت إزالة الفريق بنجاح!" + gameremoved: "تمت إزالة اللعبة بنجاح!" + spawnercleared: "وقد أزيلت جميع منتجات الموارد!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ قتل $player$!" + kicked: "الاعب $player$ طرد!" + waskicked: "لقد طردت من اللعبة!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "حماية الأسهم انتهت" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "لا يمكنك استخدام جدار الحماية هنا!" + warp-powder: + cancelled: "&cانتقالك قد الغي!" + start: "سوف يتم نقلك خلال &c$time$&f ثانية, لا تتحرك" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "بحاجة إلى المزيد من اللاعبين. تم إلغاء العد التنازلي!" + cancelcountdown: + not_enough_players: "بحاجة إلى المزيد من اللاعبين. تم إلغاء العد التنازلي!" + not_enough_teams: "بحاجة إلى مزيد من الفرق. تم إلغاء العد التنازلي!" + cancelstart: + not_enough_players: "يلزم المزيد من اللاعبين لبدء اللعبة!" + not_enough_teams: "فرق أكثر مطلوبة لبدء تشغيل اللعبة!" + chooseteam: "اختر فريق" + startgame: "بدء اللعبة" + reduce_countdown: "تقليل العد التنازلي" + gamefull: "لعبة ممتلئ!" + gamefullpremium: "اللعبة بالكامل من اللاعبين الداعمين بالفعل!" + teamjoined: "لقد انضممت الى الفريق $team$ بنجاح" + leavegame: "ترك اللعبة" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "اللاعبين" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "عدد مرات الفوز" + loses: "عدد مرات الخسارة" + score: "النقاط" + destroyedBeds: "الاسرة المدمرة" + games: "الألعاب" +commands: + addgame: + name: "إضافة لعبة" + desc: "إضافة لعبة جديدة" + addteam: + name: "إضافة فريق" + desc: "Adds a team to a specific game" + join: + name: "الانضمام إلى لعبة" + desc: "Joins a specific game" + leave: + name: "ترك اللعبة" + desc: "Leave the current game" + save: + name: "حفظ اللعبة" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "تحديد الهدف" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "بدء اللعبة" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/ast_ES.yml b/common/src/main/resources/locale/ast_ES.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/ast_ES.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/az_AZ.yml b/common/src/main/resources/locale/az_AZ.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/az_AZ.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/be_BY.yml b/common/src/main/resources/locale/be_BY.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/be_BY.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/bg_BG.yml b/common/src/main/resources/locale/bg_BG.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/bg_BG.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/br_FR.yml b/common/src/main/resources/locale/br_FR.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/br_FR.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/ca_ES.yml b/common/src/main/resources/locale/ca_ES.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/ca_ES.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/cs_CZ.yml b/common/src/main/resources/locale/cs_CZ.yml new file mode 100644 index 0000000..e6be294 --- /dev/null +++ b/common/src/main/resources/locale/cs_CZ.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Stranka $current$ z $max$" + currently: Aktualni +errors: + argumentslength: "Byl zadán špatný počet argumentů!" + holodependencynotfound: "Potrebny plugin $dependency$ nenalezen. Bez nej nelze spustit Hologram-statistiky" + packagenotfound: "Nelze nacist balicek $package$!" + classnotfound: "Nelze nacist balicek $package$ ve tride $class$!" + gameexists: "Hra se stejnym jmenem jiz byla vytvorena!" + gamenotfound: "Hra '$game$' neexistuje!" + nofreegames: "Aktualne nejsou volne zadne hry." + gamenotfoundsimple: "Hra neexistuje!" + playeramount: "Pocet hracu musi byt v rozsahu 1 az 24!" + teamcolornotallowed: "Tato barva neni pro tymy povolena." + teamnamelength: "Nazev tymu musi byt v rozsahu 2 - 20!" + teamnotfound: "Tym nenalezen!" + notingame: "Prikaz nebyl zadan ve hre!" + bedtargeting: "Musis stat na bloku, ktery je v konfiguraci zapsany jako 'game-block'!" + regionargument: "Argumenty u regionu jsou pouze 'loc1' nebo 'loc2'!" + spawnerargument: "Parametr spawneru musi byt dobre nakonfigurovan!" + blockdownnotfound: "Nebyl nalezen block na kterem stojis!" + gamenotrunning: "Hra neni spustena!" + bungeenoserver: "BungeeCord server neni spravne nastaven! Kontaktuj administratora!" + cantstartagain: "Hra jiz bezi! Nelze zapnout hru, ktera jiz bezi!" + startoutofwaiting: "Hra bude zapnuta bez cekani!" + cantjoingame: "Nemuzes se pripojit do hry, ktera jiz bezi nebo je vypnuta!" + lobbyongameworld: "Lobby nemuze byt na hernim svete!" + gamenotloaded: "Hru nelze nacist!" + gameloaderror: "Nelze nacist hru '$game$'!" + regionnotfound: "Soubor mapy neexistuje!" + savesign: "Nelze vytvorit novou konfiguraci pro cedulku!" + nogames: "Aktualne nejsou nakonfigurovany zadne areny.." + notenoughress: "Nemas dostatek surovin pro koupi tohoto predmetu!" + teamnameinuse: "Jmeno tymu je jiz pouzito!" + minplayersmustnumber: "Minimalni pocet hracu musi byt cislo!" + toolongregionname: "Maximalni delka muze byt 15 pismen dlouha!" + notwhilegamerunning: "Nelze provest pokud hra bezi!" + notwhileingame: "Nelze provest pokud jsi ve hre." + timeincorrect: "Cas musi byt v rozmezi 0 - 23000, day nebo night!" + minplayersnumeric: "Pocet minimalnich hracu musi byt cislo!" + notinair: "Nejsi ve vzduchu!" + teamfull: "Tym je plny, otevri si znovu vyberove menu!" + novalidmaterial: "Blok (material) neni spravny!" + wrongvalueonoff: "Spatny parametr! Pouzij true nebo on nebo 1 pro zapnuti - Pouzij false nebo off nebo 0 pro vypnuti!" + playernotfound: "Hrac nebyl nalezen!" + notingameforkick: "Hrace lze vyhodit pouze ze hry!" + playernotingame: "Zadany hrac se nenachazi ve hre!" + mustbeinlobbyworld: "Musis byt v hernim lobby!" + addteamjoincancel: "Pridavani pripojeni do hry zruseno!" + entitynotcompatible: "Tuto entitu nelze pouzit pro vyber tymu!" +success: + gameadded: "Nova hra '$game$' uspesne pridana!" + teamadded: "Tym '$team$' uspesne pridan!" + joined: "Pripojeni do hry bylo uspesne!" + left: "Odpojeni ze hry bylo uspesne." + saved: "Hra byla uspesne ulozena!" + bedset: "Uspesne jsi nastavil respawn blok tymu $team$!" + regionset: "Oblast $location$ pro hru $game$ uspesne nastavena!" + spawnset: "Spawn lokace pro tym $team$ uspesne nastavena!" + spawnerset: "Spawn surovin $name$ uspesne nastaven!" + stopped: "Hra byla zastavena!" + lobbyset: "Lobby pro hru bylo nastaveno!" + gameloaded: "Hra '$game$' uspesne nactena!" + reloadconfig: "Konfigurace a jazyky znovu nacteny!" + teamremoved: "Tyym byl uspesne odstranen!" + gameremoved: "Hra byla uspesne odstranena!" + spawnercleared: "Vsechny spawnery surovin byly odstraneny!" + gamerun: "Hra byla zapnuta, hraci jiz mohou hrat!" + timeset: "Cas hry byl uspesne nastaven!" + regionnameset: "Jmeno regionu uspesne nastaveno!" + minplayersset: "Min. pocet hracu nastaven!" + mainlobbyset: "Mainlobby uspesne nastaveno!" + gametimeset: "Cas hry uspesne nastaven!" + materialset: "Respawn blok (material) byl uspesne nastaven!" + builderset: "Stavitel teto mapy byl uspesne nastaven a bude se zobrazovat v title!" + autobalanceseton: "Automaticke vyvazovani bylo &lzapnuto&a!" + autobalancesetoff: "Automaticke vyvazovani bylo &cvypnuto&a!" + selectteamjoinentity: "Nyni klikni pravym na entitu, kterou chces pouzit!" + teamjoinadded: "Entita byla uspesne ulozena pro tym $team$" + holoremoved: "Hologram uspesne odstranen!" +gamecheck: + LOC_NOT_SET_ERROR: "Lokace pro tuto hru nebyla dobre nastavena!" + TEAM_SIZE_LOW_ERROR: "Musis nastavit vice tymu!" + NO_RES_SPAWNER_ERROR: "Nenastavil jsi zadny spawner surovin!" + NO_LOBBY_SET: "Nenastavil jsi lobby!" + TEAMS_WITHOUT_SPAWNS: "Jsou zde tymy bez spawn lokace!" + NO_ITEMSHOP_CATEGORIES: "Zadne kategorie obchodu nenalezeny!" + NO_MAIN_LOBBY_SET: "Nenastavil jsi Main lobby (hlavni lobby) nebo jsi v nastaveni nepovolil 'tomainlobby' na true (povoleno)" + TEAM_NO_WRONG_BED: "Jeden nebo vice tymu nemaji nastavenou postel!" + TEAM_NO_WRONG_TARGET: "Jeden nebo vice tymu nemaji nastaveny respawn block!" +ingame: + team: "Tým" + teams: "Tymy" + all: "Vsichni" + record: "&e$record$&a je rekord na teto mape!" + record-with-holders: '&aRekord na této mape je &e$record$&a ziskany hracmi: $holders$' + newrecord: '&aTym $team$&a ziskal novy rekord: &6$record$' + record-nobeddestroy: "&cRekord nemohl byt ulozen, jelikoz &lnebyla &cznicena zadna postel!" + teamwon: "Gratulace! Tym $team$ vyhral!" + draw: "Hra skoncila remizou." + serverrestart: "Restart serveru za $sec$ sekund!" + gamestarting: "Hra se zapina!" + gamestarted: "Hra '$game$' zacala!" + backtolobby: "Teleportace do lobby za $sec$ sekund!" + spectator: "Sledujici" + spectate: "&aSledovat" + teamchest: "Tymova truhla" + noturteamchest: "Tato truhla nepatri tvemu tymu!" + protectionleft: "Jsi nezranitelny na &c$length$&f sekund!" + protectionend: "Nyni jsi opet &czranitelny&f!" + team-dead: "Tym $team$ byl znicen!" + no-friendlybreak: "&cNemuzes znicit blok pod hracem sveho tymu!" + teamchestdestroy: "&cTymova truhla byla znicena!" + title: + map-builder: "Mapu postavil/a $builder$" + win-title: "&a&lGratulace!" + win-subtitle: "$team$&6 vyhral v case &e$time$" + shop: + name: "Obchod" + newshop: "Pouzit novy obchod" + oldshop: "Pouzit stary obchod" + fullstackpershift: "Vice stacku za shift click" + onestackpershift: "Jeden stack za shift click" + player: + left: "Hrac $player$ odesel ze hry." + died: "$player$ zemrel!" + killed: "$killer$ zabil $player$!" + kicked: "$player$ byl vyhozen!" + waskicked: "Byl jsi vyhozen ze hry!" + blocks: + ownbeddestroy: "Nemuzes znicit svou postel!" + beddestroyed: "$player$ znicil postel tymu $team$!" + specials: + rescue-platform: + left: "&cMusis pockat &e$time$&f sekund(u) pred pouzitim dalsi zachrane platformy!" + arrow-blocker: + start: "Máš ochranu proti zásahu šípem na &c$time$&f sekund." + end: "&cOchrana proti zásahu šípem skončila" + left: "Musíš počkat ještě &c$time$&f sekund než budeš moci znovu použít ochranu proti šípům!" + trap: + trapped: "&eNekdo vstoupil do &cpasti&e tveho tymu!" + protection-wall: + left: "Musis pockat &c$time$&f sekund pred pouzitim!" + not-usable-here: "Tento predmet zde nemuzes pouzit!" + warp-powder: + cancelled: "&cTeleportace zrusena!" + start: "Budes teleportovan za &c$time$&f sekund!" + cancel: "&4Zrusit Teleport" + multiuse: "&cTeleportace probiha! Nelze se teleportovat znova." + tntsheep: + no-target-found: "Nebyl nalezen zadny cil!" + tracker: + no-target-found: "Nebyl nalezen zadny cil!" + target-found: "$player$ je $blocks$ bloku od tebe." +lobby: + countdown: "Hra zacne za $sec$ sekund!" + countdowncancel: "Je potreba vice hracu! Odpocet byl zastaven." + cancelcountdown: + not_enough_players: "Je potreba vice hracu! Odpocet byl zastaven." + not_enough_teams: "Je potreba vice tymu. Odpocitavani bylo zastaveno!" + cancelstart: + not_enough_players: "Pro start hry je potreba vice hracu!" + not_enough_teams: "Je potreba vice tymu pro start hry!" + chooseteam: "Vyber si tym" + startgame: "start" + reduce_countdown: "Snížit odpočítávání" + gamefull: "Hra je plna!" + gamefullpremium: "Tato hra je jiz plna VIP hracu!" + teamjoined: "Uspesne jsi se pripojil do tymu $team$" + leavegame: "Opustit hru" + playerjoin: "Hrac $player$ se pripojil do hry!" + kickedbyvip: "Bylo uvolneno misto pro VIP hrace, byl(a) jsi vyhozen." + moreplayersneeded: "Je potreba $count$ hracu navic." + moreplayersneeded-one: "Je potreba $count$ hrac navic." + moreteamsneeded: "Jsou potreba minimalne dva hraci ve dvou ruznych tymech pro start hry!" +sign: + firstline: "&6[Bedwars]" + players: "Hraci" + gamestate: + stopped: "&4ZASTAVENO" + waiting: "&aLOBBY" + running: "&9HRA PROBIHA!" + full: "&cPLNO!" +stats: + header: "Statistiky BedWars her" + kd: "K/D" + statsnotfound: "Statistika hrace $player$ nenalezena!" + name: "Jmeno" + kills: "Zabiti" + deaths: "Smrti" + wins: "Vyhry" + loses: "Prohry" + score: "Skore" + destroyedBeds: "Znicene postele" + games: "Hrane hry" +commands: + addgame: + name: "addgame" + desc: "Prida novou hru" + addteam: + name: "addteam" + desc: "Prida tym pro urcenou arenu" + join: + name: "join" + desc: "Prikaz pro pripojeni do urcite areny" + leave: + name: "leave" + desc: "Prikaz pro odpojeni z urcite areny" + save: + name: "save" + desc: "Ulozi parametry areny" + settarget: + name: "settarget" + desc: "Nastavi lokaci bloku tymu" + setbed: + name: "setbed (stejne jako settarget)" + desc: "Nastavi lokaci postele tymu (stejne jako settarget)" + setlobby: + name: "setlobby" + desc: "Nastavi lokaci herniho lobby" + setregion: + name: "setregion" + desc: "Nastavi hranice hry, po ktere jde stavet, etc" + setspawn: + name: "setspawn" + desc: "Nastavi misto, na kterem se bude objevovat tym" + setspawner: + name: "setspawner" + desc: "Nastavi misto pro spawnovani surovin" + start: + name: "start" + desc: "Spusti hru" + stop: + name: "stop" + desc: "Ukonci hru" + help: + name: "help" + desc: "Ukaze veskere potrebne informace" + reload: + name: "reload" + desc: "Znovu nacte veskerou konfiguraci a jazyky" + setmainlobby: + name: "setmainlobby" + desc: "Nastavi tzv. main lobby, kam se teleportuji hraci po odehrane hre. (je potreba pokud je mainlobby-enabled nastaveno na true)" + list: + name: "list" + desc: "Zobrazi veskere dostupne hry" + regionname: + name: "regionname" + desc: "Nastavi jmeno pro arenu" + removeteam: + name: "removeteam" + desc: "Smaze tym ze hry (pouze pokud je hra vypnuta)" + removegame: + name: "removegame" + desc: "Smaze hru a konfiguraci" + clearspawner: + name: "clearspawner" + desc: "Odstrani vsechny spawnery surovin. Je nutne ulozit opet arenu." + gametime: + name: "gametime" + desc: "Nastavi cas hry, po ktery se hraje v arene" + stats: + name: "stats" + desc: "Zobrazi kompletni vypis BedWars statistik" + setbuilder: + name: "setbuilder" + desc: "Nastavi autora mapy, ktery se bude zobrazovat v titulu." + setgameblock: + name: "setgameblock" + desc: "Nastavi block hry, ktery muze byt pouzit misto bude pouzit misto 'game-block' pro tuto arenu. Parametr 'DEFAULT' pouzije blok z konfiguracniho souboru." + setautobalance: + name: "setautobalance" + desc: "Pokud je parametr 'global-autobalance' nastaven na 'false', tak lze pomoci tohoto prikazu nastavit automaticke balancovani hracu pro tuto hru!" + setminplayers: + name: "Nastavit minimum hracu" + desc: "Nastavit minimalni pocet hracu pro start hry" + kick: + name: "kick" + desc: "Vyhodi zadaneho hrace ze hry" + addteamjoin: + name: "addteamjoin" + desc: "Vybere entitu, pomoci ktere se budete moci pripojit do tymu!" + addholo: + name: "addholo" + desc: "Prida hologram do aktualni pozice!" + removeholo: + name: "removeholo" + desc: "Pri zadani prikazu staci kliknou pravym tlacitkem pro odstraneni.." + explain: "Uvnitr hologramu drz 10 sekund prave tlacitko!" + debugpaste: + name: "Vložení debug dat" + desc: "Odešle pár debug dat na hastebin a vytvoří Url link, který můžete sdílet s vývojáři" + itemspaste: + name: "Vložte váš inventář do souboru" + desc: "Toto navrátí zpět odkaz, kde můžete vidět váš momentální serializovaný inventář jako příklad pro váš soubor shop.yml" diff --git a/common/src/main/resources/locale/cy_GB.yml b/common/src/main/resources/locale/cy_GB.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/cy_GB.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/da_DK.yml b/common/src/main/resources/locale/da_DK.yml new file mode 100644 index 0000000..7cc5ff2 --- /dev/null +++ b/common/src/main/resources/locale/da_DK.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Side $current$ af $max$" + currently: I øjeblikket +errors: + argumentslength: "Antallet af argumenter stemmer ikke overens den korrekte mængde!" + holodependencynotfound: "Kunne ikke finde $dependency$ for Hologram-statistik" + packagenotfound: "Kunne ikke hente $package$ pakken!" + classnotfound: "Kunne ikke hente $package$ klasse $class$!" + gameexists: "Et spil med dette navn findes allerede!" + gamenotfound: "Spil '$game$ ' blev ikke fundet!" + nofreegames: "Der er ingen tilgængelige spil." + gamenotfoundsimple: "Spil ikke fundet!" + playeramount: "Maksimal af spillere kan ikke være lavere end 1 eller højere end 24!" + teamcolornotallowed: "Den givne hold farve er ikke en tilladt farve" + teamnamelength: "Teamnavn skal have mellem 2 og 20 tegn!" + teamnotfound: "Hold ikke fundet!" + notingame: "Du er i øjeblikket ikke i et spil!" + bedtargeting: "Du er nødt til at målrette eller stå på en blok af typen konfigurerede 'spil-blok'!" + regionargument: "Din placering argument må være 'loc1' eller 'loc2'!" + spawnerargument: "Parameteren ressource har til at være en gyldigt konfigureret ressource!" + blockdownnotfound: "Den blok, du står på blev ikke fundet!" + gamenotrunning: "Spillet kører ikke!" + bungeenoserver: "Bungeecord server er ikke indstillet korrekt! Tale med serveradministratoren!" + cantstartagain: "Spillet kører! Du kan ikke starte en kørende spil igen!" + startoutofwaiting: "Spillet skal være startet ud af tilstanden venter!" + cantjoingame: "Du kan ikke deltage i et kørende eller stoppede spil!" + lobbyongameworld: "Lobbyen kan ikke være på spillets verden!" + gamenotloaded: "Kunne ikke starte spillet!" + gameloaderror: "Loading spil '$game$ ' kaster en fejl!" + regionnotfound: "Regionen fil eksisterer ikke!" + savesign: "Kunne ikke oprette et ny skilte fil!" + nogames: "Der findes ingen spil!" + notenoughress: "Du har ikke nok ressource at købe denne vare!" + teamnameinuse: "Teamnavn er allerede i brug!" + minplayersmustnumber: "Min. spillere skal være et tal!" + toolongregionname: "Maksimumlængden af områdenavn er 15 tegn!" + notwhilegamerunning: "Du kan ikke gøre dette, imens spillet kører!" + notwhileingame: "Kan ikke gøre det mens du er i et kørende spil!" + timeincorrect: "Tiden må være et tal (0... 23000), 'day' eller 'night'!" + minplayersnumeric: "Parameteren min-spillere skal være numerisk!" + notinair: "Du er ikke i luften!" + teamfull: "Holdet er fuld, du skal genåbne holdet valgmenuen!" + novalidmaterial: "I betragtning af blok type (materiale) er ikke korrekt!" + wrongvalueonoff: "Forkert Parameter! Brug true, on, 1 for at tænde - brug false, off, 0 for at slå fra!" + playernotfound: "Spilleren blev ikke fundet eller er ikke online!" + notingameforkick: "Du skal være i et spil for at kicke en spiller!" + playernotingame: "Spilleren er ikke i dette spil!" + mustbeinlobbyworld: "Du skal være i lobby verden" + addteamjoincancel: "Tilføjelse af team join blev aflyst!" + entitynotcompatible: "Denne enhed er ikke kompatibel med team join!" +success: + gameadded: "Nye spil '$game$ \"tilføjet!" + teamadded: "Team '$team$ \"tilføjet!" + joined: "Du joinet spillet!" + left: "Du forlod spillet!" + saved: "Spillet var gemt!" + bedset: "Du held sat respawn blok af team $team$!" + regionset: "Spil region placering $location$ for spillet $game$ var angivet med succes!" + spawnset: "Spawn lokationen for Team $team$ var angivet med succes!" + spawnerset: "Ressource spawn placering til $name$ blev sat med succes!" + stopped: "Spil stoppet!" + lobbyset: "Lobby blev sat med succes!" + gameloaded: "Spil '$game$' er indlæst!" + reloadconfig: "Genindlæse vellykket!" + teamremoved: "Holdet blev fjernet!" + gameremoved: "Spil blev fjernet!" + spawnercleared: "Alle ressource spawner er blevet fjernet!" + gamerun: "Du startede spillet, spillere kan nu tilmelde sig!" + timeset: "Spilletid blev med held sat!" + regionnameset: "Regionen navn blev sat med succes!" + minplayersset: "Min. spillere blev sat med succes!" + mainlobbyset: "Mainlobby blev sat med succes!" + gametimeset: "Spille tid blev sat med succes!" + materialset: "Respawn block type (materiale) blev sat succes!" + builderset: "Byggerne for mappet blev sat med succes og vises i titlen!" + autobalanceseton: "Autobalance er aktiveret!" + autobalancesetoff: "Autobalance var slået &cfra&a!" + selectteamjoinentity: "Højreklik på den enhed, du vil bruge som team join!" + teamjoinadded: "Enhed var med held markeret som team udvælgelse til team $team$" + holoremoved: "Hologram-statistik fjernet!" +gamecheck: + LOC_NOT_SET_ERROR: "Steder for regionen var ikke sat ordentligt!" + TEAM_SIZE_LOW_ERROR: "Du skal angive flere hold!" + NO_RES_SPAWNER_ERROR: "Du har ikke angivet nogen ressource spawner!" + NO_LOBBY_SET: "Du har ikke angivet en lobby!" + TEAMS_WITHOUT_SPAWNS: "Der er hold uden en spawn placering!" + NO_ITEMSHOP_CATEGORIES: "Ingen itemshop kategorier fundet!" + NO_MAIN_LOBBY_SET: "Du har ikke angivet en hovedlobbyen, selvom du indstillet 'tomainlobby' til true" + TEAM_NO_WRONG_BED: "En eller flere hold har ingen seng sæt!" + TEAM_NO_WRONG_TARGET: "En eller flere hold har ingen respawn block sat!" +ingame: + team: "Team" + teams: "Hold" + all: "Alle" + record: "&e$record$&a er rekorden på dette map!" + record-with-holders: '&aRekorden på dette map er &e$record$&a og er i besiddelse af: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/de_AT.yml b/common/src/main/resources/locale/de_AT.yml new file mode 100644 index 0000000..b247ec0 --- /dev/null +++ b/common/src/main/resources/locale/de_AT.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Seite $current$ von $max$" + currently: Aktuell +errors: + argumentslength: "Die Anzahl der Argumente entspricht nicht der Vorgabe!" + holodependencynotfound: "Es fehlt $dependency$ für die Hologram-Statistik" + packagenotfound: "Konnte Package $package$ nicht laden!" + classnotfound: "Konnte $package$ Klasse $class$ nicht laden!" + gameexists: "Ein Spiel mit diesem Namen existiert bereits!" + gamenotfound: "Das Spiel '$game$' konnte nicht gefunden werden!" + nofreegames: "Es wurde kein verfügbares Spiel gefunden." + gamenotfoundsimple: "Spiel nicht gefunden!" + playeramount: "Die maximale Anzahl kann nicht weniger als 1 und nicht größer als 24 sein!" + teamcolornotallowed: "Die angegebene Teamfarbe ist nicht erlaubt!" + teamnamelength: "Der Teamname muss zwischen 2 und 20 Zeichen haben!" + teamnotfound: "Team nicht gefunden!" + notingame: "Du bist zurzeit in keinem Spiel!" + bedtargeting: "Du musst ein Respawn-Block des konfigurierten 'game-block' anvisieren oder auf einem stehen!" + regionargument: "Dein Location-Parameter muss 'loc1' oder 'loc2' entsprechen!" + spawnerargument: "Dein Ressourcen-Parameter ist ungültig oder verweist auf keine konfigurierte Ressource!" + blockdownnotfound: "Der Block unter dir konnte nicht gefunden werden!" + gamenotrunning: "Spiel läuft nicht!" + bungeenoserver: "Der Bungeecord Server wurde nicht korrekt konfiguriert. Bitte benachrichtige den Serveradministrator!" + cantstartagain: "Spiel läuft! Du kannst kein laufendes Spiel starten!" + startoutofwaiting: "Ein Spiel muss aus dem Lobby-Status gestartet werden!" + cantjoingame: "Du kannst keinem laufenden oder beendetem Spiel beitreten!" + lobbyongameworld: "Die Lobby darf nicht auf der Welt des Spiels sein!" + gamenotloaded: "Spiel konnte nicht geladen/gestartet werden!" + gameloaderror: "Das Laden des Spiels '$game$' hat einen Fehler verursacht!" + regionnotfound: "Region-Datei existiert nicht!" + savesign: "Speichern der Schilder nicht möglich (Datei konnte nicht erstellt werden)!" + nogames: "Keine Spiele gefunden!" + notenoughress: "Du hast nicht genug Ressourcen um das zu kaufen!" + teamnameinuse: "Ein Team mit diesem Namen existiert bereits!" + minplayersmustnumber: "Die min. Spieler muss eine Nummer sein!" + toolongregionname: "Region-Name darf nur maximal 15 Zeichen haben!" + notwhilegamerunning: "Das kannst du nicht tun während das Spiel läuft!" + notwhileingame: "Das kannst du nicht tun während du in einem Spiel bist!" + timeincorrect: "Die Zeit muss eine Zahl sein (0 ... 23000), 'day' oder 'night'" + minplayersnumeric: "Die Mindestanzahl der Spieler muss numerisch sein!" + notinair: "Du bist nicht in der Luft!" + teamfull: "Das Team ist voll, bitte öffne die Teamauswahl erneut!" + novalidmaterial: "Angegebene Block-Typ (Material) ist nicht korrekt!" + wrongvalueonoff: "Falscher Parameter! Einschalten mit: true,on,1 - Ausschalten mit: false,off,0" + playernotfound: "Angegebener Spieler wurde nicht gefunden oder ist nicht online!" + notingameforkick: "Du musst in einem Spiel sein, um kicken zu können!" + playernotingame: "Angegebener Spieler ist nicht in diesem Spiel!" + mustbeinlobbyworld: "Du musst in der Lobby-Welt des Spiels sein!" + addteamjoincancel: "Das Hinzufügen von einem Team-Beitritt wurde abgebrochen!" + entitynotcompatible: "Diese Kreature wird für die Team-Auswahl nicht unterstützt!" +success: + gameadded: "Neues Spiel '$game$' erfolgreich hinzugefügt!" + teamadded: "Team $team$ erfolgreich hinzugefügt!" + joined: "Du bist dem Spiel beigetreten!" + left: "Du hast das Spiel erfolgreich verlassen!" + saved: "Spiel wurde erfolgreich gespeichert!" + bedset: "Der Respawn-Block für Team $team$ wurde erfolgreich gesetzt!" + regionset: "Der Regionspunkt $location$ wurde für das Spiel $game$ erfolgreich gesetzt!" + spawnset: "Spawn-Punkt für Team $team$ wurde erfolgreich gesetzt!" + spawnerset: "Ressourcen-Spawner $name$ wurde erfolgreich gesetzt!" + stopped: "Spiel wurde erfolgreich gestoppt!" + lobbyset: "Lobby wurde erfolgreich gesetzt!" + gameloaded: "Spiel '$game$' wurde erfolgreich geladen!" + reloadconfig: "Neu laden erfolgreich!" + teamremoved: "Team wurde erfolgreich entfernt!" + gameremoved: "Spiel wurde erfolgreich entfernt!" + spawnercleared: "Alle Ressourcen-Spawner wurden erfolgreich entfernt!" + gamerun: "Du hast das Spiel gestartet, Spieler können nun beitreten!" + timeset: "Spiel-Zeit wurde erfolgreich gesetzt!" + regionnameset: "Name der Region wurde erfolgreich festgelegt!" + minplayersset: "Die Mindestanzahl der Spieler wurde erfolgreich gesetzt!" + mainlobbyset: "Mainlobby wurde erfolgreich gesetzt!" + gametimeset: "Die Spiel-Zeit wurde erfolgreich gesetzt!" + materialset: "Der Respawn-Block Typ wurde erfolgreich für dieses Spiel gesetzt!" + builderset: "Der Builder der Map wurde erfolgreich gesetzt!" + autobalanceseton: "Autobalance wurde erfolgreich eingeschaltet!" + autobalancesetoff: "Autobalance wurde erfolgreich &causgeschaltet&a!" + selectteamjoinentity: "Mache nun einen Rechtsklick auf die Kreatur, die als Teambeitritt dienen soll!" + teamjoinadded: "Kreatur wurde erfolgreich für die Team-Auswahl für das Team $team$ markiert!" + holoremoved: "Hologram-Statistik erfolgreich entfernt!" +gamecheck: + LOC_NOT_SET_ERROR: "Die Regionspunkte wurden nicht korrekt gesetzt!" + TEAM_SIZE_LOW_ERROR: "Du musst mehr Teams hinzufügen!" + NO_RES_SPAWNER_ERROR: "Du hast keinen Ressourcen-Spawner gesetzt!" + NO_LOBBY_SET: "Es wurde keine Lobby gesetzt!" + TEAMS_WITHOUT_SPAWNS: "Ein oder mehrere Teams haben keinen Spawn-Punkt!" + NO_ITEMSHOP_CATEGORIES: "Shop hat keine Kategorien/Angebote gefunden!" + NO_MAIN_LOBBY_SET: "Du hast keine Main-Lobby gesetzt, obwohl 'tomainlobby' auf true gesetzt wurde!" + TEAM_NO_WRONG_BED: "Ein oder mehrere Teams haben kein Bett gesetzt bekommen!" + TEAM_NO_WRONG_TARGET: "Ein oder mehrere Teams haben kein Respawn-Block gesetzt bekommen!" +ingame: + team: "Team" + teams: "Teams" + all: "Alle" + record: "&aDer Rekord auf dieser Map liegt bei &e$record$" + record-with-holders: '&aDer Rekord liegt bei &e$record$&a und wird gehalten von: $holders$' + newrecord: '&aDas Team $team$&a hat einen neuen Rekord aufgestellt: &6$record$' + record-nobeddestroy: "&cRekord wird nicht gespeichert, weil kein Bett zerstört wurde!" + teamwon: "Glückwunsch! Team $team$ hat gewonnen!" + draw: "Das Spiel endet mit einem Unentschieden!" + serverrestart: "Server-Neustart in $sec$ Sekunde(n)!" + gamestarting: "Spiel startet ..." + gamestarted: "Das Spiel '$game$' hat begonnen!" + backtolobby: "Zurück zur Lobby in $sec$ Sekunde(n)" + spectator: "Zuschauer" + spectate: "&aZuschauen" + teamchest: "Teamkiste" + noturteamchest: "Diese Kiste gehört nicht deinem Team!" + protectionleft: "Unverwundbar für &c$length$&f Sekunde(n)!" + protectionend: "Du bist wieder &cverwundbar&f!" + team-dead: "Das Team $team$ wurde vernichtet!" + no-friendlybreak: "&cBlock unter deinem Team-Mitglied kann nicht zerstört werden!" + teamchestdestroy: "&cEine eurer Teamkiste(n) wurde zerstört!" + title: + map-builder: "Gebaut von $builder$" + win-title: "&6Glückwunsch!" + win-subtitle: "&6Team $team$ &6hat in &e$time$ &6gewonnen!" + shop: + name: "Itemshop" + newshop: "Neuen Shop verwenden" + oldshop: "Alten Shop verwenden" + fullstackpershift: "Mehrere Stacks bei Shift-Klick" + onestackpershift: "Ein Stack bei Shift-Klick" + player: + left: "Spieler $player$ hat das Spiel verlassen!" + died: "$player$ ist gestorben!" + killed: "$player$ wurde von $killer$ getötet!" + kicked: "$player$ wurde aus dem Spiel gekickt!" + waskicked: "Du wurdest aus dem Spiel gekickt!" + blocks: + ownbeddestroy: "Du kannst dein eigenes Bett nicht zerstören!" + beddestroyed: "Das Bett von Team $team$ wurde von $player$ zerstört!" + specials: + rescue-platform: + left: "Du musst noch &c$time$&f Sekunde(n) warten, um die nächste Rettungsplattform zu aktivieren!" + arrow-blocker: + start: "Du bist nun für &c$time$&f Sekunde(n) vor Pfeilen geschützt." + end: "&cDein Schutz gegen Pfeile ist nun abgelaufen" + left: "Du kannst den Schutz vor Pfeilen erst in &c$time$&f Sekunde(n) wieder nutzen!" + trap: + trapped: "&eJemand ist in eine &cTrap&e von eurem Team gelaufen!" + protection-wall: + left: "Du musst noch &c$time$&f Sekunde(n) warten, um die nächste Schutzmauer zu aktivieren!" + not-usable-here: "Du kannst die Schutzmauer hier nicht verwenden!" + warp-powder: + cancelled: "&cDeine Teleportation wurde abgebrochen." + start: "Du wirst in &c$time$&f Sekunde(n) teleportiert. Bewege dich nicht." + cancel: "&4Teleportation abbrechen" + multiuse: "&cDu hast bereits eine Teleportation gestartet!" + tntsheep: + no-target-found: "Es wurde kein Zielspieler gefunden!" + tracker: + no-target-found: "Es wurde kein Zielspieler gefunden!" + target-found: "$player$ ist $blocks$ Blöcke von dir entfernt." +lobby: + countdown: "Das Spiel startet in $sec$ Sekunde(n)!" + countdowncancel: "Mehr Spieler benötigt. Countdown wurde abgebrochen!" + cancelcountdown: + not_enough_players: "Mehr Spieler benötigt. Countdown wurde abgebrochen!" + not_enough_teams: "Mehr Teams benötigt. Countdown wurde abgebrochen!" + cancelstart: + not_enough_players: "Es werden mehr Spieler benötigt, um das Spiel zu starten!" + not_enough_teams: "Es werden mehr Teams benötigt, um das Spiel zu starten!" + chooseteam: "Wähle ein Team" + startgame: "Spiel starten" + reduce_countdown: "Countdown reduzieren" + gamefull: "Das Spiel ist voll!" + gamefullpremium: "Das Spiel ist voll von Premium-Spielern!" + teamjoined: "Du bist erfolgreich dem Team $team$ beigetreten!" + leavegame: "Spiel verlassen" + playerjoin: "$player$ ist dem Spiel beigetreten!" + kickedbyvip: "Du wurdest von einem VIP-Spieler rausgeworfen, der dem vollen Spiel beigetreten ist." + moreplayersneeded: "Es werden noch $count$ weitere Spieler benötigt." + moreplayersneeded-one: "Es wird noch $count$ weiterer Spieler benötigt." + moreteamsneeded: "Es werden mindestens zwei Teams benötigt!" +sign: + firstline: "&6[Bedwars]" + players: "Spieler" + gamestate: + stopped: "&4Gestoppt!" + waiting: "&aWarten ..." + running: "&9Gestartet!" + full: "Voll!" +stats: + header: "Bedwars-Statistik" + kd: "K/D" + statsnotfound: "Statistik von $player$ nicht gefunden!" + name: "Name" + kills: "Kills" + deaths: "Tode" + wins: "Gewonnen" + loses: "Verloren" + score: "Punkte" + destroyedBeds: "zerstörte Betten" + games: "Spiele" +commands: + addgame: + name: "Spiel hinzufügen" + desc: "Fügt ein neues Spiel hinzu" + addteam: + name: "Team hinzufügen" + desc: "Fügt ein neues Team zu einem bestimmten Spiel hinzu" + join: + name: "Spiel beitreten" + desc: "Einem bestimmten Spiel beitreten" + leave: + name: "Spiel verlassen" + desc: "Aktuelles Spiel verlassen" + save: + name: "Spiel speichern" + desc: "Speichert die gewählte Region und Spieleinstellungen" + settarget: + name: "Ziel-Block setzen" + desc: "Setzt den Respawn-Block (Ziel) eines bestimmten Teams" + setbed: + name: "Ziel-Block setzen (Synonym für settarget)" + desc: "Setzt den Respawn-Block (Ziel) eines bestimmten Teams (Synonym für settarget)" + setlobby: + name: "Lobby setzen" + desc: "Setzt die Position der Lobby" + setregion: + name: "Setzt Regionspunkt" + desc: "Setzt einen der zwei Regionspunkte für ein bestimmtes Spiel" + setspawn: + name: "Teamspawn setzen" + desc: "Setzt den Spawnpunkt eines bestimmten Teams" + setspawner: + name: "Spawner setzen" + desc: "Setzt an der aktuellen Position einen Ressourcen-Spawner" + start: + name: "Spiel starten" + desc: "Startet ein Spiel (Lobbymodus)" + stop: + name: "Spiel stoppen" + desc: "Stoppt ein Spiel und kickt alle Spieler" + help: + name: "Hilfe" + desc: "Zeigt Hilfe zu Kommandos von Bedwars an" + reload: + name: "Neu laden" + desc: "Lädt die Konfiguration und Übersetzungen neu" + setmainlobby: + name: "Main Lobby setzen" + desc: "Setzt die Main Lobby eines Spiels (notwendig wenn mainlobby-enabled auf true gesetzt)" + list: + name: "Spiele auflisten" + desc: "Listet alle verfügbaren Spiele auf!" + regionname: + name: "Region-Name setzen" + desc: "Setzt einen individuellen Namen (statt Weltnamen) für die Region" + removeteam: + name: "Team entfernen" + desc: "Entfernt ein Team vom Spiel (Nur wenn das Spiel gestoppt ist)" + removegame: + name: "Spiel entfernen" + desc: "Entfernt das Spiel und alle Konfigurationen" + clearspawner: + name: "Spawner löschen" + desc: "Entfernt alle Ressourcen-Spawner vom Spiel" + gametime: + name: "Spiel-Zeit setzen" + desc: "Setzt die Spiel-Zeit, die auf der Spielwelt verwendet werden soll." + stats: + name: "Statistik" + desc: "Zeigt deine Statistik an." + setbuilder: + name: "Setzt Map-Info Bauer" + desc: "Setzt den Bauer der Map eines bestimmten Spiels, der im Title beim Start des Spiels angezeigt wird." + setgameblock: + name: "Spiel-lock setzen" + desc: "Setzt den Respawn Block-Typ. Dies überschreibt die 'game-block' config für dieses eine Spiel. Schreibe 'DEFAULT' als Typ, um den Typ aus der Config zu verwenden" + setautobalance: + name: "Autobalance setzen" + desc: "Wenn 'global-autobalance' auf 'false' gestellt, kann man hiermit das Autobalancing pro Spiel setzen" + setminplayers: + name: "Mindestspielerzahl setzen" + desc: "Setzt die Anzahl der zum Start des Spiels benötigten Spieler" + kick: + name: "Spieler kicken" + desc: "Kickt einen Spieler aus dem aktuellen Spiel" + addteamjoin: + name: "Team-Auswahl hinzufügen" + desc: "Markiert eine Kreatur, die zur Team-Auswahl für ein bestimmtes Team verwendet werden kann" + addholo: + name: "Hologram-Position hinzufügen" + desc: "Eine Hologram-Statistik wird auf die aktuelle, stehende Position hinzugefügt" + removeholo: + name: "Hologram-Position entfernen" + desc: "Sobald der Command ausgelöst wurde, kann innerhalb von 10 Sekunden auf das entsprechende Hologram geklickt werden, um es zu entfernen" + explain: "Mache nun einen Linksklick auf das Hologram das entfernt werden soll. Innerhalb von 10 Sekunden." + debugpaste: + name: "Debug-Daten senden" + desc: "Lade einige Debug-Informationen auf Hastebin hoch und erhalte einen Link, den du mit den Entwicklern teilen kannst" + itemspaste: + name: "Inventar in Datei speichern" + desc: "Lade dein aktuelles Inventar in serialisierter Form auf Hastebin hoch und schaue dir an, wie diese Items für deine shop.yml aussehen" diff --git a/common/src/main/resources/locale/de_DE.yml b/common/src/main/resources/locale/de_DE.yml new file mode 100644 index 0000000..b247ec0 --- /dev/null +++ b/common/src/main/resources/locale/de_DE.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Seite $current$ von $max$" + currently: Aktuell +errors: + argumentslength: "Die Anzahl der Argumente entspricht nicht der Vorgabe!" + holodependencynotfound: "Es fehlt $dependency$ für die Hologram-Statistik" + packagenotfound: "Konnte Package $package$ nicht laden!" + classnotfound: "Konnte $package$ Klasse $class$ nicht laden!" + gameexists: "Ein Spiel mit diesem Namen existiert bereits!" + gamenotfound: "Das Spiel '$game$' konnte nicht gefunden werden!" + nofreegames: "Es wurde kein verfügbares Spiel gefunden." + gamenotfoundsimple: "Spiel nicht gefunden!" + playeramount: "Die maximale Anzahl kann nicht weniger als 1 und nicht größer als 24 sein!" + teamcolornotallowed: "Die angegebene Teamfarbe ist nicht erlaubt!" + teamnamelength: "Der Teamname muss zwischen 2 und 20 Zeichen haben!" + teamnotfound: "Team nicht gefunden!" + notingame: "Du bist zurzeit in keinem Spiel!" + bedtargeting: "Du musst ein Respawn-Block des konfigurierten 'game-block' anvisieren oder auf einem stehen!" + regionargument: "Dein Location-Parameter muss 'loc1' oder 'loc2' entsprechen!" + spawnerargument: "Dein Ressourcen-Parameter ist ungültig oder verweist auf keine konfigurierte Ressource!" + blockdownnotfound: "Der Block unter dir konnte nicht gefunden werden!" + gamenotrunning: "Spiel läuft nicht!" + bungeenoserver: "Der Bungeecord Server wurde nicht korrekt konfiguriert. Bitte benachrichtige den Serveradministrator!" + cantstartagain: "Spiel läuft! Du kannst kein laufendes Spiel starten!" + startoutofwaiting: "Ein Spiel muss aus dem Lobby-Status gestartet werden!" + cantjoingame: "Du kannst keinem laufenden oder beendetem Spiel beitreten!" + lobbyongameworld: "Die Lobby darf nicht auf der Welt des Spiels sein!" + gamenotloaded: "Spiel konnte nicht geladen/gestartet werden!" + gameloaderror: "Das Laden des Spiels '$game$' hat einen Fehler verursacht!" + regionnotfound: "Region-Datei existiert nicht!" + savesign: "Speichern der Schilder nicht möglich (Datei konnte nicht erstellt werden)!" + nogames: "Keine Spiele gefunden!" + notenoughress: "Du hast nicht genug Ressourcen um das zu kaufen!" + teamnameinuse: "Ein Team mit diesem Namen existiert bereits!" + minplayersmustnumber: "Die min. Spieler muss eine Nummer sein!" + toolongregionname: "Region-Name darf nur maximal 15 Zeichen haben!" + notwhilegamerunning: "Das kannst du nicht tun während das Spiel läuft!" + notwhileingame: "Das kannst du nicht tun während du in einem Spiel bist!" + timeincorrect: "Die Zeit muss eine Zahl sein (0 ... 23000), 'day' oder 'night'" + minplayersnumeric: "Die Mindestanzahl der Spieler muss numerisch sein!" + notinair: "Du bist nicht in der Luft!" + teamfull: "Das Team ist voll, bitte öffne die Teamauswahl erneut!" + novalidmaterial: "Angegebene Block-Typ (Material) ist nicht korrekt!" + wrongvalueonoff: "Falscher Parameter! Einschalten mit: true,on,1 - Ausschalten mit: false,off,0" + playernotfound: "Angegebener Spieler wurde nicht gefunden oder ist nicht online!" + notingameforkick: "Du musst in einem Spiel sein, um kicken zu können!" + playernotingame: "Angegebener Spieler ist nicht in diesem Spiel!" + mustbeinlobbyworld: "Du musst in der Lobby-Welt des Spiels sein!" + addteamjoincancel: "Das Hinzufügen von einem Team-Beitritt wurde abgebrochen!" + entitynotcompatible: "Diese Kreature wird für die Team-Auswahl nicht unterstützt!" +success: + gameadded: "Neues Spiel '$game$' erfolgreich hinzugefügt!" + teamadded: "Team $team$ erfolgreich hinzugefügt!" + joined: "Du bist dem Spiel beigetreten!" + left: "Du hast das Spiel erfolgreich verlassen!" + saved: "Spiel wurde erfolgreich gespeichert!" + bedset: "Der Respawn-Block für Team $team$ wurde erfolgreich gesetzt!" + regionset: "Der Regionspunkt $location$ wurde für das Spiel $game$ erfolgreich gesetzt!" + spawnset: "Spawn-Punkt für Team $team$ wurde erfolgreich gesetzt!" + spawnerset: "Ressourcen-Spawner $name$ wurde erfolgreich gesetzt!" + stopped: "Spiel wurde erfolgreich gestoppt!" + lobbyset: "Lobby wurde erfolgreich gesetzt!" + gameloaded: "Spiel '$game$' wurde erfolgreich geladen!" + reloadconfig: "Neu laden erfolgreich!" + teamremoved: "Team wurde erfolgreich entfernt!" + gameremoved: "Spiel wurde erfolgreich entfernt!" + spawnercleared: "Alle Ressourcen-Spawner wurden erfolgreich entfernt!" + gamerun: "Du hast das Spiel gestartet, Spieler können nun beitreten!" + timeset: "Spiel-Zeit wurde erfolgreich gesetzt!" + regionnameset: "Name der Region wurde erfolgreich festgelegt!" + minplayersset: "Die Mindestanzahl der Spieler wurde erfolgreich gesetzt!" + mainlobbyset: "Mainlobby wurde erfolgreich gesetzt!" + gametimeset: "Die Spiel-Zeit wurde erfolgreich gesetzt!" + materialset: "Der Respawn-Block Typ wurde erfolgreich für dieses Spiel gesetzt!" + builderset: "Der Builder der Map wurde erfolgreich gesetzt!" + autobalanceseton: "Autobalance wurde erfolgreich eingeschaltet!" + autobalancesetoff: "Autobalance wurde erfolgreich &causgeschaltet&a!" + selectteamjoinentity: "Mache nun einen Rechtsklick auf die Kreatur, die als Teambeitritt dienen soll!" + teamjoinadded: "Kreatur wurde erfolgreich für die Team-Auswahl für das Team $team$ markiert!" + holoremoved: "Hologram-Statistik erfolgreich entfernt!" +gamecheck: + LOC_NOT_SET_ERROR: "Die Regionspunkte wurden nicht korrekt gesetzt!" + TEAM_SIZE_LOW_ERROR: "Du musst mehr Teams hinzufügen!" + NO_RES_SPAWNER_ERROR: "Du hast keinen Ressourcen-Spawner gesetzt!" + NO_LOBBY_SET: "Es wurde keine Lobby gesetzt!" + TEAMS_WITHOUT_SPAWNS: "Ein oder mehrere Teams haben keinen Spawn-Punkt!" + NO_ITEMSHOP_CATEGORIES: "Shop hat keine Kategorien/Angebote gefunden!" + NO_MAIN_LOBBY_SET: "Du hast keine Main-Lobby gesetzt, obwohl 'tomainlobby' auf true gesetzt wurde!" + TEAM_NO_WRONG_BED: "Ein oder mehrere Teams haben kein Bett gesetzt bekommen!" + TEAM_NO_WRONG_TARGET: "Ein oder mehrere Teams haben kein Respawn-Block gesetzt bekommen!" +ingame: + team: "Team" + teams: "Teams" + all: "Alle" + record: "&aDer Rekord auf dieser Map liegt bei &e$record$" + record-with-holders: '&aDer Rekord liegt bei &e$record$&a und wird gehalten von: $holders$' + newrecord: '&aDas Team $team$&a hat einen neuen Rekord aufgestellt: &6$record$' + record-nobeddestroy: "&cRekord wird nicht gespeichert, weil kein Bett zerstört wurde!" + teamwon: "Glückwunsch! Team $team$ hat gewonnen!" + draw: "Das Spiel endet mit einem Unentschieden!" + serverrestart: "Server-Neustart in $sec$ Sekunde(n)!" + gamestarting: "Spiel startet ..." + gamestarted: "Das Spiel '$game$' hat begonnen!" + backtolobby: "Zurück zur Lobby in $sec$ Sekunde(n)" + spectator: "Zuschauer" + spectate: "&aZuschauen" + teamchest: "Teamkiste" + noturteamchest: "Diese Kiste gehört nicht deinem Team!" + protectionleft: "Unverwundbar für &c$length$&f Sekunde(n)!" + protectionend: "Du bist wieder &cverwundbar&f!" + team-dead: "Das Team $team$ wurde vernichtet!" + no-friendlybreak: "&cBlock unter deinem Team-Mitglied kann nicht zerstört werden!" + teamchestdestroy: "&cEine eurer Teamkiste(n) wurde zerstört!" + title: + map-builder: "Gebaut von $builder$" + win-title: "&6Glückwunsch!" + win-subtitle: "&6Team $team$ &6hat in &e$time$ &6gewonnen!" + shop: + name: "Itemshop" + newshop: "Neuen Shop verwenden" + oldshop: "Alten Shop verwenden" + fullstackpershift: "Mehrere Stacks bei Shift-Klick" + onestackpershift: "Ein Stack bei Shift-Klick" + player: + left: "Spieler $player$ hat das Spiel verlassen!" + died: "$player$ ist gestorben!" + killed: "$player$ wurde von $killer$ getötet!" + kicked: "$player$ wurde aus dem Spiel gekickt!" + waskicked: "Du wurdest aus dem Spiel gekickt!" + blocks: + ownbeddestroy: "Du kannst dein eigenes Bett nicht zerstören!" + beddestroyed: "Das Bett von Team $team$ wurde von $player$ zerstört!" + specials: + rescue-platform: + left: "Du musst noch &c$time$&f Sekunde(n) warten, um die nächste Rettungsplattform zu aktivieren!" + arrow-blocker: + start: "Du bist nun für &c$time$&f Sekunde(n) vor Pfeilen geschützt." + end: "&cDein Schutz gegen Pfeile ist nun abgelaufen" + left: "Du kannst den Schutz vor Pfeilen erst in &c$time$&f Sekunde(n) wieder nutzen!" + trap: + trapped: "&eJemand ist in eine &cTrap&e von eurem Team gelaufen!" + protection-wall: + left: "Du musst noch &c$time$&f Sekunde(n) warten, um die nächste Schutzmauer zu aktivieren!" + not-usable-here: "Du kannst die Schutzmauer hier nicht verwenden!" + warp-powder: + cancelled: "&cDeine Teleportation wurde abgebrochen." + start: "Du wirst in &c$time$&f Sekunde(n) teleportiert. Bewege dich nicht." + cancel: "&4Teleportation abbrechen" + multiuse: "&cDu hast bereits eine Teleportation gestartet!" + tntsheep: + no-target-found: "Es wurde kein Zielspieler gefunden!" + tracker: + no-target-found: "Es wurde kein Zielspieler gefunden!" + target-found: "$player$ ist $blocks$ Blöcke von dir entfernt." +lobby: + countdown: "Das Spiel startet in $sec$ Sekunde(n)!" + countdowncancel: "Mehr Spieler benötigt. Countdown wurde abgebrochen!" + cancelcountdown: + not_enough_players: "Mehr Spieler benötigt. Countdown wurde abgebrochen!" + not_enough_teams: "Mehr Teams benötigt. Countdown wurde abgebrochen!" + cancelstart: + not_enough_players: "Es werden mehr Spieler benötigt, um das Spiel zu starten!" + not_enough_teams: "Es werden mehr Teams benötigt, um das Spiel zu starten!" + chooseteam: "Wähle ein Team" + startgame: "Spiel starten" + reduce_countdown: "Countdown reduzieren" + gamefull: "Das Spiel ist voll!" + gamefullpremium: "Das Spiel ist voll von Premium-Spielern!" + teamjoined: "Du bist erfolgreich dem Team $team$ beigetreten!" + leavegame: "Spiel verlassen" + playerjoin: "$player$ ist dem Spiel beigetreten!" + kickedbyvip: "Du wurdest von einem VIP-Spieler rausgeworfen, der dem vollen Spiel beigetreten ist." + moreplayersneeded: "Es werden noch $count$ weitere Spieler benötigt." + moreplayersneeded-one: "Es wird noch $count$ weiterer Spieler benötigt." + moreteamsneeded: "Es werden mindestens zwei Teams benötigt!" +sign: + firstline: "&6[Bedwars]" + players: "Spieler" + gamestate: + stopped: "&4Gestoppt!" + waiting: "&aWarten ..." + running: "&9Gestartet!" + full: "Voll!" +stats: + header: "Bedwars-Statistik" + kd: "K/D" + statsnotfound: "Statistik von $player$ nicht gefunden!" + name: "Name" + kills: "Kills" + deaths: "Tode" + wins: "Gewonnen" + loses: "Verloren" + score: "Punkte" + destroyedBeds: "zerstörte Betten" + games: "Spiele" +commands: + addgame: + name: "Spiel hinzufügen" + desc: "Fügt ein neues Spiel hinzu" + addteam: + name: "Team hinzufügen" + desc: "Fügt ein neues Team zu einem bestimmten Spiel hinzu" + join: + name: "Spiel beitreten" + desc: "Einem bestimmten Spiel beitreten" + leave: + name: "Spiel verlassen" + desc: "Aktuelles Spiel verlassen" + save: + name: "Spiel speichern" + desc: "Speichert die gewählte Region und Spieleinstellungen" + settarget: + name: "Ziel-Block setzen" + desc: "Setzt den Respawn-Block (Ziel) eines bestimmten Teams" + setbed: + name: "Ziel-Block setzen (Synonym für settarget)" + desc: "Setzt den Respawn-Block (Ziel) eines bestimmten Teams (Synonym für settarget)" + setlobby: + name: "Lobby setzen" + desc: "Setzt die Position der Lobby" + setregion: + name: "Setzt Regionspunkt" + desc: "Setzt einen der zwei Regionspunkte für ein bestimmtes Spiel" + setspawn: + name: "Teamspawn setzen" + desc: "Setzt den Spawnpunkt eines bestimmten Teams" + setspawner: + name: "Spawner setzen" + desc: "Setzt an der aktuellen Position einen Ressourcen-Spawner" + start: + name: "Spiel starten" + desc: "Startet ein Spiel (Lobbymodus)" + stop: + name: "Spiel stoppen" + desc: "Stoppt ein Spiel und kickt alle Spieler" + help: + name: "Hilfe" + desc: "Zeigt Hilfe zu Kommandos von Bedwars an" + reload: + name: "Neu laden" + desc: "Lädt die Konfiguration und Übersetzungen neu" + setmainlobby: + name: "Main Lobby setzen" + desc: "Setzt die Main Lobby eines Spiels (notwendig wenn mainlobby-enabled auf true gesetzt)" + list: + name: "Spiele auflisten" + desc: "Listet alle verfügbaren Spiele auf!" + regionname: + name: "Region-Name setzen" + desc: "Setzt einen individuellen Namen (statt Weltnamen) für die Region" + removeteam: + name: "Team entfernen" + desc: "Entfernt ein Team vom Spiel (Nur wenn das Spiel gestoppt ist)" + removegame: + name: "Spiel entfernen" + desc: "Entfernt das Spiel und alle Konfigurationen" + clearspawner: + name: "Spawner löschen" + desc: "Entfernt alle Ressourcen-Spawner vom Spiel" + gametime: + name: "Spiel-Zeit setzen" + desc: "Setzt die Spiel-Zeit, die auf der Spielwelt verwendet werden soll." + stats: + name: "Statistik" + desc: "Zeigt deine Statistik an." + setbuilder: + name: "Setzt Map-Info Bauer" + desc: "Setzt den Bauer der Map eines bestimmten Spiels, der im Title beim Start des Spiels angezeigt wird." + setgameblock: + name: "Spiel-lock setzen" + desc: "Setzt den Respawn Block-Typ. Dies überschreibt die 'game-block' config für dieses eine Spiel. Schreibe 'DEFAULT' als Typ, um den Typ aus der Config zu verwenden" + setautobalance: + name: "Autobalance setzen" + desc: "Wenn 'global-autobalance' auf 'false' gestellt, kann man hiermit das Autobalancing pro Spiel setzen" + setminplayers: + name: "Mindestspielerzahl setzen" + desc: "Setzt die Anzahl der zum Start des Spiels benötigten Spieler" + kick: + name: "Spieler kicken" + desc: "Kickt einen Spieler aus dem aktuellen Spiel" + addteamjoin: + name: "Team-Auswahl hinzufügen" + desc: "Markiert eine Kreatur, die zur Team-Auswahl für ein bestimmtes Team verwendet werden kann" + addholo: + name: "Hologram-Position hinzufügen" + desc: "Eine Hologram-Statistik wird auf die aktuelle, stehende Position hinzugefügt" + removeholo: + name: "Hologram-Position entfernen" + desc: "Sobald der Command ausgelöst wurde, kann innerhalb von 10 Sekunden auf das entsprechende Hologram geklickt werden, um es zu entfernen" + explain: "Mache nun einen Linksklick auf das Hologram das entfernt werden soll. Innerhalb von 10 Sekunden." + debugpaste: + name: "Debug-Daten senden" + desc: "Lade einige Debug-Informationen auf Hastebin hoch und erhalte einen Link, den du mit den Entwicklern teilen kannst" + itemspaste: + name: "Inventar in Datei speichern" + desc: "Lade dein aktuelles Inventar in serialisierter Form auf Hastebin hoch und schaue dir an, wie diese Items für deine shop.yml aussehen" diff --git a/common/src/main/resources/locale/el_GR.yml b/common/src/main/resources/locale/el_GR.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/el_GR.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/en_AU.yml b/common/src/main/resources/locale/en_AU.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/en_AU.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/en_CA.yml b/common/src/main/resources/locale/en_CA.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/en_CA.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/en_NZ.yml b/common/src/main/resources/locale/en_NZ.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/en_NZ.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/en_PT.yml b/common/src/main/resources/locale/en_PT.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/en_PT.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/en_UD.yml b/common/src/main/resources/locale/en_UD.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/en_UD.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/en_US.yml b/common/src/main/resources/locale/en_US.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/en_US.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/eo_UY.yml b/common/src/main/resources/locale/eo_UY.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/eo_UY.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/es_AR.yml b/common/src/main/resources/locale/es_AR.yml new file mode 100644 index 0000000..4d1283d --- /dev/null +++ b/common/src/main/resources/locale/es_AR.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Página $current$ de $max$" + currently: Actualmente +errors: + argumentslength: "El número de argumentos no coincide con la cantidad correcta!" + holodependencynotfound: "No se pudo encontrar $dependency$ para Estadística-Holograma" + packagenotfound: "No se pudo obtener el paquete $package$!" + classnotfound: "No se pudo obtener el paquete $package$ de la clase $class$!" + gameexists: "Ya existe una partida con ese nombre!" + gamenotfound: "La partida '$game$' no pudo ser encontrada!" + nofreegames: "No hay juegos libres disponibles." + gamenotfoundsimple: "Partida no encontrada!" + playeramount: "El máximo de jugadores no puede ser menor a 1 o mayor a 24!" + teamcolornotallowed: "El color del equipo no es un color permitido" + teamnamelength: "El nombre del equipo debe tener entre 2 y 20 caracteres!" + teamnotfound: "Equipo no encontrado!" + notingame: "No te encuentras en una partida!" + bedtargeting: "Tienes que seleccionar o posicionarte sobre un bloque del tipo 'game-block' que fue configurado!" + regionargument: "El argumento de tu ubicación tiene que ser 'loc1' o 'loc2'!" + spawnerargument: "El parámetro de recursos tiene que ser un recurso válido configurado!" + blockdownnotfound: "¡El bloque en el que estás parado no fue encontrado!" + gamenotrunning: "¡El juego no se está ejecutando!" + bungeenoserver: "¡Los servidores de BungeeCord no se han configurado correctamente! ¡Habla con el Administrador del Servidor!" + cantstartagain: "¡El Juego está en marcha! ¡No puedes volver a empezar el juego!" + startoutofwaiting: "¡El juego tiene que ser comenzado fuera del modo de espera!" + cantjoingame: "¡No puedes unirte a un Juego en marcha o parado!" + lobbyongameworld: "¡El Lobby no puede estar en el mundo del Juego!" + gamenotloaded: "¡No se pudo iniciar el juego!" + gameloaderror: "¡Ha ocurrido un error al cargar el juego '$game$'!" + regionnotfound: "¡El archivo de la región no existe!" + savesign: "¡No se pudo crear un nuevo archivo de configuración para los carteles!" + nogames: "¡No se han encontrado Juegos!" + notenoughress: "¡No tienes los recursos suficientes para comprar este objeto!" + teamnameinuse: "¡El nombre del equipo ya está en uso!" + minplayersmustnumber: "¡Mínimo de Jugadores debe ser un número!" + toolongregionname: "¡El nombre máximo de la región debe ser de 15 carácteres!" + notwhilegamerunning: "¡No puedes hacer esto mientras el Juego está en curso!" + notwhileingame: "¡No puedes hacer esto mientras estás en un Juego en curso!" + timeincorrect: "¡El tiempo tiene que ser un número (0 ... 23000), 'day' o 'night'!" + minplayersnumeric: "¡El parámetro de Jugadores-Mínimos debe ser un número!" + notinair: "¡No estás en el aire!" + teamfull: "¡El equipo está lleno, por favor, vuelva a abrir el menú de selección de equipo!" + novalidmaterial: "¡El tipo de bloque (material) no es correcto!" + wrongvalueonoff: "¡Parámetro incorrecto! Use true, on, 1 para activar - ¡Usa false, off, 0 para desactivar!" + playernotfound: "¡El jugador introducido no existe o no está conectado!" + notingameforkick: "¡Usted debe estar en un Juego para echar a un jugador!" + playernotingame: "¡El jugador introducido no está en este Juego!" + mustbeinlobbyworld: "Debes de estar en el mundo del Lobby del Juego" + addteamjoincancel: "¡La adición al equipo fue cancelada!" + entitynotcompatible: "¡Esta entidad no es compatible con la entrada de equipos!" +success: + gameadded: "¡Nuevo Juego '$game$' añadido con éxito!" + teamadded: "¡El equipo '$team$' ha sido añadido con éxito!" + joined: "¡Te has unido al Juego con éxito!" + left: "¡Usted salió con éxito del Juego!" + saved: "¡El Juego se guardó con éxito!" + bedset: "¡Has establecido el Bloque de Respawn del equipo '$team$'!" + regionset: "¡Ubicación de la región del juego $location$ para el Juego $game$ se estableció correctamente!" + spawnset: "¡La ubicación del Spawn para el Equipo $team$ se estableció con éxito!" + spawnerset: "¡La ubicación del Spawn de Recursos para $name$ se estableció con éxito!" + stopped: "¡Juego detenido con éxito!" + lobbyset: "¡El Lobby fue establecido con éxito!" + gameloaded: "¡Juego '$game$' cargado con éxito!" + reloadconfig: "¡Recarga exitosa!" + teamremoved: "¡Equipo eliminado con éxito!" + gameremoved: "¡Juego removido exitosamente!" + spawnercleared: "¡Todos los Spawners de Recursos han sido eliminados!" + gamerun: "¡Haz comenzado el juego, los jugadores pueden unirse!" + timeset: "¡El tiempo del Juego fue fijado con éxito!" + regionnameset: "¡El nombre de la Región se ha establecido correctamente!" + minplayersset: "¡Mínimo de Jugadores establecido correctamente!" + mainlobbyset: "¡Mainlobby fue puesto con éxito!" + gametimeset: "¡El Tiempo del Juego fue fijado con éxito!" + materialset: "¡El bloque de Respawneo del tipo (material) fue fijado con éxito!" + builderset: "¡El Constructor del mapa fue fijado con éxito y se verá en el Título!" + autobalanceseton: "¡Autobalance activado con éxito!" + autobalancesetoff: "¡Autobalance fue convertido con éxito &coff&a!" + selectteamjoinentity: "¡Ahora haga clic derecho sobre la entidad que desea utilizar como método de unión a un equipo!" + teamjoinadded: "La entidad fue marcada con éxito como selección de equipo, para el equipo $team$" + holoremoved: "¡Estadísticas-Holograma eliminado con éxito!" +gamecheck: + LOC_NOT_SET_ERROR: "¡Las localizaciones para la región no fueron fijadas correctamente!" + TEAM_SIZE_LOW_ERROR: "¡Tienes que establecer más equipos!" + NO_RES_SPAWNER_ERROR: "¡No has creado ningún Spawner de Recursos!" + NO_LOBBY_SET: "¡No pusiste un Lobby!" + TEAMS_WITHOUT_SPAWNS: "¡Hay equipo(s) sin una localización de Spawn!" + NO_ITEMSHOP_CATEGORIES: "¡No se encontraron categorías de artículos!" + NO_MAIN_LOBBY_SET: "No estableció un Lobby Principal aunque estableció 'tomainlobby' en true" + TEAM_NO_WRONG_BED: "¡Uno o más equipos no tiene una cama puesta!" + TEAM_NO_WRONG_TARGET: "¡Uno o más equipos no tienen un Bloque de Respawn!" +ingame: + team: "Equipo" + teams: "Equipos" + all: "Todo" + record: "¡&e$record$&a es el récord en este mapa!" + record-with-holders: '&aEl récord en este mapa es &e$record$&a y pertenece a: $holders$' + newrecord: '&aEquipo $team$&a estableció un nuevo récord: &6$record$' + record-nobeddestroy: "&c¡La partida no se guardará, porque ninguna cama fue destruida!" + teamwon: "¡Felicitaciones! ¡El Equipo $team$ ha ganado!" + draw: "¡El Juego termina con un empate!" + serverrestart: "¡El Servidor se reiniciará en $sec$ segundo(s)!" + gamestarting: "Comenzando Juego ..." + gamestarted: "¡El Juego '$game$' acaba de empezar!" + backtolobby: "¡Volviendo al Lobby en $sec$ segundo(s)!" + spectator: "Espectador" + spectate: "&aEspectar" + teamchest: "Cofre del Equipo" + noturteamchest: "¡Este cofre no es un cofre del equipo!" + protectionleft: "¡Invulnerable por &c$length$&f segundo(s)!" + protectionend: "¡Ahora eres &cVulnerable&f de nuevo!" + team-dead: "¡El Equipo $team$ fue destruido!" + no-friendlybreak: "&c¡No puedes romper el bloque debajo de un miembro del equipo!" + teamchestdestroy: "&c¡Un cofre del equipo ha sido destruido!" + title: + map-builder: "Construido por: $builder$" + win-title: "&6¡Felicitaciones!" + win-subtitle: "El Equipo $team$&6 ganó en &e$time$" + shop: + name: "Tienda de Objetos" + newshop: "Usar la tienda nueva" + oldshop: "Usar la tienda antigua" + fullstackpershift: "Múltiples stacks por shift click" + onestackpershift: "Un stack por shift click" + player: + left: "¡El jugador $player$ ha abandonado el Juego!" + died: "¡$player$ murió!" + killed: "¡$killer$ mató a $player$!" + kicked: "¡$player$ ha sido expulsado!" + waskicked: "¡Usted fue expulsado del Juego!" + blocks: + ownbeddestroy: "¡No puedes destruir tu propia cama!" + beddestroyed: "¡$player$ destruyó la cama del equipo $team$!" + specials: + rescue-platform: + left: "¡Tienes que esperar &c$time$&f segundo(s) hasta que puedas volver a utilizar la próxima plataforma de rescate!" + arrow-blocker: + start: "Estás protegido de ser golpeado por las flechas durante &c$time$&f segundo(s)." + end: "&cTu protección de flechas ha terminado" + left: "¡Tienes que esperar &c$time$&f segundo(s) hasta que puedas volver a utilizar el bloqueador de flechas!" + trap: + trapped: "¡&eAlguien ha activado un(a) &ctrap&e de tu equipo!" + protection-wall: + left: "¡Tienes que esperar &c$time$&f segundo(s) hasta volver a utilizar la siguiente pared de protección!" + not-usable-here: "¡No puedes usar la pared de protección aquí!" + warp-powder: + cancelled: "¡&cTu teletransporte fue cancelado!" + start: "Serás teletransportado en &c$time$&f segundo(s). ¡No te muevas!" + cancel: "&4Cancelar el teletransporte" + multiuse: "¡&cYa has iniciado un teletransporte!" + tntsheep: + no-target-found: "¡No se encontró ningún jugador objetivo!" + tracker: + no-target-found: "¡No se encontró ningún jugador objetivo!" + target-found: "$player$ está a $blocks$ bloque(s) lejos de ti." +lobby: + countdown: "¡El Juego comenzará en $sec$ segundo(s)!" + countdowncancel: "Se necesitan más jugadores. ¡La cuenta atrás fue cancelada!" + cancelcountdown: + not_enough_players: "Se necesitan más jugadores. ¡Cuenta regresiva cancelada!" + not_enough_teams: "Se requieren más equipos. Tiempo de espera final cancelado!" + cancelstart: + not_enough_players: "¡Se necesitan más jugadores para empezar el Juego!" + not_enough_teams: "Se requieren más equipos para iniciar la partida!" + chooseteam: "Elige un equipo" + startgame: "Iniciar Juego" + reduce_countdown: "Reducir el tiempo de espera" + gamefull: "¡El Juego está lleno!" + gamefullpremium: "¡El Juego está lleno de jugadores con rango!" + teamjoined: "Te has unido al equipo $team$" + leavegame: "Salir del Juego" + playerjoin: "¡El jugador $player$ se unió al Juego!" + kickedbyvip: "¡Ha sido expulsado por un jugador Vip que se ha unido al juego lleno!" + moreplayersneeded: "$count$ jugadores más necesarios." + moreplayersneeded-one: "$count$ jugador más necesario." + moreteamsneeded: "Se requiere un mínimo de dos jugadores en dos equipos diferentes para iniciar la partida!" +sign: + firstline: "&6[BedWars]" + players: "Jugadores" + gamestate: + stopped: "&4¡Detenido!" + waiting: "&aEsperando ..." + running: "&9¡Corriendo!" + full: "¡Lleno!" +stats: + header: "Estadísticas de BedWars" + kd: "K/D" + statsnotfound: "¡Las estadísticas de $player$ no se encontraron!" + name: "Nombre" + kills: "Bajas" + deaths: "Muertes" + wins: "Victorias" + loses: "Perdidas" + score: "Puntuaciones" + destroyedBeds: "Camas destruidas" + games: "Juegos" +commands: + addgame: + name: "Añadir Juego" + desc: "Añadir un nuevo Juego" + addteam: + name: "Añadir equipo" + desc: "Añadir un equipo a un Juego específico" + join: + name: "Unirse al Juego" + desc: "Unirse a un Juego específico" + leave: + name: "Salir del Juego" + desc: "Salir del Juego actual" + save: + name: "Guardar Juego" + desc: "Guardar un Juego (y mapa) en archivo(s) de config" + settarget: + name: "Poner un objetivo" + desc: "Establece la ubicación del bloque de destino de un equipo" + setbed: + name: "Establecer cama (sinónimo de establecer objetivo)" + desc: "Establece la ubicación del bloque de la cama de un equipo (sinónimo de establecer objetivo)" + setlobby: + name: "Establecer Lobby" + desc: "Establece la ubicación del Lobby del Juego" + setregion: + name: "Establece un punto de región" + desc: "Establece un punto de región para el Juego" + setspawn: + name: "Establece un Spawn de un equipo" + desc: "Establece el spawn del equipo dado" + setspawner: + name: "Establecer Spawner" + desc: "Establece una ubicación de spawner de un recurso específico" + start: + name: "Iniciar Juego" + desc: "Iniciar un Juego" + stop: + name: "Parar Juego" + desc: "Parar un Juego" + help: + name: "Mostrar ayuda" + desc: "Mostrar información sobre el plugin y sus comandos" + reload: + name: "Recargar" + desc: "Recargar las configuraciones y las traducciones" + setmainlobby: + name: "Establecer Lobby Principal" + desc: "Establece el Lobby Principal de un Juego (se necesita que mainlobby-enabled esté en true)" + list: + name: "Lista de Juegos" + desc: "Lista de todos los Juegos disponibles" + regionname: + name: "Establecer el nombre de la región" + desc: "Establece un nombre de región individual (en lugar del nombre del mundo)" + removeteam: + name: "Eliminar equipo" + desc: "Elimina un equipo del Juego (sólo si está en modo detenido)" + removegame: + name: "Eliminar Juego" + desc: "Eliminar un Juego y toda su configuración" + clearspawner: + name: "Liberar Spawners" + desc: "Elimina todos los Spawners del Juego. Guardado necesario." + gametime: + name: "Establecer el tiempo del Juego" + desc: "Establece el tiempo del Juego que se desea usar en el mundo de juego" + stats: + name: "Estadísticas" + desc: "Muestra tus estadísticas" + setbuilder: + name: "Establece el constructor del mapa" + desc: "Establece el constructor del mapa que se mostrará en el título cuando comience el Juego." + setgameblock: + name: "Establecer el bloque del Juego" + desc: "Establece el tipo de bloque de juego para este juego que debe utilizarse en la configuración de \"game-block\". Escriba 'DEFAULT' como tipo para usar el tipo de configuración de nuevo" + setautobalance: + name: "Establecer el autobalance" + desc: "¡Si 'global-autobalance' se establece en 'false', con este comando puede configurar el equipo-autobalance por Juego; ha encendido o apagado!" + setminplayers: + name: "Establecer el mínimo de jugadores" + desc: "Establece la cantidad de jugadores necesarios para iniciar el Juego" + kick: + name: "Expulsar jugador" + desc: "¡Expulsar un jugador del juego actual!" + addteamjoin: + name: "Añadir selección de equipo" + desc: "¡Marca una criatura que pueda ser usada para unirse a un equipo específico!" + addholo: + name: "Añadir ubicación del holograma" + desc: "¡Se agregará un holograma de estadísticas en la posición actual!" + removeholo: + name: "Quitar la ubicación del holograma" + desc: "Cuando el comando es ejecutado, el jugador debe dar click-derecho en el holograma para eliminarlo." + explain: "Realice un click izquierdo dentro de 10 segundos en el holograma que desea eliminar." + debugpaste: + name: "Paste debug data" + desc: "Esto enviará datos de errores a Hastebin y te proporcionara un link que puedes compartir con los desarrolladores" + itemspaste: + name: "Pegar tu inventario a un archivo" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/es_ES.yml b/common/src/main/resources/locale/es_ES.yml new file mode 100644 index 0000000..462125f --- /dev/null +++ b/common/src/main/resources/locale/es_ES.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Página $current$ de $max$" + currently: Actualmente +errors: + argumentslength: "¡El número de argumentos no coincide con la cantidad correcta!" + holodependencynotfound: "No se pudo encontrar $dependency$ para Estadística-Holograma" + packagenotfound: "¡No se pudo obtener el paquete $package$!" + classnotfound: "¡No se pudo obtener el paquete $package$ de la clase $class$!" + gameexists: "¡Ya existe un mapa con este nombre!" + gamenotfound: "¡El mapa '$game$' no se pudo encontrar!" + nofreegames: "No hay juegos libres disponibles." + gamenotfoundsimple: "¡No se pudo encontrar el Juego!" + playeramount: "¡El número máximo de jugadores no puede ser menor de 1 o mayor de 24!" + teamcolornotallowed: "El color introducido no está disponible" + teamnamelength: "¡El nombre de un equipo debe tener entre 2 y 20 carácteres!" + teamnotfound: "¡Equipo no encontrado!" + notingame: "¡Actualmente no estás en un Juego!" + bedtargeting: "¡Tienes que apuntar a o estar sobre un bloque que esté configurado en la sección 'game-block'!" + regionargument: "¡El argumento de localización tiene que ser 'loc1' o 'loc2'!" + spawnerargument: "¡El parámetro de recurso tiene que ser un recurso configurado válido!" + blockdownnotfound: "¡El bloque en el que estás parado no fue encontrado!" + gamenotrunning: "¡El juego no se está ejecutando!" + bungeenoserver: "¡Los servidores de BungeeCord no se han configurado correctamente! ¡Habla con el Administrador del Servidor!" + cantstartagain: "¡El Juego está en marcha! ¡No puedes volver a empezar el juego!" + startoutofwaiting: "¡El juego tiene que ser comenzado fuera del modo de espera!" + cantjoingame: "¡No puedes unirte a un Juego en marcha o parado!" + lobbyongameworld: "¡El Lobby no puede estar en el mundo del Juego!" + gamenotloaded: "¡No se pudo iniciar el juego!" + gameloaderror: "¡Ha ocurrido un error al cargar el juego '$game$'!" + regionnotfound: "¡El archivo de la región no existe!" + savesign: "¡No se pudo crear un nuevo archivo de configuración para los carteles!" + nogames: "¡No se han encontrado Juegos!" + notenoughress: "¡No tienes los recursos suficientes para comprar este objeto!" + teamnameinuse: "¡El nombre del equipo ya está en uso!" + minplayersmustnumber: "¡Mínimo de Jugadores debe ser un número!" + toolongregionname: "¡El nombre máximo de la región debe ser de 15 carácteres!" + notwhilegamerunning: "¡No puedes hacer esto mientras el Juego está en curso!" + notwhileingame: "¡No puedes hacer esto mientras estás en un Juego en curso!" + timeincorrect: "¡El tiempo tiene que ser un número (0 ... 23000), 'day' o 'night'!" + minplayersnumeric: "¡El parámetro de Jugadores-Mínimos debe ser un número!" + notinair: "¡No estás en el aire!" + teamfull: "¡El equipo está lleno, por favor, vuelva a abrir el menú de selección de equipo!" + novalidmaterial: "¡El tipo de bloque (material) no es correcto!" + wrongvalueonoff: "¡Parámetro incorrecto! Use true, on, 1 para activar - ¡Usa false, off, 0 para desactivar!" + playernotfound: "¡El jugador introducido no existe o no está conectado!" + notingameforkick: "¡Usted debe estar en un Juego para echar a un jugador!" + playernotingame: "¡El jugador introducido no está en este Juego!" + mustbeinlobbyworld: "Debes de estar en el mundo del Lobby del Juego" + addteamjoincancel: "¡La adición al equipo fue cancelada!" + entitynotcompatible: "¡Esta entidad no es compatible con la entrada de equipos!" +success: + gameadded: "¡Nuevo Juego '$game$' añadido con éxito!" + teamadded: "¡El equipo '$team$' ha sido añadido con éxito!" + joined: "¡Te has unido al Juego con éxito!" + left: "¡Usted salió con éxito del Juego!" + saved: "¡El Juego se guardó con éxito!" + bedset: "¡Has establecido el Bloque de Respawn del equipo '$team$'!" + regionset: "¡Ubicación de la región del juego $location$ para el Juego $game$ se estableció correctamente!" + spawnset: "¡La ubicación del Spawn para el Equipo $team$ se estableció con éxito!" + spawnerset: "¡La ubicación del Spawn de Recursos para $name$ se estableció con éxito!" + stopped: "¡Juego detenido con éxito!" + lobbyset: "¡El Lobby fue establecido con éxito!" + gameloaded: "¡Juego '$game$' cargado con éxito!" + reloadconfig: "¡Recarga exitosa!" + teamremoved: "¡Equipo eliminado con éxito!" + gameremoved: "¡Juego removido exitosamente!" + spawnercleared: "¡Todos los Spawners de Recursos han sido eliminados!" + gamerun: "¡Haz comenzado el juego, los jugadores pueden unirse!" + timeset: "¡El tiempo del Juego fue fijado con éxito!" + regionnameset: "¡El nombre de la Región se ha establecido correctamente!" + minplayersset: "¡Mínimo de Jugadores establecido correctamente!" + mainlobbyset: "¡Mainlobby fue puesto con éxito!" + gametimeset: "¡El Tiempo del Juego fue fijado con éxito!" + materialset: "¡El bloque de Respawneo del tipo (material) fue fijado con éxito!" + builderset: "¡El Constructor del mapa fue fijado con éxito y se verá en el Título!" + autobalanceseton: "¡Autobalance activado con éxito!" + autobalancesetoff: "¡Autobalance fue convertido con éxito &coff&a!" + selectteamjoinentity: "¡Ahora haga clic derecho sobre la entidad que desea utilizar como método de unión a un equipo!" + teamjoinadded: "La entidad fue marcada con éxito como selección de equipo, para el equipo $team$" + holoremoved: "¡Estadísticas-Holograma eliminado con éxito!" +gamecheck: + LOC_NOT_SET_ERROR: "¡Las localizaciones para la región no fueron fijadas correctamente!" + TEAM_SIZE_LOW_ERROR: "¡Tienes que establecer más equipos!" + NO_RES_SPAWNER_ERROR: "¡No has creado ningún Spawner de Recursos!" + NO_LOBBY_SET: "¡No pusiste un Lobby!" + TEAMS_WITHOUT_SPAWNS: "¡Hay equipo(s) sin una localización de Spawn!" + NO_ITEMSHOP_CATEGORIES: "¡No se encontraron categorías de artículos!" + NO_MAIN_LOBBY_SET: "No estableció un Lobby Principal aunque estableció 'tomainlobby' en true" + TEAM_NO_WRONG_BED: "¡Uno o más equipos no tiene una cama puesta!" + TEAM_NO_WRONG_TARGET: "¡Uno o más equipos no tienen un Bloque de Respawn!" +ingame: + team: "Equipo" + teams: "Equipos" + all: "Todo" + record: "¡&e$record$&a es el récord en este mapa!" + record-with-holders: '&aEl récord en este mapa es &e$record$&a y pertenece a: $holders$' + newrecord: '&aEquipo $team$&a estableció un nuevo récord: &6$record$' + record-nobeddestroy: "&c¡La partida no se guardará, porque ninguna cama fue destruida!" + teamwon: "¡Felicitaciones! ¡El Equipo $team$ ha ganado!" + draw: "¡El Juego termina con un empate!" + serverrestart: "¡El Servidor se reiniciará en $sec$ segundo(s)!" + gamestarting: "Comenzando Juego ..." + gamestarted: "¡El Juego '$game$' acaba de empezar!" + backtolobby: "¡Volviendo al Lobby en $sec$ segundo(s)!" + spectator: "Espectador" + spectate: "&aEspectar" + teamchest: "Cofre del Equipo" + noturteamchest: "¡Este cofre no es un cofre del equipo!" + protectionleft: "¡Invulnerable por &c$length$&f segundo(s)!" + protectionend: "¡Ahora eres &cVulnerable&f de nuevo!" + team-dead: "¡El Equipo $team$ fue destruido!" + no-friendlybreak: "&c¡No puedes romper el bloque debajo de un miembro del equipo!" + teamchestdestroy: "&c¡Un cofre del equipo ha sido destruido!" + title: + map-builder: "Construido por: $builder$" + win-title: "&6¡Felicitaciones!" + win-subtitle: "El Equipo $team$&6 ganó en &e$time$" + shop: + name: "Tienda de Objetos" + newshop: "Usar la tienda nueva" + oldshop: "Usar la tienda antigua" + fullstackpershift: "Múltiples stacks por shift click" + onestackpershift: "Un stack por shift click" + player: + left: "¡El jugador $player$ ha abandonado el Juego!" + died: "¡$player$ murió!" + killed: "¡$killer$ mató a $player$!" + kicked: "¡$player$ ha sido expulsado!" + waskicked: "¡Usted fue expulsado del Juego!" + blocks: + ownbeddestroy: "¡No puedes destruir tu propia cama!" + beddestroyed: "¡$player$ destruyó la cama del equipo $team$!" + specials: + rescue-platform: + left: "¡Tienes que esperar &c$time$&f segundo(s) hasta que puedas volver a utilizar la próxima plataforma de rescate!" + arrow-blocker: + start: "Estás protegido de ser golpeado por las flechas durante &c$time$&f segundo(s)." + end: "&cTu protección de flechas ha terminado" + left: "¡Tienes que esperar &c$time$&f segundo(s) hasta que puedas volver a utilizar el bloqueador de flechas!" + trap: + trapped: "¡&eAlguien ha activado un(a) &ctrap&e de tu equipo!" + protection-wall: + left: "¡Tienes que esperar &c$time$&f segundo(s) hasta volver a utilizar la siguiente pared de protección!" + not-usable-here: "¡No puedes usar la pared de protección aquí!" + warp-powder: + cancelled: "¡&cTu teletransporte fue cancelado!" + start: "Serás teletransportado en &c$time$&f segundo(s). ¡No te muevas!" + cancel: "&4Cancelar el teletransporte" + multiuse: "¡&cYa has iniciado un teletransporte!" + tntsheep: + no-target-found: "¡No se encontró ningún jugador objetivo!" + tracker: + no-target-found: "¡No se encontró ningún jugador objetivo!" + target-found: "$player$ está a $blocks$ bloque(s) lejos de ti." +lobby: + countdown: "¡El Juego comenzará en $sec$ segundo(s)!" + countdowncancel: "Se necesitan más jugadores. ¡La cuenta atrás fue cancelada!" + cancelcountdown: + not_enough_players: "Se necesitan más jugadores. ¡Cuenta regresiva cancelada!" + not_enough_teams: "Se necesitan más equipos. ¡Cuenta regresiva cancelada!" + cancelstart: + not_enough_players: "¡Se necesitan más jugadores para empezar el Juego!" + not_enough_teams: "¡Se necesitan más equipos para empezar el Juego!" + chooseteam: "Elige un equipo" + startgame: "Iniciar Juego" + reduce_countdown: "Reducir la cuenta atrás" + gamefull: "¡El Juego está lleno!" + gamefullpremium: "¡El Juego está lleno de jugadores con rango!" + teamjoined: "Te has unido al equipo $team$" + leavegame: "Salir del Juego" + playerjoin: "¡El jugador $player$ se unió al Juego!" + kickedbyvip: "¡Ha sido expulsado por un jugador Vip que se ha unido al juego lleno!" + moreplayersneeded: "$count$ jugadores más necesarios." + moreplayersneeded-one: "$count$ jugador más necesario." + moreteamsneeded: "¡Un mínimo de 2 jugadores en 2 diferentes equipos se necesita para iniciar el Juego!" +sign: + firstline: "&6[BedWars]" + players: "Jugadores" + gamestate: + stopped: "&4¡Detenido!" + waiting: "&aEsperando ..." + running: "&9¡Corriendo!" + full: "¡Lleno!" +stats: + header: "Estadísticas de BedWars" + kd: "K/D" + statsnotfound: "¡Las estadísticas de $player$ no se encontraron!" + name: "Nombre" + kills: "Bajas" + deaths: "Muertes" + wins: "Victorias" + loses: "Perdidas" + score: "Puntuaciones" + destroyedBeds: "Camas destruidas" + games: "Juegos" +commands: + addgame: + name: "Añadir Juego" + desc: "Añadir un nuevo Juego" + addteam: + name: "Añadir equipo" + desc: "Añadir un equipo a un Juego específico" + join: + name: "Unirse al Juego" + desc: "Unirse a un Juego específico" + leave: + name: "Salir del Juego" + desc: "Salir del Juego actual" + save: + name: "Guardar Juego" + desc: "Guardar un Juego (y mapa) en archivo(s) de config" + settarget: + name: "Poner un objetivo" + desc: "Establece la ubicación del bloque de destino de un equipo" + setbed: + name: "Establecer cama (sinónimo de establecer objetivo)" + desc: "Establece la ubicación del bloque de la cama de un equipo (sinónimo de establecer objetivo)" + setlobby: + name: "Establecer Lobby" + desc: "Establece la ubicación del Lobby del Juego" + setregion: + name: "Establece un punto de región" + desc: "Establece un punto de región para el Juego" + setspawn: + name: "Establece un Spawn de un equipo" + desc: "Establece el spawn del equipo dado" + setspawner: + name: "Establecer Spawner" + desc: "Establece una ubicación de spawner de un recurso específico" + start: + name: "Iniciar Juego" + desc: "Iniciar un Juego" + stop: + name: "Parar Juego" + desc: "Parar un Juego" + help: + name: "Mostrar ayuda" + desc: "Mostrar información sobre el plugin y sus comandos" + reload: + name: "Recargar" + desc: "Recargar las configuraciones y las traducciones" + setmainlobby: + name: "Establecer Lobby Principal" + desc: "Establece el Lobby Principal de un Juego (se necesita que mainlobby-enabled esté en true)" + list: + name: "Lista de Juegos" + desc: "Lista de todos los Juegos disponibles" + regionname: + name: "Establecer el nombre de la región" + desc: "Establece un nombre de región individual (en lugar del nombre del mundo)" + removeteam: + name: "Eliminar equipo" + desc: "Elimina un equipo del Juego (sólo si está en modo detenido)" + removegame: + name: "Eliminar Juego" + desc: "Eliminar un Juego y toda su configuración" + clearspawner: + name: "Liberar Spawners" + desc: "Elimina todos los Spawners del Juego. Guardado necesario." + gametime: + name: "Establecer el tiempo del Juego" + desc: "Establece el tiempo del Juego que se desea usar en el mundo de juego" + stats: + name: "Estadísticas" + desc: "Muestra tus estadísticas" + setbuilder: + name: "Establece el constructor del mapa" + desc: "Establece el constructor del mapa que se mostrará en el título cuando comience el Juego." + setgameblock: + name: "Establecer el bloque del Juego" + desc: "Establece el tipo de bloque de juego para este juego que debe utilizarse en la configuración de \"game-block\". Escriba 'DEFAULT' como tipo para usar el tipo de configuración de nuevo" + setautobalance: + name: "Establecer el autobalance" + desc: "¡Si 'global-autobalance' se establece en 'false', con este comando puede configurar el equipo-autobalance por Juego; ha encendido o apagado!" + setminplayers: + name: "Establecer el mínimo de jugadores" + desc: "Establece la cantidad de jugadores necesarios para iniciar el Juego" + kick: + name: "Expulsar jugador" + desc: "¡Expulsar un jugador del juego actual!" + addteamjoin: + name: "Añadir selección de equipo" + desc: "¡Marca una criatura que pueda ser usada para unirse a un equipo específico!" + addholo: + name: "Añadir ubicación del holograma" + desc: "¡Se agregará un holograma de estadísticas en la posición actual!" + removeholo: + name: "Quitar la ubicación del holograma" + desc: "Cuando el comando es ejecutado, el jugador debe dar click-derecho en el holograma para eliminarlo." + explain: "Realice un click izquierdo dentro de 10 segundos en el holograma que desea eliminar." + debugpaste: + name: "Paste debug data" + desc: "Esto enviará datos de errores a Hastebin y te proporcionara un link que puedes compartir con los desarrolladores" + itemspaste: + name: "Pegar tu inventario a un archivo" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/es_MX.yml b/common/src/main/resources/locale/es_MX.yml new file mode 100644 index 0000000..462125f --- /dev/null +++ b/common/src/main/resources/locale/es_MX.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Página $current$ de $max$" + currently: Actualmente +errors: + argumentslength: "¡El número de argumentos no coincide con la cantidad correcta!" + holodependencynotfound: "No se pudo encontrar $dependency$ para Estadística-Holograma" + packagenotfound: "¡No se pudo obtener el paquete $package$!" + classnotfound: "¡No se pudo obtener el paquete $package$ de la clase $class$!" + gameexists: "¡Ya existe un mapa con este nombre!" + gamenotfound: "¡El mapa '$game$' no se pudo encontrar!" + nofreegames: "No hay juegos libres disponibles." + gamenotfoundsimple: "¡No se pudo encontrar el Juego!" + playeramount: "¡El número máximo de jugadores no puede ser menor de 1 o mayor de 24!" + teamcolornotallowed: "El color introducido no está disponible" + teamnamelength: "¡El nombre de un equipo debe tener entre 2 y 20 carácteres!" + teamnotfound: "¡Equipo no encontrado!" + notingame: "¡Actualmente no estás en un Juego!" + bedtargeting: "¡Tienes que apuntar a o estar sobre un bloque que esté configurado en la sección 'game-block'!" + regionargument: "¡El argumento de localización tiene que ser 'loc1' o 'loc2'!" + spawnerargument: "¡El parámetro de recurso tiene que ser un recurso configurado válido!" + blockdownnotfound: "¡El bloque en el que estás parado no fue encontrado!" + gamenotrunning: "¡El juego no se está ejecutando!" + bungeenoserver: "¡Los servidores de BungeeCord no se han configurado correctamente! ¡Habla con el Administrador del Servidor!" + cantstartagain: "¡El Juego está en marcha! ¡No puedes volver a empezar el juego!" + startoutofwaiting: "¡El juego tiene que ser comenzado fuera del modo de espera!" + cantjoingame: "¡No puedes unirte a un Juego en marcha o parado!" + lobbyongameworld: "¡El Lobby no puede estar en el mundo del Juego!" + gamenotloaded: "¡No se pudo iniciar el juego!" + gameloaderror: "¡Ha ocurrido un error al cargar el juego '$game$'!" + regionnotfound: "¡El archivo de la región no existe!" + savesign: "¡No se pudo crear un nuevo archivo de configuración para los carteles!" + nogames: "¡No se han encontrado Juegos!" + notenoughress: "¡No tienes los recursos suficientes para comprar este objeto!" + teamnameinuse: "¡El nombre del equipo ya está en uso!" + minplayersmustnumber: "¡Mínimo de Jugadores debe ser un número!" + toolongregionname: "¡El nombre máximo de la región debe ser de 15 carácteres!" + notwhilegamerunning: "¡No puedes hacer esto mientras el Juego está en curso!" + notwhileingame: "¡No puedes hacer esto mientras estás en un Juego en curso!" + timeincorrect: "¡El tiempo tiene que ser un número (0 ... 23000), 'day' o 'night'!" + minplayersnumeric: "¡El parámetro de Jugadores-Mínimos debe ser un número!" + notinair: "¡No estás en el aire!" + teamfull: "¡El equipo está lleno, por favor, vuelva a abrir el menú de selección de equipo!" + novalidmaterial: "¡El tipo de bloque (material) no es correcto!" + wrongvalueonoff: "¡Parámetro incorrecto! Use true, on, 1 para activar - ¡Usa false, off, 0 para desactivar!" + playernotfound: "¡El jugador introducido no existe o no está conectado!" + notingameforkick: "¡Usted debe estar en un Juego para echar a un jugador!" + playernotingame: "¡El jugador introducido no está en este Juego!" + mustbeinlobbyworld: "Debes de estar en el mundo del Lobby del Juego" + addteamjoincancel: "¡La adición al equipo fue cancelada!" + entitynotcompatible: "¡Esta entidad no es compatible con la entrada de equipos!" +success: + gameadded: "¡Nuevo Juego '$game$' añadido con éxito!" + teamadded: "¡El equipo '$team$' ha sido añadido con éxito!" + joined: "¡Te has unido al Juego con éxito!" + left: "¡Usted salió con éxito del Juego!" + saved: "¡El Juego se guardó con éxito!" + bedset: "¡Has establecido el Bloque de Respawn del equipo '$team$'!" + regionset: "¡Ubicación de la región del juego $location$ para el Juego $game$ se estableció correctamente!" + spawnset: "¡La ubicación del Spawn para el Equipo $team$ se estableció con éxito!" + spawnerset: "¡La ubicación del Spawn de Recursos para $name$ se estableció con éxito!" + stopped: "¡Juego detenido con éxito!" + lobbyset: "¡El Lobby fue establecido con éxito!" + gameloaded: "¡Juego '$game$' cargado con éxito!" + reloadconfig: "¡Recarga exitosa!" + teamremoved: "¡Equipo eliminado con éxito!" + gameremoved: "¡Juego removido exitosamente!" + spawnercleared: "¡Todos los Spawners de Recursos han sido eliminados!" + gamerun: "¡Haz comenzado el juego, los jugadores pueden unirse!" + timeset: "¡El tiempo del Juego fue fijado con éxito!" + regionnameset: "¡El nombre de la Región se ha establecido correctamente!" + minplayersset: "¡Mínimo de Jugadores establecido correctamente!" + mainlobbyset: "¡Mainlobby fue puesto con éxito!" + gametimeset: "¡El Tiempo del Juego fue fijado con éxito!" + materialset: "¡El bloque de Respawneo del tipo (material) fue fijado con éxito!" + builderset: "¡El Constructor del mapa fue fijado con éxito y se verá en el Título!" + autobalanceseton: "¡Autobalance activado con éxito!" + autobalancesetoff: "¡Autobalance fue convertido con éxito &coff&a!" + selectteamjoinentity: "¡Ahora haga clic derecho sobre la entidad que desea utilizar como método de unión a un equipo!" + teamjoinadded: "La entidad fue marcada con éxito como selección de equipo, para el equipo $team$" + holoremoved: "¡Estadísticas-Holograma eliminado con éxito!" +gamecheck: + LOC_NOT_SET_ERROR: "¡Las localizaciones para la región no fueron fijadas correctamente!" + TEAM_SIZE_LOW_ERROR: "¡Tienes que establecer más equipos!" + NO_RES_SPAWNER_ERROR: "¡No has creado ningún Spawner de Recursos!" + NO_LOBBY_SET: "¡No pusiste un Lobby!" + TEAMS_WITHOUT_SPAWNS: "¡Hay equipo(s) sin una localización de Spawn!" + NO_ITEMSHOP_CATEGORIES: "¡No se encontraron categorías de artículos!" + NO_MAIN_LOBBY_SET: "No estableció un Lobby Principal aunque estableció 'tomainlobby' en true" + TEAM_NO_WRONG_BED: "¡Uno o más equipos no tiene una cama puesta!" + TEAM_NO_WRONG_TARGET: "¡Uno o más equipos no tienen un Bloque de Respawn!" +ingame: + team: "Equipo" + teams: "Equipos" + all: "Todo" + record: "¡&e$record$&a es el récord en este mapa!" + record-with-holders: '&aEl récord en este mapa es &e$record$&a y pertenece a: $holders$' + newrecord: '&aEquipo $team$&a estableció un nuevo récord: &6$record$' + record-nobeddestroy: "&c¡La partida no se guardará, porque ninguna cama fue destruida!" + teamwon: "¡Felicitaciones! ¡El Equipo $team$ ha ganado!" + draw: "¡El Juego termina con un empate!" + serverrestart: "¡El Servidor se reiniciará en $sec$ segundo(s)!" + gamestarting: "Comenzando Juego ..." + gamestarted: "¡El Juego '$game$' acaba de empezar!" + backtolobby: "¡Volviendo al Lobby en $sec$ segundo(s)!" + spectator: "Espectador" + spectate: "&aEspectar" + teamchest: "Cofre del Equipo" + noturteamchest: "¡Este cofre no es un cofre del equipo!" + protectionleft: "¡Invulnerable por &c$length$&f segundo(s)!" + protectionend: "¡Ahora eres &cVulnerable&f de nuevo!" + team-dead: "¡El Equipo $team$ fue destruido!" + no-friendlybreak: "&c¡No puedes romper el bloque debajo de un miembro del equipo!" + teamchestdestroy: "&c¡Un cofre del equipo ha sido destruido!" + title: + map-builder: "Construido por: $builder$" + win-title: "&6¡Felicitaciones!" + win-subtitle: "El Equipo $team$&6 ganó en &e$time$" + shop: + name: "Tienda de Objetos" + newshop: "Usar la tienda nueva" + oldshop: "Usar la tienda antigua" + fullstackpershift: "Múltiples stacks por shift click" + onestackpershift: "Un stack por shift click" + player: + left: "¡El jugador $player$ ha abandonado el Juego!" + died: "¡$player$ murió!" + killed: "¡$killer$ mató a $player$!" + kicked: "¡$player$ ha sido expulsado!" + waskicked: "¡Usted fue expulsado del Juego!" + blocks: + ownbeddestroy: "¡No puedes destruir tu propia cama!" + beddestroyed: "¡$player$ destruyó la cama del equipo $team$!" + specials: + rescue-platform: + left: "¡Tienes que esperar &c$time$&f segundo(s) hasta que puedas volver a utilizar la próxima plataforma de rescate!" + arrow-blocker: + start: "Estás protegido de ser golpeado por las flechas durante &c$time$&f segundo(s)." + end: "&cTu protección de flechas ha terminado" + left: "¡Tienes que esperar &c$time$&f segundo(s) hasta que puedas volver a utilizar el bloqueador de flechas!" + trap: + trapped: "¡&eAlguien ha activado un(a) &ctrap&e de tu equipo!" + protection-wall: + left: "¡Tienes que esperar &c$time$&f segundo(s) hasta volver a utilizar la siguiente pared de protección!" + not-usable-here: "¡No puedes usar la pared de protección aquí!" + warp-powder: + cancelled: "¡&cTu teletransporte fue cancelado!" + start: "Serás teletransportado en &c$time$&f segundo(s). ¡No te muevas!" + cancel: "&4Cancelar el teletransporte" + multiuse: "¡&cYa has iniciado un teletransporte!" + tntsheep: + no-target-found: "¡No se encontró ningún jugador objetivo!" + tracker: + no-target-found: "¡No se encontró ningún jugador objetivo!" + target-found: "$player$ está a $blocks$ bloque(s) lejos de ti." +lobby: + countdown: "¡El Juego comenzará en $sec$ segundo(s)!" + countdowncancel: "Se necesitan más jugadores. ¡La cuenta atrás fue cancelada!" + cancelcountdown: + not_enough_players: "Se necesitan más jugadores. ¡Cuenta regresiva cancelada!" + not_enough_teams: "Se necesitan más equipos. ¡Cuenta regresiva cancelada!" + cancelstart: + not_enough_players: "¡Se necesitan más jugadores para empezar el Juego!" + not_enough_teams: "¡Se necesitan más equipos para empezar el Juego!" + chooseteam: "Elige un equipo" + startgame: "Iniciar Juego" + reduce_countdown: "Reducir la cuenta atrás" + gamefull: "¡El Juego está lleno!" + gamefullpremium: "¡El Juego está lleno de jugadores con rango!" + teamjoined: "Te has unido al equipo $team$" + leavegame: "Salir del Juego" + playerjoin: "¡El jugador $player$ se unió al Juego!" + kickedbyvip: "¡Ha sido expulsado por un jugador Vip que se ha unido al juego lleno!" + moreplayersneeded: "$count$ jugadores más necesarios." + moreplayersneeded-one: "$count$ jugador más necesario." + moreteamsneeded: "¡Un mínimo de 2 jugadores en 2 diferentes equipos se necesita para iniciar el Juego!" +sign: + firstline: "&6[BedWars]" + players: "Jugadores" + gamestate: + stopped: "&4¡Detenido!" + waiting: "&aEsperando ..." + running: "&9¡Corriendo!" + full: "¡Lleno!" +stats: + header: "Estadísticas de BedWars" + kd: "K/D" + statsnotfound: "¡Las estadísticas de $player$ no se encontraron!" + name: "Nombre" + kills: "Bajas" + deaths: "Muertes" + wins: "Victorias" + loses: "Perdidas" + score: "Puntuaciones" + destroyedBeds: "Camas destruidas" + games: "Juegos" +commands: + addgame: + name: "Añadir Juego" + desc: "Añadir un nuevo Juego" + addteam: + name: "Añadir equipo" + desc: "Añadir un equipo a un Juego específico" + join: + name: "Unirse al Juego" + desc: "Unirse a un Juego específico" + leave: + name: "Salir del Juego" + desc: "Salir del Juego actual" + save: + name: "Guardar Juego" + desc: "Guardar un Juego (y mapa) en archivo(s) de config" + settarget: + name: "Poner un objetivo" + desc: "Establece la ubicación del bloque de destino de un equipo" + setbed: + name: "Establecer cama (sinónimo de establecer objetivo)" + desc: "Establece la ubicación del bloque de la cama de un equipo (sinónimo de establecer objetivo)" + setlobby: + name: "Establecer Lobby" + desc: "Establece la ubicación del Lobby del Juego" + setregion: + name: "Establece un punto de región" + desc: "Establece un punto de región para el Juego" + setspawn: + name: "Establece un Spawn de un equipo" + desc: "Establece el spawn del equipo dado" + setspawner: + name: "Establecer Spawner" + desc: "Establece una ubicación de spawner de un recurso específico" + start: + name: "Iniciar Juego" + desc: "Iniciar un Juego" + stop: + name: "Parar Juego" + desc: "Parar un Juego" + help: + name: "Mostrar ayuda" + desc: "Mostrar información sobre el plugin y sus comandos" + reload: + name: "Recargar" + desc: "Recargar las configuraciones y las traducciones" + setmainlobby: + name: "Establecer Lobby Principal" + desc: "Establece el Lobby Principal de un Juego (se necesita que mainlobby-enabled esté en true)" + list: + name: "Lista de Juegos" + desc: "Lista de todos los Juegos disponibles" + regionname: + name: "Establecer el nombre de la región" + desc: "Establece un nombre de región individual (en lugar del nombre del mundo)" + removeteam: + name: "Eliminar equipo" + desc: "Elimina un equipo del Juego (sólo si está en modo detenido)" + removegame: + name: "Eliminar Juego" + desc: "Eliminar un Juego y toda su configuración" + clearspawner: + name: "Liberar Spawners" + desc: "Elimina todos los Spawners del Juego. Guardado necesario." + gametime: + name: "Establecer el tiempo del Juego" + desc: "Establece el tiempo del Juego que se desea usar en el mundo de juego" + stats: + name: "Estadísticas" + desc: "Muestra tus estadísticas" + setbuilder: + name: "Establece el constructor del mapa" + desc: "Establece el constructor del mapa que se mostrará en el título cuando comience el Juego." + setgameblock: + name: "Establecer el bloque del Juego" + desc: "Establece el tipo de bloque de juego para este juego que debe utilizarse en la configuración de \"game-block\". Escriba 'DEFAULT' como tipo para usar el tipo de configuración de nuevo" + setautobalance: + name: "Establecer el autobalance" + desc: "¡Si 'global-autobalance' se establece en 'false', con este comando puede configurar el equipo-autobalance por Juego; ha encendido o apagado!" + setminplayers: + name: "Establecer el mínimo de jugadores" + desc: "Establece la cantidad de jugadores necesarios para iniciar el Juego" + kick: + name: "Expulsar jugador" + desc: "¡Expulsar un jugador del juego actual!" + addteamjoin: + name: "Añadir selección de equipo" + desc: "¡Marca una criatura que pueda ser usada para unirse a un equipo específico!" + addholo: + name: "Añadir ubicación del holograma" + desc: "¡Se agregará un holograma de estadísticas en la posición actual!" + removeholo: + name: "Quitar la ubicación del holograma" + desc: "Cuando el comando es ejecutado, el jugador debe dar click-derecho en el holograma para eliminarlo." + explain: "Realice un click izquierdo dentro de 10 segundos en el holograma que desea eliminar." + debugpaste: + name: "Paste debug data" + desc: "Esto enviará datos de errores a Hastebin y te proporcionara un link que puedes compartir con los desarrolladores" + itemspaste: + name: "Pegar tu inventario a un archivo" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/es_UY.yml b/common/src/main/resources/locale/es_UY.yml new file mode 100644 index 0000000..462125f --- /dev/null +++ b/common/src/main/resources/locale/es_UY.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Página $current$ de $max$" + currently: Actualmente +errors: + argumentslength: "¡El número de argumentos no coincide con la cantidad correcta!" + holodependencynotfound: "No se pudo encontrar $dependency$ para Estadística-Holograma" + packagenotfound: "¡No se pudo obtener el paquete $package$!" + classnotfound: "¡No se pudo obtener el paquete $package$ de la clase $class$!" + gameexists: "¡Ya existe un mapa con este nombre!" + gamenotfound: "¡El mapa '$game$' no se pudo encontrar!" + nofreegames: "No hay juegos libres disponibles." + gamenotfoundsimple: "¡No se pudo encontrar el Juego!" + playeramount: "¡El número máximo de jugadores no puede ser menor de 1 o mayor de 24!" + teamcolornotallowed: "El color introducido no está disponible" + teamnamelength: "¡El nombre de un equipo debe tener entre 2 y 20 carácteres!" + teamnotfound: "¡Equipo no encontrado!" + notingame: "¡Actualmente no estás en un Juego!" + bedtargeting: "¡Tienes que apuntar a o estar sobre un bloque que esté configurado en la sección 'game-block'!" + regionargument: "¡El argumento de localización tiene que ser 'loc1' o 'loc2'!" + spawnerargument: "¡El parámetro de recurso tiene que ser un recurso configurado válido!" + blockdownnotfound: "¡El bloque en el que estás parado no fue encontrado!" + gamenotrunning: "¡El juego no se está ejecutando!" + bungeenoserver: "¡Los servidores de BungeeCord no se han configurado correctamente! ¡Habla con el Administrador del Servidor!" + cantstartagain: "¡El Juego está en marcha! ¡No puedes volver a empezar el juego!" + startoutofwaiting: "¡El juego tiene que ser comenzado fuera del modo de espera!" + cantjoingame: "¡No puedes unirte a un Juego en marcha o parado!" + lobbyongameworld: "¡El Lobby no puede estar en el mundo del Juego!" + gamenotloaded: "¡No se pudo iniciar el juego!" + gameloaderror: "¡Ha ocurrido un error al cargar el juego '$game$'!" + regionnotfound: "¡El archivo de la región no existe!" + savesign: "¡No se pudo crear un nuevo archivo de configuración para los carteles!" + nogames: "¡No se han encontrado Juegos!" + notenoughress: "¡No tienes los recursos suficientes para comprar este objeto!" + teamnameinuse: "¡El nombre del equipo ya está en uso!" + minplayersmustnumber: "¡Mínimo de Jugadores debe ser un número!" + toolongregionname: "¡El nombre máximo de la región debe ser de 15 carácteres!" + notwhilegamerunning: "¡No puedes hacer esto mientras el Juego está en curso!" + notwhileingame: "¡No puedes hacer esto mientras estás en un Juego en curso!" + timeincorrect: "¡El tiempo tiene que ser un número (0 ... 23000), 'day' o 'night'!" + minplayersnumeric: "¡El parámetro de Jugadores-Mínimos debe ser un número!" + notinair: "¡No estás en el aire!" + teamfull: "¡El equipo está lleno, por favor, vuelva a abrir el menú de selección de equipo!" + novalidmaterial: "¡El tipo de bloque (material) no es correcto!" + wrongvalueonoff: "¡Parámetro incorrecto! Use true, on, 1 para activar - ¡Usa false, off, 0 para desactivar!" + playernotfound: "¡El jugador introducido no existe o no está conectado!" + notingameforkick: "¡Usted debe estar en un Juego para echar a un jugador!" + playernotingame: "¡El jugador introducido no está en este Juego!" + mustbeinlobbyworld: "Debes de estar en el mundo del Lobby del Juego" + addteamjoincancel: "¡La adición al equipo fue cancelada!" + entitynotcompatible: "¡Esta entidad no es compatible con la entrada de equipos!" +success: + gameadded: "¡Nuevo Juego '$game$' añadido con éxito!" + teamadded: "¡El equipo '$team$' ha sido añadido con éxito!" + joined: "¡Te has unido al Juego con éxito!" + left: "¡Usted salió con éxito del Juego!" + saved: "¡El Juego se guardó con éxito!" + bedset: "¡Has establecido el Bloque de Respawn del equipo '$team$'!" + regionset: "¡Ubicación de la región del juego $location$ para el Juego $game$ se estableció correctamente!" + spawnset: "¡La ubicación del Spawn para el Equipo $team$ se estableció con éxito!" + spawnerset: "¡La ubicación del Spawn de Recursos para $name$ se estableció con éxito!" + stopped: "¡Juego detenido con éxito!" + lobbyset: "¡El Lobby fue establecido con éxito!" + gameloaded: "¡Juego '$game$' cargado con éxito!" + reloadconfig: "¡Recarga exitosa!" + teamremoved: "¡Equipo eliminado con éxito!" + gameremoved: "¡Juego removido exitosamente!" + spawnercleared: "¡Todos los Spawners de Recursos han sido eliminados!" + gamerun: "¡Haz comenzado el juego, los jugadores pueden unirse!" + timeset: "¡El tiempo del Juego fue fijado con éxito!" + regionnameset: "¡El nombre de la Región se ha establecido correctamente!" + minplayersset: "¡Mínimo de Jugadores establecido correctamente!" + mainlobbyset: "¡Mainlobby fue puesto con éxito!" + gametimeset: "¡El Tiempo del Juego fue fijado con éxito!" + materialset: "¡El bloque de Respawneo del tipo (material) fue fijado con éxito!" + builderset: "¡El Constructor del mapa fue fijado con éxito y se verá en el Título!" + autobalanceseton: "¡Autobalance activado con éxito!" + autobalancesetoff: "¡Autobalance fue convertido con éxito &coff&a!" + selectteamjoinentity: "¡Ahora haga clic derecho sobre la entidad que desea utilizar como método de unión a un equipo!" + teamjoinadded: "La entidad fue marcada con éxito como selección de equipo, para el equipo $team$" + holoremoved: "¡Estadísticas-Holograma eliminado con éxito!" +gamecheck: + LOC_NOT_SET_ERROR: "¡Las localizaciones para la región no fueron fijadas correctamente!" + TEAM_SIZE_LOW_ERROR: "¡Tienes que establecer más equipos!" + NO_RES_SPAWNER_ERROR: "¡No has creado ningún Spawner de Recursos!" + NO_LOBBY_SET: "¡No pusiste un Lobby!" + TEAMS_WITHOUT_SPAWNS: "¡Hay equipo(s) sin una localización de Spawn!" + NO_ITEMSHOP_CATEGORIES: "¡No se encontraron categorías de artículos!" + NO_MAIN_LOBBY_SET: "No estableció un Lobby Principal aunque estableció 'tomainlobby' en true" + TEAM_NO_WRONG_BED: "¡Uno o más equipos no tiene una cama puesta!" + TEAM_NO_WRONG_TARGET: "¡Uno o más equipos no tienen un Bloque de Respawn!" +ingame: + team: "Equipo" + teams: "Equipos" + all: "Todo" + record: "¡&e$record$&a es el récord en este mapa!" + record-with-holders: '&aEl récord en este mapa es &e$record$&a y pertenece a: $holders$' + newrecord: '&aEquipo $team$&a estableció un nuevo récord: &6$record$' + record-nobeddestroy: "&c¡La partida no se guardará, porque ninguna cama fue destruida!" + teamwon: "¡Felicitaciones! ¡El Equipo $team$ ha ganado!" + draw: "¡El Juego termina con un empate!" + serverrestart: "¡El Servidor se reiniciará en $sec$ segundo(s)!" + gamestarting: "Comenzando Juego ..." + gamestarted: "¡El Juego '$game$' acaba de empezar!" + backtolobby: "¡Volviendo al Lobby en $sec$ segundo(s)!" + spectator: "Espectador" + spectate: "&aEspectar" + teamchest: "Cofre del Equipo" + noturteamchest: "¡Este cofre no es un cofre del equipo!" + protectionleft: "¡Invulnerable por &c$length$&f segundo(s)!" + protectionend: "¡Ahora eres &cVulnerable&f de nuevo!" + team-dead: "¡El Equipo $team$ fue destruido!" + no-friendlybreak: "&c¡No puedes romper el bloque debajo de un miembro del equipo!" + teamchestdestroy: "&c¡Un cofre del equipo ha sido destruido!" + title: + map-builder: "Construido por: $builder$" + win-title: "&6¡Felicitaciones!" + win-subtitle: "El Equipo $team$&6 ganó en &e$time$" + shop: + name: "Tienda de Objetos" + newshop: "Usar la tienda nueva" + oldshop: "Usar la tienda antigua" + fullstackpershift: "Múltiples stacks por shift click" + onestackpershift: "Un stack por shift click" + player: + left: "¡El jugador $player$ ha abandonado el Juego!" + died: "¡$player$ murió!" + killed: "¡$killer$ mató a $player$!" + kicked: "¡$player$ ha sido expulsado!" + waskicked: "¡Usted fue expulsado del Juego!" + blocks: + ownbeddestroy: "¡No puedes destruir tu propia cama!" + beddestroyed: "¡$player$ destruyó la cama del equipo $team$!" + specials: + rescue-platform: + left: "¡Tienes que esperar &c$time$&f segundo(s) hasta que puedas volver a utilizar la próxima plataforma de rescate!" + arrow-blocker: + start: "Estás protegido de ser golpeado por las flechas durante &c$time$&f segundo(s)." + end: "&cTu protección de flechas ha terminado" + left: "¡Tienes que esperar &c$time$&f segundo(s) hasta que puedas volver a utilizar el bloqueador de flechas!" + trap: + trapped: "¡&eAlguien ha activado un(a) &ctrap&e de tu equipo!" + protection-wall: + left: "¡Tienes que esperar &c$time$&f segundo(s) hasta volver a utilizar la siguiente pared de protección!" + not-usable-here: "¡No puedes usar la pared de protección aquí!" + warp-powder: + cancelled: "¡&cTu teletransporte fue cancelado!" + start: "Serás teletransportado en &c$time$&f segundo(s). ¡No te muevas!" + cancel: "&4Cancelar el teletransporte" + multiuse: "¡&cYa has iniciado un teletransporte!" + tntsheep: + no-target-found: "¡No se encontró ningún jugador objetivo!" + tracker: + no-target-found: "¡No se encontró ningún jugador objetivo!" + target-found: "$player$ está a $blocks$ bloque(s) lejos de ti." +lobby: + countdown: "¡El Juego comenzará en $sec$ segundo(s)!" + countdowncancel: "Se necesitan más jugadores. ¡La cuenta atrás fue cancelada!" + cancelcountdown: + not_enough_players: "Se necesitan más jugadores. ¡Cuenta regresiva cancelada!" + not_enough_teams: "Se necesitan más equipos. ¡Cuenta regresiva cancelada!" + cancelstart: + not_enough_players: "¡Se necesitan más jugadores para empezar el Juego!" + not_enough_teams: "¡Se necesitan más equipos para empezar el Juego!" + chooseteam: "Elige un equipo" + startgame: "Iniciar Juego" + reduce_countdown: "Reducir la cuenta atrás" + gamefull: "¡El Juego está lleno!" + gamefullpremium: "¡El Juego está lleno de jugadores con rango!" + teamjoined: "Te has unido al equipo $team$" + leavegame: "Salir del Juego" + playerjoin: "¡El jugador $player$ se unió al Juego!" + kickedbyvip: "¡Ha sido expulsado por un jugador Vip que se ha unido al juego lleno!" + moreplayersneeded: "$count$ jugadores más necesarios." + moreplayersneeded-one: "$count$ jugador más necesario." + moreteamsneeded: "¡Un mínimo de 2 jugadores en 2 diferentes equipos se necesita para iniciar el Juego!" +sign: + firstline: "&6[BedWars]" + players: "Jugadores" + gamestate: + stopped: "&4¡Detenido!" + waiting: "&aEsperando ..." + running: "&9¡Corriendo!" + full: "¡Lleno!" +stats: + header: "Estadísticas de BedWars" + kd: "K/D" + statsnotfound: "¡Las estadísticas de $player$ no se encontraron!" + name: "Nombre" + kills: "Bajas" + deaths: "Muertes" + wins: "Victorias" + loses: "Perdidas" + score: "Puntuaciones" + destroyedBeds: "Camas destruidas" + games: "Juegos" +commands: + addgame: + name: "Añadir Juego" + desc: "Añadir un nuevo Juego" + addteam: + name: "Añadir equipo" + desc: "Añadir un equipo a un Juego específico" + join: + name: "Unirse al Juego" + desc: "Unirse a un Juego específico" + leave: + name: "Salir del Juego" + desc: "Salir del Juego actual" + save: + name: "Guardar Juego" + desc: "Guardar un Juego (y mapa) en archivo(s) de config" + settarget: + name: "Poner un objetivo" + desc: "Establece la ubicación del bloque de destino de un equipo" + setbed: + name: "Establecer cama (sinónimo de establecer objetivo)" + desc: "Establece la ubicación del bloque de la cama de un equipo (sinónimo de establecer objetivo)" + setlobby: + name: "Establecer Lobby" + desc: "Establece la ubicación del Lobby del Juego" + setregion: + name: "Establece un punto de región" + desc: "Establece un punto de región para el Juego" + setspawn: + name: "Establece un Spawn de un equipo" + desc: "Establece el spawn del equipo dado" + setspawner: + name: "Establecer Spawner" + desc: "Establece una ubicación de spawner de un recurso específico" + start: + name: "Iniciar Juego" + desc: "Iniciar un Juego" + stop: + name: "Parar Juego" + desc: "Parar un Juego" + help: + name: "Mostrar ayuda" + desc: "Mostrar información sobre el plugin y sus comandos" + reload: + name: "Recargar" + desc: "Recargar las configuraciones y las traducciones" + setmainlobby: + name: "Establecer Lobby Principal" + desc: "Establece el Lobby Principal de un Juego (se necesita que mainlobby-enabled esté en true)" + list: + name: "Lista de Juegos" + desc: "Lista de todos los Juegos disponibles" + regionname: + name: "Establecer el nombre de la región" + desc: "Establece un nombre de región individual (en lugar del nombre del mundo)" + removeteam: + name: "Eliminar equipo" + desc: "Elimina un equipo del Juego (sólo si está en modo detenido)" + removegame: + name: "Eliminar Juego" + desc: "Eliminar un Juego y toda su configuración" + clearspawner: + name: "Liberar Spawners" + desc: "Elimina todos los Spawners del Juego. Guardado necesario." + gametime: + name: "Establecer el tiempo del Juego" + desc: "Establece el tiempo del Juego que se desea usar en el mundo de juego" + stats: + name: "Estadísticas" + desc: "Muestra tus estadísticas" + setbuilder: + name: "Establece el constructor del mapa" + desc: "Establece el constructor del mapa que se mostrará en el título cuando comience el Juego." + setgameblock: + name: "Establecer el bloque del Juego" + desc: "Establece el tipo de bloque de juego para este juego que debe utilizarse en la configuración de \"game-block\". Escriba 'DEFAULT' como tipo para usar el tipo de configuración de nuevo" + setautobalance: + name: "Establecer el autobalance" + desc: "¡Si 'global-autobalance' se establece en 'false', con este comando puede configurar el equipo-autobalance por Juego; ha encendido o apagado!" + setminplayers: + name: "Establecer el mínimo de jugadores" + desc: "Establece la cantidad de jugadores necesarios para iniciar el Juego" + kick: + name: "Expulsar jugador" + desc: "¡Expulsar un jugador del juego actual!" + addteamjoin: + name: "Añadir selección de equipo" + desc: "¡Marca una criatura que pueda ser usada para unirse a un equipo específico!" + addholo: + name: "Añadir ubicación del holograma" + desc: "¡Se agregará un holograma de estadísticas en la posición actual!" + removeholo: + name: "Quitar la ubicación del holograma" + desc: "Cuando el comando es ejecutado, el jugador debe dar click-derecho en el holograma para eliminarlo." + explain: "Realice un click izquierdo dentro de 10 segundos en el holograma que desea eliminar." + debugpaste: + name: "Paste debug data" + desc: "Esto enviará datos de errores a Hastebin y te proporcionara un link que puedes compartir con los desarrolladores" + itemspaste: + name: "Pegar tu inventario a un archivo" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/es_VE.yml b/common/src/main/resources/locale/es_VE.yml new file mode 100644 index 0000000..462125f --- /dev/null +++ b/common/src/main/resources/locale/es_VE.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Página $current$ de $max$" + currently: Actualmente +errors: + argumentslength: "¡El número de argumentos no coincide con la cantidad correcta!" + holodependencynotfound: "No se pudo encontrar $dependency$ para Estadística-Holograma" + packagenotfound: "¡No se pudo obtener el paquete $package$!" + classnotfound: "¡No se pudo obtener el paquete $package$ de la clase $class$!" + gameexists: "¡Ya existe un mapa con este nombre!" + gamenotfound: "¡El mapa '$game$' no se pudo encontrar!" + nofreegames: "No hay juegos libres disponibles." + gamenotfoundsimple: "¡No se pudo encontrar el Juego!" + playeramount: "¡El número máximo de jugadores no puede ser menor de 1 o mayor de 24!" + teamcolornotallowed: "El color introducido no está disponible" + teamnamelength: "¡El nombre de un equipo debe tener entre 2 y 20 carácteres!" + teamnotfound: "¡Equipo no encontrado!" + notingame: "¡Actualmente no estás en un Juego!" + bedtargeting: "¡Tienes que apuntar a o estar sobre un bloque que esté configurado en la sección 'game-block'!" + regionargument: "¡El argumento de localización tiene que ser 'loc1' o 'loc2'!" + spawnerargument: "¡El parámetro de recurso tiene que ser un recurso configurado válido!" + blockdownnotfound: "¡El bloque en el que estás parado no fue encontrado!" + gamenotrunning: "¡El juego no se está ejecutando!" + bungeenoserver: "¡Los servidores de BungeeCord no se han configurado correctamente! ¡Habla con el Administrador del Servidor!" + cantstartagain: "¡El Juego está en marcha! ¡No puedes volver a empezar el juego!" + startoutofwaiting: "¡El juego tiene que ser comenzado fuera del modo de espera!" + cantjoingame: "¡No puedes unirte a un Juego en marcha o parado!" + lobbyongameworld: "¡El Lobby no puede estar en el mundo del Juego!" + gamenotloaded: "¡No se pudo iniciar el juego!" + gameloaderror: "¡Ha ocurrido un error al cargar el juego '$game$'!" + regionnotfound: "¡El archivo de la región no existe!" + savesign: "¡No se pudo crear un nuevo archivo de configuración para los carteles!" + nogames: "¡No se han encontrado Juegos!" + notenoughress: "¡No tienes los recursos suficientes para comprar este objeto!" + teamnameinuse: "¡El nombre del equipo ya está en uso!" + minplayersmustnumber: "¡Mínimo de Jugadores debe ser un número!" + toolongregionname: "¡El nombre máximo de la región debe ser de 15 carácteres!" + notwhilegamerunning: "¡No puedes hacer esto mientras el Juego está en curso!" + notwhileingame: "¡No puedes hacer esto mientras estás en un Juego en curso!" + timeincorrect: "¡El tiempo tiene que ser un número (0 ... 23000), 'day' o 'night'!" + minplayersnumeric: "¡El parámetro de Jugadores-Mínimos debe ser un número!" + notinair: "¡No estás en el aire!" + teamfull: "¡El equipo está lleno, por favor, vuelva a abrir el menú de selección de equipo!" + novalidmaterial: "¡El tipo de bloque (material) no es correcto!" + wrongvalueonoff: "¡Parámetro incorrecto! Use true, on, 1 para activar - ¡Usa false, off, 0 para desactivar!" + playernotfound: "¡El jugador introducido no existe o no está conectado!" + notingameforkick: "¡Usted debe estar en un Juego para echar a un jugador!" + playernotingame: "¡El jugador introducido no está en este Juego!" + mustbeinlobbyworld: "Debes de estar en el mundo del Lobby del Juego" + addteamjoincancel: "¡La adición al equipo fue cancelada!" + entitynotcompatible: "¡Esta entidad no es compatible con la entrada de equipos!" +success: + gameadded: "¡Nuevo Juego '$game$' añadido con éxito!" + teamadded: "¡El equipo '$team$' ha sido añadido con éxito!" + joined: "¡Te has unido al Juego con éxito!" + left: "¡Usted salió con éxito del Juego!" + saved: "¡El Juego se guardó con éxito!" + bedset: "¡Has establecido el Bloque de Respawn del equipo '$team$'!" + regionset: "¡Ubicación de la región del juego $location$ para el Juego $game$ se estableció correctamente!" + spawnset: "¡La ubicación del Spawn para el Equipo $team$ se estableció con éxito!" + spawnerset: "¡La ubicación del Spawn de Recursos para $name$ se estableció con éxito!" + stopped: "¡Juego detenido con éxito!" + lobbyset: "¡El Lobby fue establecido con éxito!" + gameloaded: "¡Juego '$game$' cargado con éxito!" + reloadconfig: "¡Recarga exitosa!" + teamremoved: "¡Equipo eliminado con éxito!" + gameremoved: "¡Juego removido exitosamente!" + spawnercleared: "¡Todos los Spawners de Recursos han sido eliminados!" + gamerun: "¡Haz comenzado el juego, los jugadores pueden unirse!" + timeset: "¡El tiempo del Juego fue fijado con éxito!" + regionnameset: "¡El nombre de la Región se ha establecido correctamente!" + minplayersset: "¡Mínimo de Jugadores establecido correctamente!" + mainlobbyset: "¡Mainlobby fue puesto con éxito!" + gametimeset: "¡El Tiempo del Juego fue fijado con éxito!" + materialset: "¡El bloque de Respawneo del tipo (material) fue fijado con éxito!" + builderset: "¡El Constructor del mapa fue fijado con éxito y se verá en el Título!" + autobalanceseton: "¡Autobalance activado con éxito!" + autobalancesetoff: "¡Autobalance fue convertido con éxito &coff&a!" + selectteamjoinentity: "¡Ahora haga clic derecho sobre la entidad que desea utilizar como método de unión a un equipo!" + teamjoinadded: "La entidad fue marcada con éxito como selección de equipo, para el equipo $team$" + holoremoved: "¡Estadísticas-Holograma eliminado con éxito!" +gamecheck: + LOC_NOT_SET_ERROR: "¡Las localizaciones para la región no fueron fijadas correctamente!" + TEAM_SIZE_LOW_ERROR: "¡Tienes que establecer más equipos!" + NO_RES_SPAWNER_ERROR: "¡No has creado ningún Spawner de Recursos!" + NO_LOBBY_SET: "¡No pusiste un Lobby!" + TEAMS_WITHOUT_SPAWNS: "¡Hay equipo(s) sin una localización de Spawn!" + NO_ITEMSHOP_CATEGORIES: "¡No se encontraron categorías de artículos!" + NO_MAIN_LOBBY_SET: "No estableció un Lobby Principal aunque estableció 'tomainlobby' en true" + TEAM_NO_WRONG_BED: "¡Uno o más equipos no tiene una cama puesta!" + TEAM_NO_WRONG_TARGET: "¡Uno o más equipos no tienen un Bloque de Respawn!" +ingame: + team: "Equipo" + teams: "Equipos" + all: "Todo" + record: "¡&e$record$&a es el récord en este mapa!" + record-with-holders: '&aEl récord en este mapa es &e$record$&a y pertenece a: $holders$' + newrecord: '&aEquipo $team$&a estableció un nuevo récord: &6$record$' + record-nobeddestroy: "&c¡La partida no se guardará, porque ninguna cama fue destruida!" + teamwon: "¡Felicitaciones! ¡El Equipo $team$ ha ganado!" + draw: "¡El Juego termina con un empate!" + serverrestart: "¡El Servidor se reiniciará en $sec$ segundo(s)!" + gamestarting: "Comenzando Juego ..." + gamestarted: "¡El Juego '$game$' acaba de empezar!" + backtolobby: "¡Volviendo al Lobby en $sec$ segundo(s)!" + spectator: "Espectador" + spectate: "&aEspectar" + teamchest: "Cofre del Equipo" + noturteamchest: "¡Este cofre no es un cofre del equipo!" + protectionleft: "¡Invulnerable por &c$length$&f segundo(s)!" + protectionend: "¡Ahora eres &cVulnerable&f de nuevo!" + team-dead: "¡El Equipo $team$ fue destruido!" + no-friendlybreak: "&c¡No puedes romper el bloque debajo de un miembro del equipo!" + teamchestdestroy: "&c¡Un cofre del equipo ha sido destruido!" + title: + map-builder: "Construido por: $builder$" + win-title: "&6¡Felicitaciones!" + win-subtitle: "El Equipo $team$&6 ganó en &e$time$" + shop: + name: "Tienda de Objetos" + newshop: "Usar la tienda nueva" + oldshop: "Usar la tienda antigua" + fullstackpershift: "Múltiples stacks por shift click" + onestackpershift: "Un stack por shift click" + player: + left: "¡El jugador $player$ ha abandonado el Juego!" + died: "¡$player$ murió!" + killed: "¡$killer$ mató a $player$!" + kicked: "¡$player$ ha sido expulsado!" + waskicked: "¡Usted fue expulsado del Juego!" + blocks: + ownbeddestroy: "¡No puedes destruir tu propia cama!" + beddestroyed: "¡$player$ destruyó la cama del equipo $team$!" + specials: + rescue-platform: + left: "¡Tienes que esperar &c$time$&f segundo(s) hasta que puedas volver a utilizar la próxima plataforma de rescate!" + arrow-blocker: + start: "Estás protegido de ser golpeado por las flechas durante &c$time$&f segundo(s)." + end: "&cTu protección de flechas ha terminado" + left: "¡Tienes que esperar &c$time$&f segundo(s) hasta que puedas volver a utilizar el bloqueador de flechas!" + trap: + trapped: "¡&eAlguien ha activado un(a) &ctrap&e de tu equipo!" + protection-wall: + left: "¡Tienes que esperar &c$time$&f segundo(s) hasta volver a utilizar la siguiente pared de protección!" + not-usable-here: "¡No puedes usar la pared de protección aquí!" + warp-powder: + cancelled: "¡&cTu teletransporte fue cancelado!" + start: "Serás teletransportado en &c$time$&f segundo(s). ¡No te muevas!" + cancel: "&4Cancelar el teletransporte" + multiuse: "¡&cYa has iniciado un teletransporte!" + tntsheep: + no-target-found: "¡No se encontró ningún jugador objetivo!" + tracker: + no-target-found: "¡No se encontró ningún jugador objetivo!" + target-found: "$player$ está a $blocks$ bloque(s) lejos de ti." +lobby: + countdown: "¡El Juego comenzará en $sec$ segundo(s)!" + countdowncancel: "Se necesitan más jugadores. ¡La cuenta atrás fue cancelada!" + cancelcountdown: + not_enough_players: "Se necesitan más jugadores. ¡Cuenta regresiva cancelada!" + not_enough_teams: "Se necesitan más equipos. ¡Cuenta regresiva cancelada!" + cancelstart: + not_enough_players: "¡Se necesitan más jugadores para empezar el Juego!" + not_enough_teams: "¡Se necesitan más equipos para empezar el Juego!" + chooseteam: "Elige un equipo" + startgame: "Iniciar Juego" + reduce_countdown: "Reducir la cuenta atrás" + gamefull: "¡El Juego está lleno!" + gamefullpremium: "¡El Juego está lleno de jugadores con rango!" + teamjoined: "Te has unido al equipo $team$" + leavegame: "Salir del Juego" + playerjoin: "¡El jugador $player$ se unió al Juego!" + kickedbyvip: "¡Ha sido expulsado por un jugador Vip que se ha unido al juego lleno!" + moreplayersneeded: "$count$ jugadores más necesarios." + moreplayersneeded-one: "$count$ jugador más necesario." + moreteamsneeded: "¡Un mínimo de 2 jugadores en 2 diferentes equipos se necesita para iniciar el Juego!" +sign: + firstline: "&6[BedWars]" + players: "Jugadores" + gamestate: + stopped: "&4¡Detenido!" + waiting: "&aEsperando ..." + running: "&9¡Corriendo!" + full: "¡Lleno!" +stats: + header: "Estadísticas de BedWars" + kd: "K/D" + statsnotfound: "¡Las estadísticas de $player$ no se encontraron!" + name: "Nombre" + kills: "Bajas" + deaths: "Muertes" + wins: "Victorias" + loses: "Perdidas" + score: "Puntuaciones" + destroyedBeds: "Camas destruidas" + games: "Juegos" +commands: + addgame: + name: "Añadir Juego" + desc: "Añadir un nuevo Juego" + addteam: + name: "Añadir equipo" + desc: "Añadir un equipo a un Juego específico" + join: + name: "Unirse al Juego" + desc: "Unirse a un Juego específico" + leave: + name: "Salir del Juego" + desc: "Salir del Juego actual" + save: + name: "Guardar Juego" + desc: "Guardar un Juego (y mapa) en archivo(s) de config" + settarget: + name: "Poner un objetivo" + desc: "Establece la ubicación del bloque de destino de un equipo" + setbed: + name: "Establecer cama (sinónimo de establecer objetivo)" + desc: "Establece la ubicación del bloque de la cama de un equipo (sinónimo de establecer objetivo)" + setlobby: + name: "Establecer Lobby" + desc: "Establece la ubicación del Lobby del Juego" + setregion: + name: "Establece un punto de región" + desc: "Establece un punto de región para el Juego" + setspawn: + name: "Establece un Spawn de un equipo" + desc: "Establece el spawn del equipo dado" + setspawner: + name: "Establecer Spawner" + desc: "Establece una ubicación de spawner de un recurso específico" + start: + name: "Iniciar Juego" + desc: "Iniciar un Juego" + stop: + name: "Parar Juego" + desc: "Parar un Juego" + help: + name: "Mostrar ayuda" + desc: "Mostrar información sobre el plugin y sus comandos" + reload: + name: "Recargar" + desc: "Recargar las configuraciones y las traducciones" + setmainlobby: + name: "Establecer Lobby Principal" + desc: "Establece el Lobby Principal de un Juego (se necesita que mainlobby-enabled esté en true)" + list: + name: "Lista de Juegos" + desc: "Lista de todos los Juegos disponibles" + regionname: + name: "Establecer el nombre de la región" + desc: "Establece un nombre de región individual (en lugar del nombre del mundo)" + removeteam: + name: "Eliminar equipo" + desc: "Elimina un equipo del Juego (sólo si está en modo detenido)" + removegame: + name: "Eliminar Juego" + desc: "Eliminar un Juego y toda su configuración" + clearspawner: + name: "Liberar Spawners" + desc: "Elimina todos los Spawners del Juego. Guardado necesario." + gametime: + name: "Establecer el tiempo del Juego" + desc: "Establece el tiempo del Juego que se desea usar en el mundo de juego" + stats: + name: "Estadísticas" + desc: "Muestra tus estadísticas" + setbuilder: + name: "Establece el constructor del mapa" + desc: "Establece el constructor del mapa que se mostrará en el título cuando comience el Juego." + setgameblock: + name: "Establecer el bloque del Juego" + desc: "Establece el tipo de bloque de juego para este juego que debe utilizarse en la configuración de \"game-block\". Escriba 'DEFAULT' como tipo para usar el tipo de configuración de nuevo" + setautobalance: + name: "Establecer el autobalance" + desc: "¡Si 'global-autobalance' se establece en 'false', con este comando puede configurar el equipo-autobalance por Juego; ha encendido o apagado!" + setminplayers: + name: "Establecer el mínimo de jugadores" + desc: "Establece la cantidad de jugadores necesarios para iniciar el Juego" + kick: + name: "Expulsar jugador" + desc: "¡Expulsar un jugador del juego actual!" + addteamjoin: + name: "Añadir selección de equipo" + desc: "¡Marca una criatura que pueda ser usada para unirse a un equipo específico!" + addholo: + name: "Añadir ubicación del holograma" + desc: "¡Se agregará un holograma de estadísticas en la posición actual!" + removeholo: + name: "Quitar la ubicación del holograma" + desc: "Cuando el comando es ejecutado, el jugador debe dar click-derecho en el holograma para eliminarlo." + explain: "Realice un click izquierdo dentro de 10 segundos en el holograma que desea eliminar." + debugpaste: + name: "Paste debug data" + desc: "Esto enviará datos de errores a Hastebin y te proporcionara un link que puedes compartir con los desarrolladores" + itemspaste: + name: "Pegar tu inventario a un archivo" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/et_EE.yml b/common/src/main/resources/locale/et_EE.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/et_EE.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/eu_ES.yml b/common/src/main/resources/locale/eu_ES.yml new file mode 100644 index 0000000..0457d3d --- /dev/null +++ b/common/src/main/resources/locale/eu_ES.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Jokua ez da aurkitu!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Taldea ez da aurkitu!" + notingame: "Ez zaude joku batean!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Ezin izan da jokua hasi!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Jokoa ongi gelditua!" + lobbyset: "Lobbya ongi ezarri da!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Ongi birkargatuta!" + teamremoved: "Taldea ongi ezabatu da!" + gameremoved: "Jokua ongi ezabatu da!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Jokuaren denbora ongi ezarri da!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Taldeak" + all: "Denak" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Jokoa hasten ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Ikuslea" + spectate: "&aSpectate" + teamchest: "Taldearen kutxa" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Zorionak!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemdenda" + newshop: "Erabili denda berria" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ hil egin da!" + killed: "$killer$-ek $player$ hil du!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "Ezin duzu zure ohea suntsitu!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Hasi jokoa" + reduce_countdown: "Reduce countdown" + gamefull: "Jokoa beteta dago!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Irten jokotik" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Geldituta!" + waiting: "&aItsaroten ..." + running: "&9Running!" + full: "Beterik!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Izena" + kills: "Hilketak" + deaths: "Heriotzak" + wins: "Irabaziak" + loses: "Galduak" + score: "Scores" + destroyedBeds: "Suntsitutako Oheak" + games: "Jokoak" +commands: + addgame: + name: "Gehitu Jokoa" + desc: "Adds a new game" + addteam: + name: "Gehitu Taldea" + desc: "Adds a team to a specific game" + join: + name: "Sartu Jokora" + desc: "Joins a specific game" + leave: + name: "Jokotik Irten" + desc: "Leave the current game" + save: + name: "Jokoa Gorde" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Ezarri Lobbya" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Hasi jokoa" + desc: "Starts a game" + stop: + name: "Gelditu Jokoa" + desc: "Stops a game" + help: + name: "Erakutsi Laguntza" + desc: "Display information about the plugin and its commands" + reload: + name: "Birkargatu" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Ezabatu taldea" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Ezarri jokoaren denbora" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Estatistikak" + desc: "Zure estatistikak erakusten ditu" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Ezarri gutxienezko jokalariak" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kanporatu jokalaria" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Ezabatu hologramaren kokalekua" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/fa_IR.yml b/common/src/main/resources/locale/fa_IR.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/fa_IR.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/fi_FI.yml b/common/src/main/resources/locale/fi_FI.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/fi_FI.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/fil_PH.yml b/common/src/main/resources/locale/fil_PH.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/fil_PH.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/fo_FO.yml b/common/src/main/resources/locale/fo_FO.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/fo_FO.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/fr_CA.yml b/common/src/main/resources/locale/fr_CA.yml new file mode 100644 index 0000000..ff2e12c --- /dev/null +++ b/common/src/main/resources/locale/fr_CA.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ sur $max$" + currently: Actuellement +errors: + argumentslength: "Le nombre d'arguments ne correspond pas au nombre nécessaire !" + holodependencynotfound: "Impossible de trouver $dependency$ pour l'hologramme des statistiques" + packagenotfound: "Impossible de récupérer le package $package$ !" + classnotfound: "Impossible de récupérer la classe $class$ du package $package$ !" + gameexists: "Une partie de ce nom existe déjà !" + gamenotfound: "La partie '$game$' est introuvable !" + nofreegames: "Aucune partie disponible." + gamenotfoundsimple: "Partie introuvale !" + playeramount: " Le nombre de joueurs ne peut pas être inférieur à 1 ou supérieur à 24 !" + teamcolornotallowed: "La couleur d'équipe attribué n'est pas autorisée" + teamnamelength: "Le nom d'équipe doit contenir entre 2 et 200 caractères !" + teamnotfound: "Equipe introuvable !" + notingame: "Vous n'êtes pas en jeu actuellement !" + bedtargeting: "Vous devez viser ou vous tenir sur un block du type de 'game-block' configuré !" + regionargument: "Votre argument de position doit être 'loc1' ou 'loc2' !" + spawnerargument: "Le paramètre de ressources doit être configuré et valide!" + blockdownnotfound: "Le bloc sur lequel vous vous tenez n'a pas été trouvé !" + gamenotrunning: "La partie n'est pas lancée !" + bungeenoserver: "Le serveur Bungeecord n'a pas été configuré correctement ! Contactez un l'administrateur du serveur !" + cantstartagain: "La partie est déjà lancée ! Vous ne pouvez pas démarrer une partie lancée !" + startoutofwaiting: "La partie doit être lancée hors du mode d'attente !" + cantjoingame: "Vous ne pouvez pas rejoindre une partie lancée ou arrêtée !" + lobbyongameworld: "Le Lobby ne peut pas être sur le monde de jeu !" + gamenotloaded: "Impossible de démarrer la partie !" + gameloaderror: "Le chargement de la partie '$game$' renvoie une erreur!" + regionnotfound: "Le fichier de region n'existe pas !" + savesign: "Impossible de créer une nouvelle configuration de panneau !" + nogames: "Aucune partie trouvée !" + notenoughress: "Vous n'avez pas assez de ressources pour acheter cet item !" + teamnameinuse: "Ce nom d'équipe est déjà utilisé !" + minplayersmustnumber: "Le nombre minimal de joueurs doit être un nombre !" + toolongregionname: "La longueur maximal des noms de régions est 15 caractères !" + notwhilegamerunning: "Impossible de faire cela quand la partie est en cours !" + notwhileingame: "Vous ne pouvez pas faire ça quand vous êtes dans une partie est en cours !" + timeincorrect: "Le temps doit être un nombre (0 ... 23000),'day' ou 'night' !" + minplayersnumeric: "Le paramètre de joueurs minimals doit être numérique!" + notinair: "Vous n'êtes pas en l'air!" + teamfull: "L'équipe est complète, ouvrez à nouveau le menu de sélection d'équipe !" + novalidmaterial: "Le type de bloc (material) est incorrect !" + wrongvalueonoff: "Paramètre incorrect ! Utilisez true, on, 1 pour allumer - utilisez false, off, 0 pour désactiver !" + playernotfound: "Ce joueur n'a pas été trouvé ou n'est pas en ligne!" + notingameforkick: "Vous devez être dans une partie pour éjecter un joueur !" + playernotingame: "Le joueur n'est pas dans cette partie!" + mustbeinlobbyworld: "You must be in the lobby world of the game!" + addteamjoincancel: "L'ajout d'équipe a été annulé!" + entitynotcompatible: "Cette entité n'est pas compatible avec l'équipe à rejoindre!" +success: + gameadded: "Nouvelle partie '$game$' ajoutée avec succès !" + teamadded: "Equipe '$team$' ajoutée avec succès !" + joined: "Vous avez rejoins la partie avec succès !" + left: "Vous avez quitté la partie !" + saved: "Partie sauvegardé avec succès !" + bedset: "Vous avez configuré avec succès le bloc de respawn de l'équie $team$ !" + regionset: "Position de la région de jeu $location$ configuré avec succès pour la partie $game$ !" + spawnset: "Position du spawn de l'équipe $team$ configuré avec succès !" + spawnerset: "Position du spawn de ressouces de $name$ configuré avec succès !" + stopped: "Partie arrêtée !" + lobbyset: "Le Lobby a été configuré avec succès !" + gameloaded: "Partie '$game$' chargée avec succès !" + reloadconfig: "Rechargement términé !" + teamremoved: "Equipe supprimée avec succès !" + gameremoved: "Partie supprimée avec succès !" + spawnercleared: "Tous les spawners de ressources ont été supprimés !" + gamerun: "Vous avez démarré la partie, les joueurs peuvent maintenant rejoindre !" + timeset: "Temps de jeu configuré avec succès !" + regionnameset: "Nom de région configuré avec succès !" + minplayersset: "Joueurs minimum configuré avec succès !" + mainlobbyset: "Le Lobby principal a été configuré avec succès !" + gametimeset: "Temps de jeu configuré avec succès !" + materialset: "Le type de bloc (material) de respawn a été configuré avec succès !" + builderset: "Le constructeur de la map a été configuré avec succès et va être affiché en titre !" + autobalanceseton: "L'Autobalance a été activé avec succès!" + autobalancesetoff: "L'Autobalance à bien été mis en &coff& &a!" + selectteamjoinentity: "Maintenant, faites un clic droit sur l'entité que vous souhaitez utiliser comme équipe rejoindre!" + teamjoinadded: "L'entité a été sélectionnée avec succès pour l'équipe $team$" + holoremoved: "L'Hologramme-Statistique à bien été supprimé avec succès!" +gamecheck: + LOC_NOT_SET_ERROR: "La position pour la région n'a pas été configurée correctement !" + TEAM_SIZE_LOW_ERROR: "Vous devez configurer plus d'équipe !" + NO_RES_SPAWNER_ERROR: "Vous n'avez configuré aucun spawner de ressource !" + NO_LOBBY_SET: "Vous n'avez pas configuré de lobby !" + TEAMS_WITHOUT_SPAWNS: "Il y a une/des équipe(s) sans position de spawn !" + NO_ITEMSHOP_CATEGORIES: "Aucune catégorie de boutique trouvée !" + NO_MAIN_LOBBY_SET: "Vous n'avez pas configuré de Lobby principal bien que vous ayez configuré 'tomainlobby' sur true !" + TEAM_NO_WRONG_BED: "Une ou plusieurs équipes n'ont pas de lit configuré !" + TEAM_NO_WRONG_TARGET: "Une ou plusieurs équipes n'ont pas de bloc de respawn configuré !" +ingame: + team: "Equipe" + teams: "Equipes" + all: "Tous" + record: "&e$record$&a est le record sur cette map !" + record-with-holders: '&aLe record sur cette map est &e$record$&a et est détenu par : $holders$' + newrecord: '&aL''équipe $team$&a a défini un nouveau record : &6$record$' + record-nobeddestroy: "&cLe record ne sera pas sauvegardé, car aucun lit n'a été détruit !" + teamwon: "Félicitations ! L'équipe $team$ a gagné !" + draw: "La partie se termine sur un match nul !" + serverrestart: "Le serveur redémarre dans $sec$ seconde(s) !" + gamestarting: "La partie commence ..." + gamestarted: "La partie '$game$' viens de commencer !" + backtolobby: "Retour au lobby dans $sec$ seconde(s)!" + spectator: "Spectateur" + spectate: "&aRegarder" + teamchest: "Coffre de l'équipe" + noturteamchest: "Ce coffre n'est pas un coffre de votre équipe !" + protectionleft: "Vous êtes invulnérable pendant &c$length$&f seconde(s) !" + protectionend: "Vous êtes maintenant &cvulnerable&f à nouveau !" + team-dead: "L'équipe $team$ a été détruite !" + no-friendlybreak: "&cImpossible de casser des blocs sous vos coéquipiers !" + teamchestdestroy: "&cUne de vos équipe(s) a été détruite!" + title: + map-builder: "Construit par $builder$" + win-title: "&6Félicitations!" + win-subtitle: "&6La team $team$&6 a gagné en &e$time$" + shop: + name: "Boutique" + newshop: "Utilisez la nouvelle boutique" + oldshop: "Utilisez l'ancienne boutique" + fullstackpershift: "Multipliez les stacks avec MAJ clic" + onestackpershift: "Un stack par MAJ clic" + player: + left: "Le joueur $player$ a quitté la partie !" + died: "$player$ est mort !" + killed: "$killer$ a tué $player$!" + kicked: "$player$ à été kick de la partie!" + waskicked: "Tu à été kick de la partie !" + blocks: + ownbeddestroy: "Vous ne pouvez pas détruire votre propre lit !" + beddestroyed: "$player$ a détruit le lit de l'équipe $team$ !" + specials: + rescue-platform: + left: "Il reste &c$time$&f seconde(s) avant que vous puissiez utiliser la prochaine plateforme de secours !" + arrow-blocker: + start: "Vous êtes protégé d'être frappé par des flèches pour &c$time$&f seconde(s)." + end: "&cVotre protection contre les flèches est terminée" + left: "Il reste &c$time$ &f seconde(s) restantes jusqu'à ce que vous pouvez utiliser le bloqueur de flèches suivant!" + trap: + trapped: "&eQuelqu'un est allé dans un &cpiège&e de votre équipe !" + protection-wall: + left: "Il reste &c$time$&f avant que vous puissiez utiliser le prochain mur de protection !" + not-usable-here: "Vous ne pouvez pas utiliser le mur de protection ici !" + warp-powder: + cancelled: "&cVotre téléportation a été annulé !" + start: "Vous allez être téléporté dans &c$time$&f seconde(s). Ne bougez pas !" + cancel: "&4Annuler la téléportation" + multiuse: "&cTu a déjà démarrer une téléportation!" + tntsheep: + no-target-found: "Aucun joueur cible trouvé !" + tracker: + no-target-found: "Aucun joueur cible trouvé !" + target-found: "$player$ est à $blocks$ bloc(s) de toi." +lobby: + countdown: "La partie commence dans $sec$ seconde(s) Game will start in $sec$ second(s)!" + countdowncancel: "Plus de joueurs sont nécessaires. Compte à rebours annulé !" + cancelcountdown: + not_enough_players: "Plus de joueurs sont nécessaires. Compte à rebours annulé !" + not_enough_teams: "Plus d'équipes nécessaires. Compte à rebours annulé!" + cancelstart: + not_enough_players: "Plus de joueurs sont nécessaires pour commencer la partie !" + not_enough_teams: "Plus d'équipes sont nécessaires pour commencer le jeu!" + chooseteam: "Choisir une équipe" + startgame: "Démarrer partie" + reduce_countdown: "Réduire le compte à rebours" + gamefull: "La partie est complète !" + gamefullpremium: "La partie est déjà pleine de joueurs VIP !" + teamjoined: "Vous avez rejoins l'équipe $team$ avec succès" + leavegame: "Quitter la partie" + playerjoin: "Le joueur $player$ a rejoint la partie !" + kickedbyvip: "Vous avez été éjecté de la partie par un VIP qui a rejoint la partie complète !" + moreplayersneeded: "$count$ joueurs sont nécessaires." + moreplayersneeded-one: "$count$ joueur est nécessaire." + moreteamsneeded: "Un minimum de deux joueurs dans deux équipes différentes est nécessaire pour commencer le jeu!" +sign: + firstline: "&6{Bedwars}" + players: "Joueurs" + gamestate: + stopped: "&4Arrêté !" + waiting: "&aEn Attente ..." + running: "&9En cours !" + full: "Complet !" +stats: + header: "Statistiques Bedwars" + kd: "V/M" + statsnotfound: "Statistiques de $player$ introuvable !" + name: "Nom" + kills: "Victimes" + deaths: "Morts" + wins: "Victoires" + loses: "Défaites" + score: "Scores" + destroyedBeds: "Lits Détruits" + games: "Parties" +commands: + addgame: + name: "Ajouter Partie" + desc: "Ajoute une nouvelle partie" + addteam: + name: "Ajouter Equipe" + desc: "Ajoute une équipe à une partie spécifique" + join: + name: "Rejoindre Partie" + desc: "Rejoindre une partie spécifique" + leave: + name: "Quitter Partie" + desc: "Quitte la partie actuelle" + save: + name: "Sauvegarder Partie" + desc: "Sauvegarde une partie (et map) dans la configuration" + settarget: + name: "Définir cible" + desc: "Définit la position du bloc cible d'une équipe" + setbed: + name: "Définir lit (synonyme de settarget)" + desc: "Définit la position du bloc lit d'une équipe (Synonyme de settarget)" + setlobby: + name: "Définir Lobby" + desc: "Définit la position du lobby de jeu" + setregion: + name: "Définit un point de région " + desc: "Définit un point de région pour la partie" + setspawn: + name: "Définit un spawn d'équipe" + desc: "Définit le spawn de l'équipe donné" + setspawner: + name: "Définir spawner" + desc: "Définit la position d'un spawner pour une ressources specifique" + start: + name: "Démarrer partie" + desc: "Démarre une partie" + stop: + name: "Arrêter partie" + desc: "Arrête une partie" + help: + name: "Montrer aide" + desc: "Afiiche des information sur le plugin et ses commandes" + reload: + name: "Recharger" + desc: "Recharge les configurations et traductions" + setmainlobby: + name: "Définir lobby principal" + desc: "Définit le lobby principal d'une partie (nécessaire quand mainlobby-enabled est définit sur true)" + list: + name: "Lister parties" + desc: "Liste toutes les parties disponibles" + regionname: + name: "Définir nom de région" + desc: "Définit un nom de région individuel (au lieu du nom de monde)" + removeteam: + name: "Supprimer équipe" + desc: "Supprime une équipe de la partie (seulement en mode arrêté)" + removegame: + name: "Supprimer partie" + desc: "Supprime une partie et toutes ses configurations" + clearspawner: + name: "Effacer spawners" + desc: "Supprime tous les spawners de la partie. Sauvegarde nécessaire." + gametime: + name: "Définir temps de jeu" + desc: "Définit le temps de jeu qui doit être utilisé dans le monde de jeu" + stats: + name: "Statistiques" + desc: "Montre vos statistiques" + setbuilder: + name: "Définir constructeur de map" + desc: "Définit le constructeur de la map qui sera affiché en titre quand la partie commence." + setgameblock: + name: "Définir bloc de jeu" + desc: "Défini le type de bloc qui doit être utilisé pour cette partie au lieu de la configuration 'game-block'. Ecrivez 'DEFAULT' comme type pour utiliser la configuration de nouveau" + setautobalance: + name: "Définir un Autobalance" + desc: "Si 'global-autobalance' est réglé sur 'false', avec cette commande, vous pouvez définir auto-équilibrage d'équipe par jeu sur ou hors tension!" + setminplayers: + name: "Mettre le nombre de joueurs minimum" + desc: "Définit la quantité de joueurs nécessaire pour démarrer le jeu" + kick: + name: "Exclure des joueurs" + desc: "Exclure un ou des joueurs d'une partie!" + addteamjoin: + name: "Ajouter une sélection de team" + desc: "Marquez une créature qui peut être utilisée pour rejoindre une équipe spécifique!" + addholo: + name: "Ajouter une position holographique" + desc: "Une statistique d'hologramme sera ajoutée à la position actuelle!" + removeholo: + name: "Supprimer une position holographique" + desc: "Une statistique d'hologramme sera ajoutée à la position actuelle." + explain: "Effectue un clique gauche dans les 10 secondes sur l'hologramme que vous souhaitez supprimer." + debugpaste: + name: "Coller les données de débogage" + desc: "Cette option enverra des informations de debug à Hastebin et vous donnera un lien que vous pourrez partager avec les devellopeurs" + itemspaste: + name: "Collez votre inventaire dans un fichier" + desc: "Cela renverra un lien où vous pouvez voir votre inventaire actuel sérialisé comme exemple pour votre shop.yml" diff --git a/common/src/main/resources/locale/fr_FR.yml b/common/src/main/resources/locale/fr_FR.yml new file mode 100644 index 0000000..bef075e --- /dev/null +++ b/common/src/main/resources/locale/fr_FR.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ sur $max$" + currently: Actuellement +errors: + argumentslength: "Le nombre d'arguments ne correspond pas au nombre nécessaire !" + holodependencynotfound: "Impossible de trouver $dependency$ pour l'hologramme des statistiques" + packagenotfound: "Impossible de récupérer le package $package$ !" + classnotfound: "Impossible de récupérer la classe $class$ du package $package$ !" + gameexists: "Une partie portant ce nom existe déjà!" + gamenotfound: "La partie '$game$' est introuvable !" + nofreegames: "Aucune partie disponible." + gamenotfoundsimple: "Partie introuvale !" + playeramount: " Le nombre de joueurs ne peut pas être inférieur à 1 ou supérieur à 24 !" + teamcolornotallowed: "La couleur d'équipe attribué n'est pas autorisée" + teamnamelength: "Le nom d'équipe doit contenir entre 2 et 200 caractères !" + teamnotfound: "Equipe introuvable !" + notingame: "Vous n'êtes pas en jeu actuellement !" + bedtargeting: "Vous devez viser ou vous tenir sur un block du type de 'game-block' configuré !" + regionargument: "Votre argument de position doit être 'loc1' ou 'loc2' !" + spawnerargument: "Le paramètre de ressources doit être configuré et valide!" + blockdownnotfound: "Le bloc sur lequel vous vous tenez n'a pas été trouvé !" + gamenotrunning: "La partie n'est pas lancée !" + bungeenoserver: "Le serveur Bungeecord n'a pas été configuré correctement ! Contactez un l'administrateur du serveur !" + cantstartagain: "La partie est déjà lancée ! Vous ne pouvez pas démarrer une partie lancée !" + startoutofwaiting: "La partie doit être lancée hors du mode d'attente !" + cantjoingame: "Vous ne pouvez pas rejoindre une partie lancée ou arrêtée !" + lobbyongameworld: "Le Lobby ne peut pas être sur le monde de jeu !" + gamenotloaded: "Impossible de démarrer la partie !" + gameloaderror: "Le chargement de la partie '$game$' renvoie une erreur!" + regionnotfound: "Le fichier de region n'existe pas !" + savesign: "Impossible de créer une nouvelle configuration de panneau !" + nogames: "Aucune partie trouvée !" + notenoughress: "Vous n'avez pas assez de ressources pour acheter cet item !" + teamnameinuse: "Ce nom d'équipe est déjà utilisé !" + minplayersmustnumber: "Le nombre minimal de joueurs doit être un nombre !" + toolongregionname: "La longueur maximal des noms de régions est 15 caractères !" + notwhilegamerunning: "Impossible de faire cela quand la partie est en cours !" + notwhileingame: "Vous ne pouvez pas faire ça quand vous êtes dans une partie est en cours !" + timeincorrect: "Le temps doit être un nombre (0 ... 23000),'day' ou 'night' !" + minplayersnumeric: "Le paramètre de joueurs minimals doit être numérique!" + notinair: "Vous n'êtes pas en l'air!" + teamfull: "L'équipe est complète, ouvrez à nouveau le menu de sélection d'équipe !" + novalidmaterial: "Le type de bloc (material) est incorrect !" + wrongvalueonoff: "Paramètre incorrect ! Utilisez true, on, 1 pour allumer - utilisez false, off, 0 pour désactiver !" + playernotfound: "Ce joueur n'a pas été trouvé ou n'est pas en ligne!" + notingameforkick: "Vous devez être dans une partie pour éjecter un joueur !" + playernotingame: "Le joueur n'est pas dans cette partie!" + mustbeinlobbyworld: "You must be in the lobby world of the game!" + addteamjoincancel: "L'ajout d'équipe a été annulé!" + entitynotcompatible: "Cette entité n'est pas compatible avec l'équipe à rejoindre!" +success: + gameadded: "Nouvelle partie '$game$' ajoutée avec succès !" + teamadded: "Equipe '$team$' ajoutée avec succès !" + joined: "Vous avez rejoins la partie avec succès !" + left: "Vous avez quitté la partie !" + saved: "Partie sauvegardé avec succès !" + bedset: "Vous avez configuré avec succès le bloc de respawn de l'équie $team$ !" + regionset: "Position de la région de jeu $location$ configuré avec succès pour la partie $game$ !" + spawnset: "Position du spawn de l'équipe $team$ configuré avec succès !" + spawnerset: "Position du spawn de ressouces de $name$ configuré avec succès !" + stopped: "Partie arrêtée !" + lobbyset: "Le Lobby a été configuré avec succès !" + gameloaded: "Partie '$game$' chargée avec succès !" + reloadconfig: "Rechargement términé !" + teamremoved: "Equipe supprimée avec succès !" + gameremoved: "Partie supprimée avec succès !" + spawnercleared: "Tous les spawners de ressources ont été supprimés !" + gamerun: "Vous avez démarré la partie, les joueurs peuvent maintenant rejoindre !" + timeset: "Temps de jeu configuré avec succès !" + regionnameset: "Nom de région configuré avec succès !" + minplayersset: "Joueurs minimum configuré avec succès !" + mainlobbyset: "Le Lobby principal a été configuré avec succès !" + gametimeset: "Temps de jeu configuré avec succès !" + materialset: "Le type de bloc (material) de respawn a été configuré avec succès !" + builderset: "Le constructeur de la map a été configuré avec succès et va être affiché en titre !" + autobalanceseton: "L'Autobalance a été activé avec succès!" + autobalancesetoff: "L'Autobalance à bien été mis en &coff& &a!" + selectteamjoinentity: "Maintenant, faites un clic droit sur l'entité que vous souhaitez utiliser comme équipe rejoindre!" + teamjoinadded: "L'entité a été sélectionnée avec succès pour l'équipe $team$" + holoremoved: "L'Hologramme-Statistique à bien été supprimé avec succès!" +gamecheck: + LOC_NOT_SET_ERROR: "La position pour la région n'a pas été configurée correctement !" + TEAM_SIZE_LOW_ERROR: "Vous devez configurer plus d'équipe !" + NO_RES_SPAWNER_ERROR: "Vous n'avez configuré aucun spawner de ressource !" + NO_LOBBY_SET: "Vous n'avez pas configuré de lobby !" + TEAMS_WITHOUT_SPAWNS: "Il y a une/des équipe(s) sans position de spawn !" + NO_ITEMSHOP_CATEGORIES: "Aucune catégorie de boutique trouvée !" + NO_MAIN_LOBBY_SET: "Vous n'avez pas configuré de Lobby principal bien que vous ayez configuré 'tomainlobby' sur true !" + TEAM_NO_WRONG_BED: "Une ou plusieurs équipes n'ont pas de lit configuré !" + TEAM_NO_WRONG_TARGET: "Une ou plusieurs équipes n'ont pas de bloc de respawn configuré !" +ingame: + team: "Equipe" + teams: "Equipes" + all: "Tous" + record: "&e$record$&a est le record sur cette map !" + record-with-holders: '&aLe record sur cette map est &e$record$&a et est détenu par : $holders$' + newrecord: '&aL''équipe $team$&a a défini un nouveau record : &6$record$' + record-nobeddestroy: "&cLe record ne sera pas sauvegardé, car aucun lit n'a été détruit !" + teamwon: "Félicitations ! L'équipe $team$ a gagné !" + draw: "La partie se termine sur un match nul !" + serverrestart: "Le serveur redémarre dans $sec$ seconde(s) !" + gamestarting: "La partie commence ..." + gamestarted: "La partie '$game$' viens de commencer !" + backtolobby: "Retour au lobby dans $sec$ seconde(s)!" + spectator: "Spectateur" + spectate: "&aRegarder" + teamchest: "Coffre de l'équipe" + noturteamchest: "Ce coffre n'est pas un coffre de votre équipe !" + protectionleft: "Vous êtes invulnérable pendant &c$length$&f seconde(s) !" + protectionend: "Vous êtes maintenant &cvulnerable&f à nouveau !" + team-dead: "L'équipe $team$ a été détruite !" + no-friendlybreak: "&cImpossible de casser des blocs sous vos coéquipiers !" + teamchestdestroy: "&cUne de vos équipe(s) a été détruite!" + title: + map-builder: "Construit par $builder$" + win-title: "&6Félicitations!" + win-subtitle: "&6La team $team$&6 a gagné en &e$time$" + shop: + name: "Boutique" + newshop: "Utilisez la nouvelle boutique" + oldshop: "Utilisez l'ancienne boutique" + fullstackpershift: "Multipliez les stacks avec MAJ clic" + onestackpershift: "Un stack par MAJ clic" + player: + left: "Le joueur $player$ a quitté la partie !" + died: "$player$ est mort !" + killed: "$killer$ a tué $player$!" + kicked: "$player$ à été kick de la partie!" + waskicked: "Tu à été kick de la partie !" + blocks: + ownbeddestroy: "Vous ne pouvez pas détruire votre propre lit !" + beddestroyed: "$player$ a détruit le lit de l'équipe $team$ !" + specials: + rescue-platform: + left: "Il reste &c$time$&f seconde(s) avant que vous puissiez utiliser la prochaine plateforme de secours !" + arrow-blocker: + start: "Vous êtes protégé d'être frappé par des flèches pour &c$time$&f seconde(s)." + end: "&cVotre protection contre les flèches est terminée" + left: "Il reste &c$time$ &f seconde(s) restantes jusqu'à ce que vous pouvez utiliser le bloqueur de flèches suivant!" + trap: + trapped: "&eQuelqu'un est allé dans un &cpiège&e de votre équipe !" + protection-wall: + left: "Il reste &c$time$&f avant que vous puissiez utiliser le prochain mur de protection !" + not-usable-here: "Vous ne pouvez pas utiliser le mur de protection ici !" + warp-powder: + cancelled: "&cVotre téléportation a été annulé !" + start: "Vous allez être téléporté dans &c$time$&f seconde(s). Ne bougez pas !" + cancel: "&4Annuler la téléportation" + multiuse: "&cTu a déjà démarrer une téléportation!" + tntsheep: + no-target-found: "Aucun joueur cible n'a été trouvé!" + tracker: + no-target-found: "Aucun joueur cible n'a été trouvé!" + target-found: "$player$ est à $blocks$ bloc(s) de toi." +lobby: + countdown: "La partie commence dans $sec$ seconde(s)!" + countdowncancel: "Plus de joueurs sont nécessaires. Compte à rebours annulé !" + cancelcountdown: + not_enough_players: "Plus de joueurs sont nécessaires. Compte à rebours annulé !" + not_enough_teams: "Plus d'équipes nécessaires. Compte à rebours annulé!" + cancelstart: + not_enough_players: "Plus de joueurs sont nécessaires pour commencer la partie !" + not_enough_teams: "Plus d'équipes sont nécessaires pour commencer le jeu!" + chooseteam: "Choisir une équipe" + startgame: "Démarrer partie" + reduce_countdown: "Réduire le compte à rebours" + gamefull: "La partie est complète !" + gamefullpremium: "La partie est déjà pleine de joueurs VIP !" + teamjoined: "Vous avez rejoins l'équipe $team$ avec succès" + leavegame: "Quitter la partie" + playerjoin: "Le joueur $player$ a rejoint la partie !" + kickedbyvip: "Vous avez été éjecté de la partie par un VIP qui a rejoint la partie complète !" + moreplayersneeded: "$count$ joueurs sont nécessaires." + moreplayersneeded-one: "$count$ joueur est nécessaire." + moreteamsneeded: "Un minimum de deux joueurs dans deux équipes différentes est nécessaire pour commencer le jeu!" +sign: + firstline: "&6{Bedwars}" + players: "Joueurs" + gamestate: + stopped: "&4Arrêté !" + waiting: "&aEn Attente ..." + running: "&9En cours !" + full: "Complet !" +stats: + header: "Statistiques Bedwars" + kd: "V/M" + statsnotfound: "Statistiques de $player$ introuvable !" + name: "Nom" + kills: "Victimes" + deaths: "Morts" + wins: "Victoires" + loses: "Défaites" + score: "Scores" + destroyedBeds: "Lits Détruits" + games: "Parties" +commands: + addgame: + name: "Ajouter Partie" + desc: "Ajoute une nouvelle partie" + addteam: + name: "Ajouter Equipe" + desc: "Ajoute une équipe à une partie spécifique" + join: + name: "Rejoindre Partie" + desc: "Rejoindre une partie spécifique" + leave: + name: "Quitter Partie" + desc: "Quitte la partie actuelle" + save: + name: "Sauvegarder Partie" + desc: "Sauvegarde une partie (et map) dans la configuration" + settarget: + name: "Définir cible" + desc: "Définit la position du bloc cible d'une équipe" + setbed: + name: "Définir lit (synonyme de settarget)" + desc: "Définit la position du bloc lit d'une équipe (Synonyme de settarget)" + setlobby: + name: "Définir Lobby" + desc: "Définit la position du lobby de jeu" + setregion: + name: "Définit un point de région" + desc: "Définit un point de région pour la partie" + setspawn: + name: "Définit un spawn d'équipe" + desc: "Définit le spawn de l'équipe donné" + setspawner: + name: "Définir spawner" + desc: "Définit la position d'un spawner pour une ressources specifique" + start: + name: "Démarrer partie" + desc: "Démarre une partie" + stop: + name: "Arrêter partie" + desc: "Arrête une partie" + help: + name: "Montrer aide" + desc: "Afiiche des information sur le plugin et ses commandes" + reload: + name: "Recharger" + desc: "Recharge les configurations et traductions" + setmainlobby: + name: "Définir lobby principal" + desc: "Définit le lobby principal d'une partie (nécessaire quand mainlobby-enabled est définit sur true)" + list: + name: "Lister parties" + desc: "Liste toutes les parties disponibles" + regionname: + name: "Définir nom de région" + desc: "Définit un nom de région individuel (au lieu du nom de monde)" + removeteam: + name: "Supprimer équipe" + desc: "Supprime une équipe de la partie (seulement en mode arrêté)" + removegame: + name: "Supprimer partie" + desc: "Supprime une partie et toutes ses configurations" + clearspawner: + name: "Effacer spawners" + desc: "Supprime tous les spawners de la partie. Sauvegarde nécessaire." + gametime: + name: "Définir temps de jeu" + desc: "Définit le temps de jeu qui doit être utilisé dans le monde de jeu" + stats: + name: "Statistiques" + desc: "Montre vos statistiques" + setbuilder: + name: "Définir constructeur de map" + desc: "Définit le constructeur de la map qui sera affiché en titre quand la partie commence." + setgameblock: + name: "Définir bloc de jeu" + desc: "Défini le type de bloc qui doit être utilisé pour cette partie au lieu de la configuration 'game-block'. Ecrivez 'DEFAULT' comme type pour utiliser la configuration de nouveau" + setautobalance: + name: "Définir un Autobalance" + desc: "Si 'global-autobalance' est réglé sur 'false', avec cette commande, vous pouvez définir auto-équilibrage d'équipe par jeu sur ou hors tension!" + setminplayers: + name: "Mettre le nombre de joueurs minimum" + desc: "Définit la quantité de joueurs nécessaire pour démarrer le jeu" + kick: + name: "Exclure des joueurs" + desc: "Exclure un ou des joueurs d'une partie!" + addteamjoin: + name: "Ajouter une sélection de team" + desc: "Marquez une créature qui peut être utilisée pour rejoindre une équipe spécifique!" + addholo: + name: "Ajouter une position holographique" + desc: "Une statistique d'hologramme sera ajoutée à la position actuelle!" + removeholo: + name: "Supprimer une position holographique" + desc: "Une statistique d'hologramme sera ajoutée à la position actuelle." + explain: "Effectue un clique gauche dans les 10 secondes sur l'hologramme que vous souhaitez supprimer." + debugpaste: + name: "Coller les données de débogage" + desc: "Cette option enverra des informations de debug à Hastebin et vous donnera un lien que vous pourrez partager avec les devellopeurs" + itemspaste: + name: "Collez votre inventaire dans un fichier" + desc: "Cela renverra un lien où vous pouvez voir votre inventaire actuel sérialisé comme exemple pour votre shop.yml" diff --git a/common/src/main/resources/locale/fy_NL.yml b/common/src/main/resources/locale/fy_NL.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/fy_NL.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/ga_IE.yml b/common/src/main/resources/locale/ga_IE.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/ga_IE.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/gd_GB.yml b/common/src/main/resources/locale/gd_GB.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/gd_GB.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/gl_ES.yml b/common/src/main/resources/locale/gl_ES.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/gl_ES.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/gv_IM.yml b/common/src/main/resources/locale/gv_IM.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/gv_IM.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/haw_US.yml b/common/src/main/resources/locale/haw_US.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/haw_US.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/he_IL.yml b/common/src/main/resources/locale/he_IL.yml new file mode 100644 index 0000000..e60524a --- /dev/null +++ b/common/src/main/resources/locale/he_IL.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "עמוד $current$ מתוך $max$" + currently: כעת +errors: + argumentslength: "מספר הארגומנטים אינו תואם את הסכום הנכון!" + holodependencynotfound: "לא נמצא $dependency$ עבור סטטיסקת ההולגרמה" + packagenotfound: "לא יכולתי להביא את החבילה $package$!" + classnotfound: "לא יכולתי להביא את $package$ מחלקה $class$!" + gameexists: "משחק עם השם הזה כבר קיים!" + gamenotfound: "לא הייתה אפשרות למצוא את המשחק '$game$'!" + nofreegames: "אין משחקים פנויים זמינים." + gamenotfoundsimple: "משחק לא נמצא!" + playeramount: "המספר המקסימלי של שחקנים לא יכול להיות נמוך מ-1 או גבוה מ-24!" + teamcolornotallowed: "צבע הצוות שניתן הוא צבע לא מורשה" + teamnamelength: "שם הקבוצה חייב להיות בין 2 ו-20 תווים!" + teamnotfound: "צוות לא נמצא!" + notingame: "אתם כרגע לא במשחק!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/hi_IN.yml b/common/src/main/resources/locale/hi_IN.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/hi_IN.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/hr_HR.yml b/common/src/main/resources/locale/hr_HR.yml new file mode 100644 index 0000000..a07f23b --- /dev/null +++ b/common/src/main/resources/locale/hr_HR.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Stranica $current$ od $max$" + currently: Trenutno +errors: + argumentslength: "Broj argumenata ne odgovara točnom iznosu!" + holodependencynotfound: "Ne može se naći $dependency$ za Hologram-Statistic" + packagenotfound: "Nije se mogao donjeti $package$ paket!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "Igra sa ovim inenom već postoji!" + gamenotfound: "Igra '$game$' nije pronađena!" + nofreegames: "Nema slobodnih igri." + gamenotfoundsimple: "Igra nije pronađena!" + playeramount: "Maksimum igrača ne može biti manji od 1 ili veći od 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Tim nije pronađen!" + notingame: "Trenutno nisi u igri!" + bedtargeting: "Moraš ciljati ili stati na bloku koji je konfiguriran 'game-block' tip!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "Nisi u zraku!" + teamfull: "Ovaj tim je pun, ponovno otvorite izbornik tima!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/hu_HU.yml b/common/src/main/resources/locale/hu_HU.yml new file mode 100644 index 0000000..cc3aee4 --- /dev/null +++ b/common/src/main/resources/locale/hu_HU.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "$current$/$max$ oldal" + currently: Jelenleg +errors: + argumentslength: "Nincs elegendő kritérium a parancs végrehajtásához!" + holodependencynotfound: "Nem találtam Hologram-Statisztikát" + packagenotfound: "Nem tudtam letölteni a $package$ csomagot!" + classnotfound: "Nem tudtam letölteni a(z) $package$ osztályt $class$!" + gameexists: "Már létezik ilyen nevű aréna!" + gamenotfound: "A(z) \"$game$\" játékaréna nem található!" + nofreegames: "Nincs elérhető szabad játék." + gamenotfoundsimple: "A játék nem található!" + playeramount: "A maximális, a játékosok nem lehet 1-nél kisebb vagy nagyobb 24-nél!" + teamcolornotallowed: "Az adott csapat szín nem engedélyezett szín" + teamnamelength: "A csapatnév 2-20 betű hosszúságú lehet!" + teamnotfound: "A csapat nem található!" + notingame: "Jelen pillanatban nem vagy játékban!" + bedtargeting: "Tartsd a célkeresztet a(z) \"újraéledő blokkra\" és jobb klikkeljen rá, hogy elmentse a konfigurációt!" + regionargument: "Az elhelyezés parancsai a \"loc1\" vagy \"loc2\"!" + spawnerargument: "Az erőforrás-paraméter az érvényes beállított forrás!" + blockdownnotfound: "Nem található álló blokk!" + gamenotrunning: "A játék nem fut!" + bungeenoserver: "Bungeecord szerverek nincsenek beállítva! Érdeklődjön a kiszolgáló rendszergazdájánál!" + cantstartagain: "A játék már fut! Futó játékot nem indíthatsz el újra!" + startoutofwaiting: "A játék elvan indítva, várakozó módban!" + cantjoingame: "Nem lehet csatlakozni egy futó, vagy megállt játékhoz!" + lobbyongameworld: "Nincs lobby a játék világában!" + gamenotloaded: "Nem indul el a játék!" + gameloaderror: "Játék betöltése '$ játék $ \"hibát dob!" + regionnotfound: "\"Nyelv\" fájl nem létezik!" + savesign: "Nem sikerült létrehozni egy új táblát létrehozni a konfig fájlban!" + nogames: "Nem található játék!" + notenoughress: "Nincsen elég nyersanyagod, hogy megvedd a tárgyat!" + teamnameinuse: "A csapatnév már használva van!" + minplayersmustnumber: "Min. játékos számnak kell lennie!" + toolongregionname: "A maximum régió név hossza 15 karakter!" + notwhilegamerunning: "Nem tehetem, játék futása közben!" + notwhileingame: "Nem tehetem a futó játék közben!" + timeincorrect: "Az időnek számnak (0-23000), \"day\" vagy \"night\" szónak kell lenni!" + minplayersnumeric: "A min-játékosok paraméter numerikus kell lennie!" + notinair: "Nem vagy a levegőben!" + teamfull: "A csapat teljes, kérjük nyissa meg újra a csapat választó menüt!" + novalidmaterial: "Adott blokk típus (anyag) nem helyes!" + wrongvalueonoff: "Hibás paraméter! Használja, igaz, 1 kapcsolja be-ki, 0, hogy kapcsolja ki a hamis!" + playernotfound: "Az adott játékos nem található vagy nem online!" + notingameforkick: "Meg kell rúgni a játékos egy játékban!" + playernotingame: "Az adott játékos nem szerepel ebben a játékban!" + mustbeinlobbyworld: "Te most a lobby világban vagy" + addteamjoincancel: "A csapathoz való csatlakozás visszavonva!" + entitynotcompatible: "Ez az entitás nem kompatibilis a csapat csatlakozó eszközével!" +success: + gameadded: "$game$ sikeresen létrehozva!" + teamadded: "$team$ csapat sikeresen létrehozva!" + joined: "Sikerült csatlakozni a játékhoz!" + left: "Sikeresen elhagytad a játékot!" + saved: "A játék sikeresen mentve!" + bedset: "A(z) $team$ csapat \"újraéledő blokkja\" sikeresen beállítva!" + regionset: "A játék régió helyszíne $location$, $game$ névvel sikeresen lett beállítva!" + spawnset: "A(z) $team$ csapat kezdőpontja sikeresen beállítva!" + spawnerset: "$name$ termelőhely sikeresen beállítva!" + stopped: "A játék sikeresen leállt!" + lobbyset: "A lobby sikeresen beállítva!" + gameloaded: "Játék '$game$' sikeresen lett betöltve!" + reloadconfig: "Sikeres újratöltés!" + teamremoved: "A csapat sikeresen eltávolítva!" + gameremoved: "A játékaréna sikeresen eltávolítva!" + spawnercleared: "Minden termelőhely sikeresen törölve!" + gamerun: "Elindítottad a játékot, a játékosok tudnak csatlakozni!" + timeset: "A játékidő sikeresen beállítva!" + regionnameset: "A játékterület neve sikeresen beállítva!" + minplayersset: "A minimális játékosszám sikeresen beállítva!" + mainlobbyset: "A főlobby sikeresen beállítva!" + gametimeset: "A játék ideje sikeresen beállítva!" + materialset: "Az újraéledő blokk sikeresen beállítva!" + builderset: "A pálya építője sikeresen beállítva, ami megjelenik a játék indulásakor (ha az be van állítva)!" + autobalanceseton: "Automata csapatelosztás sikeresen elindítva!" + autobalancesetoff: "Automata csapatelosztás sikeresen elindítva!" + selectteamjoinentity: "Jobb katt az entitánsra ha szeretnél csatlakozni a csapatba!" + teamjoinadded: "Entitáns csapat $team$ volt sikeresen megjelölve." + holoremoved: "A statisztika hologram sikeresen eltávolítva!" +gamecheck: + LOC_NOT_SET_ERROR: "Elhelyezkedés a régóban iincs mehfelelően." + TEAM_SIZE_LOW_ERROR: "Te tudsz beállítani több csapatot!" + NO_RES_SPAWNER_ERROR: "Nem állítottad be az összes érclelő helyet!" + NO_LOBBY_SET: "Még, nem állítottad be az elosztót!" + TEAMS_WITHOUT_SPAWNS: "Csapat vagy csapatoknak nincsen kezdő pontja!" + NO_ITEMSHOP_CATEGORIES: "Nemtalál tárgybolt kategóriákat!" + NO_MAIN_LOBBY_SET: "Nem állítottál be váró spawnt pedig \"true\" ra van állítva" + TEAM_NO_WRONG_BED: "Az egyik csapatnak nincs ágya!" + TEAM_NO_WRONG_TARGET: "Egy vagy több csapatnak nincs újraéledő pontja!" +ingame: + team: "Csapat" + teams: "Csapatok" + all: "Mindenki" + record: "&e$record$&7 A rekord ezen a mapon!" + record-with-holders: '&aA rekord ezen a mapon &e$record$&a csúcstartó $holders$' + newrecord: '&eCsapat $team$&e Új rekordot csinált: &6$record$' + record-nobeddestroy: "Rekord nem menthető mert az ágy eltörött!" + teamwon: "Gratulálunk! A(z) $team$ csapat nyert!" + draw: "A játék döntetlennel véget ért!" + serverrestart: "A szerver újraindul $sec$ másodperc múlva!" + gamestarting: "A játék indítása ..." + gamestarted: "Játék '$game$' elindult!" + backtolobby: "Visszatérés a lobbyba $sec$ másodperc múlva!" + spectator: "Néző" + spectate: "&aNéző" + teamchest: "Csapatláda" + noturteamchest: "Ez a láda nem a te csapatodé!" + protectionleft: "Sebezhetetlen vagy &c$length$&f másodpercig!" + protectionend: "Most már újra &csebezhető&f vagy!" + team-dead: "A(z) $team$ csapat kiesett a játékból!" + no-friendlybreak: "&cNem törhetsz építő elemet a csapat társaid alatt!" + teamchestdestroy: "&cCsapatláda vagy ládák ki lettek törve!" + title: + map-builder: "Építette: $builder$" + win-title: "&6Gratulálunk!" + win-subtitle: "A(z) $team$&6 csapat nyert, &e$time$ &6idő alatt" + shop: + name: "Bolt" + newshop: "Új bolt használata" + oldshop: "Régi bolt használata" + fullstackpershift: "Több stack per Shift + klikk" + onestackpershift: "Egy stack per Shift + klikk" + player: + left: "$player$ elhagyta a játékot!" + died: "$player$ meghalt!" + killed: "$killer$ megölte $player$-t!" + kicked: "$player$ kirúgva a játékból!" + waskicked: "Ki vagy rúgva ebből a játékból!" + blocks: + ownbeddestroy: "Saját ágyadat nem tudod széttörni!" + beddestroyed: "$player$ kiütötte a(z) $team$ csapat ágyát!" + specials: + rescue-platform: + left: " &c$time$ & f másodperc van hátra hogy, tudd használ a következő mentési platformot!" + arrow-blocker: + start: "Védelem alatt álsz a nyilak becsapódása ellen &c$time$&f másodpercig." + end: "&cA te nyíl védelmednek vége!" + left: "&c$time$ &f Másodperc van hátra a következő \"Nyíl blokkoló\" használatához!" + trap: + trapped: "&evalaki bejött a &ctrap&e, a csapatba!" + protection-wall: + left: "Védelmi falat még &c$time$&f másodpercig használhatod!" + not-usable-here: "Te nem tudod hasz álni védelem alatt áll!" + warp-powder: + cancelled: "&cA teleportálás megszakadt!" + start: "A teleportálás &c$time$&f másodperc múlva megkezdődik. Ne mozogj!" + cancel: "&cTeldportálás nem lett végrehajtva" + multiuse: "Már folyamatban van a teleportáció!" + tntsheep: + no-target-found: "Nincs beállítva játékos megtalálva!" + tracker: + no-target-found: "Nincs beállítva játékos megtalálva!" + target-found: "$player$ $blocks$ blokkra van tőled." +lobby: + countdown: "A játék $sec$ másodperc múlva kezdetét veszi!" + countdowncancel: "Nincs elég játékos, a visszaszámlálás leállt!" + cancelcountdown: + not_enough_players: "Több játékost igényel! Állotsd át." + not_enough_teams: "Több csapat kell! Csinálj még csapatot." + cancelstart: + not_enough_players: "Több játékos kell a játék elkezdéséhez!" + not_enough_teams: "Több csapat kell a játék elkezdéséhez!" + chooseteam: "Csapat választás" + startgame: "Játék indítása" + reduce_countdown: "Csökken a visszaszámlálás" + gamefull: "A játék megtelt!" + gamefullpremium: "A játék tele van prémium játékosokkal!" + teamjoined: "Csatlakoztál a(z) $team$ csapathoz" + leavegame: "Jelenlegi játék elhagyása" + playerjoin: "$player$ csatlakozott a játékhoz!" + kickedbyvip: "Kikerültél a játékból, mert egy prémium játékos csatlakozott!" + moreplayersneeded: "$count$ játékosra van még szükség a játék indításához." + moreplayersneeded-one: "$count$ játékosra van még szükség a játék indításához." + moreteamsneeded: "Legalább két különböző csapatra van szükség a játék indításához!" +sign: + firstline: "&6[BedWars]" + players: "Játékosok" + gamestate: + stopped: "&4Leállítva!" + waiting: "&aVárakozás ..." + running: "&9Játékban!" + full: "Tele!" +stats: + header: "Bedwars statisztika" + kd: "Ö/H" + statsnotfound: "$player$ statisztikái nem találhatóak!" + name: "Név" + kills: "Ölések" + deaths: "Halálozások" + wins: "Győzelmek" + loses: "Vereségek" + score: "Pontok" + destroyedBeds: "Széttört ágyak" + games: "Játszmák" +commands: + addgame: + name: "Játék hozzáadás" + desc: "Új játék létrehozása" + addteam: + name: "Csapat hozzáadása" + desc: "Adj hozzá csapatokat" + join: + name: "Belépés" + desc: "Belépés játékokba" + leave: + name: "Játék elhagyása" + desc: "Jelenlegi játék elhagyása" + save: + name: "Játék mentése" + desc: "Menti a játékot (és a mapot) a konfigurációs fájl(ok)-ba" + settarget: + name: "Célpont beállítása" + desc: "Egy csapat célblokkjának beállítása" + setbed: + name: "Ágy beállítása (a \"settarget\" szinonimája)" + desc: "Egy csapat ágyának beállítása (a \"settarget\" szinonimája)" + setlobby: + name: "Állitsd be az elosztót!" + desc: "Add meg a helyzetét a játék elosztónak!" + setregion: + name: "Játékterület sarkainak beállítása" + desc: "Egy játékterület sarkainak beállítása" + setspawn: + name: "Újraéledőhely beállítása" + desc: "Egy adott csapat újraéledőhelyének beállítása" + setspawner: + name: "Spawner lehelyezése" + desc: "Egy adott nyersanyag termelőhelyének lehelyezése" + start: + name: "Játék indítása" + desc: "Indul a játék" + stop: + name: "Játék leállítása" + desc: "Leállt a játék" + help: + name: "Súgó" + desc: "Mutasd az információkat a pluginról" + reload: + name: "Újratöltés" + desc: "Konfiguráció és fordítás újratöltése" + setmainlobby: + name: "Fő lobby beállítása" + desc: "Beállítja a főlobby helyét. (szükséges a \"mainlobby-enable: true\" beállítás)" + list: + name: "Játékok listája" + desc: "Kilistáza a játékokat" + regionname: + name: "Játéktér helyének beállítása" + desc: "Beállítja egy egyéni régió nevét (nem a világ neve)" + removeteam: + name: "Csapat törlése" + desc: "Egy csapat eltávolítása a játékból (csak megállított játék esetén lehetséges)" + removegame: + name: "Játék törlése" + desc: "Eltávolítja a játékot a konfigurációval együtt" + clearspawner: + name: "Spawner törlése" + desc: "Eltávolítja az összes spawnert a játékból. Mentés szükséges." + gametime: + name: "Játék idó beállítása" + desc: "Beállítja a játék ideje, amelyet akkor kell használni a játék-világ" + stats: + name: "Statisztika" + desc: "Statisztika mutatása" + setbuilder: + name: "Építő beállítása" + desc: "Beállítja a építész nevét, amely megjelenik a játék indulásakor." + setgameblock: + name: "Játék blokk beállítása" + desc: "Ez a játék, amelyet akkor kell használni, nem a \"játék-block\" konfigurációs játék blokk típust állít be. Írni a \"DEFAULT\" típust használ a típusú config újra" + setautobalance: + name: "Automatikus csapatelosztás beállítása" + desc: "Automatikus csapatelosztás be-ki kapcsolása. Ha \"false\" szabad a csapatválasztás." + setminplayers: + name: "Minimális játékosszám beállítása" + desc: "Beállítja hogy hány játékos kell a játék indulásához" + kick: + name: "Játékos kirúgása" + desc: "Egy játékos kirúgása a jelenlegi játékból!" + addteamjoin: + name: "Csapatválasztó hozzáadása" + desc: "Mark egy lény, amely lehet használni, hogy csatlakozzon egy különleges csapatot!" + addholo: + name: "A hologram helyének hozzáadása" + desc: "A hologram sikeresen létrehozva!" + removeholo: + name: "Hologram törlése" + desc: "Törli a kijelölődő statisztika hologramot. (Parancs lefuttatása után jobb klikk a hologramra)." + explain: "Kattintson a eltávolítani kívánt hologramra 10 másodpercen belül." + debugpaste: + name: "Illessze be a hibakeresési adatokat" + desc: "Ez néhány hibakeresési adatot küld a hastebin-nek, és visszaküldi a fejlesztőkkel megosztott linket" + itemspaste: + name: "Illessze be a készletet egy fájlba" + desc: "Ez visszaad egy linket, ahol láthatja, hogy az aktuális leltárt sorba helyezték példaként a shop.yml számára" diff --git a/common/src/main/resources/locale/hy_AM.yml b/common/src/main/resources/locale/hy_AM.yml new file mode 100644 index 0000000..e614f77 --- /dev/null +++ b/common/src/main/resources/locale/hy_AM.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Էջ $current$ Հյուրատետր $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "Ոչ խաղեր գտնվել!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/id_ID.yml b/common/src/main/resources/locale/id_ID.yml new file mode 100644 index 0000000..77e12c2 --- /dev/null +++ b/common/src/main/resources/locale/id_ID.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Halaman ke $current$ dari $max$ halaman" + currently: Saat ini +errors: + argumentslength: "Jumlah argumen tidak cocok dengan jumlah yang benar!" + holodependencynotfound: "Tidak dapat menemukan $dependency$ untuk Hologram-Statistik" + packagenotfound: "Tidak dapat mengambil paket $package$!" + classnotfound: "Tidak dapat mengambil $package$ kelas $class$!" + gameexists: "Permainan dengan nama ini sudah ada!" + gamenotfound: "Permainan '$game$' tidak dapat ditemukan!" + nofreegames: "Tidak ada permainan yang tersedia." + gamenotfoundsimple: "Permainan tidak ditemukan!" + playeramount: "Pemain maksimal tidak dapat kurang dari 1 atau lebih dari 24!" + teamcolornotallowed: "Warna tim yang ditentukan tidak diijinan" + teamnamelength: "Nama tim harus memiliki 2 sampai dengan 20 karakter!" + teamnotfound: "Tim tidak ditemukan!" + notingame: "Anda tidak sedang dalam permainan!" + bedtargeting: "Kamu tidak mempunyai target atau tidak berdiri diatas block yang ingin di buat menjadi tipe 'game-block'!" + regionargument: "Argumen lokasi Anda seharusnya 'loc1' atau 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "Block tempat kamu berdiri tidak ditemukan!" + gamenotrunning: "Permainan tidak berjalan!" + bungeenoserver: "Server Bungeecord tidak diatur dengan benar. Bicaralah pada server administrator!" + cantstartagain: "Permainan sedang berjalan! Anda tidak dapat memulai kembali permainan yang sedang berjalan!" + startoutofwaiting: "Permainan harus dimulai dari mode menunggu!" + cantjoingame: "Anda tidak dapat bergabung dengan permainan yang sedang berjalan atau permainan yang sudah dihentikan!" + lobbyongameworld: "Lobi tidak dapat berada pada dunia permainan!" + gamenotloaded: "Tidak dapat memulai permainan!" + gameloaderror: "Menunggu permainan '$game$' membuang error!" + regionnotfound: "File wilayah tidak dapat ditemukan!" + savesign: "Tidak bisa membuat sign baru di config file!" + nogames: "Permainan tidak ditemukan!" + notenoughress: "Anda tidak memiliki sumber daya yang cukup untuk membeli barang ini!" + teamnameinuse: "Nama tim ini sudah digunakan!" + minplayersmustnumber: "Pemain min harus merupakan angka!" + toolongregionname: "Panjang maksimal dari nama wilayah adalah 15 karakter!" + notwhilegamerunning: "Tidak dapat melakukan itu ketika permainan sedang berjalan!" + notwhileingame: "Tidak dapat melakukan itu ketika anda berada di permainan yang sedang berjalan!" + timeincorrect: "Waktu harus berupa angka (0... 23000), 'day' tau 'night'!" + minplayersnumeric: "Parameter min-pemain harus berupa angka!" + notinair: "Anda tidak di udara!" + teamfull: "Tim penuh, silahkan membuka kembali menu pemilihan tim!" + novalidmaterial: "Jenis (material) blok yang diberikan tidak tepat!" + wrongvalueonoff: "Parameter salah! Gunakan true, on, 1 untuk menyalakan - Gunakan false, off, 0 untuk mematikan!" + playernotfound: "Pemain yang diberikan tidak ditemukan atau tidak online!" + notingameforkick: "Anda harus berada dalam permainan untuk mengeluarkan seorang pemain!" + playernotingame: "Pemain yang diberikan tidak berada dalam permainan ini!" + mustbeinlobbyworld: "Anda harus berada pada lobi dunia dari permainan" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "Permainan baru $game$ berhasil ditambahkan!" + teamadded: "Tim $team$ berhasil ditambahkan!" + joined: "Anda berhasil bergabung dalam permainan!" + left: "Anda berhasil meninggalkan permainan!" + saved: "Permainan berhasil disimpan!" + bedset: "Anda berhasil menetapkan blok respawn tim $team$!" + regionset: "Lokasi wilayah permainan $location$ untuk permainan $game$ berhasil ditetapkan!" + spawnset: "Lokasi spawn untuk Tim $team$ berhasil ditetapkan!" + spawnerset: "Lokasi spawn sumber daya untuk $name$ berhasil ditetapkan!" + stopped: "Permainan berhasil dihentikan!" + lobbyset: "Lobi berhasil ditetapkan!" + gameloaded: "Permainan $game$ berhasil dimuat!" + reloadconfig: "Berhasil memuat ulang!" + teamremoved: "Tim berhasil dihapus!" + gameremoved: "Permainan berhasil dihapus!" + spawnercleared: "Semua ressource spawner telah dihapus!" + gamerun: "Anda memulai permainan, para pemain dapat bergabung sekarang!" + timeset: "Waktu permainan berhasil ditetapkan!" + regionnameset: "Nama wilayah berhasil ditetapkan!" + minplayersset: "Pemain minimal berhasil ditetapkan!" + mainlobbyset: "Lobi Utama berhasil ditetapkan!" + gametimeset: "Waktu permainan berhasil ditetapkan!" + materialset: "Jenis (bahan) blok respawn berhasil ditetapkan!" + builderset: "Pembangun peta telah berhasil diset dan akan ditampilkan pada judul!" + autobalanceseton: "Autobalance berhasil dihidupkan!" + autobalancesetoff: "Autobalance telah berhasil di&coff&akan!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistik berhasil dihapus!" +gamecheck: + LOC_NOT_SET_ERROR: "Lokasi untuk wilayah tidak diatur dengan benar!" + TEAM_SIZE_LOW_ERROR: "Anda harus menetapkan tim lebih banyak!" + NO_RES_SPAWNER_ERROR: "Anda tidak menetapkan spawner sumber daya apapun!" + NO_LOBBY_SET: "Anda belum menetapkan sebuah lobi!" + TEAMS_WITHOUT_SPAWNS: "Ada tim(-tim) tanpa lokasi spawn!" + NO_ITEMSHOP_CATEGORIES: "Tidak ada kategori itemshop yang ditemukan!" + NO_MAIN_LOBBY_SET: "Anda belum menetapkan sebuah lobi utama meskipun Anda set 'tomainlobby' menjadi true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Tim - Tim" + all: "Semua" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Selamat! Tim $team$ menang!" + draw: "Permainan berakhir dengan seri!" + serverrestart: "Server restart dalam $sec$ detik!" + gamestarting: "Memulai permainan..." + gamestarted: "Permainan '$game$ ' baru saja dimulai!" + backtolobby: "Kembali ke lobi dalam $sec$ detik!" + spectator: "Penonton" + spectate: "&aSpectate" + teamchest: "Peti tim" + noturteamchest: "Peti ini bukan peti tim anda!" + protectionleft: "Kebal selama &c$length$&f detik!" + protectionend: "Ada sekarang &cvulnerable&f lagi!" + team-dead: "Tim $team$ hancur!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Dibangun oleh $builder$" + win-title: "&6Selamat!" + win-subtitle: "$team$&6 menang dalam waktu &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Pemain $player$ telah meninggalkan permainan!" + died: "$player$ mati!" + killed: "$killer$ membunuh $player$!" + kicked: "$player$ dikeluarkan!" + waskicked: "Anda dikeluarkan dari permainan!" + blocks: + ownbeddestroy: "Anda tidak bisa menghancurkan tempat tidur Anda sendiri!" + beddestroyed: "$player$ menghancurkan tempat tidur tim $team$!" + specials: + rescue-platform: + left: "&c$time$&f detik tersisa sampai Anda dapat menggunakan platform penyelamatan berikutnya!" + arrow-blocker: + start: "Anda dilindungi dari terkena panah selama &c$time$& detik." + end: "&cYour arrow protection is over" + left: "&c$time$&f detik tersisa sampai Anda dapat menggunakan arrowblocker berikutnya!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "&c$time$&f detik tersisa sampai Anda dapat menggunakan dinding pelindung berikutnya!" + not-usable-here: "Anda tidak dapat menggunakan dinding pelindung di sini!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "Anda akan diteleportasikan dalam &c$time$&f detik. Jangan bergerak!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "Tidak ada pemain target yang ditemukan!" + tracker: + no-target-found: "Tidak ada pemain target yang ditemukan!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Permainan akan dimulai dalam $sec$ detik!" + countdowncancel: "Membutuhkan lebih banyak pemain. Hitung mundur dibatalkan!" + cancelcountdown: + not_enough_players: "Membutuhkan lebih banyak pemain. Hitung mundur dibatalkan!" + not_enough_teams: "Butuh lebih banyak tim. Hitung mundur dibatalkan!" + cancelstart: + not_enough_players: "Membutuhkan tim lebih banyak untuk memulai permainan!" + not_enough_teams: "Membutuhkan tim lebih banyak untuk memulai permainan!" + chooseteam: "Pilih sebuah tim" + startgame: "Mulai permainan" + reduce_countdown: "Mengurangi hitung mundur" + gamefull: "Permainan penuh!" + gamefullpremium: "Permainan ini sudah penuh dengan pemain premium!" + teamjoined: "Anda berhasil bergabung dengan tim $team$" + leavegame: "Meninggalkan permainan" + playerjoin: "Pemain $player$ bergabung dalam permainan!" + kickedbyvip: "Anda telah dikeluarkan oleh pemain vip yang telah bergabung dalam permainan penuh!" + moreplayersneeded: "$count$ pemain diperlukan." + moreplayersneeded-one: "$count$ pemain diperlukan." + moreteamsneeded: "Minimal dua pemain di dua tim yang berbeda diperlukan untuk memulai permainan!" +sign: + firstline: "&6[Bedwars]" + players: "Para pemain" + gamestate: + stopped: "&4Dihentikan!" + waiting: "&aMenunggu..." + running: "&9Running!" + full: "Penuh!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistik dari $player$ tidak ditemukan!" + name: "Nama" + kills: "Membunuh" + deaths: "Kematian" + wins: "Menang" + loses: "Kalah" + score: "Skor" + destroyedBeds: "Destroyed Beds" + games: "Permainan-permainan" +commands: + addgame: + name: "Tambah permainan" + desc: "Menambahkan permainan baru" + addteam: + name: "Tambahkan tim" + desc: "Menambahkan sebuah tim pada permainan tertentu" + join: + name: "Bergabung dalam permainan" + desc: "Bergabung dalam permainan tertentu" + leave: + name: "Meninggalkan permainan" + desc: "Meninggalkan permainan saat ini" + save: + name: "Menyimpan permainan" + desc: "Menyimpan permainan (dan peta) ke file(-file) konfigurasi" + settarget: + name: "Menetapkan sasaran" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Menetapkan lobi" + desc: "Sets the location of the gamelobby" + setregion: + name: "Menetapkan titik wilayah" + desc: "Menetapkan titik wilayah untuk permainan" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Menetapkan lokasi spawner ressource tertentu" + start: + name: "Mulai permainan" + desc: "Mulai sebuah permainan" + stop: + name: "Hentikan permainan" + desc: "Hentikan sebuah permainan" + help: + name: "Tampilkan bantuan" + desc: "Tampilkan informasi tentang plugin dan perintahnya" + reload: + name: "Muat Ulang" + desc: "Muat ulang konfigurasi dan terjemahan" + setmainlobby: + name: "Tetapkan lobi utama" + desc: "Menetapkan lobi utama dari sebuah permainan (dibutuhkan ketika mainlobby-enabled diset menjadi true)" + list: + name: "Sebutkan permainan-permainan" + desc: "Sebutkan semua permainan yang tersedia" + regionname: + name: "Menetapkan nama daerah" + desc: "Menetapkan nama daerah individu (bukan nama dunia)" + removeteam: + name: "Hapus Tim" + desc: "Menghapus sebuah tim dari permainan (hanya dalam modus berhenti)" + removegame: + name: "Hapus permainan" + desc: "Menghapus sebuah permainan dan setiap konfigurasi" + clearspawner: + name: "Clear spawners" + desc: "Menghapus semua spawners dari permainan. Perlu menyimpan." + gametime: + name: "Atur waktu permainan" + desc: "Menetapkan waktu permainan yang akan digunakan dalam dunia permainan" + stats: + name: "Statistik" + desc: "Tunjukkan statistik Anda" + setbuilder: + name: "Menetapkan pembangun peta" + desc: "Menetapkan pembangun peta yang akan ditampilkan di judul pada saat permainan dimulai." + setgameblock: + name: "Menetapkan blok permainan" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "Jika 'global-autobalance' diatur menjadi 'false', dengan perintah ini Anda dapat mengatur team-autobalance per permainan menjadi hidup atau mati!" + setminplayers: + name: "Tetapkan minimum pemain" + desc: "Tetapkan jumlah pemain yang diperlukan untuk memulai permainan" + kick: + name: "Keluarkan pemain" + desc: "Keluarkan pemain dari permainan saat ini!" + addteamjoin: + name: "Add team selection" + desc: "Tandai makhluk yang dapat digunakan untuk bergabung dengan tim tertentu!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Menghapus lokasi hologram" + desc: "Ketika perintah dieksekusi, pemain dapat mengklik kanan hologram yang akan dihapus." + explain: "Lakukan klik kiri dalam 10 detik pada hologram yang ingin Anda hapus." + debugpaste: + name: "Paste debug data" + desc: "Ini akan mengirimkan beberapa data debug ke hastebin dan mengembalikan sebuah link yang dapat anda bagi dengan para pengembang" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/is_IS.yml b/common/src/main/resources/locale/is_IS.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/is_IS.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/it_IT.yml b/common/src/main/resources/locale/it_IT.yml new file mode 100644 index 0000000..4d41a06 --- /dev/null +++ b/common/src/main/resources/locale/it_IT.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Pagina $current$ di $max$" + currently: Attualmente +errors: + argumentslength: "Il numero di argomenti non corrisponde alla corretta quantità!" + holodependencynotfound: "Non riusciva a trovare $dependency$ per ologramma-statistica" + packagenotfound: "Non poteva recuperare il pacchetto di $ $package!" + classnotfound: "Impossibile trovare il pacchetto $package$ e la classe $class$!" + gameexists: "Una partita con questo nome esiste già!" + gamenotfound: "Il gioco $game$ non può essere trovato!" + nofreegames: "Non ci sono giochi liberi disponibili." + gamenotfoundsimple: "Partita non trovata!" + playeramount: "Il massimo dei player non può essere minore di 1 e maggiore di 24!" + teamcolornotallowed: "Il colore che hai dato non è stato trovato" + teamnamelength: "Il nome deve essere lungo minimo 2 lettere e massimo 20 lettere!" + teamnotfound: "Squadra non trovata!" + notingame: "Non sei attualmente in un gioco!" + bedtargeting: "Devi indirizzare o stare in piedi su un blocco del tipo 'gioco-blocco' configurato!" + regionargument: "Il tuo argomento di posizione deve essere 'luogo1' o 'loc2'!" + spawnerargument: "Il parametro di risorsa deve essere una valida risorsa configurata!" + blockdownnotfound: "Non è stato trovato il blocco che ci sei sopra!" + gamenotrunning: "Gioco non è in esecuzione!" + bungeenoserver: "Bungeecord server non è stato impostato correttamente! Parlare con l'amministratore del server!" + cantstartagain: "Gioco è in esecuzione! Non è possibile avviare un gioco che ancora una volta!" + startoutofwaiting: "Gioco deve essere avviato dalla modalità di attesa!" + cantjoingame: "Non è possibile aggiungere un gioco in esecuzione o arrestato!" + lobbyongameworld: "Hall non può essere il mondo di gioco!" + gamenotloaded: "Non poteva iniziare il gioco!" + gameloaderror: "Caricamento gioco '$game$ ' genera un errore!" + regionnotfound: "File di regione non esiste!" + savesign: "Impossibile creare un nuovo file di configurazione di segno!" + nogames: "Nessun gioco trovato!" + notenoughress: "Non hai abbastanza risorse per acquistare questo oggetto!" + teamnameinuse: "Nome della squadra è già in uso!" + minplayersmustnumber: "Minimo giocatori devono essere un numero!" + toolongregionname: "Lunghezza massima del nome della regione sono 15 caratteri!" + notwhilegamerunning: "Non puoi farlo mentre il gioco è in esecuzione!" + notwhileingame: "Non puoi farlo mentre sei in un gioco di corsa!" + timeincorrect: "Tempo deve essere un numero (0... 23000), 'giorno' o 'notte'!" + minplayersnumeric: "Il parametro min-giocatori deve essere numerico!" + notinair: "Tu non sei nell'aria!" + teamfull: "La squadra è completa, si prega di riaprire il menu di selezione della squadra!" + novalidmaterial: "Dato blocco tipo (materiale) non è corretto!" + wrongvalueonoff: "Parametro errato! Utilizzare true, on, 1 per accendere - utilizzare false, off, 0 per disattivare!" + playernotfound: "Dato giocatore era non trovato o non è in linea!" + notingameforkick: "È necessario essere in un gioco a calci un giocatore!" + playernotingame: "Dato giocatore non è in questo gioco!" + mustbeinlobbyworld: "È necessario essere nel mondo Hall del gioco" + addteamjoincancel: "L'aggiunta di join team è stato annullato!" + entitynotcompatible: "Questa entità non è compatibile con join team!" +success: + gameadded: "Nuovo gioco '$game$ ' aggiunto con successo!" + teamadded: "Squadra '$team$ ' aggiunto con successo!" + joined: "Sei entrato nella partita con successo!" + left: "Hai lasciato la partita con successo!" + saved: "Partita salvata con successo!" + bedset: "Hai settato con successo il blocco di spawn del team $team$!" + regionset: "La regione della partita settata su $location$ per la partita $game$ è stata settata con successo!" + spawnset: "Posizione di spawn per il team $team$ è stata settata con successo!" + spawnerset: "Spawn per la risorsa $name$ settato con successo!" + stopped: "Partita fermata con successo!" + lobbyset: "Lobby settata con successo!" + gameloaded: "Partita $game$ caricata con successo!" + reloadconfig: "Ricaricato con successo!" + teamremoved: "Team rimosso con successo!" + gameremoved: "Partita rimossa con successo!" + spawnercleared: "Tutte gli spawner per le risorse sono stati rimossi!" + gamerun: "Hai abbiato la partita, i giocatori possono entrare adesso!" + timeset: "Tempo per la partita settato con successo!" + regionnameset: "Nome dell' area settato con successo!" + minplayersset: "Minimi player settati con successo!" + mainlobbyset: "Mainlobby settata con successo!" + gametimeset: "Tempo della partita settato con successo!" + materialset: "Il tipo di blocco di respawn (materiale) è stato creato con successo!" + builderset: "Il costruttore per la mappa è stato settato con successo e verrà mostrato nel titolo!" + autobalanceseton: "Soldi automatici abilitati!" + autobalancesetoff: "Soldi automatici &cdisabilitati &acon successo!" + selectteamjoinentity: "Adesso clicca con il tasto destro sull' entità che vuoi usare come selettore per i team!" + teamjoinadded: "Entità settata con successo e impostata come selettore per il team $team$" + holoremoved: "Statistiche sull' ologramma rimosse con successo!" +gamecheck: + LOC_NOT_SET_ERROR: "La zona per la regione non è settata correttamente!" + TEAM_SIZE_LOW_ERROR: "Devi impostare più team!" + NO_RES_SPAWNER_ERROR: "Non hai impostato lo spawn di nessuna risorsa!" + NO_LOBBY_SET: "Non hai settato una lobby!" + TEAMS_WITHOUT_SPAWNS: "Ci sono team senza una zona su cui spawnare!" + NO_ITEMSHOP_CATEGORIES: "Nessuna categoria trovata nello shop!" + NO_MAIN_LOBBY_SET: "Non hai settato una mainlobby oppure non hai settato 'tomainlobby' su true" + TEAM_NO_WRONG_BED: "Uno o più team non hanno il letto impostato!" + TEAM_NO_WRONG_TARGET: "Uno o più team non hanno il blocco di respawn settato!" +ingame: + team: "Squadra" + teams: "Squadre" + all: "Globale" + record: "&e$record$ &aè il record su questa mappa!" + record-with-holders: '&aIl record di questa mappa è &e$record$&a ed è mantenuto da $holders$' + newrecord: '& aTeam $team$ & un insieme un nuovo record: & 6$record$' + record-nobeddestroy: "& cRecord non verranno salvate, perché nessun letto è stata distrutta!" + teamwon: "Congratulazioni! Squadra $team dollari vinti!" + draw: "Il gioco è finito in pareggio!" + serverrestart: "Riavvio del server in $sec$ secondi!" + gamestarting: "Gioco a partire..." + gamestarted: "Gioco '$game$ ' è appena iniziato!" + backtolobby: "Torna alla lobby in $sec$ secondi!" + spectator: "Spettatori" + spectate: "& aSpectate" + teamchest: "Cesta di squadra" + noturteamchest: "Questo cesta non è una cassa della tua squadra!" + protectionleft: "Invulnerabilità per & c$length$ & f secondi!" + protectionend: "Ora sei ancora &cvulnerable&f!" + team-dead: "La squadra $team$ è stato distrutto!" + no-friendlybreak: "& cNon puoi piazzare i blocchi sotto il membro del tuo team!" + teamchestdestroy: "&c La cassa di squadra è stata distrutta!" + title: + map-builder: "Costruito da $builder$" + win-title: "& 6Congratulazioni!" + win-subtitle: "$team$ & 6 ha vinto & e$time$" + shop: + name: "Venditore" + newshop: "Utilizza il nuovo negozio" + oldshop: "Vecchio negozio in uso" + fullstackpershift: "Moltiplica stack per ogni click dello shift" + onestackpershift: "Fare clic su uno stack per turno" + player: + left: "Il giocatore $player$ ha lasciato il gioco!" + died: "$player$ è morto!" + killed: "$killer$ ha ucciso $player$!" + kicked: "$player$ è stato espulso!" + waskicked: "Sei stato cacciato dal gioco!" + blocks: + ownbeddestroy: "Non puoi distruggere il tuo letto!" + beddestroyed: "$player$ ha distrutto il letto della squadra $team$!" + specials: + rescue-platform: + left: "In altri & c$time$ & f secondi potrai usare un'altra piattaforma!" + arrow-blocker: + start: "Sei protetto dalle freccie & c$time$ & f secondi." + end: "&cLa protezione dalle freccie è terminata" + left: "In & c$time$ & f secondi potrai usare un'altro arroblocker!" + trap: + trapped: "& eQualcuno è salito su una &ctrap&e della tua squadra!" + protection-wall: + left: "Attenti & c$time$ & f secondi per creare un altro muro protettivo!" + not-usable-here: "Non è possibile utilizzare il muro di protezione qui!" + warp-powder: + cancelled: "&c Il tuo teletrasporto è stato annullato!" + start: "Sarai teletrasportato in & c$time$ & f secondi. Non ti muovere!" + cancel: "&4 teletrasporto cancellato" + multiuse: "&cHai già iniziato un teletrasporto!" + tntsheep: + no-target-found: "Nessun bersaglio identificato!" + tracker: + no-target-found: "Nessun bersaglio identificato!" + target-found: "$player$ è $blocks$ blocchi lontano da te." +lobby: + countdown: "Il gioco inizierà in $sec$ secondi!" + countdowncancel: "Più giocatori necessari. Il conto alla rovescia è stato annullato!" + cancelcountdown: + not_enough_players: "Più giocatori necessari. Conto alla rovescia annullato!" + not_enough_teams: "Sono necessarie più squadre. Conto alla rovescia annullato!" + cancelstart: + not_enough_players: "Servono più utenti per avviare la partita!" + not_enough_teams: "Servono più team per avviare la partita!" + chooseteam: "Scegli un team" + startgame: "Avvia il gioco" + reduce_countdown: "Riduci il conto alla rovescia" + gamefull: "La partita è piena!" + gamefullpremium: "La partita è già piena di giocatori premium!" + teamjoined: "Sei entrato nel team $team$ con successo" + leavegame: "Esci dalla partita" + playerjoin: "Il giocatore $player$ è entrato!" + kickedbyvip: "Sei stato kikkato da un giocatore vip che è entrato nella partita piena!" + moreplayersneeded: "Servono ancora $count$ players." + moreplayersneeded-one: "Serve ancora $count$ player." + moreteamsneeded: "Un minimo di 2 players in 2 team diversi sono necessari per avviare il gioco!" +sign: + firstline: "&6[Bedwars]" + players: "Giocatori" + gamestate: + stopped: "&4Fermata!" + waiting: "&cAspettando..." + running: "&9Avviata!" + full: "&4Piena!" +stats: + header: "Statistiche delle BedWars" + kd: "Uccisioni/Morti" + statsnotfound: "Statistiche del giocatore $player$ non trovate!" + name: "Nome" + kills: "Uccisioni" + deaths: "Morti" + wins: "Vittorie" + loses: "Perse" + score: "Punteggio" + destroyedBeds: "Letti distrutti" + games: "Partite" +commands: + addgame: + name: "Aggiungi una partita" + desc: "Aggiungi una nuova partita" + addteam: + name: "Aggiungi una squadra" + desc: "Aggiungi una squadra ad una partita specifica" + join: + name: "Entra nella partita" + desc: "Entra in un gioco specifico" + leave: + name: "Esci dalla partita" + desc: "Esci dalla partita corrente" + save: + name: "Salva la partita" + desc: "Salva la partita (e la mappa) nei config" + settarget: + name: "Imposta l' obbiettivo" + desc: "Imposta la zona dell' obbiettivo del team" + setbed: + name: "Imposta il letto" + desc: "Imposta la zona del letto della squadra" + setlobby: + name: "Imposta la lobby" + desc: "Imposta la zona della lobby della partita" + setregion: + name: "Imposta un punto della regione" + desc: "Imposta un punto per la regione della partita" + setspawn: + name: "Imposta uno spawn per il team" + desc: "Imposta lo spawn del team specificato" + setspawner: + name: "Set spawner" + desc: "Imposta una posizione spawner di un specifico materiale" + start: + name: "Avvia il gioco" + desc: "Inizia una partita" + stop: + name: "Interrompere il gioco" + desc: "Ferma un gioco" + help: + name: "Visualizza la guida" + desc: "Visualizzare informazioni sui plugin e i relativi comandi" + reload: + name: "Riavvia" + desc: "Consente di ricaricare le configurazioni e le traduzioni" + setmainlobby: + name: "Impostare la lobby principale" + desc: "Imposta la lobby principale di un gioco (quando abiliti questa cosa la mainlobby deve essere impostata su true)" + list: + name: "Elenco giochi" + desc: "Elenca tutti i giochi disponibili" + regionname: + name: "Nome dell'area" + desc: "Imposta un nome di singola regione (anziché il nome del mondo)" + removeteam: + name: "Rimuovere la squadra" + desc: "Rimuove una squadra dal gioco (solo in modalità di interruzione)" + removegame: + name: "Rimuovere il gioco" + desc: "Rimuove un gioco e ogni configurazione" + clearspawner: + name: "Spawner eliminati" + desc: "Rimuove tutti i riproduttori dal gioco. Risparmio necessari." + gametime: + name: "Tempo di gioco" + desc: "Imposta il tempo di gioco che deve essere utilizzato nel gioco-mondo" + stats: + name: "Statistiche" + desc: "Mostra le vostre statistiche" + setbuilder: + name: "Costruttore della mappa" + desc: "Imposta il costruttore della mappa che sarà visualizzato nel titolo quando il gioco inizia." + setgameblock: + name: "Impostare il blocco del gioco" + desc: "Imposta il tipo di gioco blocco per questo gioco che dovrebbe essere usato anziché la configurazione di 'gioco-blocco'. Scrivere 'DEFAULT' come tipo di utilizzare di nuovo il tipo di configurazione" + setautobalance: + name: "Set autobalance" + desc: "Se 'global-autobalance' è impostato a 'false', con questo comando che è possibile impostare la squadra-autobalance a partita a on o off!" + setminplayers: + name: "Impostare il minimo di giocatori" + desc: "Imposta la quantità di giocatori necessari per iniziare il gioco" + kick: + name: "Espelle un giocatore" + desc: "Espelle un giocatore dal gioco corrente!" + addteamjoin: + name: "Aggiungi selezione squadra" + desc: "Segnala una creatura che può essere utilizzata per entrare in un team specifico!" + addholo: + name: "Aggiungi la posizione dell'ologramma" + desc: "Un ologramma verrà aggiunto nella posizione corrente !" + removeholo: + name: "Rimuovere la posizione di ologramma" + desc: "Quando il comando viene eseguito, il giocatore può fare clic destro l'ologramma che dovrebbe essere rimosso." + explain: "Eseguire un click sinistro entro 10 secondi l'ologramma che si desidera rimuovere." + debugpaste: + name: "Incolla i dati di debug" + desc: "Questo maderà qualche stringa del debug a hastebin e ti ritornerà come link che potrai condividere con gli sviluppatori" + itemspaste: + name: "Incolla il tuo inventario in un file" + desc: "Questo restituirà un collegamento in cui è possibile vedere che l'inventario corrente viene serializzato come esempio per il tuo shop.yml" diff --git a/common/src/main/resources/locale/ja_JP.yml b/common/src/main/resources/locale/ja_JP.yml new file mode 100644 index 0000000..8c5e9ab --- /dev/null +++ b/common/src/main/resources/locale/ja_JP.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "$max$のページ$current$" + currently: 現在 +errors: + argumentslength: "因数の数が、正しい金額と一致していません。" + holodependencynotfound: "ホログラム統計のための $dependency$を見つけることができませんでした" + packagenotfound: "$package$というパッケージを取得できませんでした!" + classnotfound: "クラス $class$ $package$ を取得できませんでした!" + gameexists: "この名前のゲームは既に作成されてあります" + gamenotfound: "ゲーム '$game$ ' が見つかりませんでした!" + nofreegames: "利用可能な無料ゲームはありません。" + gamenotfoundsimple: "ゲームが見つかりませんでした!" + playeramount: "プレイヤーの最大人数は1より少なくする事や24よりも多くすることはできません!" + teamcolornotallowed: "与えられたチームカラーは色が許可されていません" + teamnamelength: "チーム名は、2〜20文字にしてください。" + teamnotfound: "チームが見つかりません!" + notingame: "あなたは現在ゲーム中ではありません!" + bedtargeting: "設定された 'ゲームブロック'タイプのブロックをターゲットにするか、その上に立つ必要があります。" + regionargument: "あなたの位置引数は 'loc1'または 'loc2'でなければなりません!" + spawnerargument: "リソースパラメータは有効な構成済リソースでなければなりません!" + blockdownnotfound: "上に立っているブロックが見つかりませんでした!" + gamenotrunning: "ゲームは開始されていません" + bungeenoserver: "Bungeecord サーバーが正しく設定されていません。サーバー管理者に連絡してください。" + cantstartagain: "ゲームは既に実行されています。" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "ゲーム中なので参加できません。" + lobbyongameworld: "ロビーをゲームのワールドに設定することはできません。" + gamenotloaded: "ゲームを開始できませんでした。" + gameloaderror: "ゲーム’$game$’をロードすると、エラーが発生します。" + regionnotfound: "Region ファイルが存在しません" + savesign: "看板の設定ファイルを作成できませんでした。" + nogames: "ゲームが見つかりませんでした" + notenoughress: "このアイテムを購入するのに十分なアイテムを持っていません。" + teamnameinuse: "そのチーム名は既に使用中です。" + minplayersmustnumber: "最小人数は数字でなければなりません。" + toolongregionname: "地域名の最大文字数は 15 文字です。" + notwhilegamerunning: "ゲームの実行中にそれを行うことはできません。" + notwhileingame: "実行中のゲームにいる間、それを行うことはできません。" + timeincorrect: "時間は数字 (0~23000)、'day' または 'night' で設定してください。" + minplayersnumeric: "最少人数は、数字で設定してください" + notinair: "空気のない" + teamfull: "満員です。メニューからほかのチームに参加してください。" + novalidmaterial: "指定されたブロックのタイプ (素材) は不正です。" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "特定のプレーヤーは見つからないか、オンラインになっていません。" + notingameforkick: "プレーヤーをゲームからキックする必要があります!" + playernotingame: "そのプレーヤーはゲームに参加していません!" + mustbeinlobbyworld: "あなたはゲームのロビーのワールドにいないといけません。" + addteamjoincancel: "チーム参加の追加がキャンセルされました。" + entitynotcompatible: "このエンティティは、チーム参加と互換性がありません!" +success: + gameadded: "新しいゲーム '$game$' を正常に追加されました!" + teamadded: "チーム '$team$' を正常に追加されました!" + joined: "あなたはゲームに参加しました。" + left: "ゲームから退出しました。" + saved: "ゲームは正常に保存されました!" + bedset: "チーム $team$のリスポーン地点を設定しました!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "ゲームが停止しました!" + lobbyset: "ロビーを設定しました。" + gameloaded: "ゲーム '$game$' を読み込みました!" + reloadconfig: "リロードしました" + teamremoved: "チームを削除しました。" + gameremoved: "ゲームを削除しました!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "ロビーを設定しました。" + gametimeset: "ゲーム時間を設定しました。" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "チーム" + all: "全て" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "チームチェスト" + noturteamchest: "このチェストはあなたのチームのチェストではありません。" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "ゲームを開始" + reduce_countdown: "Reduce countdown" + gamefull: "満員です。" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "ゲームから抜ける" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "チームのスポーン地点を設定します。" + desc: "特定のチームスポーン地点を設定します。" + setspawner: + name: "スポナーのセット" + desc: "Sets a spawner location of a specific ressource" + start: + name: "ゲームを開始" + desc: "ゲームを開始" + stop: + name: "ゲームを停止" + desc: "ゲームを停止" + help: + name: "ヘルプを表示" + desc: "プラグインとコマンドの情報を表示します。" + reload: + name: "リロード" + desc: "設定、翻訳ファイルをリロードします。" + setmainlobby: + name: "メインロビーを設定" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "ゲームリスト" + desc: "現在利用可能なすべてのリストを表示します。" + regionname: + name: "リージョンの名前を設定します。" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "チームを削除" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "ゲームを削除" + desc: "Removes a game and every configuration" + clearspawner: + name: "スポナーをクリア" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/jbo_EN.yml b/common/src/main/resources/locale/jbo_EN.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/jbo_EN.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/ka_GE.yml b/common/src/main/resources/locale/ka_GE.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/ka_GE.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/ko_KR.yml b/common/src/main/resources/locale/ko_KR.yml new file mode 100644 index 0000000..5db07a2 --- /dev/null +++ b/common/src/main/resources/locale/ko_KR.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "페이지 $current$ / $max$" + currently: 현재 +errors: + argumentslength: "커맨드의 인자 수가 부족합니다!" + holodependencynotfound: "홀로그램 통계를 사용하려면 $dependency$ 을/를 서버에 설치하세요." + packagenotfound: "$package$ 패키지를 불러올 수 없습니다!" + classnotfound: "$package$ 패키지의 $class$ 클래스를 불러올 수 없습니다!" + gameexists: "해당 이름의 게임이 이미 존재합니다!" + gamenotfound: "'$game$' 게임을 찾을 수 없습니다!" + nofreegames: "현재 참여 가능한 게임이 없습니다." + gamenotfoundsimple: "게임을 찾을 수 없습니다!" + playeramount: "최대 인원수는 1~24명 이내로 정하십시오!" + teamcolornotallowed: "허용된 색상 값을 입력하십시오!" + teamnamelength: "팀 이름의 길이는 2~20 char 이내로 허용됩니다!" + teamnotfound: "팀을 찾을 수 없습니다!" + notingame: "당신은 게임에 참여하지 않았습니다!" + bedtargeting: "설정에서 정의된 'game-block' 의 블럭을 바라보거나 그 위에 서 있어야 합니다!" + regionargument: "위치 값 인자는 loc1 또는 loc2 입니다." + spawnerargument: "리소스 파라미터는 설정에서 정의된 것으로 입력해야 합니다!" + blockdownnotfound: "대상의 블럭을 밟고 있어야 합니다!" + gamenotrunning: "게임이 실행중이지 않습니다!" + bungeenoserver: "번지코드 서버 세팅이 완료되지 않았습니다! 관리자에게 문의하십시오." + cantstartagain: "해당 게임은 이미 실행중입니다!" + startoutofwaiting: "게임이 아직 대기 모드입니다!" + cantjoingame: "게임이 점검중이거나 진행중입니다!" + lobbyongameworld: "게임 맵이 있는 월드에 로비를 설정할 수 없습니다!" + gamenotloaded: "게임을 실행하는데 실패했습니다!" + gameloaderror: "'$game$' 게임을 불러오는 중 오류가 발생했습니다!" + regionnotfound: "영역 파일이 존재하지 않습니다!" + savesign: "표지판 데이터 파일을 생성할 수 없었습니다!" + nogames: "참여 가능한 게임이 없습니다!" + notenoughress: "아이템을 구매할 자원이 부족합니다!" + teamnameinuse: "그 팀 이름은 이미 사용중입니다!" + minplayersmustnumber: "최소 인원으로 정수 값을 입력하세요!" + toolongregionname: "영역 이름의 길이는 최대 15 char 입니다!" + notwhilegamerunning: "아직 게임이 실행중입니다!" + notwhileingame: "우선 참여한 게임을 나가세요!" + timeincorrect: "시간 값은 정수 (0 ~ 23000), 'day' 또는 'night' 만 허용됩니다." + minplayersnumeric: "최소 유저 수는 정수 값으로 입력하십시오!" + notinair: "공중에 떠 있어야 합니다!" + teamfull: "해당 팀의 인원수가 만원입니다, 다른 팀에 참가하세요!" + novalidmaterial: "해당 블럭 종류(재질) 값이 유효하지 않습니다!" + wrongvalueonoff: "잘못된 인자 값입니다! 기능 켜기: true/on/1 - 기능 끄기: false/off/0" + playernotfound: "그 유저는 접속중이지 않거나 존재하지 않습니다!" + notingameforkick: "게임에 참여한 후 유저를 퇴장시킬 수 있습니다!" + playernotingame: "그 유저는 이 게임에 없습니다!" + mustbeinlobbyworld: "해당 게임의 로비에 있어야 합니다" + addteamjoincancel: "팀 참여기 생성이 취소되었습니다!" + entitynotcompatible: "팀 참여기와 호환되는 엔티티가 아닙니다!" +success: + gameadded: "새로운 게임 '$game$' 이 생성되었습니다!" + teamadded: "'$team$' 팀이 추가되었습니다!" + joined: "게임에 참여했습니다!" + left: "게임에서 나갔습니다!" + saved: "게임 설정을 저장했습니다!" + bedset: "$team$ 팀의 리스폰 블럭을 지정했습니다!" + regionset: "$game$ 게임 영역의 $location$ 위치를 지정했습니다!" + spawnset: "$team$ 팀의 스폰 위치를 지정했습니다!" + spawnerset: "$name$ 자원 생성기의 위치를 지정했습니다." + stopped: "게임을 종료시켰습니다!" + lobbyset: "로비 위치를 지정했습니다!" + gameloaded: "'$game$' 게임을 로드했습니다!" + reloadconfig: "성공적으로 리로드했습니다!" + teamremoved: "팀을 제거했습니다!" + gameremoved: "게임을 제거했습니다!" + spawnercleared: "모든 자원 생성기를 제거했습니다!" + gamerun: "게임을 활성화시켰습니다. 게임 참여가 가능해집니다!" + timeset: "게임 시간을 설정했습니다!" + regionnameset: "영역 이름을 설정했습니다!" + minplayersset: "최소 유저 수를 설정했습니다!" + mainlobbyset: "메인 로비 위치를 지정했습니다!" + gametimeset: "게임 시간이 설정되었습니다!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "팀" + all: "All" + record: "&a이 맵의 최단 기록: &e$record$" + record-with-holders: '&a이 맵의 최단 기록: &e$record$&a by&b $holders$' + newrecord: '&a$team$&a팀이 최단 플레이 시간 기록을 갱신했습니다: &6$record$' + record-nobeddestroy: "&c침대를 파괴하지 않았으므로 기록이 저장되지 않습니다." + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/kw_GB.yml b/common/src/main/resources/locale/kw_GB.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/kw_GB.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/la_LA.yml b/common/src/main/resources/locale/la_LA.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/la_LA.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/lb_LU.yml b/common/src/main/resources/locale/lb_LU.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/lb_LU.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/li_LI.yml b/common/src/main/resources/locale/li_LI.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/li_LI.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/lol_US.yml b/common/src/main/resources/locale/lol_US.yml new file mode 100644 index 0000000..86163e3 --- /dev/null +++ b/common/src/main/resources/locale/lol_US.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Right Meow +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Oh noes, game was not founds!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "Teh Tem color you picked is illegal o-o" + teamnamelength: "Tem naem has to be between two and twenty letters!" + teamnotfound: "Tem not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You are not fly liek birdie!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Eyetum Shoop" + newshop: "Use young shoop" + oldshop: "Use elder shoop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ is ded oh noes!" + killed: "$killer$ rekt $player$!" + kicked: "$player$ maed a no no!" + waskicked: "You made a no no!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: ";~; Not enuf tems!" + chooseteam: "Pick a tem" + startgame: "Lez go" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You got kicked by a spesul kitteh who joined a full game!" + moreplayersneeded: "$count$ moar kittehs needed." + moreplayersneeded-one: "$count$ moar kittehs needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Kittehs" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Funz" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Tem" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Lez go" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/lt_LT.yml b/common/src/main/resources/locale/lt_LT.yml new file mode 100644 index 0000000..048ebe3 --- /dev/null +++ b/common/src/main/resources/locale/lt_LT.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Puslapis $current$ iš $max$" + currently: Dabar +errors: + argumentslength: "Argumentu skaicius neatitinka teisingo kiekio!" + holodependencynotfound: "Nepavyko rasti $dependency$ hologramines statistikos palaikymui" + packagenotfound: "Nepavyko apdoroti $package$ paketo!" + classnotfound: "Nepavyko apdoroti $package$ klases $class$!" + gameexists: "Zaidimas tokiu pavadinimu jau egzistuoja!" + gamenotfound: "Zaidimas '$game$' nerastas!" + nofreegames: "Nera jokiu galimu zaidimu." + gamenotfoundsimple: "Zaidimas nerastas!" + playeramount: "Maksimalus zaideju skaicius negali buti mazesnis negu 1 arba didesnis negu 24!" + teamcolornotallowed: "Nurodyta komandos spalva yra neleidziama" + teamnamelength: "Komandos pavadinima turi sudaryti nuo 2 iki 20 simboliu!" + teamnotfound: "Komanda nerasta!" + notingame: "Jus dabar nesate zaidime!" + bedtargeting: "Jus turite ziureti i 'game-block' tipo bloka arba stoveti ant jo!" + regionargument: "Vietos argumentas turi buti 'loc1' arba 'loc2'!" + spawnerargument: "Resurso parametras turi buti teisingas sukonfiguruotas resursas!" + blockdownnotfound: "Blokas, ant kurio stovite, nerastas!" + gamenotrunning: "Zaidimas dabar nevyksta!" + bungeenoserver: "Bungeecord serveriai nera teisingai sukonfiguruoti! Susisiekite su administracija!" + cantstartagain: "Zaidimas jau prasidejo! Negalite pradeti jau prasidejusio zaidimo!" + startoutofwaiting: "Zaidimas turi buti paleidziamas is laukimo rezimo!" + cantjoingame: "Negalite prisijungti prie vykstancio arba sustabdyto zaidimo!" + lobbyongameworld: "Lobby negali buti nustatytas zaidimo pasaulyje!" + gamenotloaded: "Nepavyko pradeti zaidimo!" + gameloaderror: "Paleidziant zaidima '$game$' ivyko klaida!" + regionnotfound: "Regiono failas neegzistuoja!" + savesign: "Nepavyko sukurti naujo konfiguracijos failo zenklui!" + nogames: "Nerasta jokiu zaidimu!" + notenoughress: "Jus neturite pakankamai resursu, kad galetumete tai nusipirkti!" + teamnameinuse: "Toks komandos pavadinimas jau naudojamas!" + minplayersmustnumber: "Minimalus zaideju kiekis turi buti rasomas skaiciu!" + toolongregionname: "Maksimalus regiono pavadinimo ilgis turi buti iki 15 simboliu!" + notwhilegamerunning: "Negalite atlikti sio veiksmo kai vyksta zaidimas!" + notwhileingame: "Negalite atlikti sio veiksmo zaidimo metu!" + timeincorrect: "Laikas turi buti skaicius (0 ... 23000), 'day' arba 'night'!" + minplayersnumeric: "Parametras min-players turi buti skaitinis!" + notinair: "Jus nesate ore!" + teamfull: "Pasirinkta komanda yra pilna, prasome pasirinkti kita komanda!" + novalidmaterial: "Nurodytas bloko tipas (material) nera teisingas!" + wrongvalueonoff: "Klaidingas parametras! Naudokite true,on,1 jei norite ijungti - Naudokite false,off,0 jei norite isjungti!" + playernotfound: "Nurodytas zaidejas nerastas arba nera prisijunges!" + notingameforkick: "Jus turite buti zaidime, kad galetumete ismesti zaideja is zaidimo!" + playernotingame: "Nurodytas zaidejas nera siame zaidime!" + mustbeinlobbyworld: "Jus turite buti zaidimo lobby pasaulyje" + addteamjoincancel: "Pridedamos komandos prisijungimas buvo atšauktas!" + entitynotcompatible: "Šis objektas nėra suderinama su komandos prisijungimu!" +success: + gameadded: "Naujas zaidimas '$game$' sekmingai sukurtas!" + teamadded: "Komanda '$team$' sekmingai prideta!" + joined: "Prisijungete prie zaidimo!" + left: "Atsijungete nuo zaidimo!" + saved: "Zaidimas issaugotas!" + bedset: "Jūs sėkmingai nustatėte prisikėlimo bloką, komandos $team$!" + regionset: "Regiono vieta $location$ zaidime $game$ nustatyta!" + spawnset: "Atsiradimo vieta komandai $team$ nustatyta!" + spawnerset: "$name$ resursu atsiradimo vieta nustatyta!" + stopped: "Zaidimas sustabdytas!" + lobbyset: "Lobby nustatytas!" + gameloaded: "Zaidimas '$game$' sekmingai ikrautas!" + reloadconfig: "Perkrovimas sekmingas!" + teamremoved: "Komanda panaikinta!" + gameremoved: "Zaidimas panaikintas!" + spawnercleared: "Visi resursu generatoriai panaikinti!" + gamerun: "Pradejote zaidima, dabar zaidejai gali prisijungti!" + timeset: "Zaidimo laikas nustatytas sekmingai!" + regionnameset: "Regiono pavadinimas nustatytas sekmingai!" + minplayersset: "Minimalus zaideju skaicius nustatytas!" + mainlobbyset: "Pagrindinis lobby nustatytas!" + gametimeset: "Zaidimo laikas nustatytas!" + materialset: "Prisikėlimo bloko tipas (medžiaga) buvo nustatyta sėkmingai!" + builderset: "Pasaulio statytojas nustatytas ir bus rodomas antrasteje!" + autobalanceseton: "Autobalansas ijungtas!" + autobalancesetoff: "Autobalansas &cisjungtas&a!" + selectteamjoinentity: "Dabar, dešiniuoju pelės mygtuku spustelėkite objektą, kurį norite naudoti kaip komandos prisijungimą!" + teamjoinadded: "Objektas sėkmingai pažymėtas, kaip komandos pasitinkimas, komandai $team$" + holoremoved: "Hologram-Statistic panaikintas!" +gamecheck: + LOC_NOT_SET_ERROR: "Regiono vietos buvo nustatytos neteisingai!" + TEAM_SIZE_LOW_ERROR: "Reikia nustatyti daugiau komandu!" + NO_RES_SPAWNER_ERROR: "Nenustatete jokio resursu generatoriaus!" + NO_LOBBY_SET: "Nenustatete lobby!" + TEAMS_WITHOUT_SPAWNS: "Yra komandu, kurios neturi atsiradimo vietos!" + NO_ITEMSHOP_CATEGORIES: "Nerasta jokiu itemshop kategoriju!" + NO_MAIN_LOBBY_SET: "Nenustatete pagrindinio lobby, nors 'tomainlobby' yra nustatytas kaip true" + TEAM_NO_WRONG_BED: "Viena ar daugiau komandu neturi nustatytos lovos!" + TEAM_NO_WRONG_TARGET: "Vienas ar daugiau komandų neturi nustatyto prisikėlimo bloko!" +ingame: + team: "Komanda" + teams: "Komandos" + all: "Visi" + record: "&e$record$&a yra sios arenos rekordas!" + record-with-holders: '&aSioje arenoje yra rekordas &e$record$&a ir ji pasieke: $holders$' + newrecord: '&aKomanda $team$&a pasieke nauja rekorda: &6$record$' + record-nobeddestroy: "&cRekordas neissaugotas, nes lova nebuvo sugriauta!" + teamwon: "Sveikiname! Komanda $team$ laimejo!" + draw: "Zaidimas baigiasi lygiosiomis!" + serverrestart: "Serveris bus perkrautas po $sec$ sek!" + gamestarting: "Pradedamas zaidimas ..." + gamestarted: "Zaidimas '$game$' ka tik prasidejo!" + backtolobby: "Griztama i lobby po $sec$ sek!" + spectator: "Stebetojas" + spectate: "&aStebeti" + teamchest: "Komandos skrynia" + noturteamchest: "Tai nera jusu komandos skrynia!" + protectionleft: "Nesužeidžiamas &c$length$&f sek!" + protectionend: "Jūs dabar &cvulnerable&f vėl!" + team-dead: "Komanda $team$ buvo sunaikinta!" + no-friendlybreak: "& cNegalima naikinti bloko po komandos nariu!" + teamchestdestroy: "&cViena is jusu komandos skryniu buvo sunaikinta!" + title: + map-builder: "Pastate $builder$" + win-title: "&6Sveikiname!" + win-subtitle: "$team$&6 laimėjo per &e$time$" + shop: + name: "Parduotuvė" + newshop: "Naudokite naują parduotuvę" + oldshop: "Naudokite seną parduotuvę" + fullstackpershift: "Padauginti stakus per Shift paspaudimą" + onestackpershift: "Vienas stakas per Shift paspaudimą" + player: + left: "Zaidejas $player$ atsijunge nuo zaidimo!" + died: "$player$ mire!" + killed: "$killer$ nuzude zaideja $player$!" + kicked: "$player$ ismestas is zaidimo!" + waskicked: "Tu buvai ismestas/a is zaidimo!" + blocks: + ownbeddestroy: "Negalite sunaikinti savo lovos!" + beddestroyed: "$player$ sunaikino komandos $team$ lova!" + specials: + rescue-platform: + left: "Liko &c$time$&f sek., kol galėsite naudoti kitą išgelbėjimo platformą!" + arrow-blocker: + start: "Jūs esate apsaugoti nuo strėlių &c$time$&f sek." + end: "&cJūsų strėlių apsauga pasibaigė" + left: "Liko &c$time$&f sek., kol galėsite naudoti arrowbloker'į!" + trap: + trapped: "&eKazkas uzlipo ant jusu komandos &cspastu&e!" + protection-wall: + left: "Liko &c$time$&f sek., kol galėsite naudoti kitą apsaugos sieną!" + not-usable-here: "Negalite cia pastatyti apsaugos sienos!" + warp-powder: + cancelled: "&cTeleportacija atsaukta!" + start: "Busite nuteleportuoti po &c$time$&f sekundziu. Nejudekite!" + cancel: "& 4Atšaukti teleportaciją" + multiuse: "&cTeleportacija jau prasidejo!" + tntsheep: + no-target-found: "Nerasta žaidėjo taikinio!" + tracker: + no-target-found: "Nerasta žaidėjo taikinio!" + target-found: "$player$ yra $blocks$ blokų nutolęs nuo tavęs." +lobby: + countdown: "Žaidimas prasidės po $sec $ sek.!" + countdowncancel: "Reikia daugiau žaidėjų. Žaidimas buvo atšauktas!" + cancelcountdown: + not_enough_players: "Reikia daugiau žaidėjų. Žaidimas atšauktas!" + not_enough_teams: "Reikia daugiau komandu. Laikas atsauktas!" + cancelstart: + not_enough_players: "Reikia daugiau žaidėjų iki žaidimo pradžios!" + not_enough_teams: "Reikia daugiau komandu, kad pradeti zaidima!" + chooseteam: "Pasirinkite komandą" + startgame: "Pradėti žaidimą" + reduce_countdown: "Sutrumpinti laika" + gamefull: "Žaidimas yra pilnas!" + gamefullpremium: "Žaidimas yra pilnas Premium žaidėjų!" + teamjoined: "Prisijungete prie komandos $team$" + leavegame: "Iseiti is zaidimo" + playerjoin: "Žaidėjas $player$ prisijungė prie žaidimo!" + kickedbyvip: "Jus buvote ismestas/a is zaidimo, nes prisijunge vip zaidejas i pilna zaidima!" + moreplayersneeded: "Dar reikia $count$ zaideju." + moreplayersneeded-one: "Dar reikia $count$ zaidejo." + moreteamsneeded: "Kad pradeti zaidima, reikia nors 2 zaideju, kurie butu skirtingose komandose!" +sign: + firstline: "&6[Bedwars]" + players: "Žaidėjai" + gamestate: + stopped: "& 4Sustabdyta!" + waiting: "&aLaukiama..." + running: "& 9Žaidžiama!" + full: "Pilnas!" +stats: + header: "Bedwars statistika" + kd: "K/D" + statsnotfound: "Žaidėjo $player$ statistika buvo nerasta!" + name: "Vardas" + kills: "Nuzudymai" + deaths: "Mirtys" + wins: "Laimejimai" + loses: "Pralaimejimai" + score: "Taskai" + destroyedBeds: "Sugriautos lovos" + games: "Zaista" +commands: + addgame: + name: "Prideti zaidima" + desc: "Prideda nauja zaidima" + addteam: + name: "Prideti komanda" + desc: "Prideda komanda i nurodyta zaidima" + join: + name: "Prisijungti prie zaidimo" + desc: "Prisijungti prie nurodyto zaidimo" + leave: + name: "Iseiti is zaidimo" + desc: "Iseiti is dabartinio zaidimo" + save: + name: "Issaugoti zaidima" + desc: "Issaugo zaidima (ir pasauli) i konfiguracijos failus" + settarget: + name: "Nustatyti tikslą" + desc: "Nustato vietą komandos tikslo bloką" + setbed: + name: "Nustatyti lova (settarget sinonimas)" + desc: "Nustato vietą komandos lovos" + setlobby: + name: "Nustatyti lobby" + desc: "Nustato zaidimo lobby vieta" + setregion: + name: "Nustatytas regiono taškas" + desc: "Nustatytas regiono taškas žaidimui" + setspawn: + name: "Nustato komandos atsiradimo vietą" + desc: "Nustatyti komandos atsiradimo vieta" + setspawner: + name: "Nustatyti spawnerį" + desc: "Nustato resursų bronzo,metalo,aukso atsiradimo vieta" + start: + name: "Pradėti žaidimą" + desc: "Žaidimas prasideda" + stop: + name: "Sustabdyti žaidimą" + desc: "Sustabdytas žaidimas" + help: + name: "Rodyti pagalbą" + desc: "Informacija apie įskiepa ir komandas" + reload: + name: "Perkrauti" + desc: "Perkrauti bedwars įskiepa" + setmainlobby: + name: "Nustatyti pagrindini atsiradimo tašką" + desc: "Nustatyta pagrindinė atsiradimo vieta! (Būtuina,kad konfiguracijose butu mainlobby-enabled,nes kitaip neveiks!)" + list: + name: "Arenu sąrašas" + desc: "Visi galimi žaidimai:" + regionname: + name: "Nustatyti regionio pavadinima" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistika" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Nustatyi auto balansavimą" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Nustatymi mažiausia žaidėjų skaičių" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Išmesti žaidėją" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Pridėti komandos pasirinkimą" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/lv_LV.yml b/common/src/main/resources/locale/lv_LV.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/lv_LV.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/mk_MK.yml b/common/src/main/resources/locale/mk_MK.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/mk_MK.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/mn_MN.yml b/common/src/main/resources/locale/mn_MN.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/mn_MN.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/ms_MY.yml b/common/src/main/resources/locale/ms_MY.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/ms_MY.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/mt_MT.yml b/common/src/main/resources/locale/mt_MT.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/mt_MT.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/nds_DE.yml b/common/src/main/resources/locale/nds_DE.yml new file mode 100644 index 0000000..36ca182 --- /dev/null +++ b/common/src/main/resources/locale/nds_DE.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Seite $current$ von $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "$dependency$ konnte nicht gefunden werden für die Hologram-Statistik" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "Ein Spiel mit diesem Namen existiert bereits!" + gamenotfound: "Das Spiel $game$ konnte nicht gefunden werden!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team nicht gefunden!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/nl_NL.yml b/common/src/main/resources/locale/nl_NL.yml new file mode 100644 index 0000000..4809a01 --- /dev/null +++ b/common/src/main/resources/locale/nl_NL.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Pagina $current$ van $max$" + currently: momenteel +errors: + argumentslength: "Nummer van argumenten klopt niet met het juiste aantal!" + holodependencynotfound: "Kon $dependency$ voor Hologram-Statistiek niet vinden" + packagenotfound: "Kon pakket $package$ niet ophalen!" + classnotfound: "Kon pakket $package$ van klasse $class$ niet ophalen!" + gameexists: "Een spel met deze naam bestaat al!" + gamenotfound: "Het spel '$game$' werdt niet gevonden!" + nofreegames: "Er zijn geen gratis spellen beschikbaar." + gamenotfoundsimple: "Spel niet gevonden!" + playeramount: "Het max van spelers kan niet lager dan 1 of hoger dan 24 zijn!" + teamcolornotallowed: "Het gegeven team kleur is geen toegelaten kleur" + teamnamelength: "Team naam moet tussen 2 en 20 karakters bestaan!" + teamnotfound: "Team niet gevonden!" + notingame: "Je bent op dit moment niet in een spel!" + bedtargeting: "Je moet op het blok staan of er naar kijken om het 'game-block' type te configureren!" + regionargument: "Je locatie argumenten moeten 'loc1' of 'loc2' zijn!" + spawnerargument: "De parameter bron moet een geldige geconfigureerde hulpmiddel zijn" + blockdownnotfound: "Het blok waar je op staat is niet gevonden!" + gamenotrunning: "Spel is niet bezig!" + bungeenoserver: "Bungeecord Servers is niet juist opgesteld! Spreek met de server administrator!" + cantstartagain: "Spel is bezig! Je kan geen spel opnieuw starten wat al bezig is!" + startoutofwaiting: "Spel moet gestart worden waneer deze uit wacht modus is!" + cantjoingame: "Je kan geen gestopt of spel wat bezig is joinen!" + lobbyongameworld: "Lobby kan niet op de wereld gezet worden als het spel zelf!" + gamenotloaded: "Kon het spel niet opstarten!" + gameloaderror: "Laden van het spel '$game$' geeft een error!" + regionnotfound: "Regio bestand bestaat niet!" + savesign: "Kon geen nieuw bord config bestand aanmaken!" + nogames: "Geen spellen gevonden!" + notenoughress: "Je hebt niet genoeg resources om dit item te kopen!" + teamnameinuse: "Team naam is al in gebruik!" + minplayersmustnumber: "Min spelers moet een nummer zijn!" + toolongregionname: "Maximum lengte van een regio naam zijn 15 karakters!" + notwhilegamerunning: "Kan dit niet doen wanneer het spel bezig is!" + notwhileingame: "Je kan dit niet doen wanneer het spel bezig is!" + timeincorrect: "Tijd moet een nummer zijn (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "De min spelers parameter moeten nummers zijn!" + notinair: "Je bent niet in de lucht!" + teamfull: "Het team zit vol, gelieve het team selctie menu te heropenen!" + novalidmaterial: "Gegeven blok type (materiaal) is niet correct!" + wrongvalueonoff: "Verkeerde parameter! Gebruik true,on,1 om aan te zetten - gebruik false,off,0 oom af te zetten!" + playernotfound: "Gegeven speler is niet gevonden of niet online!" + notingameforkick: "Je moet in een spel zitten om iemand te kikken!" + playernotingame: "Gegeven speler is niet in dit spel!" + mustbeinlobbyworld: "Je moet in de lobby werled van de game zitten" + addteamjoincancel: "Het toevoegen van team join is geanuleerd!" + entitynotcompatible: "Deze entity is niet bruikbaar met team join!" +success: + gameadded: "Nieuw spel '$game$' succesvol toegevoegd!" + teamadded: "Team '$team$' succesvol toegevoegd!" + joined: "Je hebt met succes het spel gejoined!" + left: "Je hebt met succes het spel verlaten!" + saved: "Spel is met met succes opgeslagen!" + bedset: "Je hebt met succes het respawn block gezet van team $team$!" + regionset: "Spel regio locatie $location$ voor spel $game$ is succesvol gezet!" + spawnset: "Spawn locatie voor team $team$ is succesvol gezet!" + spawnerset: "Ressource spawn locatie voor $name$ is succesvol gezet!" + stopped: "Spel succesvol gestopt!" + lobbyset: "Lobby is succesvol gezet!" + gameloaded: "Spel '$game$' succesvol geladen!" + reloadconfig: "Reload successvol!" + teamremoved: "Team is succesvol verwijderd!" + gameremoved: "Spel is succesvol verwijderd!" + spawnercleared: "Al de resource spawners zijn verwijderd!" + gamerun: "Je hebt het spel gestart, spelers kunnen nu joinen!" + timeset: "Spel tijd is succesvol gezet!" + regionnameset: "Regio naam is succesvol gezet!" + minplayersset: "Min spelers is succesvol gezet!" + mainlobbyset: "Hoofdlobby is succesvol gezet!" + gametimeset: "Spel tijd is succesvol gezet!" + materialset: "Het respawn blok type (material) is succesvol gezet!" + builderset: "De bouwer voor de map is succesvol gezet en wordt getoond in de titel!" + autobalanceseton: "Autobalanse is succesvol op gezet!" + autobalancesetoff: "Autobalanse is succesvol &cuit gezet&a!" + selectteamjoinentity: "Doe nu rechter muisklik op de entity die je als team selector wilt!" + teamjoinadded: "Entity is succesvol aangeduid als team selector voor team $team$" + holoremoved: "Hologram-Statistic succesvol verwijderd!" +gamecheck: + LOC_NOT_SET_ERROR: "Locatie's voor de regio zijn niet gezet!" + TEAM_SIZE_LOW_ERROR: "Je moet meet teams hebben!" + NO_RES_SPAWNER_ERROR: "Je hebt geen resource spawners gezet!" + NO_LOBBY_SET: "Je hebt geen lobby gezet!" + TEAMS_WITHOUT_SPAWNS: "Er zijn team(s) zonder een spawn locatie!" + NO_ITEMSHOP_CATEGORIES: "Geen itemshops categorieën gevonden!" + NO_MAIN_LOBBY_SET: "Je hebt geen hoofd lobby gezet ook al heb je 'tomainlobby' op true gezet" + TEAM_NO_WRONG_BED: "Eén of meer teams heeft geen bed!" + TEAM_NO_WRONG_TARGET: "Eén of meer teams heeft geen respawn blok gezet!" +ingame: + team: "Team" + teams: "Ploegen" + all: "Al" + record: "&e$record$&a Is het record van deze map!" + record-with-holders: '&aHet record op deze map is &e$record$&a en is gehouden door $holders$' + newrecord: '&aTeam $team$&a heeft een nieuw record gezet: &6$record$' + record-nobeddestroy: "&cRecord wordt niet opgeslagen want er is geen bed afgebroken!" + teamwon: "Gefeliciteert! Team $team$ heeft gewonnen!" + draw: "Het spel eindigt met een gelijkspel!" + serverrestart: "Server herstart in $sec$ second(en)!" + gamestarting: "Spel is aan het starten ..." + gamestarted: "Spel '$game$' is juist gestart!" + backtolobby: "Terug naar lobby in $sec$ seconden!" + spectator: "Toeschouwer" + spectate: "&aToeschouwen" + teamchest: "Team kist" + noturteamchest: "Deze kist is geen kist van jouw team!" + protectionleft: "Beveiligd voor &c$length$&f second(en)!" + protectionend: "Je bent nu opnieuw &cbeveiligd&f!" + team-dead: "Team $team$ is vernietigd!" + no-friendlybreak: "&cKan geen blok breken onder team genoot!" + teamchestdestroy: "&cEén van je team kisten is vernietigd!" + title: + map-builder: "Gebouwd door $builder$" + win-title: "&6Gefeliciteerd!" + win-subtitle: "$team$&6 gewonnen in &e$time$" + shop: + name: "Itemwinkel" + newshop: "Gebruik nieuwe shop" + oldshop: "Gebruik oude shop" + fullstackpershift: "Vermenigvuldigende staks met shift klik" + onestackpershift: "Eén stack met shift klik" + player: + left: "Speler $player$ heeft het game verlaten!" + died: "$player$ is gestorven!" + killed: "$killer$ heeft $player$ vermoord!" + kicked: "$player$ is gekickt!" + waskicked: "Je bent gekickt van het spel!" + blocks: + ownbeddestroy: "Je kan je eigen bed niet kapot maken!" + beddestroyed: "$player$ heeft het bed van $team$ afgebroken!" + specials: + rescue-platform: + left: "Er is &c$time$&f seconden over voordat je het volgende beveiligings platform kunt gebruiken!" + arrow-blocker: + start: "Je bent beschermd om geraakt te woorden door pijlen voor &c$time$&f second(en)." + end: "&cJe bescherming tegen pijlen is verlopen" + left: "Je moet nog &c$time$&f seconde(n) wachten totdat u weer arrowblocker kunt gebruiken!" + trap: + trapped: "&eIemand is in een &ctrap&e geweest van jouw team!" + protection-wall: + left: "Er zijn &c$time$&f second(en) over voordat je de volgende protectie muur kan gebruiken!" + not-usable-here: "Je kan geen protectie muur hier gebruiken!" + warp-powder: + cancelled: "&cJe tp is geanuleerd!" + start: "Je wordt geteleporteert in &c$time$&f second(en). Niet bewegen!" + cancel: "&4teleport geanuleerd" + multiuse: "&cJe hebt al een teleport gestart!" + tntsheep: + no-target-found: "Geen doelwit speler is gevonden!" + tracker: + no-target-found: "Geen doelwit speler is gevonden!" + target-found: "$player$ is $blocks$ zoveel blok(ken) van je weg." +lobby: + countdown: "Spel gaat starten in $sec$ second(en)!" + countdowncancel: "Meer spelers nodig. aftelling is afgelast!" + cancelcountdown: + not_enough_players: "Meer spelers nodig. Aftelling is afgelast!" + not_enough_teams: "Meer teams nodig. Aftellen is gestopt!" + cancelstart: + not_enough_players: "Meer spelers zijn nodig om het spel te starten!" + not_enough_teams: "Meer teams zijn nodig om het spel te starten!" + chooseteam: "Kies een team" + startgame: "Spel starten" + reduce_countdown: "Aftelling verminderen" + gamefull: "Spel is vol!" + gamefullpremium: "Het spel is voll met premium spelers!" + teamjoined: "Je hebt met succes het $team$ team gejoined" + leavegame: "Spel verlaten" + playerjoin: "Speler $player$ heeft het spel gejoined!" + kickedbyvip: "Je bent gekit door een een VIP speler die het spel joint wanneer het spel vol is!" + moreplayersneeded: "$count$ meer spelers nodig." + moreplayersneeded-one: "$count$ speler meer nodig." + moreteamsneeded: "Een minimum van 2 spelers in 2 verschillende teams is nodig om het spel te starten!" +sign: + firstline: "&6[Bedwars]" + players: "Spelers" + gamestate: + stopped: "&4Gestopt!" + waiting: "&aWachten ..." + running: "&9Bezig!" + full: "Vol!" +stats: + header: "Bedwars statistieken" + kd: "K/D" + statsnotfound: "Statistieken van $player$ niet gevonden!" + name: "Naam" + kills: "Doden" + deaths: "Gedood" + wins: "Overwinningen" + loses: "Verloren" + score: "Scores" + destroyedBeds: "vernietigde Bedden" + games: "Spellen" +commands: + addgame: + name: "Spel toevoegen" + desc: "Voegt een nieuw spel toe" + addteam: + name: "Team toevoegen" + desc: "Voegt een team toe aan een specifieke game" + join: + name: "Join Spel" + desc: "Joins een specifiek spel" + leave: + name: "Verlaat spel" + desc: "Verlaat het huidige spel" + save: + name: "Spel opslaan" + desc: "Slaat het spel (en map) op naar de config map(pen)" + settarget: + name: "Zetten van target" + desc: "Zet de locatie van het teams doel blok" + setbed: + name: "Zet bed (synoniem voor zetten van target)" + desc: "Zet de locatie van het teams bed blok (synoniem voor zetten van target)" + setlobby: + name: "Zetten van lobby" + desc: "Zet de locatie van de gamelobby" + setregion: + name: "Zetten van een regio punt" + desc: "Zet een regio punt voor het spel" + setspawn: + name: "Zetten van een team spawn" + desc: "Zet de spawn van een gegeven team" + setspawner: + name: "Zetten van spawner" + desc: "Zet de spawner locatie van een specifieke ressource" + start: + name: "Spel starten" + desc: "Starten van een spel" + stop: + name: "Spel stoppen" + desc: "Stopt een spel" + help: + name: "help" + desc: "Geeft info over de plugin en de commands" + reload: + name: "Herladen" + desc: "Herlaad de config en vertalingen" + setmainlobby: + name: "Zetten van hoofd lobby" + desc: "Zet de hoofd lobby van een spel (Is nodig wanneer mainlobby-enabled is gezet op true)" + list: + name: "Spel lijst" + desc: "Lijst van alle spellen die beschikbaar zijn" + regionname: + name: "Zetten van regio naam" + desc: "Zet een individuele regio naam (inplaats van de wereld naam)" + removeteam: + name: "Verwijder team" + desc: "Verwijderd een team van het spel (alleen in stop modus)" + removegame: + name: "Verwijder het spel" + desc: "Verwijderd een spel en iedere configuratie" + clearspawner: + name: "Verwijder spawners" + desc: "Verwijderd al de spawners van het spel. Opslaan is nodig." + gametime: + name: "Zetten van spel tijd" + desc: "Zet het spel tijd wat gebruikt moet worden in het spel-wereld" + stats: + name: "Statistieken" + desc: "Laat je statistieken zien" + setbuilder: + name: "Zet de bouwer van de map" + desc: "Zet de map maker van de map wat op het scherm komt in de titel als het spel start." + setgameblock: + name: "Zetten van spel blok" + desc: "zet het spel blok type voor dit spel wat" + setautobalance: + name: "Zetten van autobalance" + desc: "Als 'globale-autobalance' gezet is op vals, met dit commando kan je team-autobalance per spel op aan of uit zetten" + setminplayers: + name: "Zet minimaal aantal spelers" + desc: "Zet het aantal spelers dat nodig is om het spel te starten" + kick: + name: "Kick speler" + desc: "Kick een speler van het spel dat nu gespeeld wordt!" + addteamjoin: + name: "Voeg team selector toe" + desc: "Duid een monster aan dat als team selector gebruikt kan worden voor een specifiek team!" + addholo: + name: "Voeg een hologram toe" + desc: "Een hologram statistiek wordt toegevoegd op de plaats waar jij het zet!" + removeholo: + name: "Verwijder hologram locatie" + desc: "Wanneer het command uitgevoerd is, moeten de spelers rechts-klik drukken op de hologram en het zou weg moeten gaan." + explain: "Zorg ervoor dat je binnen 10 sec linker muisknop drukt op de hologram als deze wilt verwijderen." + debugpaste: + name: "Paste debug data" + desc: "Dit verzend debug data naar hastebin en geeft jou een link die je kan delen met de developer" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/nn_NO.yml b/common/src/main/resources/locale/nn_NO.yml new file mode 100644 index 0000000..e7023ba --- /dev/null +++ b/common/src/main/resources/locale/nn_NO.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Side $current$ av $max$" + currently: For øyeblikket +errors: + argumentslength: "Antall argumenter samsvarer ikke riktig beløp!" + holodependencynotfound: "Kunne ikke finne $dependency$ for Hologram-statistikken" + packagenotfound: "Kunne ikke finne $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "Et spill med dette navnet finnes allerede." + gamenotfound: "Runden '$game$' kunne ikke bli funnet!" + nofreegames: "Det er ingen ledige spill tilgjengelige." + gamenotfoundsimple: "Spill ikke funnet!" + playeramount: "Maks antall spillere kan ikke være lavere enn 1 eller høyere enn 24!" + teamcolornotallowed: "Denne lag fargen er ikke tiltatt" + teamnamelength: "Lag navn må ha mellom 2 og 20 tegn!" + teamnotfound: "Team ikke funnet!" + notingame: "Du er ikke i et spill!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Spillet kjører ikke!" + bungeenoserver: "Bungeecord Servere har ikke blitt satt opp riktig! Snakk med en adminstrator!" + cantstartagain: "Spillet kjører! Du kan ikke starte et kjørende spill igjen!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "Du kan ikke bli med på ett spill som kjører eller har blitt stoppet!" + lobbyongameworld: "Lobbyen kan ikke være i spill verdenen!" + gamenotloaded: "Kunne ikke starte spillet!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "Ingen spill funnet!" + notenoughress: "Du har ikke nok resurser til å kjøpe denne gjenstanden!" + teamnameinuse: "Det lag navnet er allerede i bruk!" + minplayersmustnumber: "Minimum antall spillere må være ett tall!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "Du er ikke i luften!" + teamfull: "Laget er fullt, åpne lag menyen på nytt!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "Du må være i ett spill for å kaste ut en spiller!" + playernotingame: "Denne spilleren er ikke i dette spillet!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "Nytt spill '$game$' lagt til!" + teamadded: "Lag '$team$' lagt til!" + joined: "Du har blitt med i spillet!" + left: "Du har forlatt spillet!" + saved: "Spillet ble lagret!" + bedset: "Du satt respawn blokken til laget '$team$'!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Spillet ble stoppet!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Oppdatering vellykket!" + teamremoved: "Laget ble fjernet!" + gameremoved: "Spillet ble fjernet!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Minimum antall spillere angitt!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-statistikken fjernet!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "Du har ikke angitt noen ressurs spawnere!" + NO_LOBBY_SET: "Du har ikke angitt en lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Lag" + all: "Alle" + record: "&e$record$&a er rekorden på dette mappet!" + record-with-holders: '&aRekorden på dette mappet er &e$record$&a og er holdt av: $holders$' + newrecord: '&aTeam $team$&a har satt en ny rekord: &6$record$' + record-nobeddestroy: "&cRekorden blir ikke lagret, Siden ingen seng var ødelagt!" + teamwon: "Gratulerer! Team $team$ vant!" + draw: "Spillet ender uavgjort!" + serverrestart: "Serveren restarter om $sec$ sekund(er)!" + gamestarting: "Spillet starter..." + gamestarted: "Mappet '$game$' Har nettop startet!" + backtolobby: "Tilbake til lobby om $sec$ sekund(er)!" + spectator: "Tilskuer" + spectate: "&aSe på" + teamchest: "Lag kiste" + noturteamchest: "Dette er ikke en kiste av ditt team!" + protectionleft: "Usårbar i &c$length$&f sekund(er)!" + protectionend: "Du er nå &cvulnerable&f igjen!" + team-dead: "Team $team$ ble tilintetgjort!\n \n\n" + no-friendlybreak: "&cDu kan ikke ødlegge en blokk under lag-kammeraten din!" + teamchestdestroy: "&cEn av dine teamchest(s) har blitt ødelagt!" + title: + map-builder: "Bygget av $builder$" + win-title: "&rGratulerer!" + win-subtitle: "$team$&6 Vant på &e$time$" + shop: + name: "Askelakk's Kiosk" + newshop: "Bruk den nye shoppen" + oldshop: "Bruk den gamle shoppen" + fullstackpershift: "Multipliser stacks hver shift klikk" + onestackpershift: "En stack per shift klikk" + player: + left: "Spilleren $player$ forlot spillet!" + died: "$player$ døde..." + killed: "$killer$ drepte $player$!" + kicked: "$player$ ble kicket!" + waskicked: "Du ble kicket fra gamet!" + blocks: + ownbeddestroy: "Du kan ikke ødelegge din egen seng!" + beddestroyed: "$player$ Tilintetgjorde senga til $team$!" + specials: + rescue-platform: + left: "Det er &c$time$&f Sekund(er) igjen til du kan bruke rescue platform!" + arrow-blocker: + start: "Du er beskyttet mot piler i &c$time$&f sekund(er)." + end: "&cDin beskyttelse mot piler er over" + left: "Det er &c$time$&f sekund(er) igjen før du kan bruke den neste pilbeskyttelsen!" + trap: + trapped: "&eNoen gikk inn i &cfella&e til ditt team!" + protection-wall: + left: "Det er &c$time$&f sekund(er) igjen før du kan bruke den neste beskyttelses veggen!" + not-usable-here: "Du kan ikke bruke beskyttelses veggen her!" + warp-powder: + cancelled: "&cTeleportasjonen din ble avlyst!" + start: "Du vil bli teleportert om &c$time$&f sekund(er). Ikke rør deg!" + cancel: "&4Avbryt teleportasjon" + multiuse: "&cDu startet en teleportasjon allerede!" + tntsheep: + no-target-found: "Ingen fiende funnet!" + tracker: + no-target-found: "Ingen fiende funnet!" + target-found: "$player$ er $blocks$ blokk(er) unna deg." +lobby: + countdown: "Spillet starter om $sec$ sekund(er)!" + countdowncancel: "Flere spillere trengs. Nedtelling ble avbrutt!" + cancelcountdown: + not_enough_players: "Flere spillere trengs. Nedtelling avbrutt!" + not_enough_teams: "Flere lag trengs. Nedtelling avbrutt!" + cancelstart: + not_enough_players: "Flere spillere trengs for å starte gamet!" + not_enough_teams: "Flere lag trengs for å starte gamet!" + chooseteam: "Velg et lag" + startgame: "Start spillet" + reduce_countdown: "Reduser nedtelling" + gamefull: "Spillet er fullt!" + gamefullpremium: "Spillet er fullt av premium spillere allerede!" + teamjoined: "Du har vellykket joinet $team$ team" + leavegame: "Forlat spillet" + playerjoin: "Spiller $player$ ble med i spillet!" + kickedbyvip: "Du ble kicket av en vip eller premium spiller som joinet det fulle gamet!" + moreplayersneeded: "$count$ flere spillere trengs." + moreplayersneeded-one: "$count$ mer spiller trengs." + moreteamsneeded: "Minimum to spillere i to forskjellige teams trengs for å starte gamet!" +sign: + firstline: "&6[Bedwars]" + players: "Spillere" + gamestate: + stopped: "&Stoppet!" + waiting: "&aVenter ..." + running: "&9Kjører!" + full: "Fullt!" +stats: + header: "Bedwars stats" + kd: "K/D" + statsnotfound: "Statistikken til $player$ ble ikke funnet!" + name: "Navn" + kills: "Drap" + deaths: "Dødsfall" + wins: "Seire" + loses: "Tap" + score: "Poengsum" + destroyedBeds: "Ødelagte senger" + games: "Spill" +commands: + addgame: + name: "Legg til spill" + desc: "Legger til et nytt game" + addteam: + name: "Legg til lag" + desc: "Legger til et team til et spesifikt spillt" + join: + name: "Delta i spill" + desc: "Joins a specific game" + leave: + name: "Forlat Spillet" + desc: "Leave the current game" + save: + name: "Lagre Spillet" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Sett mål" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Angi lobbyen" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Angi spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start spillet" + desc: "Starter ett spill" + stop: + name: "Stopp spillet" + desc: "Stopper ett spill" + help: + name: "Vis hjelp" + desc: "Display information about the plugin and its commands" + reload: + name: "Oppdater" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Angi hovedlobbyen" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "Viser spill" + desc: "Viser alle tilgjengelige spill" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Fjern lag" + desc: "Fjerner ett lag fra spillet (bare i stoppet modus)" + removegame: + name: "Fjerne spillet" + desc: "Removes a game and every configuration" + clearspawner: + name: "Fjern spawnere" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Angi spilletid" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistikker" + desc: "Viser statistikken" + setbuilder: + name: "Angi bygger av kart" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Angi minimum spillere" + desc: "Angir hvor mange spillere som trengs for å starte spillet" + kick: + name: "Kast ut spiller" + desc: "Sparker en spiller fra spillet!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/no_NO.yml b/common/src/main/resources/locale/no_NO.yml new file mode 100644 index 0000000..e7023ba --- /dev/null +++ b/common/src/main/resources/locale/no_NO.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Side $current$ av $max$" + currently: For øyeblikket +errors: + argumentslength: "Antall argumenter samsvarer ikke riktig beløp!" + holodependencynotfound: "Kunne ikke finne $dependency$ for Hologram-statistikken" + packagenotfound: "Kunne ikke finne $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "Et spill med dette navnet finnes allerede." + gamenotfound: "Runden '$game$' kunne ikke bli funnet!" + nofreegames: "Det er ingen ledige spill tilgjengelige." + gamenotfoundsimple: "Spill ikke funnet!" + playeramount: "Maks antall spillere kan ikke være lavere enn 1 eller høyere enn 24!" + teamcolornotallowed: "Denne lag fargen er ikke tiltatt" + teamnamelength: "Lag navn må ha mellom 2 og 20 tegn!" + teamnotfound: "Team ikke funnet!" + notingame: "Du er ikke i et spill!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Spillet kjører ikke!" + bungeenoserver: "Bungeecord Servere har ikke blitt satt opp riktig! Snakk med en adminstrator!" + cantstartagain: "Spillet kjører! Du kan ikke starte et kjørende spill igjen!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "Du kan ikke bli med på ett spill som kjører eller har blitt stoppet!" + lobbyongameworld: "Lobbyen kan ikke være i spill verdenen!" + gamenotloaded: "Kunne ikke starte spillet!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "Ingen spill funnet!" + notenoughress: "Du har ikke nok resurser til å kjøpe denne gjenstanden!" + teamnameinuse: "Det lag navnet er allerede i bruk!" + minplayersmustnumber: "Minimum antall spillere må være ett tall!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "Du er ikke i luften!" + teamfull: "Laget er fullt, åpne lag menyen på nytt!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "Du må være i ett spill for å kaste ut en spiller!" + playernotingame: "Denne spilleren er ikke i dette spillet!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "Nytt spill '$game$' lagt til!" + teamadded: "Lag '$team$' lagt til!" + joined: "Du har blitt med i spillet!" + left: "Du har forlatt spillet!" + saved: "Spillet ble lagret!" + bedset: "Du satt respawn blokken til laget '$team$'!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Spillet ble stoppet!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Oppdatering vellykket!" + teamremoved: "Laget ble fjernet!" + gameremoved: "Spillet ble fjernet!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Minimum antall spillere angitt!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-statistikken fjernet!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "Du har ikke angitt noen ressurs spawnere!" + NO_LOBBY_SET: "Du har ikke angitt en lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Lag" + all: "Alle" + record: "&e$record$&a er rekorden på dette mappet!" + record-with-holders: '&aRekorden på dette mappet er &e$record$&a og er holdt av: $holders$' + newrecord: '&aTeam $team$&a har satt en ny rekord: &6$record$' + record-nobeddestroy: "&cRekorden blir ikke lagret, Siden ingen seng var ødelagt!" + teamwon: "Gratulerer! Team $team$ vant!" + draw: "Spillet ender uavgjort!" + serverrestart: "Serveren restarter om $sec$ sekund(er)!" + gamestarting: "Spillet starter..." + gamestarted: "Mappet '$game$' Har nettop startet!" + backtolobby: "Tilbake til lobby om $sec$ sekund(er)!" + spectator: "Tilskuer" + spectate: "&aSe på" + teamchest: "Lag kiste" + noturteamchest: "Dette er ikke en kiste av ditt team!" + protectionleft: "Usårbar i &c$length$&f sekund(er)!" + protectionend: "Du er nå &cvulnerable&f igjen!" + team-dead: "Team $team$ ble tilintetgjort!\n \n\n" + no-friendlybreak: "&cDu kan ikke ødlegge en blokk under lag-kammeraten din!" + teamchestdestroy: "&cEn av dine teamchest(s) har blitt ødelagt!" + title: + map-builder: "Bygget av $builder$" + win-title: "&rGratulerer!" + win-subtitle: "$team$&6 Vant på &e$time$" + shop: + name: "Askelakk's Kiosk" + newshop: "Bruk den nye shoppen" + oldshop: "Bruk den gamle shoppen" + fullstackpershift: "Multipliser stacks hver shift klikk" + onestackpershift: "En stack per shift klikk" + player: + left: "Spilleren $player$ forlot spillet!" + died: "$player$ døde..." + killed: "$killer$ drepte $player$!" + kicked: "$player$ ble kicket!" + waskicked: "Du ble kicket fra gamet!" + blocks: + ownbeddestroy: "Du kan ikke ødelegge din egen seng!" + beddestroyed: "$player$ Tilintetgjorde senga til $team$!" + specials: + rescue-platform: + left: "Det er &c$time$&f Sekund(er) igjen til du kan bruke rescue platform!" + arrow-blocker: + start: "Du er beskyttet mot piler i &c$time$&f sekund(er)." + end: "&cDin beskyttelse mot piler er over" + left: "Det er &c$time$&f sekund(er) igjen før du kan bruke den neste pilbeskyttelsen!" + trap: + trapped: "&eNoen gikk inn i &cfella&e til ditt team!" + protection-wall: + left: "Det er &c$time$&f sekund(er) igjen før du kan bruke den neste beskyttelses veggen!" + not-usable-here: "Du kan ikke bruke beskyttelses veggen her!" + warp-powder: + cancelled: "&cTeleportasjonen din ble avlyst!" + start: "Du vil bli teleportert om &c$time$&f sekund(er). Ikke rør deg!" + cancel: "&4Avbryt teleportasjon" + multiuse: "&cDu startet en teleportasjon allerede!" + tntsheep: + no-target-found: "Ingen fiende funnet!" + tracker: + no-target-found: "Ingen fiende funnet!" + target-found: "$player$ er $blocks$ blokk(er) unna deg." +lobby: + countdown: "Spillet starter om $sec$ sekund(er)!" + countdowncancel: "Flere spillere trengs. Nedtelling ble avbrutt!" + cancelcountdown: + not_enough_players: "Flere spillere trengs. Nedtelling avbrutt!" + not_enough_teams: "Flere lag trengs. Nedtelling avbrutt!" + cancelstart: + not_enough_players: "Flere spillere trengs for å starte gamet!" + not_enough_teams: "Flere lag trengs for å starte gamet!" + chooseteam: "Velg et lag" + startgame: "Start spillet" + reduce_countdown: "Reduser nedtelling" + gamefull: "Spillet er fullt!" + gamefullpremium: "Spillet er fullt av premium spillere allerede!" + teamjoined: "Du har vellykket joinet $team$ team" + leavegame: "Forlat spillet" + playerjoin: "Spiller $player$ ble med i spillet!" + kickedbyvip: "Du ble kicket av en vip eller premium spiller som joinet det fulle gamet!" + moreplayersneeded: "$count$ flere spillere trengs." + moreplayersneeded-one: "$count$ mer spiller trengs." + moreteamsneeded: "Minimum to spillere i to forskjellige teams trengs for å starte gamet!" +sign: + firstline: "&6[Bedwars]" + players: "Spillere" + gamestate: + stopped: "&Stoppet!" + waiting: "&aVenter ..." + running: "&9Kjører!" + full: "Fullt!" +stats: + header: "Bedwars stats" + kd: "K/D" + statsnotfound: "Statistikken til $player$ ble ikke funnet!" + name: "Navn" + kills: "Drap" + deaths: "Dødsfall" + wins: "Seire" + loses: "Tap" + score: "Poengsum" + destroyedBeds: "Ødelagte senger" + games: "Spill" +commands: + addgame: + name: "Legg til spill" + desc: "Legger til et nytt game" + addteam: + name: "Legg til lag" + desc: "Legger til et team til et spesifikt spillt" + join: + name: "Delta i spill" + desc: "Joins a specific game" + leave: + name: "Forlat Spillet" + desc: "Leave the current game" + save: + name: "Lagre Spillet" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Sett mål" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Angi lobbyen" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Angi spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start spillet" + desc: "Starter ett spill" + stop: + name: "Stopp spillet" + desc: "Stopper ett spill" + help: + name: "Vis hjelp" + desc: "Display information about the plugin and its commands" + reload: + name: "Oppdater" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Angi hovedlobbyen" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "Viser spill" + desc: "Viser alle tilgjengelige spill" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Fjern lag" + desc: "Fjerner ett lag fra spillet (bare i stoppet modus)" + removegame: + name: "Fjerne spillet" + desc: "Removes a game and every configuration" + clearspawner: + name: "Fjern spawnere" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Angi spilletid" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistikker" + desc: "Viser statistikken" + setbuilder: + name: "Angi bygger av kart" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Angi minimum spillere" + desc: "Angir hvor mange spillere som trengs for å starte spillet" + kick: + name: "Kast ut spiller" + desc: "Sparker en spiller fra spillet!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/oc_FR.yml b/common/src/main/resources/locale/oc_FR.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/oc_FR.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/pl_PL.yml b/common/src/main/resources/locale/pl_PL.yml new file mode 100644 index 0000000..eef0990 --- /dev/null +++ b/common/src/main/resources/locale/pl_PL.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Strona $current$ na $max$" + currently: Obecnie +errors: + argumentslength: "Bledna ilosc argumentow!" + holodependencynotfound: "Nie mogłem znaleźć $dependency$ dla Hologram-Statystyka" + packagenotfound: "Nie mogłem pobrać $package$ $package!" + classnotfound: "Nie mogłem pobrać $package$ class $class$!" + gameexists: "Gra o tej nazwie już istnieje!" + gamenotfound: "Nie można znaleźć gry '$game$ '!" + nofreegames: "Nie znaleziono wolnych gier." + gamenotfoundsimple: "Gra nie zostala odnaleziona!" + playeramount: "Liczba graczy nie może być mniejsza od 1 i większa niż 24!" + teamcolornotallowed: "Dany kolor drużyny nie jest dozwolone kolor" + teamnamelength: "Nazwa zespołu musi mieć od 2 do 20 znaków!" + teamnotfound: "Nie znaleziono drużyny!" + notingame: "Nie jesteś obecnie w grze!" + bedtargeting: "Musisz nacelowac lub stanac na bloku skonfigurowanego jako typ 'game-block'!" + regionargument: "Twój argument lokalizacji ma być 'loc1' lub 'loc2'!" + spawnerargument: "Parametr surowca musi byc skonfigurowany!" + blockdownnotfound: "Blok na którym stoisz nie został znaleziony!" + gamenotrunning: "Gra nie wystartowala!" + bungeenoserver: "Bungeecord serwera nie był ustawiony prawidłowo! Zgłoś to administratorowi serwera!" + cantstartagain: "Gra jest uruchomiona! Nie można uruchomić ponownie uruchomiony gry!" + startoutofwaiting: "Gra powinna być uruchamiana z trybu oczekiwania!" + cantjoingame: "Nie mozesz dolaczyc do wystartowanej / zatrzymanej areny!" + lobbyongameworld: "Lobby nie moze byc w swiecie gry!" + gamenotloaded: "Nie udalo sie wystartowac gry!" + gameloaderror: "Ładowanie gry '$game$ ' zgłasza błąd!" + regionnotfound: "Plik nie istnieje!" + savesign: "Nie można utworzyć nowego pliku konfiguracyjnego!" + nogames: "Nie znaleziono zadnych gier!" + notenoughress: "Nie masz wystarczająco dużo środków aby kupić ten przedmiot!" + teamnameinuse: "Nazwa drużyny jest już używana!" + minplayersmustnumber: "Minimum graczy musi być określone liczba!" + toolongregionname: "Maksymalna długość nazwy regionu to 15 znaków!" + notwhilegamerunning: "Nie można tego zrobić po uruchomieniu gry!" + notwhileingame: "Nie można tego zrobić będąc w uruchomionej grze!" + timeincorrect: "Czas musi być liczbą (0... 23000), 'dzień' lub 'noc'!" + minplayersnumeric: "Minimalna ilość graczy musi być liczbą!" + notinair: "Nie jesteś w powietrzu!" + teamfull: "Zespół jest pełny, należy ponownie otworzyć menu wyboru druzyny!" + novalidmaterial: "Dawany typ bloku (materialu) nie jest poprawny!" + wrongvalueonoff: "Nieprawidłowego parametru! Użyj wartości true, na 1, aby włączyć - Użyj false, wył, 0 Aby wyłączyć!" + playernotfound: "Podany gracz nie jest online!" + notingameforkick: "Musisz byc w grze, aby wyrzucic gracza!" + playernotingame: "Dany gracz nie jest w tej grze!" + mustbeinlobbyworld: "Musisz być w świecie gdzie znajduje się lobby" + addteamjoincancel: "Dodawanie druzyny zostało anulowane!" + entitynotcompatible: "Ten podmiot nie jest zgodny z drużyny dołączonej!" +success: + gameadded: "Nowa gra '$game$ ' pomyślnie dodana!" + teamadded: "Zespół '$team$ ' pomyślnie dodany!" + joined: "Pomyślnie dołączyłeś do gry!" + left: "Pomyślnie opuściłeś grę!" + saved: "Gra została pomyślnie zapisana!" + bedset: "Pomyślnie ustawiłeś blok respawnu dla zespołu $team$!" + regionset: "Regionu gry lokalizacji $location$ dla gry $game$ został ustawiona pomyślnie!" + spawnset: "Spawn dla drużyny $team$ ustawiony pomyślnie!" + spawnerset: "Miejsce odradzania dla $name$ został ustawiony pomyślnie!" + stopped: "Gra pomyślnie zatrzymana!" + lobbyset: "Lobby zostalo pomyslnie ustawione!" + gameloaded: "Gra '$game$ ' pomyślnie załadowana!" + reloadconfig: "Pomyslnie przeladowano!" + teamremoved: "Zespół został pomyślnie usunięty!" + gameremoved: "Gra zostala pomyslnie usunieta!" + spawnercleared: "Wszystkie spawnery przedmiotow zostaly usuniete!" + gamerun: "Uruchomiles gre, gracze moga od teraz dolaczac!" + timeset: "Czas gry zostal pomyslnie ustawiony!" + regionnameset: "Nazwa regionu zostala pomyslnie ustawiona!" + minplayersset: "Minimalna liczba graczy zostala pomyslnie ustawiona!" + mainlobbyset: "Lobby glowne zostalo pomyslnie ustawione!" + gametimeset: "Czas gry zostal pomyslnie ustawiony!" + materialset: "Blok respawnu (materiał) została ustawiona pomyślnie!" + builderset: "Budowniczy dla mapy została ustawiona pomyślnie i będą wyświetlane w tytule!" + autobalanceseton: "Autobalans zespolow włączony!" + autobalancesetoff: "Balansowanie zespolow zostalo wylaczone!" + selectteamjoinentity: "Teraz kliknij prawym przyciskiem myszy na obiekt który chcesz użyć jako dołączanie do drużyn!" + teamjoinadded: "Jednostka została pomyślnie oznaczony jako wybór zespołu $team$" + holoremoved: "Statystyki Hologramów pomyślnie usunięte!" +gamecheck: + LOC_NOT_SET_ERROR: "Lokalizacje dla regionu nie były prawidłowe!" + TEAM_SIZE_LOW_ERROR: "Musisz ustawić więcej zespołów!" + NO_RES_SPAWNER_ERROR: "Nie ustawiono żadnych spawnerów przedmiotów!" + NO_LOBBY_SET: "Nie ustawiles lobby!" + TEAMS_WITHOUT_SPAWNS: "Istnieją zespoły bez miejsca spawnu!" + NO_ITEMSHOP_CATEGORIES: "Nie znaleziono kategorii w itemshopie!" + NO_MAIN_LOBBY_SET: "Nie ustawisz głównego lobby ponieważ 'tomainlobby' nie ustawiłeś na true" + TEAM_NO_WRONG_BED: "Jedno lub więcej drużyn nie ma ustawionego łóżka!" + TEAM_NO_WRONG_TARGET: "Jedna lub więcej drużyn nie ma ustawionego spawnu!" +ingame: + team: "Zespół" + teams: "Zespoły" + all: "Wszystkie" + record: "&e$record$&a To jest aktualny rekord mapy!" + record-with-holders: '&aRekord czasu tej mapy wynosi &e$record$&a i jest ustanowiony przez $holders$' + newrecord: '&aDrużyna $team$&a ustanowiła nowy rekord: &6$record$' + record-nobeddestroy: "&cRekord nie może być zapisany, ponieważ łóżko nie zostało zniszczone!" + teamwon: "Gratulacje! Druzyna $team$ wygrala!" + draw: "Gra zakonczyla sie remisem!" + serverrestart: "Restart serwera za $sec$ sekund!" + gamestarting: "Rozpoczynanie gry..." + gamestarted: "Gra '$game$' wystartowała!" + backtolobby: "Wroc do lobby za $sec$ sekund!" + spectator: "Obserwatorzy" + spectate: "Obserwuj" + teamchest: "Skrzynia druzynowa" + noturteamchest: "Ta skrzynia nie jest skrzynia twojej druzyny!" + protectionleft: "Jesteś nietykalny przez &c$length$&f sekund!" + protectionend: "Jesteś teraz &cvulnerable&f ponownie!" + team-dead: "Drużyna $team$ została zniszczona!" + no-friendlybreak: "&cNie możesz rozwalić bloku pod twoim przyjacielem z drużyny!" + teamchestdestroy: "&cJedna z twoich drużynowych skrzyń została zniszczona!" + title: + map-builder: "Zbudowane przez $builder$" + win-title: "&6Gratulacje!" + win-subtitle: "$team$&6 wygrali w czasie &e$time$" + shop: + name: "Itemshop" + newshop: "Użyj nowego sklepu" + oldshop: "Użyj starego sklepu" + fullstackpershift: "Pomnóż stosy kliknięć shift" + onestackpershift: "Jeden stoj na kliknięcie shift" + player: + left: "Gracz $player$ wyszedł z gry!" + died: "$player$ zginął!" + killed: "$killer$ zabił $player$!" + kicked: "$player$ został wyrzucony!" + waskicked: "Zostałeś wyrzucony z gry!" + blocks: + ownbeddestroy: "Nie możesz zniszczyć własnego łóżka!" + beddestroyed: "$player$ zniszczył łóżko drużyny $team$!" + specials: + rescue-platform: + left: "Zostało &c$time$&f sekund przed ponownym użyciem platformy ratowniczej!" + arrow-blocker: + start: "Jesteś chroniony przed uderzeniem strzał na &c$time$&f sekund." + end: "&cTwoja ochrona przeciwko strzałom została zakończona" + left: "Pozostało &c$time$&f sekund przed ponownym użyciem ochrony przed strzałami!" + trap: + trapped: "&eKtoś z twojej drużyny wpadł do &cpułapki!" + protection-wall: + left: "Pozostało &c$time$&f sekund przed ponownym użyciem ściany chroniącej!" + not-usable-here: "Nie możesz użyć ściany ochronnej tutaj!" + warp-powder: + cancelled: "&cTwoja teleportacja została anulowana!" + start: "Zostaniesz przeteleportowany za &c$time$&f sekund. Nie ruszaj się!" + cancel: "&4Teleportacja anulowana" + multiuse: "&cJuż rozpocząłeś teleportację!" + tntsheep: + no-target-found: "Nie znaleziono gracza na cel!" + tracker: + no-target-found: "Nie znaleziono gracza na cel!" + target-found: "$player$ jest $blocks$ blok(ów) od ciebie." +lobby: + countdown: "Gra zacznie się za $sec$ sekund!" + countdowncancel: "Za malo graczy. Odliczanie wstrzymane!" + cancelcountdown: + not_enough_players: "Za malo graczy. Odliczanie wstrzymane!" + not_enough_teams: "Za malo druzyn. Odliczanie wstrzymane!" + cancelstart: + not_enough_players: "Jest potrzebna większa ilość graczy aby rozpocząć grę!" + not_enough_teams: "Jest potrzebna większa ilość drużyn aby rozpocząć grę!" + chooseteam: "Wybierz druzyne" + startgame: "Rozpocznij grę" + reduce_countdown: "Zmniejsz czas odliczania" + gamefull: "Gra jest pełna!" + gamefullpremium: "Ta gra jest już pełna graczami premium!" + teamjoined: "Dolaczyles do druzyny $team$" + leavegame: "Opuść grę" + playerjoin: "Gracz $player$ dolaczyl do gry!" + kickedbyvip: "Zostałeś wyrzucony przez gracza Vip, który dołączył do gry!" + moreplayersneeded: "Oczekiwanie na jeszcze $count$ graczy." + moreplayersneeded-one: "Oczekiwanie na jeszcze $count$ gracza." + moreteamsneeded: "Jest potrzebne minimum dwóch graczy w dwóch różnych drużynach aby rozpocząć grę!" +sign: + firstline: "&6[Bedwars]" + players: "Gracze" + gamestate: + stopped: "&4Zatrzymano!" + waiting: "&aOczekiwanie..." + running: "&9Uciekać!" + full: "Pełen!" +stats: + header: "Statystyki BedWars" + kd: "K/D" + statsnotfound: "Statystyki gracza $player$ nie znalezione!" + name: "Nick" + kills: "Zabicia" + deaths: "Smierci" + wins: "Wygrane" + loses: "Przegrane" + score: "Punkty" + destroyedBeds: "Zniszczone łóżka" + games: "Gry" +commands: + addgame: + name: "Dodaj gre" + desc: "Dodaj nową grę" + addteam: + name: "Dodaj druzyne" + desc: "Dodaj druzyne do gry" + join: + name: "Dolacz do gry" + desc: "Dołącza do określonej gry" + leave: + name: "Opuść grę" + desc: "Wyjdź z aktualnej gry" + save: + name: "Zapisz gre" + desc: "Zapisz gre (rowniez mape)" + settarget: + name: "Ustaw cel" + desc: "Ustawia lokalizacje docelowej drużyny" + setbed: + name: "Ustaw łóżko (synonim settarget)" + desc: "Ustaw lokalizacje łóżka drużyny (Synonim settarget)" + setlobby: + name: "Ustaw lobby" + desc: "Ustaw lokalizacje lobby gry" + setregion: + name: "Ustaw punkt regionu" + desc: "Ustaw region dla tej gry" + setspawn: + name: "Ustaw spawn drużyny" + desc: "Ustaw spawn danej drużyny" + setspawner: + name: "Ustaw spawner" + desc: "Ustaw spawner dla konkretnego itemu" + start: + name: "Rozpocznij grę" + desc: "Gra się rozpoczyna" + stop: + name: "Zatrzymaj grę" + desc: "Zatrzymuje grę" + help: + name: "Pokaż Pomoc" + desc: "Wyświetl informacje o pluginie i jego komendy" + reload: + name: "Przeładuj" + desc: "Przeładuj konfiguracje i tłumaczenie" + setmainlobby: + name: "Ustaw główne lobby" + desc: "Ustaw główne lobby gry (Wymagane jest mainlobby-enabled ustawione na true)" + list: + name: "Lista gier" + desc: "Lista wszystkich dostępnych gier" + regionname: + name: "Ustaw nazwę regionu" + desc: "Ustaw indywidualną nazwę regionu (zamiast nazwy świata)" + removeteam: + name: "Usuń drużynę" + desc: "Usuń drużynę z gry (tylko w trybie zatrzymania)" + removegame: + name: "Usuń grę" + desc: "Usuń grę i całą konfigurację" + clearspawner: + name: "Wyczyść miejsca pojawiania się" + desc: "Usuń wszystkie miejsca pojawiania się z gry. Konieczny zapis." + gametime: + name: "Ustaw czas gry" + desc: "Ustaw czas gry, który powinien być użyty w świecie gry" + stats: + name: "Statystyki" + desc: "Pokaż twoje statystyki" + setbuilder: + name: "Ustaw budowniczego mapy" + desc: "Ustaw budowniczego mapy, który zostanie wyświetlony w tytule, gdy wystartuje gra." + setgameblock: + name: "Ustaw blok gry" + desc: "Ustaw typ bloku gry, który powinien być użyty zamiast konfiguracji 'game-block'. Napisz 'DEFAULT' jako typ by ponownie użyć typu konfiguracji" + setautobalance: + name: "Ustaw automatyczny stan konta" + desc: "Jeżeli 'global-autobalance' jest 'false', z tą komendą możesz ustawić włączoną lub wyłączoną team-autobalance na grę!" + setminplayers: + name: "Ustaw minimalna ilosc graczy" + desc: "Ustaw ilość graczy potrzebnych do startu gry" + kick: + name: "Wyrzuc gracza" + desc: "Wyrzuć graczy z tej gry!" + addteamjoin: + name: "Dodaj wybór drużyny" + desc: "Stwórz istotę, która może być użyta aby dołączyć do konkretnej drużyny!" + addholo: + name: "Dodaj lokalizację hologramu" + desc: "Hologramowe statystyki zostały dodane do tej lokalizacji!" + removeholo: + name: "Usuń lokalizację hologramu" + desc: "Kiedy ta komenda zostanie wykonana, gracz może kliknąć prawym przyciskiem myszki na hologram aby go usunąć." + explain: "Kliknij lewym przyciskiem myszki w ciągu 10 sekund na hologram, aby go usunąć." + debugpaste: + name: "Paste debug data" + desc: "To będzie wysyłać dane debugowania do hastebin i zwróci link który możesz udostępnić deweloperom" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/pt_BR.yml b/common/src/main/resources/locale/pt_BR.yml new file mode 100644 index 0000000..14b5a3d --- /dev/null +++ b/common/src/main/resources/locale/pt_BR.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Página $current$ de $max$" + currently: Atualmente +errors: + argumentslength: "O número de argumentos não é válido!" + holodependencynotfound: "Não foi encontado o $dependency$ para as estatísticas nos hologramas" + packagenotfound: "Não foi possível obter o pacote $package$!" + classnotfound: "Não foi possível encontar $package$ na classe $class$!" + gameexists: "Uma sala já possui este nome!" + gamenotfound: "A sala '$game$' não foi encontrada!" + nofreegames: "Nenhuma partida iniciada." + gamenotfoundsimple: "Sala desconhecida!" + playeramount: "O máximo de jogadores não pode ser inferior a 1 ou superior a 24!" + teamcolornotallowed: "A cor para a equipe colocada não é válida" + teamnamelength: "O nome da equipe deve ter entre 2 e 20 caracteres!" + teamnotfound: "Time não encontrado!" + notingame: "Você não está em uma sala!" + bedtargeting: "Você deve olhar ou ficar sobre um 'bloco da partida'!" + regionargument: "A localização dada deve ser 'loc1' ou 'loc2'!" + spawnerargument: "O recurso usado deve estar configurado!" + blockdownnotfound: "O bloco em que você está parado não foi encontrado!" + gamenotrunning: "A partida não está iniciada!" + bungeenoserver: "Servidores Bungeecord não foram definidos corretamente. Avise um membro da equipe!" + cantstartagain: "A partida já começou. Não é possível iniciar novamente!" + startoutofwaiting: "O jogo precisa ser iniciado no modo de espera!" + cantjoingame: "Você não pode participar de um jogo iniciado ou cancelado!" + lobbyongameworld: "O lobby não pode estar no mundo das partidas!" + gamenotloaded: "Não foi possível iniciar o jogo!" + gameloaderror: "Enquanto carregava o jogo '$game$' ocorreu um erro!" + regionnotfound: "Região dada não existe!" + savesign: "Não foi possível criar um novo arquivo de configuração de placas!" + nogames: "Sala/partida desconhecida!" + notenoughress: "Você não possui coins suficientes para comprar!" + teamnameinuse: "Nome do time já está sendo usado!" + minplayersmustnumber: "O mínimo de jogadores deve ser um número!" + toolongregionname: "O tamanho do nome da região é de no máximo 15 caracteres!" + notwhilegamerunning: "Não é possível fazer isso enquanto joga!" + notwhileingame: "Não é possível fazer isso enquanto está numa partida!" + timeincorrect: "O tempo deve ser um número (de 0 até 23000) ou 'day'/'night'!" + minplayersnumeric: "O mínimo de jogadores deve ser um número!" + notinair: "Você não está no ar!" + teamfull: "Este time está cheio, escolha outro no menu!" + novalidmaterial: "O tipo de bloco (item) dado não está correto!" + wrongvalueonoff: "Parâmetro incorreto! Use o 'true' para ligar ou 'false' para desativar!" + playernotfound: "Jogador não encontrado!" + notingameforkick: "Você deve estar na partida para kickar o jogador!" + playernotingame: "Jogador não está em uma partida!" + mustbeinlobbyworld: "Você deve estar no mundo do lobby do jogo" + addteamjoincancel: "A adição da equipe foi cancelada!" + entitynotcompatible: "Esta entidade não é compatível com a equipe!" +success: + gameadded: "Nova sala '$game$' adicionada com sucesso!" + teamadded: "Time '$team$' adicionado com sucesso!" + joined: "Você entrou na sala!" + left: "Você saiu da sala!" + saved: "Sala salva com sucesso!" + bedset: "Definido com sucesso o bloco de respawn do time $team$!" + regionset: "Área do jogo $game$ definido para $location$!" + spawnset: "Área de spawn do time $team$ definida!" + spawnerset: "Forja de recursos $name$ definida com sucesso!" + stopped: "Partida cancelada!" + lobbyset: "Lobby definido com sucesso!" + gameloaded: "Sala '$game$' carregada com sucesso!" + reloadconfig: "Sistema do Bedwars recarregado!" + teamremoved: "O time foi removido com sucesso!" + gameremoved: "A sala foi removida com sucesso!" + spawnercleared: "Todas forjas de recursos removida com sucesso!" + gamerun: "Você iniciou uma sala, jogadores podem entrar!" + timeset: "Tempo de jogo foi definido com sucesso!" + regionnameset: "Nome da área definido com sucesso!" + minplayersset: "O mínimo de jogadores definido!" + mainlobbyset: "O Lobby principal foi definido!" + gametimeset: "O tempo do jogo foi definido com sucesso!" + materialset: "O tipo do bloco de respawn (material) foi definido!" + builderset: "O construtor do mapa foi definido e vai aperecer no título do jogo!" + autobalanceseton: "Saldo automático foi ativado com sucesso!" + autobalancesetoff: "Saldo automático agora de &coff&a!" + selectteamjoinentity: "Clique com o botão direito no npc para escolher o time!" + teamjoinadded: "Entidade definida como seleção de equipe para o time $team$" + holoremoved: "Holograma de estatísticas removido!" +gamecheck: + LOC_NOT_SET_ERROR: "Locais para a região não foram definidas corretamente!" + TEAM_SIZE_LOW_ERROR: "Você tem que definir mais times!" + NO_RES_SPAWNER_ERROR: "Você não definiu a forja de recursos!" + NO_LOBBY_SET: "Você não definiu um lobby!" + TEAMS_WITHOUT_SPAWNS: "Alguns respawns de times não foram definidos!" + NO_ITEMSHOP_CATEGORIES: "Nenhuma categoria da loja de itens encontrada!" + NO_MAIN_LOBBY_SET: "Você não definir um lobby principal, mesmo que você definiu para true o 'tomainlobby'" + TEAM_NO_WRONG_BED: "Uma ou mais times não tem cama(s) definida(s)!" + TEAM_NO_WRONG_TARGET: "Um ou mais times não tem nenhum bloco de respawn definido!" +ingame: + team: "Time" + teams: "Times" + all: "Todos" + record: "&e$record$&a foi o tempo recorde deste mapa!" + record-with-holders: '&aO recorde deste mapa &e$record$&a e foi feito por: $holders$' + newrecord: '&aO time $team$&a realizou um novo recorde: &6$record$ Parabéns' + record-nobeddestroy: "&cRecorde não será salvo, porque a cama não foi destruída!" + teamwon: "Parabéns ao vencedor: Time $team$!" + draw: "A partida acabou empatado!" + serverrestart: "O servidor irá reiniciar em $sec$ segundos(s)!" + gamestarting: "Partida iniciando..." + gamestarted: "A partida '$game$' acabou de começar!" + backtolobby: "Retornando ao lobby em $sec$ segundo(s)!" + spectator: "Espectador" + spectate: "&aEspectador" + teamchest: "Baú do time" + noturteamchest: "Este baú não é de sua equipe!" + protectionleft: "Invulnerável por &c$length$&f segundo(s)!" + protectionend: "Agora você está &cvulnerable&f novamente!" + team-dead: "Time $team$ teve sua cama destruída!" + no-friendlybreak: "&cNão é possível quebrar este bloco!" + teamchestdestroy: "Um dos seus membros da equipe foi eliminado!" + title: + map-builder: "Construído por $builder$" + win-title: "&6Parabéns!" + win-subtitle: "Time $team$&6 ganhou em &c$time$" + shop: + name: "Loja de itens" + newshop: "Use a nova loja" + oldshop: "Use a antiga loja" + fullstackpershift: "Para comprar o dobro, clique com shift" + onestackpershift: "Para comprar 64 deste item, clique com shift" + player: + left: "$player$ saiu da partida!" + died: "$player$ morreu sozinho!" + killed: "$killer$ foi morto por $player$!" + kicked: "$player$ foi removido da partida!" + waskicked: "Você foi removido da partida!" + blocks: + ownbeddestroy: "Hey! Não é possível quebrar sua cama!" + beddestroyed: "$player$ destruiu a cama do time $team$!" + specials: + rescue-platform: + left: "O time &c$time$&f possui alguns segundos para retornar!" + arrow-blocker: + start: "Você está protegido de ser atingido por flechas por &c$time$&f segundo(s)." + end: "&cSua proteção contra flechas acabou" + left: "O time &c$time$&f possui alguns segundos para usar o próximo anti-flechas!" + trap: + trapped: "&eAlguém caiu em sua armadilha &ctrap&e!" + protection-wall: + left: "Existem &c$time$&f segundo(s) para que você possa usar a parede de proteção!" + not-usable-here: "Você não pode usar a parede de proteção aqui!" + warp-powder: + cancelled: "&cSeu teletransporte foi cancelado!" + start: "Você será teleportado em &c$time$&f segundo(s). Não se mexa!" + cancel: "&4Calcele o teleporte" + multiuse: "&cYou já começou um teletransporte!" + tntsheep: + no-target-found: "Nenhum jogador alvo foi encontrado!" + tracker: + no-target-found: "Nenhum jogador alvo foi encontrado!" + target-found: "$player$ está a $blocks$ blocos de você." +lobby: + countdown: "A partida iniciará em $sec$ segundo(s)!" + countdowncancel: "São necessários mais jogadores, contador cancelado!" + cancelcountdown: + not_enough_players: "São necessários mais jogadores, contador cancelado!" + not_enough_teams: "São necessários mais times, contador cancelado!" + cancelstart: + not_enough_players: "São necessários mais jogadores para a partida iniciar!" + not_enough_teams: "São necessários mais times para a partida iniciar!" + chooseteam: "Escolha o time" + startgame: "Iniciar o jogo" + reduce_countdown: "Reduzir a contagem regressiva" + gamefull: "Sala cheia!" + gamefullpremium: "O jogo já está cheio de jogadores premium!" + teamjoined: "Você juntou-se com ao time $team$" + leavegame: "Deixar sala" + playerjoin: "O jogador $player$ entrou na sala!" + kickedbyvip: "Você foi removido da sala para dar o lugar a um Vip!" + moreplayersneeded: "$count$ jogadores necessários." + moreplayersneeded-one: "$count$ jogadores necessários." + moreteamsneeded: "Um mínimo de dois jogadores em dois times diferentes é necessário para iniciar o jogo!" +sign: + firstline: "&6[Bedwars]" + players: "Jogadores" + gamestate: + stopped: "&4Cancelado!" + waiting: "&aAguardando..." + running: "&9Em jogo!" + full: "Lotado!" +stats: + header: "Estatisticas do Bedwars" + kd: "Kdr" + statsnotfound: "Estatísticas para $player$ não foram encontradas!" + name: "Nome" + kills: "Abates" + deaths: "Mortes" + wins: "Vitórias" + loses: "Perdeu" + score: "Resultados" + destroyedBeds: "Camas destruídas" + games: "Jogos" +commands: + addgame: + name: "Adicionar o jogo" + desc: "Adiciona um novo jogo" + addteam: + name: "Adiciona um time" + desc: "Adiciona um novo time num determinado mapa" + join: + name: "Entre na sala" + desc: "Junta-se um jogo específico" + leave: + name: "Deixar sala" + desc: "Deixar o jogo atual" + save: + name: "Salvar jogo" + desc: "Salva um jogo (e o mapa) nos arquivo(s)" + settarget: + name: "Definir o destino" + desc: "Define a localização do bloco de destino de um time" + setbed: + name: "Define uma cama (ou respawn)" + desc: "Define a localização do bloco de uma equipe cama (sinônimo para settarget)" + setlobby: + name: "Define o lobby" + desc: "Define a localização do lobby na sala" + setregion: + name: "Define um ponto da região" + desc: "Define um ponto da região para o jogo" + setspawn: + name: "Define um spawn de equipe" + desc: "Define o spawn de um determinado time" + setspawner: + name: "Define o spawner" + desc: "Define uma localização spawner de forja de recursos específica" + start: + name: "Iniciar o jogo" + desc: "Começa o jogo" + stop: + name: "Para o jogo" + desc: "Para um jogo" + help: + name: "Mostra ajuda" + desc: "Da a informação sobre o plugin e seus comandos" + reload: + name: "Recarregar" + desc: "Recarrega as configurações e traduções" + setmainlobby: + name: "Define o lobby principal" + desc: "Define o lobby principal de um jogo (é necessário que deixe mainlobby como true)" + list: + name: "Lista de salas" + desc: "Lista de salas disponíveis" + regionname: + name: "Define o nome da região" + desc: "Define um nome de região individual (em vez do nome do mundo)" + removeteam: + name: "Remove um time" + desc: "Remove uma equipe de jogo (apenas no modo parado)" + removegame: + name: "Remove uma sala" + desc: "Remove uma sala e todas suas configurações" + clearspawner: + name: "Limpa os spawners" + desc: "Remove todos os spawners da sala. Salvar será necessário." + gametime: + name: "Define o tempo de partida" + desc: "Define o tempo de jogo que deve ser usado em todas salas" + stats: + name: "Estatísticas" + desc: "Mostra as suas estatísticas" + setbuilder: + name: "Define o construtor do mapa" + desc: "Define o construtor do mapa, que estará em exibição no título quando a partida começa." + setgameblock: + name: "Define o bloco de jogo" + desc: "Define o tipo de bloco de jogo para esta partida que deve ser usado em vez da configuração de 'game-block'. Escreva 'DEFAULT' para usar o tipo padrão novamente" + setautobalance: + name: "Define saldo automático" + desc: "Se 'global-autobalance' é definido como 'false', com este comando que você pode definir o saldo para o time por partida para ligar ou desligar!" + setminplayers: + name: "Definie o mínimo de jogadores" + desc: "Define a quantidade de jogadores necessários para iniciar uma partida" + kick: + name: "Remove/kicka um jogador" + desc: "Remove/kicka um jogador da partida atual!" + addteamjoin: + name: "Adiciona a seleção de times" + desc: "Marca uma criatura que pode ser usada para participar de um time específico!" + addholo: + name: "Adiciona na localização um holograma" + desc: "Um holograma de estatísticas será adicionado na posição atual!" + removeholo: + name: "Remove na localização o holograma" + desc: "Quando o comando for executado, o jogador pode clicar com o botão direito no holograma que será removido." + explain: "Execute um clique esquerdo em 10 segundos no holograma que deseja remover." + debugpaste: + name: "Colar dados de depuração" + desc: "Isto irá enviar alguns dados de debug para hastebin e retorna um link que você pode compartilhar com desenvolvedores" + itemspaste: + name: "Cole seu inventário para um arquivo" + desc: "Isso retornará um link onde você pode ver seu inventário atual que será usado como um exemplo para seu shop.yml" diff --git a/common/src/main/resources/locale/pt_PT.yml b/common/src/main/resources/locale/pt_PT.yml new file mode 100644 index 0000000..33d12db --- /dev/null +++ b/common/src/main/resources/locale/pt_PT.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Paginas $current$ de $max$" + currently: Currentes +errors: + argumentslength: "Número de argumentos não coincide com a quantidade correta!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Nao foi possivel obter $package$ package!" + classnotfound: "Nao foi possivel obter $package$ class $class$!" + gameexists: "Um jogo com este nome já existe!" + gamenotfound: "O jogo '$game$' não pôde ser encontrado!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Jogo nao encontrado!" + playeramount: "O maximo de jogadores não pode ser inferior a 1 ou superior a 24,!" + teamcolornotallowed: "A determinada cor da equipe não é uma cor permitida" + teamnamelength: "O nome da equipe deve ter entre 2 e 20 caracteres!" + teamnotfound: "Team nao encontrada!" + notingame: "Não está atualmente em um jogo!" + bedtargeting: "Você tem que direcionar ou ficar em um bloco do 'jogo-bloco' tipo configurado!" + regionargument: "Seu argumento localização tem de ser\" LOC1 'ou' LOC2 '!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "O bloco que você está em pé não foi encontrado!" + gamenotrunning: "O jogo não está a funcionar" + bungeenoserver: "Servidores Bungeecord não foram definidos corretamente .Converse com o administrador do servidor!" + cantstartagain: "O jogo ja comecou .Não pode iniciar um jogo de novo!" + startoutofwaiting: "O jogo tem que ser iniciado fora do modo de espera!" + cantjoingame: "Nao podes entrar num jogo que ja comecou ou que esta parado" + lobbyongameworld: "Lobby não pode estar no mundo do jogo!" + gamenotloaded: "Não foi possível iniciar o jogo!" + gameloaderror: "Enquanto carregava o jogo '$game$' levou a um erro!" + regionnotfound: "O arquivo da regiao nao existe!" + savesign: "Não foi possível criar um novo arquivo de configuração sinal!" + nogames: "Nenhum jogo encontrado!" + notenoughress: "Não tens ressource suficiente para comprar este item!" + teamnameinuse: "O nome dessa team ja esta em uso" + minplayersmustnumber: "O minimo de players tem de ser um numero" + toolongregionname: "O comprimento máximo do nome da região estão 15 caracteres!" + notwhilegamerunning: "Não é possível fazer isso enquanto jogo está sendo executado!" + notwhileingame: "Não é possível fazer isso enquanto estas num jogo que ja comecou" + timeincorrect: "O tempo tem que ser um número (0 ... 23000), 'dia' ou 'noite'!" + minplayersnumeric: "O parâmetro mínimo de-jogadores deve ser numérico!" + notinair: "Nao estas no ar" + teamfull: "A equipa está completa, por favor reabre o menu de selecção de equipas!" + novalidmaterial: "Tipo de bloco dado (material) nao esta correto!" + wrongvalueonoff: "Parametro errado! Usa true,em,1 para ativar - Usa false,em,0 para desativar!" + playernotfound: "Dado jogador não foi encontrado ou não está on-line!" + notingameforkick: "Deves estar em jogo para kickares um jogador" + playernotingame: "Dado jogador nao esta no jogo!" + mustbeinlobbyworld: "You must be in the lobby world of the game!" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "Novo jogo '$game$' adicionado com sucesso" + teamadded: "Team '$team$' adicionada com sucesso" + joined: "Entraste no jogo!" + left: "Saiste do jogo!" + saved: "O jogo foi salvado com sucesso" + bedset: "Setaste o bloco de respawn com sucesso na team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "O spawn da team $team$ foi setado com sucesso" + spawnerset: "O spawn da ressource $name$ foi adicionada com sucesso!" + stopped: "O jogo foi parado com sucesso!" + lobbyset: "Lobby foi setado com sucesso!" + gameloaded: "O jogo '$game$' foi carregado com sucesso!" + reloadconfig: "Reload com sucesso!" + teamremoved: "Team foi removida com sucesso!" + gameremoved: "O jogo foi removido com sucesso" + spawnercleared: "Todas as ressources foram removidas" + gamerun: "Iniciaste o jogo, agora os jogadores podem entrar!" + timeset: "O tempo do jogo foi setado com sucesso!" + regionnameset: "O nome da regiao foi definido" + minplayersset: "O minimo de players foram setados" + mainlobbyset: "O Mainlobby foi setado" + gametimeset: "O tempo do jogo foi setado!" + materialset: "O tipo do bloco de respawn (material) foi definido!" + builderset: "O builder do mapa foi setado e vai aperecer no titulo do jogo" + autobalanceseton: "Autobalance foi ativado!" + autobalancesetoff: "Autobalance foi &cdesativado!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locais para a região não foram definidas corretamente!" + TEAM_SIZE_LOW_ERROR: "Tens de adicionar mais teams" + NO_RES_SPAWNER_ERROR: "Nao adicionaste nenhum ressource!" + NO_LOBBY_SET: "Ainda nao definiste o lobby!" + TEAMS_WITHOUT_SPAWNS: "Há teams sem o spawn setado" + NO_ITEMSHOP_CATEGORIES: "Nenhuma categoria da itemshop encontrada" + NO_MAIN_LOBBY_SET: "Ainda nao definiste o main lobby ja que na config meteste 'tomainlobby' para true" + TEAM_NO_WRONG_BED: "Uma ou mais teams nao tem cama setada" + TEAM_NO_WRONG_TARGET: "Uma ou mais teams nao tem o bloco de respawn setado!" +ingame: + team: "Team" + teams: "Teams" + all: "Todos" + record: "&e$record$&a é o tempo recorde deste mapa!" + record-with-holders: '&aO recorde deste mapa &e$record$&a e foi feito por: $holders$' + newrecord: '&aTeam $team$&a realizou um novo recorde: &6$record$ Parabens!!' + record-nobeddestroy: "&cRecorde nao sera guardado poque nunhuma cama foi destruida" + teamwon: "Parabens! Team $team$ ganhou!" + draw: "O jogo acaba com um empate :o!" + serverrestart: "Servidor reiniciando em $sec$ segundo(s)!" + gamestarting: "Jogo começando ..." + gamestarted: "Jogo '$game$' acabou de começar!" + backtolobby: "De volta ao spawn em $sec$ segundo(s)!" + spectator: "Spectator" + spectate: "&aVer" + teamchest: "Bau da Team" + noturteamchest: "Este bau nao é um bau da tua team!" + protectionleft: "Invencivel por &c$length$&f segundo(s)!" + protectionend: "Voce agora é &cvulneravel&f de novo!" + team-dead: "Team $team$ foi destruida!" + no-friendlybreak: "&cNao podes partir blocos debaixo de um membro da tua team!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Contruido por $builder$" + win-title: "&6Parabens!" + win-subtitle: "$team$&6 ganhou em &e$time$" + shop: + name: "Loja" + newshop: "Usar a nova Loja" + oldshop: "Usar a antiga Loja" + fullstackpershift: "Multiplica os stacks por cada click no shift" + onestackpershift: "Um stack por cada click no shift" + player: + left: "O jogador $player$ deixou o jogo!" + died: "$player$ morreu!" + killed: "$killer$ matou $player$!" + kicked: "$player$ foi kickado do jogo!" + waskicked: "Foste kickado do jogo!" + blocks: + ownbeddestroy: "Nao podes destruir a tua propria cama!" + beddestroyed: "$player$ destruio a cama da team $team$!" + specials: + rescue-platform: + left: "Há &c$time$&f segundo(s) ate poderes usar outra vez a plataforma de resgate!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eAlguem caiu numa &ctrap&e da tua team!" + protection-wall: + left: "Há &c$time$&f segundo(s) ate poderes usar outra vez a parede de protecçao" + not-usable-here: "Nao podes usar a parede de protecçao aí" + warp-powder: + cancelled: "&cO teu teleporte foi cancelado!" + start: "Iras ser teleportado em &c$time$&f segundo(s). Nao te mexas!" + cancel: "&4Cancelar o teleporte" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "Nenhum player encontrado" + tracker: + no-target-found: "Nenhum player encontrado" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "O jogo vai começar em $sec$ segundo(s)!" + countdowncancel: "Mais players precisos. A countdown foi cancelada!" + cancelcountdown: + not_enough_players: "Mais jogadores precisos. Countdown cancelada!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "Mais jogadores sao precisos para o jogo começar!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Escolhe uma team" + startgame: "Comecar o jogo" + reduce_countdown: "Reduce countdown" + gamefull: "Jogo esta cheio" + gamefullpremium: "O jogo esta cheio de jogadores premium!" + teamjoined: "Entraste na team $team$" + leavegame: "Deixar o jogo" + playerjoin: "O jogador $player$ entrou no jogo!" + kickedbyvip: "Foste kickado porque um jogador premium entrou!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Jogadores" + gamestate: + stopped: "&4[Desativado]" + waiting: "&a[Entrar]" + running: "&9[Em jogo]" + full: "Cheio!" +stats: + header: "Estatisticas do Bedwars" + kd: "K/D" + statsnotfound: "Estatisticas de $player$ nao encontradas!" + name: "Nome" + kills: "Kills" + deaths: "Mortes" + wins: "Vitorias" + loses: "Perdidos" + score: "Score" + destroyedBeds: "Camas destruidas" + games: "Jogos" +commands: + addgame: + name: "Add Game" + desc: "Adiciona um novo jogo" + addteam: + name: "Add Team" + desc: "Adiciona uma nova team num determinado mapa" + join: + name: "Join Game" + desc: "Entra num jogo de um mapa determinado" + leave: + name: "Leave Game" + desc: "Sais do jogo corrente" + save: + name: "Save Game" + desc: "Guarda o jogo (e mapa) para os ficheiros da config" + settarget: + name: "Set target" + desc: "Seta a localização do bloco de respawn" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Seta a localização da cama da team (Igual ao settarget)" + setlobby: + name: "Set lobby" + desc: "Seta a localização do lobby de um jogo" + setregion: + name: "Sets a region point" + desc: "Seta um ponto da regiao de um jogo" + setspawn: + name: "Sets a team spawn" + desc: "Seta o spawn dado por uma team" + setspawner: + name: "Set spawner" + desc: "Seta a localização do spawn de uma especifica ressource" + start: + name: "Comecar o jogo" + desc: "Começa o jogo" + stop: + name: "Stop game" + desc: "Para um jogo" + help: + name: "Show Help" + desc: "Da informaçao sobre o plugin e comandos" + reload: + name: "Reload" + desc: "Ira dar reload ao plugin" + setmainlobby: + name: "Set main lobby" + desc: "Seta o mainlobby (é preciso que na config o mainlobby-enabled esteja true)" + list: + name: "List games" + desc: "Lista de jogos disponiveis" + regionname: + name: "Set region name" + desc: "Seta o nome do mapa na tabuleta (em vez do nome do mundo)" + removeteam: + name: "Remove team" + desc: "Remove uma team de um jogo (somente funciona se o jogo estiver parado)" + removegame: + name: "Remove game" + desc: "Remove um jogo e a sua configuracao" + clearspawner: + name: "Clear spawners" + desc: "Remove todos os spawners de um jogo. Precisa de ser guardado." + gametime: + name: "Set game time" + desc: "Seta o tempo de jogo de um determinado jogo" + stats: + name: "Statistics" + desc: "Mostra as estatisticas" + setbuilder: + name: "Sets builder of map" + desc: "Seta o builder de um mapa que sera mostrado em titulo quando o jogo comecar." + setgameblock: + name: "Set game block" + desc: "Seta o tipo de bloco de jogo desse jogo que deveria ser usado em vez do que esta configurado na config. Escreve 'DEFAULT' como tipo para usares o tipo de config outra vez" + setautobalance: + name: "Set autobalance" + desc: "Se 'global-autobalance' esta setado 'false', com este comando tu podes setar team-autobalance por jogo em ativado ou desativado!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicka um jogador do seu jogo corrente!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/qya_AA.yml b/common/src/main/resources/locale/qya_AA.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/qya_AA.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/ro_RO.yml b/common/src/main/resources/locale/ro_RO.yml new file mode 100644 index 0000000..4ccc4b7 --- /dev/null +++ b/common/src/main/resources/locale/ro_RO.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Pagina $current$ din $max$" + currently: In prezent +errors: + argumentslength: "Numarul de argumente nu se potriveste cu numarul corespunzator!" + holodependencynotfound: "Nu s-a putut gasi $dependency$ pentru Hologram-Statistic" + packagenotfound: "Nu s-a putut prelua pachetul $package$!" + classnotfound: "Nu s-a putut prelua pachetul $package$ clasa $class$!" + gameexists: "Un joc cu numele acesta exista deja!" + gamenotfound: "Nu s-a putut gasi jocul $game$!" + nofreegames: "Nu exista jocuri disponibile." + gamenotfoundsimple: "Jocul nu a fost gasit!" + playeramount: "Numarul maxim de jucatori nu poate fi mai mic de 1 sau mai mare de 24!" + teamcolornotallowed: "Culoarea data echipei nu este o culoare permisa" + teamnamelength: "Numele echipei trebuie sa aiba intre 2 si 20 de caractere!" + teamnotfound: "Echipa nu a fost gasita!" + notingame: "In prezent nu te afli intr-un joc!" + bedtargeting: "Trebuie sa tintesti sau stai pe un block de tipul 'game-block' configurat!" + regionargument: "Argumentele locatiei tale trebuie sa fie 'loc1' sau 'loc2'!" + spawnerargument: "Parametrul de resurse trebuie sa fie o resursa configurata valid!" + blockdownnotfound: "Block-ul pe care stai nu a fost gasit!" + gamenotrunning: "Jocul nu ruleaza!" + bungeenoserver: "Server-ul Bungeecord nu a fost setat corect! Vorbeste cu administratorul server-ului!" + cantstartagain: "Jocul ruleaza! Nu poti porni un joc in curs de rulare din nou!" + startoutofwaiting: "Jocul urmeaza sa inceapa!" + cantjoingame: "Nu poti intra intr-o arena ce a inceput sau care este oprita!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Nu se poate porni jocul!" + gameloaderror: "Jocul '$game$' a trimis o eroare!" + regionnotfound: "Regiunea nu a fost setata!" + savesign: "Nu se poate creea un nou fisier de configuratie pentru semne!" + nogames: "Nu sunt jocuri valabile" + notenoughress: "Nu ai destule resurse pentru a cumpara acest element!" + teamnameinuse: "Numele echipei este deja în uz!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/ru_RU.yml b/common/src/main/resources/locale/ru_RU.yml new file mode 100644 index 0000000..8860a25 --- /dev/null +++ b/common/src/main/resources/locale/ru_RU.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Страница: $current$ из $max$" + currently: Сейчас +errors: + argumentslength: "Количество аргументов не соответствует правильному количеству!" + holodependencynotfound: "Не удалось найти $dependency$ для статистики голограммы" + packagenotfound: "Не удалось получить $package$ пакет" + classnotfound: "Не удалось получить пакет $package$ для класса $class$" + gameexists: "Игра с таким названием уже существует!" + gamenotfound: "Игра '$game$' не найдена!" + nofreegames: "Нет доступных свободных игр." + gamenotfoundsimple: "Игра не найдена!" + playeramount: "Максимальное кол-во игроков не может быть ниже 1 и выше 24!" + teamcolornotallowed: "Данный командный цвет не допускается" + teamnamelength: "Название команды должно быть от 2 до 20 символов!" + teamnotfound: "Команда не найдена!" + notingame: "В настоящее время вы вне игры!" + bedtargeting: "Вы должны стоять на блоке который вы указали в конфиге вместо кровати" + regionargument: "Допустимые аргументы: 'loc1' или 'loc2'" + spawnerargument: "Параметр ресурса должен быть допустимым настроенным ресурсом!" + blockdownnotfound: "Вы должны стоять на блоке" + gamenotrunning: "Игра не запущена!" + bungeenoserver: "Bungeecord сервер не был установлен должным образом. Сообщите проблему Администрации" + cantstartagain: "Игра уже запущена! Вы не можете запустить её ещё раз!" + startoutofwaiting: "Игра уже запущена в режиме ожидания!" + cantjoingame: "Вы не можете присоеденится к запущеной игре" + lobbyongameworld: "Лобби не может быть в игровом мире" + gamenotloaded: "Не удалось запустить игру" + gameloaderror: "Загружаемая игра '$game$' выдает ошибку" + regionnotfound: "Файл с регионами не существует" + savesign: "Не удалось создать новый файл конфигурации" + nogames: "Игры не найдены" + notenoughress: "У вас не хватает ресурсов чтобы купить этот предмет" + teamnameinuse: "Название команды уже используется" + minplayersmustnumber: "Минимальное количество игроков должно быть не ниже 2" + toolongregionname: "Максимальная длина имени региона - 15 символов" + notwhilegamerunning: "Вы не можеет сделать это во время игры" + notwhileingame: "Вы не можеет сделать это во время игры" + timeincorrect: "Время должно быть числом (0 ... 23000), 'днём' или 'ночью'" + minplayersnumeric: "Минимальное количество игроков должно быть не ниже 2" + notinair: "Вы не в воздухе" + teamfull: "В этой команде уже нет свободного места" + novalidmaterial: "Данный тип блока (материала) является неправильной!" + wrongvalueonoff: "Неправильный параметр! Используйте true,on,1, чтобы включить - используйте false,off,0, чтобы выключить!" + playernotfound: "Данный игрок не был найден или он не в сети!" + notingameforkick: "Вы должны быть в игре, чтобы ударить игрока!" + playernotingame: "Данного игрока нет в этой игре!" + mustbeinlobbyworld: "You must be in the lobby world of the game!" + addteamjoincancel: "Добавление команды join был отменён!" + entitynotcompatible: "Эта сущность не совместима с командой join!" +success: + gameadded: "Новая игра '$game$' успешно создана" + teamadded: "Команда '$team$' успешно добавлена" + joined: "Вы присоединились к игре" + left: "Вы отсоединились от игры" + saved: "Игра успешно сохранена!" + bedset: "Вы успешно установили точку для кровати команды $team$" + regionset: "Игровая локация $location$ успешно добавлена для игры $game$!" + spawnset: "Точка возрождения успешно добалена для команды $team$" + spawnerset: "Спавнер ресурса $name$ успешно добавлен" + stopped: "Игра успешно остановлена!" + lobbyset: "Лобби успешно добавлено" + gameloaded: "Игра '$game$' успешно загружена!" + reloadconfig: "Перезагрузка прошла успешно" + teamremoved: "Команда успешно удалена" + gameremoved: "Игра успешно удалена!" + spawnercleared: "Все спавнеры ресурсов были удалены" + gamerun: "Вы запустили игру. Теперь игроки могут подключатся" + timeset: "Игровое время успешно установлено!" + regionnameset: "Имя региона изменено" + minplayersset: "Минимальное к-во игроков изменено" + mainlobbyset: "Главное лобби успешно добавлено" + gametimeset: "Игровое время установлено!" + materialset: "Тип блока респауна (материала) была успешно установлена!" + builderset: "Строитель для карты была успешно установлена и будет отображаться в названии!" + autobalanceseton: "Автобаланс был успешно включён!" + autobalancesetoff: "Автобаланс был успешно &cотключён&a!" + selectteamjoinentity: "Теперь сделайте правый клик на моба, который требуется использовать в качестве команды join!" + teamjoinadded: "Моб был успешно отмечен как выбор команды для команды $team$" + holoremoved: "Статистика голограммы успешно удалена!" +gamecheck: + LOC_NOT_SET_ERROR: "Места для региона небыли установлены правельно" + TEAM_SIZE_LOW_ERROR: "Вы должны установить больше команд" + NO_RES_SPAWNER_ERROR: "Вы не установили ни одного спавнера ресурсов" + NO_LOBBY_SET: "Вы не установили лобби" + TEAMS_WITHOUT_SPAWNS: "Обнаружена(ы) команда(ы) без точки возрождения" + NO_ITEMSHOP_CATEGORIES: "Данная категория не найдена" + NO_MAIN_LOBBY_SET: "Вы не установили точку главного лобби, хотя включили 'tomainlobby'" + TEAM_NO_WRONG_BED: "Обнаружена(ы) команда(ы) без кровати" + TEAM_NO_WRONG_TARGET: "Одна или больше команд не имеет кровати" +ingame: + team: "Команда" + teams: "Команде" + all: "Всем" + record: "&aЖелаем &cВам &bприятной &eигры" + record-with-holders: '&aЖелаем &cВам &bприятной &eигры' + newrecord: '&aЖелаем &cВам &bприятной &eигры' + record-nobeddestroy: "&aЖелаем &cВам &bприятной &eигры" + teamwon: "Поздравляем! Команда $team$ победила" + draw: "Ничья" + serverrestart: "Перезагрузка сервера через $sec$" + gamestarting: "Игра начинается" + gamestarted: "Игра началась" + backtolobby: "Вы телепортируетесь в лобби через $sec$" + spectator: "Зритель" + spectate: "&aСледить" + teamchest: "Сундук команды: $team$" + noturteamchest: "Этот сундук для вашей команды" + protectionleft: "&cНеуязвимость &fзаканчивается через &c$length$" + protectionend: "Теперь вы снова &cуязвимы" + team-dead: "Команда $team$ полностью уничтожена" + no-friendlybreak: "&cНе ломайте блок под членом команды!" + teamchestdestroy: "&cОдин из ваших сундуков команды был уничтожен!" + title: + map-builder: "Построил $builder$" + win-title: "&6Поздравляем!" + win-subtitle: "Команда $team$ &6выиграла за &e$time$" + shop: + name: "Магазин Ресурсов" + newshop: "Использовать новую механику покупки" + oldshop: "Использовать старую механику покупки" + fullstackpershift: "Купить много стаков при ЛКМ+Shift" + onestackpershift: "Купить один стак при ЛКМ+Shift" + player: + left: "Игрок $player$ покинул игру" + died: "$player$ умер" + killed: "$killer$ убил $player$" + kicked: "$player$ был выгнан!" + waskicked: "Вы были выгнаны из игры!" + blocks: + ownbeddestroy: "Вы не можете разрушить кровать своей команды" + beddestroyed: "$player$ разрушил кровать команды $team$" + specials: + rescue-platform: + left: "Платформа исчезнет через &c$time$&f" + arrow-blocker: + start: "Вы защищены от удара стрелы на &c$time$&f сек." + end: "&cВаша защита от стрел закончилась" + left: "Осталось &c$time$&f секунд(ы), когда вы можете использовать следующую блокировку стрел!" + trap: + trapped: "&eКто-то попался в ловушку вашей команды" + protection-wall: + left: "Новую стену можно построить через &c$time$" + not-usable-here: "Вы не можете построить стену здесь" + warp-powder: + cancelled: "&cТелепортация отменена" + start: "Вы будете телепортированы через &c$time$&f second(s). Не двигайтесь с места" + cancel: "&4Отменить телепортацию" + multiuse: "&cВы уже телепортировались!" + tntsheep: + no-target-found: "Игрок не был найден!" + tracker: + no-target-found: "Игрок не был найден!" + target-found: "$player$ имеет $blocks$ блок(ов) вдалеке от вас." +lobby: + countdown: "Игра начнётся через $sec$" + countdowncancel: "Нужно больше игроков. Отчёт времени отменён" + cancelcountdown: + not_enough_players: "Нужно больше игроков. Отчёт времени отменён" + not_enough_teams: "Необходимо больше команд. Обратный отсчёт отменён!" + cancelstart: + not_enough_players: "Нужно больше игроков для начала игры" + not_enough_teams: "Чтобы начать игру, необходимы дополнительные группы!" + chooseteam: "Выберите команду:" + startgame: "Начать игру" + reduce_countdown: "Уменьшить обратный отсчёт" + gamefull: "Игра заполнена!" + gamefullpremium: "Игра уже полна премиум-игроков!" + teamjoined: "Вы вступили в команду $team$" + leavegame: "Покинуть игру" + playerjoin: "Игрок $player$ присоеденился к игре" + kickedbyvip: "Вы были кикнуты из-за вип игрока, который присоеденился в заполненую игру" + moreplayersneeded: "Необходимо ещё $count$ игроков." + moreplayersneeded-one: "Необходим ещё $count$ игрок." + moreteamsneeded: "Необходимо как минимум два игрока в двух разных командах, чтобы начать игру!" +sign: + firstline: "&e[&bBedWars&e]" + players: "Игроков" + gamestate: + stopped: "&4Остановлена" + waiting: "&2Ожидание" + running: "&bЗапущена" + full: "&6Заполнена" +stats: + header: "Статистика:" + kd: "К/Д" + statsnotfound: "Статистика игрока $player$ не найдена!" + name: "Имя" + kills: "Убийств" + deaths: "Смертей" + wins: "Побед" + loses: "Поражений" + score: "Результат" + destroyedBeds: "Разрушено кроватей" + games: "Сыграно игр" +commands: + addgame: + name: "Добавить игру" + desc: "создать новую игру" + addteam: + name: "Добавить команду" + desc: "добавить команду в игру" + join: + name: "Зайти в игру" + desc: "присоеденится к игре" + leave: + name: "Покинуть игру" + desc: "покинуть игру" + save: + name: "Сохранить игру" + desc: "сохранить игру в config.yml" + settarget: + name: "Установить цель" + desc: "установить кровать для команды" + setbed: + name: "Set bed" + desc: "установить кровать для команды" + setlobby: + name: "Установить лобби" + desc: "установить локацию для лобби" + setregion: + name: "Устанавливает точку региона" + desc: "установить метки для региона под игру" + setspawn: + name: "Устанавливает спаун команды" + desc: "установить точку возрождения команды" + setspawner: + name: "Установить спаунер" + desc: "установить спавнер ресурсов" + start: + name: "Начать игру" + desc: "начать игру" + stop: + name: "Остановить игру" + desc: "остановить игру" + help: + name: "Показать справку" + desc: "посмотреть информацию о плагине" + reload: + name: "Перезагрузить" + desc: "перезагрузить конфиг" + setmainlobby: + name: "Установить главную лобби" + desc: "установить локацию для главного лобби" + list: + name: "Список игр" + desc: "список доступных игр" + regionname: + name: "Установить название региона" + desc: "задать имя для региона" + removeteam: + name: "Удалить команду" + desc: "удалить команду из игры" + removegame: + name: "Удалить игру" + desc: "удалить игру и её настройки" + clearspawner: + name: "Очистить спаунеры" + desc: "удалить все спавнеры предметов" + gametime: + name: "Установка игрового времени" + desc: "установить тип игры" + stats: + name: "Статистика" + desc: "показать вашу статистику" + setbuilder: + name: "Устанавливает имя строителя карты" + desc: "Устанавливает строителя карты, которая будет отображаться в заголовке, когда игра начинается." + setgameblock: + name: "Установить блок" + desc: "Устанавливает тип игры блока для этой игры, которую следует использовать вместо настройки \"игровой блок\". Запись \"ПО УМОЛЧАНИЮ\" как тип, чтобы снова использовать тип настроек" + setautobalance: + name: "Набор автобаланса" + desc: "Если глобальный автобаланс имеет значение \"false\", с этой командой. вы можете установить автобаланс команды или отключить!" + setminplayers: + name: "Установить минимальное число игроков" + desc: "Устанавливает количество игроков, необходимое для начала игры" + kick: + name: "Выгнать игрока" + desc: "Выгнать игрока из текущей игры!" + addteamjoin: + name: "Добавить выбор команды" + desc: "Отмеченный моб, который может использоваться для конкретной команды!" + addholo: + name: "Добавить расположение голограммы" + desc: "Статистика голограммы будет добавлена в текущей позиции!" + removeholo: + name: "Удалить расположение голограммы" + desc: "Когда была выполнена команда, игрок может нажать на правую кнопку мыши голограммы, которая должна быть удалена." + explain: "Выполните левый клик в течение 10 секунд на голограмме, которую вы хотите удалить." + debugpaste: + name: "Вставить данные отладки" + desc: "Это отправляет данные для отладки в hastebin и предоставляет ссылку, которую вы можете отправить разработчикам" + itemspaste: + name: "Записать содержимое инвентаря в файл" + desc: "Вы получите ссылку, где можно будет посмотреть предметы вашего инвентаря в виде примера для конфигурации shop.yml" diff --git a/common/src/main/resources/locale/se_NO.yml b/common/src/main/resources/locale/se_NO.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/se_NO.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/sk_SK.yml b/common/src/main/resources/locale/sk_SK.yml new file mode 100644 index 0000000..f9db39c --- /dev/null +++ b/common/src/main/resources/locale/sk_SK.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Stranka $current$ z $max$" + currently: Aktualna +errors: + argumentslength: "Pocet argumentov prikazu neodpoveda spravnemu mnozstvu!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Nejde nacitat $package$ package!" + classnotfound: "Nejde nacitat $package$ class $class$!" + gameexists: "Hra s tymto menom uz existuje!" + gamenotfound: "Hra '$game$' nebola najdena!" + nofreegames: "Nie sú žiadne hry voľné." + gamenotfoundsimple: "Hra nenajdena!" + playeramount: "Pocet hracov nesmie byt mensi ako 1 a vyssi ako 24!" + teamcolornotallowed: "Tato farba nie je pre timy povolena." + teamnamelength: "Nazov timu musi mat 2 - 20 pismen!" + teamnotfound: "Tim nenajdeny!" + notingame: "Nie si v hre!" + bedtargeting: "Musis stat na bloku, ktory je v konfiguracii zapisany ako 'game-block'!" + regionargument: "Mozes zadat iba 'loc1' alebo 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "Blok na ktorom stojis nebol najdeny!" + gamenotrunning: "Hra nebezi!" + bungeenoserver: "Bungeecord server nie je spravne nastaveny! Kontaktuj administratora!" + cantstartagain: "Hra uz bezi! Nemozes zapnout hru, ktora uz bezi!" + startoutofwaiting: "Hra bude zapnuta bez cakania!" + cantjoingame: "Nemozes sa pripojit do hry, ktora uz bezi alebo je vypnuta!" + lobbyongameworld: "Lobby nemoze byt na hernom svete!" + gamenotloaded: "Hru nejde zapnut!" + gameloaderror: "Nejde nacitat hru '$game$'!" + regionnotfound: "Subor mapy neexistuje!" + savesign: "Nejde vytvorit novu konfiguraciu pre cedulku!" + nogames: "Ziadna hra neexistuje!" + notenoughress: "Nemas dostatok surovin pre kupu tohoto predmetu!" + teamnameinuse: "Meno timu je uz pouzite!" + minplayersmustnumber: "Minimalny pocet hracov musi byt cislo!" + toolongregionname: "Maximalna dlzka moze byt 15 pismen dlha!" + notwhilegamerunning: "Nejde vykonat pokial hra bezi!" + notwhileingame: "Nejde vykonat pokial si v hre." + timeincorrect: "Cas musi byt: cislo (0 ... 23000), 'day' alebo 'night'!" + minplayersnumeric: "Minimalny pocet hracov musi byt cislo!" + notinair: "Nie si vo vzduchu!" + teamfull: "Tim je plny, otvor si znova vyberove menu!" + novalidmaterial: "Blok (material) nie je spravny!" + wrongvalueonoff: "Zly Parameter! Pouzi true,on,1 pre zapnutie - Pouzi false,off,0 pre vypnutie!" + playernotfound: "Tento hrac nie je online!" + notingameforkick: "Musis byt v hre pre vyhodenie tohto hraca!" + playernotingame: "Tento hrac sa nenachaza v tejto hre!" + mustbeinlobbyworld: "Musis byt v lobby svete teto hry!" + addteamjoincancel: "Pridavanie pripojenia do hry zrusene!" + entitynotcompatible: "Tuto entitu nemozno pouzit pro vyber tymu!" +success: + gameadded: "Nova hra '$game$' uspesne pridana!" + teamadded: "Tym '$team$' uspesne pridany!" + joined: "Pripojil si sa do hry!" + left: "Odpojil si sa z hry" + saved: "Hra bola uspesne ulozena!" + bedset: "Uspesne si nastavil respawn blok tymu $team$!" + regionset: "Oblast $location$ pre hru $game$ uspesne nastavena!" + spawnset: "Spawn lokacia pre tim $team$ uspesne nastavena!" + spawnerset: "Spawn suroviny $name$ uspesne nastaveny!" + stopped: "Hra bola zastavena!" + lobbyset: "Lobby pre hru bolo nastavene!" + gameloaded: "Hra '$game$' uspesne nacitana!" + reloadconfig: "Konfiguracia a jazyky znovu nacitane!" + teamremoved: "Tim bol uspesne odstraneny!" + gameremoved: "Hra bola uspesne odstranena!" + spawnercleared: "Vsetky spawnery surovin boli odstranene!" + gamerun: "Hra bola zapnuta, hraci uz mozu hrat!" + timeset: "Cas hry bol uspesne nastaveny!" + regionnameset: "Meno regionu uspesne nastavene!" + minplayersset: "Minimalny pocet hracov nastaveny!" + mainlobbyset: "Mainlobby uspesne nastavene!" + gametimeset: "Cas hry uspesne nastaveny!" + materialset: "Respawn blok (material) bol uspesne nastaveny!" + builderset: "Stavitel tejto mapy bol uspesne nastaveny a bude sa zobrazovat v title!" + autobalanceseton: "Automaticke vyvazovanie bolo &lzapnute&a!" + autobalancesetoff: "Automaticke vyvazovanie bolo &cvypnute&a!" + selectteamjoinentity: "Teraz klikni pravym na entitu, ktoru chces pouzit!" + teamjoinadded: "Entita bola uspesne ulozena pre tim $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Lokacia pre tuto hru nebola dobre nastavena!" + TEAM_SIZE_LOW_ERROR: "Musis nastavit viac timov!" + NO_RES_SPAWNER_ERROR: "Nenastavil si ziadny spawner surovin!" + NO_LOBBY_SET: "Nenastavil si lobby!" + TEAMS_WITHOUT_SPAWNS: "Timy nemaju nastavenu spawn lokaciu!" + NO_ITEMSHOP_CATEGORIES: "Ziadne kategorie obchodu nenajdene!" + NO_MAIN_LOBBY_SET: "Nenastavil si Main lobby (hlavne lobby) alebo si v nastaveniach nepovolil 'tomainlobby' na true (povolene)" + TEAM_NO_WRONG_BED: "Jeden alebo viac timov nemaju nastavenu postel!" + TEAM_NO_WRONG_TARGET: "Jeden alebo viac timov nemaju nastaveny respawn block!" +ingame: + team: "Team" + teams: "Timy" + all: "Vsetci" + record: "&e$record$&a je rekord na tejto mape!" + record-with-holders: '&aRekord na tejto mape je &e$record$&a ziskany hracmi: $holders$' + newrecord: '&aTim $team$&a ziskal novy rekord: &6$record$' + record-nobeddestroy: "&cRekord nemohol byt ulozeny, pretoze &lnebola &cznicena ziadna postel!" + teamwon: "Gratulacia! Tim $team$ vyhral!" + draw: "Hra skoncila remizou." + serverrestart: "Restart serveru za $sec$ sekund!" + gamestarting: "Hra sa zapina!" + gamestarted: "Hra '$game$' zacala!" + backtolobby: "Teleportacia do lobby za $sec$ sekund!" + spectator: "Sledujuci" + spectate: "&aSledovat" + teamchest: "Timova truhla" + noturteamchest: "Tato truhla nepatri tvojmu timu!" + protectionleft: "Si nezranitelny na &c$length$&f sekund!" + protectionend: "Uz si &czranitelny&f!" + team-dead: "Tim $team$ bol zniceny!" + no-friendlybreak: "&cNemozes znicit blok pod hracom svojho tymu!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Mapu postavil/a $builder$" + win-title: "&a&lGratulacia!" + win-subtitle: "$team$&6 vyhral v case &e$time$" + shop: + name: "Obchod" + newshop: "Pouzi novy obchod" + oldshop: "Pouzi stary obchod" + fullstackpershift: "Viac stackov za shift click" + onestackpershift: "Jeden stack za shift click" + player: + left: "Hrac $player$ odisiel z hry." + died: "$player$ zomrel!" + killed: "$killer$ zabil $player$!" + kicked: "$player$ bol vyhodeny!" + waskicked: "Bol si vyhodeny z hry!" + blocks: + ownbeddestroy: "Nemozes znicit svoju postel!" + beddestroyed: "$player$ znicil postel timu $team$!" + specials: + rescue-platform: + left: "&cMusis pockat &e$time$&f sekund(u) pred pouzitim dalsej zachrannej platformy!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eNiekto stupil do &cpaste&e tvojho timu!" + protection-wall: + left: "Musis pockat &c$time$&f sekund pred pouzitim!" + not-usable-here: "Tento predmet tu nemozes pouzit!" + warp-powder: + cancelled: "&cTeleportacia zrusena!" + start: "Budes teleportovany za &c$time$&f sekund!" + cancel: "&4Zrusit Teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "Ziadny ciel nebol najdeny!" + tracker: + no-target-found: "Ziadny ciel nebol najdeny!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Hra zacne za $sec$ sekund!" + countdowncancel: "Je treba viac hracov! Odpocet bol zastaveny." + cancelcountdown: + not_enough_players: "Je potreba viac hracov! Odpocet bol zastaveny." + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "Pre start hry je treba viac hracov!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Vyber si tim" + startgame: "Spustit hru" + reduce_countdown: "Reduce countdown" + gamefull: "Hra je plna!" + gamefullpremium: "VIP sloty su uz zaplnene!" + teamjoined: "Uspesne si sa pripojil do timu $team$" + leavegame: "Opustit hru" + playerjoin: "Hrac $player$ sa pripojil do hry!" + kickedbyvip: "Bol si vyhodeny z hry, pretoze se pripojil VIP hrac." + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&8[&4&lBed&f&lWars&8]" + players: "Hraci" + gamestate: + stopped: "&4VYPNUTE" + waiting: "&aCAKANIE" + running: "&9V HRE!" + full: "&cPLNO!" +stats: + header: "Statistiky BedWars hier" + kd: "K/D" + statsnotfound: "Statistika hraca $player$ nenajdena!" + name: "Meno" + kills: "Zabitia" + deaths: "Smrti" + wins: "Vyhry" + loses: "Prehry" + score: "Skore" + destroyedBeds: "Znicene postele" + games: "Hrane hry" +commands: + addgame: + name: "Pridat hru" + desc: "Prida novu hru" + addteam: + name: "Pridat tim" + desc: "Prida tim specialne pre arenu" + join: + name: "Pripojit sa do hry" + desc: "Pripoji ta do urcitej hry" + leave: + name: "Odpojit z hry" + desc: "Odpoji ta z aktualnej hry" + save: + name: "Ulozit hru" + desc: "Ulozi hru (a mapu) do konfiguracie!" + settarget: + name: "Nastavit postel" + desc: "Nastavi lokaciu postele timu" + setbed: + name: "Nastavit postel (Synonymum pre settarget)" + desc: "Nastavi lokaciu postele timu (Synonym pre settarget)" + setlobby: + name: "Nastavit lobby" + desc: "Nastavi lokaciu lobby pre hru" + setregion: + name: "Nastavit oblast" + desc: "Nastavi hranice hry" + setspawn: + name: "Nastavit spawn timu" + desc: "Nastavi misto pre spawn urciteho timu" + setspawner: + name: "Nastavit spawner" + desc: "Nastavi mista pre spawnovanie surovin" + start: + name: "Spustit hru" + desc: "Spusti hru" + stop: + name: "Ukoncit hru" + desc: "Ukonci hru" + help: + name: "Ukazat pomoc" + desc: "Ukaze informacie o tomto plugine a prikazoch" + reload: + name: "Znova nacitat" + desc: "Znova nacita vsetky konfiguracie a jazyky" + setmainlobby: + name: "Nastavit Main lobby" + desc: "Nastavi hlavne lobby, kam sa po hre teleportuju hraci. (je treba pokial je mainlobby-enabled nastavene na true)" + list: + name: "List hier" + desc: "Zobrazi vsetky dostupne hry" + regionname: + name: "Nastavit meno regionu" + desc: "Nastavi individualne meno hry (nezalezi na svete)" + removeteam: + name: "Odstranit tim" + desc: "Zmaze tim z hry (iba vo vypnutej hre)" + removegame: + name: "Odstranit hru" + desc: "Zmaze hru a konfiguraciu" + clearspawner: + name: "Zmazat spawnery" + desc: "Odstrani vsetky spawnery surovin. Ulozenie areny je nutne." + gametime: + name: "Nastavit cas hry" + desc: "Nastavi cas, ktory bude v arene po dobu hry" + stats: + name: "Statistiky" + desc: "Zobrazi tvoje statistiky" + setbuilder: + name: "Nastavit stavitela mapy" + desc: "Nastavi stavitela mapy, ktory sa bude zobrazovat v title." + setgameblock: + name: "Nastavit herny blok" + desc: "Nastavi blok hry, ktory moze byt pouzity miesto 'game-block' nastavenia. Napis 'DEFAULT' pre znova pouzitie bloku z konfiguracie." + setautobalance: + name: "Nastavit automaticke vyvazovanie" + desc: "Pokial je 'global-autobalance' nastavene na 'false', tak mozes pomocou tohto prikazu nastavit automaticke vyvazovanie pre tuto hru!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Vyhodit hraca" + desc: "Vyhodi hraca z aktualnej hry!" + addteamjoin: + name: "Pridat vyberanie timu" + desc: "Vyberie bytost, pomocou ktorej sa budes moct pripojit do timu!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/sl_SI.yml b/common/src/main/resources/locale/sl_SI.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/sl_SI.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/so_SO.yml b/common/src/main/resources/locale/so_SO.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/so_SO.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/sq_AL.yml b/common/src/main/resources/locale/sq_AL.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/sq_AL.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/sr_SP.yml b/common/src/main/resources/locale/sr_SP.yml new file mode 100644 index 0000000..22187c7 --- /dev/null +++ b/common/src/main/resources/locale/sr_SP.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Trenutno +errors: + argumentslength: "Broj argumenata se ne podudara sa traženim brojem argumenata!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "Igra sa ovim imenom već postoji!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "Sve arene su zauzete! Sacekajte par trenutaka!" + gamenotfoundsimple: "Game not found!" + playeramount: "Maksimalan broj igrača ne može biti manji od 1 i veći od 24!" + teamcolornotallowed: "Ova boja za Tim boju nije dozvoljena!" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Tim nije pronađen!" + notingame: "Trenutno nisi u igri!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "Uspešno ste ubačeni u igru! Pripremite se!" + left: "Uspešno ste izašli iz igre!" + saved: "Igra je uspešno sačuvana!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/sv_SE.yml b/common/src/main/resources/locale/sv_SE.yml new file mode 100644 index 0000000..3c7a04e --- /dev/null +++ b/common/src/main/resources/locale/sv_SE.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Sida $current$ av $max$" + currently: För närvarande +errors: + argumentslength: "Antal argument matchar inte rätt mängd!" + holodependencynotfound: "Kunde inte hitta $dependency$ för Hologram-statistik" + packagenotfound: "Kunde inte hämta $package$ paketet!" + classnotfound: "Kunde inte hämta $package$ klass $class$!" + gameexists: "Ett spel med detta namn finns redan!" + gamenotfound: "Spelet '$game$' kunde inte hittas!" + nofreegames: "Det finns inga lediga spel." + gamenotfoundsimple: "Spel hittades inte!" + playeramount: "Max spelare får inte vara lägre än 1 eller högre än 24!" + teamcolornotallowed: "Vald lag färg är inte en tillåten färg" + teamnamelength: "Lag namn måste ha mellan 2 och 20 bokstäver!" + teamnotfound: "Team hittades inte!" + notingame: "Du är för närvarande inte i ett spel!" + bedtargeting: "Du har att rikta eller stå på ett block av den Konfigurerade 'game-block' typen!" + regionargument: "Ditt plats argument måste vara 'loc1' eller 'loc2'!" + spawnerargument: "Parametern resurs måste vara ett giltigt konfigurerade resurs!" + blockdownnotfound: "Blocket du står på hittades inte!" + gamenotrunning: "Spelet är inte igång!" + bungeenoserver: "Bungeecord Servrarna var inte korrekt inställd! Prata med serveradministratören!" + cantstartagain: "Spelet är igång! Du kan inte starta ett spel som redan är igång!" + startoutofwaiting: "Spelet behöver startas från väntar-läget!" + cantjoingame: "Du kan inte ansluta till ett spel som är igång eller stoppat!" + lobbyongameworld: "Lobbyn kan inte i spel världen!" + gamenotloaded: "Kunde inte starta upp spelet!" + gameloaderror: "Ladda spelet '$game$' skapar ett fel!" + regionnotfound: "Region filen finns inte!" + savesign: "Kunde inte skapa en ny skylt config fil!" + nogames: "Inga spel hittades!" + notenoughress: "Du hade inte tillräckligt resurser för att köpa detta föremål!" + teamnameinuse: "Lag namnet används redan!" + minplayersmustnumber: "Minst spelare måste vara ett tal!" + toolongregionname: "Maxlängden för Region namnet är 15 bokstäver!" + notwhilegamerunning: "Kan inte göra det medan spelet är igång!" + notwhileingame: "Kan inte göra det medan du är i ett spel som är igång!" + timeincorrect: "Tid måste vara en siffra mellan (0 ... 23000) eller 'day' or 'night'!" + minplayersnumeric: "Parametern min-players måste vara en siffra!" + notinair: "Du är inte i luften!" + teamfull: "Laget är full, vänligen öppna lag menyn igen!" + novalidmaterial: "Vald block typ (material) är inte rätt!" + wrongvalueonoff: "Fel Parameter! Använd true,on,1 för att slå på - Använd false,off,0 för att inaktivera!" + playernotfound: "Vald spelare kunde inte hittas eller är inte online!" + notingameforkick: "Du måste vara i ett spel att sparka en spelare!" + playernotingame: "Vald spelare är inte i detta spel!" + mustbeinlobbyworld: "Du måste vara i lobby världen av spelet" + addteamjoincancel: "Tillägg av lag join avbröts!" + entitynotcompatible: "Denna entity är inte kompatibel med lag join!" +success: + gameadded: "Nytt spel '$game$' har lagts till!" + teamadded: "Lag '$team$' har lagts till!" + joined: "Du har gått med spelet!" + left: "Du har lämnat spelet!" + saved: "Spelet sparades!" + bedset: "Du har ställt in respawn blocket av laget $team$!" + regionset: "Spel region platsen $location$ för spelet $game$ sattes!" + spawnset: "Spawn plats för laget $team$ sattes!" + spawnerset: "Resurs spawn platsen för $name$ var satt!" + stopped: "Spelet stoppades!" + lobbyset: "Lobbyn var satt!" + gameloaded: "Spelet '$game$' lästs in!" + reloadconfig: "Reload klar!" + teamremoved: "Laget har tagits bort!" + gameremoved: "Laget har tagits bort!" + spawnercleared: "Alla resurser spawners har tagits bort!" + gamerun: "Du startade spelet, spelare kan nu gå med!" + timeset: "Speltiden var ställd!" + regionnameset: "Regionens namn sattes framgångsrikt!" + minplayersset: "Minst spelare sattes!" + mainlobbyset: "Mainlobby sattes!" + gametimeset: "Spel tid sattes!" + materialset: "Respawn blocktyp (material) sattes framgångsrikt!" + builderset: "Byggaren för kartan sattes framgångsrikt och visas i titel!" + autobalanceseton: "Autobalance aktiverades!" + autobalancesetoff: "Autobalance &cstängdes av&a!" + selectteamjoinentity: "Nu högerklicka på den entitien som du vill använda som lag koppling!" + teamjoinadded: "Entitien var markerad som lag val för laget $team$" + holoremoved: "Hologram-statistiken har tagits bort!" +gamecheck: + LOC_NOT_SET_ERROR: "Platser för regionen var inte korrekt inställd!" + TEAM_SIZE_LOW_ERROR: "Du måste ställa in fler lag!" + NO_RES_SPAWNER_ERROR: "Du inte har angett någon resurs spawners!" + NO_LOBBY_SET: "Du har inte ställt in en lobby!" + TEAMS_WITHOUT_SPAWNS: "Det finns lag utan en spawn plats!" + NO_ITEMSHOP_CATEGORIES: "Inga itemshop kategorier hittades!" + NO_MAIN_LOBBY_SET: "Du ställde inte in en mainlobby även fast du ställde 'tomainlobby' till true" + TEAM_NO_WRONG_BED: "En eller flera lag har ingen säng inställd!" + TEAM_NO_WRONG_TARGET: "En eller flera lag har inget respawn block inställd!" +ingame: + team: "Lag" + teams: "Lag" + all: "Alla" + record: "&e$record$&a är rekordet på denna kartan!" + record-with-holders: '&aRekordet på denna karta är &e$record$&a och hålls av: $holders$' + newrecord: '&aLag $team$&a satte ett nytt rekord: &6$record$' + record-nobeddestroy: "&cRekordet sparas inte, eftersom att inga sängar blev förstörda!" + teamwon: "Grattis! Lag $team$ vann!" + draw: "Spelet slutar med oavgjort!" + serverrestart: "Startar om servern om $sec$ sekund(er)!" + gamestarting: "Spelet startar..." + gamestarted: "Spelet '$game$' har precis börjat!" + backtolobby: "Tillbaka till lobbyn om $sec$ sekund(er)!" + spectator: "Åskådare" + spectate: "&aÅskådare" + teamchest: "Lag kista" + noturteamchest: "Denna kista är inte en kista från ditt lag!" + protectionleft: "Odödlig för &c$length$&f sekund(er)!" + protectionend: "Du är nu &codödlig&f igen!" + team-dead: "Lag $team$ förstördes!" + no-friendlybreak: "&cKan inte förstöra block under lag medlem!" + teamchestdestroy: "&cEn av ditt lags kistor har blivit förstörd!" + title: + map-builder: "Byggd av $builder$" + win-title: "&6Gratulerar!" + win-subtitle: "$team$&6 vann i &e$time$" + shop: + name: "ItemShop" + newshop: "Använd ny shop" + oldshop: "Använda gaml shop" + fullstackpershift: "Multiplicera stackar per Skift klick" + onestackpershift: "En stack per Skift klick" + player: + left: "Spelaren $player$ har lämnat spelet!" + died: "$player$ dog!" + killed: "$killer$ dödade $player$!" + kicked: "$player$ sparkades!" + waskicked: "Du sparkades från spelet!" + blocks: + ownbeddestroy: "Du kan inte förstöra din egen säng!" + beddestroyed: "$player$ förstörde bädd av laget $team$!" + specials: + rescue-platform: + left: "Det finns &c$time$ &fsekund(er) kvar tills du kan använda nästa räddning plattform!" + arrow-blocker: + start: "Du skyddas från att träffas av pilar för &c$time$ &fsekund(er)." + end: "&cDitt pil skydd är över" + left: "Det finns &c$time$ &fsekund(er) kvar tills du kan använda den nästa pilblockerare!" + trap: + trapped: "&eNågon gick in i en &ctrap&e i ditt lag!" + protection-wall: + left: "Det finns &c$time$ &fsekund(er) kvar tills du kan använda nästa skydds vägg!" + not-usable-here: "Du kan inte använda skydd väggen här!" + warp-powder: + cancelled: "&cDin teleportering avbröts!" + start: "Du kommer att teleporteras om &c$time$ &fsekund(er). Rör dig inte!" + cancel: "&4Teleporteringen avbröts" + multiuse: "&cDu har redan startat en teleportering!" + tntsheep: + no-target-found: "Ingen target spelare hittades!" + tracker: + no-target-found: "Ingen target spelare hittades!" + target-found: "$player$ är $blocks$ block ifrån dig." +lobby: + countdown: "Spelet börjar om $sec$ sekund(er)!" + countdowncancel: "Fler spelare behövs. Nedräkningen avbröts!" + cancelcountdown: + not_enough_players: "Fler spelare behövs. Nedräkningen avbröts!" + not_enough_teams: "Fler lag behövs. Nedräkningen avbröts!" + cancelstart: + not_enough_players: "Fler spelare behövs för att starta spelet!" + not_enough_teams: "Fler lag behövs för att starta spelet!" + chooseteam: "Välj ett lag" + startgame: "Starta Spel" + reduce_countdown: "Minska nedräkning" + gamefull: "Spelet är fullt!" + gamefullpremium: "Spelet är fullt av premium spelare redan!" + teamjoined: "Du gått med i laget $team$" + leavegame: "Lämna spel" + playerjoin: "Spelare $player$ gick med i spelet!" + kickedbyvip: "Du sparkades av en vip-spelare som gått med i det fulla spelet!" + moreplayersneeded: "$count$ fler spelare behövs." + moreplayersneeded-one: "$count$ fler spelare behövs." + moreteamsneeded: "Minst två spelare i två olika lag som behövs för att starta spelet!" +sign: + firstline: "&6[Bedwars]" + players: "Spelare" + gamestate: + stopped: "&4Stoppad!" + waiting: "&aväntar ..." + running: "&9På!" + full: "Full!" +stats: + header: "Bedwars statistik" + kd: "K/D" + statsnotfound: "Statistik över $player$ hittades inte!" + name: "Namn" + kills: "Antal dödade" + deaths: "Dödsfall" + wins: "Vinster" + loses: "Förluster" + score: "Poäng" + destroyedBeds: "Förstörda sängar" + games: "Spel" +commands: + addgame: + name: "Lägg till spel" + desc: "Lägger till ett nytt spel" + addteam: + name: "Lägg till ett lag" + desc: "Lägger till ett team för ett specifikt spel" + join: + name: "Gå med i spelet" + desc: "Ansluter till ett specifikt spel" + leave: + name: "Lämna spel" + desc: "Lämna det aktuella spelet" + save: + name: "Spara Spelet" + desc: "Sparar ett spel (och karta) till config fil(er)" + settarget: + name: "Ange mål" + desc: "Anger platsen för en lagets mål block" + setbed: + name: "Ställ sängen (synonym för settarget)" + desc: "Anger platsen för ett lags säng block (Synonym för settarget)" + setlobby: + name: "Ange lobbyn" + desc: "Anger platsen för gamelobby" + setregion: + name: "Anger en region punkt" + desc: "Anger en region punkt för spelet" + setspawn: + name: "Anger ett lags spawn" + desc: "Sätter spawn av det valda laget" + setspawner: + name: "Ställ in spawner" + desc: "Anger en spawner placering av en specifik Resurs" + start: + name: "Starta Spel" + desc: "Startar ett spel" + stop: + name: "Stoppa spelet" + desc: "Stannar ett spel" + help: + name: "Visa hjälp" + desc: "Visa information om plugin och dess kommandon" + reload: + name: "Ladda om" + desc: "Laddar om konfigurationer och översättningar" + setmainlobby: + name: "Ange huvudlobbyn" + desc: "Anger huvudlobbyn av ett spel (behövs när mainlobby-enabled ställs in till true)" + list: + name: "Lista spel" + desc: "Listar alla tillgängliga spel" + regionname: + name: "Ange regionens namn" + desc: "Anger en enskild regions namn (istället för världens namn)" + removeteam: + name: "Ta bort lag" + desc: "Tar bort ett lag från spelet (endast i stoppat läge)" + removegame: + name: "Ta bort spelet" + desc: "Tar bort ett spel och varje konfiguration" + clearspawner: + name: "Ta bort spawners" + desc: "Tar bort alla spawners från spelet. Sparande behövs." + gametime: + name: "Ställ in spelet tid" + desc: "Anger den spela tid som bör användas i spel-världen" + stats: + name: "Statistik" + desc: "Visar din statistik" + setbuilder: + name: "Väljer byggaren av kartan" + desc: "Väljer byggaren av kartan som kommer att visas i titeln när spelet startar." + setgameblock: + name: "Ställa in spel blocket" + desc: "Anger blocktyp för detta spel som bör användas i stället för 'game-block' konfigurationen. Skriv 'Standard' som du vill använda typ av konfigurationen igen" + setautobalance: + name: "Ställ in autobalance" + desc: "Om 'global-autobalance' är 'false', med detta kommando kan du ange team-autobalance per match till att aktivera eller inaktivera!" + setminplayers: + name: "Ange minst spelare" + desc: "Anger mängden spelare som behövs för att starta spelet" + kick: + name: "Sparka spelare" + desc: "Sparkar en spelare från det aktuella spelet!" + addteamjoin: + name: "Lägga till laget i selectionen" + desc: "Markera en varelse som kan användas till ett specifikt lag!" + addholo: + name: "Lägg till hologram plats" + desc: "Ett statistik hologram kommer att placeras vid din position!" + removeholo: + name: "Ta bort hologram platsen" + desc: "När kommandot utfördes, spelaren kan högerklicka på hologrammet som bör tas bort." + explain: "Utföra en vänster klick inom 10 sekunder på hologrammet du vill ta bort." + debugpaste: + name: "Klistra in debug data" + desc: "Detta kommer att skicka lite debug data till hastebin och ger tillbaka en länk som du kan dela med utvecklarna" + itemspaste: + name: "Skicka ditt inventory till en fil" + desc: "Detta kommer att återvända en länk där du kan se ditt nuvarande inventory som ett exempel för din shop.yml" diff --git a/common/src/main/resources/locale/th_TH.yml b/common/src/main/resources/locale/th_TH.yml new file mode 100644 index 0000000..d002d3b --- /dev/null +++ b/common/src/main/resources/locale/th_TH.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "หน้า $current$ จาก $max$" + currently: ในขณะนี้ +errors: + argumentslength: "参数不正确!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "ชื่อเกมนี้ใช้ไปแล้ว" + gamenotfound: "ไม่พบเกม '$game$'" + nofreegames: "ไม่มีเกมส์ฟรีเปิดให้บริการ" + gamenotfoundsimple: "ไม่พบเกม" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "สีทีมที่กำหนดไม่เป็นสีที่ใช้ได้" + teamnamelength: "ชื่อทีมต้องยาวระหว่าง 2 ถึง 20 ตัว" + teamnotfound: "ไม่พบทีม" + notingame: "คุณไม่อยู่ในเกมในขณะนี้" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "บล็อกที่คุณยืนอยู่ไม่มี" + gamenotrunning: "เกมยังไม่ทำงาน" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "ไม่สามารถเริ่มเกมได้" + gameloaderror: "โหลดเกม '$game$ ' มีข้อผิดพลาด" + regionnotfound: "ไฟล์พื้นที่นี้ไม่มี" + savesign: "Couldn't create a new sign config file!" + nogames: "ไม่พบเกมใดๆ" + notenoughress: "คุณไม่มีทรัพยากรพอที่จะซื้อไอเทมนี้" + teamnameinuse: "ชื่อทีมนี้ถูกใช้แล้ว" + minplayersmustnumber: "ผู้เล่นขั้นต่ำต้องเป็นตัวเลข" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "ไม่สามารถทำแบบนั้นในขณะเกมดำเนินอยู่" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "คุณไม่ได้อยู่กลางอากาศ" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "คุณต้องอยู่ในเกมจึงจะสามารถเตะผู้เล่นได้" + playernotingame: "ผู้เล่นนี้ไม่ได้อยู่ในเกม" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "'$team$ ' เพิ่มทีมเรียบร้อยแล้ว" + joined: "คุณได้เข้าเกมอย่างสมบูรณ์" + left: "คุณออกเกมเรียบร้อยแล้ว" + saved: "บันทึกเกมนี้เรียบร้อย" + bedset: "คุณได้เซ็ตจุดเกิดของทีม $team$ แล้ว" + regionset: "ตั้งค่าขอบเขตพิกัด $location$ สำหรับเกม $game$ เรียบร้อยแล้ว!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "การวางจุดเกินของทีม $name$ เสร็จสมบูรณ์แล้ว" + stopped: "หยุดเกมเรียบร้อยแล้ว!" + lobbyset: "ตั้งค่าล็อบบี้เรียบร้อยแล้ว!" + gameloaded: "เกม $game$ ทำการโหลดสำเร็จแล้ว!" + reloadconfig: "รีโหลดสำเร็จ!" + teamremoved: "ลบทีมออกแล้วสำเร็จ!" + gameremoved: "ลบเกมออกแล้วสำเร็จ!" + spawnercleared: "จุดเกิดไอเท็มทั้งหมดได้ถูกเอาออก!" + gamerun: "คุณได้เปิดให้เล่นเกมนี้แล้ว, ผู้เล่นสามารถเข้าเล่นได้!" + timeset: "ตั้งเวลาในการเล่นเรียบร้อย!" + regionnameset: "ได้ตั้งชื่อพื้นที่นี้เรียบร้อย" + minplayersset: "เซ็ทจำนวนผู้เล่นอย่างน้อยสำเร็จแล้ว" + mainlobbyset: "การตั่งค่าของLobbyหลักเสร็จสมบูรณ์" + gametimeset: "กำหนดเวลาของเกมนี้เสร็จสมบูรณ์แล้ว" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalanceได้เปิดเรียบร้อย" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "ต้องตั้งทีมให้มากกว่านี้" + NO_RES_SPAWNER_ERROR: "คุณยังไม่ได้ตั้งspawnerทรัพยากร" + NO_LOBBY_SET: "คุณไม่ได้เซ็ทล็อบบี้" + TEAMS_WITHOUT_SPAWNS: "มีทีมที่มไม่มีจุดเกิด" + NO_ITEMSHOP_CATEGORIES: "ไม่มีเจอitemshopประเภทนี้" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "มีทีมที่ยังไม่ได้เซทเตียง" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "ทีม" + all: "ทั้งหมด" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "ยินดีด้วย! ทีม $team$ ได้รับชัยชนะ!" + draw: "เกมได้จบลงแล้ว! ทุกคนเสมอ!" + serverrestart: "เซิฟเวอร์จะเริ่มใหม่ภายในเวลา $sec$ วินาที!" + gamestarting: "เกมกำลังเริ่ม ..." + gamestarted: "เกม '$game$' ได้เริ่มขึ้นแล้ว!" + backtolobby: "กลับไปล็อบบี้ใน $sec$ วินาที!" + spectator: "ผู้ชม" + spectate: "&aผู้ชม" + teamchest: "กล่องของทีม" + noturteamchest: "กล่องนี้ไม่ใช่กล่องของทีมคุณนะ!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "ทีม $team$ ได้ถูกทำลายแล้ว!" + no-friendlybreak: "&cคุณไม่สามารถทำลายบล็อคใต้สมาชิกทีมของคุณ!" + teamchestdestroy: "&cหนึ่งในกล่องทีมของคุณได้ถูกทำลายแล้ว!" + title: + map-builder: "สร้างโดย $builder$" + win-title: "&6ยินดีด้วย!" + win-subtitle: "$team$&6 ได้รับชัยชนะภายในเวลา &e$time$" + shop: + name: "ร้านไอเทม" + newshop: "ใช้ร้านค้ารูปแบบใหม่" + oldshop: "ใช้ร้านค้ารูปแบบเก่า" + fullstackpershift: "หลายแพ็คต่อกดshiftและคลิ๊กซ้าย" + onestackpershift: "1แพ็คต่อกดshiftและคลิ๊กซ้าย" + player: + left: "ผู้เล่น $player$ ผู้นี้ได้ออกจากเกมไปแล้ว!" + died: "$player$ ตาย!" + killed: "$killer$ ฆ่า $player$!" + kicked: "$player$ โดนเตะออก!" + waskicked: "คุณได้ถูกเตะออกแล้ว!" + blocks: + ownbeddestroy: "คุณไม่สามารถทุบเตียงทีมคุณเองนะ!" + beddestroyed: "$player$ ได้ทำลายเตียงของทีม $team$!" + specials: + rescue-platform: + left: "มีเวลา &c$time$&f วินาทีที่เหลือคุณถึงสามารถใช้แท่งช่วยชีวิตอีกได้!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cการป้องกันธนูของคุณสิ้นสุดแล้ว" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eบางคนได้ถูก &ctrap&e ของทีมของคุณ!" + protection-wall: + left: "มีเวลา &c$time$&f second(s) วินาทีที่เหลือคุณถึงสามารถใช้กำแพงป้องกันได้!" + not-usable-here: "คุณไม่สามารถใช้กำแพงป้องกันได้!" + warp-powder: + cancelled: "&cการเทเลพอร์ตของคุณได้ถูกยกเลิกแล้ว!" + start: "คุณจะถูกเทเลพอร์ตภายในเวลา &c$time$&f วินาที อย่าขยับ!" + cancel: "&4ยกเลิกเทเลพอร์ต" + multiuse: "&cคุณเพิ่งจะเทเลพอร์ตไปเอง!" + tntsheep: + no-target-found: "ไม่เจอผู้เล่นที่เป็นเป้าหมายเลย!" + tracker: + no-target-found: "ไม่เจอผู้เล่นที่เป็นเป้าหมายเลย!" + target-found: "$player$ อยู่ห่าง $blocks$ บล็อคจากคุณ." +lobby: + countdown: "เกมจะเริ่มใน $sec$ วินาที!" + countdowncancel: "ต้องการผู้เล่นอีก การนับเวลาได้ถูกยกเลิกไปแล้ว!" + cancelcountdown: + not_enough_players: "เกมนี้ต้องการผู้เล่นอีก การนับเวลาได้ถูกยกเลิกไปแล้ว!" + not_enough_teams: "เกมนี้ต้องการทีมอีก การนับเวลาได้ถูกยกเลิกไปแล้ว!" + cancelstart: + not_enough_players: "จำนวนผู้เล่นไม่เพียงพอต่อการเริ่มเกม!" + not_enough_teams: "จำนวนทีมไม่เพียงพอต่อการเริ่มเกม!" + chooseteam: "เลือกทีม" + startgame: "เริ่มเกม" + reduce_countdown: "ลดเวลาในล็อบบี้" + gamefull: "เกมนี้คนเต็ม!" + gamefullpremium: "เกมนี้พึ่งเต็มไปด้วยผู้เล่นพิเศษเอง!" + teamjoined: "คุณได้เข้าร่วมทีม $team$" + leavegame: "ออกเกม" + playerjoin: "ผู้เล่น $player$ ได้เข้ามาในเกมแล้ว!" + kickedbyvip: "คุณถูกเตะโดยผู้เล่นพิเศษที่เข้ามาในห้องที่เต็ม!" + moreplayersneeded: "ขาดผู้เล่นอีก $count$ คน" + moreplayersneeded-one: "ขาดผู้เล่นอีก $count$ คน" + moreteamsneeded: "จำนวนทีมไม่พอในการเริ่มเกม!" +sign: + firstline: "&6[Bedwars]" + players: "ผู้เล่น" + gamestate: + stopped: "&4เกมหยุดแล้ว!" + waiting: "&aกำลังรอคนเข้า..." + running: "&9เกมกำลังเริ่ม!" + full: "เต็ม!" +stats: + header: "สถานะ Bedwars" + kd: "K/D" + statsnotfound: "สถานะของ $player$ ไม่พบ!" + name: "ขื่อ" + kills: "ฆ่า" + deaths: "ตาย" + wins: "ชนะ" + loses: "แพ้" + score: "คะแนน" + destroyedBeds: "ทำลายเตียง" + games: "เกม" +commands: + addgame: + name: "สร้างเกม" + desc: "สร้างเกมใหม่" + addteam: + name: "เพิ่มทีม" + desc: "Adds a team to a specific game" + join: + name: "เข้าเกม" + desc: "เข้าร่วมในเกมนี้" + leave: + name: "ออกจากเกม" + desc: "ออกจากเกมในขณะนี้" + save: + name: "บันทึกเกม" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "กำหนดเป้าหมาย" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "ตั้งค่าล็อบบี้" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "ตั้งจุดเกิดทีม" + desc: "ตั้งจุดเกิดของทีมที่มี" + setspawner: + name: "ตั้งspawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "เริ่มเกม" + desc: "เริ่มเกม" + stop: + name: "หยุดเกม" + desc: "หยุดเกม" + help: + name: "แสดงวิธีใช้" + desc: "แสดงข้อมูลเกี่ยวกับปลักอินและคำสั่ง" + reload: + name: "รีโหลด" + desc: "รีโหลดการตั้งค่าและการแปล" + setmainlobby: + name: "ตั้งล็อบบี้หลัก" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "รายชื่อเกม" + desc: "Lists all available games" + regionname: + name: "ตั้งชื่อพื้นที่" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "ลบทีมนี้ออก" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "ลบเกมออก" + desc: "ลบเกมและการตั้งค่าทั้งหมด" + clearspawner: + name: "ลบspawnerออก" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "ตั้งเวลาเกม" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "สถิติ" + desc: "Shows your statistics" + setbuilder: + name: "ตั้งคนสร้างแมพ" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "แตะผู้เล่น" + desc: "แตะผู้เล่นออกจากเกมนี้" + addteamjoin: + name: "เพิ่มทีมตัวเลือก" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "ลบตำแหน่งของโฮโลแกรม" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/tlh_AA.yml b/common/src/main/resources/locale/tlh_AA.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/tlh_AA.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/tr_TR.yml b/common/src/main/resources/locale/tr_TR.yml new file mode 100644 index 0000000..4a10783 --- /dev/null +++ b/common/src/main/resources/locale/tr_TR.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "$max$ sayfadan $current$ ci" + currently: Şuanda +errors: + argumentslength: "Bağımsız değişkenleri doğru miktarı aynı değil!" + holodependencynotfound: "Hologram Istatikleri için $dependency$ bulunamadı" + packagenotfound: "$package$ paketi çekilemedi!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "Bu isimde bir oyun zaten var!" + gamenotfound: "Oyun '$game$' bulunamadı!" + nofreegames: "Hiçbir ücretsiz oyunlar mevcuttur." + gamenotfoundsimple: "Oyun bulunamadı!" + playeramount: "Maksimum oyuncu sayısı 1'den küçük 24'ten büyük olamaz!" + teamcolornotallowed: "Takım rengi izin verilen renk değildir" + teamnamelength: "Takım ismi 2 ile 20 karakter arasında olmak zorundadır!" + teamnotfound: "Takım bulunamadı!" + notingame: "Şuan'da bir oyunda değilsin!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "Üzerinde durduğuna blok bulunamadı!" + gamenotrunning: "Oyun çalışmıyor!" + bungeenoserver: "Bungeecord Sunucuları doğru ayarlanmadı! Sunucu yöneticisi ile konuşun!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "Çalışan veya durdurulmuş bir oyuna katılamazsın!" + lobbyongameworld: "Lobi oyun dünyasında olamaz!" + gamenotloaded: "Oyun başlatılamadı!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Bölge dosyası yok!" + savesign: "Couldn't create a new sign config file!" + nogames: "Oyun bulunamadı!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "Oyuna Başarıyla Katıldın!" + left: "Başarılı bir şekilde oyunu bıraktın!" + saved: "Oyunu başarıyla kaydedildi!" + bedset: "$team$ takımının yeniden doğma bloğu ayarlandı!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Oyunu başarıyla durduruldu!" + lobbyset: "Lobi başarıyla kuruldu!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Yeniden başlatma başarılı." + teamremoved: "Takım Başarıyla Silindi.\n" + gameremoved: "Oyun Başarıyla Silindi." + spawnercleared: "Tüm Spawnerlar Silindi.\n" + gamerun: "You started the game, players can now join!" + timeset: "Oyun Saati Başarıyla Ayarlandı.\n" + regionnameset: "Bölge ismi oluşturuldu!" + minplayersset: "En Az Oyuncu Belirlendi.\n" + mainlobbyset: "Mainlobi Başarıyla Ayarlandı.\n" + gametimeset: "Oyun Süresi Başarıyla Ayarlandı.\n" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "Sen Lobiyi Ayarlamadın." + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Takım" + teams: "Takımlar" + all: "Tümü" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Oyun Başlatılıyor..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "İzleyiciler" + spectate: "&aİzleyici" + teamchest: "Takım Sandığı" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "$builder$ Tarafından İnşa Edildi" + win-title: "&6Tebrikler" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Market" + newshop: "Yeni dükkan kullan" + oldshop: "Eski marketi kullan" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Işınlanma İptal Edildi" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "Hedef Oyuncu Bulunamadı!" + tracker: + no-target-found: "Hedef Oyuncu Bulunamadı!" + target-found: " $player$ Senden $block$ Blok Ötede." +lobby: + countdown: "Oyunun Başlamasına $sec$ Saniye Kaldı." + countdowncancel: "Az Oyuncu Olduğundan Geri Sayım Durduruldu! " + cancelcountdown: + not_enough_players: "Az Oyuncu Olduğundan Geri Sayım Durduruldu!" + not_enough_teams: "Yeteri Kadar Takım Olmadığından Geri Sayım Durduruldu!\n" + cancelstart: + not_enough_players: "Oyunun Başlaması İçin Daha Fazla Oyuncuya İhtiyaç Var." + not_enough_teams: "Yeteri Kadar Takım Olmadığından Oyun Başlatılamadı!" + chooseteam: "Takım Seç" + startgame: "Oyunu Başlat" + reduce_countdown: "Geri Sayımı Azalt" + gamefull: "Oyun Dolu!" + gamefullpremium: "Oda Dolu Olduğundan Giriş Yapamıyorsun Ancak Vip Alarak Giriş Yapabilirsin!" + teamjoined: "Başarıyla $team$ Takıma Girdin" + leavegame: "Odadan Ayrıl" + playerjoin: "$player$ Oyuna Katıldı!" + kickedbyvip: "Yetkili Tarafından Oyundan Atıldınız!" + moreplayersneeded: "$count$ daha fazla oyuncu gerek!" + moreplayersneeded-one: "$count$ daha fazla oyuncu gerek!" + moreteamsneeded: "Oyunun Başlaması İçin Odada En Az 2 Oyuncu Olması Gerekir!" +sign: + firstline: "&6[Bedwars]" + players: "Oyuncu" + gamestate: + stopped: "&4Durduruldu!" + waiting: "&aBekleniyor ..." + running: "&9Devam Ediyor!" + full: "Dolu!" +stats: + header: "Bedwars İstatistikleri" + kd: "Ölüm/Öldürme Oranı" + statsnotfound: "Statistics of $player$ not found!" + name: "İsim" + kills: "Öldürme" + deaths: "Ölme" + wins: "Kazanma" + loses: "Kaybetme" + score: "Skorlar" + destroyedBeds: "Yatak Kırma" + games: "Oyun" +commands: + addgame: + name: "Oyun Ekle" + desc: "Yeni Oyunlar Eklendi" + addteam: + name: "Takım Ekle" + desc: "Adds a team to a specific game" + join: + name: "Oyuna Katıl" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Oyun Lobisinin bölgesini ayarlar" + setregion: + name: "bir bölge noktası oluşturur" + desc: "oyunun bölge noktasını oluşturur" + setspawn: + name: "Takımın doğacağı yeri ayarlar" + desc: "Sets the spawn of the given team" + setspawner: + name: "Spawner Koy" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Oyunu Başlat" + desc: "Oyun başlatır" + stop: + name: "Oyunu Durdurur." + desc: "Bir oyunu durdurur" + help: + name: "Yardım sayfasını görüntüler" + desc: "Display information about the plugin and its commands" + reload: + name: "Yeniden yükler" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "MainLobiyi Ayarla" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "Oyunları Listele" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Takım Sil" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Oyunu Sil" + desc: "Removes a game and every configuration" + clearspawner: + name: "Spawnerları Sil" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "İstatistikleri" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Oyun Bloğunu Ayarla" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "En Az Oyuncuyu Ayarla" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Oyuncuyu Oyundan At" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Hologram Ekle" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Belirli Hologramı Yoket" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/tzl_TZL.yml b/common/src/main/resources/locale/tzl_TZL.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/tzl_TZL.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/uk_UA.yml b/common/src/main/resources/locale/uk_UA.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/uk_UA.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/val_ES.yml b/common/src/main/resources/locale/val_ES.yml new file mode 100644 index 0000000..d654a45 --- /dev/null +++ b/common/src/main/resources/locale/val_ES.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Page $current$ of $max$" + currently: Currently +errors: + argumentslength: "Number of arguments does not match the correct amount!" + holodependencynotfound: "Couldn't find $dependency$ for Hologram-Statistic" + packagenotfound: "Couldn't fetch $package$ package!" + classnotfound: "Couldn't fetch $package$ class $class$!" + gameexists: "A game with this name already exists!" + gamenotfound: "The game '$game$' could not be found!" + nofreegames: "There are no free games available." + gamenotfoundsimple: "Game not found!" + playeramount: "The maxium of players can't be lower than 1 or higher than 24!" + teamcolornotallowed: "The given Team color isn't a allowed color" + teamnamelength: "Team name must have between 2 and 20 characters!" + teamnotfound: "Team not found!" + notingame: "You are currently not in a game!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "The block you're standing on was not found!" + gamenotrunning: "Game isn't running!" + bungeenoserver: "Bungeecord Servers wasn't set properly! Talk to the server administrator!" + cantstartagain: "Game is running! You can't start a running game again!" + startoutofwaiting: "Game have to be started out of the waiting mode!" + cantjoingame: "You can't join a running or stopped game!" + lobbyongameworld: "Lobby can't be on the game world!" + gamenotloaded: "Couldn't start up the game!" + gameloaderror: "Loading game '$game$' throws an error!" + regionnotfound: "Region file does not exists!" + savesign: "Couldn't create a new sign config file!" + nogames: "No games found!" + notenoughress: "You didn't have enough ressource to buy this item!" + teamnameinuse: "Team name is already in use!" + minplayersmustnumber: "Min players must be a number!" + toolongregionname: "Maximum length of region name are 15 characters!" + notwhilegamerunning: "Cannot do that while game is running!" + notwhileingame: "Cannot do that while you're in a running game!" + timeincorrect: "Time has to be a number (0 ... 23000), 'day' or 'night'!" + minplayersnumeric: "The min-players parameter must be numeric!" + notinair: "You're not in the air!" + teamfull: "The team is full, please reopen the team selection menu!" + novalidmaterial: "Given block type (material) isn't correct!" + wrongvalueonoff: "Wrong Parameter! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "Given player was not found or isn't online!" + notingameforkick: "You must be in a game to kick a player!" + playernotingame: "Given player is not in this game!" + mustbeinlobbyworld: "You must be in the lobby world of the game" + addteamjoincancel: "The adding of team join was cancelled!" + entitynotcompatible: "This entity is not compatible with team join!" +success: + gameadded: "New game '$game$' successfully added!" + teamadded: "Team '$team$' successfully added!" + joined: "You successfully joined the game!" + left: "You successfully left the game!" + saved: "Game was successfully saved!" + bedset: "You sucessfully set the respawn block of team $team$!" + regionset: "Game region location $location$ for Game $game$ was set successfully!" + spawnset: "Spawn location for Team $team$ was set successfully!" + spawnerset: "Ressource spawn location for $name$ was set successfully!" + stopped: "Game successfully stopped!" + lobbyset: "Lobby was set successfully!" + gameloaded: "Game '$game$' successfully loaded!" + reloadconfig: "Reload successful!" + teamremoved: "Team was successfully removed!" + gameremoved: "Game was successfully removed!" + spawnercleared: "All ressource spawners has been removed!" + gamerun: "You started the game, players can now join!" + timeset: "Game time was successfully set!" + regionnameset: "Region name was set successfully!" + minplayersset: "Min players was set successfully!" + mainlobbyset: "Mainlobby was set successfully!" + gametimeset: "Game time was set successfully!" + materialset: "The respawn block type (material) was set succesfully!" + builderset: "The builder for the map was set successfully and will display in title!" + autobalanceseton: "Autobalance was successfully turned on!" + autobalancesetoff: "Autobalance was successfully turned &coff&a!" + selectteamjoinentity: "Now do a right click on the entity you want to use as team join!" + teamjoinadded: "Entity was successfully marked as team selection for team $team$" + holoremoved: "Hologram-Statistic successfully removed!" +gamecheck: + LOC_NOT_SET_ERROR: "Locations for the region were not set properly!" + TEAM_SIZE_LOW_ERROR: "You have to set more teams!" + NO_RES_SPAWNER_ERROR: "You didn't set any resource spawner!" + NO_LOBBY_SET: "You didn't set a lobby!" + TEAMS_WITHOUT_SPAWNS: "There are team(s) without a spawn location!" + NO_ITEMSHOP_CATEGORIES: "No itemshop categories found!" + NO_MAIN_LOBBY_SET: "You didn't set a main lobby even though you did set 'tomainlobby' to true" + TEAM_NO_WRONG_BED: "One or more teams have no bed set!" + TEAM_NO_WRONG_TARGET: "One or more teams have no respawn block set!" +ingame: + team: "Team" + teams: "Teams" + all: "All" + record: "&e$record$&a is the record on this map!" + record-with-holders: '&aThe record on this map is &e$record$&a and is held by: $holders$' + newrecord: '&aTeam $team$&a set a new record: &6$record$' + record-nobeddestroy: "&cRecord won't be saved, because no bed was destroyed!" + teamwon: "Congratulations! Team $team$ won!" + draw: "The game ends with a draw!" + serverrestart: "Server restart in $sec$ second(s)!" + gamestarting: "Game starting ..." + gamestarted: "Game '$game$' has just started!" + backtolobby: "Back to lobby in $sec$ second(s)!" + spectator: "Spectator" + spectate: "&aSpectate" + teamchest: "Team chest" + noturteamchest: "This chest isn't a chest of your team!" + protectionleft: "Invulnerable for &c$length$&f second(s)!" + protectionend: "You're now &cvulnerable&f again!" + team-dead: "Team $team$ was destroyed!" + no-friendlybreak: "&cCan't break block under team-member!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Built by $builder$" + win-title: "&6Congratulations!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Itemshop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "One stack per shift click" + player: + left: "Player $player$ has left the game!" + died: "$player$ died!" + killed: "$killer$ killed $player$!" + kicked: "$player$ was kicked!" + waskicked: "You were kicked from the game!" + blocks: + ownbeddestroy: "You can't destroy your own bed!" + beddestroyed: "$player$ destroyed bed of team $team$!" + specials: + rescue-platform: + left: "There are &c$time$&f second(s) left until you can use the next rescue platform!" + arrow-blocker: + start: "You are protected from being hit by arrows for &c$time$&f second(s)." + end: "&cYour arrow protection is over" + left: "There are &c$time$&f second(s) left until you can use the next arrowblocker!" + trap: + trapped: "&eSomeone went into a &ctrap&e of your team!" + protection-wall: + left: "There are &c$time$&f second(s) left until you can use the next protection wall!" + not-usable-here: "You cannot use the protection wall here!" + warp-powder: + cancelled: "&cYour teleport was cancelled!" + start: "You will be teleported in &c$time$&f second(s). Don't move!" + cancel: "&4Cancel teleport" + multiuse: "&cYou started a teleportation already!" + tntsheep: + no-target-found: "No target player was found!" + tracker: + no-target-found: "No target player was found!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Game will start in $sec$ second(s)!" + countdowncancel: "More players needed. Countdown was cancelled!" + cancelcountdown: + not_enough_players: "More players needed. Countdown cancelled!" + not_enough_teams: "More teams needed. Countdown cancelled!" + cancelstart: + not_enough_players: "More players are needed to start the game!" + not_enough_teams: "More teams are needed to start the game!" + chooseteam: "Choose a team" + startgame: "Start game" + reduce_countdown: "Reduce countdown" + gamefull: "Game is full!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "You successfully joined the team $team$" + leavegame: "Leave game" + playerjoin: "Player $player$ joined the game!" + kickedbyvip: "You were kicked by a vip player which has joined the full game!" + moreplayersneeded: "$count$ more players needed." + moreplayersneeded-one: "$count$ more player needed." + moreteamsneeded: "A minimum of two players in two different teams is needed to start the game!" +sign: + firstline: "&6[Bedwars]" + players: "Players" + gamestate: + stopped: "&4Stopped!" + waiting: "&aWaiting ..." + running: "&9Running!" + full: "Full!" +stats: + header: "Bedwars Stats" + kd: "K/D" + statsnotfound: "Statistics of $player$ not found!" + name: "Name" + kills: "Kills" + deaths: "Deaths" + wins: "Wins" + loses: "Loses" + score: "Scores" + destroyedBeds: "Destroyed Beds" + games: "Games" +commands: + addgame: + name: "Add Game" + desc: "Adds a new game" + addteam: + name: "Add Team" + desc: "Adds a team to a specific game" + join: + name: "Join Game" + desc: "Joins a specific game" + leave: + name: "Leave Game" + desc: "Leave the current game" + save: + name: "Save Game" + desc: "Saves a game (and map) to config file(s)" + settarget: + name: "Set target" + desc: "Sets the location of a team's target block" + setbed: + name: "Set bed (synonym for settarget)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Start game" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "List games" + desc: "Lists all available games" + regionname: + name: "Set region name" + desc: "Sets an individual region name (instead of world name)" + removeteam: + name: "Remove team" + desc: "Removes a team from the game (only in stopped mode)" + removegame: + name: "Remove game" + desc: "Removes a game and every configuration" + clearspawner: + name: "Clear spawners" + desc: "Removes all spawners from the game. Saving needed." + gametime: + name: "Set game time" + desc: "Sets the game time which should be used in the game-world" + stats: + name: "Statistics" + desc: "Shows your statistics" + setbuilder: + name: "Sets builder of map" + desc: "Sets the builder of the map which will be display in the title when game starts." + setgameblock: + name: "Set game block" + desc: "Sets the game block type for this game which should be used instead of the 'game-block' configuration. Write 'DEFAULT' as type to use the type of config again" + setautobalance: + name: "Set autobalance" + desc: "If 'global-autobalance' is set to 'false', with this command you can set team-autobalance per game to on or off!" + setminplayers: + name: "Set minimum players" + desc: "Sets the amount of players needed to start the game" + kick: + name: "Kick player" + desc: "Kicks a player from the current game!" + addteamjoin: + name: "Add team selection" + desc: "Mark a creature which can be used to join a specific team!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Remove hologram location" + desc: "When the command was executed, the player can right-click the hologram which should be removed." + explain: "Perform a left click within 10 seconds on the hologram you want to remove." + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/vi_VN.yml b/common/src/main/resources/locale/vi_VN.yml new file mode 100644 index 0000000..056ed4d --- /dev/null +++ b/common/src/main/resources/locale/vi_VN.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "Trang $current$ của $max$" + currently: Trym +errors: + argumentslength: "Số lượng các đối số không khớp với số tiền chính xác!" + holodependencynotfound: "Không thể tìm thấy $dependency$ cho ba chiều-thống kê" + packagenotfound: "Không thể lấy $package$ gói!" + classnotfound: "Không thể lấy $package$ lớp $class$!" + gameexists: "Một trò chơi với tên này đã tồn tại!" + gamenotfound: "Không tìm thấy các trò chơi '$game$ '!" + nofreegames: "Không có không có trò chơi miễn phí." + gamenotfoundsimple: "Trò chơi không được tìm thấy!" + playeramount: "Số người chơi không thể ít hơn 1 hoặc nhiều hơn 24!" + teamcolornotallowed: "Màu của đội đã có không phải là màu cho phép" + teamnamelength: "Tên đội phải từ 2 đến 20 kí tự!" + teamnotfound: "Không tìm thấy đội!" + notingame: "Bạn hiện đang không ở trong một trò chơi!" + bedtargeting: "You have to target or stand on a block of the configured 'game-block' type!" + regionargument: "Your location argument has to be 'loc1' or 'loc2'!" + spawnerargument: "The resource parameter has to be a valid configured resource!" + blockdownnotfound: "Không tìm thấy khối bạn đang đứng!" + gamenotrunning: "Trò chơi chưa bắt đầu!" + bungeenoserver: "Máy chủ Bungeecord không được cài đặt đúng! Liên hệ với quản trị viên máy chủ!" + cantstartagain: "Trận đấu đang chạy! Bạn không thể khởi động 1 trận đấu đang chạy lần nữa!" + startoutofwaiting: "Trò chơi có thể chạy ra khỏi chế độ chờ!" + cantjoingame: "Bạn không thể tham gia 1 trận đấu đang hoạt động hoặc kết thúc!" + lobbyongameworld: "Sảnh chính không thể ở thế giới của trận đấu!" + gamenotloaded: "Không thể khởi động trận đấu!" + gameloaderror: "Đang tải game '$game$' lỗi!" + regionnotfound: "Thư mục chứa tập tin không tồn tại!" + savesign: "Không thể tạo 1 tập tin cấu hình mới!" + nogames: "Không tìm thấy trận đấu!" + notenoughress: "Bạn không đủ nguyên liệu để mua vật phẩm này!" + teamnameinuse: "Tên nhóm đã được sử dụng!" + minplayersmustnumber: "Số người tối thiểu phải là 1 số tự nhiên!" + toolongregionname: "Số kí tự tối đa của tên vùng là 15 kí tự!" + notwhilegamerunning: "Bạn không thể làm việc đó khi trò chơi đang chạy!" + notwhileingame: "Bạn không thể làm điều đó khi bạn đang ở trong 1 trận đấu!" + timeincorrect: "Thời gian phải là một số từ 0 đến 24000, 'day' (ngày) hoặc 'night' (đêm)!" + minplayersnumeric: "Số người tối thiểu phải là 1 số!" + notinair: "Bạn không phải ở khoảng không!" + teamfull: "Đội này đã đủ người, xin vui lòng mở lại menu chọn đội!" + novalidmaterial: "Tên kiểu khối đã cho không chính xác!" + wrongvalueonoff: "Tham số sai! Sử dụng 'true' (đúng), 'on' (bật), 1 để bật - Sử dụng 'false' (sai), 'off' (tắt), 0 để tắt!" + playernotfound: "Tên cầu thủ đã cho không tìm thấy hoặc chưa online!" + notingameforkick: "Bạn phải ở trong 1 trận đấu mới có quyền đuổi 1 người chơi!" + playernotingame: "Tên người chơi đã cho không ở trong 1 trận đấu!" + mustbeinlobbyworld: "Bạn phải ở sảnh chính mới có thể làm việc này!" + addteamjoincancel: "Tham gia nhóm đã bị hủy bỏ!" + entitynotcompatible: "Thực thể này không phải là không tương thích với các đội tham gia!" +success: + gameadded: "Trò chơi mới '$game$' đã được thêm!" + teamadded: "Đội '$team$' đã thêm thành công!" + joined: "Bạn đã tham gia trò chơi!" + left: "Bạn thành công để lại các trò chơi!" + saved: "Trò chơi đã được lưu thành công!" + bedset: "Thiết lập thành công vị trí respawn của đội $team$!" + regionset: "Trò chơi vùng vị trí $location$ cho trò chơi $game$ đã được thiết lập thành công!" + spawnset: "Đẻ trứng vị trí cho nhóm $team$ đã được thiết lập thành công!" + spawnerset: "Địa điểm đẻ trứng ressource cho $name$ đã được thiết lập thành công!" + stopped: "Trò chơi dừng lại thành công!" + lobbyset: "Tiền sảnh được thiết lập thành công!" + gameloaded: "Trò chơi '$game$ ' nạp thành công!" + reloadconfig: "Tải lại thành công!" + teamremoved: "Đội bóng đã được loại bỏ thành công!" + gameremoved: "Trò chơi đã được loại bỏ thành công!" + spawnercleared: "Tất cả các điểm hồi sinh đã được gỡ bỏ!" + gamerun: "Bạn đã bắt đầu trò chơi, người chơi khác có thể tham gia bây giờ!" + timeset: "Thời gian trò chơi đã được thiết lập!" + regionnameset: "Tên vùng đã được thiết lập thành công!" + minplayersset: "Tối thiểu số người đã được thiết lập!" + mainlobbyset: "Sảnh chính đã được thiết lập!" + gametimeset: "Thời gian trò chơi đã được thiết lập!" + materialset: "Respawn vào khối(vật liệu) đã được thiết lập!" + builderset: "Bản đồ đã được thiết lập và sẽ hiển thị trong tiêu đề!" + autobalanceseton: "Autobalance đổi thành công và đã bật!" + autobalancesetoff: "Autobalance đã chuyển thành công &coff&a!" + selectteamjoinentity: "Hãy nhấp chuột phải vào một cái gì đó mà bạn muốn sử dụng khi tham gia nhóm!" + teamjoinadded: "Thực thể đã được đánh dấu thành công và lựa chọn đội cho đội $team$" + holoremoved: "Bảng thống kê 3D đã bị loại bỏ!" +gamecheck: + LOC_NOT_SET_ERROR: "Địa điểm cho các vùng đã được thiết lập không đúng!" + TEAM_SIZE_LOW_ERROR: "Bạn phải thiết lập thêm đội!" + NO_RES_SPAWNER_ERROR: "Bạn không thiết lập bất kỳ một spawner nào!" + NO_LOBBY_SET: "Bạn chưa đặt sảnh!" + TEAMS_WITHOUT_SPAWNS: "Có những đội (s) bạn chưa đặt vị trí spawn!" + NO_ITEMSHOP_CATEGORIES: "Không có loại itemshop được tìm thấy!" + NO_MAIN_LOBBY_SET: "Bạn không đặt sảnh chính mặc dù bạn đã đặt 'tomainlobby' đúng" + TEAM_NO_WRONG_BED: "Một hoặc nhiều đội đã không có giường để thiết lập!" + TEAM_NO_WRONG_TARGET: "Một hay một số đội không có khối respawn!" +ingame: + team: "Team" + teams: "Các đội" + all: "Tất cả" + record: "&e$record$&a được ghi trên bản đồ này!" + record-with-holders: '&aBản ghi trên bản đồ này là &e$record$&a và được giữ bởi: $holders$' + newrecord: '&aĐội $team$&a đã được thiết lập một kỷ lục mới: &6$record' + record-nobeddestroy: "&cBản ghi sẽ không được lưu lại, bởi vì một giường nào đó đã bị phá hủy!" + teamwon: "Đội $team$ thắng!" + draw: "Trò chơi kết thúc!" + serverrestart: "Khởi động lại máy chủ trong $sec$ giây(s)!" + gamestarting: "Trò chơi bắt đầu..." + gamestarted: "Trò chơi '$game$' vừa mới bắt đầu!" + backtolobby: "Quay lại sảnh trong $sec$ giây(s)!" + spectator: "Khán giả" + spectate: "& aNhìn" + teamchest: "Hòm Đội" + noturteamchest: "Rương này không phải là rương của nhóm bạn!" + protectionleft: "Bất khả xâm phạm cho &c$length$&f giây(s)!" + protectionend: "Giờ bạn &cdễ bị tấn công&f một lần nữa!" + team-dead: "Đội $team$ đã bị phá hủy!" + no-friendlybreak: "Không thể phá vỡ khối theo đội chả thành viên!" + teamchestdestroy: "&cOne of your teamchest(s) has been destroyed!" + title: + map-builder: "Được xây dựng bởi $builder$" + win-title: "&6Xin chúc mừng!" + win-subtitle: "$team$&6 won in &e$time$" + shop: + name: "Shop" + newshop: "Use new shop" + oldshop: "Use old shop" + fullstackpershift: "Multiply stacks per shift click" + onestackpershift: "Một ngăn xếp cho mỗi nhấp chuột thay đổi" + player: + left: "Người chơi $player$ đã rời trò chơi!" + died: "$player$ đã chết!" + killed: "$killer$ bị giết bởi $player$!" + kicked: "$player$ đã bị đá!" + waskicked: "Bạn đã bị đuổi khỏi trò chơi!" + blocks: + ownbeddestroy: "Bạn không thể phá hủy giường của đội bạn!" + beddestroyed: "$player$ đã phá hủy giường của đội $team$!" + specials: + rescue-platform: + left: "Còn &c$time$&f giây(s) để bạn có thể sử dụng lần cứu hộ tiếp theo!" + arrow-blocker: + start: "Bạn được bảo vệ khỏi các mũi tên trong &c$time$&f giây(s)." + end: "&cBảo vệ bạn khỏi các mũi tên đã kết thúc" + left: "Chờ &c$time$&f giây(s) sau mới có thể sử dụng đợt bảo vệ khỏi các mũi tên tiếp theo!" + trap: + trapped: "&eCó người đã rơi vào &ctrap&e của đội bạn!" + protection-wall: + left: "Chờ &c$time$&f giây(s) sau mới có thể sử dụng màn bảo vệ kế tiếp!" + not-usable-here: "Bạn không thể sử dụng màn chắn bảo vệ ở đây!" + warp-powder: + cancelled: "&cĐiểm teleport của bạn đã bị hủy!" + start: "Bạn sẽ được chuyển đến sau &c$time$&f giây(s). Đừng di chuyển!" + cancel: "&4Hủy teleport" + multiuse: "&cBạn đã bắt đầu một teleportation rồi!" + tntsheep: + no-target-found: "Không tìm thấy người chơi!" + tracker: + no-target-found: "Không tìm thấy người chơi!" + target-found: "$player$ is $blocks$ block(s) away from you." +lobby: + countdown: "Trò chơi sẽ bắt đầu trong $sec$ giây(s)!" + countdowncancel: "Cần thêm người chơi. Đếm ngược đã bị hủy bỏ!" + cancelcountdown: + not_enough_players: "Cần thêm người chơi. Đếm ngược đã bị hủy bỏ!" + not_enough_teams: "Cần nhiều đội hơn. Đếm ngược đã hủy bỏ!" + cancelstart: + not_enough_players: "Cần thêm người chơi để bắt đầu trò chơi!" + not_enough_teams: "Cần thêm nhiều đội để bắt đầu trò chơi!" + chooseteam: "Hãy chọn một đội" + startgame: "Trò chơi bắt đầu" + reduce_countdown: "Giảm đếm ngược" + gamefull: "Trò chơi đã đầy!" + gamefullpremium: "The game is full of premium players already!" + teamjoined: "Bạn đã gia nhập đội $team$" + leavegame: "Thoát trò chơi" + playerjoin: "Người chơi $player$ đã tham gia vào trò chơi!" + kickedbyvip: "Bạn đã bị đá ra ngoài bởi một người chơi Vip khi phòng đã đầy!" + moreplayersneeded: "Cần $count$ nhiều người chơi." + moreplayersneeded-one: "Cần $count$ người chơi." + moreteamsneeded: "Tối thiểu cần hai người chơi ở hai đội khác nhau để bắt đầu các trò chơi!" +sign: + firstline: "& 6[Bedwars]" + players: "Người chơi" + gamestate: + stopped: "& 4Dừng lại!" + waiting: "&Đang chờ..." + running: "& 9Đang chạy!" + full: "Đầy!" +stats: + header: "Bedwars số liệu thống kê" + kd: "K/D" + statsnotfound: "Số liệu thống kê của $player$ không tìm thấy!" + name: "Tên" + kills: "Giết" + deaths: "Chết" + wins: "Thắng" + loses: "Thua" + score: "Điểm" + destroyedBeds: "Giường đã bị phá hủy" + games: "Trò chơi" +commands: + addgame: + name: "Thêm trò chơi" + desc: "Thêm mới một trò chơi" + addteam: + name: "Thêm nhóm" + desc: "Thêm đội vào một trò chơi" + join: + name: "Tham gia trò chơi" + desc: "Tham gia một trò chơi cụ thể" + leave: + name: "Thoát trò chơi" + desc: "Rời khỏi trò chơi hiện tại" + save: + name: "Lưu trò chơi" + desc: "Lưu một trò chơi (bản đồ) vào tệp tin config(s)" + settarget: + name: "Đặt mục tiêu" + desc: "Sets the location of a team's target block" + setbed: + name: "Đặt giường (đồng nghĩa với mục tiêu đặt)" + desc: "Sets the location of a team's bed block (Synonym for settarget)" + setlobby: + name: "Set lobby" + desc: "Sets the location of the gamelobby" + setregion: + name: "Sets a region point" + desc: "Sets a region point for the game" + setspawn: + name: "Sets a team spawn" + desc: "Sets the spawn of the given team" + setspawner: + name: "Set spawner" + desc: "Sets a spawner location of a specific ressource" + start: + name: "Trò chơi bắt đầu" + desc: "Starts a game" + stop: + name: "Stop game" + desc: "Stops a game" + help: + name: "Show Help" + desc: "Display information about the plugin and its commands" + reload: + name: "Reload" + desc: "Reloads the configurations and translations" + setmainlobby: + name: "Set main lobby" + desc: "Sets the main lobby of a game (is needed when mainlobby-enabled is set to true)" + list: + name: "Danh sách trò chơi" + desc: "Liệt kê tất cả các trò chơi có sẵn" + regionname: + name: "Đặt tên vùng" + desc: "Đặt tên vùng riêng lẻ (thay vì tên thế giới)" + removeteam: + name: "Xóa nhóm" + desc: "Loại bỏ một đội từ trò chơi (chỉ ở chế độ dừng)" + removegame: + name: "Loại bỏ trò chơi" + desc: "Loại bỏ một trò chơi và mọi cấu hình" + clearspawner: + name: "Làm sạch spawners" + desc: "Loại bỏ tất cả spawners khỏi trò chơi. Tiết kiệm cần thiết." + gametime: + name: "Đặt thời gian chơi" + desc: "Thiết lập thời gian trò chơi cần được sử dụng trong trò chơi" + stats: + name: "Số liệu thống kê" + desc: "Cho thấy số liệu thống kê của bạn" + setbuilder: + name: "Bộ xây dựng bản đồ" + desc: "Bộ xây dựng bản đồ này sẽ hiển thị trong tiêu đề khi trò chơi bắt đầu." + setgameblock: + name: "Đặt khối trò chơi" + desc: "Bộ các loại trò chơi khối cho trò chơi này mà nên được sử dụng thay vì cấu hình 'trò chơi khối'. Viết 'Mặc định' như loại sử dụng loại cấu hình một lần nữa" + setautobalance: + name: "Thiết lập autobalance" + desc: "Nếu 'tự động cân bằng toàn cầu' được đặt thành 'sai', với lệnh này, bạn có thể đặt đội tự động cân bằng cho mỗi trò chơi để bật hoặc tắt!" + setminplayers: + name: "Đặt mức người chơi tối thiểu" + desc: "Đặt số lượng người chơi cần thiết để bắt đầu trò chơi" + kick: + name: "Đá người chơi" + desc: "Đá người chơi từ trò chơi hiện tại!" + addteamjoin: + name: "Thêm nhóm lựa chọn" + desc: "Đánh dấu một sinh vật có thể được sử dụng để tham gia một nhóm cụ thể!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "Xóa vị trí ảnh 3D" + desc: "Khi lệnh đã được thực hiện, người chơi có thể nhấp chuột phải vào hình 3D cần được loại bỏ." + explain: "Nhấp chuột trái trong vòng 10 giây trên hình 3D bạn muốn xóa." + debugpaste: + name: "Paste debug data" + desc: "Thao tác này sẽ gửi một số dữ liệu gỡ lỗi cho hastebin và trả về một liên kết mà bạn có thể chia sẻ với các nhà phát triển" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/zh_CN.yml b/common/src/main/resources/locale/zh_CN.yml new file mode 100644 index 0000000..7a11a75 --- /dev/null +++ b/common/src/main/resources/locale/zh_CN.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "第$current$页-共$max$页" + currently: 目前 +errors: + argumentslength: "参数不正确!" + holodependencynotfound: "全息显示前置插件缺失 $dependency$" + packagenotfound: "无法获得$package$ 包!" + classnotfound: "无法获得包 $package$ 的类$class$!" + gameexists: "以此为名的游戏已经存在!" + gamenotfound: "游戏 '$game$' 不存在!" + nofreegames: "暂时没有可以加入的游戏。" + gamenotfoundsimple: "游戏不存在!" + playeramount: "最大玩家数不能低于1,或高于24!" + teamcolornotallowed: "队伍颜色有误" + teamnamelength: "队伍名必须在2-20个字符之间!" + teamnotfound: "没有发现此队伍!" + notingame: "你不在游戏中!" + bedtargeting: "请指定或站在要配置的目标方块上!" + regionargument: "地点必须是 'loc1'或 'loc2'!" + spawnerargument: "资源参数必须是一个有效的配置!" + blockdownnotfound: "在你所站的地方没有方块!" + gamenotrunning: "游戏不能运行!" + bungeenoserver: "Bungeecord服务器设置不正确!请联系管理员!" + cantstartagain: "游戏运行中! 你不能再次开始这个游戏!" + startoutofwaiting: "游戏已在等待时开始!" + cantjoingame: "你不能加入正在进行或已经开始的游戏!" + lobbyongameworld: "大厅不能与游戏场地在同一个世界!" + gamenotloaded: "游戏无法开始!" + gameloaderror: "载入游戏'$game$'的时候出现一个错误!" + regionnotfound: "区域文件不存在!" + savesign: "不能创建一个新的牌子配置文件!" + nogames: "游戏不存在!" + notenoughress: "你没有足够的资源购买这个物品!" + teamnameinuse: "队伍名字已经被使用!" + minplayersmustnumber: "最小玩家数必须是一个数字!" + toolongregionname: "区域名字最大15个字符!" + notwhilegamerunning: "游戏运行前不能这么做!" + notwhileingame: "你不能在一个已开始的游戏中这么做!" + timeincorrect: "时间必须是一个数 (0 ... 23000),或 'day' 来表示白天,'night'来表示夜晚!" + minplayersnumeric: "最小玩家的数量必须是一个整数!" + notinair: "你不在空中!" + teamfull: "该队伍已满,请重新打开队伍选择菜单!" + novalidmaterial: "方块类型不正确!" + wrongvalueonoff: "参数错误! 使用 true,on或1 来表示打开 - 使用 false,off或0 来表示关闭!" + playernotfound: "指定玩家不存在或不在线!" + notingameforkick: "你只能在游戏中踢出玩家!" + playernotingame: "指定的玩家不在此游戏中!" + mustbeinlobbyworld: "你必须与游戏大厅处于同一个世界" + addteamjoincancel: "队伍的添加已被取消!" + entitynotcompatible: "该实体不能加入队伍!" +success: + gameadded: "新游戏'$game$'成功添加!" + teamadded: "成功添加队伍'$team$'!" + joined: "你加入了游戏!" + left: "你离开了游戏!" + saved: "成功保存游戏!" + bedset: "成功设置了$team$队的重生点!" + regionset: "成功为$game$设置区域$location$!" + spawnset: "成功设置了$team$队的出生点!" + spawnerset: "$name$的资源刷新点添加成功!" + stopped: "游戏停止!" + lobbyset: "大厅设置成功!" + gameloaded: "成功载入了游戏 '$game$'!" + reloadconfig: "配置文件重载成功!" + teamremoved: "队伍成功移除!" + gameremoved: "游戏成功移除!" + spawnercleared: "已移除所有的资源生成点!" + gamerun: "你开始了游戏,玩家现在可以加入!" + timeset: "游戏时间成功设置!" + regionnameset: "区域名字设置成功!" + minplayersset: "最小玩家设置成功!" + mainlobbyset: "主大厅设置成功!" + gametimeset: "游戏时间设置成功!" + materialset: "重生点方块设置成功!" + builderset: "地图作者已经成功设置,将会显示地图作者名字" + autobalanceseton: "自动平衡已打开!" + autobalancesetoff: "自动平衡已关闭!" + selectteamjoinentity: "现在,右键选择用来加入队伍的实体!" + teamjoinadded: "已成功标记了用以加入队伍$team$的实体" + holoremoved: "成功移除了全息显示的计分板!" +gamecheck: + LOC_NOT_SET_ERROR: "区域的位置没有设置正确!" + TEAM_SIZE_LOW_ERROR: "你需要设置更多队伍!" + NO_RES_SPAWNER_ERROR: "你没有设置任何资源刷新点!" + NO_LOBBY_SET: "你没有设置大厅!" + TEAMS_WITHOUT_SPAWNS: "至少有一个队伍没有设置出生点!" + NO_ITEMSHOP_CATEGORIES: "商店内没有物品!" + NO_MAIN_LOBBY_SET: "你没有设置主大厅即使你设置'tomainlobby' 为true" + TEAM_NO_WRONG_BED: "有队伍没有设置床!" + TEAM_NO_WRONG_TARGET: "有队伍没有设置重生点!" +ingame: + team: "Team" + teams: "队伍" + all: "全部" + record: "&e$record$&a 是这个地图的记录!" + record-with-holders: '&a这个地图的记录是&e$record$&a记录者: $holders$' + newrecord: '&a$team$&a队设置一个新的记录: &6$record$' + record-nobeddestroy: "&c记录不能保存, 因为没有床被摧毁!" + teamwon: "恭喜 !$team$队获得胜利!" + draw: "游戏以平局结束!" + serverrestart: "服务器将在$sec$ 秒后重置地图!" + gamestarting: "游戏开始 ..." + gamestarted: "游戏 '$game$' 刚刚开始!" + backtolobby: "将在 $sec$秒后返回大厅!" + spectator: "旁观者" + spectate: "&a旁观" + teamchest: "队伍箱子" + noturteamchest: "这个箱子不属于你的队伍!" + protectionleft: "将会有&c$length$&f秒无敌时间!" + protectionend: "无敌时间结束,小心行事!" + team-dead: "队伍$team$被消灭!" + no-friendlybreak: "&chi,不能破坏队伍成员脚下的方块!" + teamchestdestroy: "&c有一个队伍箱子被破坏!" + title: + map-builder: "地图作者$builder$" + win-title: "&6恭喜!" + win-subtitle: "$team$&6队获得胜利,用时&e$time$" + shop: + name: "商店" + newshop: "使用新商店" + oldshop: "使用旧商店" + fullstackpershift: "按住Shift点击获取多组物品" + onestackpershift: "按住Shift点击获取一组物品" + player: + left: "玩家 $player$ 离开了游戏!" + died: "$player$死了!" + killed: "$killer$杀死了 $player$!" + kicked: "$player$ 被踢出!" + waskicked: "你从这个游戏被踢出!" + blocks: + ownbeddestroy: "你不能破坏自己的床!" + beddestroyed: "$player$破坏了 $team$的床!" + specials: + rescue-platform: + left: "需要&c$time$秒&f 你才能使用下一个救援平台!" + arrow-blocker: + start: "箭矢伤害保护开启,剩余时间 &3 $time$ &f秒(s)" + end: "箭矢伤害保护时间已结束" + left: "箭矢保护冷却中,剩余时间 &3$time$ &f秒(s)" + trap: + trapped: "&e有人进入了你队伍的&4陷阱" + protection-wall: + left: "需要&c$time$&f 秒你才能使用下一个保护墙!" + not-usable-here: "你不能在这里使用保护墙!" + warp-powder: + cancelled: "&c你的传送被取消!" + start: "&c$time$&f 秒后你将被传送,请不要移动!" + cancel: "&4取消传送" + multiuse: "&c你已经开始了一个传送!" + tntsheep: + no-target-found: "没有找到目标玩家!" + tracker: + no-target-found: "没有找到目标玩家!" + target-found: "$player$ 是$blocks$方块远离你." +lobby: + countdown: "游戏将在$sec$ 秒后开始!" + countdowncancel: "需要更多玩家,倒计时被取消!" + cancelcountdown: + not_enough_players: "需要更多玩家,倒计时被取消!" + not_enough_teams: "需要更多的队伍,倒计时取消。" + cancelstart: + not_enough_players: "开始游戏需要更多的玩家!" + not_enough_teams: "需要更多的游戏才能开始游戏。" + chooseteam: "选择一个队伍" + startgame: "开始游戏" + reduce_countdown: "倒计时减少" + gamefull: "游戏已满!" + gamefullpremium: "此游戏玩家已满!" + teamjoined: "你成功加入了 $team$队" + leavegame: "离开游戏" + playerjoin: "$player$ 加入了游戏!" + kickedbyvip: "你被vip玩家从这个游戏房间踢出!" + moreplayersneeded: "需要$count$ 个玩家." + moreplayersneeded-one: "需要$count$个玩家." + moreteamsneeded: "至少需要有两个玩家并且处于不同的队伍才能开始游戏!" +sign: + firstline: "&6[护床战争]" + players: "玩家" + gamestate: + stopped: "&4停止!" + waiting: "&a等待中 ..." + running: "&9正在运行!" + full: "已满!" +stats: + header: "护床战争统计" + kd: "击杀/死亡" + statsnotfound: "没有找到 $player$ 的游戏统计信息!" + name: "名字" + kills: "击杀" + deaths: "死亡" + wins: "获胜" + loses: "失败" + score: "分数" + destroyedBeds: "破坏床" + games: "游戏次数" +commands: + addgame: + name: "添加游戏" + desc: "添加一个新游戏" + addteam: + name: "添加队伍" + desc: "添加一个队伍到指定游戏" + join: + name: "加入游戏" + desc: "加入指定游戏" + leave: + name: "离开游戏" + desc: "离开当前游戏" + save: + name: "保存游戏" + desc: "保存游戏地图和配置文件" + settarget: + name: "设置陷进" + desc: "设置一个目标陷进" + setbed: + name: "设置床 (synonym for settarget)" + desc: "为队伍设置床 (Synonym for settarget)" + setlobby: + name: "设置大厅" + desc: "设置一个游戏大厅" + setregion: + name: "设置区域点" + desc: "为指定游戏设置游戏区域点" + setspawn: + name: "设置队伍出生点" + desc: "为队伍设置出生点" + setspawner: + name: "设置资源刷新点" + desc: "设置指定的资源刷新点" + start: + name: "开始游戏" + desc: "开始游戏" + stop: + name: "停止游戏" + desc: "停止游戏" + help: + name: "显示帮助" + desc: "显示关于这个插件的所有指令" + reload: + name: "重载" + desc: "重新载入配置文件和语言文件" + setmainlobby: + name: "设置主大厅" + desc: "设置游戏主大厅 (is needed when mainlobby-enabled is set to true)" + list: + name: "游戏列表" + desc: "列出可用的游戏" + regionname: + name: "设置区域名字" + desc: "给区域设置单独的名字 (instead of world name)" + removeteam: + name: "移除多雾" + desc: "从游戏移除一个队伍 (only in stopped mode)" + removegame: + name: "移除游戏" + desc: "从配置文件删除游戏" + clearspawner: + name: "清除资源刷新点" + desc: "移除所有刷新点,需要保存." + gametime: + name: "设置游戏时间" + desc: "设置游戏时间" + stats: + name: "统计" + desc: "显示你的统计" + setbuilder: + name: "设置地图作者" + desc: "设置地图作者,将会在游戏结束的时候显示." + setgameblock: + name: "设置游戏方块" + desc: "设置游戏的方块类型将会替代配置文件里面的 'game-block' . 输入'DEFAULT' 使用默认设置" + setautobalance: + name: "设置自动排行" + desc: "如果'global-autobalance'设置为'false', 使用这个指令将会设置为'true'!" + setminplayers: + name: "设置最小玩家数" + desc: "设置游戏开始时需要的玩家数量" + kick: + name: "踢出玩家" + desc: "将指定玩家从当前游戏踢出!" + addteamjoin: + name: "添加队伍选择" + desc: "在当前位置加入指定队伍的标记!" + addholo: + name: "添加全息显示" + desc: "在当前位置将增加全息图统计!" + removeholo: + name: "删除权限显示" + desc: "使用这个命令后玩家right-click即可移除全息图." + explain: "10秒只可执行一次" + debugpaste: + name: "Paste debug data" + desc: "这将向 hastebin 计划发送一些调试数据,并返回一个连接以提供给开发人员" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/locale/zh_TW.yml b/common/src/main/resources/locale/zh_TW.yml new file mode 100644 index 0000000..a48d8ce --- /dev/null +++ b/common/src/main/resources/locale/zh_TW.yml @@ -0,0 +1,297 @@ +--- +default: + pages: "第 $current$ 頁 / 共 $max$ 頁" + currently: 當前 +errors: + argumentslength: "參數不正確!" + holodependencynotfound: "全息顯示前置插件缺失 $dependency$" + packagenotfound: "無法獲得$package$ 包!" + classnotfound: "無法獲得包 $package$ 的類$class$!" + gameexists: "遊戲名字已經存在!" + gamenotfound: "遊戲 '$game$' 不存在!" + nofreegames: "暫時沒有可以加入的遊戲。" + gamenotfoundsimple: "找不到遊戲!" + playeramount: "玩家最少需要1名最大不超過24名!" + teamcolornotallowed: "隊伍顏色有誤" + teamnamelength: "隊伍名字2-20個字符" + teamnotfound: "找不到該團隊!" + notingame: "你不在遊戲中!" + bedtargeting: "請指定或站在要配置的目標方塊上!" + regionargument: "地點必須是 'loc1'或 'loc2'!" + spawnerargument: "資源參數必須是一個有效的配置!" + blockdownnotfound: "在你所站的地方沒有發現方塊" + gamenotrunning: "遊戲尚未運行!" + bungeenoserver: "Bungeecord服務器設置不准確!請聯繫管理員!" + cantstartagain: "遊戲運行中! 你不能再次開始這個遊戲!" + startoutofwaiting: "遊戲處於等待模式!" + cantjoingame: "你不能加入運行的遊戲或已經開始的遊戲!" + lobbyongameworld: "大廳不能設置到遊戲場地!" + gamenotloaded: "遊戲無法開始!" + gameloaderror: "載入遊戲'$game$'的時候出現一個錯誤!" + regionnotfound: "區域文件不存在!" + savesign: "牌子文件不能創建!" + nogames: "找不到遊戲!" + notenoughress: "你沒有足夠的資源購買這個物品!" + teamnameinuse: "隊伍名字已經被使用!" + minplayersmustnumber: "最小玩家數必須是一個數字!" + toolongregionname: "區域名字最大15個字符!" + notwhilegamerunning: "遊戲運行前不能這麼做!" + notwhileingame: "在遊戲裡面不能這麼做!" + timeincorrect: "時間數據 (0 ... 23000), '白天' 或者'夜晚'!" + minplayersnumeric: "最小玩家必須是數字!" + notinair: "你不在空氣中!" + teamfull: "該團隊已滿,請重新打開團隊選擇菜單!" + novalidmaterial: "方塊類型不正確!" + wrongvalueonoff: "參數錯誤! Use true,on,1 to turn on - Use false,off,0 to turn off!" + playernotfound: "玩家不在線!" + notingameforkick: "你只能在遊戲中踢出玩家!" + playernotingame: "玩家不再遊戲中!" + mustbeinlobbyworld: "必須處於遊戲大廳" + addteamjoincancel: "添加隊伍取消!" + entitynotcompatible: "實體與隊伍不兼容!" +success: + gameadded: "新遊戲'$game$'成功添加!" + teamadded: "成功添加團隊 '$team$'!" + joined: "成功加入遊戲!" + left: "離開遊戲!" + saved: "遊戲成功保存!" + bedset: "成功設置$team$!隊重生點" + regionset: "成功為$game$設置區域$location$!" + spawnset: " $team$隊出生點成功設置!" + spawnerset: "$name$的資源刷新點添加成功!" + stopped: "已成功停止遊戲!" + lobbyset: "成功設置大堂!" + gameloaded: "成功載入了遊戲 '$game$'!" + reloadconfig: "重新載入成功!" + teamremoved: "隊伍已成功移除!" + gameremoved: "遊戲已成功移除!" + spawnercleared: "全部資源刷新點移除!" + gamerun: "你已經開始了遊戲,現在玩家可以加入!" + timeset: "成功設置遊戲時間!" + regionnameset: "區域名字設置成功!" + minplayersset: "最小玩家設置成功!" + mainlobbyset: "主大廳設置成功!" + gametimeset: "遊戲時間設置成功!" + materialset: "重生點方塊設置成功!" + builderset: "地圖作者已經成功設置,將會顯示地圖作者名字" + autobalanceseton: "自動排行打開!" + autobalancesetoff: "自動排行關閉!" + selectteamjoinentity: "右鍵選擇用來加入隊伍的實體物品!" + teamjoinadded: "隊伍 $team$的選擇加入實體設置成功" + holoremoved: "全息統計移除!" +gamecheck: + LOC_NOT_SET_ERROR: "區域的位置沒有設置正確!" + TEAM_SIZE_LOW_ERROR: "你需要設置更多隊伍!" + NO_RES_SPAWNER_ERROR: "你沒有設置任何資源刷新點!" + NO_LOBBY_SET: "你還未設定一個大堂!" + TEAMS_WITHOUT_SPAWNS: "有一個隊伍沒有設置出生點!" + NO_ITEMSHOP_CATEGORIES: "商店沒有物品!" + NO_MAIN_LOBBY_SET: "你沒有設置主大廳即使你設置'tomainlobby' 為true" + TEAM_NO_WRONG_BED: "有隊伍沒有設置床!" + TEAM_NO_WRONG_TARGET: "有隊伍沒有設置重生點!" +ingame: + team: "陣營" + teams: "團隊" + all: "全部" + record: "&e$record$&a 是這個地圖的記錄!" + record-with-holders: '&a這個地圖的記錄是&e$record$&a記錄者: $holders$' + newrecord: '&a$team$&a隊設置一個新的記錄: &6$record$' + record-nobeddestroy: "&c記錄不能保存, 因為沒有床被摧毀!" + teamwon: "恭喜! 隊伍 $team$ 獲勝!" + draw: "遊戲以平局結束!" + serverrestart: "服務器將在$sec$ 秒後重置地圖!" + gamestarting: "遊戲正在開始..." + gamestarted: "遊戲 '$game$' 剛剛開始了!" + backtolobby: "$sec$ 秒後回到大堂!" + spectator: "旁觀者" + spectate: "&a旁觀" + teamchest: "隊伍箱子" + noturteamchest: "這個箱子不是你隊伍的箱子!" + protectionleft: "將會有&c$length$&f秒無敵時間!" + protectionend: "無敵時間結束,小心行事!" + team-dead: "隊伍$team$被消滅!" + no-friendlybreak: "&chi,不能破壞隊伍成員腳下的方塊!" + teamchestdestroy: "&c有一個隊伍箱子被破壞!" + title: + map-builder: "由 $builder$ 建造" + win-title: "&6恭喜!" + win-subtitle: "$team$&6隊獲得勝利,用時&e$time$" + shop: + name: "物品商店" + newshop: "使用新的商店" + oldshop: "使用舊的商店" + fullstackpershift: "按住Shift點擊獲取多組物品" + onestackpershift: "按住Shift點擊獲取一組物品" + player: + left: "玩家 $player$ 已退出遊戲!" + died: "$player$ 死亡!" + killed: "$killer$ 殺了 $player$!" + kicked: "$player$ 被踢出!" + waskicked: "你從這個遊戲被踢出!" + blocks: + ownbeddestroy: "你不能破壞自己的床!" + beddestroyed: "$player$破壞了 $team$的床!" + specials: + rescue-platform: + left: "需要&c$time$秒&f 你才能使用下一個救援平台!" + arrow-blocker: + start: "箭矢傷害保護開啟,剩餘時間 &3 $time$ &f秒(s)" + end: "箭矢傷害保護時間已結束" + left: "箭矢保護冷卻中,剩餘時間 &3$time$ &f秒(s)" + trap: + trapped: "&e有人進入了你隊伍的&4陷阱" + protection-wall: + left: "需要&c$time$&f 秒你才能使用下一個保護牆!" + not-usable-here: "你不能在這裡使用保護牆!" + warp-powder: + cancelled: "&c你的傳送被取消!" + start: "&c$time$&f 秒後你將被傳送,請不要移動!" + cancel: "&4取消傳送" + multiuse: "&c你已經開始了一個傳送!" + tntsheep: + no-target-found: "沒有找到目標玩家!" + tracker: + no-target-found: "沒有找到目標玩家!" + target-found: "$player$ 是$blocks$方塊遠離你." +lobby: + countdown: "遊戲將在 $sec$ 秒後開始!" + countdowncancel: "需要更多玩家。倒計時被取消了!" + cancelcountdown: + not_enough_players: "需要更多的玩家。取消倒計時!" + not_enough_teams: "需要更多的團隊。取消倒計時!" + cancelstart: + not_enough_players: "需要更多的玩家才能開始遊戲!" + not_enough_teams: "需要更多的團隊才能開始遊戲!" + chooseteam: "選擇一個團隊" + startgame: "開始遊戲" + reduce_countdown: "減少倒計時" + gamefull: "遊戲已滿!" + gamefullpremium: "遊戲人數已滿" + teamjoined: "您成功加入了團隊 $team$" + leavegame: "離開遊戲" + playerjoin: "玩家 $player$ 加入了遊戲!" + kickedbyvip: "有 Vip 玩家加入的關係,你已被踢出本遊戲。" + moreplayersneeded: "還需要 $count$ 個玩家。" + moreplayersneeded-one: "還需要 $count$ 個玩家." + moreteamsneeded: "至少需要有兩名玩家在兩個不同的團隊才能開始遊戲!" +sign: + firstline: "&6[Bedwars]" + players: "玩家" + gamestate: + stopped: "&4停止!" + waiting: "&a等待中 ..." + running: "&9正在運行!" + full: "已滿!" +stats: + header: "Bedwars 統計" + kd: "K/D" + statsnotfound: "找不到 $player$ 的統計!" + name: "名字" + kills: "擊殺" + deaths: "死亡數" + wins: "勝利數" + loses: "失敗" + score: "分數" + destroyedBeds: "破壞床" + games: "遊戲" +commands: + addgame: + name: "添加遊戲" + desc: "添加一個新遊戲" + addteam: + name: "添加隊伍" + desc: "添加一個隊伍到一個特定的遊戲" + join: + name: "加入遊戲" + desc: "加入一個特定的遊戲" + leave: + name: "離開遊戲" + desc: "離開當前遊戲" + save: + name: "儲存遊戲" + desc: "保存遊戲地圖和配置文件" + settarget: + name: "設定目標" + desc: "設置一個目標陷進" + setbed: + name: "設置床 (synonym for settarget)" + desc: "為隊伍設置床 (Synonym for settarget)" + setlobby: + name: "設置大堂" + desc: "設置遊戲大堂的位置" + setregion: + name: "設置區域點" + desc: "為指定遊戲設置遊戲區域點" + setspawn: + name: "設置隊伍出生點" + desc: "為隊伍設置出生點" + setspawner: + name: "設置資源刷新點" + desc: "設置指定的資源刷新點" + start: + name: "開始遊戲" + desc: "開始一個遊戲" + stop: + name: "停止遊戲" + desc: "停止一個遊戲" + help: + name: "顯示幫助" + desc: "顯示關於這個插件的所有指令" + reload: + name: "重載" + desc: "重新載入配置文件和語言文件" + setmainlobby: + name: "設置主要的大堂" + desc: "設置遊戲主大廳 (is needed when mainlobby-enabled is set to true)" + list: + name: "列出遊戲" + desc: "列出所有可用的遊戲" + regionname: + name: "設置區域名字" + desc: "給區域設置單獨的名字 (instead of world name)" + removeteam: + name: "移除團隊" + desc: "從遊戲移除一個隊伍 (only in stopped mode)" + removegame: + name: "移除遊戲" + desc: "從配置文件刪除遊戲" + clearspawner: + name: "清除資源刷新點" + desc: "移除所有刷新點,需要保存." + gametime: + name: "設置遊戲時間" + desc: "設置遊戲時間" + stats: + name: "統計" + desc: "顯示你的統計" + setbuilder: + name: "設置地圖建造者" + desc: "設置地圖作者,將會在遊戲結束的時候顯示." + setgameblock: + name: "設置遊戲方塊" + desc: "設置遊戲的方塊類型將會替代配置文件裡面的 'game-block' . 輸入'DEFAULT' 使用默認設置" + setautobalance: + name: "設置自動排行" + desc: "如果'global-autobalance'設置為'false', 使用這個指令將會設​​置為'true'!" + setminplayers: + name: "設置最小玩家數" + desc: "設置遊戲開始時需要的玩家數量" + kick: + name: "踢出玩家" + desc: "將指定玩家從當前遊戲踢出!" + addteamjoin: + name: "添加隊伍選擇" + desc: "在當前位置加入指定隊伍的標記!" + addholo: + name: "Add hologram location" + desc: "A hologram statistic will be added at the current position!" + removeholo: + name: "刪除權限顯示" + desc: "使用這個命令後玩家right-click即可移除全息圖." + explain: "10秒只可執行一次" + debugpaste: + name: "Paste debug data" + desc: "This will send some debug data to hastebin and returns a link you can share with the developers" + itemspaste: + name: "Paste your inventory to a file" + desc: "This will return a link where you can see your current inventory being serialized as an example for your shop.yml" diff --git a/common/src/main/resources/log4j.xml b/common/src/main/resources/log4j.xml new file mode 100644 index 0000000..b9d9000 --- /dev/null +++ b/common/src/main/resources/log4j.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/common/src/main/resources/plugin.yml b/common/src/main/resources/plugin.yml new file mode 100644 index 0000000..4783748 --- /dev/null +++ b/common/src/main/resources/plugin.yml @@ -0,0 +1,157 @@ +name: "BedwarsRel" +description: | + §aBedwars Reloaded - The Minecraft Bedwars Plugin! + §7Bedwars is a Minecraft minigame where teams (max. 15) try to destroy the other teams' beds. But there is more: On the whole map there are ressource spawners spawning items. Some items are more worth than others and with these you can buy different things in the so called "Villager Shop". You will find powerful weapons or potions or simple blocks to get to the other bases. Get to the others bases? Yes, every team starts on an island and you have to get to the others with blocks which you can buy in the "Villager Shop". When you meet a enemy you have to try to kill him so he'll lose all the equipment which he had in his inventory. As soon as a team's bed is destroyed they cannot respawn again and last team standing wins. +author: "The BedwarsRel-Team | www.github.com/orgs/BedwarsRel/people" +website: "www.github.com/BedwarsRel" + +main: io.github.bedwarsrel.BedwarsRel +version: ${versionstring} + +awareness: + - !@UTF8 + +depend: [] +softdepend: [Multiverse-Core, Multiworld, MultiWorld, HolographicDisplays, HologramAPI, UltimateCore] + +commands: + bw: + description: Base command for all Test-Plugin commands + usage: / help + permission: bw.base + bw setspawner: + description: Sets a ressource spawn point of a specific type + usage: / [game] [Ressource] + permission: bw.setup + bw addgame: + description: Add a new game + usage: / [Name] + permission: bw.setup + bw start: + description: Starts a game + usage: / [game] + permission: bw.setup + bw addteam: + description: Adds a team to a game + usage: / [Name] [Color] + permission: bw.setup + bw save: + description: Saves a game to config files + usage: / [Name] + permission: bw.setup + bw setregion: + description: Sets one of the two possible region of the game + usage: / [Name] [loc1;loc2] + permission: bw.setup + bw join: + description: Joins a specific team in a game + usage: / [game] [Team] + permission: bw.base + bw setspawn: + description: Sets the spawn of a team + usage: / [game] [Team] + permission: bw.setup + bw setlobby: + description: Sets the lobby location of a game + usage: / [game] + permission: bw.setup + bw settarget: + description: Sets the bed of a team in a game + usage: / [game] [Team] + permission: bw.setup + bw setbed: + description: Sets the bed of a team in a game + usage: / [game] [Team] + permission: bw.setup + bw leave: + description: Leaves the current game + usage: / + permission: bw.base + bw reload: + description: Reloads the configurations and translations + usage: / + permission: bw.setup + bw list: + description: List all availabe games + usage: / + permission: bw.base + bw regionname: + description: Sets a region name + usage: / + permission: bw.setup + bw removeteam: + description: Removes a team of the game + usage: / + permission: bw.setup + bw removegame: + description: Removes a game + usage: / + permission: bw.setup + bw clearspawner: + description: Removes all ressource spawners from the game + usage: / + permission: bw.setup + bw gametime: + description: Sets the time for the game used in the world + usage: / + permission: bw.setup + bw stats: + description: Shows the stats of bedwars + usage: / + permission: bw.base + bw setminplayers: + description: Sets the min player amount for a game + usage: / + permission: bw.setup + bw setgameblock: + description: Sets the target block for a specific game + usage: / + permission: bw.setup + bw setbuilder: + description: Sets the map-builder of the map for displaying title when game starts + usage: / + permission: bw.setup + bw setautobalance: + description: Turn the autobalance for this game on or off when global-autobalance is false + usage: / + permission: bw.setup + bw kick: + description: Kicks a player from the game + usage: / + permission: bw.kick + bw addteamjoin: + description: Mark a creature which can be used to join a specific team + usage: / + permission: bw.setup + bw addholo: + description: Adds a location of the hologram stats + usage: / + permission: bw.setup + bw removeholo: + description: Removes a hologram statistic location + usage: / + permission: bw.setup +permissions: + bw.base: + description: Allows you to show to play games + default: true + bw.setup: + description: Allows you to set up new or existing games + default: op + bw.kick: + description: Allows a player to kick other players from the game + default: op + bw.vip.*: + description: Allows special user permissions + default: op + children: + bw.vip.joinfull: true + bw.vip.forcestart: true + bw.vip.reducecountdown: true + bw.vip.skipbalance: true + bw.cmd: + description: Allows to execute non-bedwars commands ingame + default: op + bw.otherstats: + description: Allows to show stats of other players + default: op diff --git a/common/src/main/resources/shop.yml b/common/src/main/resources/shop.yml new file mode 100644 index 0000000..d39d987 --- /dev/null +++ b/common/src/main/resources/shop.yml @@ -0,0 +1,472 @@ +### SHOP ### +### NOT ALLOWED CATEGORY MATERIAL: SLIME_BALL, SNOW_BALL, BUCKET, LAVA_BUCKET +shop: + armor: + item: DIAMOND_CHESTPLATE + name: "Armour" + order: 10 + permission: bw.base + lore: + - "Protect yourself with armor! Click here." + offers: + - price: + - type: CLAY_BRICK + reward: + - type: LEATHER_HELMET + meta: + ==: ItemMeta + meta-type: LEATHER_ARMOR + enchants: + PROTECTION_ENVIRONMENTAL: 1 + - price: + - type: CLAY_BRICK + reward: + - type: LEATHER_LEGGINGS + meta: + ==: ItemMeta + meta-type: LEATHER_ARMOR + enchants: + PROTECTION_ENVIRONMENTAL: 1 + - price: + - type: CLAY_BRICK + reward: + - type: LEATHER_BOOTS + meta: + ==: ItemMeta + meta-type: LEATHER_ARMOR + enchants: + PROTECTION_ENVIRONMENTAL: 1 + - price: + - type: IRON_INGOT + amount: 6 + - type: GOLD_INGOT + reward: + - type: IRON_BOOTS + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: "Magnet-Shoes" + lore: + - "Wear those shoes and have a 75%" + - "chance of getting no knockback!" + - price: + - type: IRON_INGOT + reward: + - type: CHAINMAIL_CHESTPLATE + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + enchants: + PROTECTION_ENVIRONMENTAL: 1 + - price: + - type: IRON_INGOT + amount: 3 + reward: + - type: CHAINMAIL_CHESTPLATE + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + enchants: + PROTECTION_ENVIRONMENTAL: 2 + - price: + - type: IRON_INGOT + amount: 7 + reward: + - type: CHAINMAIL_CHESTPLATE + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + enchants: + PROTECTION_ENVIRONMENTAL: 3 + - price: + - type: GOLD_INGOT + amount: 10 + reward: + - type: IRON_HELMET + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: Helm + enchants: + PROTECTION_ENVIRONMENTAL: 2 + swords: + item: DIAMOND_SWORD + name: "Swords" + order: 20 + permission: bw.base + lore: + - "Click here to get sword for attacking your enemies" + offers: + - price: + - type: CLAY_BRICK + amount: 8 + reward: + - type: STICK + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + enchants: + KNOCKBACK: 1 + - price: + - type: IRON_INGOT + reward: + - type: GOLD_SWORD + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + enchants: + DAMAGE_ALL: 1 + - price: + - type: IRON_INGOT + amount: 3 + reward: + - type: GOLD_SWORD + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + enchants: + DAMAGE_ALL: 2 + - price: + - type: IRON_INGOT + amount: 7 + reward: + - type: GOLD_SWORD + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + enchants: + DAMAGE_ALL: 3 + - price: + - type: GOLD_INGOT + amount: 3 + reward: + - type: IRON_SWORD + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + enchants: + DAMAGE_ALL: 2 + KNOCKBACK: 1 + - price: + - type: GOLD_INGOT + amount: 15 + reward: + - type: GOLD_AXE + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: "Axe of Infinity" + enchants: + DAMAGE_ALL: 1 + DURABILITY: 1 + KNOCKBACK: 1 + bows: + item: 261 + name: "Bows" + order: 30 + permission: bw.base + lore: + - "Prove yourself as a marksman with these wonderful bows" + offers: + - price: + - type: GOLD_INGOT + amount: 3 + reward: + - type: BOW + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + enchants: + ARROW_INFINITE: 1 + - price: + - type: GOLD_INGOT + amount: 7 + reward: + - type: BOW + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + enchants: + ARROW_DAMAGE: 1 + ARROW_INFINITE: 1 + - price: + - type: GOLD_INGOT + amount: 13 + reward: + - type: BOW + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + enchants: + ARROW_DAMAGE: 2 + ARROW_INFINITE: 1 + - price: + - type: GOLD_INGOT + amount: 16 + reward: + - type: BOW + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + enchants: + ARROW_FIRE: 1 + ARROW_INFINITE: 1 + - price: + - type: GOLD_INGOT + amount: 15 + reward: + - type: BOW + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + enchants: + ARROW_KNOCKBACK: 1 + ARROW_FIRE: 1 + ARROW_INFINITE: 1 + - price: + - type: GOLD_INGOT + reward: + - type: ARROW + eat: + item: GRILLED_PORK + name: Eat + order: 40 + permission: bw.base + lore: + - "Are you hungry? Get something to eat." + offers: + - price: + - type: CLAY_BRICK + amount: 4 + reward: + - type: GRILLED_PORK + amount: 2 + - price: + - type: IRON_INGOT + amount: 2 + reward: + - type: GOLDEN_APPLE + - price: + - type: GOLD_INGOT + amount: 5 + reward: + - type: BREAD + amount: 10 + pickaxes: + item: DIAMOND_PICKAXE + name: "Pickaxes" + order: 50 + permission: bw.base + lore: + - "Destroy others blocks? Use these pickaxes." + offers: + - price: + - type: CLAY_BRICK + amount: 4 + reward: + - type: IRON_PICKAXE + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + enchants: + LOOT_BONUS_BLOCKS: 1 + - price: + - type: IRON_INGOT + amount: 2 + reward: + - type: IRON_PICKAXE + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + enchants: + LOOT_BONUS_BLOCKS: 2 + - price: + - type: GOLD_INGOT + reward: + - type: IRON_PICKAXE + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + enchants: + LOOT_BONUS_BLOCKS: 3 + blocks: + item: SANDSTONE + name: "Blocks" + order: 60 + permission: bw.base + lore: + - "Get to the others! Possible with blocks." + offers: + - price: + - type: CLAY_BRICK + reward: + - type: SANDSTONE + damage: 2 + amount: 2 + - price: + - type: CLAY_BRICK + amount: 7 + reward: + - type: ENDER_STONE + - price: + - type: IRON_INGOT + amount: 3 + reward: + - type: IRON_BLOCK + - price: + - type: CLAY_BRICK + amount: 15 + reward: + - type: GLOWSTONE + amount: 4 + - price: + - type: CLAY_BRICK + amount: 4 + reward: + - type: GLASS + usefulstuff: + item: TNT + name: "Useful Stuff" + order: 70 + permission: bw.base + lore: + - "Looking for useful stuff? Here are some!" + offers: + - price: + - type: IRON_INGOT + amount: 3 + reward: + - type: TNT + - price: + - type: GOLD_INGOT + reward: + - type: FLINT_AND_STEEL + - price: + - type: IRON_INGOT + reward: + - type: CHEST + - price: + - type: GOLD_INGOT + reward: + - type: ENDER_CHEST + - price: + - type: IRON_INGOT + amount: 15 + reward: + - type: BLAZE_ROD + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: "Rescue Platform" + lore: + - "Protect yourself from falling into" + - "void with a rescue platform" + - price: + - type: IRON_INGOT + amount: 3 + reward: + - type: STRING + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: "Trap" + lore: + - "Get informed if an enemy steps on your trap" + - "and your enemy won't be able to move properly." + - price: + - type: CLAY_BRICK + amount: 64 + reward: + - type: BRICK + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: "Protection Wall" + lore: + - "Use a protection wall to instantely" + - "create a wall in front of you!" + - price: + - type: IRON_INGOT + amount: 7 + reward: + - type: SULPHUR + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: "Warp Powder" + lore: + - "When using this powder you'll get" + - "teleported to you spawn point within 6 seconds" + - "Warning: Any movement will stop the process" + - price: + - type: GOLD_INGOT + amount: 10 + reward: + - type: MONSTER_EGG + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: "TNT-Sheep" + lore: + - "Use the TNT-Sheep! It will" + - "walk towards your closest enemy" + - "and explode within 8 seconds!" + internal: H4sIAAAAAAAAAONiYOBi4HTNK8ksqQxJTOdgYMpMYWANzkhNLWBgAAABt1TGHQAAAA== + - price: + - type: IRON_INGOT + amount: 5 + reward: + - type: COMPASS + drinks: + item: POTION + name: "Drinks" + order: 80 + permission: bw.base + lore: + - "Not enough? Use these potions and you'll feel better!" + offers: + - price: + - type: IRON_INGOT + amount: 3 + reward: + - type: POTION + meta: + ==: ItemMeta + meta-type: POTION + potion-type: healing + - price: + - type: IRON_INGOT + amount: 5 + reward: + - type: POTION + meta: + ==: ItemMeta + meta-type: POTION + potion-type: strong_healing + - price: + - type: IRON_INGOT + amount: 7 + reward: + - type: POTION + meta: + ==: ItemMeta + meta-type: POTION + potion-type: swiftness + - price: + - type: GOLD_INGOT + reward: + - type: POTION + meta: + ==: ItemMeta + meta-type: POTION + potion-type: strength + - price: + - type: GOLD_INGOT + amount: 3 + reward: + - type: POTION + meta: + ==: ItemMeta + meta-type: POTION + potion-type: regeneration +schema-version: 1 \ No newline at end of file diff --git a/crowdin.yaml b/crowdin.yaml new file mode 100644 index 0000000..6837439 --- /dev/null +++ b/crowdin.yaml @@ -0,0 +1,4 @@ +files: + - + source: '/common/src/main/resources/locale.yml' + translation: '/common/src/main/resources/locale/%locale_with_underscore%.yml' diff --git a/lib/HolographicDisplaysAPI_v2.1.7.jar b/lib/HolographicDisplaysAPI_v2.1.7.jar new file mode 100644 index 0000000..b1c04c1 Binary files /dev/null and b/lib/HolographicDisplaysAPI_v2.1.7.jar differ diff --git a/logo.png b/logo.png new file mode 100644 index 0000000..c9c91d3 Binary files /dev/null and b/logo.png differ diff --git a/plugin/dependency-reduced-pom.xml b/plugin/dependency-reduced-pom.xml new file mode 100644 index 0000000..f00c6ae --- /dev/null +++ b/plugin/dependency-reduced-pom.xml @@ -0,0 +1,116 @@ + + + + BedwarsRel-Parent + io.github.bedwarsrel + 1.3.6 + + 4.0.0 + BedwarsRel + ${versionstring} + + + + true + ../common/src/main/resources + + + + + maven-jar-plugin + 2.6 + + ${filename} + + + + maven-shade-plugin + 2.4.3 + + + package + + shade + + + + + com.google.guava:guava + + + + + com.bugsnag + thirdparty.com.bugsnag + + + com.fasterxml.jackson + thirdparty.com.fasterxml.jackson + + + org.apache.log4j + thirdparty.org.apache.log4j + + + org.slf4j + thirdparty.org.slf4j + + + com.zaxxer + thirdparty.com.zaxxer.HikariCP-java7 + + + + + + + + + + + org.spigotmc + spigot-api + 1.12-R0.1-SNAPSHOT + provided + + + commons-lang + commons-lang + + + json-simple + com.googlecode.json-simple + + + gson + com.google.code.gson + + + snakeyaml + org.yaml + + + bungeecord-chat + net.md-5 + + + + + org.projectlombok + lombok + 1.18.30 + provided + + + + + sonatype-nexus-releases + https://oss.sonatype.org/content/repositories/releases + + + sonatype-nexus-snapshots + https://oss.sonatype.org/content/repositories/snapshots + + + + diff --git a/plugin/pom.xml b/plugin/pom.xml new file mode 100644 index 0000000..04417c1 --- /dev/null +++ b/plugin/pom.xml @@ -0,0 +1,103 @@ + + + + BedwarsRel-Parent + io.github.bedwarsrel + 1.3.6 + + 4.0.0 + + ${versionstring} + + BedwarsRel + + + + io.github.bedwarsrel + BedwarsRel-Common + ${project.parent.version} + compile + + + io.github.bedwarsrel.com + BedwarsRel-v1_12_r1 + ${project.parent.version} + compile + + + + + + + ../common/src/main/resources + true + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.6 + + ${filename} + + + + org.apache.maven.plugins + maven-shade-plugin + 2.4.3 + + + package + + shade + + + + + com.google.guava:guava + + + + + com.bugsnag + thirdparty.com.bugsnag + + + com.fasterxml.jackson + thirdparty.com.fasterxml.jackson + + + org.apache.log4j + thirdparty.org.apache.log4j + + + org.slf4j + thirdparty.org.slf4j + + + com.zaxxer + thirdparty.com.zaxxer.HikariCP-java7 + + + + + + + + + + + + sonatype-nexus-releases + https://oss.sonatype.org/content/repositories/releases + + + sonatype-nexus-snapshots + https://oss.sonatype.org/content/repositories/snapshots + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..04f2e7e --- /dev/null +++ b/pom.xml @@ -0,0 +1,236 @@ + + 4.0.0 + + io.github.bedwarsrel + BedwarsRel-Parent + pom + 1.3.6 + + BedwarsRel + A Bedwars Plugin for Minecraft servers. + https://bedwarsrel.github.io + + + GNU GENERAL PUBLIC LICENSE, Version 3.0 + https://github.com/BedwarsRel/BedwarsRel/blob/master/LICENSE + + + + + BedwarsRel-Team + https://github.com/orgs/BedwarsRel/people + + + + https://github.com/BedwarsRel/BedwarsRel/tree/master/ + scm:git:ssh://github.com:BedwarsRel/BedwarsRel.git + scm:git:ssh://github.com:BedwarsRel/BedwarsRel.git + + + GitHub + https://github.com/BedwarsRel/BedwarsRel/issues + + + + UTF-8 + + + + v1_12_r1 + common + plugin + + + + + default + + true + + + ${project.parent.version}-SNAPSHOT + ${project.artifactId}-${project.parent.version}-SNAPSHOT + + + + ci-snapshot + + ${project.parent.version}-${env.SHORT_HASH}-SNAPSHOT + ${project.artifactId}-${project.parent.version}-SNAPSHOT + + + + ci-release + + ${project.parent.version}-SNAPSHOT + ${project.artifactId}-${project.parent.version} + + + + release + + ${project.parent.version} + ${project.artifactId}-${project.parent.version} + + + + deploy-snapshot + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.7 + true + + sonatype-nexus-snapshots + https://oss.sonatype.org/ + true + + + + + + + deploy-release + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.7 + true + + sonatype-nexus-releases + https://oss.sonatype.org/ + true + + + + + + + attach-javadocs + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + + attach-javadocs + + jar + + + true + + io.github.bedwarsrel:* + + + + + + + + + + attach-sources + + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + attach-sources + + jar-no-fork + + + + + + + + + sign-build + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.5 + + + sign-artifacts + verify + + sign + + + + + + + + + + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + inventive-repo + https://repo.inventivetalent.org/content/repositories/releases + + + + + + org.spigotmc + spigot-api + 1.12-R0.1-SNAPSHOT + provided + + + org.projectlombok + lombok + 1.18.30 + provided + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.13.0 + + 1.8 + 1.8 + true + + -J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED + + + + + + + \ No newline at end of file diff --git a/settings.xml b/settings.xml new file mode 100644 index 0000000..e9e8118 --- /dev/null +++ b/settings.xml @@ -0,0 +1,16 @@ + + + + sonatype-nexus-releases + ${env.ossrhuser} + ${env.ossrhpassword} + + + sonatype-nexus-snapshots + ${env.ossrhuser} + ${env.ossrhpassword} + + + \ No newline at end of file diff --git a/shop-commands-example.yml b/shop-commands-example.yml new file mode 100644 index 0000000..3ce71c5 --- /dev/null +++ b/shop-commands-example.yml @@ -0,0 +1,61 @@ +### 商店命令配置示例 ### +### 支持在reward中添加commands字段,玩家购买时将执行命令而不是获得物品 ### +### 命令中的%player%会被替换为玩家名称 ### +shop: + commands: + item: COMMAND + name: "Commands" + order: 90 + permission: bw.base + lore: + - "Special commands" + offers: + - price: + - type: IRON_INGOT + amount: 20 + reward: + - type: BLAZE_ROD + commands: + - 'gamemode %player% creative' + - 'give %player% diamond 5' + - 'say %player% purchased a command pack!' + - price: + - type: GOLD_INGOT + amount: 10 + reward: + - type: DIAMOND + commands: + - 'effect %player% minecraft:speed 30 1' + regular_items: + item: IRON_SWORD + name: "Regular Items" + order: 100 + permission: bw.base + lore: + - "Normal items without commands" + offers: + - price: + - type: IRON_INGOT + amount: 5 + reward: + - type: IRON_SWORD + - type: IRON_INGOT + amount: 2 + commands: + - 'say %player% bought iron ingots' + +### 说明 ### +# 1. 在reward部分添加commands字段 +# 2. commands是一个字符串列表,每条命令都会被执行 +# 3. 使用%player%占位符来自动替换为购买者名称 +# 4. 如果reward包含commands,玩家将不会收到该物品,而是执行命令 +# 5. 如果不包含commands字段,则正常给予物品 + +### 你的示例配置 ### +# - reward: +# - type: BLAZE_ROD +# commands: +# - 'gamemode %player% 1' +# price: +# - type: IRON_INGOT +# amount: 20 \ No newline at end of file diff --git a/v1_12_r1/pom.xml b/v1_12_r1/pom.xml new file mode 100644 index 0000000..7f111fc --- /dev/null +++ b/v1_12_r1/pom.xml @@ -0,0 +1,36 @@ + + + + BedwarsRel-Parent + io.github.bedwarsrel + 1.3.6 + + 4.0.0 + + io.github.bedwarsrel.com + BedwarsRel-v1_12_r1 + + + + io.github.bedwarsrel + BedwarsRel-Common + ${project.parent.version} + provided + + + org.bukkit + craftbukkit + 1.12-R0.1-SNAPSHOT + provided + + + org.spigotmc + minecraft-server + + + + + + \ No newline at end of file diff --git a/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/ActionBar.java b/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/ActionBar.java new file mode 100644 index 0000000..20c2085 --- /dev/null +++ b/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/ActionBar.java @@ -0,0 +1,20 @@ +package io.github.bedwarsrel.com.v1_12_r1; + +import net.minecraft.server.v1_12_R1.ChatMessageType; +import net.minecraft.server.v1_12_R1.IChatBaseComponent; +import net.minecraft.server.v1_12_R1.IChatBaseComponent.ChatSerializer; +import net.minecraft.server.v1_12_R1.PacketPlayOutChat; +import org.bukkit.ChatColor; +import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; +import org.bukkit.entity.Player; + +public class ActionBar { + + public static void sendActionBar(Player player, String message) { + String s = ChatColor.translateAlternateColorCodes('&', message.replace("_", " ")); + IChatBaseComponent icbc = ChatSerializer.a("{\"text\": \"" + s + "\"}"); + PacketPlayOutChat bar = new PacketPlayOutChat(icbc, ChatMessageType.GAME_INFO); + ((CraftPlayer) player).getHandle().playerConnection.sendPacket(bar); + } + +} diff --git a/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/CustomEntityRegistry.java b/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/CustomEntityRegistry.java new file mode 100644 index 0000000..037b071 --- /dev/null +++ b/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/CustomEntityRegistry.java @@ -0,0 +1,99 @@ +package io.github.bedwarsrel.com.v1_12_r1; + +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.HashMap; +import java.util.Map; +import net.minecraft.server.v1_12_R1.Entity; +import net.minecraft.server.v1_12_R1.EntityTypes; +import net.minecraft.server.v1_12_R1.MinecraftKey; +import net.minecraft.server.v1_12_R1.RegistryMaterials; + +@SuppressWarnings("rawtypes") +public class CustomEntityRegistry extends RegistryMaterials { + + private static CustomEntityRegistry instance = null; + + private final BiMap> customEntities = HashBiMap.create(); + private final BiMap, MinecraftKey> customEntityClasses = + this.customEntities.inverse(); + private final Map, Integer> customEntityIds = new HashMap<>(); + + private final RegistryMaterials wrapped; + + private CustomEntityRegistry(RegistryMaterials original) { + this.wrapped = original; + } + + public static void addCustomEntity(int entityId, String entityName, + Class entityClass) { + getInstance().putCustomEntity(entityId, entityName, entityClass); + } + + public static CustomEntityRegistry getInstance() { + if (instance != null) { + return instance; + } + + instance = new CustomEntityRegistry(EntityTypes.b); + + try { + // TODO: Update name on version change (RegistryMaterials) + Field registryMaterialsField = EntityTypes.class.getDeclaredField("b"); + registryMaterialsField.setAccessible(true); + + Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setAccessible(true); + modifiersField.setInt(registryMaterialsField, + registryMaterialsField.getModifiers() & ~Modifier.FINAL); + + registryMaterialsField.set(null, instance); + } catch (Exception e) { + instance = null; + + throw new RuntimeException("Unable to override the old entity RegistryMaterials", e); + } + + return instance; + } + + @SuppressWarnings("unchecked") + @Override + public int a(Object key) { // TODO: Update name on version change (getId) + if (this.customEntityIds.containsKey(key)) { + return this.customEntityIds.get(key); + } + + return this.wrapped.a(key); + } + + @SuppressWarnings("unchecked") + @Override + public MinecraftKey b(Object value) { // TODO: Update name on version change (getKey) + if (this.customEntityClasses.containsKey(value)) { + return this.customEntityClasses.get(value); + } + + return (MinecraftKey) wrapped.b(value); + } + + @SuppressWarnings("unchecked") + @Override + public Class get(Object key) { + if (this.customEntities.containsKey(key)) { + return this.customEntities.get(key); + } + + return (Class) wrapped.get(key); + } + + public void putCustomEntity(int entityId, String entityName, + Class entityClass) { + MinecraftKey minecraftKey = new MinecraftKey(entityName); + + this.customEntities.put(minecraftKey, entityClass); + this.customEntityIds.put(entityClass, entityId); + } +} diff --git a/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/ParticleSpawner.java b/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/ParticleSpawner.java new file mode 100644 index 0000000..40e38dc --- /dev/null +++ b/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/ParticleSpawner.java @@ -0,0 +1,30 @@ +package io.github.bedwarsrel.com.v1_12_r1; + +import java.util.List; +import net.minecraft.server.v1_12_R1.EnumParticle; +import net.minecraft.server.v1_12_R1.PacketPlayOutWorldParticles; +import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; +import org.bukkit.entity.Player; + +public class ParticleSpawner { + + public static void spawnParticle(List players, String particle, float x, float y, + float z) { + EnumParticle particl = EnumParticle.FIREWORKS_SPARK; + + for (EnumParticle p : EnumParticle.values()) { + if (p.b().equals(particle)) { + particl = p; + break; + } + } + + PacketPlayOutWorldParticles packet = + new PacketPlayOutWorldParticles(particl, false, x, y, z, 0.0F, 0.0F, 0.0F, 0.0F, 1); + for (Player player : players) { + CraftPlayer craftPlayer = (CraftPlayer) player; + craftPlayer.getHandle().playerConnection.sendPacket(packet); + } + } + +} diff --git a/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/PathfinderGoalBedwarsPlayer.java b/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/PathfinderGoalBedwarsPlayer.java new file mode 100644 index 0000000..7f24cd9 --- /dev/null +++ b/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/PathfinderGoalBedwarsPlayer.java @@ -0,0 +1,20 @@ +package io.github.bedwarsrel.com.v1_12_r1; + +import net.minecraft.server.v1_12_R1.EntityCreature; +import net.minecraft.server.v1_12_R1.PathfinderGoalMeleeAttack; + +public class PathfinderGoalBedwarsPlayer extends PathfinderGoalMeleeAttack { + + private EntityCreature creature = null; + + public PathfinderGoalBedwarsPlayer(EntityCreature name, double name3, boolean name4) { + super(name, name3, name4); + this.creature = name; + } + + @Override + public void e() { + this.creature.getNavigation().a(this.creature.getGoalTarget()); + } + +} diff --git a/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/PerformRespawnRunnable.java b/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/PerformRespawnRunnable.java new file mode 100644 index 0000000..f2e2f20 --- /dev/null +++ b/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/PerformRespawnRunnable.java @@ -0,0 +1,26 @@ +package io.github.bedwarsrel.com.v1_12_r1; + +import net.minecraft.server.v1_12_R1.PacketPlayInClientCommand; +import net.minecraft.server.v1_12_R1.PacketPlayInClientCommand.EnumClientCommand; +import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +public class PerformRespawnRunnable extends BukkitRunnable { + + private Player player = null; + + public PerformRespawnRunnable(Player player) { + this.player = player; + } + + @Override + public void run() { + PacketPlayInClientCommand clientCommand = + new PacketPlayInClientCommand(EnumClientCommand.PERFORM_RESPAWN); + CraftPlayer cp = (CraftPlayer) player; + + cp.getHandle().playerConnection.a(clientCommand); + } + +} diff --git a/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/SpawnEgg1_12.java b/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/SpawnEgg1_12.java new file mode 100644 index 0000000..e5d8eea --- /dev/null +++ b/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/SpawnEgg1_12.java @@ -0,0 +1,116 @@ +/******************************************************************************* + * This file is part of ASkyBlock. + * + * ASkyBlock 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. + * + * ASkyBlock 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 ASkyBlock. If not, + * see . + *******************************************************************************/ +package io.github.bedwarsrel.com.v1_12_r1; + +import net.minecraft.server.v1_12_R1.NBTTagCompound; +import org.bukkit.Material; +import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack; +import org.bukkit.entity.EntityType; +import org.bukkit.inventory.ItemStack; + +public class SpawnEgg1_12 { + + private EntityType type; + + public SpawnEgg1_12(EntityType type) { + this.type = type; + } + + /** + * Converts from an item stack to a spawn egg 1.9 + * + * @param item - ItemStack, quantity is disregarded + * @return SpawnEgg 1.9 + */ + public static SpawnEgg1_12 fromItemStack(ItemStack item) { + if (item == null) { + throw new IllegalArgumentException("item cannot be null"); + } + if (item.getType() != Material.MONSTER_EGG) { + throw new IllegalArgumentException("item is not a monster egg"); + } + net.minecraft.server.v1_12_R1.ItemStack stack = CraftItemStack.asNMSCopy(item); + NBTTagCompound tagCompound = stack.getTag(); + if (tagCompound != null) { + @SuppressWarnings("deprecation") + EntityType type = EntityType.fromName(tagCompound.getCompound("EntityTag").getString("id")); + if (type != null) { + return new SpawnEgg1_12(type); + } else { + return null; + } + } else { + return null; + } + } + + public SpawnEgg1_12 clone() { + return (SpawnEgg1_12) this.clone(); + } + + /** + * Get the type of entity this egg will spawn. + * + * @return The entity type. + */ + public EntityType getSpawnedType() { + return type; + } + + /** + * Set the type of entity this egg will spawn. + * + * @param type The entity type. + */ + public void setSpawnedType(EntityType type) { + if (type.isAlive()) { + this.type = type; + } + } + + /** + * Get an ItemStack of one spawn egg + * + * @return ItemStack + */ + public ItemStack toItemStack() { + return toItemStack(1); + } + + + /** + * Get an itemstack of spawn eggs + * + * @return ItemStack of spawn eggs + */ + @SuppressWarnings("deprecation") + public ItemStack toItemStack(int amount) { + ItemStack item = new ItemStack(Material.MONSTER_EGG, amount); + net.minecraft.server.v1_12_R1.ItemStack stack = CraftItemStack.asNMSCopy(item); + NBTTagCompound tagCompound = stack.getTag(); + if (tagCompound == null) { + tagCompound = new NBTTagCompound(); + } + NBTTagCompound id = new NBTTagCompound(); + id.setString("id", type.getName()); + tagCompound.set("EntityTag", id); + stack.setTag(tagCompound); + return CraftItemStack.asBukkitCopy(stack); + } + + public String toString() { + return "SPAWN EGG{" + getSpawnedType() + "}"; + } +} diff --git a/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/TNTSheep.java b/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/TNTSheep.java new file mode 100644 index 0000000..e69d2c5 --- /dev/null +++ b/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/TNTSheep.java @@ -0,0 +1,116 @@ +package io.github.bedwarsrel.com.v1_12_r1; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.shop.Specials.ITNTSheep; +import java.lang.reflect.Field; +import java.util.Set; +import net.minecraft.server.v1_12_R1.EntityLiving; +import net.minecraft.server.v1_12_R1.EntitySheep; +import net.minecraft.server.v1_12_R1.EntityTNTPrimed; +import net.minecraft.server.v1_12_R1.GenericAttributes; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_12_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_12_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_12_R1.entity.CraftTNTPrimed; +import org.bukkit.entity.Creature; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.TNTPrimed; +import org.bukkit.event.entity.EntityTargetEvent.TargetReason; + +public class TNTSheep extends EntitySheep implements ITNTSheep { + + private TNTPrimed primedTnt = null; + private World world = null; + + public TNTSheep(net.minecraft.server.v1_12_R1.World world) { + super(world); + } + + public TNTSheep(Location location, Player target) { + super(((CraftWorld) location.getWorld()).getHandle()); + + this.world = location.getWorld(); + + this.locX = location.getX(); + this.locY = location.getY(); + this.locZ = location.getZ(); + + try { + Field b = this.goalSelector.getClass().getDeclaredField("b"); + b.setAccessible(true); + + Set goals = (Set) b.get(this.goalSelector); + goals.clear(); // Clears the goals + + this.getAttributeInstance(GenericAttributes.FOLLOW_RANGE).setValue(128D); + this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) + .setValue( + BedwarsRel.getInstance().getConfig().getDouble("specials.tntsheep.speed", 0.4D)); + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + } + + this.goalSelector.a(0, new PathfinderGoalBedwarsPlayer(this, 1D, false)); // Add bedwars player + // goal + try { + this.setGoalTarget((EntityLiving) (((CraftPlayer) target).getHandle()), + TargetReason.TARGET_ATTACKED_ENTITY, false); + } catch (Exception ex) { + // newer spigot builds + if (ex instanceof NoSuchMethodException) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + this.setGoalTarget((EntityLiving) (((CraftPlayer) target).getHandle())); + } + } + + ((Creature) this.getBukkitEntity()).setTarget((LivingEntity) target); + } + + @Override + public Location getLocation() { + return new Location(this.world, this.locX, this.locY, this.locZ); + } + + @Override + public TNTPrimed getTNT() { + return this.primedTnt; + } + + @Override + public void setTNT(TNTPrimed tnt) { + this.primedTnt = tnt; + } + + @Override + public void remove() { + this.getBukkitEntity().remove(); + } + + @Override + public void setPassenger(TNTPrimed tnt) { + this.getBukkitEntity().setPassenger(tnt); + } + + @Override + public void setTNTSource(Entity source) { + if (source == null) { + return; + } + + try { + Field sourceField = EntityTNTPrimed.class.getDeclaredField("source"); + sourceField.setAccessible(true); + sourceField.set(((CraftTNTPrimed) this.primedTnt).getHandle(), + ((CraftEntity) source).getHandle()); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + // didn't work + } + } + +} diff --git a/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/TNTSheepRegister.java b/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/TNTSheepRegister.java new file mode 100644 index 0000000..9cd17ad --- /dev/null +++ b/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/TNTSheepRegister.java @@ -0,0 +1,69 @@ +package io.github.bedwarsrel.com.v1_12_r1; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.shop.Specials.ITNTSheep; +import io.github.bedwarsrel.shop.Specials.ITNTSheepRegister; +import java.lang.reflect.Field; +import net.minecraft.server.v1_12_R1.EntityTNTPrimed; +import org.bukkit.DyeColor; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_12_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_12_R1.entity.CraftLivingEntity; +import org.bukkit.craftbukkit.v1_12_R1.entity.CraftSheep; +import org.bukkit.craftbukkit.v1_12_R1.entity.CraftTNTPrimed; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.entity.TNTPrimed; +import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; +import org.bukkit.scheduler.BukkitRunnable; + +public class TNTSheepRegister implements ITNTSheepRegister { + + @Override + public void registerEntities(int entityId) { + CustomEntityRegistry.addCustomEntity(entityId, "TNTSheep", TNTSheep.class); + } + + @Override + public ITNTSheep spawnCreature( + final io.github.bedwarsrel.shop.Specials.TNTSheep specialItem, + final Location location, final Player owner, Player target, final DyeColor color) { + final TNTSheep sheep = new TNTSheep(location, target); + + ((CraftWorld) location.getWorld()).getHandle().addEntity(sheep, SpawnReason.CUSTOM); + sheep.setPosition(location.getX(), location.getY(), location.getZ()); + ((CraftSheep) sheep.getBukkitEntity()).setColor(color); + new BukkitRunnable() { + + @Override + public void run() { + + TNTPrimed primedTnt = (TNTPrimed) location.getWorld() + .spawnEntity(location.add(0.0, 1.0, 0.0), EntityType.PRIMED_TNT); + ((CraftSheep) sheep.getBukkitEntity()).setPassenger(primedTnt); + sheep.setTNT(primedTnt); + try { + Field sourceField = EntityTNTPrimed.class.getDeclaredField("source"); + sourceField.setAccessible(true); + sourceField.set(((CraftTNTPrimed) primedTnt).getHandle(), + ((CraftLivingEntity) owner).getHandle()); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + ex.printStackTrace(); + } + sheep.getTNT().setYield((float) (sheep.getTNT().getYield() + * BedwarsRel + .getInstance().getConfig().getDouble("specials.tntsheep.explosion-factor", 1.0))); + sheep.getTNT().setFuseTicks((int) Math.round( + BedwarsRel.getInstance().getConfig().getDouble("specials.tntsheep.fuse-time", 8) * 20)); + sheep.getTNT().setIsIncendiary(false); + specialItem.getGame().getRegion().addRemovingEntity(sheep.getTNT()); + specialItem.getGame().getRegion().addRemovingEntity(sheep.getBukkitEntity()); + specialItem.updateTNT(); + } + }.runTaskLater(BedwarsRel.getInstance(), 5L); + + return sheep; + } + +} diff --git a/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/Title.java b/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/Title.java new file mode 100644 index 0000000..fd56b2a --- /dev/null +++ b/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/Title.java @@ -0,0 +1,39 @@ +package io.github.bedwarsrel.com.v1_12_r1; + +import net.minecraft.server.v1_12_R1.IChatBaseComponent; +import net.minecraft.server.v1_12_R1.PacketPlayOutTitle; +import net.minecraft.server.v1_12_R1.PacketPlayOutTitle.EnumTitleAction; +import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; +import org.bukkit.entity.Player; + +public class Title { + + public static void showSubTitle(Player player, String subTitle, double fadeIn, double stay, + double fadeOut) { + IChatBaseComponent subTitleComponent = + IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + subTitle + "\"}"); + + PacketPlayOutTitle subTitlePacket = + new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, subTitleComponent); + PacketPlayOutTitle timesPacket = + new PacketPlayOutTitle(EnumTitleAction.TIMES, null, (int) Math.round(fadeIn * 20.0), + (int) Math.round(stay * 20.0), (int) Math.round(fadeOut * 20.0)); + + ((CraftPlayer) player).getHandle().playerConnection.sendPacket(timesPacket); + ((CraftPlayer) player).getHandle().playerConnection.sendPacket(subTitlePacket); + } + + public static void showTitle(Player player, String title, double fadeIn, double stay, + double fadeOut) { + IChatBaseComponent titleComponent = + IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + title + "\"}"); + + PacketPlayOutTitle titlePacket = new PacketPlayOutTitle(EnumTitleAction.TITLE, titleComponent); + PacketPlayOutTitle timesPacket = new PacketPlayOutTitle(EnumTitleAction.TIMES, null, + (int) Math.round(fadeIn * 20), (int) Math.round(stay * 20), (int) Math.round(fadeOut * 20)); + + ((CraftPlayer) player).getHandle().playerConnection.sendPacket(timesPacket); + ((CraftPlayer) player).getHandle().playerConnection.sendPacket(titlePacket); + } + +} diff --git a/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/VillagerItemShop.java b/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/VillagerItemShop.java new file mode 100644 index 0000000..1a75f9f --- /dev/null +++ b/v1_12_r1/src/main/java/io/github/bedwarsrel/com/v1_12_r1/VillagerItemShop.java @@ -0,0 +1,136 @@ +package io.github.bedwarsrel.com.v1_12_r1; + +import io.github.bedwarsrel.BedwarsRel; +import io.github.bedwarsrel.game.Game; +import io.github.bedwarsrel.utils.Utils; +import io.github.bedwarsrel.villager.MerchantCategory; +import io.github.bedwarsrel.villager.VillagerTrade; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import net.minecraft.server.v1_12_R1.EntityHuman; +import net.minecraft.server.v1_12_R1.EntityVillager; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.craftbukkit.v1_12_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_12_R1.entity.CraftVillager; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.MerchantRecipe; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.scheduler.BukkitRunnable; + +public class VillagerItemShop { + + private MerchantCategory category = null; + private Game game = null; + private Player player = null; + // 存储玩家当前打开的交易中的命令物品: 玩家 -> (结果物品 -> 命令列表) + public static Map>> playerCommandItems = new HashMap<>(); + + public VillagerItemShop(Game g, Player p, MerchantCategory category) { + this.game = g; + this.player = p; + this.category = category; + } + + private EntityVillager createVillager() { + try { + EntityVillager ev = + new EntityVillager(((CraftWorld) this.game.getRegion().getWorld()).getHandle()); + + return ev; + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + } + + return null; + } + + private EntityHuman getEntityHuman() { + try { + return ((CraftPlayer) this.player).getHandle(); + } catch (Exception e) { + BedwarsRel.getInstance().getBugsnag().notify(e); + e.printStackTrace(); + } + return null; + } + + public void openTrading() { + // As task because of inventory issues + new BukkitRunnable() { + + @SuppressWarnings("deprecation") + @Override + public void run() { + try { + EntityVillager entityVillager = VillagerItemShop.this.createVillager(); + CraftVillager craftVillager = (CraftVillager) entityVillager.getBukkitEntity(); + EntityHuman entityHuman = VillagerItemShop.this.getEntityHuman(); + + // set location + List recipeList = new ArrayList(); + Map> commandMap = new HashMap<>(); + + for (VillagerTrade trade : VillagerItemShop.this.category + .getFilteredOffers()) { + ItemStack reward = trade.getRewardItem().clone(); + Method colorable = Utils.getColorableMethod(reward.getType()); + + if (Utils.isColorable(reward)) { + reward + .setDurability(game.getPlayerTeam(player).getColor().getDyeColor().getWoolData()); + } else if (colorable != null) { + ItemMeta meta = reward.getItemMeta(); + colorable.setAccessible(true); + colorable.invoke(meta, new Object[]{VillagerItemShop.this.game + .getPlayerTeam(VillagerItemShop.this.player).getColor().getColor()}); + reward.setItemMeta(meta); + } + + if (!(trade.getHandle() + .getInstance() instanceof net.minecraft.server.v1_12_R1.MerchantRecipe)) { + continue; + } + + // 如果交易有命令,存储映射 + if (trade.hasCommands()) { + commandMap.put(reward, trade.getCommands()); + } + + MerchantRecipe recipe = new MerchantRecipe(reward, 1024); + recipe.addIngredient(trade.getItem1()); + + if (trade.getItem2() != null) { + recipe.addIngredient(trade.getItem2()); + } else { + recipe.addIngredient(new ItemStack(Material.AIR)); + } + + recipe.setUses(0); + recipe.setExperienceReward(false); + recipeList.add(recipe); + } + + // 存储该玩家的命令物品映射 + playerCommandItems.put(player, commandMap); + + craftVillager.setRecipes(recipeList); + craftVillager.setRiches(0); + entityVillager.setTradingPlayer(entityHuman); + + ((CraftPlayer) player).getHandle().openTrade(entityVillager); + } catch (Exception ex) { + BedwarsRel.getInstance().getBugsnag().notify(ex); + ex.printStackTrace(); + } + } + }.runTask(BedwarsRel.getInstance()); + } + +}