fixed recipes, working tools

This commit is contained in:
Jottyfan 2024-06-15 14:45:22 +02:00
parent caef9eed83
commit 72b9c7dece
140 changed files with 2377 additions and 43 deletions

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<classpath> <classpath>
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
<classpathentry kind="src" output="bin/main" path="src/main/java"> <classpathentry kind="src" output="bin/main" path="src/main/java">
<attributes> <attributes>
<attribute name="gradle_scope" value="main"/> <attribute name="gradle_scope" value="main"/>
@ -12,7 +13,615 @@
<attribute name="gradle_used_by_scope" value="main,test"/> <attribute name="gradle_used_by_scope" value="main,test"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-21/"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/> <attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/24.1.0/7af6a669488450c4a07c2c3254e2151df42d7d04/annotations-24.1.0.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/24.1.0/d90a405211798b013b8ee3d54f70edc0913a28b0/annotations-24.1.0-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value=""/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm/9.6/aa205cf0a06dbd8e04ece91c0b37c3f5d567546a/asm-9.6.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm/9.6/d55087ece3c6a82ef0d6acb9d853886d7af9445d/asm-9.6-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-analysis/9.6/9ce6c7b174bd997fc2552dff47964546bd7a5ec3/asm-analysis-9.6.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-analysis/9.6/2a0c33a19c1b594fee4eb539e3cd51eb3dd80903/asm-analysis-9.6-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-commons/9.6/f1a9e5508eff490744144565c47326c8648be309/asm-commons-9.6.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-commons/9.6/446c8ca5fffad2e50b5a7ab4c25fc901c7f38ab9/asm-commons-9.6-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-tree/9.6/c0cdda9d211e965d2a4448aa3fd86110f2f8c2de/asm-tree-9.6.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-tree/9.6/ea2ff719db7976655f5c95469a98eac7671a119/asm-tree-9.6-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-util/9.6/f77caf84eb93786a749b2baa40865b9613e3eaee/asm-util-9.6.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-util/9.6/7113c3476982c7b982f16b45d24dd86e2ffca46a/asm-util-9.6-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/net.fabricmc/sponge-mixin/0.13.3+mixin.0.8.5/9527e6b0d2449408958fd1302594dc65ec5ade9c/sponge-mixin-0.13.3+mixin.0.8.5.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/net.fabricmc/sponge-mixin/0.13.3+mixin.0.8.5/728bb250347f7d817d0fb733180e8c7ea485b0a/sponge-mixin-0.13.3+mixin.0.8.5-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/io.github.llamalad7/mixinextras-fabric/0.3.5/3b577be20ea942610b3045e4f0cd909fa415a9d3/mixinextras-fabric-0.3.5.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/io.github.llamalad7/mixinextras-fabric/0.3.5/86a7826b6f561dab8643e92a6b62a513da9fba60/mixinextras-fabric-0.3.5-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/net.fabricmc/yarn/1.21+build.2/2ad14aed781c4a73ed4dbb421966d408a0a06686/yarn-1.21+build.2-constants.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/net.fabricmc/yarn/1.21+build.2/ce51544996d8a3cd4f6a1a4ba3a54dc142c92ea7/yarn-1.21+build.2-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value=""/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/com.github.oshi/oshi-core/6.4.10/b1d8ab82d11d92fd639b56d639f8f46f739dd5fa/oshi-core-6.4.10.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/com.github.oshi/oshi-core/6.4.10/4ed9e291040b618d12880f00fe77f13777dfa7cb/oshi-core-6.4.10-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.10.1/b3add478d4382b78ea20b1671390a858002feb6c/gson-2.10.1.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.10.1/982a90132e942f302e6fe79d6e78c4bc2e998569/gson-2.10.1-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/com.google.guava/failureaccess/1.0.1/1dcf1de382a0bf95a3d8b0849546c88bac1292c9/failureaccess-1.0.1.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/com.google.guava/failureaccess/1.0.1/1d064e61aad6c51cc77f9b59dc2cccc78e792f5a/failureaccess-1.0.1-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/32.1.2-jre/5e64ec7e056456bef3a4bc4c6fdaef71e8ab6318/guava-32.1.2-jre.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/32.1.2-jre/e1911d4544f426600132fbd450a7ccab8a3ce8dc/guava-32.1.2-jre-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/com.ibm.icu/icu4j/73.2/61ad4ef7f9131fcf6d25c34b817f90d6da06c9e9/icu4j-73.2.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/com.ibm.icu/icu4j/73.2/824467d920134624effab17374434d00fe7b3b40/icu4j-73.2-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/com.mojang/authlib/6.0.54/de8bc95660e1b2fe8793fd427a7a10dcec5b3ea7/authlib-6.0.54.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/com.mojang/authlib/6.0.54/1e11f447b3029c31afa41291f02d0da3701af827/authlib-6.0.54-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/com.mojang/blocklist/1.0.10/5c685c5ffa94c4cd39496c7184c1d122e515ecef/blocklist-1.0.10.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/com.mojang/blocklist/1.0.10/ef44852fa1707a833bfa8e8518659ab18f368d25/blocklist-1.0.10-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/com.mojang/brigadier/1.2.9/73e324f2ee541493a5179abf367237faa782ed21/brigadier-1.2.9.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/com.mojang/brigadier/1.2.9/b81375eb6ee3fccbda1841a5620a61798655beb/brigadier-1.2.9-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/com.mojang/datafixerupper/8.0.16/67d4de6d7f95d89bcf5862995fb854ebaec02a34/datafixerupper-8.0.16.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/com.mojang/datafixerupper/8.0.16/1482506562a012761c60594c23f6bcbeb0d354a3/datafixerupper-8.0.16-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/com.mojang/logging/1.2.7/24cb95ffb0e3433fd6e844c04e68009e504ca1c0/logging-1.2.7.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/com.mojang/logging/1.2.7/3913c421c4f6b914a15fa267e6dbab44c989690f/logging-1.2.7-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/com.mojang/patchy/2.2.10/da05971b07cbb379d002cf7eaec6a2048211fefc/patchy-2.2.10.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/com.mojang/text2speech/1.17.9/3cad216e3a7f0c19b4b394388bc9ffc446f13b14/text2speech-1.17.9.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/com.mojang/text2speech/1.17.9/1898fbfd00a552b7f9a3cc0438623845a91e74ed/text2speech-1.17.9-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/commons-codec/commons-codec/1.16.0/4e3eb3d79888d76b54e28b350915b5dc3919c9de/commons-codec-1.16.0.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/commons-codec/commons-codec/1.16.0/57c67a979689051a455570196d0f48134db9909e/commons-codec-1.16.0-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/commons-io/commons-io/2.15.1/f11560da189ab563a5c8e351941415430e9304ea/commons-io-2.15.1.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/commons-io/commons-io/2.15.1/f23737700ceaddc75169d994c7d9c9a2e5dddf39/commons-io-2.15.1-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/commons-logging/commons-logging/1.2/4bfc12adfe4842bf07b657f0369c4cb522955686/commons-logging-1.2.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/commons-logging/commons-logging/1.2/ecf26c7507d67782a3bbd148d170b31dfad001aa/commons-logging-1.2-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/io.netty/netty-buffer/4.1.97.Final/f8f3d8644afa5e6e1a40a3a6aeb9d9aa970ecb4f/netty-buffer-4.1.97.Final.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/io.netty/netty-buffer/4.1.97.Final/5d2c3a0c097b4fd07fe87c35ad6ad125a683cf05/netty-buffer-4.1.97.Final-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/io.netty/netty-codec/4.1.97.Final/384ba4d75670befbedb45c4d3b497a93639c206d/netty-codec-4.1.97.Final.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/io.netty/netty-codec/4.1.97.Final/ec4abd65dbbb57b39e4e7ca40d8883e052038862/netty-codec-4.1.97.Final-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/io.netty/netty-common/4.1.97.Final/7cceacaf11df8dc63f23d0fb58e9d4640fc88404/netty-common-4.1.97.Final.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/io.netty/netty-common/4.1.97.Final/6602f651718b461cd2d17244d95cc87d58c3169a/netty-common-4.1.97.Final-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/io.netty/netty-handler/4.1.97.Final/abb86c6906bf512bf2b797a41cd7d2e8d3cd7c36/netty-handler-4.1.97.Final.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/io.netty/netty-handler/4.1.97.Final/badecb27f6b39814c8932d2ba8d5c3ce2a8dffe/netty-handler-4.1.97.Final-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/io.netty/netty-resolver/4.1.97.Final/cec8348108dc76c47cf87c669d514be52c922144/netty-resolver-4.1.97.Final.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/io.netty/netty-resolver/4.1.97.Final/79dbdd5bddcb4f901c18337b367db354df56fca1/netty-resolver-4.1.97.Final-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/io.netty/netty-transport-classes-epoll/4.1.97.Final/795da37ded759e862457a82d9d92c4d39ce8ecee/netty-transport-classes-epoll-4.1.97.Final.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/io.netty/netty-transport-classes-epoll/4.1.97.Final/c4c9f444bc376a359b3159d45947ffc510d77d38/netty-transport-classes-epoll-4.1.97.Final-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/io.netty/netty-transport-native-epoll/4.1.97.Final/5514744c588190ffda076b35a9b8c9f24946a960/netty-transport-native-epoll-4.1.97.Final-linux-aarch_64.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/io.netty/netty-transport-native-epoll/4.1.97.Final/88dc2589ab3fdf0199ec0bd1b7c094ae9bab31fb/netty-transport-native-epoll-4.1.97.Final-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/io.netty/netty-transport-native-epoll/4.1.97.Final/54188f271e388e7f313aea995e82f58ce2cdb809/netty-transport-native-epoll-4.1.97.Final-linux-x86_64.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/io.netty/netty-transport-native-epoll/4.1.97.Final/88dc2589ab3fdf0199ec0bd1b7c094ae9bab31fb/netty-transport-native-epoll-4.1.97.Final-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/io.netty/netty-transport-native-unix-common/4.1.97.Final/d469d84265ab70095b01b40886cabdd433b6e664/netty-transport-native-unix-common-4.1.97.Final.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/io.netty/netty-transport-native-unix-common/4.1.97.Final/d9bcfe2c9bc55a77973fc4bb7e4d6c1a298ac9e9/netty-transport-native-unix-common-4.1.97.Final-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/io.netty/netty-transport/4.1.97.Final/f37380d23c9bb079bc702910833b2fd532c9abd0/netty-transport-4.1.97.Final.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/io.netty/netty-transport/4.1.97.Final/80452a42374b6c4e1a3596ce09f337b4ff4f4efb/netty-transport-4.1.97.Final-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/it.unimi.dsi/fastutil/8.5.12/c24946d46824bd528054bface3231d2ecb7e95e8/fastutil-8.5.12.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/it.unimi.dsi/fastutil/8.5.12/a57be04c180ac69159c5dc2e9902deebc25780bd/fastutil-8.5.12-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/net.java.dev.jna/jna-platform/5.14.0/28934d48aed814f11e4c584da55c49fa7032b31b/jna-platform-5.14.0.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/net.java.dev.jna/jna-platform/5.14.0/cefe3d258159eb44f4369ff5d8e12602a340bd15/jna-platform-5.14.0-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/net.java.dev.jna/jna/5.14.0/67bf3eaea4f0718cb376a181a629e5f88fa1c9dd/jna-5.14.0.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/net.java.dev.jna/jna/5.14.0/13bda98796cf4739f5d40cb825578cfaa8463c6e/jna-5.14.0-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/net.sf.jopt-simple/jopt-simple/5.0.4/4fdac2fbe92dfad86aa6e9301736f6b4342a3f5c/jopt-simple-5.0.4.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/net.sf.jopt-simple/jopt-simple/5.0.4/950831646d014c9162999019a3cb17d5fc01ac0d/jopt-simple-5.0.4-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-compress/1.26.0/659feffdd12280201c8aacb8f7be94f9a883c824/commons-compress-1.26.0.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-compress/1.26.0/35d0a3e49b7c2321c8445a375adc6df9d148c132/commons-compress-1.26.0-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-lang3/3.14.0/1ed471194b02f2c6cb734a0cd6f6f107c673afae/commons-lang3-3.14.0.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-lang3/3.14.0/9ef3e18356f4ac30b15bfa48c02a7f54b51af382/commons-lang3-3.14.0-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpclient/4.5.13/e5f6cae5ca7ecaac1ec2827a9e2d65ae2869cada/httpclient-4.5.13.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpclient/4.5.13/9654e91a61d7662c36be6710ef8e720c0e3f9807/httpclient-4.5.13-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpcore/4.4.16/51cf043c87253c9f58b539c9f7e44c8894223850/httpcore-4.4.16.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpcore/4.4.16/229e4c0eae80465381ae02adf61bca5558360777/httpcore-4.4.16-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-api/2.22.1/bea6fede6328fabafd7e68363161a7ea6605abd1/log4j-api-2.22.1.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-api/2.22.1/a56be5b0028ef8f3e2d6f3b057e8d19794fc5116/log4j-api-2.22.1-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-core/2.22.1/7183a25510a02ad00cc6a95d3b3d2a7d3c5a8dc4/log4j-core-2.22.1.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-core/2.22.1/594b6169e6bba2c964282fd657672f8893304f97/log4j-core-2.22.1-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-slf4j2-impl/2.22.1/d7e6693c2606cb7e7335047d7bb96dec52db5665/log4j-slf4j2-impl-2.22.1.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-slf4j2-impl/2.22.1/81724a054d0618d7a15cf217ede478c0d08e421/log4j-slf4j2-impl-2.22.1-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.jcraft/jorbis/0.0.17/8872d22b293e8f5d7d56ff92be966e6dc28ebdc6/jorbis-0.0.17.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.jcraft/jorbis/0.0.17/5446be5d62e4c6b347c8e6cd28dc00a936417ba2/jorbis-0.0.17-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.joml/joml/1.10.5/22566d58af70ad3d72308bab63b8339906deb649/joml-1.10.5.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.joml/joml/1.10.5/c1f2266a7d0386d7643879ed1b93f51d29126180/joml-1.10.5-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-freetype/3.3.3/a0db6c84a8becc8ca05f9dbfa985edc348a824c7/lwjgl-freetype-3.3.3.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-freetype/3.3.3/d9fba96328a80677edbab28a843f33b847cf1e57/lwjgl-freetype-3.3.3-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.3/efa1eb78c5ccd840e9f329717109b5e892d72f8e/lwjgl-glfw-3.3.3.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.3/fa2c760452674d3eaf336123539b0dd9a83041a4/lwjgl-glfw-3.3.3-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.3/b543467b7ff3c6920539a88ee602d34098628be5/lwjgl-jemalloc-3.3.3.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.3/6a4ea7a9095e1684a9c6adb2c49d28daae2b6e45/lwjgl-jemalloc-3.3.3-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.3/daada81ceb5fc0c291fbfdd4433cb8d9423577f2/lwjgl-openal-3.3.3.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.3/60a4ce24d71b3376ce53b50cfe3eaaf3277dd727/lwjgl-openal-3.3.3-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.3/2f6b0147078396a58979125a4c947664e98293a/lwjgl-opengl-3.3.3.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.3/3353d0b2cac91b84088b01711d33cc403893450b/lwjgl-opengl-3.3.3-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-stb/3.3.3/25dd6161988d7e65f71d5065c99902402ee32746/lwjgl-stb-3.3.3.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-stb/3.3.3/37c2b604ec4a5ee356dd734dc8167a193e8874ed/lwjgl-stb-3.3.3-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-tinyfd/3.3.3/82d755ca94b102e9ca77283b9e2dc46d1b15fbe5/lwjgl-tinyfd-3.3.3.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-tinyfd/3.3.3/dcda55223f2f940654d222bf4371baa969c60bb9/lwjgl-tinyfd-3.3.3-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.3/29589b5f87ed335a6c7e7ee6a5775f81f97ecb84/lwjgl-3.3.3.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.3/e5949c7bbf4f839afe6d1a631e9b75f63c559e0/lwjgl-3.3.3-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lz4/lz4-java/1.8.0/4b986a99445e49ea5fbf5d149c4b63f6ed6c6780/lz4-java-1.8.0.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lz4/lz4-java/1.8.0/7609c362f37f0c0bd3743bc1976df2daa28ad19e/lz4-java-1.8.0-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/2.0.9/7cf2726fdcfbc8610f9a71fb3ed639871f315340/slf4j-api-2.0.9.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/2.0.9/97e46b94d70f47892145e09d685461245584d596/slf4j-api-2.0.9-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/minecraftMaven/net/minecraft/minecraft-merged-4eb0fe4bb6/1.21-net.fabricmc.yarn.1_21.1.21+build.2-v2/minecraft-merged-4eb0fe4bb6-1.21-net.fabricmc.yarn.1_21.1.21+build.2-v2.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/minecraftMaven/net/minecraft/minecraft-merged-4eb0fe4bb6/1.21-net.fabricmc.yarn.1_21.1.21+build.2-v2/minecraft-merged-4eb0fe4bb6-1.21-net.fabricmc.yarn.1_21.1.21+build.2-v2-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/net.fabricmc/fabric-loader/0.15.11/9c2be53d84ec5c4fb58bb5b8d9c8a629047c9ee9/fabric-loader-0.15.11.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/net.fabricmc/fabric-loader/0.15.11/ee8baabf67a4b0489227a2c2bf8618295ec1d401/fabric-loader-0.15.11-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-api/0.100.0+1.21/fabric-api-0.100.0+1.21.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-api/0.100.0+1.21/fabric-api-0.100.0+1.21-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-transfer-api-v1/5.1.12+b55973447c/fabric-transfer-api-v1-5.1.12+b55973447c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-transfer-api-v1/5.1.12+b55973447c/fabric-transfer-api-v1-5.1.12+b55973447c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-api-lookup-api-v1/1.6.65+b55973447c/fabric-api-lookup-api-v1-1.6.65+b55973447c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-api-lookup-api-v1/1.6.65+b55973447c/fabric-api-lookup-api-v1-1.6.65+b55973447c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-blockrenderlayer-v1/1.1.52+0af3f5a77c/fabric-blockrenderlayer-v1-1.1.52+0af3f5a77c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-blockrenderlayer-v1/1.1.52+0af3f5a77c/fabric-blockrenderlayer-v1-1.1.52+0af3f5a77c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-client-tags-api-v1/1.1.15+6573ed8c7c/fabric-client-tags-api-v1-1.1.15+6573ed8c7c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-client-tags-api-v1/1.1.15+6573ed8c7c/fabric-client-tags-api-v1-1.1.15+6573ed8c7c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-command-api-v1/1.2.48+f71b366f7c/fabric-command-api-v1-1.2.48+f71b366f7c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-command-api-v1/1.2.48+f71b366f7c/fabric-command-api-v1-1.2.48+f71b366f7c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-commands-v0/0.2.65+df3654b37c/fabric-commands-v0-0.2.65+df3654b37c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-commands-v0/0.2.65+df3654b37c/fabric-commands-v0-0.2.65+df3654b37c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-command-api-v2/2.2.27+6a6dfa197c/fabric-command-api-v2-2.2.27+6a6dfa197c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-command-api-v2/2.2.27+6a6dfa197c/fabric-command-api-v2-2.2.27+6a6dfa197c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-content-registries-v0/8.0.11+b55973447c/fabric-content-registries-v0-8.0.11+b55973447c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-content-registries-v0/8.0.11+b55973447c/fabric-content-registries-v0-8.0.11+b55973447c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-data-generation-api-v1/20.2.5+16c4ae257c/fabric-data-generation-api-v1-20.2.5+16c4ae257c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-data-generation-api-v1/20.2.5+16c4ae257c/fabric-data-generation-api-v1-20.2.5+16c4ae257c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-convention-tags-v1/2.0.11+7f945d5b7c/fabric-convention-tags-v1-2.0.11+7f945d5b7c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-convention-tags-v1/2.0.11+7f945d5b7c/fabric-convention-tags-v1-2.0.11+7f945d5b7c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-convention-tags-v2/2.2.0+bf2c39087c/fabric-convention-tags-v2-2.2.0+bf2c39087c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-convention-tags-v2/2.2.0+bf2c39087c/fabric-convention-tags-v2-2.2.0+bf2c39087c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-data-attachment-api-v1/1.1.22+6a6dfa197c/fabric-data-attachment-api-v1-1.1.22+6a6dfa197c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-data-attachment-api-v1/1.1.22+6a6dfa197c/fabric-data-attachment-api-v1-1.1.22+6a6dfa197c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-entity-events-v1/1.6.12+6fc22b997c/fabric-entity-events-v1-1.6.12+6fc22b997c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-entity-events-v1/1.6.12+6fc22b997c/fabric-entity-events-v1-1.6.12+6fc22b997c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-events-interaction-v0/0.7.10+e633f8837c/fabric-events-interaction-v0-0.7.10+e633f8837c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-events-interaction-v0/0.7.10+e633f8837c/fabric-events-interaction-v0-0.7.10+e633f8837c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-gametest-api-v1/2.0.0+6fc22b997c/fabric-gametest-api-v1-2.0.0+6fc22b997c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-gametest-api-v1/2.0.0+6fc22b997c/fabric-gametest-api-v1-2.0.0+6fc22b997c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-item-api-v1/11.0.0+afdfc9217c/fabric-item-api-v1-11.0.0+afdfc9217c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-item-api-v1/11.0.0+afdfc9217c/fabric-item-api-v1-11.0.0+afdfc9217c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-item-group-api-v1/4.1.0+00ab0a637c/fabric-item-group-api-v1-4.1.0+00ab0a637c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-item-group-api-v1/4.1.0+00ab0a637c/fabric-item-group-api-v1-4.1.0+00ab0a637c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-lifecycle-events-v1/2.3.9+98a7dbbb7c/fabric-lifecycle-events-v1-2.3.9+98a7dbbb7c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-lifecycle-events-v1/2.3.9+98a7dbbb7c/fabric-lifecycle-events-v1-2.3.9+98a7dbbb7c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-loot-api-v2/3.0.9+6573ed8c7c/fabric-loot-api-v2-3.0.9+6573ed8c7c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-loot-api-v2/3.0.9+6573ed8c7c/fabric-loot-api-v2-3.0.9+6573ed8c7c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-message-api-v1/6.0.13+6573ed8c7c/fabric-message-api-v1-6.0.13+6573ed8c7c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-message-api-v1/6.0.13+6573ed8c7c/fabric-message-api-v1-6.0.13+6573ed8c7c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-model-loading-api-v1/2.0.0+fe474d6b7c/fabric-model-loading-api-v1-2.0.0+fe474d6b7c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-model-loading-api-v1/2.0.0+fe474d6b7c/fabric-model-loading-api-v1-2.0.0+fe474d6b7c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-recipe-api-v1/5.0.8+6573ed8c7c/fabric-recipe-api-v1-5.0.8+6573ed8c7c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-recipe-api-v1/5.0.8+6573ed8c7c/fabric-recipe-api-v1-5.0.8+6573ed8c7c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-screen-handler-api-v1/1.3.78+b55973447c/fabric-screen-handler-api-v1-1.3.78+b55973447c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-screen-handler-api-v1/1.3.78+b55973447c/fabric-screen-handler-api-v1-1.3.78+b55973447c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-registry-sync-v0/5.0.21+b9828ba37c/fabric-registry-sync-v0-5.0.21+b9828ba37c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-registry-sync-v0/5.0.21+b9828ba37c/fabric-registry-sync-v0-5.0.21+b9828ba37c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-networking-api-v1/4.1.0+686dcdce7c/fabric-networking-api-v1-4.1.0+686dcdce7c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-networking-api-v1/4.1.0+686dcdce7c/fabric-networking-api-v1-4.1.0+686dcdce7c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-object-builder-api-v1/15.1.10+d13210767c/fabric-object-builder-api-v1-15.1.10+d13210767c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-object-builder-api-v1/15.1.10+d13210767c/fabric-object-builder-api-v1-15.1.10+d13210767c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-particles-v1/4.0.2+6573ed8c7c/fabric-particles-v1-4.0.2+6573ed8c7c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-particles-v1/4.0.2+6573ed8c7c/fabric-particles-v1-4.0.2+6573ed8c7c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-renderer-indigo/1.6.3+cc9f121a7c/fabric-renderer-indigo-1.6.3+cc9f121a7c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-renderer-indigo/1.6.3+cc9f121a7c/fabric-renderer-indigo-1.6.3+cc9f121a7c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-renderer-api-v1/3.2.16+fe474d6b7c/fabric-renderer-api-v1-3.2.16+fe474d6b7c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-renderer-api-v1/3.2.16+fe474d6b7c/fabric-renderer-api-v1-3.2.16+fe474d6b7c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-rendering-fluids-v1/3.1.6+b55973447c/fabric-rendering-fluids-v1-3.1.6+b55973447c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-rendering-fluids-v1/3.1.6+b55973447c/fabric-rendering-fluids-v1-3.1.6+b55973447c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-renderer-registries-v1/3.2.66+df3654b37c/fabric-renderer-registries-v1-3.2.66+df3654b37c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-renderer-registries-v1/3.2.66+df3654b37c/fabric-renderer-registries-v1-3.2.66+df3654b37c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-rendering-v0/1.1.69+df3654b37c/fabric-rendering-v0-1.1.69+df3654b37c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-rendering-v0/1.1.69+df3654b37c/fabric-rendering-v0-1.1.69+df3654b37c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-rendering-v1/5.0.3+d13210767c/fabric-rendering-v1-5.0.3+d13210767c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-rendering-v1/5.0.3+d13210767c/fabric-rendering-v1-5.0.3+d13210767c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-screen-api-v1/2.0.24+b55973447c/fabric-screen-api-v1-2.0.24+b55973447c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-screen-api-v1/2.0.24+b55973447c/fabric-screen-api-v1-2.0.24+b55973447c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-api-base/0.4.42+6573ed8c7c/fabric-api-base-0.4.42+6573ed8c7c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-api-base/0.4.42+6573ed8c7c/fabric-api-base-0.4.42+6573ed8c7c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-biome-api-v1/13.0.28+6fc22b997c/fabric-biome-api-v1-13.0.28+6fc22b997c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-biome-api-v1/13.0.28+6fc22b997c/fabric-biome-api-v1-13.0.28+6fc22b997c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-block-api-v1/1.0.22+0af3f5a77c/fabric-block-api-v1-1.0.22+0af3f5a77c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-block-api-v1/1.0.22+0af3f5a77c/fabric-block-api-v1-1.0.22+0af3f5a77c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-rendering-data-attachment-v1/0.3.48+73761d2e7c/fabric-rendering-data-attachment-v1-0.3.48+73761d2e7c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-rendering-data-attachment-v1/0.3.48+73761d2e7c/fabric-rendering-data-attachment-v1-0.3.48+73761d2e7c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-block-view-api-v2/1.0.10+6573ed8c7c/fabric-block-view-api-v2-1.0.10+6573ed8c7c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-block-view-api-v2/1.0.10+6573ed8c7c/fabric-block-view-api-v2-1.0.10+6573ed8c7c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-crash-report-info-v1/0.2.29+0af3f5a77c/fabric-crash-report-info-v1-0.2.29+0af3f5a77c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-crash-report-info-v1/0.2.29+0af3f5a77c/fabric-crash-report-info-v1-0.2.29+0af3f5a77c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-dimensions-v1/4.0.0+6fc22b997c/fabric-dimensions-v1-4.0.0+6fc22b997c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-dimensions-v1/4.0.0+6fc22b997c/fabric-dimensions-v1-4.0.0+6fc22b997c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-game-rule-api-v1/1.0.52+6573ed8c7c/fabric-game-rule-api-v1-1.0.52+6573ed8c7c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-game-rule-api-v1/1.0.52+6573ed8c7c/fabric-game-rule-api-v1-1.0.52+6573ed8c7c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-keybindings-v0/0.2.45+df3654b37c/fabric-keybindings-v0-0.2.45+df3654b37c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-keybindings-v0/0.2.45+df3654b37c/fabric-keybindings-v0-0.2.45+df3654b37c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-key-binding-api-v1/1.0.47+0af3f5a77c/fabric-key-binding-api-v1-1.0.47+0af3f5a77c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-key-binding-api-v1/1.0.47+0af3f5a77c/fabric-key-binding-api-v1-1.0.47+0af3f5a77c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-resource-conditions-api-v1/4.2.1+6573ed8c7c/fabric-resource-conditions-api-v1-4.2.1+6573ed8c7c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-resource-conditions-api-v1/4.2.1+6573ed8c7c/fabric-resource-conditions-api-v1-4.2.1+6573ed8c7c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-resource-loader-v0/1.1.3+b55973447c/fabric-resource-loader-v0-1.1.3+b55973447c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-resource-loader-v0/1.1.3+b55973447c/fabric-resource-loader-v0-1.1.3+b55973447c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-sound-api-v1/1.0.23+6573ed8c7c/fabric-sound-api-v1-1.0.23+6573ed8c7c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-sound-api-v1/1.0.23+6573ed8c7c/fabric-sound-api-v1-1.0.23+6573ed8c7c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-transitive-access-wideners-v1/6.0.12+6573ed8c7c/fabric-transitive-access-wideners-v1-6.0.12+6573ed8c7c.jar" sourcepath="/home/jotty/Entwicklung/git/quickiemod/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_21_1_21_build_2_v2/net/fabricmc/fabric-api/fabric-transitive-access-wideners-v1/6.0.12+6573ed8c7c/fabric-transitive-access-wideners-v1-6.0.12+6573ed8c7c-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/net.fabricmc/dev-launch-injector/0.2.1+build.8/da8bef7e6e2f952da707f282bdb46882a0fce5e3/dev-launch-injector-0.2.1+build.8.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/net.minecrell/terminalconsoleappender/1.3.0/b562e9bb61235c9520e26282cdee71f8f802d1fc/terminalconsoleappender-1.3.0.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/net.minecrell/terminalconsoleappender/1.3.0/2fd4d796402a408af0d26c848e02ec8f91dceae7/terminalconsoleappender-1.3.0-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-freetype/3.3.3/149070a5480900347071b7074779531f25a6e3dc/lwjgl-freetype-3.3.3-natives-linux.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-freetype/3.3.3/d9fba96328a80677edbab28a843f33b847cf1e57/lwjgl-freetype-3.3.3-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.3/a03684c5e4b1b1dbbe0d29dbbdc27b985b6840f2/lwjgl-glfw-3.3.3-natives-linux.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.3/fa2c760452674d3eaf336123539b0dd9a83041a4/lwjgl-glfw-3.3.3-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.3/4f86728bf449b1dd61251c4e0ac01df1389cb51e/lwjgl-jemalloc-3.3.3-natives-linux.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.3/6a4ea7a9095e1684a9c6adb2c49d28daae2b6e45/lwjgl-jemalloc-3.3.3-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.3/3037360cc4595079bea240af250b6d1a527e0905/lwjgl-openal-3.3.3-natives-linux.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.3/60a4ce24d71b3376ce53b50cfe3eaaf3277dd727/lwjgl-openal-3.3.3-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.3/62c70a4b00ca5391882b0f4b787c1588d24f1c86/lwjgl-opengl-3.3.3-natives-linux.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.3/3353d0b2cac91b84088b01711d33cc403893450b/lwjgl-opengl-3.3.3-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-stb/3.3.3/fd1271ccd9d85eff2fa31f3fd543e02ccfaf5041/lwjgl-stb-3.3.3-natives-linux.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-stb/3.3.3/37c2b604ec4a5ee356dd734dc8167a193e8874ed/lwjgl-stb-3.3.3-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-tinyfd/3.3.3/d8d58daa0c3e5fd906fee96f5fddbcbc07cc308b/lwjgl-tinyfd-3.3.3-natives-linux.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-tinyfd/3.3.3/dcda55223f2f940654d222bf4371baa969c60bb9/lwjgl-tinyfd-3.3.3-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.3/1713758e3660ba66e1e954396fd18126038b33c0/lwjgl-3.3.3-natives-linux.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.3/e5949c7bbf4f839afe6d1a631e9b75f63c559e0/lwjgl-3.3.3-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.jline/jline-reader/3.20.0/8f15415b022a25b473e8e16c28ae913186ffb9c4/jline-reader-3.20.0.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.jline/jline-reader/3.20.0/94a832964241f634f3b4a872e55241678227f28b/jline-reader-3.20.0-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/modules-2/files-2.1/org.jline/jline-terminal/3.20.0/d0ddcc708ddf527a3454c941b7b9225cc83a15ff/jline-terminal-3.20.0.jar" sourcepath="/home/jotty/.gradle/caches/modules-2/files-2.1/org.jline/jline-terminal/3.20.0/2ca86e8c3a4ba5d6a3cb629afd9180c58076609/jline-terminal-3.20.0-sources.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/jotty/.gradle/caches/fabric-loom/1.21/net.fabricmc.yarn.1_21.1.21+build.2-v2/mappings.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="bin/default"/> <classpathentry kind="output" path="bin/default"/>
</classpath> </classpath>

