From 0e8f0e2c9d1aa51dff6d824e484654e5f925d737 Mon Sep 17 00:00:00 2001 From: dmodoomsirius Date: Wed, 6 Apr 2016 09:42:02 -0400 Subject: [PATCH] initial gradle commit --- .gitignore | 37 + .gitmodules | 3 + .travis.yml | 25 + AI-Improvements.txt | 1 + AIImprovements.txt | 1 + BuiltBrokenScripts | 1 + build.gradle | 130 +++ build.properties | 4 + gradle.properties | 6 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53639 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 160 ++++ gradlew.bat | 90 ++ settings.gradle | 2 + .../woodenbucket/WoodenBucket.java | 143 ++++ .../woodenbucket/bucket/ItemWoodenBucket.java | 802 ++++++++++++++++++ .../woodenbucket/bucket/PamBucketRecipe.java | 36 + .../woodenbucket/fluid/BlockMilk.java | 33 + .../assets/woodenbucket/lang/en_US.lang | 15 + .../textures/blocks/milk_flow.png | Bin 0 -> 5342 bytes .../textures/blocks/milk_flow.png.mcmeta | 3 + .../textures/blocks/milk_still.png | Bin 0 -> 7237 bytes .../textures/blocks/milk_still.png.mcmeta | 5 + .../woodenbucket/textures/items/blank.png | Bin 0 -> 274 bytes .../textures/items/bucket.acacia.png | Bin 0 -> 515 bytes .../textures/items/bucket.alubrass.molten.png | Bin 0 -> 565 bytes .../textures/items/bucket.aluminum.molten.png | Bin 0 -> 563 bytes .../textures/items/bucket.alumite.molten.png | Bin 0 -> 497 bytes .../items/bucket.angmallen.molten.png | Bin 0 -> 565 bytes .../textures/items/bucket.ardite.molten.png | Bin 0 -> 572 bytes .../textures/items/bucket.big_oak.png | Bin 0 -> 502 bytes .../textures/items/bucket.birch.png | Bin 0 -> 555 bytes .../textures/items/bucket.blood.png | Bin 0 -> 511 bytes .../textures/items/bucket.bronze.molten.png | Bin 0 -> 572 bytes .../textures/items/bucket.charred.png | Bin 0 -> 432 bytes .../textures/items/bucket.cobalt.molten.png | Bin 0 -> 571 bytes .../textures/items/bucket.copper.molten.png | Bin 0 -> 469 bytes .../textures/items/bucket.electrum.molten.png | Bin 0 -> 565 bytes .../textures/items/bucket.emerald.molten.png | Bin 0 -> 499 bytes .../textures/items/bucket.ender.molten.png | Bin 0 -> 535 bytes .../textures/items/bucket.enderium.molten.png | Bin 0 -> 527 bytes .../textures/items/bucket.fluid.png | Bin 0 -> 285 bytes .../textures/items/bucket.fluid2.png | Bin 0 -> 309 bytes .../textures/items/bucket.fuel.png | Bin 0 -> 198 bytes .../textures/items/bucket.glass.molten.png | Bin 0 -> 494 bytes .../textures/items/bucket.glue.png | Bin 0 -> 543 bytes .../textures/items/bucket.gold.molten.png | Bin 0 -> 476 bytes .../textures/items/bucket.invar.molten.png | Bin 0 -> 532 bytes .../textures/items/bucket.iron.molten.png | Bin 0 -> 488 bytes .../textures/items/bucket.jungle.png | Bin 0 -> 542 bytes .../textures/items/bucket.lava.png | Bin 0 -> 492 bytes .../textures/items/bucket.lead.molten.png | Bin 0 -> 489 bytes .../textures/items/bucket.lumium.molten.png | Bin 0 -> 461 bytes .../items/bucket.manyullyn.molten.png | Bin 0 -> 491 bytes .../textures/items/bucket.milk.png | Bin 0 -> 365 bytes .../textures/items/bucket.mithril.molten.png | Bin 0 -> 485 bytes .../textures/items/bucket.nickel.molten.png | Bin 0 -> 566 bytes .../textures/items/bucket.oak.png | Bin 0 -> 563 bytes .../textures/items/bucket.obsidian.molten.png | Bin 0 -> 481 bytes .../textures/items/bucket.oil.png | Bin 0 -> 198 bytes .../textures/items/bucket.pigiron.molten.png | Bin 0 -> 565 bytes .../textures/items/bucket.redplasma.png | Bin 0 -> 208 bytes .../textures/items/bucket.shiny.molten.png | Bin 0 -> 576 bytes .../textures/items/bucket.signalum.molten.png | Bin 0 -> 475 bytes .../textures/items/bucket.silver.molten.png | Bin 0 -> 560 bytes .../textures/items/bucket.slime.blue.png | Bin 0 -> 560 bytes .../textures/items/bucket.spruce.png | Bin 0 -> 448 bytes .../textures/items/bucket.steel.molten.png | Bin 0 -> 492 bytes .../textures/items/bucket.tin.molten.png | Bin 0 -> 558 bytes temp-icon.png | Bin 0 -> 15144 bytes woodenBucketIcon36x36.png | Bin 0 -> 570 bytes 71 files changed, 1503 insertions(+) create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 .travis.yml create mode 100644 AI-Improvements.txt create mode 100644 AIImprovements.txt create mode 160000 BuiltBrokenScripts create mode 100644 build.gradle create mode 100644 build.properties create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle create mode 100644 src/main/java/com/builtbroken/woodenbucket/WoodenBucket.java create mode 100644 src/main/java/com/builtbroken/woodenbucket/bucket/ItemWoodenBucket.java create mode 100644 src/main/java/com/builtbroken/woodenbucket/bucket/PamBucketRecipe.java create mode 100644 src/main/java/com/builtbroken/woodenbucket/fluid/BlockMilk.java create mode 100644 src/main/resources/assets/woodenbucket/lang/en_US.lang create mode 100644 src/main/resources/assets/woodenbucket/textures/blocks/milk_flow.png create mode 100644 src/main/resources/assets/woodenbucket/textures/blocks/milk_flow.png.mcmeta create mode 100644 src/main/resources/assets/woodenbucket/textures/blocks/milk_still.png create mode 100644 src/main/resources/assets/woodenbucket/textures/blocks/milk_still.png.mcmeta create mode 100644 src/main/resources/assets/woodenbucket/textures/items/blank.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.acacia.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.alubrass.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.aluminum.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.alumite.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.angmallen.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.ardite.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.big_oak.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.birch.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.blood.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.bronze.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.charred.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.cobalt.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.copper.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.electrum.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.emerald.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.ender.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.enderium.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.fluid.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.fluid2.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.fuel.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.glass.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.glue.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.gold.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.invar.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.iron.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.jungle.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.lava.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.lead.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.lumium.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.manyullyn.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.milk.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.mithril.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.nickel.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.oak.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.obsidian.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.oil.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.pigiron.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.redplasma.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.shiny.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.signalum.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.silver.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.slime.blue.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.spruce.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.steel.molten.png create mode 100644 src/main/resources/assets/woodenbucket/textures/items/bucket.tin.molten.png create mode 100644 temp-icon.png create mode 100644 woodenBucketIcon36x36.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..973b917 --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +/bin +/out +/run +*.classpath +*.project +.settings/ +CREDITS-fml.txt +LICENSE-fml.txt +MinecraftForge-Credits.txt +MinecraftForge-License.txt +build/ +eclipse/ +forge-1.6.4-9.11.1.964-changelog.txt +.gradle/ +output/ +.cache +*.iml +*.ipr +*.iws +*.idea/ +logs/ +html/downloads/ +downloads/ +*.xml +VoltzEngine.txt +APP-AuthTest/ +CompiledWith.txt +banned-ips.json +banned-players.json +ops.json +whitelist.json +libs/CodeChickenCore-1.7.10-1.0.7.47-dev.jar +libs/CodeChickenLib-1.7.10-1.1.3.140-dev.jar +libs/NotEnoughItems-1.7.10-1.0.5.118-dev.jar +libs/Botania r1.7-229-deobf.jar +libs/industrialcraft-2-2.2.817-experimental-api.jar +libs/industrialcraft-2-2.2.817-experimental-dev.jar diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..017cb3e --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "BuiltBrokenScripts"] + path = BuiltBrokenScripts + url = https://github.com/BuiltBrokenModding/BuiltBrokenScripts diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..d72a14f --- /dev/null +++ b/.travis.yml @@ -0,0 +1,25 @@ +language: java +before_install: + - git submodule update --init --recursive + - chmod a+x gradlew +cache: + directories: + - $HOME/.gradle + - .gradle +sudo: false +notifications: + irc: + channels: + - "irc.esper.net#BBM-bots" + skip_join: true + template: + - "%{repository}#%{build_number} (%{branch} - %{commit} : %{author}): %{message} " + - "Change view : %{compare_url}" + - "Build details : %{build_url} : duration : %{duration}" +install: true +script: + - ./gradlew build javadoc coveralls jacocoTestReport publish -PbambooshortPlanName=VoltzEngine -Pdmodcurse=61545 -Plocal=true -S -i --refresh-dependencies +jdk: + - oraclejdk7 +after_success: + - bash <(curl -s https://codecov.io/bash) diff --git a/AI-Improvements.txt b/AI-Improvements.txt new file mode 100644 index 0000000..ff30087 --- /dev/null +++ b/AI-Improvements.txt @@ -0,0 +1 @@ +1.7.10-0.0.3b20160406094043 \ No newline at end of file diff --git a/AIImprovements.txt b/AIImprovements.txt new file mode 100644 index 0000000..28eb753 --- /dev/null +++ b/AIImprovements.txt @@ -0,0 +1 @@ +1.7.10-0.0.3b20160406094040 \ No newline at end of file diff --git a/BuiltBrokenScripts b/BuiltBrokenScripts new file mode 160000 index 0000000..e87651e --- /dev/null +++ b/BuiltBrokenScripts @@ -0,0 +1 @@ +Subproject commit e87651ec78fe330a681ee1c022199b39daf15174 diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..f667e85 --- /dev/null +++ b/build.gradle @@ -0,0 +1,130 @@ +buildscript { + repositories { + mavenCentral() + jcenter() + maven { + name = "forge" + url = "http://files.minecraftforge.net/maven" + } + maven { + name = "sonatype" + url = "https://oss.sonatype.org/content/repositories/snapshots/" + } + } + dependencies { + classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT' + } +} + +plugins { + id 'com.matthewprenger.cursegradle' version '1.0.1' + id 'net.saliman.cobertura' version '2.2.5' + id 'com.github.kt3k.coveralls' version '2.0.1' +} + +apply from: 'https://raw.githubusercontent.com/BuiltBrokenModding/BuiltBrokenScripts/buildScripts/index/index.gradle' +apply plugin: 'forge' +apply plugin: 'curseforge' +apply plugin: 'com.github.kt3k.coveralls' +apply plugin: 'jacoco' + +ext.buildProps = file "build.properties" + +println "Current Minecraft version = " + minecraft.apiVersion + +def currentJvm = org.gradle.internal.jvm.Jvm.current() +println "Current Java version = " + currentJvm + +buildProps.withReader { + def prop = new Properties() + prop.load(it) + ext.config = new ConfigSlurper().parse prop +} + +if (project.getProperty("bambooshortPlanName") == "BBM-Dev") { + group = "dev.builtbroken.woodenbucket" + archivesBaseName = "WoodenBucket" +} else { + group = "com.builtbroken.woodenbucket" + archivesBaseName = "WoodenBucket" +} + +println archivesBaseName + +version = "${project.minecraft.version}-${config.version.mod.major}.${config.version.mod.minor}.${config.version.mod.revis}b" + +// This is used to set the local version +if (project.hasProperty("bambooBuildNumber")) + version += project.bambooBuildNumber +else + version += getDate() + +println "version = "+ version + +minecraft { + replace "@MAJOR@", config.version.mod.major + replace "@MINOR@", config.version.mod.minor + replace "@REVIS@", config.version.mod.revis + + if (project.hasProperty("bambooBuildNumber")) { + replace "@BUILD@", project.bambooBuildNumber + } + else { + replace "@BUILD@", getDate() + } +} +processResources { + from(sourceSets.main.resources.srcDirs) { + //include '**/*.lang' + include '**/*.info' + include '**/*.properties' + + expand 'version': project.version, 'mcversion': project.minecraft.version + // replace version and MCVersion + } + + // copy everything else, thats not text + from(sourceSets.main.resources.srcDirs) { + exclude '**/*.info' + exclude '**/*.properties' + } +} + +archivesBaseName = "WoodenBucket" + +repositories { + maven { + name "BuiltBroken" + url "http://ci.builtbroken.com/maven/" + } +} + +jar { + manifest.mainAttributes( + "Built-By": System.getProperty('user.name'), + "Created-By": currentJvm, + "Implementation-Title": archivesBaseName, + "Implementation-Version": project.version, + "FMLAT": "AI_at.cfg", + ) +} + +dependencies +{ + testCompile 'junit:junit:4.11' +} + +def getDate() { + def date = new Date() + def formattedDate = date.format('yyyyMMddHHmmss') + return formattedDate +} + +jacocoTestReport { + reports { + xml.enabled = true // coveralls plugin depends on xml format report + html.enabled = true + } +} + +file("AI-Improvements.txt").text = version; diff --git a/build.properties b/build.properties new file mode 100644 index 0000000..b426fe6 --- /dev/null +++ b/build.properties @@ -0,0 +1,4 @@ +version.mod.major=0 +version.mod.minor=0 +version.mod.revis=3 + diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..66accd5 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,6 @@ +version_major=0 +version_minor=0 +version_revis=3 +archivebase=AIImprovements +groupid=aiimprovements +org=builtbroken \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..2c6137b87896c8f70315ae454e00a969ef5f6019 GIT binary patch literal 53639 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 F{{tUq7iIte literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..504eba0 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Wed Apr 06 09:40:47 EDT 2016 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-2.12-bin.zip diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..9d82f78 --- /dev/null +++ b/gradlew @@ -0,0 +1,160 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..5f19212 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..539181a --- /dev/null +++ b/settings.gradle @@ -0,0 +1,2 @@ +rootProject.name = 'WoodenBucket' + diff --git a/src/main/java/com/builtbroken/woodenbucket/WoodenBucket.java b/src/main/java/com/builtbroken/woodenbucket/WoodenBucket.java new file mode 100644 index 0000000..aa75e68 --- /dev/null +++ b/src/main/java/com/builtbroken/woodenbucket/WoodenBucket.java @@ -0,0 +1,143 @@ +package com.builtbroken.woodenbucket; + +import com.builtbroken.woodenbucket.bucket.ItemWoodenBucket; +import com.builtbroken.woodenbucket.bucket.PamBucketRecipe; +import com.builtbroken.woodenbucket.fluid.BlockMilk; +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; +import net.minecraftforge.oredict.RecipeSorter; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.io.File; + +import static net.minecraftforge.oredict.RecipeSorter.Category.SHAPED; + +/** + * Created by Dark on 7/25/2015. + */ +@Mod(modid = WoodenBucket.DOMAIN, name = "Wooden Bucket", version = "@MAJOR@.@MINOR@.@REVIS@.@BUILD@") +public class WoodenBucket +{ + public static final String DOMAIN = "woodenbucket"; + public static final String PREFIX = DOMAIN + ":"; + + public static Logger LOGGER; + + public static Item itemBucket; + + public static Fluid fluid_milk; + + public static Configuration config; + + public static boolean PREVENT_HOT_FLUID_USAGE = true; + public static boolean DAMAGE_BUCKET_WITH_HOT_FLUID = true; + public static boolean BURN_ENTITY_WITH_HOT_FLUID = true; + public static boolean GENERATE_MILK_FLUID = true; + + + @Mod.EventHandler + public void preInit(FMLPreInitializationEvent event) + { + LOGGER = LogManager.getLogger("WoodenBucket"); + config = new Configuration(new File(event.getModConfigurationDirectory(), "bbm/Wooden_Bucket.cfg")); + config.load(); + PREVENT_HOT_FLUID_USAGE = config.getBoolean("PreventHotFluidUsage", "WoodenBucketUsage", PREVENT_HOT_FLUID_USAGE, "Enables settings that attempt to prevent players from wanting to use the bucket for moving hot fluids"); + DAMAGE_BUCKET_WITH_HOT_FLUID = config.getBoolean("DamageBucketWithHotFluid", "WoodenBucketUsage", DAMAGE_BUCKET_WITH_HOT_FLUID, "Will randomly destroy the bucket if it contains hot fluid, lava in other words"); + BURN_ENTITY_WITH_HOT_FLUID = config.getBoolean("BurnPlayerWithHotFluid", "WoodenBucketUsage", BURN_ENTITY_WITH_HOT_FLUID, "Will light the player on fire if the bucket contains a hot fluid, lava in other words"); + GENERATE_MILK_FLUID = config.getBoolean("EnableMilkFluidGeneration", Configuration.CATEGORY_GENERAL, GENERATE_MILK_FLUID, "Will generate a fluid for milk allowing for the bucket to be used for gathering milk from cows"); + + + itemBucket = new ItemWoodenBucket(); + GameRegistry.registerItem(itemBucket, "wbBucket", DOMAIN); + } + + @Mod.EventHandler + public void init(FMLInitializationEvent event) + { + + } + + @Mod.EventHandler + public void postInit(FMLPostInitializationEvent event) + { + if (GENERATE_MILK_FLUID && FluidRegistry.getFluid("milk") == null) + { + fluid_milk = new Fluid("milk"); + FluidRegistry.registerFluid(fluid_milk); + Block blockMilk = new BlockMilk(fluid_milk); + GameRegistry.registerBlock(blockMilk, "wbBlockMilk"); + } + + + //TODO add crafting recipes for milk bucket + // TODO add proper ore shaped recipes so modded sticks and other items can be used in the recipes + GameRegistry.addShapedRecipe(new ItemStack(itemBucket, 1, ItemWoodenBucket.BucketTypes.OAK.ordinal()), " s ", "wcw", " w ", 'w', new ItemStack(Blocks.planks, 1, 0), 's', Items.stick, 'c', new ItemStack(Items.dye, 1, 2)); + GameRegistry.addShapedRecipe(new ItemStack(itemBucket, 1, ItemWoodenBucket.BucketTypes.SPRUCE.ordinal()), " s ", "wcw", " w ", 'w', new ItemStack(Blocks.planks, 1, 1), 's', Items.stick, 'c', new ItemStack(Items.dye, 1, 2)); + GameRegistry.addShapedRecipe(new ItemStack(itemBucket, 1, ItemWoodenBucket.BucketTypes.BIRCH.ordinal()), " s ", "wcw", " w ", 'w', new ItemStack(Blocks.planks, 1, 2), 's', Items.stick, 'c', new ItemStack(Items.dye, 1, 2)); + GameRegistry.addShapedRecipe(new ItemStack(itemBucket, 1, ItemWoodenBucket.BucketTypes.JUNGLE.ordinal()), " s ", "wcw", " w ", 'w', new ItemStack(Blocks.planks, 1, 3), 's', Items.stick, 'c', new ItemStack(Items.dye, 1, 2)); + GameRegistry.addShapedRecipe(new ItemStack(itemBucket, 1, ItemWoodenBucket.BucketTypes.ACACIA.ordinal()), " s ", "wcw", " w ", 'w', new ItemStack(Blocks.planks, 1, 4), 's', Items.stick, 'c', new ItemStack(Items.dye, 1, 2)); + GameRegistry.addShapedRecipe(new ItemStack(itemBucket, 1, ItemWoodenBucket.BucketTypes.BIG_OAK.ordinal()), " s ", "wcw", " w ", 'w', new ItemStack(Blocks.planks, 1, 5), 's', Items.stick, 'c', new ItemStack(Items.dye, 1, 2)); + for (ItemStack itemstack : OreDictionary.getOres("planks")) + { + if (itemstack != null && itemstack.getItem() != Item.getItemFromBlock(Blocks.planks)) + { + GameRegistry.addShapedRecipe(new ItemStack(itemBucket, 1, ItemWoodenBucket.BucketTypes.OAK.ordinal()), " s ", "wcw", " w ", 'w', itemstack, 's', Items.stick, 'c', new ItemStack(Items.dye, 1, 2)); + } + } + + //TODO add pam's harvest craft support + if (Loader.isModLoaded("harvestcraft")) + { + if (config.getBoolean("EnableRegisteringMilkBucket", "PamHarvestCraftSupport", true, "Registers the milk bucket to the ore dictionary to be used in Pam's Harvest Craft recipes")) + { + RecipeSorter.register(PREFIX + "woodenBucketFreshMilk", PamBucketRecipe.class, SHAPED, "after:minecraft:shaped"); + if (FluidRegistry.getFluid("milk") != null) + { + Item itemFreshMilk = (Item) Item.itemRegistry.getObject("harvestcraft:freshmilkItem"); + if (itemFreshMilk == null) + LOGGER.error("Failed to find item harvestcraft:freshmilkItem"); + + FluidStack milkFluidStack = new FluidStack(FluidRegistry.getFluid("milk"), FluidContainerRegistry.BUCKET_VOLUME); + for (ItemWoodenBucket.BucketTypes type : ItemWoodenBucket.BucketTypes.values()) + { + ItemStack milkBucket = new ItemStack(itemBucket, 1, type.ordinal()); + ((ItemWoodenBucket) itemBucket).fill(milkBucket, milkFluidStack, true); + /** OreDictionary.registerOre("listAllmilk", milkBucket); */ + + GameRegistry.addRecipe(new PamBucketRecipe(milkBucket, new ItemStack(itemFreshMilk, 4, 0))); + } + } + } + } + + /** + if(config.getBoolean("listAllWater", "OreDictionary", true, "Lists all water buckets under the ore dictionary name listAllWater")) + { + FluidStack waterFluidStack = new FluidStack(FluidRegistry.WATER, FluidContainerRegistry.BUCKET_VOLUME); + for (ItemWoodenBucket.BucketTypes type : ItemWoodenBucket.BucketTypes.values()) + { + ItemStack waterBucket = new ItemStack(itemBucket, 1, type.ordinal()); + ((ItemWoodenBucket) itemBucket).fill(waterBucket, waterFluidStack, true); + OreDictionary.registerOre("listAllWater", waterBucket); + } + } + */ + config.save(); + } +} diff --git a/src/main/java/com/builtbroken/woodenbucket/bucket/ItemWoodenBucket.java b/src/main/java/com/builtbroken/woodenbucket/bucket/ItemWoodenBucket.java new file mode 100644 index 0000000..b45b96f --- /dev/null +++ b/src/main/java/com/builtbroken/woodenbucket/bucket/ItemWoodenBucket.java @@ -0,0 +1,802 @@ +package com.builtbroken.woodenbucket.bucket; + +import com.builtbroken.woodenbucket.WoodenBucket; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.passive.EntityCow; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.IIcon; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.fluids.*; + +import java.util.HashMap; +import java.util.List; + +/** + * Improved version of the vanilla bucket that can accept any fluid type. This + * version uses a wooden texture for the bucket body. + * + * @author Dark + * @version 7/25/2015. + */ +public class ItemWoodenBucket extends Item implements IFluidContainerItem +{ + @SideOnly(Side.CLIENT) + public static IIcon fluidTextureWater; + + @SideOnly(Side.CLIENT) + public static IIcon fluidTextureWhite; + + @SideOnly(Side.CLIENT) + public static IIcon fluidTextureLava; + + @SideOnly(Side.CLIENT) + public static IIcon blankTexture; + + @SideOnly(Side.CLIENT) + public static IIcon acaciaTexture; + + @SideOnly(Side.CLIENT) + public static IIcon birchTexture; + + @SideOnly(Side.CLIENT) + public static IIcon jungleTexture; + + @SideOnly(Side.CLIENT) + public static IIcon spruceTexture; + + @SideOnly(Side.CLIENT) + public static IIcon charredTexture; + + @SideOnly(Side.CLIENT) + public static IIcon bigOakTexture; + + public static HashMap fluidToIconMap = new HashMap(); + + //TODO rename to fluid.molten + public static String[] supportedFluidTextures = new String[]{"milk", "blood", "slime.blue", "fuel", "aluminum.molten", "glue", "alubrass.molten", "alumite.molten", "angmallen.molten", "ardite.molten", "bronze.molten", "cobalt.molten", "copper.molten", "electrum.molten", "emerald.molten", "ender.molten", "enderium.molten", "glass.molten", "gold.molten", "invar.molten", "iron.molten", "lead.molten", "lumium.molten", "manyullyn.molten", "mithril.molten", "nickel.molten", "obsidian.molten", "pigiron.molten", "shiny.molten", "signalum.molten", "silver.molten", "steel.molten", "tin.molten", "oil", "redplasma"}; + + public ItemWoodenBucket() + { + this.maxStackSize = 1; + this.setUnlocalizedName(WoodenBucket.PREFIX + "WoodenBucket"); + this.setCreativeTab(CreativeTabs.tabMisc); + this.setHasSubtypes(true); + MinecraftForge.EVENT_BUS.register(this); + } + + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) + { + if (!isEmpty(stack)) + { + list.add(StatCollector.translateToLocal(getUnlocalizedName() + ".fluid.name") + ": " + getFluid(stack).getLocalizedName()); + list.add(StatCollector.translateToLocal(getUnlocalizedName() + ".fluid.amount.name") + ": " + getFluid(stack).amount + "mb"); + } + else if (player.capabilities.isCreativeMode) + { + list.add("\u00a7c" + StatCollector.translateToLocal(getUnlocalizedName() + ".creative.void")); + } + } + + @SubscribeEvent + public void onRightClickEvent(PlayerInteractEvent event) + { + if (!event.world.isRemote && event.action == PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK && event.entityPlayer.getCurrentEquippedItem() != null && event.entityPlayer.getCurrentEquippedItem().getItem() == this) + { + TileEntity tile = event.world.getTileEntity(event.x, event.y, event.z); + + if (tile instanceof IFluidHandler) + { + boolean isBucketEmpty = this.isEmpty(event.entityPlayer.getCurrentEquippedItem()); + ForgeDirection side = ForgeDirection.getOrientation(event.face); + if (isBucketEmpty) + { + FluidStack drainedFromTank = ((IFluidHandler) tile).drain(side, getCapacity(event.entityPlayer.getCurrentEquippedItem()), false); + if (drainedFromTank != null && drainedFromTank.getFluid() != null && ((IFluidHandler) tile).canDrain(side, drainedFromTank.getFluid())) + { + if (event.entityPlayer.capabilities.isCreativeMode) + { + ((IFluidHandler) tile).drain(side, FluidContainerRegistry.BUCKET_VOLUME, true); + } + else + { + ItemStack bucket = new ItemStack(this, 1, event.entityPlayer.getCurrentEquippedItem().getItemDamage()); + int filledIntoBucket = fill(bucket, drainedFromTank, true); + if (filledIntoBucket > 0) + { + ((IFluidHandler) tile).drain(side, filledIntoBucket, true); + event.entityPlayer.inventory.setInventorySlotContents(event.entityPlayer.inventory.currentItem, consumeBucket(event.entityPlayer.getCurrentEquippedItem(), event.entityPlayer, bucket)); + event.entityPlayer.inventoryContainer.detectAndSendChanges(); + } + } + } + } + else + { + FluidStack containedFluid = getFluid(event.entityPlayer.getCurrentEquippedItem()); + if (((IFluidHandler) tile).canFill(side, containedFluid.getFluid())) + { + int filled = ((IFluidHandler) tile).fill(side, containedFluid, true); + if (!event.entityPlayer.capabilities.isCreativeMode) + { + drain(event.entityPlayer.getCurrentEquippedItem(), filled, true); + containedFluid = getFluid(event.entityPlayer.getCurrentEquippedItem()); + if (containedFluid == null || containedFluid.amount == 0) + { + event.entityPlayer.inventory.setInventorySlotContents(event.entityPlayer.inventory.currentItem, consumeBucket(event.entityPlayer.getCurrentEquippedItem(), event.entityPlayer, new ItemStack(this, 1, event.entityPlayer.getCurrentEquippedItem().getItemDamage()))); + event.entityPlayer.inventoryContainer.detectAndSendChanges(); + } + } + } + } + if (event.isCancelable()) + { + event.setCanceled(true); + } + } + } + } + + @Override + public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer player) + { + boolean isBucketEmpty = this.isEmpty(itemstack); + MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, player, isBucketEmpty); + + if (movingobjectposition != null) + { + if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) + { + int i = movingobjectposition.blockX; + int j = movingobjectposition.blockY; + int k = movingobjectposition.blockZ; + + TileEntity tile = world.getTileEntity(i, j, k); + + if (tile instanceof IFluidHandler) + { + return itemstack; + } + + + if (!world.canMineBlock(player, i, j, k)) + { + return itemstack; + } + + //Fill bucket code + if (isBucketEmpty) + { + if (player.canPlayerEdit(i, j, k, movingobjectposition.sideHit, itemstack)) + { + return pickupFluid(player, itemstack, world, i, j, k); + } + } + else //Empty bucket code + { + Block block = world.getBlock(i, j, k); + Material material = block.getMaterial(); + + if (!material.isSolid() && block.isReplaceable(world, i, j, k) && player.canPlayerEdit(i, j, k, movingobjectposition.sideHit, itemstack)) + { + return placeFluid(player, itemstack, world, i, j, k); + } + + //Offset position based on side hit + if (movingobjectposition.sideHit == 0) + { + --j; + } + + if (movingobjectposition.sideHit == 1) + { + ++j; + } + + if (movingobjectposition.sideHit == 2) + { + --k; + } + + if (movingobjectposition.sideHit == 3) + { + ++k; + } + + if (movingobjectposition.sideHit == 4) + { + --i; + } + + if (movingobjectposition.sideHit == 5) + { + ++i; + } + + if (player.canPlayerEdit(i, j, k, movingobjectposition.sideHit, itemstack)) + { + return placeFluid(player, itemstack, world, i, j, k); + } + } + } + } + return itemstack; + + } + + protected ItemStack consumeBucket(ItemStack currentStack, EntityPlayer player, ItemStack newStack) + { + //Creative mode we don't care about items + if (player.capabilities.isCreativeMode) + { + return currentStack; + } + //If we only have one bucket consume and replace slot with new bucket + else if (--currentStack.stackSize <= 0) + { + return newStack; + } + //If we have more than one bucket try to add the new one to the player's inventory + else + { + if (!player.inventory.addItemStackToInventory(newStack)) + { + player.dropPlayerItemWithRandomChoice(newStack, false); + } + + return currentStack; + } + } + + public ItemStack pickupFluid(EntityPlayer player, ItemStack itemstack, World world, int i, int j, int k) + { + Block block = world.getBlock(i, j, k); + int l = world.getBlockMetadata(i, j, k); + + if (block == Blocks.water && l == 0) + { + if (world.setBlockToAir(i, j, k)) + { + ItemStack bucket = new ItemStack(this, 1, itemstack.getItemDamage()); + fill(bucket, new FluidStack(FluidRegistry.WATER, FluidContainerRegistry.BUCKET_VOLUME), true); + return this.consumeBucket(itemstack, player, bucket); + } + } + else if (block == Blocks.lava && l == 0) + { + if (world.setBlockToAir(i, j, k)) + { + ItemStack bucket = new ItemStack(this, 1, itemstack.getItemDamage()); + fill(bucket, new FluidStack(FluidRegistry.LAVA, FluidContainerRegistry.BUCKET_VOLUME), true); + return this.consumeBucket(itemstack, player, bucket); + } + } + else if (block instanceof IFluidBlock && ((IFluidBlock) block).canDrain(world, i, j, k)) + { + int meta = world.getBlockMetadata(i, j, k); + FluidStack drainedFluid = ((IFluidBlock) block).drain(world, i, j, k, false); + + //TODO allow partial fills + if (isValidFluidStack(drainedFluid)) + { + ItemStack bucket = new ItemStack(this, 1, itemstack.getItemDamage()); + drainedFluid = ((IFluidBlock) block).drain(world, i, j, k, true); + + if (isValidFluidStack(drainedFluid)) + { + fill(bucket, drainedFluid, true); + return this.consumeBucket(itemstack, player, bucket); + } + else if (world.getBlock(i, j, k) != block) + { + world.setBlock(i, j, k, block, meta, 3); + } + } + } + return itemstack; + } + + private boolean isValidFluidStack(FluidStack drainedFluid) + { + return drainedFluid != null && drainedFluid.getFluid() != null && drainedFluid.amount == FluidContainerRegistry.BUCKET_VOLUME; + } + + /** + * Attempts to place the liquid contained inside the bucket. + */ + public ItemStack placeFluid(EntityPlayer player, ItemStack itemstack, World world, int x, int y, int z) + { + Block block = world.getBlock(x, y, z); + //Material material = block.getMaterial(); + if (isFull(itemstack)) + { + if (world.isAirBlock(x, y, z) || block.isReplaceable(world, x, y, z)) + { + FluidStack stack = getFluid(itemstack); + if (stack != null && stack.getFluid() != null && stack.getFluid().canBePlacedInWorld() && stack.getFluid().getBlock() != null) + { + //TODO add support for oil and other fuel types to explode in the nether + if (world.provider.isHellWorld && stack.getFluid().getUnlocalizedName().contains("water")) + { + world.playSoundEffect((double) ((float) x + 0.5F), (double) ((float) y + 0.5F), (double) ((float) z + 0.5F), "random.fizz", 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); + + for (int l = 0; l < 8; ++l) + { + world.spawnParticle("largesmoke", (double) x + Math.random(), (double) y + Math.random(), (double) z + Math.random(), 0.0D, 0.0D, 0.0D); + } + return consumeBucket(itemstack, player, new ItemStack(this, 1, itemstack.getItemDamage())); + } + else + { + if (!world.isRemote) + { + world.func_147480_a(x, y, z, true); + } + if (stack.getFluid() == FluidRegistry.WATER) + { + world.setBlock(x, y, z, Blocks.flowing_water); + } + else if (stack.getFluid() == FluidRegistry.LAVA) + { + world.setBlock(x, y, z, Blocks.flowing_lava); + } + else + { + world.setBlock(x, y, z, stack.getFluid().getBlock()); + } + return consumeBucket(itemstack, player, new ItemStack(this, 1, itemstack.getItemDamage())); + } + } + } + } + else if (!world.isRemote) + { + player.addChatComponentMessage(new ChatComponentText(getUnlocalizedName() + ".volume.notEnoughForFullBlock")); + } + return itemstack; + } + + /** + * Helper method to check if the bucket is empty + * + * @param container - bucket + * @return true if it is empty + */ + public boolean isEmpty(ItemStack container) + { + return getFluid(container) == null; + } + + /** + * Helper method to check if the bucket is full + * + * @param container - bucket + * @return true if it is full + */ + public boolean isFull(ItemStack container) + { + FluidStack stack = getFluid(container); + if (stack != null) + { + return stack.amount == getCapacity(container); + } + return false; + } + + /* IFluidContainerItem */ + @Override + public FluidStack getFluid(ItemStack container) + { + if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("Fluid")) + { + return null; + } + return FluidStack.loadFluidStackFromNBT(container.stackTagCompound.getCompoundTag("Fluid")); + } + + @Override + public int getCapacity(ItemStack container) + { + return FluidContainerRegistry.BUCKET_VOLUME; + } + + @Override + public int fill(ItemStack container, FluidStack resource, boolean doFill) + { + if (resource != null) + { + if (!doFill) + { + if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("Fluid")) + { + return Math.min(getCapacity(container), resource.amount); + } + + FluidStack stack = FluidStack.loadFluidStackFromNBT(container.stackTagCompound.getCompoundTag("Fluid")); + + if (stack == null) + { + return Math.min(getCapacity(container), resource.amount); + } + + if (!stack.isFluidEqual(resource)) + { + return 0; + } + + return Math.min(getCapacity(container) - stack.amount, resource.amount); + } + + if (container.stackTagCompound == null) + { + container.stackTagCompound = new NBTTagCompound(); + } + + if (!container.stackTagCompound.hasKey("Fluid")) + { + NBTTagCompound fluidTag = resource.writeToNBT(new NBTTagCompound()); + + if (getCapacity(container) < resource.amount) + { + fluidTag.setInteger("Amount", getCapacity(container)); + container.stackTagCompound.setTag("Fluid", fluidTag); + return getCapacity(container); + } + + container.stackTagCompound.setTag("Fluid", fluidTag); + return resource.amount; + } + else + { + + NBTTagCompound fluidTag = container.stackTagCompound.getCompoundTag("Fluid"); + FluidStack stack = FluidStack.loadFluidStackFromNBT(fluidTag); + + if (!stack.isFluidEqual(resource)) + { + return 0; + } + + int filled = getCapacity(container) - stack.amount; + if (resource.amount < filled) + { + stack.amount += resource.amount; + filled = resource.amount; + } + else + { + stack.amount = getCapacity(container); + } + + container.stackTagCompound.setTag("Fluid", stack.writeToNBT(fluidTag)); + return filled; + } + } + return 0; + } + + @Override + public FluidStack drain(ItemStack container, int maxDrain, boolean doDrain) + { + if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("Fluid")) + { + return null; + } + + FluidStack stack = FluidStack.loadFluidStackFromNBT(container.stackTagCompound.getCompoundTag("Fluid")); + if (stack == null) + { + return null; + } + + int currentAmount = stack.amount; + stack.amount = Math.min(stack.amount, maxDrain); + if (doDrain) + { + if (currentAmount == stack.amount) + { + container.stackTagCompound.removeTag("Fluid"); + + if (container.stackTagCompound.hasNoTags()) + { + container.stackTagCompound = null; + } + return stack; + } + + NBTTagCompound fluidTag = container.stackTagCompound.getCompoundTag("Fluid"); + fluidTag.setInteger("Amount", currentAmount - stack.amount); + container.stackTagCompound.setTag("Fluid", fluidTag); + } + return stack; + } + + @Override + public int getItemStackLimit(ItemStack stack) + { + return isEmpty(stack) ? Items.bucket.getItemStackLimit() : 1; + } + + @SideOnly(Side.CLIENT) + @Override + public void registerIcons(IIconRegister reg) + { + //Bucket textures + itemIcon = reg.registerIcon(WoodenBucket.PREFIX + "bucket.oak"); + acaciaTexture = reg.registerIcon(WoodenBucket.PREFIX + "bucket.acacia"); + birchTexture = reg.registerIcon(WoodenBucket.PREFIX + "bucket.birch"); + jungleTexture = reg.registerIcon(WoodenBucket.PREFIX + "bucket.jungle"); + spruceTexture = reg.registerIcon(WoodenBucket.PREFIX + "bucket.spruce"); + charredTexture = reg.registerIcon(WoodenBucket.PREFIX + "bucket.charred"); + bigOakTexture = reg.registerIcon(WoodenBucket.PREFIX + "bucket.big_oak"); + + //Fluid overlay defaults + fluidTextureWater = reg.registerIcon(WoodenBucket.PREFIX + "bucket.fluid"); + fluidTextureWhite = reg.registerIcon(WoodenBucket.PREFIX + "bucket.fluid2"); + fluidTextureLava = reg.registerIcon(WoodenBucket.PREFIX + "bucket.lava"); + //Fluid overlay blank + blankTexture = reg.registerIcon(WoodenBucket.PREFIX + "blank"); + + //Supported fluids + for (String string : supportedFluidTextures) + { + fluidToIconMap.put(string, reg.registerIcon(WoodenBucket.PREFIX + "bucket." + string)); + } + + //Register defaults + fluidToIconMap.put("water", fluidTextureWater); + fluidToIconMap.put("lava", fluidTextureLava); + } + + @SideOnly(Side.CLIENT) + @Override + public IIcon getIcon(ItemStack stack, int pass) + { + if (pass == 1) + { + if (isEmpty(stack)) + { + return blankTexture; + } + else + { + Fluid fluid = getFluid(stack).getFluid(); + if (fluidToIconMap.containsKey(fluid.getName())) + { + return fluidToIconMap.get(getFluid(stack).getFluid().getName()); + } + else if (fluid.getColor() != 0xFFFFFF) + { + return fluidTextureWhite; + } + else if (getFluid(stack).getFluid().getTemperature() > 600) + { + return fluidTextureLava; + } + else + { + return fluidTextureWater; + } + } + } + return super.getIcon(stack, pass); + } + + @SideOnly(Side.CLIENT) + @Override + public IIcon getIconFromDamage(int meta) + { + if (meta > 0 && meta < BucketTypes.values().length) + { + switch (BucketTypes.values()[meta]) + { + case ACACIA: + return acaciaTexture; + case BIRCH: + return birchTexture; + case JUNGLE: + return jungleTexture; + case SPRUCE: + return spruceTexture; + case BIG_OAK: + return bigOakTexture; + case CHARRED: + return charredTexture; + } + } + return this.itemIcon; + } + + @Override + public String getUnlocalizedName(ItemStack stack) + { + int meta = stack.getItemDamage(); + if (meta > 0 && meta < BucketTypes.values().length) + { + switch (BucketTypes.values()[meta]) + { + case OAK: + return super.getUnlocalizedName() + ".oak"; + case ACACIA: + return super.getUnlocalizedName() + ".acacia"; + case BIRCH: + return super.getUnlocalizedName() + ".birch"; + case JUNGLE: + return super.getUnlocalizedName() + ".jungle"; + case SPRUCE: + return super.getUnlocalizedName() + ".spruce"; + case BIG_OAK: + return super.getUnlocalizedName() + ".big_oak"; + case CHARRED: + return super.getUnlocalizedName() + ".charred"; + } + } + return super.getUnlocalizedName(); + } + + @SideOnly(Side.CLIENT) + @Override + public boolean requiresMultipleRenderPasses() + { + return true; + } + + @SideOnly(Side.CLIENT) + @Override + public int getColorFromItemStack(ItemStack stack, int pass) + { + if (!isEmpty(stack) && pass == 1) + return getFluid(stack).getFluid().getColor(); + return 16777215; + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean held) + { + FluidStack fluid = getFluid(stack); + if (world.getWorldTime() % 5 == 0) + { + if (WoodenBucket.PREVENT_HOT_FLUID_USAGE && fluid != null && fluid.getFluid() != null && fluid.getFluid().getTemperature(fluid) > 400) + { + //Default 26% chance to be caught on fire + if (WoodenBucket.BURN_ENTITY_WITH_HOT_FLUID && entity instanceof EntityLivingBase && world.rand.nextFloat() < ((float) fluid.getFluid().getTemperature(fluid) / 1500f)) + { + EntityLivingBase living = (EntityLivingBase) entity; + if (!living.isImmuneToFire()) + { + living.setFire(1 + world.rand.nextInt(15)); + } + //TODO implement direct damage based on armor, or leave that to ItHurtsToDie? + } + if (WoodenBucket.DAMAGE_BUCKET_WITH_HOT_FLUID && world.rand.nextFloat() < ((float) fluid.getFluid().getTemperature(fluid) / 1500f)) + { + //TODO play sound effect of items burning + stack.setItemDamage(BucketTypes.CHARRED.ordinal()); + } + } + } + } + + @Override + public boolean onEntityItemUpdate(EntityItem entityItem) + { + FluidStack fluid = getFluid(entityItem.getEntityItem()); + if (entityItem.worldObj.getWorldTime() % 5 == 0) + { + if (WoodenBucket.PREVENT_HOT_FLUID_USAGE && fluid != null && fluid.getFluid() != null && fluid.getFluid().getTemperature(fluid) > 400) + { + if (WoodenBucket.DAMAGE_BUCKET_WITH_HOT_FLUID && entityItem.worldObj.rand.nextFloat() < ((float) fluid.getFluid().getTemperature(fluid) / 1500f)) + { + //TODO play sound effect of items burning + //TODO add slightly burnt, crisp, and ash version of the bucket to simulate each time it gets damaged + entityItem.getEntityItem().setItemDamage(BucketTypes.CHARRED.ordinal()); + } + //TODO chance to catch area on fire around it + } + } + return false; + } + + @Override + public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer player, EntityLivingBase entity) + { + if (entity instanceof EntityCow && isEmpty(stack)) + { + if (player.worldObj.isRemote) + return true; + + Fluid fluid = FluidRegistry.getFluid("milk"); + if (fluid != null) + { + ItemStack newBucket = new ItemStack(this, 1, stack.getItemDamage()); + fill(newBucket, new FluidStack(fluid, FluidContainerRegistry.BUCKET_VOLUME), true); + stack.stackSize--; + player.inventory.addItemStackToInventory(newBucket); + player.inventoryContainer.detectAndSendChanges(); + } + else + { + ((EntityCow) entity).playLivingSound(); + player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal(getUnlocalizedName() + ".error.fluid.milk.notRegistered"))); + } + return true; + } + return false; + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubItems(Item item, CreativeTabs tab, List list) + { + for (BucketTypes type : BucketTypes.values()) + { + list.add(new ItemStack(item, 1, type.ordinal())); + } + + ItemStack waterBucket = new ItemStack(item); + fill(waterBucket, new FluidStack(FluidRegistry.WATER, FluidContainerRegistry.BUCKET_VOLUME), true); + list.add(waterBucket); + + for (String string : supportedFluidTextures) + { + if (FluidRegistry.getFluid(string) != null) + { + ItemStack milkBucket = new ItemStack(item); + fill(milkBucket, new FluidStack(FluidRegistry.getFluid(string), FluidContainerRegistry.BUCKET_VOLUME), true); + list.add(milkBucket); + } + } + } + + @Override + public ItemStack getContainerItem(ItemStack itemstack) + { + if (isEmpty(itemstack)) + return null; + return new ItemStack(WoodenBucket.itemBucket, 1, itemstack.getItemDamage()); + } + + @Override + public boolean doesContainerItemLeaveCraftingGrid(ItemStack stack) + { + return isEmpty(stack); + } + + @Override + public boolean hasContainerItem(ItemStack stack) + { + return getFluid(stack) != null; + } + + public enum BucketTypes + { + OAK, + ACACIA, + BIRCH, + JUNGLE, + SPRUCE, + BIG_OAK, + CHARRED + } +} diff --git a/src/main/java/com/builtbroken/woodenbucket/bucket/PamBucketRecipe.java b/src/main/java/com/builtbroken/woodenbucket/bucket/PamBucketRecipe.java new file mode 100644 index 0000000..1aa24f3 --- /dev/null +++ b/src/main/java/com/builtbroken/woodenbucket/bucket/PamBucketRecipe.java @@ -0,0 +1,36 @@ +package com.builtbroken.woodenbucket.bucket; + +import com.builtbroken.woodenbucket.WoodenBucket; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.ShapedRecipes; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; + +/** + * Simple recipe to handle integration with Pam's Harvestcraft fresh milk buckets + * Created by Dark on 8/24/2015. + */ +public class PamBucketRecipe extends ShapedRecipes +{ + public PamBucketRecipe(ItemStack bucket, ItemStack pamBucket) + { + super(3, 3, new ItemStack[]{null, null, null, null, bucket, null, null, null, null}, pamBucket); + } + + @Override + public boolean matches(InventoryCrafting grid, World world) + { + if (grid.getSizeInventory() == 9) + { + ItemStack stack = grid.getStackInSlot(4); + if (stack != null && stack.getItem() instanceof ItemWoodenBucket) + { + ItemWoodenBucket item = (ItemWoodenBucket) grid.getStackInSlot(4).getItem(); + FluidStack fluidStack = item.getFluid(stack); + return fluidStack != null && fluidStack.getFluid() == WoodenBucket.fluid_milk; + } + } + return false; + } +} diff --git a/src/main/java/com/builtbroken/woodenbucket/fluid/BlockMilk.java b/src/main/java/com/builtbroken/woodenbucket/fluid/BlockMilk.java new file mode 100644 index 0000000..6d0daf7 --- /dev/null +++ b/src/main/java/com/builtbroken/woodenbucket/fluid/BlockMilk.java @@ -0,0 +1,33 @@ +package com.builtbroken.woodenbucket.fluid; + +import com.builtbroken.woodenbucket.WoodenBucket; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraftforge.fluids.BlockFluidClassic; +import net.minecraftforge.fluids.Fluid; + +/** + * Created by Dark on 8/8/2015. + */ +public class BlockMilk extends BlockFluidClassic +{ + IIcon blockFlowing; + + public BlockMilk(Fluid fluid) + { + super(fluid, Material.water); + setBlockName(WoodenBucket.PREFIX + "milk"); + } + + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) + { + this.blockIcon = reg.registerIcon(WoodenBucket.PREFIX + "milk_still"); + this.blockFlowing = reg.registerIcon(WoodenBucket.PREFIX + "milk_flow"); + getFluid().setFlowingIcon(blockFlowing); + getFluid().setStillIcon(blockIcon); + } +} diff --git a/src/main/resources/assets/woodenbucket/lang/en_US.lang b/src/main/resources/assets/woodenbucket/lang/en_US.lang new file mode 100644 index 0000000..f8f35bf --- /dev/null +++ b/src/main/resources/assets/woodenbucket/lang/en_US.lang @@ -0,0 +1,15 @@ +item.woodenbucket:WoodenBucket.name=Wooden Bucket +item.woodenbucket:WoodenBucket.oak.name=Oak Bucket +item.woodenbucket:WoodenBucket.acacia.name=Acacia Bucket +item.woodenbucket:WoodenBucket.birch.name=Birch Bucket +item.woodenbucket:WoodenBucket.jungle.name=Jungle Bucket +item.woodenbucket:WoodenBucket.spruce.name=Spruce Bucket +item.woodenbucket:WoodenBucket.big_oak.name=Dark Oak Bucket +item.woodenbucket:WoodenBucket.charred.name=Charred Bucket +item.woodenbucket:WoodenBucket.fluid.name=Fluid +item.woodenbucket:WoodenBucket.fluid.amount.name=Amount +item.woodenbucket:WoodenBucket.error.fluid.milk.notRegistered=The cow seem to dislike the bucket +item.woodenbucket:WoodenBucket.volume.notEnoughForFullBlock=Need a 1000mb to place a full block of fluid +item.woodenbucket:WoodenBucket.creative.void=Voids Fluids in Creative Mode +fluid.milk=Milk +tile.woodenBucket:milk.name=Milk \ No newline at end of file diff --git a/src/main/resources/assets/woodenbucket/textures/blocks/milk_flow.png b/src/main/resources/assets/woodenbucket/textures/blocks/milk_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..bbe04df4c46c365abf0716474d1aed9de1a993fe GIT binary patch literal 5342 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/blocks/milk_flow.png.mcmeta b/src/main/resources/assets/woodenbucket/textures/blocks/milk_flow.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/woodenbucket/textures/blocks/milk_flow.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/woodenbucket/textures/blocks/milk_still.png b/src/main/resources/assets/woodenbucket/textures/blocks/milk_still.png new file mode 100644 index 0000000000000000000000000000000000000000..0fa2fa3aa51d7477f0b82f16b4e7a47d3b24e4a8 GIT binary patch literal 7237 zcmV-L9J=F)P)H^ z1+e+xZt#a^2Ry5aC2|)pgPESEpMJV$@ak|l{F|9=?eG8gX4cvBzhq{Oe{N=0o7uw5 zR%Z6r%of?qZv4w02i5pHPHz3D@^gMPGt2%HcN_eKIH~d$Br{v0WgGv0h?6_NW1Mj2 zpY8nQ5i11mGT_tqFLut5v5AKzx&Ia)IK31?`5`QMM|=+4agY-Z

