From 5a52d4fb140cccf86bc16a70eab2bdcbabc2c802 Mon Sep 17 00:00:00 2001 From: Lncvrt Date: Thu, 3 Jul 2025 01:22:34 -0700 Subject: [PATCH] Initial commit --- .gitignore | 119 ++++ LICENSE | 674 ++++++++++++++++++ LICENSE.txt | 21 + README.md | 3 + build.gradle.kts | 98 +++ gradle.properties | 0 gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43764 bytes gradle/wrapper/gradle-wrapper.properties | 7 + gradlew | 251 +++++++ gradlew.bat | 94 +++ settings.gradle.kts | 1 + .../xyz/lncvrt/chaosmcapi/ChaosMCAPI.kt | 18 + .../xyz/lncvrt/chaosmcapi/utils/Colors.kt | 7 + .../lncvrt/chaosmcapi/utils/CommandHelper.kt | 16 + .../lncvrt/chaosmcapi/utils/MessageFormat.kt | 35 + src/main/resources/paper-plugin.yml | 4 + 16 files changed, 1348 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 LICENSE.txt create mode 100644 README.md create mode 100644 build.gradle.kts create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle.kts create mode 100644 src/main/kotlin/xyz/lncvrt/chaosmcapi/ChaosMCAPI.kt create mode 100644 src/main/kotlin/xyz/lncvrt/chaosmcapi/utils/Colors.kt create mode 100644 src/main/kotlin/xyz/lncvrt/chaosmcapi/utils/CommandHelper.kt create mode 100644 src/main/kotlin/xyz/lncvrt/chaosmcapi/utils/MessageFormat.kt create mode 100644 src/main/resources/paper-plugin.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d5f737e --- /dev/null +++ b/.gitignore @@ -0,0 +1,119 @@ +# User-specific stuff +.idea/ + +*.iml +*.ipr +*.iws + +# IntelliJ +out/ +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +.gradle +build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Cache of project +.gradletasknamecache + +**/build/ + +# Common working directory +run/ +runs/ + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..61d1860 --- /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, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..5e52004 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Lncvrt + +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. diff --git a/README.md b/README.md new file mode 100644 index 0000000..4b3141b --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# ChaosMCAPI + +An extremely basic API used for ChaosMC's plugins to add commonly used functions diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..d438dfb --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,98 @@ +plugins { + kotlin("jvm") version "2.2.0" + id("com.github.johnrengelman.shadow") version "8.1.1" + id("xyz.jpenilla.run-paper") version "2.3.1" + `maven-publish` +} + +group = "xyz.lncvrt" +version = "1.0.0" + +repositories { + mavenCentral() + maven("https://repo.papermc.io/repository/maven-public/") { + name = "papermc-repo" + } + maven("https://oss.sonatype.org/content/groups/public/") { + name = "sonatype" + } +} + +dependencies { + compileOnly("io.papermc.paper:paper-api:1.20.1-R0.1-SNAPSHOT") + implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") +} + +val targetJavaVersion = 17 +kotlin { + jvmToolchain(targetJavaVersion) +} + +val sourcesJar = tasks.register("sourcesJar") { + from(sourceSets.main.get().allSource) + archiveClassifier.set("sources") +} + +tasks { + shadowJar { + archiveBaseName.set(rootProject.name) + archiveClassifier.set("") + } + + artifacts { + add("archives", sourcesJar) + } + + build { + dependsOn("shadowJar") + } + + processResources { + val props = mapOf("version" to version) + inputs.properties(props) + filteringCharset = "UTF-8" + filesMatching("plugin.yml") { + expand(props) + } + } + + runServer { + minecraftVersion("1.20.1") + } +} + +publishing { + repositories { + maven { + name = "lncvrtRepositoryReleases" + url = uri("https://repo.lncvrt.xyz/releases") + credentials { + username = System.getenv("LNCVRT_REPO_USERNAME") + password = System.getenv("LNCVRT_REPO_PASSWORD") + } + authentication { + create("basic") + } + } + maven { + name = "lncvrtRepositorySnapshots" + url = uri("https://repo.lncvrt.xyz/snapshots") + credentials { + username = System.getenv("LNCVRT_REPO_USERNAME") + password = System.getenv("LNCVRT_REPO_PASSWORD") + } + authentication { + create("basic") + } + } + } + publications { + create("maven") { + groupId = "xyz.lncvrt" + artifactId = rootProject.name.lowercase() + version = rootProject.version as String? + artifact(tasks.shadowJar) + artifact(sourcesJar.get()) + } + } +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..e69de29 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..1b33c55baabb587c669f562ae36f953de2481846 GIT binary patch literal 43764 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH="\\\"\\\"" + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..5eed7ee --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH= + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..bda037b --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "ChaosMCAPI" diff --git a/src/main/kotlin/xyz/lncvrt/chaosmcapi/ChaosMCAPI.kt b/src/main/kotlin/xyz/lncvrt/chaosmcapi/ChaosMCAPI.kt new file mode 100644 index 0000000..5be042a --- /dev/null +++ b/src/main/kotlin/xyz/lncvrt/chaosmcapi/ChaosMCAPI.kt @@ -0,0 +1,18 @@ +package xyz.lncvrt.chaosmcapi + +import org.bukkit.plugin.java.JavaPlugin + +@Suppress("unused") +class ChaosMCAPI : JavaPlugin() { + override fun onEnable() { + instance = this + } + + companion object { + private lateinit var instance: ChaosMCAPI + + fun getInstance(): ChaosMCAPI { + return instance + } + } +} diff --git a/src/main/kotlin/xyz/lncvrt/chaosmcapi/utils/Colors.kt b/src/main/kotlin/xyz/lncvrt/chaosmcapi/utils/Colors.kt new file mode 100644 index 0000000..55636fc --- /dev/null +++ b/src/main/kotlin/xyz/lncvrt/chaosmcapi/utils/Colors.kt @@ -0,0 +1,7 @@ +package xyz.lncvrt.chaosmcapi.utils + +@Suppress("unused") +object Colors { + const val PRIMARY = "FF0000" + const val SECONDARY = "BA1616" +} diff --git a/src/main/kotlin/xyz/lncvrt/chaosmcapi/utils/CommandHelper.kt b/src/main/kotlin/xyz/lncvrt/chaosmcapi/utils/CommandHelper.kt new file mode 100644 index 0000000..a58a9dd --- /dev/null +++ b/src/main/kotlin/xyz/lncvrt/chaosmcapi/utils/CommandHelper.kt @@ -0,0 +1,16 @@ +package xyz.lncvrt.chaosmcapi.utils + +import org.bukkit.entity.Player +import xyz.lncvrt.chaosmcapi.ChaosMCAPI + +@Suppress("unused") +class CommandHelper { + fun executeAsPlayer(player: Player, command: String) { + player.performCommand(command) + } + + fun executeAsConsole(command: String) { + val instance = ChaosMCAPI.getInstance() + instance.server.dispatchCommand(instance.server.consoleSender, command) + } +} \ No newline at end of file diff --git a/src/main/kotlin/xyz/lncvrt/chaosmcapi/utils/MessageFormat.kt b/src/main/kotlin/xyz/lncvrt/chaosmcapi/utils/MessageFormat.kt new file mode 100644 index 0000000..bb9f545 --- /dev/null +++ b/src/main/kotlin/xyz/lncvrt/chaosmcapi/utils/MessageFormat.kt @@ -0,0 +1,35 @@ +package xyz.lncvrt.chaosmcapi.utils + +@Suppress("unused") +class MessageFormat { + companion object { + fun name(bold: Boolean): String { + val name = "ChaosMC" + return if (bold) { + "${name}" + } else { + name + } + } + + fun name(): String { + return name(true) + } + + fun setPrefix(text: String): String { + return "${name(false)} » $text" + } + + fun setStaffPrefix(text: String): String { + return "${name(false)} Staff Mode » $text" + } + + fun setPrimaryColor(text: String): String { + return "$text" + } + + fun setSecondaryColor(text: String): String { + return "$text" + } + } +} diff --git a/src/main/resources/paper-plugin.yml b/src/main/resources/paper-plugin.yml new file mode 100644 index 0000000..80e4273 --- /dev/null +++ b/src/main/resources/paper-plugin.yml @@ -0,0 +1,4 @@ +name: ChaosMCAPI +version: '${version}' +main: xyz.lncvrt.chaosmcapi.ChaosMCAPI +api-version: '1.20'