View File

@ -2,22 +2,21 @@
<projectDescription> <projectDescription>
<name>quickiemod</name> <name>quickiemod</name>
<comment></comment> <comment></comment>
<projects> <projects/>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures> <natures>
<nature>org.eclipse.jdt.core.javanature</nature> <nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.buildship.core.gradleprojectnature</nature> <nature>org.eclipse.buildship.core.gradleprojectnature</nature>
</natures> </natures>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments/>
</buildCommand>
<buildCommand>
<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
<arguments/>
</buildCommand>
</buildSpec>
<linkedResources/>
<filteredResources/>
</projectDescription> </projectDescription>

View File

@ -1,5 +1,5 @@
# #
#Sat Jun 01 10:37:20 CEST 2024 #Sat Jun 15 13:57:14 CEST 2024
eclipse.preferences.version=1 eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=21 org.eclipse.jdt.core.compiler.codegen.targetPlatform=21

View File

@ -9,7 +9,7 @@ yarn_mappings=1.21+build.2
loader_version=0.15.11 loader_version=0.15.11
# Mod Properties # Mod Properties
mod_version=1.21.0.0 mod_version=1.21.0.1
maven_group=de.jottyfan.quickiemod maven_group=de.jottyfan.quickiemod
archives_base_name=quickiemod archives_base_name=quickiemod

