added block stacker without gui

This commit is contained in:
Jottyfan 2024-06-28 21:51:16 +02:00
parent 72b9c7dece
commit 0338c7c5ef
57 changed files with 1573 additions and 624 deletions

View File

@ -1,6 +1,5 @@
<?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"/>
@ -18,610 +17,6 @@
<attribute name="module" value="true"/> <attribute name="module" value="true"/>
</attributes> </attributes>
</classpathentry> </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"> <classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
<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,21 +2,22 @@
<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 15 13:57:14 CEST 2024 #Mon Jun 24 21:17:32 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.1 mod_version=1.21.0.2
maven_group=de.jottyfan.quickiemod maven_group=de.jottyfan.quickiemod
archives_base_name=quickiemod archives_base_name=quickiemod

View File

@ -14,12 +14,14 @@ import net.fabricmc.api.ModInitializer;
public class QuickieMod implements ModInitializer { public class QuickieMod implements ModInitializer {
public static final String MODID = "quickiemod"; public static final String MODID = "quickiemod";
private static final Logger LOGGER = LoggerFactory.getLogger(MODID); public static final Logger LOGGER = LoggerFactory.getLogger(MODID);
@Override @Override
public void onInitialize() { public void onInitialize() {
LOGGER.info("loading {}", MODID); LOGGER.info("loading {}", MODID);
RegistryManager.registerBlockEntityTypes(); RegistryManager.registerBlockEntityTypes();
RegistryManager.registerScreenHandlerTypes();
RegistryManager.registerItems(); RegistryManager.registerItems();
RegistryManager.registerEvents(); RegistryManager.registerEvents();
RegistryManager.registerBlocks(); RegistryManager.registerBlocks();

View File

@ -1,10 +1,13 @@
package de.jottyfan.quickiemod; package de.jottyfan.quickiemod;
import de.jottyfan.quickiemod.blocks.QuickieBlocks; import de.jottyfan.quickiemod.blocks.QuickieBlocks;
import de.jottyfan.quickiemod.container.BlockStackerScreen;
import de.jottyfan.quickiemod.container.ScreenHandlerTypes;
import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
import net.minecraft.client.gui.screen.ingame.HandledScreens;
import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderLayer;
/** /**
@ -16,6 +19,7 @@ import net.minecraft.client.render.RenderLayer;
public class QuickieModClient implements ClientModInitializer { public class QuickieModClient implements ClientModInitializer {
@Override @Override
public void onInitializeClient() { public void onInitializeClient() {
// HandledScreens.register(ScreenHandlerTypes.BLOCKSTACKER_SCREEN_HANDLER, BlockStackerScreen::new);
BlockRenderLayerMap.INSTANCE.putBlock(QuickieBlocks.COTTONPLANT.getBlock(), RenderLayer.getCutout()); BlockRenderLayerMap.INSTANCE.putBlock(QuickieBlocks.COTTONPLANT.getBlock(), RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(QuickieBlocks.CANOLAPLANT.getBlock(), RenderLayer.getCutout()); BlockRenderLayerMap.INSTANCE.putBlock(QuickieBlocks.CANOLAPLANT.getBlock(), RenderLayer.getCutout());
} }

View File

@ -29,4 +29,9 @@ public class BlockEntityTypes {
BlockEntityType.Builder.create(DrillBlockWestEntity::new, QuickieBlocks.DRILL_WEST.getBlock()).build(null)); BlockEntityType.Builder.create(DrillBlockWestEntity::new, QuickieBlocks.DRILL_WEST.getBlock()).build(null));
public static final BlockEntityType<DrillBlockNorthEntity> DRILL_NORTH = Registry.register(Registries.BLOCK_ENTITY_TYPE, BlockEntityIdentity.DRILL_NORTH, public static final BlockEntityType<DrillBlockNorthEntity> DRILL_NORTH = Registry.register(Registries.BLOCK_ENTITY_TYPE, BlockEntityIdentity.DRILL_NORTH,
BlockEntityType.Builder.create(DrillBlockNorthEntity::new, QuickieBlocks.DRILL_NORTH.getBlock()).build(null)); BlockEntityType.Builder.create(DrillBlockNorthEntity::new, QuickieBlocks.DRILL_NORTH.getBlock()).build(null));
public static final BlockEntityType<BlockStackerEntity> BLOCKSTACKER_ENTITY = Registry.register(Registries.BLOCK_ENTITY_TYPE,
BlockEntityIdentity.BLOCKSTACKERUP,
BlockEntityType.Builder.create(BlockStackerEntity::new, QuickieBlocks.BLOCKSTACKERUP.getBlock(), QuickieBlocks.BLOCKSTACKERDOWN.getBlock(),
QuickieBlocks.BLOCKSTACKEREAST.getBlock(), QuickieBlocks.BLOCKSTACKERWEST.getBlock(), QuickieBlocks.BLOCKSTACKERNORTH.getBlock(),
QuickieBlocks.BLOCKSTACKERSOUTH.getBlock()).build(null));
} }

View File

@ -0,0 +1,265 @@
package de.jottyfan.quickiemod.blockentity;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import de.jottyfan.quickiemod.QuickieMod;
import de.jottyfan.quickiemod.blocks.help.BlockStacker;
import de.jottyfan.quickiemod.container.BlockStackerScreenHandler;
import de.jottyfan.quickiemod.container.ImplementedInventory;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.LootableContainerBlockEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.Inventories;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.registry.RegistryWrapper.WrapperLookup;
import net.minecraft.screen.NamedScreenHandlerFactory;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.text.Text;
import net.minecraft.util.collection.DefaultedList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class BlockStackerEntity extends BlockEntity implements NamedScreenHandlerFactory, ImplementedInventory {
private static final Logger LOGGER = LoggerFactory.getLogger(QuickieMod.MODID);
private final DefaultedList<ItemStack> inventory = DefaultedList.ofSize(BlockStackerScreenHandler.SLOTSIZE, ItemStack.EMPTY);
public BlockStackerEntity(BlockPos blockPos, BlockState blockState) {
super(BlockEntityTypes.BLOCKSTACKER_ENTITY, blockPos, blockState);
}
@Override
public DefaultedList<ItemStack> getItems() {
return inventory;
}
public List<ItemStack> getWhiteList() {
int counter = 0;
List<ItemStack> list = new ArrayList<>();
for (ItemStack stack : inventory) {
counter++;
if (counter < 10) { // first 9 items are whitelist items
list.add(stack);
}
}
return list;
}
public List<ItemStack> getBlackList() {
int counter = 0;
List<ItemStack> list = new ArrayList<>();
for (ItemStack stack : inventory) {
counter++;
if (counter > 9) { // second 9 items are blacklist items
list.add(stack);
}
}
return list;
}
@Override
public ScreenHandler createMenu(int syncId, PlayerInventory playerInventory, PlayerEntity player) {
return new BlockStackerScreenHandler(syncId, playerInventory, this);
}
@Override
public Text getDisplayName() {
return Text.translatable(getCachedState().getBlock().getTranslationKey());
}
@Override
protected void readNbt(NbtCompound nbt, WrapperLookup registryLookup) {
super.readNbt(nbt, registryLookup);
Inventories.readNbt(nbt, inventory, registryLookup);
}
@Override
protected void writeNbt(NbtCompound nbt, WrapperLookup registryLookup) {
Inventories.writeNbt(nbt, inventory, registryLookup);
super.writeNbt(nbt, registryLookup);
}
/**
* if whitelist, return true if current == pattern; return false otherwise
*
* @param current the current item stack
* @param pattern the item stack to compare with
* @param whitelist if true, filter only current == pattern, if false, filter
* all but that
* @return true or false
*/
public static final Boolean filter(ItemStack current, ItemStack pattern, Boolean whitelist) {
Boolean matches = pattern.getItem().equals(current.getItem());
return whitelist ? matches : !matches;
}
public static void tick(World world, BlockPos pos, BlockState state, BlockStackerEntity entity) {
if (!world.isClient) {
pos.down();
BlockStacker block = (BlockStacker) state.getBlock();
BlockEntity source = world.getBlockEntity(pos.offset(block.getSourceOffset()));
BlockEntity dest = world.getBlockEntity(pos.offset(block.getDestOffset()));
Boolean sourceIsLootable = source instanceof LootableContainerBlockEntity;
Boolean destIsLootable = dest instanceof LootableContainerBlockEntity;
if (sourceIsLootable && destIsLootable) {
LootableContainerBlockEntity lootableSource = (LootableContainerBlockEntity) source;
LootableContainerBlockEntity lootableDest = (LootableContainerBlockEntity) dest;
transferOneStack(lootableSource, lootableDest, entity.getWhiteList(), entity.getBlackList());
}
}
}
private static final Boolean transferOneStack(LootableContainerBlockEntity source, LootableContainerBlockEntity dest, List<ItemStack> whiteList, List<ItemStack> blackList) {
// whitelist behaviour
List<Item> checked = new ArrayList<>();
// this way, we block whitelist items that are in the blacklist
for (ItemStack stack : blackList) {
if (stack != null && !stack.isEmpty()) {
checked.add(stack.getItem());
}
}
Boolean found = false;
if (hasItems(whiteList)) {
Item matchItem = findNextItem(whiteList, checked);
while(!found && matchItem != null) {
checked.add(matchItem);
List<Item> matchItems = new ArrayList<>();
matchItems.add(matchItem);
found = transferOneStack(source, dest, matchItems, true);
matchItem = findNextItem(whiteList, checked);
}
} else {
// transport all but the items of the blacklist
found = transferOneStack(source, dest, checked, false);
}
return found;
}
private static final Boolean transferOneStack(LootableContainerBlockEntity source, LootableContainerBlockEntity dest,
List<Item> ignoreItems, Boolean whitelist) {
Boolean result = false;
Integer sourceSlot = findItemStackPos(source, ignoreItems, whitelist);
if (sourceSlot != null && !Items.AIR.equals(source.getStack(sourceSlot).getItem())) {
ItemStack sourceStack = source.getStack(sourceSlot);
Integer destSlot = findItemStackPos(dest, sourceStack);
if (destSlot != null) {
Integer occupied = dest.getStack(destSlot).getCount();
Integer free = dest.getStack(destSlot).getMaxCount() - occupied;
Integer candidates = source.getStack(sourceSlot).getCount();
Integer travellers = candidates > free ? free : candidates;
if (travellers > 0) {
LOGGER.debug("transfer {}/{} of {} from slot {} to slot {} on top of {} ones", travellers, candidates,
source.getStack(sourceSlot).getItem().toString(), sourceSlot, destSlot, occupied);
source.getStack(sourceSlot).decrement(travellers);
if (source.getStack(sourceSlot).getCount() < 1) {
source.removeStack(sourceSlot); // make empty slots really empty
}
dest.getStack(destSlot).increment(travellers);
result = true;
}
} else {
Integer destFreeSlot = findItemStackPos(dest, true);
if (destFreeSlot != null) {
LOGGER.debug("transfer all of {} from slot {} to slot {}", source.getStack(sourceSlot).getItem().toString(),
sourceSlot, destSlot);
dest.setStack(destFreeSlot, source.removeStack(sourceSlot));
result = true;
}
}
}
return result;
}
private static final Boolean hasItems(List<ItemStack> list) {
Boolean result = false;
for (ItemStack stack : list) {
result = result || (stack != null && !stack.isEmpty() && stack.getCount() > 0);
}
return result;
}
private static final Item findNextItem(List<ItemStack> inventory, List<Item> exclude) {
for (ItemStack stack : inventory) {
if (!stack.isEmpty()) {
Item item = stack.getItem();
if (!exclude.contains(item)) {
return item;
}
}
}
return null;
}
private static final Integer findItemStackPos(LootableContainerBlockEntity lcbe, ItemStack sourceStack) {
Integer counter = lcbe.size();
while (counter > 0) {
counter--;
ItemStack stack = lcbe.getStack(counter);
if (sourceStack.getItem().equals(stack.getItem())) {
if (stack.getCount() < stack.getMaxCount()) {
return counter;
}
}
}
return null;
}
private static final Integer findItemStackPos(LootableContainerBlockEntity lcbe, Boolean empty) {
Integer counter = lcbe.size();
while (counter > 0) {
counter--;
ItemStack stack = lcbe.getStack(counter);
if (empty.equals(ItemStack.EMPTY.equals(stack))) {
return counter;
}
}
return null;
}
private static final Integer findItemStackPos(LootableContainerBlockEntity lcbe, List<Item> filterItems, Boolean whitelist) {
if (whitelist == null) {
whitelist = true;
LOGGER.error("whitelist is null");
}
if (filterItems == null || filterItems.size() < 1) {
if (whitelist) {
return null;
} else {
return findItemStackPos(lcbe, false);
}
} else {
Integer counter = lcbe.size();
while (counter > 0) {
counter--;
ItemStack stack = lcbe.getStack(counter);
Boolean found = whitelist ? filterItems.contains(stack.getItem()) : !filterItems.contains(stack.getItem());
if (found) {
return counter;
}
}
return null;
}
}
@Override
public int size() {
return inventory.size();
}
}

View File

@ -0,0 +1,111 @@
package de.jottyfan.quickiemod.blocks;
import java.util.List;
import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.blockentity.BlockEntityTypes;
import de.jottyfan.quickiemod.blockentity.BlockStackerEntity;
import de.jottyfan.quickiemod.blocks.help.BlockStacker;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState;
import net.minecraft.block.BlockWithEntity;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.screen.NamedScreenHandlerFactory;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.util.ActionResult;
import net.minecraft.util.ItemScatterer;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class BlockStackerDown extends BlockWithEntity implements BlockStacker {
public BlockStackerDown() {
super(AbstractBlock.Settings.create().hardness(2.5f));
}
@Override
public Direction getSourceOffset() {
return Direction.UP;
}
@Override
public Direction getDestOffset() {
return Direction.DOWN;
}
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState state) {
return new BlockStackerEntity(pos, state);
}
@Override
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return List.of(new ItemStack(QuickieBlocks.BLOCKSTACKERDOWN.getBlock()));
}
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state,
BlockEntityType<T> type) {
return validateTicker(type, BlockEntityTypes.BLOCKSTACKER_ENTITY,
(world1, pos, state1, be) -> BlockStackerEntity.tick(world1, pos, state1, be));
}
@Override
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
// if (!world.isClient) {
// NamedScreenHandlerFactory screenHandlerFactory = state.createScreenHandlerFactory(world, pos);
// if (screenHandlerFactory != null) {
// player.openHandledScreen(screenHandlerFactory);
// }
// }
return ActionResult.SUCCESS;
}
@Override
public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) {
if (state.getBlock() != newState.getBlock()) {
BlockEntity blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof BlockStackerEntity) {
ItemScatterer.spawn(world, pos, (BlockStackerEntity) blockEntity);
// update comparators
world.updateComparators(pos, this);
}
super.onStateReplaced(state, world, pos, newState, moved);
}
}
@Override
public boolean hasComparatorOutput(BlockState state) {
return true;
}
@Override
public int getComparatorOutput(BlockState state, World world, BlockPos pos) {
return ScreenHandler.calculateComparatorOutput(world.getBlockEntity(pos));
}
@Override
protected MapCodec<? extends BlockWithEntity> getCodec() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -0,0 +1,111 @@
package de.jottyfan.quickiemod.blocks;
import java.util.List;
import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.blockentity.BlockEntityTypes;
import de.jottyfan.quickiemod.blockentity.BlockStackerEntity;
import de.jottyfan.quickiemod.blocks.help.BlockStacker;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState;
import net.minecraft.block.BlockWithEntity;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.screen.NamedScreenHandlerFactory;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.util.ActionResult;
import net.minecraft.util.ItemScatterer;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class BlockStackerEast extends BlockWithEntity implements BlockStacker {
public BlockStackerEast() {
super(AbstractBlock.Settings.create().hardness(2.5f));
}
@Override
public Direction getSourceOffset() {
return Direction.WEST;
}
@Override
public Direction getDestOffset() {
return Direction.EAST;
}
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState state) {
return new BlockStackerEntity(pos, state);
}
@Override
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return List.of(new ItemStack(QuickieBlocks.BLOCKSTACKEREAST.getBlock()));
}
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state,
BlockEntityType<T> type) {
return validateTicker(type, BlockEntityTypes.BLOCKSTACKER_ENTITY,
(world1, pos, state1, be) -> BlockStackerEntity.tick(world1, pos, state1, be));
}
@Override
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
if (!world.isClient) {
NamedScreenHandlerFactory screenHandlerFactory = state.createScreenHandlerFactory(world, pos);
if (screenHandlerFactory != null) {
player.openHandledScreen(screenHandlerFactory);
}
}
return ActionResult.SUCCESS;
}
@Override
public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) {
if (state.getBlock() != newState.getBlock()) {
BlockEntity blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof BlockStackerEntity) {
ItemScatterer.spawn(world, pos, (BlockStackerEntity) blockEntity);
// update comparators
world.updateComparators(pos, this);
}
super.onStateReplaced(state, world, pos, newState, moved);
}
}
@Override
public boolean hasComparatorOutput(BlockState state) {
return true;
}
@Override
public int getComparatorOutput(BlockState state, World world, BlockPos pos) {
return ScreenHandler.calculateComparatorOutput(world.getBlockEntity(pos));
}
@Override
protected MapCodec<? extends BlockWithEntity> getCodec() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -0,0 +1,111 @@
package de.jottyfan.quickiemod.blocks;
import java.util.List;
import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.blockentity.BlockEntityTypes;
import de.jottyfan.quickiemod.blockentity.BlockStackerEntity;
import de.jottyfan.quickiemod.blocks.help.BlockStacker;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState;
import net.minecraft.block.BlockWithEntity;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.screen.NamedScreenHandlerFactory;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.util.ActionResult;
import net.minecraft.util.ItemScatterer;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class BlockStackerNorth extends BlockWithEntity implements BlockStacker {
public BlockStackerNorth() {
super(AbstractBlock.Settings.create().hardness(2.5f));
}
@Override
public Direction getSourceOffset() {
return Direction.SOUTH;
}
@Override
public Direction getDestOffset() {
return Direction.NORTH;
}
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState state) {
return new BlockStackerEntity(pos, state);
}
@Override
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return List.of(new ItemStack(QuickieBlocks.BLOCKSTACKERNORTH.getBlock()));
}
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state,
BlockEntityType<T> type) {
return validateTicker(type, BlockEntityTypes.BLOCKSTACKER_ENTITY,
(world1, pos, state1, be) -> BlockStackerEntity.tick(world1, pos, state1, be));
}
@Override
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
if (!world.isClient) {
NamedScreenHandlerFactory screenHandlerFactory = state.createScreenHandlerFactory(world, pos);
if (screenHandlerFactory != null) {
player.openHandledScreen(screenHandlerFactory);
}
}
return ActionResult.SUCCESS;
}
@Override
public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) {
if (state.getBlock() != newState.getBlock()) {
BlockEntity blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof BlockStackerEntity) {
ItemScatterer.spawn(world, pos, (BlockStackerEntity) blockEntity);
// update comparators
world.updateComparators(pos, this);
}
super.onStateReplaced(state, world, pos, newState, moved);
}
}
@Override
public boolean hasComparatorOutput(BlockState state) {
return true;
}
@Override
public int getComparatorOutput(BlockState state, World world, BlockPos pos) {
return ScreenHandler.calculateComparatorOutput(world.getBlockEntity(pos));
}
@Override
protected MapCodec<? extends BlockWithEntity> getCodec() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -0,0 +1,111 @@
package de.jottyfan.quickiemod.blocks;
import java.util.List;
import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.blockentity.BlockEntityTypes;
import de.jottyfan.quickiemod.blockentity.BlockStackerEntity;
import de.jottyfan.quickiemod.blocks.help.BlockStacker;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState;
import net.minecraft.block.BlockWithEntity;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.screen.NamedScreenHandlerFactory;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.util.ActionResult;
import net.minecraft.util.ItemScatterer;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class BlockStackerSouth extends BlockWithEntity implements BlockStacker {
public BlockStackerSouth() {
super(AbstractBlock.Settings.create().hardness(2.5f));
}
@Override
public Direction getSourceOffset() {
return Direction.NORTH;
}
@Override
public Direction getDestOffset() {
return Direction.SOUTH;
}
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState state) {
return new BlockStackerEntity(pos, state);
}
@Override
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return List.of(new ItemStack(QuickieBlocks.BLOCKSTACKERSOUTH.getBlock()));
}
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state,
BlockEntityType<T> type) {
return validateTicker(type, BlockEntityTypes.BLOCKSTACKER_ENTITY,
(world1, pos, state1, be) -> BlockStackerEntity.tick(world1, pos, state1, be));
}
@Override
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
if (!world.isClient) {
NamedScreenHandlerFactory screenHandlerFactory = state.createScreenHandlerFactory(world, pos);
if (screenHandlerFactory != null) {
player.openHandledScreen(screenHandlerFactory);
}
}
return ActionResult.SUCCESS;
}
@Override
public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) {
if (state.getBlock() != newState.getBlock()) {
BlockEntity blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof BlockStackerEntity) {
ItemScatterer.spawn(world, pos, (BlockStackerEntity) blockEntity);
// update comparators
world.updateComparators(pos, this);
}
super.onStateReplaced(state, world, pos, newState, moved);
}
}
@Override
public boolean hasComparatorOutput(BlockState state) {
return true;
}
@Override
public int getComparatorOutput(BlockState state, World world, BlockPos pos) {
return ScreenHandler.calculateComparatorOutput(world.getBlockEntity(pos));
}
@Override
protected MapCodec<? extends BlockWithEntity> getCodec() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -0,0 +1,111 @@
package de.jottyfan.quickiemod.blocks;
import java.util.List;
import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.blockentity.BlockEntityTypes;
import de.jottyfan.quickiemod.blockentity.BlockStackerEntity;
import de.jottyfan.quickiemod.blocks.help.BlockStacker;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState;
import net.minecraft.block.BlockWithEntity;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.screen.NamedScreenHandlerFactory;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.util.ActionResult;
import net.minecraft.util.ItemScatterer;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class BlockStackerUp extends BlockWithEntity implements BlockStacker {
public BlockStackerUp() {
super(AbstractBlock.Settings.create().hardness(2.5f));
}
@Override
public Direction getSourceOffset() {
return Direction.DOWN;
}
@Override
public Direction getDestOffset() {
return Direction.UP;
}
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState state) {
return new BlockStackerEntity(pos, state);
}
@Override
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return List.of(new ItemStack(QuickieBlocks.BLOCKSTACKERUP.getBlock()));
}
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state,
BlockEntityType<T> type) {
return validateTicker(type, BlockEntityTypes.BLOCKSTACKER_ENTITY,
(world1, pos, state1, be) -> BlockStackerEntity.tick(world1, pos, state1, be));
}
@Override
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
if (!world.isClient) {
NamedScreenHandlerFactory screenHandlerFactory = state.createScreenHandlerFactory(world, pos);
if (screenHandlerFactory != null) {
player.openHandledScreen(screenHandlerFactory);
}
}
return ActionResult.SUCCESS;
}
@Override
public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) {
if (state.getBlock() != newState.getBlock()) {
BlockEntity blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof BlockStackerEntity) {
ItemScatterer.spawn(world, pos, (BlockStackerEntity) blockEntity);
// update comparators
world.updateComparators(pos, this);
}
super.onStateReplaced(state, world, pos, newState, moved);
}
}
@Override
public boolean hasComparatorOutput(BlockState state) {
return true;
}
@Override
public int getComparatorOutput(BlockState state, World world, BlockPos pos) {
return ScreenHandler.calculateComparatorOutput(world.getBlockEntity(pos));
}
@Override
protected MapCodec<? extends BlockWithEntity> getCodec() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -0,0 +1,111 @@
package de.jottyfan.quickiemod.blocks;
import java.util.List;
import com.mojang.serialization.MapCodec;
import de.jottyfan.quickiemod.blockentity.BlockEntityTypes;
import de.jottyfan.quickiemod.blockentity.BlockStackerEntity;
import de.jottyfan.quickiemod.blocks.help.BlockStacker;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState;
import net.minecraft.block.BlockWithEntity;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContextParameterSet.Builder;
import net.minecraft.screen.NamedScreenHandlerFactory;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.util.ActionResult;
import net.minecraft.util.ItemScatterer;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.World;
/**
*
* @author jotty
*
*/
public class BlockStackerWest extends BlockWithEntity implements BlockStacker {
public BlockStackerWest() {
super(AbstractBlock.Settings.create().hardness(2.5f));
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
return List.of(new ItemStack(QuickieBlocks.BLOCKSTACKERWEST.getBlock()));
}
@Override
public Direction getSourceOffset() {
return Direction.EAST;
}
@Override
public Direction getDestOffset() {
return Direction.WEST;
}
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState state) {
return new BlockStackerEntity(pos, state);
}
@Override
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state,
BlockEntityType<T> type) {
return validateTicker(type, BlockEntityTypes.BLOCKSTACKER_ENTITY,
(world1, pos, state1, be) -> BlockStackerEntity.tick(world1, pos, state1, be));
}
@Override
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
if (!world.isClient) {
NamedScreenHandlerFactory screenHandlerFactory = state.createScreenHandlerFactory(world, pos);
if (screenHandlerFactory != null) {
player.openHandledScreen(screenHandlerFactory);
}
}
return ActionResult.SUCCESS;
}
@Override
public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) {
if (state.getBlock() != newState.getBlock()) {
BlockEntity blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof BlockStackerEntity) {
ItemScatterer.spawn(world, pos, (BlockStackerEntity) blockEntity);
// update comparators
world.updateComparators(pos, this);
}
super.onStateReplaced(state, world, pos, newState, moved);
}
}
@Override
public boolean hasComparatorOutput(BlockState state) {
return true;
}
@Override
public int getComparatorOutput(BlockState state, World world, BlockPos pos) {
return ScreenHandler.calculateComparatorOutput(world.getBlockEntity(pos));
}
@Override
protected MapCodec<? extends BlockWithEntity> getCodec() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -9,6 +9,12 @@ import net.minecraft.block.Block;
*/ */
public enum QuickieBlocks { public enum QuickieBlocks {
// @formatter:off // @formatter:off
BLOCKSTACKERUP(new BlockStackerUp(), "blockstackerup"),
BLOCKSTACKERDOWN(new BlockStackerDown(), "blockstackerdown"),
BLOCKSTACKEREAST(new BlockStackerEast(), "blockstackereast"),
BLOCKSTACKERWEST(new BlockStackerWest(), "blockstackerwest"),
BLOCKSTACKERNORTH(new BlockStackerNorth(), "blockstackernorth"),
BLOCKSTACKERSOUTH(new BlockStackerSouth(), "blockstackersouth"),
DRILL_DOWN(new BlockDrillDown(), "drill"), DRILL_DOWN(new BlockDrillDown(), "drill"),
DRILL_EAST(new BlockDrillEast(), "drilleast"), DRILL_EAST(new BlockDrillEast(), "drilleast"),
DRILL_SOUTH(new BlockDrillSouth(), "drillsouth"), DRILL_SOUTH(new BlockDrillSouth(), "drillsouth"),

View File

@ -0,0 +1,25 @@
package de.jottyfan.quickiemod.blocks.help;
import net.minecraft.block.BlockEntityProvider;
import net.minecraft.util.math.Direction;
/**
*
* @author jotty
*
*/
public interface BlockStacker extends BlockEntityProvider {
/**
* define the source offset
*
* @return the direction of the source offset (1 block beside)
*/
public Direction getSourceOffset();
/**
* define the dest offset
*
* @return the direction of the dest offset (1 block beside)
*/
public Direction getDestOffset();
}

View File

@ -0,0 +1,30 @@
package de.jottyfan.quickiemod.container;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.inventory.SimpleInventory;
import net.minecraft.sound.SoundEvents;
/**
*
* @author jotty
*
*/
public class BlockStackerInventory extends SimpleInventory {
public BlockStackerInventory(Integer slotsize) {
super(slotsize);
}
@Override
public void onOpen(PlayerEntity player) {
super.onOpen(player);
player.playSound(SoundEvents.BLOCK_CHEST_OPEN, 1f, 1f);
}
@Override
public void onClose(PlayerEntity player) {
super.onClose(player);
player.playSound(SoundEvents.BLOCK_CHEST_CLOSE, 1f, 1f);
}
}

View File

@ -0,0 +1,44 @@
package de.jottyfan.quickiemod.container;
import de.jottyfan.quickiemod.QuickieMod;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.ingame.HandledScreen;
import net.minecraft.client.gui.screen.ingame.ScreenHandlerProvider;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
/**
*
* @author jotty
*
*/
@Environment(EnvType.CLIENT)
public class BlockStackerScreen extends HandledScreen<BlockStackerScreenHandler>
implements ScreenHandlerProvider<BlockStackerScreenHandler> {
private final static Identifier TEXTURE = Identifier.of(QuickieMod.MODID, "textures/gui/blockstacker.png");
private final Integer containerHeight = 222;
private final Integer containerWidth = 176;
public BlockStackerScreen(BlockStackerScreenHandler handler, PlayerInventory inventory, Text title) {
super(handler, inventory, title);
}
@Override
public void render(DrawContext drawContext, int mouseX, int mouseY, float partialTicks) {
this.renderInGameBackground(drawContext);
super.render(drawContext, mouseX, mouseY, partialTicks);
this.drawMouseoverTooltip(drawContext, mouseX, mouseY);
}
@Override
protected void drawBackground(DrawContext context, float delta, int mouseX, int mouseY) {
// context.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
int guiX = (this.width - this.containerWidth) / 2;
int guiY = (this.height - this.containerHeight) / 2;
super.renderInGameBackground(context);
context.drawTexture(TEXTURE, guiX, guiY, 0, 0, containerWidth, containerHeight);
}
}

View File

@ -0,0 +1,97 @@
package de.jottyfan.quickiemod.container;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.Inventory;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.NamedScreenHandlerFactory;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.screen.slot.Slot;
/**
*
* @author jotty
*
*/
public class BlockStackerScreenHandler extends ScreenHandler {
public static final Integer SLOTSIZE = 18;
private final Inventory inventory;
/**
* client constructor
*
* @param syncId
* @param playerInventory
*/
public BlockStackerScreenHandler(int syncId, PlayerInventory playerInventory) {
this(syncId, playerInventory, new BlockStackerInventory(SLOTSIZE));
}
/**
* server constructor
*
* @param syncId
* @param playerInventory
* @param inventory
*/
public BlockStackerScreenHandler(int syncId, PlayerInventory playerInventory, Inventory inventory) {
super(ScreenHandlerTypes.BLOCKSTACKER_SCREEN_HANDLER, syncId);
checkSize(inventory, SLOTSIZE);
this.inventory = inventory;
inventory.onOpen(playerInventory.player);
int m;
int l;
// whitelist
for (m = 0; m < 3; ++m) {
for (l = 0; l < 3; ++l) {
this.addSlot(new Slot(inventory, l + m * 3, 8 + l * 18, 17 + m * 18));
}
}
// blacklist
for (m = 0; m < 3; ++m) {
for (l = 0; l < 3; ++l) {
this.addSlot(new Slot(inventory, l + m * 3 + 9, 116 + l * 18, 17 + m * 18));
}
}
for (m = 0; m < 3; ++m) {
for (l = 0; l < 9; ++l) {
this.addSlot(new Slot(playerInventory, l + m * 9 + 9, 8 + l * 18, 84 + m * 18));
}
}
for (m = 0; m < 9; ++m) {
this.addSlot(new Slot(playerInventory, m, 8 + m * 18, 142));
}
}
@Override
public boolean canUse(PlayerEntity player) {
return this.inventory.canPlayerUse(player);
}
@Override
public ItemStack quickMove(PlayerEntity player, int invSlot) {
ItemStack newStack = ItemStack.EMPTY;
Slot slot = this.slots.get(invSlot);
if (slot != null && slot.hasStack()) {
ItemStack originalStack = slot.getStack();
newStack = originalStack.copy();
if (invSlot < this.inventory.size()) {
if (!this.insertItem(originalStack, this.inventory.size(), this.slots.size(), true)) {
return ItemStack.EMPTY;
}
} else if (!this.insertItem(originalStack, 0, this.inventory.size(), false)) {
return ItemStack.EMPTY;
}
if (originalStack.isEmpty()) {
slot.setStack(ItemStack.EMPTY);
} else {
slot.markDirty();
}
}
return newStack;
}
}

View File

@ -0,0 +1,133 @@
package de.jottyfan.quickiemod.container;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.inventory.Inventories;
import net.minecraft.inventory.Inventory;
import net.minecraft.item.ItemStack;
import net.minecraft.util.collection.DefaultedList;
/**
*
* @author jotty
*
* @see https://fabricmc.net/wiki/tutorial:inventory
*
*/
public interface ImplementedInventory extends Inventory {
/**
* Retrieves the item list of this inventory.
* Must return the same instance every time it's called.
*/
DefaultedList<ItemStack> getItems();
/**
* Creates an inventory from the item list.
*/
static ImplementedInventory of(DefaultedList<ItemStack> items) {
return () -> items;
}
/**
* Creates a new inventory with the specified size.
*/
static ImplementedInventory ofSize(int size) {
return of(DefaultedList.ofSize(size, ItemStack.EMPTY));
}
/**
* Returns the inventory size.
*/
@Override
default int size() {
return getItems().size();
}
/**
* Checks if the inventory is empty.
* @return true if this inventory has only empty stacks, false otherwise.
*/
@Override
default boolean isEmpty() {
for (int i = 0; i < size(); i++) {
ItemStack stack = getStack(i);
if (!stack.isEmpty()) {
return false;
}
}
return true;
}
/**
* Retrieves the item in the slot.
*/
@Override
default ItemStack getStack(int slot) {
return getItems().get(slot);
}
/**
* Removes items from an inventory slot.
* @param slot The slot to remove from.
* @param count How many items to remove. If there are less items in the slot than what are requested,
* takes all items in that slot.
*/
@Override
default ItemStack removeStack(int slot, int count) {
ItemStack result = Inventories.splitStack(getItems(), slot, count);
if (!result.isEmpty()) {
markDirty();
}
return result;
}
/**
* Removes all items from an inventory slot.
* @param slot The slot to remove from.
*/
@Override
default ItemStack removeStack(int slot) {
return Inventories.removeStack(getItems(), slot);
}
/**
* Replaces the current stack in an inventory slot with the provided stack.
* @param slot The inventory slot of which to replace the itemstack.
* @param stack The replacing itemstack. If the stack is too big for
* this inventory ({@link Inventory#getMaxCountPerStack()}),
* it gets resized to this inventory's maximum amount.
*/
@Override
default void setStack(int slot, ItemStack stack) {
getItems().set(slot, stack);
if (stack.getCount() > stack.getMaxCount()) {
stack.setCount(stack.getMaxCount());
}
}
/**
* Clears the inventory.
*/
@Override
default void clear() {
getItems().clear();
}
/**
* Marks the state as dirty.
* Must be called after changes in the inventory, so that the game can properly save
* the inventory contents and notify neighboring blocks of inventory changes.
*/
@Override
default void markDirty() {
// Override if you want behavior.
}
/**
* @return true if the player can use the inventory, false otherwise.
*/
@Override
default boolean canPlayerUse(PlayerEntity player) {
return true;
}
}

View File

@ -0,0 +1,14 @@
package de.jottyfan.quickiemod.container;
import net.minecraft.resource.featuretoggle.FeatureFlags;
import net.minecraft.screen.ScreenHandlerType;
/**
*
* @author jotty
*
*/
public class ScreenHandlerTypes {
public static final ScreenHandlerType<BlockStackerScreenHandler> BLOCKSTACKER_SCREEN_HANDLER = new ScreenHandlerType<>(BlockStackerScreenHandler::new,
FeatureFlags.VANILLA_FEATURES);
}

View File

@ -66,7 +66,7 @@ public class EventBlockBreak {
List<Block> validBlocks = tool.getBlockList(currentBlock); List<Block> validBlocks = tool.getBlockList(currentBlock);
HarvestRange range = tool.getRange(itemStack); HarvestRange range = tool.getRange(itemStack);
LOGGER.info("current tool: {}", tool); LOGGER.debug("current tool: {}", tool);
if (QuickieItems.SPEEDPOWDERAXE.getItem().equals(tool)) { if (QuickieItems.SPEEDPOWDERAXE.getItem().equals(tool)) {
return breakBlockRecursive(new ArrayList<>(), world, validBlocks, pos, tool, range, BlockBreakDirection.UPWARDS, return breakBlockRecursive(new ArrayList<>(), world, validBlocks, pos, tool, range, BlockBreakDirection.UPWARDS,

View File

@ -89,6 +89,14 @@ public class RegistryManager {
} }
public static final void registerBlockEntityTypes() { public static final void registerBlockEntityTypes() {
new BlockEntityTypes(); try {
Class.forName(BlockEntityTypes.class.getName());
LOGGER.info("registering block entity types");
} catch (ClassNotFoundException e) {
LOGGER.error("class BlockEntityType not loaded", e);
}
}
public static final void registerScreenHandlerTypes() {
} }
} }

View File

@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "quickiemod:block/blockstackerdown"
}
}
}

View File

@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "quickiemod:block/blockstackereast"
}
}
}