@HJQ)1s${%IvEjr15aKZ&@KY%z8kJh@;-MQuVY6lhW z#*VJs0tcCyX`GgF!paZciD50g1rt1I@q6_88h7LW8ywq&Dfe=h&c8hI-ZxC54f>*u zE4@aCDK5q+5C`A-#cDIVQ9RiAm6HR_7KS$X&kYc3#DkdoCw{S&nLUV~ARat=2d}c3 z{SPKhAkI)2-msAejNCScagdo;7e*nY6+;+X#^mW`?pFmoXfd_7W|k68tfa}M&uaYL z$8>JcQB}dIhJg_ehB-Xw3-cjkidSa#jhX!rc9CIqJ0Q=6U+ic9yz}wjd8=Z^?!u6^ zu)vL(eS)uS#Q6puT$*eA zchbT;KY0~+&^RZGW`6B=xPjYCaDz2~XPM3H|76a8E;!j5Eh9PG=9yWTWE7(3YxGwW zjzzJ+gfCcu2B&y5`hsDm=|ceM?@KkYw*37f4kLS-uvQBm z7-Gj{2wjE(tcAC3{O6V5>|cZ8k)iNWR&J)fqfhXL1E%^BKWO2$7*r4s))I6kl6ws zR^F2PEKRQp{D9g@JlcZ>o&yl6ljvkAsQd;>&Q%ByXMWX3nC=C9K@YSFey}4dKY&zR z_yKn^yul9_&L>8Ga4ly1Q-S)CR16rQHWxgv72<^f!#lve?MwWi5^v4V$W~j86|KMp zl6=nZdNZp^mS{3NDFGOeI|U+b#bkRlw-e9QnAvy0gDwkwi+G{&`M>e;K5;;~c06d5 z9}owqnT5@Fm@}a%ejR?{6M~9BqzLgh1?Co9`G#bI+-O_q`Ro=N{jeb()abMdlPZbF zenPM@+DO7ItA%j2!d6YG$7T zc~0R2qF>JZB3t-E!!&;r{9tgH4(}Tg>MfcaEm;98wt)w0!Tp~K&s>YK1;6fcVWw3D zU2(vW#>h=n-MN3gL^G5ITUw&c=tfyupchSn2U`s!0AU7J)`PJRhDkF>6MMnFjNiY* zgc~T%Q-n`wZU?Nm^HIyhgSXxxYnhD+eqfKFJNoXop(kF6o2OQ?q21#G6FkTm|2^b? zA~f+}MdOQM+=}t+F@#J?)b7?s0#b?>szR=1K!+yy$#pK6Y=nF>pdB_KRcp*ZgPu6y2Qe`ge)6R|ksF!LC%}Unzwm;15aaw=CRfad zH8|5q#5hzcGE@>nQHLMdftY!RFYc>&Ksu%?;4PJFuqf!~3LG^^ zw_&Ig@t~hkE*VcQ&Fr6*A2c#t8BI^(TyD+me=+3Sz=JRtb+Q*o*gt`#Ba7Of8^MFNkO90$%f<Dk zFmFi{c#x$Ar}A;XDIoEYp15M-$)~MKfq@5|wxoX1w7~^vcJm(k31J2^n#0H*7sZtWRQsV7x_Wp zBArMlGju6bXHVq0LyTCeOETdH-=Wl|RXoUGBLg1e91-33)E@&6)}o!YX!-yRZHHL% zTjBwY=?!M+)ePx2;=vileuIcr^~AS+Or+VnU?|a%!%PjDp$0?w!9Gb@NS2zD9zRLq z$~Vym#DfZMKD=`;!enwxJjypVOv2%Ujfhompzd5}>Dd-|P>Gw5k+?=aa-_N@9HEEs zP@@h>4^G{v>MRmRHIqKydg>`27an=t@co5@sLqU>Ay}`ALH$X|yvVGddw4@xdUH zPgOu^t&})pA&Wx!QsRZK5YarA3R#wj-n8n2`axjF&q`^wp!OtQ1enkhCwRcp>Tum^ zol7A2LuA3SFpmN5-X!cJhdA}W&$7(IxzZvgsUmfpLsRWv;0H>!d(oH%Jsz9 z3b8~LkY?Zq`+`l>!lfzzO-e`?4}u45Y6cPi7Jtv;!2*B3_Fk_%qPqfbIKqQL@Zi#0 zx5Y3nTvPaM7}7^flm=n`1~n?F5SV=qLwXCoyaB1`1lFU7;{u+k$*6wmgm7w>vqjt# z6L82vE;Q$4QcgqyvW!u%LgcyvTkj!{&_X*cp`f0)#ni3^58k6r?^dhkx031UfCU|D z)dCNyj3~4R$=pHutI)crk{feTS>oY#rohioqqg;%j0H`bLYQYS$b>ZekK_k?xg+g> z!evkSJS;I%B^_KGt3wA&<2`dP(bKyEM^b*U2LVk~vKTYXX^9K`|IQP;Lzr@sf&K@#{>-AT z1}8Mg>c-lgOF;TZ$AigwrZ++idKNv*W=$YwC z65?_SGg*-V^A_6rAV0)|4pK4KGlk+=D?czKAGEnKjkz>uWFZ-MQ6EX-wTI5Wj(DM+ z5g$~njf>GcT`4A}nFK{?5$(hhGg8DRf!Cv$@Z|BbRDJal!LbulApjk8&1NrhxKh5b zgX>@}S$x200T15T^8$z;d?Jl`N~&~^f(M}=Jow!{!-It#B=Uoxv~NLst_u3W(I~w4 zW=0C&ibWc@_&fjXoww?XnN_b2hr{pfdA(L!$Z*m}EMbj92$J7hxeoQzriG6UTw6f? zHqWrq8q|*RcrTu;rh1oUCek}Ez~0Xx8*j6~*;eAms(=S~H1!O$VMb$DkN_%)Vqcrt zA;UQ0+3sX^*5VtYPrgJUOKZpLeM^R;!u>Al589a%Rdeq|$(rB+b&(jlbLm(sNQNmF zvN&NlcfiA5%zC0=4AMDTxU-T9sTH{Lpo@VTVdoKGL`nLOa4;htM2!KxQ34*^+Vk4C zt#oY8s5z<;FRVr78)h_wk)^#siNKW|FGpznQOuA3;-i)WB!BkFQc|%7z+K~yv|tPV zGLtT54N4`U-`a#kXx)t=2)7xZIT{j6Mp(1I1H@+t^D9igE{g-*O2_pwyn_@wEVw|t zFH}LKLWx~OuoFBu0og7+D@{EB=OOT5W979x1Y5d(PXC)cQ{|y|4f54%MN9_DvV<&f zg7HEv1fyp7zbTN18=J0ONd@I^$P#dB+_Xn(fQt6GAVm4WYneoW2g&LE_i$_DBV0fh z?O-T@i+4WEUwo*;#20Y^E|Lv_@{51=llX)|oY1HzMlJG#ciyG|@n89g?|j7W%`Ck- z91j2Kb9^gTFNsep%;K>H|6MqN%ho$l`YQU0EMCW`*h(==DYZNb)43pn4I&W-KE#6A z-ek=;qt_&fT-GbypK*LxBZN&RbvhvLUdw5&juHm3xzv3ux)-}_)59P+NPDX z+bm^d=>_p|u;V4}V?EM|#Li<9#-Vd$6odd~@ zSYiYszxHF^`iR|`nY}t34*vyGvH1ldx`+pVl<{Tn5Acyu8NdY-U6vxIB$YwLgY8_r zz+kene-(b5wxbg0qfcBaUO$6Oe6#8W&s*D-|AgIcR2gui|*KRtI+CAKtm)1Rk`Y!YMAW0d)z0*@GXnGjKoA z4z(`AZmehPIz^n*si-%cbD)@;SbbVIoJC4%o# z*+40}y=U@Ye6JMd^%|)V(&de*zwSiP3p=I2``uawp5K2Pqd}VlTY+t9XPzNYh@z zgD0D=|DLQe?W|mGpCwkJ*GgG1pH&W#8jdCGk76$)9&m~FR??z_O}Die1P_{w)aX(~ zhOUtPY6M^>cyL#6^Q!Fjm=EJtUoYW-g3D2OlxEZl{;mZ+d$q(y3fO8W*;MXk@jxqJ zqW6C+q{|c!x@6N02TQ@lnFy0f2}Ug$9HxhY9}GU}{#wF=rSt(${*^lx@`Drf)gmJ@ zy}*2kKKWZA7hCBlT-tP<_tuVA8?S%|Z+&D&JotlWIml4^0#}SOnpzc%KM6b6)G$BW zh>p-^JKiiqQ)J`^X4AsgNmet7RW2m|6tUu4mKG=;v|uHXb6MN8Ht!C{G#Rl_BWc0T zju%QbB2taZk;o4iKdW}u!*Vylkse-14`|$=@j{miF@jln`H>ZpmwPSlJmk@Y{f5BIvdYq=50hjj`e-N^U=8Uk$Et)?$zON_z!z7V4f4C zYCEp!ABXYJh4609sGcNku*owPmkN4fE19mzLYNXiAo?mEj62m(SKeZxG$NH#Kez)O zP8m8H`9VLE0b9zWr3{gIGgC%j;x{?u7I;vJ)3gGyWWI5<++1*)r4rMspdHi{=Szlj z=2{w89~Sk4p}lc>5gEt-?YyuB{@2%L`@$PIU z{9pmUIZ7aZm0r&_T_CE-eQpP}nd1j$$J>Rs1%8lpy)zlx(uc1RxO)q%SaYAO7K#q5 zp>Cx`H%uKeMbZc+w069XtIE&oZmkN>LLj|0|#NKfw7;@SqbJ zw8nR_1?;tGODn^^I9c!@{(Y3FwJ*gBOL*M9q>UKaedEWR6AvQbSWDPb+K2xKdtM9K zQ3Cl<@SssjFP2E|yir5aNu*n(cA~ExRY7ur{0jMnrve_B`3{Z^f^csCwzlW>3MLux z2_8f?vyr~o$=@|v+$mGd{{SAe1+G}-nZ!Ngg~5(D(daZ@n5#wG&neoh#Yu%UU=lpo zp#_8DL9*kL>p1vcqWq=!kAXe<8h}yBj3gc`n7~nfpj8eh_Ph<=Yu6JWmEv3=->NZU zY+rG(=T#HYM`sauvJ(CY0mUFOljdX}nDu48sl|-sy!hIU?ZTdGn!8tr!{Ogyh3$+| z!K%Tmc<{-lb$3h`P}xq>s2W6L(t7^BK+2E!K_%GG7qUN- zX`g2j65;CJ+Vh6xlnQ$yQW6dvzjro$aR(OZRp{!3t2EK z>Bjdj#QupJJKh_reSse=4Q~PokF$UgZ3|+31YMD9S!B_TyBAa(E{YiKg3As|?tLyG z8<_RALiVDc(G03NJgCJNWN3=_Fy~fV!=-4NZ)8F$3o#$b26tFEwd0-M8|VieDj^1w z^^L6XXbK662!nnGe>~y`)JeFJ!bVIuT6PhIEX0FW1nPAmUYNxL>IYij6H>^d_tobx zEbd}i6%59p?0*0e39GEL1RKmV4tBf|FM+o)*+0=FA<+mYO2XzQk!xJ!w7?GnnPdGz z=**M%u`KO*3v@!)7HlAc2CBpj6f8jRYGc%VDBu4kx!JBJ5dp-kYV-OdNa zgH#aU=I}r(B2sDf0C#h|fTqrD=fGrLW96dGSlh=9m$a6>FW~{PF-D~ZdS9|qgoe}? zoC}9<;dpQbeAt(^0A7oRKwXL3LB2M;e}S*eA(`A3`h^~9!~(`dtsPf`#=?lmkOyW7hfx!&qiCMT&B|Xk0EdkZcck1edTx#&4d(FPL z=R)ayw&P0q1q5oQljHRnA6QbtSBC6S0Y^;Gr72;d=jO{)Zv}x^CE43_mx_>uzj$lL z_ct<+x)mgfdGQ+v6!(TjTMOBu^P7eJ(x$*_W!uqQuIJYamhl~G|0-=LnUl$hdPISG^h#lk%_xqSmWbPJRkJ2AEdXQBJOpP+S;T)HU}$*OEQ#)s#yK%DMMBcA_&Rt}ZMAOH&YLCQ3#U+qaq8vW4ji<~|n$2D9>eSoQ@)BkLxVs$L{3zXyJ# zy{VvDn3dNy2Odmzv0@9V7ZTWKKKl;N4?Y;)=NgM!o-qDzkaLbS(iIZ?W4!SH_j>FH Tbf8WP00000NkvXXu0mjf5{1m# literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/blocks/milk_still.png.mcmeta b/src/main/resources/assets/woodenbucket/textures/blocks/milk_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/woodenbucket/textures/blocks/milk_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/woodenbucket/textures/items/blank.png b/src/main/resources/assets/woodenbucket/textures/items/blank.png new file mode 100644 index 0000000000000000000000000000000000000000..1018874e050e199e3fe77d3b14432aba7a343cff GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=DinK$vl=HlH+5kiEpy*OmP~yA+3+tefHCr9h$io-U3d7N?W{{QqyytlH4o=;W}G zQRfCrZE(23hK(B+cW`oY8lA~2I}mWXLxzn{aI>TY5ZGT#Ec;yp?zxv; zL`)Zng%B+*6)`~)LGmX=RJ0fS_*c}z%63Io(5z8GQwm~Z41R!OE4$fy?m1(zX4iFN z8Vjcy&c`$FJIuiU4%zSU;>tNw6`XU#*brkxM0m3KN)809ES)wH;qvjod_ANcjM|jk zz?{$A+y)Wh>GRhz16W-?W9Qquh!c*@9pY%L5sZY8vT?*Eq6sRn{!!R?u_XYy2T)Zu zew2j5)2}mMLjb^G1ck~ghYR8MCq-l;d<-x%?w)G#=)3UXO9a3RGzRTptbc29Ye%`Z zSW%W?4DfqN_*L=xi5AI>`=2v0D$Y3ot}Y6(9=-WpfuC3qvVr&DM7gwJEVnBFHv2{) zMgr^)z}P~k+mkDA`keJfiiQ?S%0^BN-b0;XkcB%RA`c%wlNkUol4}|DkPTiAGU_~% z4S>qc&dd~`ECWd#xq*{;cLMf86Eo3ds(~|rPPZpF-bK_y=^a{3u2qzK?+0|cJ^3qO zWJ5`f@s>cPu+@y@tDkP(fxEDFVaWi7!+Pq|e!K9`@e`bel|&HnmR|q>002ovPDHLk FV1oaP;12)* literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.alubrass.molten.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.alubrass.molten.png new file mode 100644 index 0000000000000000000000000000000000000000..9f0fb24e649aeb771098e4083da7554e42bedbf8 GIT binary patch literal 565 zcmV-50?Pe~P)L4!C zDdeV3Su(WYq^*jQl%s=OdiS$;=Uos2LO6%^j--iD(C_qqzxTfH`+o2J9{eN3G8ai`-hh&EEb;a=9EEFJF+1f=o)=~^jB$AN`d;Wu$&;!ny4~({56a~-rfIU(NQ5_YcTd$VNqR+z?V;^Zsg7fguInsJ zR-kDbmFid&i=PF+(01@GiEl|BJd&bP9gAA67L#Y55Cj35rU6haK0H&B0PO6nh2QtT z^7cb_YI4c*qY8omRaMz)Btj>A69@a&bGG%z0u1IRh~`?a*8%vQdMAz!4&uON;b0gB zolYk%ADHezgnqw|s;XqOSpYoGJ5!&7(ChUW3advF&-@#g}PvY3AX)`hUS67@V|Wit}_@00000NkvXXu0mjf DwcP_3 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.aluminum.molten.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.aluminum.molten.png new file mode 100644 index 0000000000000000000000000000000000000000..537bc0850831437c52aa2834bbe956e02458565c GIT binary patch literal 563 zcmV-30?hr1P)e0aUhec5F*tMcSkCrkn?v9pzBcy4j@>MOcr%{fzJ_~p z%wlNrQr-4xI-h)8Jv(!)j`J)E_^d~d&xx1n5IAac1=`g3;?Zy@8y3V)N zb@AqCBmf*|On)+?Kbdi0Ux>q1TGVQ_Fc}~fE#P?`x~>CIE|&$Q!M*_CVE3N?)i}d2 zjM(H-mq+D!9*Ux@pYr}=Nbc9)BJb^s#b`ugfncundL4ilpT3A*uNM->&YZ<)M5ogU zO~g3p4-#002ovPDHLkV1gNi B^Qr&< literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.alumite.molten.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.alumite.molten.png new file mode 100644 index 0000000000000000000000000000000000000000..cd19c8a8e15824bcea68c69616c8d13df6147648 GIT binary patch literal 497 zcmV$jCdlEh0TD)zeC^o>sb1ZD_}G z^z3c+a(8{FHyuVT*tX4RG$OU1()ZPS09@r#w2BdLswTlAFaUbJ9soO=Eqf8$jB>fWeFpRS9MAIr$eetL)MXuj=bL9;x+u}@c8#q9YY`y? zsr{6$TveiE_rb+-tkdCexcwS!+oo2lA%wv9efs@=wAZ?A>0~--bUK}=|8Fx`!}ooJ z5Tw&-0KzcDa;(@lv-8szr&>zK#dkLsgTa9DcuY2%WjdV#FquqPE|(k}9$ZQ(KiS{v nKq(dRFbse97dG*=`k&w(eaNELpUbkD00000NkvXXu0mjfeJ$D? literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.angmallen.molten.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.angmallen.molten.png new file mode 100644 index 0000000000000000000000000000000000000000..9d47b15f4fd3b83d654e8c1d0719e19775f7a1af GIT binary patch literal 565 zcmV-50?Pe~P)L4!C zDdeV3Su(WYq^*jQl%s=OdiS$;=Uos2LO6%^j--iD(C_qqzxTfH`+o2J9{eN3G8ai`-hh&EEb;a=9EEFJF+1f=o)=~^jB$AN`d;Wu$&;!ny4~({56a~-rfIU(NQ5_YcTd$VNqR+z?V;^Zsg7fguInsJ zR-kDbmFid&i=PF+(01@GiEl|BJd&bP9gAA67L#Y55Cj35rU6haK0H&B0PO6nh2QtT z^7cb_YI4c*qY8omRaMz)Btj>A69@a&bGG%z0u1IRh~`?a*8%vQdMAz!4&uON;b0gB zolYk%ADHezgnqw|s;XqOSpYoGJ5!&7(ChUW3advF&-@#g}PvY3AX)`hUS67@V|Wit}_@00000NkvXXu0mjf DN)Q6w literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.ardite.molten.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.ardite.molten.png new file mode 100644 index 0000000000000000000000000000000000000000..4caa67c4cf7abdb3ad1bb4d3444a0b3122881187 GIT binary patch literal 572 zcmV-C0>k}@P)qSK9C1ThYsgb2l{ zW1$#xbIFh!$|a~-DhY%hlskxUIXn*xBo*rT|9FbeDy#B7nUHj5S)6^% zacIK&t!qJLV;O)Wy+>tZnNQ~qkDgu?;9^-nP}NOfpP9JD$M+V4rTIxPaZFD1WA2I% zyimSzq94KE@N31Yjbw6_h12lTFYfe$wsm1OlkZ1NYm+b zk`6RYqwVK~a*z=KrZc71a;ddk4$Yis`+1?NY9t28#2a{?ho)%&C|g?s^0fWmwbu6c zKz;ie!!Qz?%UoQQ=Xpqy#M+!4Y`=ULk!yPoS*h%b!C*jYgK)3aY88MdubZOV?M6h? znKC;VpzC^MA4tw1M8Drhk|c`7A^@)IvQpUe|b zX2g3!TnNF97hI~iaO0c!R)PHugCUN3Q zuvSG^^L71If5ZO{nRIxrHRY)&OW7bOIMChh%U=QKPfa<%?W?mii-H&<*&M-XroiHA z2NBrXsX#M)v_`&in39iWtbFA-lt2 z`GN?lN{UJ&1)jXxz`gET$0aA0)!yAJF1F`a`(nO3uhVtw0nD~DsGPB>=UzU55|@;gAy!0FEcY zDW$X;sWyuWW=1wAXFnS7X}d3vp0*JYjzvMFeojPqzP8EduRr8SK;;QHdb!13?Bm-qYq z(n#7t)S!(bg6Lo1DCpqgRwz2Cs}52S%%W83RuvrD#X&?Tmuz)$@LzBcjJDdQwJ8)) zoJ^YEy>kdnD@jFg@TSM(?!!Co9{lf+VV9Nt6%!Fmz=^}muxM<2ZOI>j@q<-URp#$s zU@XfBNrI|k(I}Nhn3#Hrs`6!XO$LDKp{m`wdKz)Uk;4_nvJ4R+#)zqsWhpU6L>!Z~ zI<3uh0dU*E&rX{MFW!-+30v(pKRO)%oOAdP2x*aGX&+baEFiY?@IIg@Z=T)c(enoP z=HB*;W1bU|gv+%$mu}a2eD^$|5c)u2`!JFf0eDzDi>h*cdI42M5Deq#>;$pf?G+`3 zLBNT}%y8c03I(3bT;$a869Bwl{)G1)%X1768PdXPt0`wDXE`}uCFVKeJuyb2D$aW} z&)MpBxiS5U#g&gT004}Z%YY%SH~SAOpK;#zM-@UK31N51??CEPq6row2g;*6%i=vT z&rwyp_j?14<%XQQHitMzk|fBkWO0tEnb#~emt;?%w^@#;O6&VKLI^Cbul0c>P5$mL t9IYHPBjTk%u3ZEN4pujsL-YSBegUbksMqLEB>(^b002ovPDHLkV1jG+`bz)+ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.blood.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.blood.png new file mode 100644 index 0000000000000000000000000000000000000000..bda1eb07f856d680cef6fabf3b261d2d1a16e24d GIT binary patch literal 511 zcmVJ@ zsg&lGO6A`IMS5i*ld^?nRaF90Z}O+gwC?>tpZo4W9Xz;HOkaU1|F+ZLG1)L!mnCZT@( zy5#cUK;XK}6c~#bhQXRwSDRPAb*1x-9LaK7_`W~!K0ZC7QmF*McI!qo8V&uh*^e>u zeO%Yo{ZC9Gigvq=VHjkySpb3{AX)x7b7$sWyK%j}uWD927Cp3DExO$<`Fx(iVDOyS z>k)<_iH-H6YPC9H|E~_Dl$r-Y@V37Y#dP&|!5`O!n}R$RzytsQ002ovPDHLkV1i6T B-oF3< literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.bronze.molten.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.bronze.molten.png new file mode 100644 index 0000000000000000000000000000000000000000..275e9639c1347c9c691eec007e602230fd1f5f0c GIT binary patch literal 572 zcmV-C0>k}@P)P{8gw@GG_08ETpe7u+nrhXj+j@{+Z+2zXg zKKGO(4xL?+uEQPqBbZ6p0f4US<25K03fQ*IY@!=Hd2ktkwmIOIycq3$=a_9j9cfyv z*0=*r)9C-qidXe10pL5ww9Nr+bHGRAlGygsqEsqHV&J3(Aw17R(=-57RTYp1<0SX& z;Zd-@`2}6q$2vE8x>cU%A*EzC(GALPw<7YV*N;$F%EGcNVlN2$TB%e3c=PVF=yW;} z@x%T%u2~k%W;3#XrVAlV(?m*%q9_2ku8X=-7IEB(^L|-vV=ag~PmBhJVc<9p`Fx&! zzYjpK*JC&wB5y3btk>&f_W$aj(P%__*LBZ7Ort{+htseB7yJeVrL^@jtK; zX3m`RKj-@x{&y7fk`<{!%4Y?}*qc*dox3Nvv&z*8qb1r%-?Dm%&9~A5zD|LriD?-n zZmwiNSr9u?%Va{=QU)IHob{H|zt3x ziOau`P&|Cfz4g37UD0((7jtvdaCpeeFGKUod9=EuOT2nRs0+o(+roHO!T^xu#;)i3 zW%|>iDsL6rKLEZ{JbFebSzOFAP9p@izRmodA%Hx!Y5Dk>(U`3d*|soKX_j_Q&EM4j ad;A0_qhLWegg*}e0000u4^P)jF4C*FK#m5zNWolk@edF$ zxq2xf3m!yBp+U-$9s;>+=!%5CNC@2}TP>Rf!+NN@WMhPaey4de-^}~o%p3Seh}lCn znc)Baxa5sTeWZLVG))Wlpin3vr6jtxkI}1^7%Zb zX#y}D4sjfZdx_K6jYcCR|E~&~&1PU*mUZ!Enq8Vjn7{qM;1}gcxNYVBU-|$5002ov JPDHLkV1jLc`&R$} literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.copper.molten.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.copper.molten.png new file mode 100644 index 0000000000000000000000000000000000000000..096bdd0e438ba0374da5f6230238551d96b9e125 GIT binary patch literal 469 zcmV;`0V@89P)*<*%1O(vtF@N9 z9am^HD*@Sk<#hUx-3O=7@mw%UB%;Mevl0Z82_k7jDh27h3c5Y;eb7$8=_AVxVVWiY ziD;{`+z=vZ!`_i9c6%zA&MQLe4q0xjjGc%cbX`YQEg|K#O7eY0;`WfG7a^;bsMTtl zcQBn!(RCdFDN8F#hH)0~@yNyPtJp{ol4zQSajymD=lL?(ec5Dr(d=BFLThYT{Fkmzq zQ7jf2kH>0s*JU=F@#gGawcG8L_BVFW>2wyh=Xt;T3sHPm{}X%xszrlNp`AL`00000 LNkvXXu0mjf0a3_h literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.electrum.molten.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.electrum.molten.png new file mode 100644 index 0000000000000000000000000000000000000000..ea2dcc5e116e40c7a991f13ec9c8bfee2004ef94 GIT binary patch literal 565 zcmV-50?Pe~P)L4!C zDdeV3Su(WYq^*jQl%s=OdiS$;=Uos2LO6%^j--iD(C_qqzxTfH`+o2J9{eN3G8ai`-hh&EEb;a=9EEFJF+1f=o)=~^jB$AN`d;Wu$&;!ny4~({56a~-rfIU(NQ5_YcTd$VNqR+z?V;^Zsg7fguInsJ zR-kDbmFid&i=PF+(01@GiEl|BJd&bP9gAA67L#Y55Cj35rU6haK0H&B0PO6nh2QtT z^7cb_YI4c*qY8omRaMz)Btj>A69@a&bGG%z0u1IRh~`?a*8%vQdMAz!4&uON;b0gB zolYk%ADHezgnqw|s;XqOSpYoGJ5!&7(ChUW3advF&-@#g}PvY3AX)`hUS67@V|Wit}_@00000NkvXXu0mjf Dyz>Ja literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.emerald.molten.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.emerald.molten.png new file mode 100644 index 0000000000000000000000000000000000000000..8192e0c9d5e2609a50859f4f420cd6ed9f983633 GIT binary patch literal 499 zcmVz_KpU^*Jo-lCkSS@lmKRUOa!iA)iLN@;FOY8aCH!hLuRMI zO`Sp^OU@HL2uNQ!OyQ1HXgzzSh`5}?@t%oB6x#3fyzlemkELZ=h}}cy-O}TeiB64ZHcMrsm5^}hI%uwEDKZ9h51D$q_#|i z9UoI(3RBZXrBX@7_ezMO2+OhnD3wYAO$T|I2;Lhp9Ut4a`zDvUJE|y(Fbo6d+K=~l zt(3gH{fV8oAB5+53=E*=TCG+A__p^|xUPH4Y)iapk7l!(rVsS@KtW20VHgw&1pvY@ zWM_3v4B`$wb!9((UXLGLWi?J!27v3jgkcCktyb$x|G^9zjYeuK@smDN@244ryRZKj Z+yDawo@p#B2bKT;002ovPDHLkV1jB~;tK!( literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.enderium.molten.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.enderium.molten.png new file mode 100644 index 0000000000000000000000000000000000000000..36b5033668abc01902116721dc59accdd1271afb GIT binary patch literal 527 zcmV+q0`UEbP)JgZzVrj~7g%s< zc3p+gr4WRGkdCzJE`~=Cl0ei)EYFjtcpgn-{{BVxSfcm?n601uEgoGC z8k!WErU5W$7auGy^Za{Ge5;l$vt^+819+xp=pIYVrq1x<3(oa3)MCS-dcY1w3k7x) z3FekwGCRMDSvy7XjWRSfgEBtBoUEZ18^mHU$6AAqq}gC^Yg2sjjs0^% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.fluid.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.fluid.png new file mode 100644 index 0000000000000000000000000000000000000000..38f66f3e742545494b529fdb6456c08633a19884 GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=DinK$vl=HlH+5kiEpy*OmP~yA+2Om-19;d!W!NPZ!4!i_^(}{{OdUR&D5PbaL3p zsB?p*HaPrGdUCS6ps<>&kwgi;d4z;A{P!|3INbo-U3d7N^fn_U39a;A#86kvF!Y z`JQ*d!j1>LHpg>fHI=%)r0jKG*%G-!vQ$8E_DMa(pP%YVW7#`Z1iB;^)JtyG$?oJh zvnSnC$iR3`@%w0pdCzr?owM(1Ep>3&J^9*=ZM>nOiY)~Ud(S!RbRE)Osu$WSkkE6` z#P{2_*3?KHhAX9SXG$8n2?)+9{`QfFAwkByI_v!M%&tU`*GO+KUgL+rx$ yzXvUkY3yz;ja|zTFm0(gPxelF{r5}E*HGILu1 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.fuel.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.fuel.png new file mode 100644 index 0000000000000000000000000000000000000000..fbd17c6c29be6578091d7740da2e288cc0e83164 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDUH8nL23=BMSfbYhQ8%0G$ z|NsAAv0}xvY194)IW7UJVJr#q3ubV5b|VeMN%D4gVd!9$^#F1>3p^r=85p>QL70(Y z)*K0-AbW|YuPgg~b}1fJR^#29_5y{}JzX3_IIbrr9AKX@Ws1lGlPRo84o?zHIye`K kNQfjTaY?vo8VIm5Jal8Kzw_pY5>N|+r>mdKI;Vst07EV~P5=M^ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.glass.molten.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.glass.molten.png new file mode 100644 index 0000000000000000000000000000000000000000..e98cccc1373d27b7033a9db3aa1c7a284bd9bfa9 GIT binary patch literal 494 zcmVlbpcQ)*SLDBGCAzV z-J=j*o)_6{766A;>gL*t80_z6acYe50T+dG4FJE_#q@}q%hD_1<$2NZ3Yw-73WWqf z{P@(kcziKq8>>qKAQFiXi^c2jbFed;GKVthQXU5^hJ?BTeofWi;sH)29 zR@|6TY9{&m`HjA-wCMN>?a4-?Q2>HoA$0xLBt8uF@_2JYCX=B(KwAX>`FtK#RRPd- z9VsP!GHtsvj-PH^ePY(I^E<7FTrNkkSR@z>QmIq`D3wYy8V!{4-9|E*{3O4lf>bJH kVkzbC{({xMcK;K52iC=h3B=3jaR2}S07*qoM6N<$f}sV}u>b%7 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.glue.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.glue.png new file mode 100644 index 0000000000000000000000000000000000000000..0e7a23e1c47e8a792e714e113887ed96e3fb3cfd GIT binary patch literal 543 zcmV+)0^t3LP)G}P9-}iYQ_(w>?N3bF*KYW$Got^UI(q?IS5#Xjk0A*)Qc)pG2+W@4J=`h*zZC<@D zh`wi`mQ6|5_2?gzN+nFwWOI8(%spF(bPr_Dw|W2WD9kYoBg#P2G>XNd1V`-duZw^Q zfLi`60Vs-ss;U@jgUUTSlo8C+ihf7CY#Ly;5g20 z_fd>JbY&-=d=YW>@nNOaYSHa>DHICydOZLv%VIDXaP@n(T&vY0^#97BUayC;<2VmL hrs1QB!~O361=m8IvD|Kx9~A%q002ovPDHLkV1mcs^s4{> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.gold.molten.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.gold.molten.png new file mode 100644 index 0000000000000000000000000000000000000000..54836be469a51a39d9dd349bdfb97db933a8a67c GIT binary patch literal 476 zcmV<20VDp2P)SF6>%*icYn zsho3Tu`mFJVH1mmF$^0}#V$zrlS}2C`|-XYlX)Z(IVKc30l;zQ%w|hoUR4ak=KAVE zwA<}%fU2sDMkDI=wHu9|dWpLbMUe!+1|a!I&~+U}kwiLe3xL^diQ~+1oH^O-N+^mX zipApL9oV*wuIm7#)92!gzXG7u3cJ(k8=Cec4gxk1S(d5S*Y0q5>jgW`C6&sBfPQcX zo6TyP27qbai^1U83rr-I^!t69&89d1-VQeE^?Jy%Ofs1Sz_P6G>id#@dU1uqog3so z@;|!WF5~f-d_Iq9ngC2D6BdgFozB@!tybG=|6m7=M#Hl$%lh44@N2jFpXd`}WSl#; S|6j5I0000C}S& literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.invar.molten.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.invar.molten.png new file mode 100644 index 0000000000000000000000000000000000000000..9766f9a175faadfb353ab780954a99eb9bfa4da9 GIT binary patch literal 532 zcmV+v0_**WP)29|pNfL_1BD$_qE|&?zkR(ay_xq_3f^N5~ zEEbE)J7~391VMmhS!uOe1t1JVbX}LR5Q1K>Cwn~4yL8~XF3o0B0dO2A6+*~byWLg* zI-L%~;SkUBu8$DMF|O+ZNTCdlGK9}}$9RRFWD@@Y_!1sNkC?bj?C6D{yzE9RLj5Kfk z;d!!LF4=50G#U-|`#k{L?UvK&#NlvwH?ElrlbUKxB6h-&{Oy{2_4|jL}FZc}x WhOu?UYv&jM0000P)+2ZUJZBflllK()HK}3`7(GXN19<&PS zbO|9OqIg6H34+{}9HbC&4RXh63PC~7^!@pKA0FNp{u^RiF&2wCaWEJh>lF%x*#!1t zCb?`S!XW^ZwnicxLTPJUKfQ@bBH>=nB$q9%_sY`CBe8{fA|XEj4b7yg4_V*ZMrmuD zmg@qbTCFnYmU>#Qi+#Ug?W`<1i;4Z e!X(_+{{&y-PnI3QY~EY|0000@E literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.jungle.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.jungle.png new file mode 100644 index 0000000000000000000000000000000000000000..eaf23ea964c34aab9c0c4017c0a6b7d3ac5bba24 GIT binary patch literal 542 zcmV+(0^$9MP)wcACqHE zRaIuro+KOEgG(Dk-zCOKeWXciaajRgy!&A)3MR*zIz4p^V+=WA5n+Di9#41FNI^1&)n~7%r!}^=yL7fT0TAnOwS-z)CmSB++O0O*olvMQ0hZ=w zx%=ojH}5~*DGI^oxU@lQ={Bv!Wv-k*jWMP=gAjVu)`c^~;8|!tKm_tUqN>bZoF@3Z zGH|zBfyRIli?fc)=T32G`~(1>H`WpB3P6@f)x!GwpXSosJO__V5PXhU*BhYkV#E@B zj?cT?xU*JTr07*qoM6N<$f-4m7tN;K2 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.lava.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.lava.png new file mode 100644 index 0000000000000000000000000000000000000000..244b551414390ed8895dcf2d49710fc2030ee41e GIT binary patch literal 492 zcmVWprnsR)~+g?M3ix9MmOCUy2v;{%Xl8eyL)DX@s%~65aqCRY~ zaCtO{i=&c+`6n#!i48f$Z75&Qd_qvrH=T3tIo~LpTKkfq-QzielNRRB9x5 z(y4GSv?!*xRs&RuFRuO(L0P?xPQ~HU$$ht&@X0s`Z z#o{o5q9~juYa+4gl2hBuNPt`e5%MBJUVLsh_4FmX-I<}aC+v={>ujdp#M;iC0H|l{ z$Xo-NYp`3Z z%l?U#EUynJMxugh)p>$}vhjHQBXD#f?n|Yw`_9&>&Q~!EgMok}8VpdWRM0dHzuyml zX__D19We3J7Z*q$OQ*QY?v%@ATCEnrV31Cy13*(vC>;-b8Q>d9|Az{mT1~lB9RD2 zt4z9fC3Ib%o;RvtLWVl zdbh-leJb*#L_8i}tifO~K+`k;qR}x4_W0~hesu25TPl@`SV%A-k!6{Sz=PvI@43nP zS&2YwBpQtcuP{+InM?w(bv+V>@$4ox?RP#J4T{Ag69H#5n7}kmWLZX06aXyCA`lzR z-5K9cH|{mP;>?RLd7XN_PP^SE91hd(_W|g1It+(HR(C!xv)Sy__zNc}6bi0wS=R6V ff*0Sr{|UYTvwo4|f4RK-00000NkvXXu0mjfrlHKZ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.lumium.molten.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.lumium.molten.png new file mode 100644 index 0000000000000000000000000000000000000000..3f4abb930eaef321275ac941ee25f5c6aa85168f GIT binary patch literal 461 zcmV;;0W$uHP)oHaB+`t7K9ocY>B{C@E>S$Y?az-aET6Yjze$? z7im(IngoOUfem-V3D;nEoOwb}&@;X7%kw_Z%ft5z{|%8eER{-8ttd)VYnryjO(!jO zJJleQl>zWwlT22|cg@H!E+pd1-A*-FdCpo{$`Kb?c@9#(fbW{r8k!gmhXADFr`8&p z0Fd&9xGR~gOj^p}S<{FUA{B3RU8mmci_`O40kHBMeAkRz>&?DswOYF~ST2|7x(-04 zQrU2NxVsEIYs$^zv)CyRim0l}{q=G1v40kkefJ6DV7^ zioQaA=A(^#HTuNzp zI+PR(TBTBG6DftJTbvqFi6SU?rgJa%o_9Fh2mcKb)y!lv0Z$|n0oOF`dx7!dj<@Tl z7t;XPJ)87m8oOuny#6FU3&q0AJKnCJ>ZbhR%MhpTu=={nfp>sYcNo45Ieb6z*B(=T z*kLSe^={S_3vQhJQXX|)MGhnY>by#FCW&QP+|8O3u4CcCFbpiECNARV0-!Z&AqNsU zkZ8$kVJS6HC=@0#m<|{Hejmdy0LbNXf;d>z04TbbzTVZTR4U?2fw739D4e{V`rF!8 zFnn`-%jVUFXf~VC4#vrrN+kgHZ})_hG8k-)TJ)N8n5Id!T8++Nj7Fn@q9~}U3V`dn zY+h|d-c0PL7k7X5;79eR!i8~c}p^$Gi5Iw+UR0e4;Z hcYh&_&#(UpJ^*gfmi^B2n~DGc002ovPDHLkV1o8K(Ru&? literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.milk.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.milk.png new file mode 100644 index 0000000000000000000000000000000000000000..eecb054ca66dcefda32bac370c22e5b825519dd3 GIT binary patch literal 365 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP~yA&s{j@Ep)2|%G=o-U3d7N?H}EB3V-h{*hVCu?y3 zdQzNhA9n$d3D-~CdCUs}TDT_`o^XYp=YD0WiI2c7GB*-%|Y=Wlx7vW zbdor9DYQ^gNDBeUE1^S42jid#(WW3Mc&2;rJMZ4ZdH2D8LnIY7O^aehQKGn7txj-f zlP+pUl|ad5fB;+iEn1~wDm=LgE3b5 zKvqnvckL zPd@rvOLV8bLg;L%R07~)XIV6x&4}oDtITz~G#U*;11CHP(dl$hRh2@a0DzPd{jHU_ zGpV0$+&!B?Qhg?#wA*d^{XV*`REl^! z4nVnFo+8ik3*QkMoM!RoS&VbnvCi)XL4E*0cz%(qSFZ8l<9m|HBpX}L3Hc-&o8biy zi(N|Ft9mKA41m|`vJ_p$>vh?DaUk};HgJCQxqasrz~2NuO53a2b6mpu3k$!yL}D?b zQGt@52y2JUt^3;Rb$RmC7WI04vIm(=2HUpTDMs|=m74%4DT%~lfj#UyWOFKru`G+Z zaRsJnlFccxzV=Q44EqjBN|cm5di+gfb4uj%`5<`e2}&tU(*$6B?ZIIs1;Fb!clGzi zXI_@;6O#)a9hFiF!!Xz>M)a?Rjex9Vk++S90@}<>;Lo*CC;%{ju_X5Q_5$LWOAhUJ zn_8_F$Ok5S;G@-QVHgI9L;?WUbq}jgWA3uSb^rhX07*qoM6N<$ EfcV>=7HbK3+o#5%_oS$#bIr9(v?=TxB56|t;VHQ9GA_B&s8fd=xn9~=2KOCq} zDGCcmXV_LM5hV%Ud(;Oi)e7gYJyWsp_+{7R0EhNY>A~4D#u`)=RV5n?@FAeyllBc~ zj@L2PB4YGWt78D{7$71%c=4TL5;I6szNP6XZ!Lu=B2G$dsZ_aq^EJI6gGtvDfb)T? z=T30<>1S>|?2d}o;+-Q(5-wbCaZMDWg`K&@8EkI-6OGp8@zX3z9A&N)Pc z5CXw_L}3A6vsKw`~fH?F+mL>1h#Lj zp<}nLci_Een1#&&PhNG**(>+3){-R2$c1B}wKSGiXsxc9O#uK=WO3f}>FXDwIObiq zGXYepmA~a1|Aiy_XSCn{IeEr%xk#_q&)xn{;up)8!1e}S%ew#o002ovPDHLkV1f@6 B_oDy+ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.obsidian.molten.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.obsidian.molten.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ad491bdae0bc2b11e0aebe2fa213e1b5c2ddba GIT binary patch literal 481 zcmV<70UrK|P)BeGm7+WmYBG5SzFUE?(aw_Gswd z&65r%jE1A$Ki-Mg{+r&O-vPiLwUCJwWMTz?Tl)q>#>Y}e!i8y?7&0!J$!h`7d+%b8 zTG*o&-qMROWL%U=rLh@A!^Lno#57F+a=Dx^l5spoG#ZWX4SW+RC0Vtl z_s{o&xJSFk6i*5`jx*W7pKQ5Y2H@bLC@jkgF81ELIF3WTUZ>e?PM(1e+qRKXlF4KM zP)boeDNNj%$g~@GdU&R%+QfW5AG85rSr$qu04kNrSp07j)M~YW`{G~!g)qLp{wMeV Xzu1ib5cIm>00000NkvXXu0mjfkL}Ey literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.oil.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.oil.png new file mode 100644 index 0000000000000000000000000000000000000000..e04577d669e9691fd5f1f8e1fdec1bc6d5dfb31a GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDUH8nL23=F(+;|5TmsHkYg ziWSqQP5b}<|7p%sia;U8k|4ie28U-i(mVYdVT^>3xlVtpUXO@geCyyi8Sy4 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.pigiron.molten.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.pigiron.molten.png new file mode 100644 index 0000000000000000000000000000000000000000..e9e958cdbd8db07a8e901c898f169e3a50ed9c6a GIT binary patch literal 565 zcmV-50?Pe~P)Waa&SNZsH)0bNP6<7cSEdV7(7r{05I&vsmR23-5y&bIm&4^n@H0Y=(^6^ z??1%--H!smb$b|g1H*3c+Bph{f+k+6DP6tI%$Ye4Ac%H}n+C34+l`i^af9<>v;?5J(j&0lY`+YP`V=x#nnS{%5 zI3%&W{Jd7H&6NMw3hMQGWP6@>@nxD`nmC-j{lDNhXalN-e>N-100000NkvXXu0mjf Da`ySq literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.redplasma.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.redplasma.png new file mode 100644 index 0000000000000000000000000000000000000000..f9d4c2d05227bdc2652180a1faf67edab2b4abf3 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aH8nM@XJEK-<3?a$;C}{& zY15{ySh1q0sObOy{|8fURREPSmIV0)GdMiEkp|)&XcR*d7Zkz@JtPEGQnC#Pkb8i9aWbkzLb6Mw<&;$S-06Cce literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.shiny.molten.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.shiny.molten.png new file mode 100644 index 0000000000000000000000000000000000000000..aeb1e35164faec9706d66ba5b5fd933d5bf2e47b GIT binary patch literal 576 zcmV-G0>Axm>dK0hbIawIQQF#t!1v zDdZOGk|l!;r?o|qM6M3zLUQTd zl1L;1K(SanLY@^DULa_mAoSxj()@Llv)g`>mjH0;WQc25m)ZIFo_IXYdf_QSkEEf| zJ7=S?O=6?qE{2x?(7P=b!%OJh7M({g#Fww1FuDgs6E^{d0v-|@1=n;A*qc9OA@q|A zXD-3T^X%9SjNgacdA9EA-4@#YhoV}oPWB+3PNQiWfz37d#^qZ8wC%=FWMmt?4uee2 z&ruYGx$z2QS!R&QiM`t^0>J2XXxk0ib_0Foff!_RBAdO!-#<`&`F3J*!Rb*sj)Npg1UA>)=SJ8kKd~FEZtV+oith_}bIs@T0KEEjMeKgt z^@+wp7*$oNR4RV?z+?|R)a!L5Ng@`D0bp4ct6TeG7I*HrU-tFgWp~zjVBD$IYBZZo zQmGWCX%5HNZqx7giK^YlrBZ34{J&OEE|-1VvaI7T)A-WN!u0L`1%CjZv9`jP0Xqi( O0000ARkQc|1a(Bcv*d3>71O+|Q`@X#I^E^EK|M1@s>xQ{pF03<|OjtLY&F=|< z!}{T?FDVWHo}(Zs4xXcM^L{2)iA40ceq{Nc69+(&U7{qOE0ajsc+NJZ(XQzAdH}?t zR!h%20w9sHLsbAtagbz}nVq6E+Ff!Ti#D33QJEw~@##PSc&@xqcN9vaJyDq?MY&vF z${-$XEXzXEGyn>P!lzOafX0d8&+HWU-LBY35Rj;+2l^ z$yTdX0MfNP(eL-e#eG*s*L6Cb4ncrlG6*mn4pCK=Y&HvkX_^c5HHiK6#hpGh{B`rK zXfqfL7>~!~^LeJzDFB9HFrUwPIX=H`wOUK|H#%sy+hJ{*=I{PO6szigf)8Ghi`K?| RHHZKJ002ovPDHLkV1lTb#x(!{ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/woodenbucket/textures/items/bucket.silver.molten.png b/src/main/resources/assets/woodenbucket/textures/items/bucket.silver.molten.png new file mode 100644 index 0000000000000000000000000000000000000000..313358e26c6100dd027bc0d0ba3bfcf1ecb18748 GIT binary patch literal 560 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 literal 0 HcmV?d00001 diff --git a/temp-icon.png b/temp-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b7c4d0b03db544a0723abf813e3450ba70f8a219 GIT binary patch literal 15144 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 literal 0 HcmV?d00001 diff --git a/woodenBucketIcon36x36.png b/woodenBucketIcon36x36.png new file mode 100644 index 0000000000000000000000000000000000000000..4d849da49bda4bbd1f24eece3b4c96699343e9a0 GIT binary patch literal 570 zcmV-A0>%A_P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0nbT9K~z{r?U%nx z0%07+y^~I|!LrMOD6t?*nj%Pp1{a|v2psw`71-DiPW30~f6&lWlhn`qKk&G+%X!3pQ7L*7Xr`0%{%c0PRH_f9Svjg}1>f(wO0F$$ zS~GCv3U0R>8}@|lBp3{8uc7}3Qlq6A%G@4HD>+6ZC#~cRxR#|=eKa{k4K-BTNJ7{~ z3W5o#gw@(t&Ga6UP-;wn4N)^!#SJ9!AuJ$y-iTB}FbPPP?GgD)dKvECbi zji9fF*gJ=Le)#~|?9lu$mW(S<4YQ>ive{v>*{Pi$qBCZw@cs$=E5Dlgl+Hq8Xhej~ z%ns2R4K>Q)+dgat%{A22H#ObdcF~Na6Gu0=eb|O9@+D;EIgh+a7LZCOi|Cx2n(mca zSTod4tLS@%h(t{O7FR=Ub_o6cFZ(OB+fX