View File

@ -21,6 +21,7 @@ public class QuickieMod implements ModInitializer {
LOGGER.info("loading {}", MODID); LOGGER.info("loading {}", MODID);
RegistryManager.registerBlockEntityTypes(); RegistryManager.registerBlockEntityTypes();
RegistryManager.registerItems(); RegistryManager.registerItems();
RegistryManager.registerEvents();
RegistryManager.registerBlocks(); RegistryManager.registerBlocks();
RegistryManager.registerFeatures(); RegistryManager.registerFeatures();
RegistryManager.registerItemGroup(); RegistryManager.registerItemGroup();

View File

@ -0,0 +1,84 @@
package de.jottyfan.quickiemod.api;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.function.BiFunction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class Neighborhood {
/**
* find the same blocks that is next to the current position pos
*
* @param world the world to look for the blocks
* @param pos the starting position
* @param seekLimit the limit of seek operations
* @param checkLambda check functionality
* @return a set of found block positions
*/
public static final Set<BlockPos> findEqualBlock(World world, BlockPos pos, int seekLimit,
BiFunction<World, BlockPos, Boolean> checkLambda) {
Set<NeighborhoodBean> found = new HashSet<>();
found.add(new NeighborhoodBean(pos, true));
while (pos != null && found.size() < seekLimit) {
findNewNeihgbor(world, pos.east(), found, checkLambda);
findNewNeihgbor(world, pos.south(), found, checkLambda);
findNewNeihgbor(world, pos.west(), found, checkLambda);
findNewNeihgbor(world, pos.north(), found, checkLambda);
pos = findNextUncheckedField(found);
}
Set<BlockPos> finals = new HashSet<>();
for (NeighborhoodBean bean : found) {
finals.add(bean.getPos());
}
return finals;
}
private static final BlockPos findNextUncheckedField(Set<NeighborhoodBean> found) {
Iterator<NeighborhoodBean> i = found.iterator();
while (i.hasNext()) {
NeighborhoodBean bean = i.next();
if (!bean.isChecked()) {
bean.setChecked(true);
return bean.getPos();
}
}
return null;
}
/**
* find new neighbor at pos
*
* @param world the world
* @param pos the position
* @param found the set with all already found positions
* @return true or false
*/
private static final boolean findNewNeihgbor(World world, BlockPos pos, Set<NeighborhoodBean> found,
BiFunction<World, BlockPos, Boolean> checkLambda) {
NeighborhoodBean bean = new NeighborhoodBean(pos);
if (found.contains(bean) || found.contains(bean.over()) || found.contains(bean.below())) {
return false;
} else if (checkLambda.apply(world, pos).booleanValue()) {
found.add(bean);
return true;
} else if (checkLambda.apply(world, pos.up()).booleanValue()) {
found.add(new NeighborhoodBean(pos.up()));
return true;
} else if (checkLambda.apply(world, pos.down()).booleanValue()) {
found.add(new NeighborhoodBean(pos.down()));
return true;
}
return false;
}
}

View File

@ -0,0 +1,77 @@
package de.jottyfan.quickiemod.api;
import java.util.Objects;
import net.minecraft.util.math.BlockPos;
/**
*
* @author jotty
*
*/
public class NeighborhoodBean {
private final BlockPos pos;
private boolean checked;
public NeighborhoodBean(BlockPos pos, boolean checked) {
super();
this.pos = pos;
this.checked = checked;
}
public NeighborhoodBean(BlockPos pos) {
super();
this.pos = pos;
this.checked = false;
}
public NeighborhoodBean over() {
return new NeighborhoodBean(pos.up(), checked);
}
public NeighborhoodBean below() {
return new NeighborhoodBean(pos.down(), checked);
}
@Override
public int hashCode() {
return Objects.hash(pos);
}
@Override
public boolean equals(Object obj) {
Boolean result = null;
if (this == obj) {
result = true;
} else if (obj == null) {
result = false;
} else if (getClass() != obj.getClass()) {
result = false;
} else {
NeighborhoodBean other = (NeighborhoodBean) obj;
result = Objects.equals(pos, other.pos);
}
return result;
}
/**
* @return the checked
*/
public boolean isChecked() {
return checked;
}
/**
* @param checked the checked to set
*/
public void setChecked(boolean checked) {
this.checked = checked;
}
/**
* @return the pos
*/
public BlockPos getPos() {
return pos;
}
}

View File

@ -5,11 +5,11 @@ import java.util.List;
import de.jottyfan.quickiemod.blocks.help.IntProviderHelper; import de.jottyfan.quickiemod.blocks.help.IntProviderHelper;
import de.jottyfan.quickiemod.items.QuickieItems; import de.jottyfan.quickiemod.items.QuickieItems;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.ExperienceDroppingBlock; import net.minecraft.block.ExperienceDroppingBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder; import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.sound.BlockSoundGroup;
/** /**
@ -20,7 +20,7 @@ import net.minecraft.loot.context.LootContextParameterSet.Builder;
public class BlockOreDeepslateSulphor extends ExperienceDroppingBlock { public class BlockOreDeepslateSulphor extends ExperienceDroppingBlock {
public BlockOreDeepslateSulphor() { public BlockOreDeepslateSulphor() {
super(IntProviderHelper.of(0, 2), AbstractBlock.Settings.create().hardness(1.9f).requiresTool()); super(IntProviderHelper.of(0, 2), Settings.create().strength(2.5f).hardness(1.9f).sounds(BlockSoundGroup.SOUL_SAND).requiresTool());
} }
@Override @Override

View File

@ -5,11 +5,11 @@ import java.util.List;
import de.jottyfan.quickiemod.blocks.help.IntProviderHelper; import de.jottyfan.quickiemod.blocks.help.IntProviderHelper;
import de.jottyfan.quickiemod.items.QuickieItems; import de.jottyfan.quickiemod.items.QuickieItems;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.ExperienceDroppingBlock; import net.minecraft.block.ExperienceDroppingBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder; import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.sound.BlockSoundGroup;
/** /**
* *
@ -19,7 +19,7 @@ import net.minecraft.loot.context.LootContextParameterSet.Builder;
public class BlockOreNetherSulphor extends ExperienceDroppingBlock { public class BlockOreNetherSulphor extends ExperienceDroppingBlock {
public BlockOreNetherSulphor() { public BlockOreNetherSulphor() {
super(IntProviderHelper.of(0, 2), AbstractBlock.Settings.create().hardness(2.1f).requiresTool()); super(IntProviderHelper.of(0, 2), Settings.create().strength(2.5f).hardness(2.1f).sounds(BlockSoundGroup.SOUL_SAND).requiresTool());
} }
@Override @Override

View File

@ -5,11 +5,11 @@ import java.util.List;
import de.jottyfan.quickiemod.blocks.help.IntProviderHelper; import de.jottyfan.quickiemod.blocks.help.IntProviderHelper;
import de.jottyfan.quickiemod.items.QuickieItems; import de.jottyfan.quickiemod.items.QuickieItems;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.ExperienceDroppingBlock; import net.minecraft.block.ExperienceDroppingBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder; import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.util.math.random.Random; import net.minecraft.util.math.random.Random;
/** /**
@ -20,7 +20,7 @@ import net.minecraft.util.math.random.Random;
public class BlockOreSalpeter extends ExperienceDroppingBlock { public class BlockOreSalpeter extends ExperienceDroppingBlock {
public BlockOreSalpeter() { public BlockOreSalpeter() {
super(IntProviderHelper.of(0, 2), AbstractBlock.Settings.create().hardness(3.1f).requiresTool()); super(IntProviderHelper.of(0, 2), Settings.create().strength(2.5f).hardness(3.1f).sounds(BlockSoundGroup.SOUL_SAND).requiresTool());
} }
@Override @Override

View File

@ -5,12 +5,12 @@ import java.util.List;
import de.jottyfan.quickiemod.blocks.help.IntProviderHelper; import de.jottyfan.quickiemod.blocks.help.IntProviderHelper;
import de.jottyfan.quickiemod.items.QuickieItems; import de.jottyfan.quickiemod.items.QuickieItems;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.block.ExperienceDroppingBlock; import net.minecraft.block.ExperienceDroppingBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder; import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.util.math.random.Random; import net.minecraft.util.math.random.Random;
/** /**
@ -21,7 +21,7 @@ import net.minecraft.util.math.random.Random;
public class BlockOreSandSalpeter extends ExperienceDroppingBlock { public class BlockOreSandSalpeter extends ExperienceDroppingBlock {
public BlockOreSandSalpeter() { public BlockOreSandSalpeter() {
super(IntProviderHelper.of(0, 2), AbstractBlock.Settings.create().hardness(2.9f).requiresTool()); super(IntProviderHelper.of(0, 2), Settings.create().strength(2.5f).hardness(2.9f).sounds(BlockSoundGroup.SOUL_SAND).requiresTool());
} }
@Override @Override

View File

@ -5,11 +5,11 @@ import java.util.List;
import de.jottyfan.quickiemod.blocks.help.IntProviderHelper; import de.jottyfan.quickiemod.blocks.help.IntProviderHelper;
import de.jottyfan.quickiemod.items.QuickieItems; import de.jottyfan.quickiemod.items.QuickieItems;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.ExperienceDroppingBlock; import net.minecraft.block.ExperienceDroppingBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder; import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.sound.BlockSoundGroup;
/** /**
@ -20,7 +20,7 @@ import net.minecraft.loot.context.LootContextParameterSet.Builder;
public class BlockOreSulphor extends ExperienceDroppingBlock { public class BlockOreSulphor extends ExperienceDroppingBlock {
public BlockOreSulphor() { public BlockOreSulphor() {
super(IntProviderHelper.of(0, 2), AbstractBlock.Settings.create().hardness(1.9f).requiresTool()); super(IntProviderHelper.of(0, 2), Settings.create().strength(2.5f).hardness(1.9f).sounds(BlockSoundGroup.SOUL_SAND).requiresTool());
} }
@Override @Override

View File

@ -5,11 +5,11 @@ import java.util.List;
import de.jottyfan.quickiemod.blocks.help.IntProviderHelper; import de.jottyfan.quickiemod.blocks.help.IntProviderHelper;
import de.jottyfan.quickiemod.items.QuickieItems; import de.jottyfan.quickiemod.items.QuickieItems;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.ExperienceDroppingBlock; import net.minecraft.block.ExperienceDroppingBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder; import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.sound.BlockSoundGroup;
/** /**
* *
@ -19,7 +19,7 @@ import net.minecraft.loot.context.LootContextParameterSet.Builder;
public class BlockSalpeter extends ExperienceDroppingBlock { public class BlockSalpeter extends ExperienceDroppingBlock {
public BlockSalpeter() { public BlockSalpeter() {
super(IntProviderHelper.of(0, 2), AbstractBlock.Settings.create().hardness(0.5f)); super(IntProviderHelper.of(0, 2), Settings.create().strength(2.5f).hardness(0.5f).sounds(BlockSoundGroup.SOUL_SAND).requiresTool());
} }
@Override @Override

View File

@ -6,12 +6,12 @@ import java.util.List;
import com.mojang.serialization.MapCodec; import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.items.QuickieItems; import de.jottyfan.quickiemod.items.QuickieItems;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.block.FallingBlock; import net.minecraft.block.FallingBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder; import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.util.math.random.Random; import net.minecraft.util.math.random.Random;
/** /**
@ -22,7 +22,7 @@ import net.minecraft.util.math.random.Random;
public class BlockSandSalpeter extends FallingBlock { public class BlockSandSalpeter extends FallingBlock {
public BlockSandSalpeter() { public BlockSandSalpeter() {
super(AbstractBlock.Settings.create().hardness(3.1f).requiresTool()); super(Settings.create().strength(2.5f).hardness(3.1f).sounds(BlockSoundGroup.SOUL_SAND).requiresTool());
} }
@Override @Override

View File

@ -5,11 +5,11 @@ import java.util.List;
import de.jottyfan.quickiemod.blocks.help.IntProviderHelper; import de.jottyfan.quickiemod.blocks.help.IntProviderHelper;
import de.jottyfan.quickiemod.items.QuickieItems; import de.jottyfan.quickiemod.items.QuickieItems;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.ExperienceDroppingBlock; import net.minecraft.block.ExperienceDroppingBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder; import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.sound.BlockSoundGroup;
/** /**
* *
@ -19,7 +19,7 @@ import net.minecraft.loot.context.LootContextParameterSet.Builder;
public class BlockSulphor extends ExperienceDroppingBlock { public class BlockSulphor extends ExperienceDroppingBlock {
public BlockSulphor() { public BlockSulphor() {
super(IntProviderHelper.of(0, 2), AbstractBlock.Settings.create().hardness(0.5f)); super(IntProviderHelper.of(0, 2), Settings.create().strength(2.5f).hardness(0.5f).sounds(BlockSoundGroup.SOUL_SAND).requiresTool());
} }
@Override @Override

View File

@ -0,0 +1,29 @@
package de.jottyfan.quickiemod.event;
import net.fabricmc.fabric.api.event.Event;
import net.fabricmc.fabric.api.event.EventFactory;
import net.minecraft.block.BlockState;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.ActionResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public interface BreakBlockCallback {
Event<BreakBlockCallback> EVENT = EventFactory.createArrayBacked(BreakBlockCallback.class,
(listeners) -> (world, blockPos, blockState, playerEntity) -> {
for (BreakBlockCallback listener : listeners) {
ActionResult result = listener.injectBlockBreakCallback(world, blockPos, blockState, playerEntity);
if (result != ActionResult.PASS) {
return result;
}
}
return ActionResult.PASS;
});
ActionResult injectBlockBreakCallback(World world, BlockPos blockPos, BlockState blockState, PlayerEntity playerEntity);
}

View File

@ -0,0 +1,193 @@
package de.jottyfan.quickiemod.event;
import java.util.ArrayList;
import java.util.List;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import de.jottyfan.quickiemod.QuickieMod;
import de.jottyfan.quickiemod.items.HarvestRange;
import de.jottyfan.quickiemod.items.QuickieItems;
import de.jottyfan.quickiemod.items.ToolRangeable;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.entity.EquipmentSlot;
import net.minecraft.entity.ExperienceOrbEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class EventBlockBreak {
private static final Logger LOGGER = LogManager.getLogger(QuickieMod.MODID);
private enum BlockBreakDirection {
UPWARDS, ALL;
}
public void doBreakBlock(World world, BlockPos blockPos, BlockState blockState, PlayerEntity playerEntity) {
ItemStack mainHandItemStack = playerEntity.getEquippedStack(EquipmentSlot.MAINHAND);
if (mainHandItemStack != null) {
Item item = mainHandItemStack.getItem();
if (item instanceof ToolRangeable) {
ToolRangeable tool = (ToolRangeable) item;
Block block = blockState.getBlock();
int handled = handleRangeableTools(tool, mainHandItemStack, world, block, blockPos, playerEntity);
if (handled >= 255) {
// reward for using rangeable tool very successful
world.spawnEntity(
new ExperienceOrbEntity(world, blockPos.getX(), blockPos.getY(), blockPos.getZ(), handled / 255));
}
}
}
}
/**
* handle the rangeable tools break event
*
* @param tool the tool that has been used
* @param itemStack the item stack
* @param world the world
* @param block the block to break
* @param pos the position of the current block
* @param player the current player
* @return number of affected blocks
*/
private int handleRangeableTools(ToolRangeable tool, ItemStack itemStack, World world, Block currentBlock,
BlockPos pos, PlayerEntity player) {
List<Block> validBlocks = tool.getBlockList(currentBlock);
HarvestRange range = tool.getRange(itemStack);
LOGGER.info("current tool: {}", tool);
if (QuickieItems.SPEEDPOWDERAXE.getItem().equals(tool)) {
return breakBlockRecursive(new ArrayList<>(), world, validBlocks, pos, tool, range, BlockBreakDirection.UPWARDS,
player, true);
} else if (QuickieItems.SPEEDPOWDERPICKAXE.getItem().equals(tool)) {
return breakBlockRecursive(new ArrayList<>(), world, validBlocks, pos, tool, range, BlockBreakDirection.ALL,
player, false);
} else if (QuickieItems.SPEEDPOWDERSHOVEL.getItem().equals(tool)) {
return breakBlockRecursive(new ArrayList<>(), world, validBlocks, pos, tool, range, BlockBreakDirection.ALL,
player, false);
} else if (QuickieItems.SPEEDPOWDERHOE.getItem().equals(tool)) {
return breakBlockRecursive(new ArrayList<>(), world, validBlocks, pos, tool, range, BlockBreakDirection.ALL,
player, false);
} else if (QuickieItems.QUICKIEPOWDERAXE.getItem().equals(tool)) {
return breakBlockRecursive(new ArrayList<>(), world, validBlocks, pos, tool, range, BlockBreakDirection.UPWARDS,
player, true);
} else if (QuickieItems.QUICKIEPOWDERPICKAXE.getItem().equals(tool)) {
return breakBlockRecursive(new ArrayList<>(), world, validBlocks, pos, tool, range, BlockBreakDirection.ALL,
player, false);
} else if (QuickieItems.QUICKIEPOWDERSHOVEL.getItem().equals(tool)) {
return breakBlockRecursive(new ArrayList<>(), world, validBlocks, pos, tool, range, BlockBreakDirection.ALL,
player, false);
} else if (QuickieItems.QUICKIEPOWDERHOE.getItem().equals(tool)) {
return breakBlockRecursive(new ArrayList<>(), world, validBlocks, pos, tool, range, BlockBreakDirection.ALL,
player, false);
} else {
return 0;
}
}
/**
* break block recursively;
*
* @param visitedBlocks the positions of visited blocks
* @param world the world
* @param validBlocks the blocks to break
* @param tool the tool used
* @param range the range left over
* @param pos the position
* @param blockBreakDirection the direction for the recursive call
* @param player the player
* @return number of affected blocks
*/
private int breakBlockRecursive(List<String> visitedBlocks, World world, List<Block> validBlocks, BlockPos pos,
ToolRangeable tool, HarvestRange range, BlockBreakDirection blockBreakDirection, PlayerEntity player,
boolean breakLeaves) {
if (visitedBlocks.contains(pos.toString())) {
return 0;
} else if (validBlocks == null) {
return 0;
} else {
visitedBlocks.add(pos.toString());
}
Integer affected = 0;
BlockState blockState = world.getBlockState(pos);
if (tool.canBreakNeighbors(blockState)) {
Block currentBlock = blockState.getBlock();
if (validBlocks.contains(currentBlock)) {
Block.dropStacks(blockState, world, pos); // includes xorbs
affected += 1;
world.setBlockState(pos, Blocks.AIR.getDefaultState());
if (range == null || range.getxRange() > 1 || range.getyRange() > 1 || range.getzRange() > 1) {
HarvestRange nextRadius = range == null ? null : range.addXYZ(-1);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.north(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.north().east(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.north().west(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.south(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.south().east(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.south().west(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.east(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.west(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.up(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.up().north(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.up().north().east(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.up().north().west(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.up().east(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.up().west(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.up().south().east(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.up().south().west(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.up().south(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
if (BlockBreakDirection.ALL.equals(blockBreakDirection)) {
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.down(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.down().north(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.down().south(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.down().east(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.down().west(), tool, nextRadius,
blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.down().north().east(), tool,
nextRadius, blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.down().north().west(), tool,
nextRadius, blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.down().south().east(), tool,
nextRadius, blockBreakDirection, player, breakLeaves);
affected += breakBlockRecursive(visitedBlocks, world, validBlocks, pos.down().south().west(), tool,
nextRadius, blockBreakDirection, player, breakLeaves);
}
}
}
}
return affected;
}
}

View File

@ -6,6 +6,8 @@ import org.slf4j.LoggerFactory;
import de.jottyfan.quickiemod.QuickieMod; import de.jottyfan.quickiemod.QuickieMod;
import de.jottyfan.quickiemod.blockentity.BlockEntityTypes; import de.jottyfan.quickiemod.blockentity.BlockEntityTypes;
import de.jottyfan.quickiemod.blocks.QuickieBlocks; import de.jottyfan.quickiemod.blocks.QuickieBlocks;
import de.jottyfan.quickiemod.event.BreakBlockCallback;
import de.jottyfan.quickiemod.event.EventBlockBreak;
import de.jottyfan.quickiemod.items.QuickieItems; import de.jottyfan.quickiemod.items.QuickieItems;
import net.fabricmc.fabric.api.biome.v1.BiomeModifications; import net.fabricmc.fabric.api.biome.v1.BiomeModifications;
import net.fabricmc.fabric.api.biome.v1.BiomeSelectors; import net.fabricmc.fabric.api.biome.v1.BiomeSelectors;
@ -21,6 +23,7 @@ import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey; import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys; import net.minecraft.registry.RegistryKeys;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
/** /**
@ -47,7 +50,7 @@ public class RegistryManager {
} }
public static final void registerItems() { public static final void registerItems() {
LOGGER.debug("registering items"); LOGGER.info("registering items");
for (QuickieItems i : QuickieItems.values()) { for (QuickieItems i : QuickieItems.values()) {
Registry.register(Registries.ITEM, Identifier.of(QuickieMod.MODID, i.getName()), i.getItem()); Registry.register(Registries.ITEM, Identifier.of(QuickieMod.MODID, i.getName()), i.getItem());
} }
@ -60,7 +63,7 @@ public class RegistryManager {
} }
public static final void registerBlocks() { public static final void registerBlocks() {
LOGGER.debug("registering blocks"); LOGGER.info("registering blocks");
for (QuickieBlocks b : QuickieBlocks.values()) { for (QuickieBlocks b : QuickieBlocks.values()) {
Registry.register(Registries.BLOCK, Identifier.of(QuickieMod.MODID, b.getName()), b.getBlock()); Registry.register(Registries.BLOCK, Identifier.of(QuickieMod.MODID, b.getName()), b.getBlock());
Registry.register(Registries.ITEM, Identifier.of(QuickieMod.MODID, b.getName()), new BlockItem(b.getBlock(), new Settings())); Registry.register(Registries.ITEM, Identifier.of(QuickieMod.MODID, b.getName()), new BlockItem(b.getBlock(), new Settings()));
@ -77,6 +80,14 @@ public class RegistryManager {
FeaturesManager.netherOres()); FeaturesManager.netherOres());
} }
public static final void registerEvents() {
LOGGER.info("registering events");
BreakBlockCallback.EVENT.register((world, blockPos, blockState, playerEntity) -> {
new EventBlockBreak().doBreakBlock(world, blockPos, blockState, playerEntity);
return ActionResult.SUCCESS;
});
}
public static final void registerBlockEntityTypes() { public static final void registerBlockEntityTypes() {
new BlockEntityTypes(); new BlockEntityTypes();
} }

View File

@ -0,0 +1,101 @@
package de.jottyfan.quickiemod.items;
import java.io.Serializable;
/**
*
* @author jotty
*
*/
public class HarvestRange implements Serializable {
private static final long serialVersionUID = 1L;
private int xRange;
private int yRange;
private int zRange;
public HarvestRange(int xyzRange) {
super();
this.xRange = xyzRange;
this.yRange = xyzRange;
this.zRange = xyzRange;
}
public HarvestRange(int[] xyzRange) {
super();
this.xRange = xyzRange[0];
this.yRange = xyzRange[1];
this.zRange = xyzRange[2];
}
public HarvestRange(int xRange, int yRange, int zRange) {
super();
this.xRange = xRange;
this.yRange = yRange;
this.zRange = zRange;
}
/**
* add i to x, y and z and return the resulting class as a new one
*
* @param i
* the summand
* @return the new class
*/
public HarvestRange addXYZ(int i) {
return new HarvestRange(xRange + i, yRange + i, zRange + i);
}
/**
* get range as int array
*
* @return the int array
*/
public int[] getRangeAsArray() {
return new int[] {xRange, yRange, zRange};
}
/**
* @return the xRange
*/
public int getxRange() {
return xRange;
}
/**
* @param xRange
* the xRange to set
*/
public void setxRange(int xRange) {
this.xRange = xRange;
}
/**
* @return the yRange
*/
public int getyRange() {
return yRange;
}
/**
* @param yRange
* the yRange to set
*/
public void setyRange(int yRange) {
this.yRange = yRange;
}
/**
* @return the zRange
*/
public int getzRange() {
return zRange;
}
/**
* @param zRange
* the zRange to set
*/
public void setzRange(int zRange) {
this.zRange = zRange;
}
}

View File

@ -9,7 +9,22 @@ import net.minecraft.item.Item;
*/ */
public enum QuickieItems { public enum QuickieItems {
// @formatter:off // @formatter:off
SPEEDPOWDERSHEARS(new ItemSpeedpowdershears(), "speedpowdershears"), SPEEDPOWDER(new ItemSpeedpowder(), "speedpowder"),
QUICKIEPOWDER(new ItemQuickiepowder(), "quickiepowder"),
OXIDIZEDCOPPERPOWDER(new ItemOxidizedcopperpowder(), "oxidizedcopperpowder"),
SPEEDINGOT(new ItemSpeedingot(), "speedingot"),
QUICKIEINGOT(new ItemQuickieingot(), "quickieingot"),
SPEEDPOWDERAXE(new ToolSpeedpowderAxe(), "speedpowderaxe"),
SPEEDPOWDERPICKAXE(new ToolSpeedpowderPickaxe(), "speedpowderpickaxe"),
SPEEDPOWDERSHOVEL(new ToolSpeedpowderShovel(), "speedpowdershovel"),
SPEEDPOWDERHOE(new ToolSpeedpowderHoe(), "speedpowderhoe"),
SPEEDPOWDERWATERHOE(new ToolSpeedpowderWaterHoe(), "speedpowderwaterhoe"),
SPEEDPOWDERSHEARS(new ToolSpeedpowderShears(), "speedpowdershears"),
QUICKIEPOWDERAXE(new ToolQuickiepowderAxe(), "quickiepowderaxe"),
QUICKIEPOWDERPICKAXE(new ToolQuickiepowderPickaxe(), "quickiepowderpickaxe"),
QUICKIEPOWDERSHOVEL(new ToolQuickiepowderShovel(), "quickiepowdershovel"),
QUICKIEPOWDERHOE(new ToolQuickiepowderHoe(), "quickiepowderhoe"),
QUICKIEPOWDERWATERHOE(new ToolQuickiepowderWaterHoe(), "quickiepowderwaterhoe"),
ROTTEN_FLESH_STRIPES(new ItemRottenFleshStripes(), "rotten_flesh_stripes"), ROTTEN_FLESH_STRIPES(new ItemRottenFleshStripes(), "rotten_flesh_stripes"),
CARROTSTACK(new ItemCarrotstack(), "carrotstack"), CARROTSTACK(new ItemCarrotstack(), "carrotstack"),
COTTON(new ItemCotton(), "cotton"), COTTON(new ItemCotton(), "cotton"),
@ -20,12 +35,7 @@ public enum QuickieItems {
CANOLABOTTLESTACK(new ItemCanolabottlestack(), "canolabottlestack"), CANOLABOTTLESTACK(new ItemCanolabottlestack(), "canolabottlestack"),
STUB(new ItemStub(), "stub"), STUB(new ItemStub(), "stub"),
SALPETER(new ItemSalpeter(), "salpeter"), SALPETER(new ItemSalpeter(), "salpeter"),
SULPHOR(new ItemSulphor(), "sulphor"), SULPHOR(new ItemSulphor(), "sulphor");
SPEEDPOWDER(new ItemSpeedpowder(), "speedpowder"),
QUICKIEPOWDER(new ItemQuickiepowder(), "quickiepowder"),
OXIDIZEDCOPPERPOWDER(new ItemOxidizedcopperpowder(), "oxidizedcopperpowder"),
SPEEDINGOT(new ItemSpeedingot(), "speedingot"),
QUICKIEINGOT(new ItemQuickieingot(), "quickieingot");
// @formatter:on // @formatter:on
private final Item item; private final Item item;

View File

@ -0,0 +1,26 @@
package de.jottyfan.quickiemod.items;
import de.jottyfan.quickiemod.items.mat.QuickieToolMaterial;
import net.minecraft.item.AxeItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
/**
*
* @author jotty
*
*/
public class ToolQuickiepowderAxe extends ToolRangeableAxe {
private final static QuickieToolMaterial MATERIAL = QuickieToolMaterial.of(7f, 2400, 15, 1f, QuickieItems.SPEEDINGOT.getItem());
public ToolQuickiepowderAxe() {
super(MATERIAL, new Item.Settings().attributeModifiers(AxeItem.createAttributeModifiers(MATERIAL, 7F, -3.1F)));
}
@Override
public HarvestRange getRange(ItemStack stack) {
// TODO: get the range from the stack
return new HarvestRange(64, 128, 64); // trees bigger than that are too heavy for one small axe...
}
}

View File

@ -0,0 +1,20 @@
package de.jottyfan.quickiemod.items;
import de.jottyfan.quickiemod.items.mat.QuickieToolMaterial;
import net.minecraft.item.HoeItem;
import net.minecraft.item.Item;
/**
*
* @author jotty
*
*/
public class ToolQuickiepowderHoe extends ToolRangeableHoe {
public static final Integer DEFAULT_PLOW_RANGE = 4;
private final static QuickieToolMaterial MATERIAL = QuickieToolMaterial.of(7f, 2400, 15, 1f, QuickieItems.SPEEDINGOT.getItem());
public ToolQuickiepowderHoe() {
super(MATERIAL, new Item.Settings().attributeModifiers(HoeItem.createAttributeModifiers(MATERIAL, 7F, -3.1F)), new HarvestRange(DEFAULT_PLOW_RANGE));
}
}

View File

@ -0,0 +1,54 @@
package de.jottyfan.quickiemod.items;
import java.util.List;
import com.google.common.collect.Lists;
import de.jottyfan.quickiemod.items.mat.QuickieToolMaterial;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.PickaxeItem;
/**
*
* @author jotty
*
*/
public class ToolQuickiepowderPickaxe extends PickaxeItem implements ToolRangeable {
public static final int[] DEFAULT_HARVEST_RANGE = new int[] { 6, 6, 6 };
private final static QuickieToolMaterial MATERIAL = QuickieToolMaterial.of(7f, 2400, 15, 1f, QuickieItems.SPEEDINGOT.getItem());
public ToolQuickiepowderPickaxe() {
super(MATERIAL, new Item.Settings().attributeModifiers(PickaxeItem.createAttributeModifiers(MATERIAL, 7F, -3.1F)));
}
@Override
public HarvestRange getRange(ItemStack stack) {
return new HarvestRange(DEFAULT_HARVEST_RANGE);
}
@Override
public boolean canBreakNeighbors(BlockState blockIn) {
return new ItemStack(this).isSuitableFor(blockIn);
}
@Override
public List<Block> getBlockList(Block block) {
return Lists.newArrayList(block);
}
// @Override
// public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) {
// CommonToolCode.onItemRightClick(worldIn, playerIn, handIn);
// return super.onItemRightClick(worldIn, playerIn, handIn);
// }
//
// @Override
// public void addInformation(ItemStack stack, World worldIn, List<ITextComponent> tooltip, ITooltipFlag flagIn) {
// CommonToolCode.addInformation(stack, worldIn, tooltip, flagIn);
// super.addInformation(stack, worldIn, tooltip, flagIn);
// }
}

View File

@ -0,0 +1,97 @@
package de.jottyfan.quickiemod.items;
import java.util.List;
import com.google.common.collect.Lists;
import de.jottyfan.quickiemod.items.mat.QuickieToolMaterial;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUsageContext;
import net.minecraft.item.ShovelItem;
import net.minecraft.util.ActionResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class ToolQuickiepowderShovel extends ShovelItem implements ToolRangeable {
public static final Integer DEFAULT_HARVEST_RANGE = 6;
private final static QuickieToolMaterial MATERIAL = QuickieToolMaterial.of(7f, 2400, 15, 1f, QuickieItems.SPEEDINGOT.getItem());
public HarvestRange range;
public ToolQuickiepowderShovel() {
super(MATERIAL, new Item.Settings().attributeModifiers(ShovelItem.createAttributeModifiers(MATERIAL, 7F, -3.1F)));
this.range = new HarvestRange(DEFAULT_HARVEST_RANGE);
}
private void createPathOnGrass(World world, BlockPos pos, Direction side) {
BlockState blockState = world.getBlockState(pos);
if (blockState.isAir()) {
// try to find one underneath
pos = pos.down();
blockState = world.getBlockState(pos);
} else if (!world.getBlockState(pos.up()).isAir()) {
pos = pos.up();
blockState = world.getBlockState(pos);
}
if (side != Direction.DOWN) {
BlockState blockState2 = (BlockState) PATH_STATES.get(blockState.getBlock());
if (blockState2 != null && world.getBlockState(pos.up()).isAir()) {
if (!world.isClient) {
world.setBlockState(pos, blockState2, 11);
}
}
}
}
@Override
public ActionResult useOnBlock(ItemUsageContext context) {
World world = context.getWorld();
BlockPos pos = context.getBlockPos();
BlockPos[] positions = new BlockPos[] { pos.north().north().west().west(), pos.north().north().west(),
pos.north().north(), pos.north().north().east(), pos.north().north().east().east(), pos.north().west().west(),
pos.north().west(), pos.north(), pos.north().east(), pos.north().east().east(), pos.west().west(), pos.west(),
pos, pos.east(), pos.east().east(), pos.south().west().west(), pos.south().west(), pos.south(),
pos.south().east(), pos.south().east().east(), pos.south().south().west().west(), pos.south().south().west(),
pos.south().south(), pos.south().south().east(), pos.south().south().east().east() };
for (BlockPos p : positions) {
createPathOnGrass(world, p, context.getSide());
}
return super.useOnBlock(context);
}
@Override
public HarvestRange getRange(ItemStack stack) {
// TODO: get range from stack
return range;
}
@Override
public boolean canBreakNeighbors(BlockState blockState) {
return new ItemStack(this).isSuitableFor(blockState);
}
@Override
public List<Block> getBlockList(Block block) {
return Lists.newArrayList(block);
}
// @Override
// public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) {
// CommonToolCode.onItemRightClick(worldIn, playerIn, handIn);
// return super.onItemRightClick(worldIn, playerIn, handIn);
// }
//
// @Override
// public void addInformation(ItemStack stack, World worldIn, List<ITextComponent> tooltip, ITooltipFlag flagIn) {
// CommonToolCode.addInformation(stack, worldIn, tooltip, flagIn);
// super.addInformation(stack, worldIn, tooltip, flagIn);
// }
}

View File

@ -0,0 +1,38 @@
package de.jottyfan.quickiemod.items;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUsageContext;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class ToolQuickiepowderWaterHoe extends ToolQuickiepowderHoe {
@Override
public ActionResult useOnBlock(ItemUsageContext context) {
ActionResult res = super.useOnBlock(context);
if (!ActionResult.PASS.equals(res)) {
BlockPos pos = context.getBlockPos();
World world = context.getWorld();
BlockState oldBlockState = world.getBlockState(pos);
world.setBlockState(pos, Blocks.WATER.getDefaultState());
Hand hand = context.getHand();
PlayerEntity player = context.getPlayer();
ItemStack oldTool = player.getStackInHand(hand);
ItemStack newTool = new ItemStack(QuickieItems.QUICKIEPOWDERHOE.getItem());
newTool.setDamage(oldTool.getDamage());
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(oldBlockState.getBlock())));
player.setStackInHand(hand, newTool);
}
return res;
}
}

View File

@ -0,0 +1,38 @@
package de.jottyfan.quickiemod.items;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.item.ItemStack;
/**
*
* @author jotty
*
*/
public interface ToolRangeable {
/**
* @param stack the item stack that keeps the range
* @return range of blocks to be harvested
*/
public HarvestRange getRange(ItemStack stack);
/**
* check if this block state is one that affects the neighbor blocks to break
* also if they are from the same type
*
* @param blockState the block state of the current block
* @return true or false
*/
public boolean canBreakNeighbors(BlockState blockState);
/**
* get list of blocks that belong together (could be useful for stripped logs)
*
* @param block of the set
* @return the list of blocks or null if not found
*/
public List<Block> getBlockList(Block block);
}

View File

@ -0,0 +1,63 @@
package de.jottyfan.quickiemod.items;
import java.util.List;
import com.google.common.collect.Lists;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.LeavesBlock;
import net.minecraft.item.AxeItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ToolMaterial;
import net.minecraft.registry.tag.BlockTags;
/**
*
* @author jotty
*
*/
public abstract class ToolRangeableAxe extends AxeItem implements ToolRangeable {
protected ToolRangeableAxe(ToolMaterial material, Item.Settings settings) {
super(material, settings);
}
@Override
public HarvestRange getRange(ItemStack stack) {
// TODO: get the range from the stack
return new HarvestRange(16, 32, 16);
}
/**
* check if the block is a leaves block
*
* @param blockIn the block
* @return true or false
*/
private boolean isLeavesBlock(BlockState blockIn) {
boolean vanillaLeaves = blockIn.getBlock() instanceof LeavesBlock;
boolean terrestriaLeaves = false;
try {
Class<?> extendedLeavesBlock = Class.forName("com.terraformersmc.terraform.leaves.block.ExtendedLeavesBlock");
terrestriaLeaves = extendedLeavesBlock.isInstance(blockIn.getBlock());
} catch (ClassNotFoundException e) {
// no terrestria mod available, so ignore this
// using this approach instead of the instanceof functionality, we don't need to refer to terrestria
// and omit a crash on installations that do not have or want terrestria available
}
boolean blockTagLeaves = blockIn.isIn(BlockTags.LEAVES);
return vanillaLeaves || terrestriaLeaves || blockTagLeaves;
}
@Override
public boolean canBreakNeighbors(BlockState blockIn) {
return new ItemStack(this).isSuitableFor(blockIn) || isLeavesBlock(blockIn) || blockIn.isIn(BlockTags.LOGS);
}
@Override
public List<Block> getBlockList(Block block) {
return Lists.newArrayList(block);
}
}

View File

@ -0,0 +1,97 @@
package de.jottyfan.quickiemod.items;
import java.util.List;
import com.google.common.collect.Lists;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.block.CropBlock;
import net.minecraft.item.HoeItem;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUsageContext;
import net.minecraft.item.ToolMaterial;
import net.minecraft.util.ActionResult;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.util.math.Vec3i;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public abstract class ToolRangeableHoe extends HoeItem implements ToolRangeable {
public HarvestRange range;
public ToolRangeableHoe(ToolMaterial material, Settings settings, HarvestRange range) {
super(material, settings);
this.range = range;
}
@Override
public ActionResult useOnBlock(ItemUsageContext context) {
ActionResult res = super.useOnBlock(context);
boolean isCrop = context.getWorld().getBlockState(context.getBlockPos()).getBlock() instanceof CropBlock;
if (!ActionResult.PASS.equals(res) || isCrop) {
for (int x = -this.range.getxRange(); x <= this.range.getxRange(); x++) {
for (int y = -this.range.getyRange(); y <= this.range.getyRange(); y++) {
for (int z = -this.range.getzRange(); z <= this.range.getzRange(); z++) {
if (!isCrop) {
removePossibleGrass(context.getWorld(), new BlockPos(x, y, z));
BlockHitResult bhr = new BlockHitResult(context.getHitPos(), Direction.UP,
context.getBlockPos().add(new Vec3i(x, y, z)), false);
ItemUsageContext ctx = new ItemUsageContext(context.getPlayer(), context.getHand(), bhr);
super.useOnBlock(ctx);
} else {
harvestIfPossible(context.getBlockPos().add(x, y, z), context.getWorld());
}
}
}
}
}
return res;
}
private void removePossibleGrass(World world, BlockPos pos) {
Block block = world.getBlockState(pos).getBlock();
Boolean grassFound = Blocks.FERN.equals(block) || Blocks.LARGE_FERN.equals(block)
|| Blocks.SHORT_GRASS.equals(block) || Blocks.TALL_GRASS.equals(block);
if (grassFound) {
world.breakBlock(pos, true);
}
}
private void harvestIfPossible(BlockPos pos, World world) {
BlockState blockState = world.getBlockState(pos);
Block block = blockState.getBlock();
if (block instanceof CropBlock) {
CropBlock cBlock = (CropBlock) block;
if (cBlock.isMature(blockState)) {
Block.dropStacks(blockState, world, pos);
world.setBlockState(pos, cBlock.withAge(0));
}
}
}
@Override
public HarvestRange getRange(ItemStack stack) {
// TODO: get range from stack
return range;
}
@Override
public boolean canBreakNeighbors(BlockState blockState) {
return new ItemStack(this).isSuitableFor(blockState) || Blocks.TALL_GRASS.equals(blockState.getBlock())
|| Blocks.FERN.equals(blockState.getBlock()) || Blocks.LARGE_FERN.equals(blockState.getBlock());
}
@Override
public List<Block> getBlockList(Block block) {
return Lists.newArrayList(block);
}
}

View File

@ -0,0 +1,26 @@
package de.jottyfan.quickiemod.items;
import de.jottyfan.quickiemod.items.mat.QuickieToolMaterial;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.PickaxeItem;
/**
*
* @author jotty
*
*/
public class ToolSpeedpowderAxe extends ToolRangeableAxe {
private final static QuickieToolMaterial MATERIAL = QuickieToolMaterial.of(7f, 800, 15, 1f, QuickieItems.SPEEDINGOT.getItem());
public ToolSpeedpowderAxe() {
super(MATERIAL, new Item.Settings().attributeModifiers(PickaxeItem.createAttributeModifiers(MATERIAL, 7f, -3.1f)));
}
@Override
public HarvestRange getRange(ItemStack stack) {
// TODO: get the range from the stack
return new HarvestRange(32, 64, 32);
}
}

View File

@ -0,0 +1,20 @@
package de.jottyfan.quickiemod.items;
import de.jottyfan.quickiemod.items.mat.QuickieToolMaterial;
import net.minecraft.item.HoeItem;
import net.minecraft.item.Item;
/**
*
* @author jotty
*
*/
public class ToolSpeedpowderHoe extends ToolRangeableHoe {
public static final Integer DEFAULT_PLOW_RANGE = 2;
private final static QuickieToolMaterial MATERIAL = QuickieToolMaterial.of(7f, 800, 15, 1f, QuickieItems.SPEEDINGOT.getItem());
public ToolSpeedpowderHoe() {
super(MATERIAL, new Item.Settings().attributeModifiers(HoeItem.createAttributeModifiers(MATERIAL, 7F, -3.1F)), new HarvestRange(DEFAULT_PLOW_RANGE));
}
}

View File

@ -0,0 +1,55 @@
package de.jottyfan.quickiemod.items;
import java.util.List;
import com.google.common.collect.Lists;
import de.jottyfan.quickiemod.items.mat.QuickieToolMaterial;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.item.AxeItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.PickaxeItem;
/**
*
* @author jotty
*
*/
public class ToolSpeedpowderPickaxe extends PickaxeItem implements ToolRangeable {
public static final int[] DEFAULT_HARVEST_RANGE = new int[] { 3, 3, 3 };
private final static QuickieToolMaterial MATERIAL = QuickieToolMaterial.of(7f, 800, 15, 1f, QuickieItems.SPEEDINGOT.getItem());
public ToolSpeedpowderPickaxe() {
super(MATERIAL, new Item.Settings().attributeModifiers(AxeItem.createAttributeModifiers(MATERIAL, 7F, -3.1F)));
}
@Override
public HarvestRange getRange(ItemStack stack) {
return new HarvestRange(DEFAULT_HARVEST_RANGE);
}
@Override
public boolean canBreakNeighbors(BlockState blockIn) {
return new ItemStack(this).isSuitableFor(blockIn);
}
@Override
public List<Block> getBlockList(Block block) {
return Lists.newArrayList(block);
}
// @Override
// public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) {
// CommonToolCode.onItemRightClick(worldIn, playerIn, handIn);
// return super.onItemRightClick(worldIn, playerIn, handIn);
// }
//
// @Override
// public void addInformation(ItemStack stack, World worldIn, List<ITextComponent> tooltip, ITooltipFlag flagIn) {
// CommonToolCode.addInformation(stack, worldIn, tooltip, flagIn);
// super.addInformation(stack, worldIn, tooltip, flagIn);
// }
}

View File

@ -0,0 +1,96 @@
package de.jottyfan.quickiemod.items;
import java.util.Random;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.passive.ChickenEntity;
import net.minecraft.entity.passive.CowEntity;
import net.minecraft.entity.passive.HorseEntity;
import net.minecraft.entity.passive.SheepEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.item.ShearsItem;
import net.minecraft.util.ActionResult;
import net.minecraft.util.DyeColor;
import net.minecraft.util.Hand;
import net.minecraft.util.math.Vec3d;
/**
*
* @author jotty
*
*/
public class ToolSpeedpowderShears extends ShearsItem {
public ToolSpeedpowderShears() {
super(new Item.Settings().component(DataComponentTypes.TOOL, ShearsItem.createToolComponent()));
}
@Override
public ActionResult useOnEntity(ItemStack stack, PlayerEntity user, LivingEntity entity, Hand hand) {
Vec3d pos = entity.getPos();
Integer amount = 3 + new Random().nextInt(4);
if (entity instanceof SheepEntity) {
SheepEntity sheep = (SheepEntity) entity;
if (sheep.isShearable()) {
sheep.setSheared(true);
sheep.playAmbientSound();
DyeColor color = sheep.getColor();
Item item = Items.WHITE_WOOL;
if (color.equals(DyeColor.BLACK)) {
item = Items.BLACK_WOOL;
} else if (color.equals(DyeColor.GRAY)) {
item = Items.GRAY_WOOL;
} else if (color.equals(DyeColor.LIGHT_GRAY)) {
item = Items.LIGHT_GRAY_WOOL;
} else if (color.equals(DyeColor.BROWN)) {
item = Items.BROWN_WOOL;
} else if (color.equals(DyeColor.BLUE)) {
item = Items.BLUE_WOOL;
} else if (color.equals(DyeColor.LIGHT_BLUE)) {
item = Items.LIGHT_BLUE_WOOL;
} else if (color.equals(DyeColor.GREEN)) {
item = Items.GREEN_WOOL;
} else if (color.equals(DyeColor.LIME)) {
item = Items.LIME_WOOL;
} else if (color.equals(DyeColor.CYAN)) {
item = Items.CYAN_WOOL;
} else if (color.equals(DyeColor.MAGENTA)) {
item = Items.MAGENTA_WOOL;
} else if (color.equals(DyeColor.ORANGE)) {
item = Items.ORANGE_WOOL;
} else if (color.equals(DyeColor.PINK)) {
item = Items.PINK_WOOL;
} else if (color.equals(DyeColor.PURPLE)) {
item = Items.PURPLE_WOOL;
} else if (color.equals(DyeColor.RED)) {
item = Items.RED_WOOL;
} else if (color.equals(DyeColor.YELLOW)) {
item = Items.YELLOW_WOOL;
}
user.getWorld().spawnEntity(new ItemEntity(user.getWorld(), pos.getX(), pos.getY(), pos.getZ(), new ItemStack(item, amount)));
return ActionResult.SUCCESS;
}
} else if (entity instanceof HorseEntity) {
HorseEntity horse = (HorseEntity) entity;
horse.playAmbientSound();
user.getWorld().spawnEntity(new ItemEntity(user.getWorld(), pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.LEATHER, amount)));
return ActionResult.SUCCESS;
} else if (entity instanceof CowEntity) {
CowEntity cow = (CowEntity) entity;
cow.playAmbientSound();
user.getWorld().spawnEntity(new ItemEntity(user.getWorld(), pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.LEATHER, amount)));
return ActionResult.SUCCESS;
} else if (entity instanceof ChickenEntity) {
ChickenEntity cow = (ChickenEntity) entity;
cow.playAmbientSound();
user.getWorld().spawnEntity(new ItemEntity(user.getWorld(), pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.FEATHER, amount)));
return ActionResult.SUCCESS;
}
return ActionResult.PASS;
}
}

View File

@ -0,0 +1,96 @@
package de.jottyfan.quickiemod.items;
import java.util.List;
import com.google.common.collect.Lists;
import de.jottyfan.quickiemod.items.mat.QuickieToolMaterial;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUsageContext;
import net.minecraft.item.ShovelItem;
import net.minecraft.util.ActionResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class ToolSpeedpowderShovel extends ShovelItem implements ToolRangeable {
public static final Integer DEFAULT_HARVEST_RANGE = 3;
private final static QuickieToolMaterial MATERIAL = QuickieToolMaterial.of(7f, 800, 15, 1f, QuickieItems.SPEEDINGOT.getItem());
public HarvestRange range;
public ToolSpeedpowderShovel() {
super(MATERIAL, new Item.Settings().attributeModifiers(ShovelItem.createAttributeModifiers(MATERIAL, 7F, -3.1F)));
this.range = new HarvestRange(DEFAULT_HARVEST_RANGE);
}
private void createPathOnGrass(World world, BlockPos pos, Direction side) {
BlockState blockState = world.getBlockState(pos);
if (blockState.isAir()) {
// try to find one underneath
pos = pos.down();
blockState = world.getBlockState(pos);
} else if (!world.getBlockState(pos.up()).isAir()) {
pos = pos.up();
blockState = world.getBlockState(pos);
}
if (side != Direction.DOWN) {
BlockState blockState2 = (BlockState) PATH_STATES.get(blockState.getBlock());
if (blockState2 != null && world.getBlockState(pos.up()).isAir()) {
if (!world.isClient) {
world.setBlockState(pos, blockState2, 11);
}
}
}
}
@Override
public ActionResult useOnBlock(ItemUsageContext context) {
World world = context.getWorld();
BlockPos pos = context.getBlockPos();
createPathOnGrass(world, pos.north(), context.getSide());
createPathOnGrass(world, pos.north().east(), context.getSide());
createPathOnGrass(world, pos.north().west(), context.getSide());
createPathOnGrass(world, pos.east(), context.getSide());
createPathOnGrass(world, pos.west(), context.getSide());
createPathOnGrass(world, pos.south(), context.getSide());
createPathOnGrass(world, pos.south().east(), context.getSide());
createPathOnGrass(world, pos.south().west(), context.getSide());
return super.useOnBlock(context);
}
@Override
public HarvestRange getRange(ItemStack stack) {
// TODO: get range from stack
return range;
}
@Override
public boolean canBreakNeighbors(BlockState blockState) {
return new ItemStack(this).isSuitableFor(blockState);
}
@Override
public List<Block> getBlockList(Block block) {
return Lists.newArrayList(block);
}
// @Override
// public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) {
// CommonToolCode.onItemRightClick(worldIn, playerIn, handIn);
// return super.onItemRightClick(worldIn, playerIn, handIn);
// }
//
// @Override
// public void addInformation(ItemStack stack, World worldIn, List<ITextComponent> tooltip, ITooltipFlag flagIn) {
// CommonToolCode.addInformation(stack, worldIn, tooltip, flagIn);
// super.addInformation(stack, worldIn, tooltip, flagIn);
// }
}

View File

@ -0,0 +1,38 @@
package de.jottyfan.quickiemod.items;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUsageContext;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class ToolSpeedpowderWaterHoe extends ToolSpeedpowderHoe {
@Override
public ActionResult useOnBlock(ItemUsageContext context) {
ActionResult res = super.useOnBlock(context);
if (!ActionResult.PASS.equals(res)) {
BlockPos pos = context.getBlockPos();
World world = context.getWorld();
BlockState oldBlockState = world.getBlockState(pos);
world.setBlockState(pos, Blocks.WATER.getDefaultState());
Hand hand = context.getHand();
PlayerEntity player = context.getPlayer();
ItemStack oldTool = player.getStackInHand(hand);
ItemStack newTool = new ItemStack(QuickieItems.SPEEDPOWDERHOE.getItem());
newTool.setDamage(oldTool.getDamage());
world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(oldBlockState.getBlock())));
player.setStackInHand(hand, newTool);
}
return res;
}
}

View File

@ -0,0 +1,64 @@
package de.jottyfan.quickiemod.items.mat;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ToolMaterial;
import net.minecraft.recipe.Ingredient;
import net.minecraft.registry.tag.BlockTags;
import net.minecraft.registry.tag.TagKey;
/**
*
* @author jotty
*
*/
public class QuickieToolMaterial implements ToolMaterial {
private final float attackDamage;
private final int durability;
private final int enchantability;
private final float miningSpeedMuliplier;
private final Item item;
private QuickieToolMaterial(float attackDamage, int durability, int enchantability, float miningSpeedMultiplier, Item item) {
this.attackDamage = attackDamage;
this.durability = durability;
this.enchantability = enchantability;
this.miningSpeedMuliplier = miningSpeedMultiplier;
this.item = item;
}
public static final QuickieToolMaterial of(float attackDamage, int durability, int enchantability, float miningSpeedMultiplier, Item item) {
return new QuickieToolMaterial(attackDamage, durability, enchantability, miningSpeedMultiplier, item);
}
@Override
public float getAttackDamage() {
return attackDamage;
}
@Override
public int getDurability() {
return durability;
}
@Override
public int getEnchantability() {
return enchantability;
}
@Override
public TagKey<Block> getInverseTag() {
return BlockTags.INCORRECT_FOR_IRON_TOOL;
}
@Override
public float getMiningSpeedMultiplier() {
return miningSpeedMuliplier;
}
@Override
public Ingredient getRepairIngredient() {
return Ingredient.ofItems(item);
}
}

View File

@ -0,0 +1,33 @@
package de.jottyfan.quickiemod.mixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import de.jottyfan.quickiemod.event.BreakBlockCallback;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.ActionResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
@Mixin(Block.class)
public class BlockBreakMixin {
@Inject(at = @At("HEAD"), method = "onBreak(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;Lnet/minecraft/entity/player/PlayerEntity;)Lnet/minecraft/block/BlockState;")
private void onBreak(final World world, final BlockPos blockPos, final BlockState blockState,
final PlayerEntity playerEntity, final CallbackInfoReturnable<BlockBreakMixin> info) {
ActionResult result = BreakBlockCallback.EVENT.invoker().injectBlockBreakCallback(world, blockPos, blockState,
playerEntity);
if (result == ActionResult.FAIL) {
info.cancel();
}
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/handheld",
"textures": {
"layer0": "quickiemod:item/quickiepowderaxe"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "quickiemod:item/quickiepowderhoe"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "quickiemod:item/quickiepowderpickaxe"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "quickiemod:item/quickiepowdershovel"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "quickiemod:item/quickiepowderwaterhoe"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "quickiemod:item/speedpowderaxe"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "quickiemod:item/speedpowderhoe"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "quickiemod:item/speedpowderpickaxe"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "quickiemod:item/speedpowdershovel"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "quickiemod:item/speedpowderwaterhoe"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

View File

@ -0,0 +1,7 @@
{
"replace": false,
"values": [
"quickiemod:speedpowderaxe",
"quickiemod:quickiepowderaxe"
]
}

View File

@ -0,0 +1,9 @@
{
"replace": false,
"values": [
"quickiemod:speedpowderhoe",
"quickiemod:speedpowderwaterhoe",
"quickiemod:quickiepowderhoe",
"quickiemod:quickiepowderwaterhoe"
]
}

View File

@ -0,0 +1,7 @@
{
"replace": false,
"values": [
"quickiemod:speedpowderpickaxe",
"quickiemod:quickiepowderpickaxe"
]
}

View File

@ -0,0 +1,7 @@
{
"replace": false,
"values": [
"quickiemod:speedpowdershovel",
"quickiemod:quickiepowdershovel"
]
}

View File

@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"category": "tools",
"pattern": [
"ss",
"s|",
" |"
],
"key": {
"s": {
"item": "quickiemod:quickieingot"
},
"|": {
"item": "minecraft:stick"
}
},
"result": {
"id": "quickiemod:quickiepowderaxe",
"count": 1
}
}

View File

@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"category": "tools",
"pattern": [
"ss",
" |",
" |"
],
"key": {
"s": {
"item": "quickiemod:quickieingot"
},
"|": {
"item": "minecraft:stick"
}
},
"result": {
"id": "quickiemod:quickiepowderhoe",
"count": 1
}
}

View File

@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"category": "tools",
"pattern": [
"sss",
" | ",
" | "
],
"key": {
"s": {
"item": "quickiemod:quickieingot"
},
"|": {
"item": "minecraft:stick"
}
},
"result": {
"id": "quickiemod:quickiepowderpickaxe",
"count": 1
}
}

View File

@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"category": "tools",
"pattern": [
"s",
"|",
"|"
],
"key": {
"s": {
"item": "quickiemod:quickieingot"
},
"|": {
"item": "minecraft:stick"
}
},
"result": {
"id": "quickiemod:quickiepowdershovel",
"count": 1
}
}

View File

@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"category": "tools",
"pattern": [
"ss",
"s|",
" |"
],
"key": {
"s": {
"item": "quickiemod:speedingot"
},
"|": {
"item": "minecraft:stick"
}
},
"result": {
"id": "quickiemod:speedpowderaxe",
"count": 1
}
}

View File

@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"category": "tools",
"pattern": [
"ss",
" |",
" |"
],
"key": {
"s": {
"item": "quickiemod:speedingot"
},
"|": {
"item": "minecraft:stick"
}
},
"result": {
"id": "quickiemod:speedpowderhoe",
"count": 1
}
}

View File

@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"category": "tools",
"pattern": [
"sss",
" | ",
" | "
],
"key": {
"s": {
"item": "quickiemod:speedingot"
},
"|": {
"item": "minecraft:stick"
}
},
"result": {
"id": "quickiemod:speedpowderpickaxe",
"count": 1
}
}

View File

@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"category": "tools",
"pattern": [
"s",
"|",
"|"
],
"key": {
"s": {
"item": "quickiemod:speedingot"
},
"|": {
"item": "minecraft:stick"
}
},
"result": {
"id": "quickiemod:speedpowdershovel",
"count": 1
}
}

Some files were not shown because too many files have changed in this diff Show More