View File

@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "quickiemod:block/blockstackernorth"
}
}
}

View File

@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "quickiemod:block/blockstackersouth"
}
}
}

View File

@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "quickiemod:block/blockstackerup"
}
}
}

View File

@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "quickiemod:block/blockstackerwest"
}
}
}

View File

@ -0,0 +1,8 @@
{
"parent": "block/cube_bottom_top",
"textures": {
"bottom": "quickiemod:block/blockstackerout",
"side": "quickiemod:block/blockstackerdown",
"top": "quickiemod:block/blockstackerin"
}
}

View File

@ -0,0 +1,11 @@
{
"parent": "block/cube_directional",
"textures": {
"up": "quickiemod:block/blockstackerright",
"down": "quickiemod:block/blockstackerleft",
"north": "quickiemod:block/blockstackerleft",
"east": "quickiemod:block/blockstackerout",
"south": "quickiemod:block/blockstackerright",
"west": "quickiemod:block/blockstackerin"
}
}

View File

@ -0,0 +1,11 @@
{
"parent": "block/cube_directional",
"textures": {
"up": "quickiemod:block/blockstackerup",
"down": "quickiemod:block/blockstackerup",
"north": "quickiemod:block/blockstackerout",
"east": "quickiemod:block/blockstackerup",
"south": "quickiemod:block/blockstackerin",
"west": "quickiemod:block/blockstackerup"
}
}

