From dcd7f7401c3383b9731ccae7a466e1ee65d7fde4 Mon Sep 17 00:00:00 2001 From: Paldiu Date: Thu, 17 Mar 2022 16:16:52 -0500 Subject: [PATCH] Initial commit --- .gitattributes | 2 + .gitignore | 24 + .gradle/7.3.3/checksums/checksums.lock | Bin 0 -> 17 bytes .gradle/7.3.3/checksums/md5-checksums.bin | Bin 0 -> 18997 bytes .gradle/7.3.3/checksums/sha1-checksums.bin | Bin 0 -> 21467 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../dependencies-accessors/gc.properties | 0 .../executionHistory/executionHistory.bin | Bin 0 -> 33673 bytes .../executionHistory/executionHistory.lock | Bin 0 -> 17 bytes .gradle/7.3.3/fileChanges/last-build.bin | Bin 0 -> 1 bytes .gradle/7.3.3/fileHashes/fileHashes.bin | Bin 0 -> 19047 bytes .gradle/7.3.3/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../7.3.3/fileHashes/resourceHashesCache.bin | Bin 0 -> 18531 bytes .gradle/7.3.3/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .gradle/buildOutputCleanup/cache.properties | 2 + .gradle/buildOutputCleanup/outputFiles.bin | Bin 0 -> 19037 bytes .gradle/file-system.probe | Bin 0 -> 8 bytes .gradle/vcs-1/gc.properties | 0 .idea/.gitignore | 3 + .idea/compiler.xml | 6 + .idea/gradle.xml | 17 + .idea/inspectionProfiles/Project_Default.xml | 54 ++ .idea/jarRepositories.xml | 45 ++ .idea/misc.xml | 12 + .idea/modules/Crumb.main.iml | 13 + .idea/uiDesigner.xml | 124 ++++ Crumb.iml | 9 + LICENSE | 674 ++++++++++++++++++ build.gradle | 47 ++ build/resources/main/plugin.yml | 4 + .../compileJava/previous-compilation-data.bin | Bin 0 -> 28668 bytes build/tmp/jar/MANIFEST.MF | 2 + gradle.properties | 0 gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 234 ++++++ gradlew.bat | 89 +++ settings.gradle | 1 + .../io/github/simplex/api/LuckContainer.java | 20 + .../java/io/github/simplex/crumb/Config.java | 41 ++ .../java/io/github/simplex/crumb/Crumb.java | 21 + .../java/io/github/simplex/crumb/Luck.java | 108 +++ .../github/simplex/crumb/PlayerHandler.java | 58 ++ .../io/github/simplex/crumb/SneakyWorker.java | 17 + .../crumb/listener/PlayerListener.java | 175 +++++ src/main/resources/plugin.yml | 4 + 46 files changed, 1811 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .gradle/7.3.3/checksums/checksums.lock create mode 100644 .gradle/7.3.3/checksums/md5-checksums.bin create mode 100644 .gradle/7.3.3/checksums/sha1-checksums.bin create mode 100644 .gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock create mode 100644 .gradle/7.3.3/dependencies-accessors/gc.properties create mode 100644 .gradle/7.3.3/executionHistory/executionHistory.bin create mode 100644 .gradle/7.3.3/executionHistory/executionHistory.lock create mode 100644 .gradle/7.3.3/fileChanges/last-build.bin create mode 100644 .gradle/7.3.3/fileHashes/fileHashes.bin create mode 100644 .gradle/7.3.3/fileHashes/fileHashes.lock create mode 100644 .gradle/7.3.3/fileHashes/resourceHashesCache.bin create mode 100644 .gradle/7.3.3/gc.properties create mode 100644 .gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 .gradle/buildOutputCleanup/cache.properties create mode 100644 .gradle/buildOutputCleanup/outputFiles.bin create mode 100644 .gradle/file-system.probe create mode 100644 .gradle/vcs-1/gc.properties create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules/Crumb.main.iml create mode 100644 .idea/uiDesigner.xml create mode 100644 Crumb.iml create mode 100644 LICENSE create mode 100644 build.gradle create mode 100644 build/resources/main/plugin.yml create mode 100644 build/tmp/compileJava/previous-compilation-data.bin create mode 100644 build/tmp/jar/MANIFEST.MF create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle create mode 100644 src/main/java/io/github/simplex/api/LuckContainer.java create mode 100644 src/main/java/io/github/simplex/crumb/Config.java create mode 100644 src/main/java/io/github/simplex/crumb/Crumb.java create mode 100644 src/main/java/io/github/simplex/crumb/Luck.java create mode 100644 src/main/java/io/github/simplex/crumb/PlayerHandler.java create mode 100644 src/main/java/io/github/simplex/crumb/SneakyWorker.java create mode 100644 src/main/java/io/github/simplex/crumb/listener/PlayerListener.java create mode 100644 src/main/resources/plugin.yml diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..524f096 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# 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* +replay_pid* diff --git a/.gradle/7.3.3/checksums/checksums.lock b/.gradle/7.3.3/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..7259438e906d282560a252ff8ab1253248b73aa6 GIT binary patch literal 17 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 literal 0 HcmV?d00001 diff --git a/.gradle/7.3.3/fileChanges/last-build.bin b/.gradle/7.3.3/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/.gradle/7.3.3/fileHashes/fileHashes.bin b/.gradle/7.3.3/fileHashes/fileHashes.bin new file mode 100644 index 0000000000000000000000000000000000000000..67da483421e1bec1d942436812cab39213efa73c GIT binary patch literal 19047 zcmeI(-%C?b00;0p=Yv|JgO*zbVbFuPeo&3n4N5oMvStK#&4iSQOp_Wde_)X^#wb!r zq#-qGjW%eBLdb?%R1mpzkgW$JR!}~qBoV&i-1*lkR0+b zDouts$ZO}g?W={ss_x^Rj)Xbq6ue2(QELjmvT?iih?O3re2r48?MFYGKZA()%)6g*W3nKO|0u=-Q`*>()OT z-LocV8jWev*l3qFvMSteTfr9h-E?f~@%wgR|AX)xpR13NhAdOs$n&gK z_1!tem)tZTnRzNZ@w<`scG1STwBZbU>d!tJ$Z8vp295oPT%-{;k%s-Jv~jR2v?n_~ z^K#us<5F$EPS~O$>dG#V23I3(SQ~g#TTpSna^(B$1aFz9_eju2t+WxiF<4fv^qL;L w`>`#Q)T?OYD{YAT9RB(Rb@z0d=B8&yZNuS6>iHF6H;1sQbYu-_WX_9?Utd`#NdN!< literal 0 HcmV?d00001 diff --git a/.gradle/7.3.3/fileHashes/fileHashes.lock b/.gradle/7.3.3/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..4d7883e067f0e2ed1bcd9baae709771c7a82d7b4 GIT binary patch literal 17 TcmZQJia%cNU%e)k0Rn^pEjI(f literal 0 HcmV?d00001 diff --git a/.gradle/7.3.3/fileHashes/resourceHashesCache.bin b/.gradle/7.3.3/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000000000000000000000000000000000000..bc8b179667983431bd0917bf0a9ccaa38a3e90ec GIT binary patch literal 18531 zcmeI%u?m4v6ae7MD1|}&7P~SivMYl!8O$ET=nYItyo#rg(PFkR8UBR(_mfwUzEkJk z(>cpM-+G53B-Q6T!Z+&QQbm9O0RjXF5FkK+009C72oNAZfB*pk1PJ_#z%(vW%9lyn z#jL2zL+F%aQCOeT#igH)^YLi#`9JvFvERyPP67l75FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ;1>kC@ez%fwJfXG!*+R^-B$a}y*GL6 Ij!Qp8x;= literal 0 HcmV?d00001 diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..113b3ed --- /dev/null +++ b/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Wed Feb 09 22:19:17 CST 2022 +gradle.version=7.3.3 diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..1195843fe39e432888cd1965f82a58dfe466c7ef GIT binary patch literal 19037 zcmeI%Ur1A77{~E9Et(}}!btmLgUVWNU>aqjkQ!r~QWt9BMaGoGXsN6`R#0ZPi%1bK zLc+A0pjK=(FZ`30BqUN8Y&X##EGr6wjK!p&aGmi!PZA@Dfj9CyaL!)7JMXid&+XYG zL~>$?4l#FV=ayJO00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##Ah1vb%G3v0CLbo* z5EEXkXcQtNUR|VKsygfFbL{oWug&lI{lV4S)s-y+ffCs*L)>q?s?|+;0yWh0xVw~; zZCj1s?#phC<$kxN*tUJihLd!EC-+{X)8c;Ocgb!p;ofgZG=-GMb*pBFBvbKvRjL|FJJvG z$?dW?(433hb+uFa_#Njz(46DkjT2d0JaOd-)ScY3gRQw*QKzT=hI_8f7qb7d%?Pu9`kd}5cP5H<=LZ3(ayJhG-sH5#ppFtjsBTIcIz(ghcn`b|5KuSipa^) Q&57I<-Q@Y(^^eKF0X^H7N&o-= literal 0 HcmV?d00001 diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe new file mode 100644 index 0000000000000000000000000000000000000000..9dc1248928698adfcfa48444e5bc31e2032eda84 GIT binary patch literal 8 PcmZQzV61!iZ-y=a3SR>x literal 0 HcmV?d00001 diff --git a/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b589d56 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..611e7c8 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..7ae5ed7 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,54 @@ + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..d75c1d4 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..d93202f --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules/Crumb.main.iml b/.idea/modules/Crumb.main.iml new file mode 100644 index 0000000..f5de878 --- /dev/null +++ b/.idea/modules/Crumb.main.iml @@ -0,0 +1,13 @@ + + + + + + + PAPER + ADVENTURE + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..e96534f --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Crumb.iml b/Crumb.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/Crumb.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e62ec04 --- /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 +. diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..978c740 --- /dev/null +++ b/build.gradle @@ -0,0 +1,47 @@ +plugins { + id 'java' +} + +group = 'io.github.simplex' +version = '1.0-SNAPSHOT' + +repositories { + mavenCentral() + maven { + name = 'papermc-repo' + url = 'https://papermc.io/repo/repository/maven-public/' + } + maven { + name = 'sonatype' + url = 'https://s01.oss.sonatype.org/content/groups/public/' + } +} + +dependencies { + compileOnly 'io.papermc.paper:paper-api:1.18.1-R0.1-SNAPSHOT' +} + +def targetJavaVersion = 17 +java { + def javaVersion = JavaVersion.toVersion(targetJavaVersion) + sourceCompatibility = javaVersion + targetCompatibility = javaVersion + if (JavaVersion.current() < javaVersion) { + toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion) + } +} + +tasks.withType(JavaCompile).configureEach { + if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) { + options.release = targetJavaVersion + } +} + +processResources { + def props = [version: version] + inputs.properties props + filteringCharset 'UTF-8' + filesMatching('plugin.yml') { + expand props + } +} diff --git a/build/resources/main/plugin.yml b/build/resources/main/plugin.yml new file mode 100644 index 0000000..cb93d23 --- /dev/null +++ b/build/resources/main/plugin.yml @@ -0,0 +1,4 @@ +name: Crumb +version: '1.0-SNAPSHOT' +main: io.github.simplex.crumb.Crumb +api-version: 1.18 diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..fcb7d76abdc084e5514a135cacf2130e15f46957 GIT binary patch literal 28668 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 N)3Wd4O8mv2{{xb^2^;_b literal 0 HcmV?d00001 diff --git a/build/tmp/jar/MANIFEST.MF b/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..59499bc --- /dev/null +++ b/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..e69de29 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..2e6e589 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..c53aefa --- /dev/null +++ b/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# 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"' + +# 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=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# 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 + which java >/dev/null 2>&1 || 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 + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + 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 + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# 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..107acd3 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@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 + +@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=. +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%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="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! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..5cc6d4b --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'Crumb' diff --git a/src/main/java/io/github/simplex/api/LuckContainer.java b/src/main/java/io/github/simplex/api/LuckContainer.java new file mode 100644 index 0000000..1466d69 --- /dev/null +++ b/src/main/java/io/github/simplex/api/LuckContainer.java @@ -0,0 +1,20 @@ +package io.github.simplex.api; + +import org.bukkit.attribute.Attribute; +import org.bukkit.entity.Player; + +public interface LuckContainer { + Attribute asAttribute(); + + double getNumber(); + + boolean isMatch(double number); + + boolean isClose(double number, int range); + + double multiplier(); + + Player associatedPlayer(); + + double baseValue(); +} diff --git a/src/main/java/io/github/simplex/crumb/Config.java b/src/main/java/io/github/simplex/crumb/Config.java new file mode 100644 index 0000000..2aca13b --- /dev/null +++ b/src/main/java/io/github/simplex/crumb/Config.java @@ -0,0 +1,41 @@ +package io.github.simplex.crumb; + +import org.bukkit.configuration.file.YamlConfiguration; + +import java.io.File; +import java.io.IOException; + +public class Config extends YamlConfiguration { + private final String CONFIG_NAME = "config.yml"; + + private final File dataFolder; + private final Crumb plugin; + private final File configFile; + + @SuppressWarnings("ResultOfMethodCallIgnored") + public Config(Crumb plugin, boolean copyResource) { + this.plugin = plugin; + this.dataFolder = plugin.getDataFolder(); + if (!dataFolder.exists()) dataFolder.mkdirs(); + File file = new File(dataFolder, CONFIG_NAME); + if (!file.exists()) { + SneakyWorker.sneakyTry(() -> { + file.createNewFile(); + plugin.saveResource(CONFIG_NAME, true); + }); + } + if (copyResource) plugin.saveResource(CONFIG_NAME, true); + configFile = file; + loadConfiguration(configFile); + } + + public void save() { + SneakyWorker.sneakyTry(() -> super.save(configFile)); + } + + public void load() { + SneakyWorker.sneakyTry(() -> { + super.load(configFile); + }); + } +} diff --git a/src/main/java/io/github/simplex/crumb/Crumb.java b/src/main/java/io/github/simplex/crumb/Crumb.java new file mode 100644 index 0000000..74c1344 --- /dev/null +++ b/src/main/java/io/github/simplex/crumb/Crumb.java @@ -0,0 +1,21 @@ +package io.github.simplex.crumb; + +import org.bukkit.plugin.java.JavaPlugin; + +public final class Crumb extends JavaPlugin { + public Config config; + public PlayerHandler handler; + + @Override + public void onEnable() { + config = new Config(this, false); + handler = new PlayerHandler(this); + this.getServer().getPluginManager().registerEvents(handler, this); + } + + @Override + public void onDisable() { + config.save(); + // Plugin shutdown logic + } +} diff --git a/src/main/java/io/github/simplex/crumb/Luck.java b/src/main/java/io/github/simplex/crumb/Luck.java new file mode 100644 index 0000000..50b5f1f --- /dev/null +++ b/src/main/java/io/github/simplex/crumb/Luck.java @@ -0,0 +1,108 @@ +package io.github.simplex.crumb; + +import io.github.simplex.api.LuckContainer; +import org.bukkit.attribute.Attribute; +import org.bukkit.entity.Player; + +import java.util.SplittableRandom; + +public class Luck implements LuckContainer { + private final Player player; + private final double multiplier; + private final double BASE_VALUE; + + public Luck(Player player) { + this.player = player; + multiplier = 1.0; + BASE_VALUE = player.getAttribute(Attribute.GENERIC_LUCK).getDefaultValue(); + } + + public Luck(Player player, double multiplier) { + this.player = player; + this.multiplier = multiplier; + BASE_VALUE = player.getAttribute(Attribute.GENERIC_LUCK).getDefaultValue(); + } + + @Override + public Attribute asAttribute() { + return Attribute.GENERIC_LUCK; + } + + @Override + public double getNumber() { + return associatedPlayer().getAttribute(asAttribute()).getValue(); + } + + @Override + public boolean isMatch(double number) { + return getNumber() == number; + } + + @Override + public boolean isClose(double number, int range) { + return ((getNumber() - range <= number) && (number <= getNumber() + range)); + } + + @Override + public double multiplier() { + return multiplier; + } + + @Override + public Player associatedPlayer() { + return player; + } + + public SplittableRandom RNG() { + return new SplittableRandom(); + } + + public boolean quickRNG(double percentage) { + double rng; + if (percentage > 99.0) { + rng = RNG().nextDouble(100.0, 199.0); + } else { + rng = RNG().nextDouble(0.0, 99.0); + } + + if (multiplier() > 0.0) { + return (percentage >= (rng * multiplier())); + } + + return (percentage >= rng); + } + + @Override + public double baseValue() { + return BASE_VALUE; + } + + public double defaultValue() { + return player.getAttribute(Attribute.GENERIC_LUCK).getDefaultValue(); + } + + public void setValue(double value) { + player.getAttribute(Attribute.GENERIC_LUCK).setBaseValue(value); + } + + public void addTo(double value) { + setValue(baseValue() + value); + } + + public void takeFrom(double value) { + setValue(baseValue() - value); + } + + public double getPercentage() { + return baseValue() - defaultValue(); + } + + public boolean isDefault() { + return baseValue() == defaultValue(); + } + + @Override + public String toString() { + return "" + baseValue(); + } +} diff --git a/src/main/java/io/github/simplex/crumb/PlayerHandler.java b/src/main/java/io/github/simplex/crumb/PlayerHandler.java new file mode 100644 index 0000000..62faf8c --- /dev/null +++ b/src/main/java/io/github/simplex/crumb/PlayerHandler.java @@ -0,0 +1,58 @@ +package io.github.simplex.crumb; + +import org.bukkit.attribute.Attribute; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerLoginEvent; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class PlayerHandler implements Listener { + private final Map playerLuckMap = new HashMap<>(); + private final List markedPlayers = new ArrayList<>(); + private final Crumb plugin; + + public PlayerHandler(Crumb plugin) { + this.plugin = plugin; + } + + public Luck getLuckContainer(Player player) { + return playerLuckMap.get(player); + } + + @EventHandler + public void initializePlayer(PlayerLoginEvent event) { + Player player = event.getPlayer(); + String uuid = player.getUniqueId().toString(); + ConfigurationSection identifier = plugin.config.getConfigurationSection(uuid); + Luck luck = new Luck(player); + if (identifier == null) { + identifier = plugin.config.createSection(player.getUniqueId().toString()); + identifier.set("luck", luck.defaultValue()); + plugin.config.save(); + } + luck.setValue(identifier.getDouble("luck")); + playerLuckMap.put(player, luck); + } + + public void updatePlayer(Player player, Luck luck) { + playerLuckMap.replace(player, luck); + } + + public void markPlayer(Player player) { + markedPlayers.add(player); + } + + public void unmarkPlayer(Player player) { + markedPlayers.remove(player); + } + + public boolean isMarked(Player player) { + return markedPlayers.contains(player); + } +} diff --git a/src/main/java/io/github/simplex/crumb/SneakyWorker.java b/src/main/java/io/github/simplex/crumb/SneakyWorker.java new file mode 100644 index 0000000..fe7c4e8 --- /dev/null +++ b/src/main/java/io/github/simplex/crumb/SneakyWorker.java @@ -0,0 +1,17 @@ +package io.github.simplex.crumb; + +import org.bukkit.Bukkit; + +public class SneakyWorker { + public static void sneakyTry(SneakyTry sneakyTry) { + try { + sneakyTry.tryThis(); + } catch (Exception ex) { + Bukkit.getLogger().severe(ex.getMessage()); + } + } + + interface SneakyTry { + void tryThis() throws Exception; + } +} diff --git a/src/main/java/io/github/simplex/crumb/listener/PlayerListener.java b/src/main/java/io/github/simplex/crumb/listener/PlayerListener.java new file mode 100644 index 0000000..983ab52 --- /dev/null +++ b/src/main/java/io/github/simplex/crumb/listener/PlayerListener.java @@ -0,0 +1,175 @@ +package io.github.simplex.crumb.listener; + +import io.github.simplex.crumb.Crumb; +import io.github.simplex.crumb.Luck; +import net.kyori.adventure.text.Component; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Witch; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +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.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerItemConsumeEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffectType; + +import java.util.ArrayList; +import java.util.List; + +public class PlayerListener implements Listener { + private final Crumb plugin; + + public PlayerListener(Crumb plugin) { + this.plugin = plugin; + } + + @EventHandler + public void takeDamage(EntityDamageEvent event) { + Entity entity = event.getEntity(); + if (!(entity instanceof Player)) { + return; + } + Player player = (Player) event.getEntity(); + Luck luck = plugin.handler.getLuckContainer(player); + if (ListBox.acceptedCauses.contains(event.getCause())) { + if (!luck.isDefault()) { + double percentage = luck.getPercentage(); + if (luck.quickRNG(percentage)) { + event.setCancelled(true); + player.damage(event.getDamage() / 2); + player.sendMessage(Component.empty().content("You got lucky and took less damage.")); + } + } + } + + if (ListBox.sideCauses.contains(event.getCause())) { + if (!luck.isDefault()) { + double percentage = luck.getPercentage(); + if (luck.quickRNG(percentage)) { + event.setCancelled(true); + player.getActivePotionEffects().removeIf(p -> ListBox.potionEffects.contains(p.getType())); + player.setFireTicks(0); + player.sendMessage(Component.empty().content("You got lucky and your afflictions were cured.")); + } + } + } + } + + @EventHandler + public void restoreHunger(PlayerItemConsumeEvent event) { + ItemStack item = event.getItem(); + Luck luck = plugin.handler.getLuckContainer(event.getPlayer()); + if (!luck.isDefault()) { + double percentage = luck.getPercentage(); + ListBox.foods.forEach(food -> { + if (item.isSimilar(food)) { + if (luck.quickRNG(percentage)) { + event.getPlayer().setExhaustion(event.getPlayer().getExhaustion() + 2); + } + } + }); + } + } + + @EventHandler + public void rabbitFoot(PlayerInteractEvent event) { + Action action = event.getAction(); + ItemStack foot = new ItemStack(Material.RABBIT_FOOT); + Player player = event.getPlayer(); + Luck luck = plugin.handler.getLuckContainer(player); + if (action.isRightClick() && player.getInventory().getItemInMainHand().isSimilar(foot)) { + double rng = luck.RNG().nextDouble(2.0, 5.0); + player.getInventory().remove(player.getInventory().getItemInMainHand()); + luck.addTo(rng); + + player.sendMessage(Component.empty().content("Your luck has been increased by " + rng + " points.")); + } + } + + @EventHandler + public void witchesBrew(EntityDamageByEntityEvent event) { + Entity eTEMP = event.getDamager(); + Entity pTEMP = event.getEntity(); + DamageCause cause = event.getCause(); + + if (!(pTEMP instanceof Player player)) { + return; + } + + if (!(eTEMP instanceof Witch)) { + return; + } + + Luck luck = plugin.handler.getLuckContainer(player); + if (cause.equals(DamageCause.MAGIC) || cause.equals(DamageCause.POISON)) { + if (luck.quickRNG(33.0)) { + luck.takeFrom(5.0); + plugin.handler.updatePlayer(player, luck); + } + } + } + + private static class ListBox { + public static final List acceptedCauses = new ArrayList<>() {{ + add(DamageCause.ENTITY_ATTACK); + add(DamageCause.ENTITY_SWEEP_ATTACK); + add(DamageCause.PROJECTILE); + add(DamageCause.ENTITY_EXPLOSION); + add(DamageCause.FLY_INTO_WALL); + add(DamageCause.LIGHTNING); + add(DamageCause.MAGIC); + }}; + + public static final List sideCauses = new ArrayList<>() {{ + add(DamageCause.POISON); + add(DamageCause.WITHER); + add(DamageCause.FIRE_TICK); + }}; + + public static final List potionEffects = new ArrayList<>() {{ + add(PotionEffectType.POISON); + add(PotionEffectType.WITHER); + add(PotionEffectType.BLINDNESS); + add(PotionEffectType.SLOW); + add(PotionEffectType.SLOW_DIGGING); + add(PotionEffectType.BAD_OMEN); + add(PotionEffectType.CONFUSION); + add(PotionEffectType.WEAKNESS); + }}; + + public static final List foods = new ArrayList<>() {{ + add(new ItemStack(Material.COOKED_BEEF)); + add(new ItemStack(Material.COOKED_CHICKEN)); + add(new ItemStack(Material.COOKED_PORKCHOP)); + add(new ItemStack(Material.COOKED_COD)); + add(new ItemStack(Material.COOKED_MUTTON)); + add(new ItemStack(Material.COOKED_RABBIT)); + add(new ItemStack(Material.COOKED_SALMON)); + add(new ItemStack(Material.BEETROOT_SOUP)); + add(new ItemStack(Material.POTATO)); + add(new ItemStack(Material.BAKED_POTATO)); + add(new ItemStack(Material.CARROT)); + add(new ItemStack(Material.GOLDEN_CARROT)); + add(new ItemStack(Material.APPLE)); + add(new ItemStack(Material.GOLDEN_APPLE)); + add(new ItemStack(Material.ENCHANTED_GOLDEN_APPLE)); + add(new ItemStack(Material.BEEF)); + add(new ItemStack(Material.PORKCHOP)); + add(new ItemStack(Material.CHICKEN)); + add(new ItemStack(Material.COD)); + add(new ItemStack(Material.SALMON)); + add(new ItemStack(Material.MUTTON)); + add(new ItemStack(Material.RABBIT)); + add(new ItemStack(Material.MUSHROOM_STEW)); + add(new ItemStack(Material.BREAD)); + add(new ItemStack(Material.CAKE)); + add(new ItemStack(Material.COOKIE)); + }}; + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..a024527 --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,4 @@ +name: Crumb +version: '${version}' +main: io.github.simplex.crumb.Crumb +api-version: 1.18