View File

@ -0,0 +1,11 @@
{
"parent": "block/cube_directional",
"textures": {
"up": "quickiemod:block/blockstackerdown",
"down": "quickiemod:block/blockstackerdown",
"north": "quickiemod:block/blockstackerin",
"east": "quickiemod:block/blockstackerdown",
"south": "quickiemod:block/blockstackerout",
"west": "quickiemod:block/blockstackerdown"
}
}

View File

@ -0,0 +1,8 @@
{
"parent": "block/cube_bottom_top",
"textures": {
"bottom": "quickiemod:block/blockstackerin",
"side": "quickiemod:block/blockstackerup",
"top": "quickiemod:block/blockstackerout"
}
}

View File

@ -0,0 +1,11 @@
{
"parent": "block/cube_directional",
"textures": {
"up": "quickiemod:block/blockstackerleft",
"down": "quickiemod:block/blockstackerright",
"north": "quickiemod:block/blockstackerright",
"east": "quickiemod:block/blockstackerin",
"south": "quickiemod:block/blockstackerleft",
"west": "quickiemod:block/blockstackerout"
}
}

View File

@ -0,0 +1,10 @@
{
"parent": "quickiemod:block/blockstackerdown",
"display": {
"thirdperson": {
"rotation": [ 10, -45, 170 ],
"translation": [ 0, 1.5, -2.75 ],
"scale": [ 0.375, 0.375, 0.375 ]
}
}
}

View File

@ -0,0 +1,10 @@
{
"parent": "quickiemod:block/blockstackerwest",
"display": {
"thirdperson": {
"rotation": [ 10, -45, 170 ],
"translation": [ 0, 1.5, -2.75 ],
"scale": [ 0.375, 0.375, 0.375 ]
}
}
}

View File

@ -0,0 +1,10 @@
{
"parent": "quickiemod:block/blockstackernorth",
"display": {
"thirdperson": {
"rotation": [ 10, -45, 170 ],
"translation": [ 0, 1.5, -2.75 ],
"scale": [ 0.375, 0.375, 0.375 ]
}
}
}

View File

@ -0,0 +1,10 @@
{
"parent": "quickiemod:block/blockstackersouth",
"display": {
"thirdperson": {
"rotation": [ 10, -45, 170 ],
"translation": [ 0, 1.5, -2.75 ],
"scale": [ 0.375, 0.375, 0.375 ]
}
}
}

View File

@ -0,0 +1,10 @@
{
"parent": "quickiemod:block/blockstackerup",
"display": {
"thirdperson": {
"rotation": [ 10, -45, 170 ],
"translation": [ 0, 1.5, -2.75 ],
"scale": [ 0.375, 0.375, 0.375 ]
}
}
}

View File

@ -0,0 +1,10 @@
{
"parent": "quickiemod:block/blockstackereast",
"display": {
"thirdperson": {
"rotation": [ 10, -45, 170 ],
"translation": [ 0, 1.5, -2.75 ],
"scale": [ 0.375, 0.375, 0.375 ]
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 436 B

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"s s",
"scs",
" s "
],
"key": {
"s": {
"item": "quickiemod:speedingot"
},
"c": {
"item": "minecraft:chest"
}
},
"result": {
"id": "quickiemod:blockstackerdown",
"count": 4
}
}

View File

@ -0,0 +1,12 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "quickiemod:blockstackerup"
}
],
"result": {
"id": "quickiemod:blockstackerdown",
"count": 1
}
}

View File

@ -0,0 +1,12 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "quickiemod:blockstackerdown"
}
],
"result": {
"id": "quickiemod:blockstackereast",
"count": 1
}
}

View File

@ -0,0 +1,12 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "quickiemod:blockstackerwest"
}
],
"result": {
"id": "quickiemod:blockstackernorth",
"count": 1
}
}

View File

@ -0,0 +1,12 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "quickiemod:blockstackereast"
}
],
"result": {
"id": "quickiemod:blockstackersouth",
"count": 1
}
}

View File

@ -0,0 +1,12 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "quickiemod:blockstackernorth"
}
],
"result": {
"id": "quickiemod:blockstackerup",
"count": 1
}
}

View File

@ -0,0 +1,12 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "quickiemod:blockstackersouth"
}
],
"result": {
"id": "quickiemod:blockstackerwest",
"count": 1
}
}