diff --git a/.gitignore b/.gitignore index c50e6fb7..82163334 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.gradle # IntelliJ /build /run diff --git a/build.gradle b/build.gradle new file mode 100644 index 00000000..cf66ddab --- /dev/null +++ b/build.gradle @@ -0,0 +1,67 @@ +buildscript { + repositories { + mavenCentral() + 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' + } +} + +apply plugin: 'forge' + +version = "1.0" +group= "binnie" // http://maven.apache.org/guides/mini/guide-naming-conventions.html +archivesBaseName = "binnie" + +minecraft { + version = "1.7.10-10.13.4.1558-1.7.10" + if (file('../run').exists()){ + assetDir = "../run/assets" + }else{ + assetDir = "assets" + } +} + +dependencies { + // you may put jars on which you depend on in ./libs + // or you may define them like so.. + //compile "some.group:artifact:version:classifier" + //compile "some.group:artifact:version" + + // real examples + //compile 'com.mod-buildcraft:buildcraft:6.0.8:dev' // adds buildcraft to the dev env + //compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env + + // for more info... + // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html + // http://www.gradle.org/docs/current/userguide/dependency_management.html + +} + +processResources +{ + // this will ensure that this task is redone when the versions change. + inputs.property "version", project.version + inputs.property "mcversion", project.minecraft.version + + // replace stuff in mcmod.info, nothing else + from(sourceSets.main.resources.srcDirs) { + include 'mcmod.info' + + // replace version and mcversion + expand 'version':project.version, 'mcversion':project.minecraft.version + } + + // copy everything else, thats not the mcmod.info + from(sourceSets.main.resources.srcDirs) { + exclude 'mcmod.info' + } +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 00000000..b7612167 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..678d9d8d --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Wed Jul 02 15:54:47 CDT 2014 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-2.0-bin.zip diff --git a/gradlew b/gradlew new file mode 100644 index 00000000..91a7e269 --- /dev/null +++ b/gradlew @@ -0,0 +1,164 @@ +#!/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 + +# For Cygwin, ensure paths are in UNIX format before anything is touched. +if $cygwin ; then + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` +fi + +# 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\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +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"` + + # 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 00000000..8a0b282a --- /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 Windowz 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/libs/buildcraft-7.1.13-dev.jar b/libs/buildcraft-7.1.13-dev.jar new file mode 100644 index 00000000..8c845f03 Binary files /dev/null and b/libs/buildcraft-7.1.13-dev.jar differ diff --git a/libs/forestry_1.7.10-4.2.2.50-dev.jar b/libs/forestry_1.7.10-4.2.2.50-dev.jar new file mode 100644 index 00000000..3ddb2394 Binary files /dev/null and b/libs/forestry_1.7.10-4.2.2.50-dev.jar differ diff --git a/libs/industrialcraft-2-2.2.796-experimental-api.jar b/libs/industrialcraft-2-2.2.796-experimental-api.jar new file mode 100644 index 00000000..3541848c Binary files /dev/null and b/libs/industrialcraft-2-2.2.796-experimental-api.jar differ diff --git a/src/main/java/binnie/Binnie.java b/src/main/java/binnie/Binnie.java new file mode 100644 index 00000000..a2555563 --- /dev/null +++ b/src/main/java/binnie/Binnie.java @@ -0,0 +1,39 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie; + +import java.util.ArrayList; +import binnie.core.resource.ManagerResource; +import binnie.core.item.ManagerItem; +import binnie.core.machines.ManagerMachine; +import binnie.core.liquid.ManagerLiquid; +import binnie.core.mod.config.ManagerConfig; +import binnie.core.genetics.ManagerGenetics; +import binnie.core.language.ManagerLanguage; +import binnie.core.ManagerBase; +import java.util.List; + +public final class Binnie +{ + public static final List Managers; + public static final ManagerLanguage Language; + public static final ManagerGenetics Genetics; + public static final ManagerConfig Configuration; + public static final ManagerLiquid Liquid; + public static final ManagerMachine Machine; + public static final ManagerItem Item; + public static final ManagerResource Resource; + + static { + Managers = new ArrayList(); + Language = new ManagerLanguage(); + Genetics = new ManagerGenetics(); + Configuration = new ManagerConfig(); + Liquid = new ManagerLiquid(); + Machine = new ManagerMachine(); + Item = new ManagerItem(); + Resource = new ManagerResource(); + } +} diff --git a/src/main/java/binnie/Constants.java b/src/main/java/binnie/Constants.java new file mode 100644 index 00000000..e070d020 --- /dev/null +++ b/src/main/java/binnie/Constants.java @@ -0,0 +1,15 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie; + +public final class Constants +{ + public static final String LiquidJuice = "juice"; + public static final String LiquidWater = "water"; + public static final String LiquidSeedOil = "seedoil"; + public static final String LiquidCreosote = "Creosote Oil"; + public static final String LiquidEthanol = "bioethanol"; + public static final String LiquidHoney = "for.honey"; +} diff --git a/src/main/java/binnie/botany/Botany.java b/src/main/java/binnie/botany/Botany.java new file mode 100644 index 00000000..5923fd78 --- /dev/null +++ b/src/main/java/binnie/botany/Botany.java @@ -0,0 +1,334 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany; + +import cpw.mods.fml.common.event.FMLInterModComms; +import cpw.mods.fml.common.eventhandler.Event; +import net.minecraftforge.event.entity.player.BonemealEvent; +import net.minecraft.world.IBlockAccess; +import binnie.core.BinnieCore; +import net.minecraft.world.World; +import net.minecraftforge.event.world.BlockEvent; +import net.minecraft.block.Block; +import binnie.botany.api.EnumAcidity; +import binnie.botany.api.EnumSoilType; +import binnie.botany.api.gardening.IBlockSoil; +import binnie.botany.gardening.Gardening; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import net.minecraft.item.ItemStack; +import binnie.botany.api.IFlower; +import net.minecraft.tileentity.TileEntity; +import forestry.api.genetics.IIndividual; +import binnie.botany.core.BotanyCore; +import net.minecraft.entity.EntityLivingBase; +import binnie.botany.flower.TileEntityFlower; +import net.minecraft.init.Items; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import binnie.core.network.BinniePacketHandler; +import binnie.core.proxy.IProxyCore; +import binnie.botany.network.PacketID; +import binnie.core.network.IPacketID; +import binnie.botany.core.BotanyGUI; +import binnie.core.gui.IBinnieGUID; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import binnie.botany.gardening.ModuleGardening; +import binnie.botany.genetics.ModuleGenetics; +import binnie.botany.core.ModuleCore; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import binnie.botany.ceramic.BlockCeramicBrick; +import binnie.botany.ceramic.BlockStained; +import binnie.botany.ceramic.BlockCeramicPatterned; +import binnie.botany.ceramic.BlockCeramic; +import binnie.botany.items.ItemClay; +import binnie.botany.items.ItemPigment; +import binnie.botany.flower.ItemFlower; +import binnie.botany.genetics.ItemEncyclopedia; +import binnie.core.item.ItemMisc; +import binnie.botany.gardening.ItemSoilMeter; +import binnie.botany.flower.ItemInsulatedTube; +import binnie.botany.gardening.BlockSoil; +import binnie.botany.gardening.ItemTrowel; +import binnie.botany.gardening.BlockPlant; +import binnie.botany.genetics.ItemDictionary; +import net.minecraft.item.Item; +import binnie.botany.flower.BlockFlower; +import cpw.mods.fml.common.SidedProxy; +import binnie.botany.proxy.Proxy; +import cpw.mods.fml.common.Mod; +import binnie.core.AbstractMod; + +@Mod(modid = "Botany", name = "Botany", useMetadata = true, dependencies = "after:BinnieCore") +public class Botany extends AbstractMod +{ + public static final float AGE_CHANCE = 0.2f; + @Mod.Instance("Botany") + public static Botany instance; + @SidedProxy(clientSide = "binnie.botany.proxy.ProxyClient", serverSide = "binnie.botany.proxy.ProxyServer") + public static Proxy proxy; + public static BlockFlower flower; + public static Item seed; + public static Item pollen; + public static ItemDictionary database; + public static BlockPlant plant; + public static ItemTrowel trowelWood; + public static ItemTrowel trowelStone; + public static ItemTrowel trowelIron; + public static ItemTrowel trowelDiamond; + public static ItemTrowel trowelGold; + public static BlockSoil soil; + public static BlockSoil loam; + public static BlockSoil flowerbed; + public static BlockSoil soilNoWeed; + public static BlockSoil loamNoWeed; + public static BlockSoil flowerbedNoWeed; + public static ItemInsulatedTube insulatedTube; + public static ItemSoilMeter soilMeter; + public static ItemMisc misc; + public static ItemEncyclopedia encyclopedia; + public static ItemEncyclopedia encyclopediaIron; + public static ItemFlower flowerItem; + public static ItemPigment pigment; + public static ItemClay clay; + public static BlockCeramic ceramic; + public static BlockCeramicPatterned ceramicTile; + public static BlockStained stained; + public static BlockCeramicBrick ceramicBrick; + + @Mod.EventHandler + public void preInit(final FMLPreInitializationEvent evt) { + this.addModule(new ModuleCore()); + this.addModule(new ModuleGenetics()); + this.addModule(new ModuleGardening()); + this.preInit(); + } + + @Mod.EventHandler + public void init(final FMLInitializationEvent evt) { + this.init(); + } + + @Mod.EventHandler + public void postInit(final FMLPostInitializationEvent evt) { + this.postInit(); + } + + public Botany() { + Botany.instance = this; + } + + @Override + public IBinnieGUID[] getGUIDs() { + return BotanyGUI.values(); + } + + @Override + public Class[] getConfigs() { + return new Class[0]; + } + + @Override + public IPacketID[] getPacketIDs() { + return PacketID.values(); + } + + @Override + public IProxyCore getProxy() { + return Botany.proxy; + } + + @Override + public String getChannel() { + return "BOT"; + } + + @Override + public String getModID() { + return "botany"; + } + + @Override + protected Class getPacketHandler() { + return PacketHandler.class; + } + + @SubscribeEvent + public void onShearFlower(final PlayerInteractEvent event) { + if (event.action != PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) { + return; + } + if (event.entityPlayer != null && event.entityPlayer.getHeldItem() != null && event.entityPlayer.getHeldItem().getItem() == Items.shears) { + final TileEntity tile = event.world.getTileEntity(event.x, event.y, event.z); + if (tile instanceof TileEntityFlower) { + final TileEntityFlower flower = (TileEntityFlower) tile; + flower.onShear(); + event.entityPlayer.getHeldItem().damageItem(1, event.entityPlayer); + } + } + if (event.entityPlayer != null && event.entityPlayer.getHeldItem() != null && event.entityPlayer.getHeldItem().getItem() == Botany.pollen) { + final TileEntity tile = event.world.getTileEntity(event.x, event.y, event.z); + if (tile instanceof TileEntityFlower) { + final TileEntityFlower flower = (TileEntityFlower) tile; + final IFlower pollen = BotanyCore.getFlowerRoot().getMember(event.entityPlayer.getHeldItem()); + if (pollen != null && flower.canMateWith(pollen)) { + flower.mateWith(pollen); + if (!event.entityPlayer.capabilities.isCreativeMode) { + final ItemStack heldItem = event.entityPlayer.getHeldItem(); + --heldItem.stackSize; + } + } + } + } + } + + @SubscribeEvent + public void onFertiliseSoil(final PlayerInteractEvent event) { + if (event.action != PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) { + return; + } + if (event.world == null) { + return; + } + if (event.entityPlayer != null && event.entityPlayer.getHeldItem() != null) { + int y = event.y; + Block block = event.world.getBlock(event.x, y, event.z); + if (block == null || !Gardening.isSoil(block)) { + block = event.world.getBlock(event.x, --y, event.z); + } + if (block == null) { + return; + } + if (Gardening.isSoil(block)) { + final IBlockSoil soil = (IBlockSoil) block; + if (Gardening.isNutrientFertiliser(event.entityPlayer.getHeldItem()) && soil.getType(event.world, event.x, y, event.z) != EnumSoilType.FLOWERBED) { + final EnumSoilType type = soil.getType(event.world, event.x, y, event.z); + final int next = Math.min(type.ordinal() + Gardening.getFertiliserStrength(event.entityPlayer.getHeldItem()), 2); + if (soil.fertilise(event.world, event.x, y, event.z, EnumSoilType.values()[next]) && !event.entityPlayer.capabilities.isCreativeMode) { + final ItemStack heldItem = event.entityPlayer.getHeldItem(); + --heldItem.stackSize; + return; + } + } + if (Gardening.isAcidFertiliser(event.entityPlayer.getHeldItem()) && soil.getPH(event.world, event.x, y, event.z) != EnumAcidity.Acid) { + final EnumAcidity pH = soil.getPH(event.world, event.x, y, event.z); + final int next = Math.max(pH.ordinal() - Gardening.getFertiliserStrength(event.entityPlayer.getHeldItem()), 0); + if (soil.setPH(event.world, event.x, y, event.z, EnumAcidity.values()[next]) && !event.entityPlayer.capabilities.isCreativeMode) { + final ItemStack heldItem2 = event.entityPlayer.getHeldItem(); + --heldItem2.stackSize; + return; + } + } + if (Gardening.isAlkalineFertiliser(event.entityPlayer.getHeldItem()) && soil.getPH(event.world, event.x, y, event.z) != EnumAcidity.Alkaline) { + final EnumAcidity pH = soil.getPH(event.world, event.x, y, event.z); + final int next = Math.min(pH.ordinal() + Gardening.getFertiliserStrength(event.entityPlayer.getHeldItem()), 2); + if (soil.setPH(event.world, event.x, y, event.z, EnumAcidity.values()[next]) && !event.entityPlayer.capabilities.isCreativeMode) { + final ItemStack heldItem3 = event.entityPlayer.getHeldItem(); + --heldItem3.stackSize; + return; + } + } + if (Gardening.isWeedkiller(event.entityPlayer.getHeldItem()) && Gardening.addWeedKiller(event.world, event.x, y, event.z) && !event.entityPlayer.capabilities.isCreativeMode) { + final ItemStack heldItem4 = event.entityPlayer.getHeldItem(); + --heldItem4.stackSize; + } + } + } + } + + @SubscribeEvent + public void plantVanilla(final BlockEvent.PlaceEvent event) { + final World world = event.world; + final int x = event.x; + final int y = event.y; + final int z = event.z; + final Block block = world.getBlock(x, y - 1, z); + if (!(block instanceof IBlockSoil)) { + return; + } + final IFlower flower = BotanyCore.getFlowerRoot().getConversion(event.itemInHand); + if (flower != null) { + Gardening.plant(world, x, y, z, flower, event.player.getGameProfile()); + } + } + + @Deprecated + public void onPlantVanilla(final PlayerInteractEvent event) { + if (!BinnieCore.proxy.isSimulating(event.world)) { + return; + } + if (event.action != PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) { + return; + } + if (event.entityPlayer != null && event.entityPlayer.getHeldItem() != null) { + final World world = event.world; + final int x = event.x; + final int y = event.y; + final int z = event.z; + final Block block = world.getBlock(x, y, z); + int py = -1; + if (block instanceof IBlockSoil && (world.isAirBlock(x, y + 1, z) || world.getBlock(x, y, z).isReplaceable(world, x, y, z))) { + py = 1; + } + if (py >= 0) { + final IFlower flower = BotanyCore.getFlowerRoot().getConversion(event.entityPlayer.getHeldItem()); + if (flower != null && Gardening.plant(world, x, y + py, z, flower, event.entityPlayer.getGameProfile()) && !event.entityPlayer.capabilities.isCreativeMode) { + final ItemStack heldItem = event.entityPlayer.getHeldItem(); + --heldItem.stackSize; + } + } + } + } + + @SubscribeEvent + public void onBonemeal(final BonemealEvent event) { + final Block block = event.world.getBlock(event.x, event.y, event.z); + if (Gardening.isSoil(block)) { + final IBlockSoil soil = (IBlockSoil) block; + if (soil.fertilise(event.world, event.x, event.y, event.z, EnumSoilType.LOAM)) { + event.setResult(Event.Result.ALLOW); + } + } + final TileEntity tile = event.world.getTileEntity(event.x, event.y, event.z); + if (tile instanceof TileEntityFlower && ((TileEntityFlower) tile).onBonemeal()) { + event.setResult(Event.Result.ALLOW); + } + } + + @Override + public boolean isActive() { + return BinnieCore.isBotanyActive(); + } + + @Mod.EventHandler + public void onIMC(final FMLInterModComms.IMCEvent event) { + for (final FMLInterModComms.IMCMessage message : event.getMessages()) { + if (message.key.equals("add-nutrient-fertiliser-1")) { + ModuleGardening.queuedNutrientFertilisers.put(message.getItemStackValue(), 1); + } + if (message.key.equals("add-nutrient-fertiliser-2")) { + ModuleGardening.queuedNutrientFertilisers.put(message.getItemStackValue(), 2); + } + if (message.key.equals("add-acid-fertiliser-1")) { + ModuleGardening.queuedAcidFertilisers.put(message.getItemStackValue(), 1); + } + if (message.key.equals("add-acid-fertiliser-2")) { + ModuleGardening.queuedAcidFertilisers.put(message.getItemStackValue(), 2); + } + if (message.key.equals("add-alkaline-fertiliser-1")) { + ModuleGardening.queuedAlkalineFertilisers.put(message.getItemStackValue(), 1); + } + if (message.key.equals("add-alkaline-fertiliser-2")) { + ModuleGardening.queuedAlkalineFertilisers.put(message.getItemStackValue(), 1); + } + } + } + + public static class PacketHandler extends BinniePacketHandler + { + public PacketHandler() { + super(Botany.instance); + } + } +} diff --git a/src/main/java/binnie/botany/CreativeTabBotany.java b/src/main/java/binnie/botany/CreativeTabBotany.java new file mode 100644 index 00000000..ad860e38 --- /dev/null +++ b/src/main/java/binnie/botany/CreativeTabBotany.java @@ -0,0 +1,48 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany; + +import net.minecraft.item.Item; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.creativetab.CreativeTabs; + +public class CreativeTabBotany extends CreativeTabs +{ + public static CreativeTabs instance; + + @Override + public ItemStack getIconItemStack() { + return new ItemStack(Blocks.red_flower, 1, 5); + } + + public CreativeTabBotany() { + super("Botany"); + } + + @Override + public String getTranslatedTabLabel() { + return this.getTabLabel(); + } + + @Override + @SideOnly(Side.CLIENT) + public String getTabLabel() { + return Botany.proxy.localise("tab.botany"); + } + + @Override + @SideOnly(Side.CLIENT) + public Item getTabIconItem() { + return Item.getItemFromBlock(Blocks.yellow_flower); + } + + static { + CreativeTabBotany.instance = new CreativeTabBotany(); + } +} diff --git a/src/main/java/binnie/botany/api/EnumAcidity.java b/src/main/java/binnie/botany/api/EnumAcidity.java new file mode 100644 index 00000000..bab260b8 --- /dev/null +++ b/src/main/java/binnie/botany/api/EnumAcidity.java @@ -0,0 +1,16 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.api; + +public enum EnumAcidity +{ + Acid, + Neutral, + Alkaline; + + public String getID() { + return this.name().toLowerCase(); + } +} diff --git a/src/main/java/binnie/botany/api/EnumFlowerChromosome.java b/src/main/java/binnie/botany/api/EnumFlowerChromosome.java new file mode 100644 index 00000000..08321a5d --- /dev/null +++ b/src/main/java/binnie/botany/api/EnumFlowerChromosome.java @@ -0,0 +1,51 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.api; + +import forestry.api.genetics.IAlleleFloat; +import forestry.api.genetics.IAlleleTolerance; +import forestry.api.genetics.IAlleleArea; +import forestry.api.genetics.IAlleleInteger; +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.ISpeciesRoot; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.IChromosomeType; + +public enum EnumFlowerChromosome implements IChromosomeType +{ + SPECIES(IAlleleFlowerSpecies.class), + PRIMARY(IAlleleInteger.class), + SECONDARY(IAlleleInteger.class), + FERTILITY(IAlleleInteger.class), + TERRITORY(IAlleleArea.class), + EFFECT(IAlleleFlowerEffect.class), + LIFESPAN(IAlleleInteger.class), + TEMPERATURE_TOLERANCE(IAlleleTolerance.class), + HUMIDITY_TOLERANCE(IAlleleTolerance.class), + PH_TOLERANCE(IAlleleTolerance.class), + SAPPINESS(IAlleleFloat.class), + STEM(IAlleleInteger.class); + + private Class cls; + + private EnumFlowerChromosome(final Class cls) { + this.cls = cls; + } + + @Override + public Class getAlleleClass() { + return this.cls; + } + + @Override + public String getName() { + return this.toString().toLowerCase(); + } + + @Override + public ISpeciesRoot getSpeciesRoot() { + return AlleleManager.alleleRegistry.getSpeciesRoot("rootFlowers"); + } +} diff --git a/src/main/java/binnie/botany/api/EnumFlowerStage.java b/src/main/java/binnie/botany/api/EnumFlowerStage.java new file mode 100644 index 00000000..f8410d37 --- /dev/null +++ b/src/main/java/binnie/botany/api/EnumFlowerStage.java @@ -0,0 +1,28 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.api; + +public enum EnumFlowerStage +{ + FLOWER("Flower"), + SEED("Seed"), + POLLEN("Pollen"), + NONE("NONE"); + + public static final EnumFlowerStage[] VALUES; + String name; + + private EnumFlowerStage(final String name) { + this.name = name; + } + + public String getName() { + return this.name; + } + + static { + VALUES = values(); + } +} diff --git a/src/main/java/binnie/botany/api/EnumMoisture.java b/src/main/java/binnie/botany/api/EnumMoisture.java new file mode 100644 index 00000000..8b75d10c --- /dev/null +++ b/src/main/java/binnie/botany/api/EnumMoisture.java @@ -0,0 +1,16 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.api; + +public enum EnumMoisture +{ + Dry, + Normal, + Damp; + + public String getID() { + return this.name().toLowerCase(); + } +} diff --git a/src/main/java/binnie/botany/api/EnumSoilType.java b/src/main/java/binnie/botany/api/EnumSoilType.java new file mode 100644 index 00000000..3ef11b6e --- /dev/null +++ b/src/main/java/binnie/botany/api/EnumSoilType.java @@ -0,0 +1,16 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.api; + +public enum EnumSoilType +{ + SOIL, + LOAM, + FLOWERBED; + + public String getID() { + return this.name().toLowerCase(); + } +} diff --git a/src/main/java/binnie/botany/api/IAlleleFlowerEffect.java b/src/main/java/binnie/botany/api/IAlleleFlowerEffect.java new file mode 100644 index 00000000..901510a5 --- /dev/null +++ b/src/main/java/binnie/botany/api/IAlleleFlowerEffect.java @@ -0,0 +1,14 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.api; + +import net.minecraft.world.World; +import forestry.api.genetics.IEffectData; +import forestry.api.genetics.IAlleleEffect; + +public interface IAlleleFlowerEffect extends IAlleleEffect +{ + IEffectData doEffect(final IFlowerGenome p0, final IEffectData p1, final World p2, final int p3, final int p4, final int p5); +} diff --git a/src/main/java/binnie/botany/api/IAlleleFlowerSpecies.java b/src/main/java/binnie/botany/api/IAlleleFlowerSpecies.java new file mode 100644 index 00000000..c147eb4f --- /dev/null +++ b/src/main/java/binnie/botany/api/IAlleleFlowerSpecies.java @@ -0,0 +1,16 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.api; + +import forestry.api.genetics.IAlleleSpecies; + +public interface IAlleleFlowerSpecies extends IAlleleSpecies +{ + IFlowerType getType(); + + EnumAcidity getPH(); + + EnumMoisture getMoisture(); +} diff --git a/src/main/java/binnie/botany/api/IBotanistTracker.java b/src/main/java/binnie/botany/api/IBotanistTracker.java new file mode 100644 index 00000000..48a0a6bc --- /dev/null +++ b/src/main/java/binnie/botany/api/IBotanistTracker.java @@ -0,0 +1,11 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.api; + +import forestry.api.genetics.IBreedingTracker; + +public interface IBotanistTracker extends IBreedingTracker +{ +} diff --git a/src/main/java/binnie/botany/api/IColourMix.java b/src/main/java/binnie/botany/api/IColourMix.java new file mode 100644 index 00000000..6a0c3366 --- /dev/null +++ b/src/main/java/binnie/botany/api/IColourMix.java @@ -0,0 +1,18 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.api; + +public interface IColourMix +{ + IFlowerColour getColour1(); + + IFlowerColour getColour2(); + + boolean isMutation(final IFlowerColour p0, final IFlowerColour p1); + + int getChance(); + + IFlowerColour getResult(); +} diff --git a/src/main/java/binnie/botany/api/IFlower.java b/src/main/java/binnie/botany/api/IFlower.java new file mode 100644 index 00000000..dd8eee6f --- /dev/null +++ b/src/main/java/binnie/botany/api/IFlower.java @@ -0,0 +1,38 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.api; + +import net.minecraft.world.World; +import forestry.api.genetics.IIndividual; + +public interface IFlower extends IIndividual +{ + @Override + IFlowerGenome getGenome(); + + IFlowerGenome getMate(); + + void mate(final IFlower p0); + + int getAge(); + + void age(); + + void setAge(final int p0); + + IFlower getOffspring(final World p0); + + int getMaxAge(); + + boolean isWilted(); + + void setWilted(final boolean p0); + + boolean hasFlowered(); + + void setFlowered(final boolean p0); + + void removeMate(); +} diff --git a/src/main/java/binnie/botany/api/IFlowerColour.java b/src/main/java/binnie/botany/api/IFlowerColour.java new file mode 100644 index 00000000..f8e9331f --- /dev/null +++ b/src/main/java/binnie/botany/api/IFlowerColour.java @@ -0,0 +1,18 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.api; + +import forestry.api.genetics.IAlleleInteger; + +public interface IFlowerColour +{ + int getColor(final boolean p0); + + IAlleleInteger getAllele(); + + int getID(); + + String getName(); +} diff --git a/src/main/java/binnie/botany/api/IFlowerGenome.java b/src/main/java/binnie/botany/api/IFlowerGenome.java new file mode 100644 index 00000000..b28e6d5f --- /dev/null +++ b/src/main/java/binnie/botany/api/IFlowerGenome.java @@ -0,0 +1,46 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.api; + +import forestry.api.core.EnumTemperature; +import forestry.api.genetics.EnumTolerance; +import forestry.api.genetics.IGenome; + +public interface IFlowerGenome extends IGenome +{ + @Override + IAlleleFlowerSpecies getPrimary(); + + @Override + IAlleleFlowerSpecies getSecondary(); + + IFlowerColour getPrimaryColor(); + + IFlowerColour getSecondaryColor(); + + IFlowerColour getStemColor(); + + int getFertility(); + + int getLifespan(); + + IFlowerType getType(); + + EnumTolerance getToleranceTemperature(); + + EnumTolerance getToleranceMoisture(); + + EnumTolerance getTolerancePH(); + + float getAgeChance(); + + float getSappiness(); + + boolean canTolerate(final EnumAcidity p0); + + boolean canTolerate(final EnumMoisture p0); + + boolean canTolerate(final EnumTemperature p0); +} diff --git a/src/main/java/binnie/botany/api/IFlowerMutation.java b/src/main/java/binnie/botany/api/IFlowerMutation.java new file mode 100644 index 00000000..bfe48b34 --- /dev/null +++ b/src/main/java/binnie/botany/api/IFlowerMutation.java @@ -0,0 +1,14 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.api; + +import forestry.api.genetics.IGenome; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.IMutation; + +public interface IFlowerMutation extends IMutation +{ + float getChance(final IAllele p0, final IAllele p1, final IGenome p2, final IGenome p3); +} diff --git a/src/main/java/binnie/botany/api/IFlowerRoot.java b/src/main/java/binnie/botany/api/IFlowerRoot.java new file mode 100644 index 00000000..d2d8eca2 --- /dev/null +++ b/src/main/java/binnie/botany/api/IFlowerRoot.java @@ -0,0 +1,48 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.api; + +import java.util.Collection; +import com.mojang.authlib.GameProfile; +import net.minecraft.world.World; +import forestry.api.genetics.IAllele; +import net.minecraft.item.ItemStack; +import forestry.api.genetics.ISpeciesRoot; + +public interface IFlowerRoot extends ISpeciesRoot +{ + @Override + IFlower getMember(final ItemStack p0); + + @Override + IFlower templateAsIndividual(final IAllele[] p0); + + @Override + IFlower templateAsIndividual(final IAllele[] p0, final IAllele[] p1); + + @Override + IFlowerGenome templateAsGenome(final IAllele[] p0); + + @Override + IFlowerGenome templateAsGenome(final IAllele[] p0, final IAllele[] p1); + + @Override + IBotanistTracker getBreedingTracker(final World p0, final GameProfile p1); + + @Override + Collection getMutations(final boolean p0); + + EnumFlowerStage getStageType(final ItemStack p0); + + IFlower getFlower(final World p0, final IFlowerGenome p1); + + void addConversion(final ItemStack p0, final IAllele[] p1); + + IFlower getConversion(final ItemStack p0); + + Collection getColourMixes(final boolean p0); + + void registerColourMix(final IColourMix p0); +} diff --git a/src/main/java/binnie/botany/api/IFlowerType.java b/src/main/java/binnie/botany/api/IFlowerType.java new file mode 100644 index 00000000..1e34993b --- /dev/null +++ b/src/main/java/binnie/botany/api/IFlowerType.java @@ -0,0 +1,22 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.api; + +import net.minecraft.util.IIcon; + +public interface IFlowerType +{ + IIcon getStem(final EnumFlowerStage p0, final boolean p1, final int p2); + + IIcon getPetalIcon(final EnumFlowerStage p0, final boolean p1, final int p2); + + IIcon getVariantIcon(final EnumFlowerStage p0, final boolean p1, final int p2); + + int getID(); + + int getSections(); + + int ordinal(); +} diff --git a/src/main/java/binnie/botany/api/gardening/IBlockSoil.java b/src/main/java/binnie/botany/api/gardening/IBlockSoil.java new file mode 100644 index 00000000..93368d7e --- /dev/null +++ b/src/main/java/binnie/botany/api/gardening/IBlockSoil.java @@ -0,0 +1,29 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.api.gardening; + +import binnie.botany.api.EnumSoilType; +import binnie.botany.api.EnumMoisture; +import binnie.botany.api.EnumAcidity; +import net.minecraft.world.World; + +public interface IBlockSoil +{ + EnumAcidity getPH(final World p0, final int p1, final int p2, final int p3); + + EnumMoisture getMoisture(final World p0, final int p1, final int p2, final int p3); + + EnumSoilType getType(final World p0, final int p1, final int p2, final int p3); + + boolean fertilise(final World p0, final int p1, final int p2, final int p3, final EnumSoilType p4); + + boolean degrade(final World p0, final int p1, final int p2, final int p3, final EnumSoilType p4); + + boolean setPH(final World p0, final int p1, final int p2, final int p3, final EnumAcidity p4); + + boolean setMoisture(final World p0, final int p1, final int p2, final int p3, final EnumMoisture p4); + + boolean resistsWeeds(final World p0, final int p1, final int p2, final int p3); +} diff --git a/src/main/java/binnie/botany/ceramic/BlockCeramic.java b/src/main/java/binnie/botany/ceramic/BlockCeramic.java new file mode 100644 index 00000000..0c985814 --- /dev/null +++ b/src/main/java/binnie/botany/ceramic/BlockCeramic.java @@ -0,0 +1,147 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.ceramic; + +import net.minecraft.util.MovingObjectPosition; +import binnie.botany.Botany; +import net.minecraft.client.renderer.texture.IIconRegister; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import java.util.List; +import binnie.botany.genetics.EnumFlowerColor; +import net.minecraftforge.common.util.ForgeDirection; +import binnie.core.block.TileEntityMetadata; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.entity.player.EntityPlayer; +import binnie.core.block.BlockMetadata; +import net.minecraft.item.ItemStack; +import java.util.ArrayList; +import net.minecraft.world.World; +import binnie.botany.CreativeTabBotany; +import net.minecraft.block.material.Material; +import binnie.core.block.IBlockMetadata; +import net.minecraft.block.Block; + +public class BlockCeramic extends Block implements IBlockMetadata +{ + public BlockCeramic() { + super(Material.rock); + this.setHardness(1.0f); + this.setResistance(5.0f); + this.setBlockName("ceramic"); + this.setCreativeTab(CreativeTabBotany.instance); + } + + @Override + public ArrayList getDrops(final World world, final int x, final int y, final int z, final int blockMeta, final int fortune) { + return BlockMetadata.getBlockDropped(this, world, x, y, z, blockMeta); + } + + @Override + public boolean removedByPlayer(final World world, final EntityPlayer player, final int x, final int y, final int z) { + return BlockMetadata.breakBlock(this, player, world, x, y, z); + } + + @Override + public TileEntity createNewTileEntity(final World var1, final int i) { + return new TileEntityMetadata(); + } + + @Override + public boolean hasTileEntity(final int meta) { + return true; + } + + @Override + public boolean onBlockEventReceived(final World par1World, final int par2, final int par3, final int par4, final int par5, final int par6) { + super.onBlockEventReceived(par1World, par2, par3, par4, par5, par6); + final TileEntity tileentity = par1World.getTileEntity(par2, par3, par4); + return tileentity != null && tileentity.receiveClientEvent(par5, par6); + } + + @Override + public int getPlacedMeta(final ItemStack stack, final World world, final int x, final int y, final int z, final ForgeDirection clickedBlock) { + return TileEntityMetadata.getItemDamage(stack); + } + + @Override + public int getDroppedMeta(final int blockMeta, final int tileMeta) { + return tileMeta; + } + + @Override + public String getBlockName(final ItemStack par1ItemStack) { + final int meta = TileEntityMetadata.getItemDamage(par1ItemStack); + return EnumFlowerColor.get(meta).getName() + " Ceramic Block"; + } + + @Override + public void getBlockTooltip(final ItemStack par1ItemStack, final List par3List) { + } + + @Override + public void dropAsStack(final World world, final int x, final int y, final int z, final ItemStack drop) { + this.dropBlockAsItem(world, x, y, z, drop); + } + + @Override + public void getSubBlocks(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + for (final EnumFlowerColor c : EnumFlowerColor.values()) { + itemList.add(TileEntityMetadata.getItemStack(this, c.ordinal())); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final IBlockAccess world, final int x, final int y, final int z, final int side) { + final TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z); + if (tile != null) { + return this.getIcon(side, tile.getTileMetadata()); + } + return super.getIcon(world, x, y, z, side); + } + + @Override + public IIcon getIcon(final int side, final int meta) { + return this.blockIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister register) { + this.blockIcon = Botany.proxy.getIcon(register, "ceramic"); + } + + @Override + @SideOnly(Side.CLIENT) + public int colorMultiplier(final IBlockAccess world, final int x, final int y, final int z) { + final TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z); + if (tile != null) { + return this.getRenderColor(tile.getTileMetadata()); + } + return 16777215; + } + + @Override + public void breakBlock(final World par1World, final int par2, final int par3, final int par4, final Block par5, final int par6) { + super.breakBlock(par1World, par2, par3, par4, par5, par6); + par1World.removeTileEntity(par2, par3, par4); + } + + @Override + public ItemStack getPickBlock(final MovingObjectPosition target, final World world, final int x, final int y, final int z) { + return BlockMetadata.getPickBlock(world, x, y, z); + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderColor(final int meta) { + return EnumFlowerColor.get(meta).getColor(false); + } +} diff --git a/src/main/java/binnie/botany/ceramic/BlockCeramicBrick.java b/src/main/java/binnie/botany/ceramic/BlockCeramicBrick.java new file mode 100644 index 00000000..a51de22c --- /dev/null +++ b/src/main/java/binnie/botany/ceramic/BlockCeramicBrick.java @@ -0,0 +1,529 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.ceramic; + +import binnie.botany.items.BotanyItems; +import binnie.core.BinnieCore; +import net.minecraft.util.MovingObjectPosition; +import binnie.botany.Botany; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.core.block.MultipassBlockRenderer; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import binnie.botany.genetics.EnumFlowerColor; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import java.util.List; +import net.minecraftforge.common.util.ForgeDirection; +import binnie.core.block.TileEntityMetadata; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.entity.player.EntityPlayer; +import binnie.core.block.BlockMetadata; +import net.minecraft.item.ItemStack; +import java.util.ArrayList; +import net.minecraft.world.World; +import binnie.botany.CreativeTabBotany; +import net.minecraft.block.material.Material; +import binnie.core.block.IMultipassBlock; +import binnie.core.block.IBlockMetadata; +import net.minecraft.block.Block; + +public class BlockCeramicBrick extends Block implements IBlockMetadata, IMultipassBlock +{ + public BlockCeramicBrick() { + super(Material.rock); + this.setHardness(1.0f); + this.setResistance(5.0f); + this.setBlockName("ceramicBrick"); + this.setCreativeTab(CreativeTabBotany.instance); + } + + private static BlockType getType(final int meta) { + return new BlockType(meta); + } + + @Override + public ArrayList getDrops(final World world, final int x, final int y, final int z, final int blockMeta, final int fortune) { + return BlockMetadata.getBlockDropped(this, world, x, y, z, blockMeta); + } + + @Override + public boolean removedByPlayer(final World world, final EntityPlayer player, final int x, final int y, final int z) { + return BlockMetadata.breakBlock(this, player, world, x, y, z); + } + + @Override + public TileEntity createNewTileEntity(final World var1, final int i) { + return new TileEntityMetadata(); + } + + @Override + public boolean hasTileEntity(final int meta) { + return true; + } + + @Override + public boolean onBlockEventReceived(final World par1World, final int par2, final int par3, final int par4, final int par5, final int par6) { + super.onBlockEventReceived(par1World, par2, par3, par4, par5, par6); + final TileEntity tileentity = par1World.getTileEntity(par2, par3, par4); + return tileentity != null && tileentity.receiveClientEvent(par5, par6); + } + + @Override + public int getPlacedMeta(final ItemStack stack, final World world, final int x, final int y, final int z, final ForgeDirection clickedBlock) { + return TileEntityMetadata.getItemDamage(stack); + } + + @Override + public int getDroppedMeta(final int blockMeta, final int tileMeta) { + return tileMeta; + } + + @Override + public String getBlockName(final ItemStack par1ItemStack) { + final int meta = TileEntityMetadata.getItemDamage(par1ItemStack); + return getType(meta).getName(); + } + + @Override + public void getBlockTooltip(final ItemStack par1ItemStack, final List par3List) { + } + + @Override + public void dropAsStack(final World world, final int x, final int y, final int z, final ItemStack drop) { + this.dropBlockAsItem(world, x, y, z, drop); + } + + @Override + public void getSubBlocks(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + for (final EnumFlowerColor c : EnumFlowerColor.values()) { + final BlockType type = new BlockType(c, c, TileType.Tile); + itemList.add(TileEntityMetadata.getItemStack(this, type.ordinal())); + } + for (final TileType type2 : TileType.values()) { + if (type2.canDouble()) { + itemList.add(new BlockType(EnumFlowerColor.Brown, EnumFlowerColor.Gold, type2).getStack(1)); + } + } + itemList.add(new BlockType(EnumFlowerColor.Gold, EnumFlowerColor.Gold, TileType.Split).getStack(1)); + itemList.add(new BlockType(EnumFlowerColor.Brown, EnumFlowerColor.Brown, TileType.Chequered).getStack(1)); + itemList.add(new BlockType(EnumFlowerColor.Gold, EnumFlowerColor.Brown, TileType.LargeBrick).getStack(1)); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final IBlockAccess world, final int x, final int y, final int z, final int side) { + final TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z); + if (tile != null) { + return this.getIcon(side, tile.getTileMetadata()); + } + return super.getIcon(world, x, y, z, side); + } + + @Override + public IIcon getIcon(final int side, final int meta) { + return getType(meta).getIcon(MultipassBlockRenderer.getLayer()); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister register) { + for (final TileType type : TileType.values()) { + for (int i = 0; i < 3; ++i) { + type.icons[i] = Botany.proxy.getIcon(register, "ceramic." + type.id + "." + i); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public int colorMultiplier(final IBlockAccess world, final int x, final int y, final int z) { + final TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z); + if (tile != null) { + return this.getRenderColor(tile.getTileMetadata()); + } + return 16777215; + } + + @Override + public void breakBlock(final World par1World, final int par2, final int par3, final int par4, final Block par5, final int par6) { + super.breakBlock(par1World, par2, par3, par4, par5, par6); + par1World.removeTileEntity(par2, par3, par4); + } + + @Override + public ItemStack getPickBlock(final MovingObjectPosition target, final World world, final int x, final int y, final int z) { + return BlockMetadata.getPickBlock(world, x, y, z); + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderColor(final int meta) { + return this.colorMultiplier(meta); + } + + @Override + public int getNumberOfPasses() { + return 3; + } + + @Override + public int colorMultiplier(final int meta) { + final BlockType type = getType(meta); + if (MultipassBlockRenderer.getLayer() == 0) { + return 16777215; + } + if (MultipassBlockRenderer.getLayer() == 1) { + return type.color1.getColor(false); + } + return type.color2.getColor(false); + } + + @Override + public int getRenderType() { + return BinnieCore.multipassRenderID; + } + + public enum TileType + { + Tile("tile", "Ceramic Tile"), + Brick("brick", "Ceramic Bricks"), + StripeBrick("brickstripe", "Striped Ceramic Bricks"), + LargeBrick("bricklarge", "Large Ceramic Bricks"), + Split("split", "Split Ceramic Tile"), + Chequered("cheque", "Chequered Ceramic Tile"), + Mixed("mixed", "Mixed Ceramic Tile"), + VerticalBrick("verticalbrick", "Vertical Ceramic Bricks"), + VerticalStripeBrick("verticalbrickstripe", "Vertical Striped Ceramic Bricks"), + VerticalLargeBrick("verticalbricklarge", "Large Vertical Ceramic Bricks"); + + String id; + String name; + IIcon[] icons; + + private TileType(final String id, final String name) { + this.icons = new IIcon[3]; + this.id = id; + this.name = name; + } + + public static TileType get(final int id) { + return values()[id % values().length]; + } + + public boolean canDouble() { + return this != TileType.Tile; + } + + public ItemStack getRecipe(final List stacks) { + switch (this) { + case Tile: { + if (stacks.size() != 4) { + return null; + } + int mortars = 0; + int blocks = 0; + int blockColor = -1; + for (final ItemStack stack : stacks) { + if (this.isMortar(stack)) { + ++mortars; + } + else { + if (stack.getItem() != Item.getItemFromBlock(Botany.ceramic)) { + return null; + } + ++blocks; + final int color = TileEntityMetadata.getItemDamage(stack); + if (blockColor == -1) { + blockColor = color; + } + else { + if (blockColor != color) { + return null; + } + continue; + } + } + } + if (mortars != 1) { + return null; + } + final EnumFlowerColor c = EnumFlowerColor.get(blockColor); + return new BlockType(c, c, TileType.Tile).getStack(3); + } + case Split: { + if (stacks.size() != 4) { + return null; + } + final int[] colors = { -1, -1 }; + int altCounter = 0; + for (final ItemStack stack2 : stacks) { + final int alt = (altCounter != 0 && altCounter != 3) ? 1 : 0; + if (stack2.getItem() != Item.getItemFromBlock(Botany.ceramicBrick)) { + return null; + } + final BlockType type = new BlockType(stack2); + if (type.type != TileType.Tile) { + return null; + } + final int color2 = type.color1.ordinal(); + if (colors[alt] == -1) { + colors[alt] = color2; + } + else if (colors[alt] != color2) { + return null; + } + ++altCounter; + } + return new BlockType(EnumFlowerColor.get(colors[0]), EnumFlowerColor.get(colors[1]), TileType.Split).getStack(4); + } + case Chequered: { + if (stacks.size() != 4) { + return null; + } + final int[] colors = { -1, -1 }; + for (final ItemStack stack2 : stacks) { + if (stack2.getItem() != Item.getItemFromBlock(Botany.ceramicBrick)) { + return null; + } + final BlockType type2 = new BlockType(stack2); + if (type2.type != TileType.Split) { + return null; + } + final int color3 = type2.color1.ordinal(); + final int color4 = type2.color2.ordinal(); + if (colors[0] == -1) { + colors[0] = color3; + colors[1] = color4; + } + else { + if (colors[0] != color3 || colors[1] != color4) { + return null; + } + continue; + } + } + return new BlockType(EnumFlowerColor.get(colors[0]), EnumFlowerColor.get(colors[1]), TileType.Chequered).getStack(4); + } + case Mixed: { + if (stacks.size() != 4) { + return null; + } + final int[] colors = { -1, -1 }; + for (int index = 0; index < stacks.size(); ++index) { + final ItemStack stack2 = stacks.get(index); + if (stack2.getItem() != Item.getItemFromBlock(Botany.ceramicBrick)) { + return null; + } + final BlockType type2 = new BlockType(stack2); + if (type2.isTwoColors()) { + return null; + } + final int color3 = type2.color1.ordinal(); + if (type2.type == TileType.Split) { + if (colors[1] != -1) { + return null; + } + colors[1] = color3; + } + else { + if (type2.type != TileType.Chequered) { + return null; + } + if (colors[0] == -1) { + colors[0] = color3; + } + else if (colors[0] != color3) { + return null; + } + } + final int color4 = type2.color2.ordinal(); + } + if (colors[0] == -1 || colors[1] == -1) { + return null; + } + return new BlockType(EnumFlowerColor.get(colors[0]), EnumFlowerColor.get(colors[1]), TileType.Mixed).getStack(4); + } + case LargeBrick: { + if (stacks.size() == 1) { + final ItemStack stack3 = stacks.get(0); + final BlockType type3 = new BlockType(stack3); + if (type3.type == TileType.VerticalLargeBrick) { + type3.type = this; + return type3.getStack(1); + } + return null; + } + else { + if (stacks.size() != 3) { + return null; + } + final int[] colors = { -1, -1 }; + int a = 0; + int b = 0; + for (int index2 = 0; index2 < stacks.size(); ++index2) { + final ItemStack stack4 = stacks.get(index2); + if (stack4.getItem() != Item.getItemFromBlock(Botany.ceramicBrick)) { + return null; + } + final BlockType type4 = new BlockType(stack4); + if (type4.type != TileType.Tile) { + return null; + } + final int color5 = type4.color1.ordinal(); + if (colors[0] == -1) { + colors[0] = color5; + ++a; + } + else if (colors[0] == color5) { + ++a; + } + else if (colors[1] == -1) { + colors[1] = color5; + ++b; + } + else { + if (colors[1] != color5) { + return null; + } + ++b; + } + } + if (colors[1] == -1) { + colors[1] = colors[0]; + } + return new BlockType(EnumFlowerColor.get(colors[0]), EnumFlowerColor.get(colors[1]), TileType.LargeBrick).getStack(3); + } + } + case Brick: + case StripeBrick: { + if (stacks.size() == 1) { + final ItemStack stack5 = stacks.get(0); + final BlockType type = new BlockType(stack5); + if (type.type == TileType.VerticalBrick) { + type.type = this; + return type.getStack(1); + } + if (type.type == TileType.StripeBrick) { + type.type = this; + return type.getStack(1); + } + return null; + } + else { + if (stacks.size() != 4) { + return null; + } + final int[] colors = { -1, -1 }; + for (int index2 = 0; index2 < stacks.size(); ++index2) { + final ItemStack stack4 = stacks.get(index2); + if (stack4.getItem() != Item.getItemFromBlock(Botany.ceramicBrick)) { + return null; + } + final BlockType type4 = new BlockType(stack4); + if (type4.type != TileType.LargeBrick) { + return null; + } + final int color5 = type4.color1.ordinal(); + final int color6 = type4.color2.ordinal(); + int alt2 = (index2 != 0 && index2 != 3) ? 1 : 0; + if (this == TileType.StripeBrick) { + alt2 = 0; + } + if (colors[alt2] == -1) { + colors[alt2] = color5; + colors[1 - alt2] = color6; + } + else if (colors[alt2] != color5 || colors[1 - alt2] != color6) { + return null; + } + } + return new BlockType(EnumFlowerColor.get(colors[0]), EnumFlowerColor.get(colors[1]), this).getStack(4); + } + } + case VerticalLargeBrick: + case VerticalBrick: + case VerticalStripeBrick: { + if (stacks.size() != 1) { + return null; + } + final ItemStack stack5 = stacks.get(0); + final BlockType type = new BlockType(stack5); + if (type.type == TileType.LargeBrick) { + type.type = TileType.VerticalLargeBrick; + return type.getStack(1); + } + if (type.type == TileType.Brick) { + type.type = TileType.VerticalBrick; + return type.getStack(1); + } + if (type.type == TileType.StripeBrick) { + type.type = TileType.VerticalStripeBrick; + return type.getStack(1); + } + return null; + } + default: { + return null; + } + } + } + + private boolean isMortar(final ItemStack stack) { + return stack.getItem() == Botany.misc && stack.getItemDamage() == BotanyItems.Mortar.ordinal(); + } + } + + public static class BlockType + { + EnumFlowerColor color1; + EnumFlowerColor color2; + TileType type; + + private BlockType(final EnumFlowerColor color1, final EnumFlowerColor color2, final TileType type) { + this.color1 = color1; + this.color2 = color2; + this.type = type; + } + + public boolean isTwoColors() { + return this.type.canDouble() && this.color2 != this.color1; + } + + public BlockType(final ItemStack stack) { + this(TileEntityMetadata.getItemDamage(stack)); + } + + public ItemStack getStack(final int i) { + final ItemStack s = TileEntityMetadata.getItemStack(Botany.ceramicBrick, this.ordinal()); + s.stackSize = i; + return s; + } + + public BlockType(final int id) { + this.color1 = EnumFlowerColor.get(id & 0xFF); + this.color2 = EnumFlowerColor.get(id >> 8 & 0xFF); + this.type = TileType.get(id >> 16 & 0xFF); + } + + public String getName() { + String name = this.color1.getName(); + if (this.type.canDouble() && this.color2 != this.color1) { + name = name + " & " + this.color2.getName(); + } + return name + " " + this.type.name; + } + + public int ordinal() { + return this.color1.ordinal() + this.color2.ordinal() * 256 + this.type.ordinal() * 256 * 256; + } + + public IIcon getIcon(final int layer) { + return this.type.icons[layer]; + } + } +} diff --git a/src/main/java/binnie/botany/ceramic/BlockCeramicPatterned.java b/src/main/java/binnie/botany/ceramic/BlockCeramicPatterned.java new file mode 100644 index 00000000..15a9a548 --- /dev/null +++ b/src/main/java/binnie/botany/ceramic/BlockCeramicPatterned.java @@ -0,0 +1,35 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.ceramic; + +import binnie.extratrees.carpentry.DesignBlock; +import binnie.extratrees.carpentry.ModuleCarpentry; +import binnie.botany.genetics.EnumFlowerColor; +import net.minecraft.item.ItemStack; +import binnie.extratrees.api.IDesign; +import binnie.botany.CreativeTabBotany; +import net.minecraft.block.material.Material; +import binnie.extratrees.carpentry.BlockDesign; + +public class BlockCeramicPatterned extends BlockDesign +{ + public BlockCeramicPatterned() { + super(CeramicDesignSystem.instance, Material.rock); + this.setHardness(1.0f); + this.setResistance(5.0f); + this.setCreativeTab(CreativeTabBotany.instance); + this.setBlockName("ceramicPattern"); + } + + @Override + public ItemStack getCreativeStack(final IDesign design) { + return ModuleCarpentry.getItemStack(this, CeramicColor.get(EnumFlowerColor.White), CeramicColor.get(EnumFlowerColor.Black), design); + } + + @Override + public String getBlockName(final DesignBlock design) { + return design.getDesign().getName() + " Ceramic Block"; + } +} diff --git a/src/main/java/binnie/botany/ceramic/BlockStained.java b/src/main/java/binnie/botany/ceramic/BlockStained.java new file mode 100644 index 00000000..e4052b04 --- /dev/null +++ b/src/main/java/binnie/botany/ceramic/BlockStained.java @@ -0,0 +1,197 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.ceramic; + +import net.minecraft.util.MovingObjectPosition; +import binnie.botany.Botany; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import java.util.List; +import binnie.botany.genetics.EnumFlowerColor; +import net.minecraftforge.common.util.ForgeDirection; +import binnie.core.block.TileEntityMetadata; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.entity.player.EntityPlayer; +import binnie.core.block.BlockMetadata; +import net.minecraft.item.ItemStack; +import java.util.ArrayList; +import net.minecraft.world.World; +import binnie.extratrees.ExtraTrees; +import net.minecraft.util.Facing; +import net.minecraft.world.IBlockAccess; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import java.util.Random; +import binnie.botany.CreativeTabBotany; +import net.minecraft.block.material.Material; +import binnie.core.block.IBlockMetadata; +import net.minecraft.block.Block; + +public class BlockStained extends Block implements IBlockMetadata +{ + public BlockStained() { + super(Material.glass); + this.setCreativeTab(CreativeTabBotany.instance); + this.setBlockName("stained"); + } + + @Override + public int quantityDropped(final Random p_149745_1_) { + return 0; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderBlockPass() { + return 1; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(final IBlockAccess p_149646_1_, final int p_149646_2_, final int p_149646_3_, final int p_149646_4_, final int p_149646_5_) { + final Block block2 = p_149646_1_.getBlock(p_149646_2_ - Facing.offsetsXForSide[p_149646_5_], p_149646_3_ - Facing.offsetsYForSide[p_149646_5_], p_149646_4_ - Facing.offsetsZForSide[p_149646_5_]); + final Block block3 = p_149646_1_.getBlock(p_149646_2_, p_149646_3_, p_149646_4_); + return block3 != this && block3 != ExtraTrees.blockStained && super.shouldSideBeRendered(p_149646_1_, p_149646_2_, p_149646_3_, p_149646_4_, p_149646_5_); + } + + @Override + public ArrayList getDrops(final World world, final int x, final int y, final int z, final int blockMeta, final int fortune) { + return BlockMetadata.getBlockDropped(this, world, x, y, z, blockMeta); + } + + @Override + public boolean removedByPlayer(final World world, final EntityPlayer player, final int x, final int y, final int z) { + return BlockMetadata.breakBlock(this, player, world, x, y, z); + } + + @Override + public TileEntity createNewTileEntity(final World var1, final int i) { + return new TileEntityMetadata(); + } + + @Override + public boolean hasTileEntity(final int meta) { + return true; + } + + @Override + public boolean onBlockEventReceived(final World par1World, final int par2, final int par3, final int par4, final int par5, final int par6) { + super.onBlockEventReceived(par1World, par2, par3, par4, par5, par6); + final TileEntity tileentity = par1World.getTileEntity(par2, par3, par4); + return tileentity != null && tileentity.receiveClientEvent(par5, par6); + } + + @Override + public int getPlacedMeta(final ItemStack stack, final World world, final int x, final int y, final int z, final ForgeDirection clickedBlock) { + return TileEntityMetadata.getItemDamage(stack); + } + + @Override + public int getDroppedMeta(final int blockMeta, final int tileMeta) { + return tileMeta; + } + + @Override + public String getBlockName(final ItemStack par1ItemStack) { + final int meta = TileEntityMetadata.getItemDamage(par1ItemStack); + return EnumFlowerColor.get(meta).getName() + " Pigmented Glass"; + } + + @Override + public void getBlockTooltip(final ItemStack par1ItemStack, final List par3List) { + } + + @Override + public void dropAsStack(final World world, final int x, final int y, final int z, final ItemStack drop) { + this.dropBlockAsItem(world, x, y, z, drop); + } + + @Override + public void getSubBlocks(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + for (final EnumFlowerColor c : EnumFlowerColor.values()) { + itemList.add(TileEntityMetadata.getItemStack(this, c.ordinal())); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final IBlockAccess world, final int x, final int y, final int z, final int side) { + final TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z); + if (tile != null) { + return this.getIcon(side, tile.getTileMetadata()); + } + return super.getIcon(world, x, y, z, side); + } + + @Override + public IIcon getIcon(final int side, final int meta) { + return this.blockIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister register) { + this.blockIcon = Botany.proxy.getIcon(register, "stained"); + } + + @Override + @SideOnly(Side.CLIENT) + public int colorMultiplier(final IBlockAccess world, final int x, final int y, final int z) { + final TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z); + if (tile != null) { + return this.getRenderColor(tile.getTileMetadata()); + } + return 16777215; + } + + @Override + public void breakBlock(final World par1World, final int par2, final int par3, final int par4, final Block par5, final int par6) { + super.breakBlock(par1World, par2, par3, par4, par5, par6); + par1World.removeTileEntity(par2, par3, par4); + } + + @Override + public boolean isWood(final IBlockAccess world, final int x, final int y, final int z) { + return true; + } + + @Override + public int getFlammability(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return 20; + } + + @Override + public boolean isFlammable(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return true; + } + + @Override + public int getFireSpreadSpeed(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return 5; + } + + @Override + public ItemStack getPickBlock(final MovingObjectPosition target, final World world, final int x, final int y, final int z) { + return BlockMetadata.getPickBlock(world, x, y, z); + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderColor(final int meta) { + return EnumFlowerColor.get(meta).getColor(false); + } +} diff --git a/src/main/java/binnie/botany/ceramic/CeramicColor.java b/src/main/java/binnie/botany/ceramic/CeramicColor.java new file mode 100644 index 00000000..26cb9b07 --- /dev/null +++ b/src/main/java/binnie/botany/ceramic/CeramicColor.java @@ -0,0 +1,49 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.ceramic; + +import java.util.LinkedHashMap; +import binnie.core.block.TileEntityMetadata; +import binnie.botany.Botany; +import net.minecraft.item.ItemStack; +import java.util.Map; +import binnie.botany.genetics.EnumFlowerColor; +import binnie.extratrees.api.IDesignMaterial; + +public class CeramicColor implements IDesignMaterial +{ + EnumFlowerColor color; + static Map map; + + CeramicColor(final EnumFlowerColor color) { + this.color = color; + } + + public static CeramicColor get(final EnumFlowerColor c) { + return CeramicColor.map.get(c); + } + + @Override + public ItemStack getStack() { + return TileEntityMetadata.getItemStack(Botany.ceramic, this.color.ordinal()); + } + + @Override + public String getName() { + return this.color.getName(); + } + + @Override + public int getColour() { + return this.color.getColor(false); + } + + static { + CeramicColor.map = new LinkedHashMap(); + for (final EnumFlowerColor c : EnumFlowerColor.values()) { + CeramicColor.map.put(c, new CeramicColor(c)); + } + } +} diff --git a/src/main/java/binnie/botany/ceramic/CeramicDesignSystem.java b/src/main/java/binnie/botany/ceramic/CeramicDesignSystem.java new file mode 100644 index 00000000..aacd27c0 --- /dev/null +++ b/src/main/java/binnie/botany/ceramic/CeramicDesignSystem.java @@ -0,0 +1,102 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.ceramic; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import binnie.botany.items.BotanyItems; +import net.minecraft.item.ItemStack; +import binnie.botany.Botany; +import binnie.core.AbstractMod; +import binnie.core.BinnieCore; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.extratrees.carpentry.EnumPattern; +import binnie.extratrees.api.IPattern; +import binnie.botany.genetics.EnumFlowerColor; +import binnie.extratrees.api.IDesignMaterial; +import binnie.extratrees.carpentry.DesignerManager; +import java.util.HashMap; +import net.minecraft.util.IIcon; +import java.util.Map; +import binnie.extratrees.api.IDesignSystem; + +public class CeramicDesignSystem implements IDesignSystem +{ + public static CeramicDesignSystem instance; + Map primary; + Map secondary; + + CeramicDesignSystem() { + this.primary = new HashMap(); + this.secondary = new HashMap(); + DesignerManager.instance.registerDesignSystem(this); + } + + @Override + public IDesignMaterial getDefaultMaterial() { + return CeramicColor.get(EnumFlowerColor.White); + } + + @Override + public IDesignMaterial getDefaultMaterial2() { + return CeramicColor.get(EnumFlowerColor.Black); + } + + @Override + public IDesignMaterial getMaterial(final int id) { + return CeramicColor.get(EnumFlowerColor.get(id)); + } + + @Override + public int getMaterialIndex(final IDesignMaterial id) { + return ((CeramicColor) id).color.ordinal(); + } + + public String getTexturePath() { + return "ceramic"; + } + + @Override + public IIcon getPrimaryIcon(final IPattern pattern) { + if (pattern instanceof EnumPattern) { + return this.primary.get(((EnumPattern) pattern).ordinal()); + } + return null; + } + + @Override + public IIcon getSecondaryIcon(final IPattern pattern) { + if (pattern instanceof EnumPattern) { + return this.secondary.get(((EnumPattern) pattern).ordinal()); + } + return null; + } + + @Override + public void registerIcons(final IIconRegister register) { + for (final EnumPattern pattern : EnumPattern.values()) { + this.primary.put(pattern.ordinal(), BinnieCore.proxy.getIcon(register, this.getMod().getModID(), this.getTexturePath() + "/" + pattern.toString().toLowerCase() + ".0")); + this.secondary.put(pattern.ordinal(), BinnieCore.proxy.getIcon(register, this.getMod().getModID(), this.getTexturePath() + "/" + pattern.toString().toLowerCase() + ".1")); + } + } + + public AbstractMod getMod() { + return Botany.instance; + } + + @Override + public ItemStack getAdhesive() { + return BotanyItems.Mortar.get(1); + } + + @Override + public IDesignMaterial getMaterial(final ItemStack itemStack) { + return (itemStack.getItem() == Item.getItemFromBlock(Botany.ceramic)) ? this.getMaterial(itemStack.getItemDamage()) : null; + } + + static { + CeramicDesignSystem.instance = new CeramicDesignSystem(); + } +} diff --git a/src/main/java/binnie/botany/ceramic/CeramicTileRecipe.java b/src/main/java/binnie/botany/ceramic/CeramicTileRecipe.java new file mode 100644 index 00000000..d77dcfe8 --- /dev/null +++ b/src/main/java/binnie/botany/ceramic/CeramicTileRecipe.java @@ -0,0 +1,72 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.ceramic; + +import java.util.List; +import java.util.ArrayList; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import binnie.botany.Botany; +import net.minecraft.world.World; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; + +public class CeramicTileRecipe implements IRecipe +{ + ItemStack cached; + + @Override + public boolean matches(final InventoryCrafting inv, final World world) { + this.cached = this.getCraftingResult(inv); + return this.cached != null; + } + + @Override + public ItemStack getCraftingResult(final InventoryCrafting inv) { + final Item ceramicBlock = Item.getItemFromBlock(Botany.ceramic); + final Item ceramicTile = Item.getItemFromBlock(Botany.ceramicTile); + final Item ceramicBrick = Item.getItemFromBlock(Botany.ceramicBrick); + final Item mortar = Botany.misc; + final List stacks = new ArrayList(); + int ix = -1; + int iy = -1; + for (int i = 0; i < inv.getSizeInventory(); ++i) { + final ItemStack stack = inv.getStackInSlot(i); + if (stack != null) { + final int x = i / 3; + final int y = i % 3; + if (ix == -1) { + ix = x; + iy = y; + } + if (x - ix >= 2 || y - iy >= 2 || y < iy || x < ix) { + return null; + } + if (stack.getItem() != ceramicBlock && stack.getItem() != ceramicTile && stack.getItem() != ceramicBrick && stack.getItem() != mortar) { + return null; + } + stacks.add(stack); + } + } + for (final BlockCeramicBrick.TileType type : BlockCeramicBrick.TileType.values()) { + final ItemStack stack2 = type.getRecipe(stacks); + if (stack2 != null) { + return stack2; + } + } + return null; + } + + @Override + public int getRecipeSize() { + return 2; + } + + @Override + public ItemStack getRecipeOutput() { + return this.cached; + } +} diff --git a/src/main/java/binnie/botany/ceramic/ItemCeramic.java b/src/main/java/binnie/botany/ceramic/ItemCeramic.java new file mode 100644 index 00000000..39c26448 --- /dev/null +++ b/src/main/java/binnie/botany/ceramic/ItemCeramic.java @@ -0,0 +1,24 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.ceramic; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.item.ItemStack; +import net.minecraft.block.Block; +import binnie.core.block.ItemMetadata; + +public class ItemCeramic extends ItemMetadata +{ + public ItemCeramic(final Block block) { + super(block); + } + + @Override + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(final ItemStack stack, final int p_82790_2_) { + return 16711935; + } +} diff --git a/src/main/java/binnie/botany/ceramic/PigmentRecipe.java b/src/main/java/binnie/botany/ceramic/PigmentRecipe.java new file mode 100644 index 00000000..ff330f2f --- /dev/null +++ b/src/main/java/binnie/botany/ceramic/PigmentRecipe.java @@ -0,0 +1,62 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.ceramic; + +import binnie.botany.api.IFlower; +import net.minecraft.item.Item; +import binnie.botany.Botany; +import binnie.Binnie; +import net.minecraft.world.World; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; + +public class PigmentRecipe implements IRecipe +{ + private final ItemStack unknown; + ItemStack cached; + + public PigmentRecipe() { + this.unknown = null; + } + + @Override + public boolean matches(final InventoryCrafting crafting, final World world) { + return this.getCraftingResult(crafting) != null; + } + + @Override + public ItemStack getRecipeOutput() { + if (this.cached != null) { + return this.cached; + } + return this.unknown; + } + + @Override + public ItemStack getCraftingResult(final InventoryCrafting crafting) { + int n = 0; + ItemStack stack = null; + for (int i = 0; i < crafting.getSizeInventory(); ++i) { + if (crafting.getStackInSlot(i) != null) { + if (++n > 1) { + return null; + } + if (Binnie.Genetics.getFlowerRoot().isMember(crafting.getStackInSlot(i))) { + final IFlower flower = Binnie.Genetics.getFlowerRoot().getMember(crafting.getStackInSlot(i)); + if (flower.getAge() >= 1) { + stack = new ItemStack(Botany.pigment, 1, flower.getGenome().getPrimaryColor().getID()); + } + } + } + } + return stack; + } + + @Override + public int getRecipeSize() { + return 1; + } +} diff --git a/src/main/java/binnie/botany/core/BotanyCore.java b/src/main/java/binnie/botany/core/BotanyCore.java new file mode 100644 index 00000000..92a32b6b --- /dev/null +++ b/src/main/java/binnie/botany/core/BotanyCore.java @@ -0,0 +1,22 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.core; + +import binnie.botany.genetics.FlowerHelper; +import binnie.botany.api.IFlowerRoot; + +public class BotanyCore +{ + public static final int CHANCE_INTERPOLLINATION = 20; + public static IFlowerRoot speciesRoot; + + public static IFlowerRoot getFlowerRoot() { + return BotanyCore.speciesRoot; + } + + static { + BotanyCore.speciesRoot = new FlowerHelper(); + } +} diff --git a/src/main/java/binnie/botany/core/BotanyGUI.java b/src/main/java/binnie/botany/core/BotanyGUI.java new file mode 100644 index 00000000..965aef9c --- /dev/null +++ b/src/main/java/binnie/botany/core/BotanyGUI.java @@ -0,0 +1,38 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.core; + +import net.minecraft.tileentity.TileEntity; +import binnie.craftgui.botany.WindowBotanistDatabase; +import net.minecraft.inventory.IInventory; +import binnie.craftgui.minecraft.Window; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.world.World; +import net.minecraft.entity.player.EntityPlayer; +import binnie.core.gui.IBinnieGUID; + +public enum BotanyGUI implements IBinnieGUID +{ + Database, + DatabaseNEI; + + @Override + public Window getWindow(final EntityPlayer player, final World world, final int x, final int y, final int z, final Side side) { + Window window = null; + final TileEntity tileEntity = world.getTileEntity(x, y, z); + IInventory object = null; + if (tileEntity instanceof IInventory) { + object = (IInventory) tileEntity; + } + switch (this) { + case Database: + case DatabaseNEI: { + window = WindowBotanistDatabase.create(player, side, this != BotanyGUI.Database); + break; + } + } + return window; + } +} diff --git a/src/main/java/binnie/botany/core/BotanyTexture.java b/src/main/java/binnie/botany/core/BotanyTexture.java new file mode 100644 index 00000000..15bbb3de --- /dev/null +++ b/src/main/java/binnie/botany/core/BotanyTexture.java @@ -0,0 +1,28 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.core; + +import binnie.extrabees.ExtraBees; +import binnie.Binnie; +import binnie.core.resource.BinnieResource; +import binnie.core.resource.ResourceType; +import binnie.core.resource.IBinnieTexture; + +public enum BotanyTexture implements IBinnieTexture +{ + ; + String texture; + ResourceType type; + + private BotanyTexture(final ResourceType base, final String texture) { + this.texture = texture; + this.type = base; + } + + @Override + public BinnieResource getTexture() { + return Binnie.Resource.getPNG(ExtraBees.instance, this.type, this.texture); + } +} diff --git a/src/main/java/binnie/botany/core/ModuleCore.java b/src/main/java/binnie/botany/core/ModuleCore.java new file mode 100644 index 00000000..3a0e8fb1 --- /dev/null +++ b/src/main/java/binnie/botany/core/ModuleCore.java @@ -0,0 +1,36 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.core; + +import binnie.botany.api.EnumSoilType; +import binnie.botany.api.EnumMoisture; +import binnie.botany.Botany; +import binnie.Binnie; +import binnie.botany.api.EnumAcidity; +import binnie.core.IInitializable; + +public class ModuleCore implements IInitializable +{ + @Override + public void preInit() { + for (final EnumAcidity pH : EnumAcidity.values()) { + Binnie.Language.addObjectName(pH, Binnie.Language.unlocalised(Botany.instance, "ph." + pH.getID())); + } + for (final EnumMoisture pH2 : EnumMoisture.values()) { + Binnie.Language.addObjectName(pH2, Binnie.Language.unlocalised(Botany.instance, "moisture." + pH2.getID())); + } + for (final EnumSoilType pH3 : EnumSoilType.values()) { + Binnie.Language.addObjectName(pH3, Binnie.Language.unlocalised(Botany.instance, "soil." + pH3.getID())); + } + } + + @Override + public void init() { + } + + @Override + public void postInit() { + } +} diff --git a/src/main/java/binnie/botany/farm/CircuitGarden.java b/src/main/java/binnie/botany/farm/CircuitGarden.java new file mode 100644 index 00000000..d8c0922b --- /dev/null +++ b/src/main/java/binnie/botany/farm/CircuitGarden.java @@ -0,0 +1,99 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.farm; + +import net.minecraft.item.ItemStack; + +import forestry.api.circuits.ChipsetManager; +import forestry.api.farming.FarmDirection; +import forestry.api.farming.IFarmHousing; +import forestry.api.farming.IFarmLogic; +import binnie.Binnie; +import binnie.botany.api.EnumAcidity; +import binnie.botany.api.EnumMoisture; +import binnie.core.circuits.BinnieCircuit; + +public class CircuitGarden extends BinnieCircuit +{ + private Class logicClass; + private boolean isManual; + private boolean isFertilised; + private ItemStack icon; + private EnumMoisture moisture; + private EnumAcidity acidity; + + public CircuitGarden(final EnumMoisture moisture, final EnumAcidity ph, final boolean manual, final boolean fertilised, final ItemStack recipe, final ItemStack icon) { + super("garden." + moisture.getID() + ((ph != null) ? ("." + ph.getID()) : "") + (manual ? ".manual" : "") + (fertilised ? ".fert" : ""), 4, manual ? ChipsetManager.circuitRegistry.getLayout("forestry.farms.manual") : ChipsetManager.circuitRegistry.getLayout("forestry.farms.managed"), recipe); + this.isManual = false; + this.isFertilised = false; + this.isManual = manual; + this.isFertilised = fertilised; + this.moisture = moisture; + this.acidity = ph; + this.icon = icon; + String info = ""; + if (moisture == EnumMoisture.Dry) { + info += "§eDry§f"; + } + if (moisture == EnumMoisture.Damp) { + info += "§9Damp§f"; + } + if (this.acidity == EnumAcidity.Acid) { + if (info.length() > 0) { + info += ", "; + } + info += "§cAcidic§f"; + } + if (this.acidity == EnumAcidity.Neutral) { + if (info.length() > 0) { + info += ", "; + } + info += "§aNeutral§f"; + } + if (this.acidity == EnumAcidity.Alkaline) { + if (info.length() > 0) { + info += ", "; + } + info += "§bAlkaline§f"; + } + if (info.length() > 0) { + info = " (" + info + "§f)"; + } + this.addTooltipString("Flowers" + info); + } + + @Override + public boolean isCircuitable(Object tile) { + return tile instanceof IFarmHousing; + } + + @Override + public void onInsertion(int slot, Object tile) { + if (!this.isCircuitable(tile)) { + return; + } + final GardenLogic logic = new GardenLogic((IFarmHousing) tile); + logic.setData(this.moisture, this.acidity, this.isManual, this.isFertilised, this.icon, Binnie.Language.localise(this.getName())); + ((IFarmHousing) tile).setFarmLogic(FarmDirection.values()[slot], logic); + } + + @Override + public void onLoad(int slot, Object tile) { + this.onInsertion(slot, tile); + } + + @Override + public void onRemoval(int slot, Object tile) { + if (!this.isCircuitable(tile)) { + return; + } + ((IFarmHousing) tile).resetFarmLogic(FarmDirection.values()[slot]); + } + + @Override + public void onTick(int arg0, Object arg1) { + } + +} diff --git a/src/main/java/binnie/botany/farm/FarmLogic.java b/src/main/java/binnie/botany/farm/FarmLogic.java new file mode 100644 index 00000000..24e188d7 --- /dev/null +++ b/src/main/java/binnie/botany/farm/FarmLogic.java @@ -0,0 +1,61 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.farm; + +import net.minecraft.item.ItemStack; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; + +import forestry.api.farming.FarmDirection; +import forestry.api.farming.IFarmHousing; + +import net.minecraft.world.World; + +import forestry.api.farming.IFarmLogic; + +public abstract class FarmLogic implements IFarmLogic +{ + World world; + IFarmHousing housing; + boolean isManual; + + public FarmLogic(final IFarmHousing housing) { + this.housing = housing; + } + + @Override + public IFarmLogic setManual(final boolean flag) { + this.isManual = flag; + return this; + } + + protected final boolean isAirBlock(final Vect position) { + return this.world.isAirBlock(position.x, position.y, position.z); + } + + protected final boolean isWaterBlock(final Vect position) { + return this.world.getBlock(position.x, position.y, position.z) == Blocks.water; + } + + protected final Block getBlock(final Vect position) { + return this.world.getBlock(position.x, position.y, position.z); + } + + protected final int getBlockMeta(final Vect position) { + return this.world.getBlockMetadata(position.x, position.y, position.z); + } + + protected final ItemStack getAsItemStack(final Vect position) { + return new ItemStack(this.getBlock(position), 1, this.getBlockMeta(position)); + } + + protected final Vect translateWithOffset(final int x, final int y, final int z, final FarmDirection direction, final int step) { + return new Vect(x + direction.getForgeDirection().offsetX * step, y + direction.getForgeDirection().offsetY * step, z + direction.getForgeDirection().offsetZ * step); + } + + protected final void setBlock(final Vect position, final Block block, final int meta) { + this.world.setBlock(position.x, position.y, position.z, block, meta, 2); + } +} diff --git a/src/main/java/binnie/botany/farm/FarmableFlower.java b/src/main/java/binnie/botany/farm/FarmableFlower.java new file mode 100644 index 00000000..cfdb2d08 --- /dev/null +++ b/src/main/java/binnie/botany/farm/FarmableFlower.java @@ -0,0 +1,47 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.farm; + +import binnie.botany.api.IFlower; +import binnie.botany.gardening.Gardening; +import net.minecraft.entity.player.EntityPlayer; +import binnie.botany.api.EnumFlowerStage; +import binnie.botany.core.BotanyCore; +import net.minecraft.item.ItemStack; +import forestry.api.farming.ICrop; +import binnie.botany.Botany; +import net.minecraft.world.World; +import forestry.api.farming.IFarmable; + +public class FarmableFlower implements IFarmable +{ + @Override + public boolean isSaplingAt(final World world, final int x, final int y, final int z) { + return world.getBlock(x, y, z) == Botany.flower; + } + + @Override + public ICrop getCropAt(final World world, final int x, final int y, final int z) { + return null; + } + + @Override + public boolean isGermling(final ItemStack itemstack) { + final EnumFlowerStage stage = BotanyCore.speciesRoot.getStageType(itemstack); + return stage == EnumFlowerStage.FLOWER || stage == EnumFlowerStage.SEED; + } + + @Override + public boolean isWindfall(final ItemStack itemstack) { + return false; + } + + @Override + public boolean plantSaplingAt(final EntityPlayer player, final ItemStack germling, final World world, final int x, final int y, final int z) { + final IFlower flower = BotanyCore.getFlowerRoot().getMember(germling); + Gardening.plant(world, x, y, z, flower, player.getGameProfile()); + return true; + } +} diff --git a/src/main/java/binnie/botany/farm/FarmableVanillaFlower.java b/src/main/java/binnie/botany/farm/FarmableVanillaFlower.java new file mode 100644 index 00000000..350c7222 --- /dev/null +++ b/src/main/java/binnie/botany/farm/FarmableVanillaFlower.java @@ -0,0 +1,26 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.farm; + +import binnie.botany.api.IFlower; +import binnie.botany.gardening.Gardening; +import net.minecraft.world.World; +import net.minecraft.entity.player.EntityPlayer; +import binnie.botany.core.BotanyCore; +import net.minecraft.item.ItemStack; + +public class FarmableVanillaFlower extends FarmableFlower +{ + @Override + public boolean isGermling(final ItemStack itemstack) { + return BotanyCore.getFlowerRoot().getConversion(itemstack) != null; + } + + @Override + public boolean plantSaplingAt(final EntityPlayer player, final ItemStack germling, final World world, final int x, final int y, final int z) { + final IFlower flower = BotanyCore.getFlowerRoot().getConversion(germling); + return Gardening.plant(world, x, y, z, flower, player.getGameProfile()); + } +} diff --git a/src/main/java/binnie/botany/farm/GardenLogic.java b/src/main/java/binnie/botany/farm/GardenLogic.java new file mode 100644 index 00000000..ba205233 --- /dev/null +++ b/src/main/java/binnie/botany/farm/GardenLogic.java @@ -0,0 +1,370 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.farm; + +import net.minecraft.tileentity.TileEntity; + +import com.mojang.authlib.GameProfile; + +import binnie.core.Mods; +import binnie.botany.flower.TileEntityFlower; +import forestry.core.access.IOwnable; + +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.util.ResourceLocation; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import net.minecraft.util.IIcon; + +import forestry.api.farming.ICrop; + +import net.minecraftforge.fluids.FluidStack; + +import binnie.Binnie; + +import net.minecraft.item.ItemBlock; +import net.minecraft.world.IBlockAccess; + +import binnie.botany.Botany; +import binnie.botany.api.EnumSoilType; +import binnie.botany.api.gardening.IBlockSoil; + +import java.util.Collection; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.init.Blocks; + +import binnie.botany.gardening.Gardening; +import forestry.api.farming.FarmDirection; +import forestry.api.farming.IFarmHousing; +import forestry.api.farming.IFarmable; + +import java.util.List; + +import net.minecraft.item.ItemStack; + +import java.util.ArrayList; + +import binnie.botany.api.EnumAcidity; +import binnie.botany.api.EnumMoisture; + +public class GardenLogic extends FarmLogic +{ + EnumMoisture moisture; + EnumAcidity acidity; + boolean fertilised; + String name; + ArrayList produce; + private ItemStack icon; + List farmables; + + public GardenLogic(final IFarmHousing housing) { + super(housing); + this.produce = new ArrayList(); + (this.farmables = new ArrayList()).add(new FarmableFlower()); + this.farmables.add(new FarmableVanillaFlower()); + } + + @Override + public int getFertilizerConsumption() { + return this.fertilised ? 8 : 2; + } + + @Override + public int getWaterConsumption(final float hydrationModifier) { + return (int) (this.moisture.ordinal() * 40 * hydrationModifier); + } + + @Override + public boolean isAcceptedResource(final ItemStack itemstack) { + return Gardening.isSoil(itemstack.getItem()) || itemstack.getItem() == Item.getItemFromBlock(Blocks.sand) || itemstack.getItem() == Item.getItemFromBlock(Blocks.dirt) || Gardening.isAcidFertiliser(itemstack) || Gardening.isAlkalineFertiliser(itemstack); + } + + @Override + public Collection collect() { + final Collection products = this.produce; + this.produce = new ArrayList(); + return products; + } + + @Override + public boolean cultivate(final int x, final int y, final int z, final FarmDirection direction, final int extent) { + this.world = this.housing.getWorld(); + return this.maintainSoil(x, y, z, direction, extent) || (!this.isManual && this.maintainWater(x, y, z, direction, extent)) || this.maintainCrops(x, y + 1, z, direction, extent); + } + + private boolean isWaste(final ItemStack stack) { + return stack.getItem() == Item.getItemFromBlock(Blocks.dirt); + } + + private boolean maintainSoil(final int x2, final int y2, final int z2, final FarmDirection direction, final int extent) { + for (int i = 0; i < extent; ++i) { + final Vect position = this.translateWithOffset(x2, y2, z2, direction, i); + if (this.fertilised && Gardening.isSoil(this.world.getBlock(position.x, position.y, position.z))) { + final IBlockSoil soil = (IBlockSoil) this.world.getBlock(position.x, position.y, position.z); + if (soil.fertilise(this.world, position.x, position.y, position.z, EnumSoilType.FLOWERBED)) { + continue; + } + } + if (this.world.getBlock(position.x, position.y + 1, position.z) == Botany.plant) { + this.world.setBlockToAir(position.x, position.y + 1, position.z); + } + else { + if (this.acidity != null && Gardening.isSoil(this.world.getBlock(position.x, position.y, position.z))) { + final IBlockSoil soil = (IBlockSoil) this.world.getBlock(position.x, position.y, position.z); + final EnumAcidity pH = soil.getPH(this.world, position.x, position.y, position.z); + if (pH.ordinal() < this.acidity.ordinal()) { + final ItemStack stack = this.getAvailableAlkaline(); + if (stack != null && soil.setPH(this.world, position.x, position.y, position.z, EnumAcidity.values()[pH.ordinal() + 1])) { + this.housing.getFarmInventory().removeResources(new ItemStack[] { stack }); + continue; + } + } + if (pH.ordinal() > this.acidity.ordinal()) { + final ItemStack stack = this.getAvailableAcid(); + if (stack != null && soil.setPH(this.world, position.x, position.y, position.z, EnumAcidity.values()[pH.ordinal() - 1])) { + this.housing.getFarmInventory().removeResources(new ItemStack[] { stack }); + continue; + } + } + } + if (!this.isAirBlock(position) && !this.world.getBlock(position.x, position.y, position.z).isReplaceable(this.world, position.x, position.y, position.z)) { + final ItemStack block = this.getAsItemStack(position); + final ItemStack loam = this.getAvailableLoam(); + if (this.isWaste(block) && loam != null) { + this.produce.addAll(Blocks.dirt.getDrops(this.world, position.x, position.y, position.z, block.getItemDamage(), 0)); + this.setBlock(position, Blocks.air, 0); + return this.trySetSoil(position, loam); + } + } + else if (!this.isManual) { + if (!this.isWaterBlock(position)) { + if (i % 2 == 0) { + return this.trySetSoil(position); + } + FarmDirection cclock = FarmDirection.EAST; + if (direction == FarmDirection.EAST) { + cclock = FarmDirection.SOUTH; + } + else if (direction == FarmDirection.SOUTH) { + cclock = FarmDirection.EAST; + } + else if (direction == FarmDirection.WEST) { + cclock = FarmDirection.SOUTH; + } + final Vect previous = this.translateWithOffset(position.x, position.y, position.z, cclock, 1); + final ItemStack soil2 = this.getAsItemStack(previous); + if (!Gardening.isSoil(soil2.getItem())) { + this.trySetSoil(position); + } + } + } + } + } + return false; + } + + private boolean maintainWater(final int x, final int y, final int z, final FarmDirection direction, final int extent) { + for (int i = 0; i < extent; ++i) { + final Vect position = this.translateWithOffset(x, y, z, direction, i); + if (this.isAirBlock(position) || this.world.getBlock(x, y, z).isReplaceable(this.world, position.x, position.y, position.z)) { + if (!this.isWaterBlock(position)) { + boolean isEnclosed = true; + if (this.world.isAirBlock(position.x + 1, position.y, position.z)) { + isEnclosed = false; + } + else if (this.world.isAirBlock(position.x - 1, position.y, position.z)) { + isEnclosed = false; + } + else if (this.world.isAirBlock(position.x, position.y, position.z + 1)) { + isEnclosed = false; + } + else if (this.world.isAirBlock(position.x, position.y, position.z - 1)) { + isEnclosed = false; + } + isEnclosed = (isEnclosed || this.moisture != EnumMoisture.Damp); + if (isEnclosed) { + return this.trySetWater(position); + } + } + } + } + return false; + } + + private ItemStack getAvailableLoam() { + EnumMoisture[] moistures; + if (this.moisture == EnumMoisture.Damp) { + moistures = new EnumMoisture[] { EnumMoisture.Damp, EnumMoisture.Normal, EnumMoisture.Dry }; + } + else if (this.moisture == EnumMoisture.Damp) { + moistures = new EnumMoisture[] { EnumMoisture.Dry, EnumMoisture.Damp, EnumMoisture.Dry }; + } + else { + moistures = new EnumMoisture[] { EnumMoisture.Dry, EnumMoisture.Normal, EnumMoisture.Damp }; + } + final EnumAcidity[] acidities = { EnumAcidity.Neutral, EnumAcidity.Acid, EnumAcidity.Alkaline }; + for (final EnumMoisture moist : moistures) { + for (final EnumAcidity acid : acidities) { + for (final Block type : new Block[] { Botany.flowerbed, Botany.loam, Botany.soil }) { + final int meta = acid.ordinal() * 3 + moist.ordinal(); + final ItemStack[] resource = { new ItemStack(type, 1, meta) }; + if (this.housing.getFarmInventory().hasResources(resource)) { + return resource[0]; + } + } + } + } + if (this.housing.getFarmInventory().hasResources(new ItemStack[] { new ItemStack(Blocks.dirt) })) { + return new ItemStack(Blocks.dirt); + } + return null; + } + + private boolean trySetSoil(final Vect position) { + return this.trySetSoil(position, this.getAvailableLoam()); + } + + private boolean trySetSoil(final Vect position, ItemStack loam) { + ItemStack copy = loam; + if (loam != null) { + if (loam.getItem() == Item.getItemFromBlock(Blocks.dirt)) { + loam = new ItemStack(Botany.soil, 0, 4); + } + this.setBlock(position, ((ItemBlock) loam.getItem()).field_150939_a, loam.getItemDamage()); + this.housing.getFarmInventory().removeResources(new ItemStack[] { copy }); + return true; + } + return false; + } + + private boolean trySetWater(final Vect position) { + final FluidStack water = Binnie.Liquid.getLiquidStack("water", 1000); + if (this.moisture == EnumMoisture.Damp) { + if (!this.housing.hasLiquid(water)) { + return false; + } + this.setBlock(position, Blocks.water, 0); + this.housing.removeLiquid(water); + return true; + } + else { + if (this.moisture != EnumMoisture.Dry) { + return this.trySetSoil(position); + } + final ItemStack[] sand = { new ItemStack(Blocks.sand, 1) }; + if (!this.housing.getFarmInventory().hasResources(sand)) { + return false; + } + this.setBlock(position, Blocks.sand, 0); + this.housing.getFarmInventory().removeResources(sand); + return true; + } + } + + public void setIcon(final ItemStack icon) { + this.icon = icon; + } + + @Override + public boolean isAcceptedGermling(final ItemStack itemstack) { + for (final IFarmable farmable : this.farmables) { + if (farmable.isGermling(itemstack)) { + return true; + } + } + return false; + } + + @Override + public Collection harvest(final int x, final int y, final int z, final FarmDirection direction, final int extent) { + return null; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon() { + return this.icon.getIconIndex(); + } + + @Override + public ResourceLocation getSpriteSheet() { + return TextureMap.locationBlocksTexture; + } + + @Override + public String getName() { + return this.name; + } + + protected boolean maintainCrops(final int x, final int y, final int z, final FarmDirection direction, final int extent) { + for (int i = 0; i < extent; ++i) { + final Vect position = this.translateWithOffset(x, y, z, direction, i); + if (this.isAirBlock(position) || this.world.getBlock(x, y, z).isReplaceable(this.world, position.x, position.y, position.z)) { + final ItemStack below = this.getAsItemStack(position.add(new Vect(0, -1, 0))); + if (Gardening.isSoil(below.getItem())) { + return this.trySetCrop(position); + } + } + } + return false; + } + + private boolean trySetCrop(final Vect position) { + for (final IFarmable farmable : this.farmables) { + final boolean success = this.housing.plantGermling(farmable, this.world, position.x, position.y, position.z); + if (success && this.housing instanceof IOwnable) { + final TileEntity tile = this.housing.getWorld().getTileEntity(position.x, position.y, position.z); + if (tile instanceof TileEntityFlower) { + try { + final IOwnable housing2 = (IOwnable) this.housing; + GameProfile prof = null; + if (Mods.Forestry.dev()) { + prof = (GameProfile) IOwnable.class.getMethod("getOwner", new Class[0]).invoke(housing2, new Object[0]); + } + else { + prof = (GameProfile) IOwnable.class.getMethod("getOwnerProfile", new Class[0]).invoke(housing2, new Object[0]); + } + ((TileEntityFlower) tile).setOwner(prof); + } catch (Exception ex) { + } + } + return true; + } + } + return false; + } + + public ItemStack getAvailableAcid() { + for (final ItemStack stack : Gardening.getAcidFertilisers()) { + if (stack != null && stack.getItem() != null && this.housing.getFarmInventory().hasResources(new ItemStack[] { stack })) { + return stack; + } + } + return null; + } + + public ItemStack getAvailableAlkaline() { + for (final ItemStack stack : Gardening.getAlkalineFertilisers()) { + if (stack != null && stack.getItem() != null && this.housing.getFarmInventory().hasResources(new ItemStack[] { stack })) { + return stack; + } + } + return null; + } + + public void setData(final EnumMoisture moisture2, final EnumAcidity acidity2, final boolean isManual, final boolean isFertilised, final ItemStack icon2, final String name2) { + this.moisture = moisture2; + this.acidity = acidity2; + this.isManual = isManual; + this.fertilised = isFertilised; + this.icon = icon2; + this.name = name2; + } + +} diff --git a/src/main/java/binnie/botany/farm/Vect.java b/src/main/java/binnie/botany/farm/Vect.java new file mode 100644 index 00000000..1313abeb --- /dev/null +++ b/src/main/java/binnie/botany/farm/Vect.java @@ -0,0 +1,79 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.farm; + +public class Vect +{ + public int x; + public int y; + public int z; + + public Vect(final int[] dim) { + if (dim.length != 3) { + throw new RuntimeException("Cannot instantiate a vector with less or more than 3 points."); + } + this.x = dim[0]; + this.y = dim[1]; + this.z = dim[2]; + } + + public Vect(final int x, final int y, final int z) { + this.x = x; + this.y = y; + this.z = z; + } + + public Vect add(final Vect other) { + final Vect vect; + final Vect result = vect = new Vect(this.x, this.y, this.z); + vect.x += other.x; + final Vect vect2 = result; + vect2.y += other.y; + final Vect vect3 = result; + vect3.z += other.z; + return result; + } + + public Vect multiply(final float factor) { + final Vect vect; + final Vect result = vect = new Vect(this.x, this.y, this.z); + vect.x *= (int) factor; + final Vect vect2 = result; + vect2.y *= (int) factor; + final Vect vect3 = result; + vect3.z *= (int) factor; + return result; + } + + @Override + public String toString() { + return String.format("%sx%sx%s;", this.x, this.y, this.z); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = 31 * result + this.x; + result = 31 * result + this.y; + result = 31 * result + this.z; + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (this.getClass() != obj.getClass()) { + return false; + } + final Vect other = (Vect) obj; + return this.x == other.x && this.y == other.y && this.z == other.z; + } +} diff --git a/src/main/java/binnie/botany/flower/BlockFlower.java b/src/main/java/binnie/botany/flower/BlockFlower.java new file mode 100644 index 00000000..2c37b399 --- /dev/null +++ b/src/main/java/binnie/botany/flower/BlockFlower.java @@ -0,0 +1,202 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.flower; + +import java.util.List; +import java.util.ArrayList; +import java.util.Random; +import binnie.botany.Botany; +import net.minecraft.init.Blocks; +import net.minecraft.block.Block; +import binnie.botany.api.IFlowerType; +import binnie.botany.api.EnumFlowerStage; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import com.mojang.authlib.GameProfile; +import binnie.botany.api.IFlower; +import binnie.botany.gardening.Gardening; +import net.minecraft.entity.player.EntityPlayer; +import binnie.botany.core.BotanyCore; +import binnie.core.BinnieCore; +import net.minecraft.item.ItemStack; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraft.block.material.Material; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.botany.genetics.EnumFlowerType; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.block.BlockContainer; + +public class BlockFlower extends BlockContainer +{ + @Override + public int getRenderType() { + return RendererBotany.renderID; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister par1IconRegister) { + for (final EnumFlowerType type : EnumFlowerType.values()) { + type.registerIcons(par1IconRegister); + } + } + + public BlockFlower() { + super(Material.plants); + final float f = 0.2f; + this.setBlockBounds(0.5f - f, 0.0f, 0.5f - f, 0.5f + f, f * 3.0f, 0.5f + f); + this.setTickRandomly(true); + this.setBlockName("flower"); + } + + @Override + public TileEntity createNewTileEntity(final World var1, final int i) { + return new TileEntityFlower(); + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(final World par1World, final int par2, final int par3, final int par4) { + return null; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public void onBlockPlacedBy(final World world, final int x, final int y, final int z, final EntityLivingBase living, final ItemStack stack) { + super.onBlockPlacedBy(world, x, y, z, living, stack); + final TileEntity flower = world.getTileEntity(x, y, z); + if (!BinnieCore.proxy.isSimulating(world)) { + if (flower != null && flower instanceof TileEntityFlower) { + final IFlower f = BotanyCore.getFlowerRoot().getMember(stack); + ((TileEntityFlower) flower).setRender(new TileEntityFlower.RenderInfo(f, (TileEntityFlower) flower)); + } + return; + } + final TileEntity below = world.getTileEntity(x, y - 1, z); + if (flower != null && flower instanceof TileEntityFlower) { + if (below instanceof TileEntityFlower) { + ((TileEntityFlower) flower).setSection(((TileEntityFlower) below).getSection()); + } + else { + final GameProfile owner = (living instanceof EntityPlayer) ? ((EntityPlayer) living).getGameProfile() : null; + ((TileEntityFlower) flower).create(stack, owner); + } + } + Gardening.tryGrowSection(world, x, y, z); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final IBlockAccess world, final int x, final int y, final int z, final int side) { + final TileEntity tile = world.getTileEntity(x, y, z); + if (tile instanceof TileEntityFlower) { + final TileEntityFlower f = (TileEntityFlower) tile; + final EnumFlowerStage stage = (f.getAge() == 0) ? EnumFlowerStage.SEED : EnumFlowerStage.FLOWER; + final IFlowerType flower = f.getType(); + final int section = f.getRenderSection(); + final boolean flowered = f.isFlowered(); + return (RendererBotany.pass == 0) ? flower.getStem(stage, flowered, section) : ((RendererBotany.pass == 1) ? flower.getPetalIcon(stage, flowered, section) : flower.getVariantIcon(stage, flowered, section)); + } + return super.getIcon(world, x, y, z, side); + } + + @Override + @SideOnly(Side.CLIENT) + public int colorMultiplier(final IBlockAccess world, final int x, final int y, final int z) { + final TileEntity tile = world.getTileEntity(x, y, z); + if (tile instanceof TileEntityFlower) { + final TileEntityFlower f = (TileEntityFlower) tile; + return (RendererBotany.pass == 0) ? f.getStemColour() : ((RendererBotany.pass == 1) ? f.getPrimaryColour() : f.getSecondaryColour()); + } + return 16777215; + } + + @Override + public boolean canPlaceBlockAt(final World world, final int x, final int y, final int z) { + return super.canPlaceBlockAt(world, x, y, z) && this.canBlockStay(world, x, y, z); + } + + protected boolean canPlaceBlockOn(final Block block) { + return block == Blocks.grass || block == Blocks.dirt || block == Blocks.farmland || Gardening.isSoil(block); + } + + @Override + public void onNeighborBlockChange(final World world, final int x, final int y, final int z, final Block block) { + super.onNeighborBlockChange(world, x, y, z, block); + this.checkAndDropBlock(world, x, y, z); + final TileEntity tile = world.getTileEntity(x, y, z); + if (tile instanceof TileEntityFlower) { + final TileEntityFlower flower = (TileEntityFlower) tile; + if (flower.getSection() == 0 && flower.getFlower() != null && flower.getFlower().getAge() > 0 && flower.getFlower().getGenome().getPrimary().getType().getSections() > 1 && world.getBlock(x, y + 1, z) != Botany.flower) { + this.dropBlockAsItem(world, x, y, z, world.getBlockMetadata(x, y, z), 0); + world.setBlockToAir(x, y, z); + } + } + } + + @Override + public void updateTick(final World world, final int x, final int y, final int z, final Random rand) { + final TileEntity tile = world.getTileEntity(x, y, z); + if (tile instanceof TileEntityFlower) { + ((TileEntityFlower) tile).randomUpdate(rand); + this.checkAndDropBlock(world, x, y, z); + return; + } + world.setBlockToAir(x, y, z); + } + + protected void checkAndDropBlock(final World world, final int x, final int y, final int z) { + if (!this.canBlockStay(world, x, y, z)) { + this.dropBlockAsItem(world, x, y, z, world.getBlockMetadata(x, y, z), 0); + world.setBlockToAir(x, y, z); + } + } + + @Override + public boolean canBlockStay(final World world, final int x, final int y, final int z) { + final TileEntity tile = world.getTileEntity(x, y, z); + if (tile instanceof TileEntityFlower && ((TileEntityFlower) tile).getSection() > 0) { + return world.getBlock(x, y - 1, z) == Botany.flower; + } + return this.canPlaceBlockOn(world.getBlock(x, y - 1, z)); + } + + @Override + public ArrayList getDrops(final World world, final int x, final int y, final int z, final int blockMeta, final int fortune) { + final ArrayList drops = new ArrayList(); + final TileEntity tile = world.getTileEntity(x, y, z); + if (tile instanceof TileEntityFlower && ((TileEntityFlower) tile).getSection() == 0) { + final ItemStack flower = ((TileEntityFlower) tile).getItemStack(); + if (flower != null) { + drops.add(flower); + } + } + return drops; + } + + @Override + public boolean removedByPlayer(final World world, final EntityPlayer player, final int x, final int y, final int z) { + final List drops = this.getDrops(world, x, y, z, world.getBlockMetadata(x, y, z), 0); + final boolean hasBeenBroken = world.setBlockToAir(x, y, z); + if (hasBeenBroken && BinnieCore.proxy.isSimulating(world) && drops.size() > 0 && (player == null || !player.capabilities.isCreativeMode)) { + for (final ItemStack drop : drops) { + this.dropBlockAsItem(world, x, y, z, drop); + } + } + return hasBeenBroken; + } +} diff --git a/src/main/java/binnie/botany/flower/ItemBotany.java b/src/main/java/binnie/botany/flower/ItemBotany.java new file mode 100644 index 00000000..b38b30c0 --- /dev/null +++ b/src/main/java/binnie/botany/flower/ItemBotany.java @@ -0,0 +1,288 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.flower; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.block.Block; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.entity.Entity; +import net.minecraft.world.IBlockAccess; +import net.minecraft.init.Blocks; +import binnie.botany.Botany; +import forestry.api.genetics.IPollinatable; +import binnie.Binnie; +import binnie.botany.api.EnumFlowerStage; +import net.minecraft.world.World; +import binnie.botany.api.IFlowerType; +import binnie.botany.genetics.EnumFlowerType; +import net.minecraft.util.IIcon; +import forestry.core.config.Config; +import net.minecraft.creativetab.CreativeTabs; +import binnie.botany.api.EnumFlowerChromosome; +import binnie.botany.core.BotanyCore; +import binnie.botany.api.IAlleleFlowerSpecies; +import binnie.botany.genetics.Flower; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.core.BinnieCore; +import binnie.botany.api.IFlower; +import java.util.List; +import net.minecraft.entity.player.EntityPlayer; +import forestry.api.genetics.IIndividual; +import net.minecraft.item.ItemStack; +import binnie.botany.CreativeTabBotany; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.item.Item; + +public abstract class ItemBotany extends Item +{ + @Override + @SideOnly(Side.CLIENT) + public int getSpriteNumber() { + return 0; + } + + public ItemBotany(final String name) { + this.setCreativeTab(CreativeTabBotany.instance); + this.setUnlocalizedName(name); + this.hasSubtypes = true; + } + + @Override + public boolean isDamageable() { + return false; + } + + @Override + public boolean isRepairable() { + return false; + } + + @Override + public boolean getShareTag() { + return true; + } + + @Override + public boolean hasEffect(final ItemStack itemstack) { + if (!itemstack.hasTagCompound()) { + return false; + } + final IIndividual individual = this.getIndividual(itemstack); + return individual != null && individual.getGenome() != null && individual.hasEffect(); + } + + @Override + public void addInformation(final ItemStack itemstack, final EntityPlayer player, final List list, final boolean flag) { + if (!itemstack.hasTagCompound()) { + return; + } + final IFlower individual = (IFlower) this.getIndividual(itemstack); + if (individual == null) { + list.add("This item is bugged. Destroy it!"); + return; + } + list.add("§e" + individual.getGenome().getPrimaryColor().getName() + ((individual.getGenome().getPrimaryColor() == individual.getGenome().getSecondaryColor()) ? "" : (" and " + individual.getGenome().getSecondaryColor().getName())) + ", " + individual.getGenome().getStemColor().getName() + " Stem"); + if (individual.isAnalyzed()) { + if (BinnieCore.proxy.isShiftDown()) { + individual.addTooltip(list); + } + else { + list.add("§o"); + } + } + else { + list.add(""); + } + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister par1IconRegister) { + } + + protected IIndividual getIndividual(final ItemStack itemstack) { + return new Flower(itemstack.getTagCompound()); + } + + private IAlleleFlowerSpecies getPrimarySpecies(final ItemStack itemstack) { + final IFlower tree = BotanyCore.speciesRoot.getMember(itemstack); + if (tree == null) { + return (IAlleleFlowerSpecies) BotanyCore.speciesRoot.getDefaultTemplate()[EnumFlowerChromosome.SPECIES.ordinal()]; + } + return tree.getGenome().getPrimary(); + } + + @Override + public String getItemStackDisplayName(final ItemStack itemstack) { + if (!itemstack.hasTagCompound()) { + return "Unknown"; + } + final IIndividual individual = this.getIndividual(itemstack); + return (individual != null && individual.getGenome() != null) ? (individual.getDisplayName() + this.getTag()) : "Corrupted Flower"; + } + + @Override + public void getSubItems(final Item item, final CreativeTabs par2CreativeTabs, final List itemList) { + this.addCreativeItems(itemList, true); + } + + public void addCreativeItems(final List itemList, final boolean hideSecrets) { + for (final IIndividual individual : BotanyCore.speciesRoot.getIndividualTemplates()) { + if (hideSecrets && individual.isSecret() && !Config.isDebug) { + continue; + } + itemList.add(BotanyCore.speciesRoot.getMemberStack(individual.copy(), this.getStage().ordinal())); + } + } + + @Override + public int getColorFromItemStack(final ItemStack itemstack, final int renderPass) { + final IFlower flower = BotanyCore.speciesRoot.getMember(itemstack); + if (flower == null || flower.getGenome() == null) { + return 16777215; + } + return (renderPass == 0) ? flower.getGenome().getStemColor().getColor(flower.isWilted()) : ((renderPass == 1) ? flower.getGenome().getPrimaryColor().getColor(flower.isWilted()) : flower.getGenome().getSecondaryColor().getColor(flower.isWilted())); + } + + @Override + public boolean requiresMultipleRenderPasses() { + return true; + } + + @Override + public int getRenderPasses(final int metadata) { + return 3; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final ItemStack itemstack, final int renderPass) { + final IFlower flower = BotanyCore.speciesRoot.getMember(itemstack); + if (flower == null || flower.getGenome() == null || flower.getGenome().getPrimary() == null) { + return EnumFlowerType.Allium.getBlank(); + } + final IFlowerType type = flower.getGenome().getPrimary().getType(); + if (renderPass == 0) { + return type.getStem(this.getStage(), flower.hasFlowered(), type.getSections() - 1); + } + if (renderPass == 1) { + return type.getPetalIcon(this.getStage(), flower.hasFlowered(), type.getSections() - 1); + } + return type.getVariantIcon(this.getStage(), flower.hasFlowered(), type.getSections() - 1); + } + + @Override + public boolean onItemUse(final ItemStack itemstack, final EntityPlayer player, final World world, int x, int y, int z, int side, final float px, final float py, final float pz) { + if (this.getStage() == EnumFlowerStage.POLLEN) { + final IFlower flower = Binnie.Genetics.getFlowerRoot().getMember(itemstack); + final TileEntity target = world.getTileEntity(x, y, z); + if (!(target instanceof IPollinatable)) { + return false; + } + final IPollinatable pollinatable = (IPollinatable) target; + if (!pollinatable.canMateWith(flower)) { + return false; + } + pollinatable.mateWith(flower); + if (!player.capabilities.isCreativeMode) { + --itemstack.stackSize; + } + return true; + } + else { + final Block blockFlower = Botany.flower; + final Block blockAlreadyThere = world.getBlock(x, y, z); + if (blockAlreadyThere == Blocks.snow_layer && (world.getBlockMetadata(x, y, z) & 0x7) < 1) { + side = 1; + } + else if (blockAlreadyThere != Blocks.vine && blockAlreadyThere != Blocks.tallgrass && blockAlreadyThere != Blocks.deadbush && !blockAlreadyThere.isReplaceable(world, x, y, z)) { + if (side == 0) { + --y; + } + if (side == 1) { + ++y; + } + if (side == 2) { + --z; + } + if (side == 3) { + ++z; + } + if (side == 4) { + --x; + } + if (side == 5) { + ++x; + } + } + if (itemstack.stackSize == 0) { + return false; + } + if (!player.canPlayerEdit(x, y, z, side, itemstack)) { + return false; + } + if (y == 255 && blockFlower.getMaterial().isSolid()) { + return false; + } + if (world.canPlaceEntityOnSide(blockFlower, x, y, z, false, side, player, itemstack)) { + final int i1 = this.getMetadata(itemstack.getItemDamage()); + final int j1 = blockFlower.onBlockPlaced(world, x, y, z, side, px, py, pz, i1); + if (this.placeBlockAt(itemstack, player, world, x, y, z, side, px, py, pz, j1)) { + world.playSoundEffect(x + 0.5f, y + 0.5f, z + 0.5f, blockFlower.stepSound.func_150496_b(), (blockFlower.stepSound.getVolume() + 1.0f) / 2.0f, blockFlower.stepSound.getPitch() * 0.8f); + --itemstack.stackSize; + } + return true; + } + return false; + } + } + + @SideOnly(Side.CLIENT) + public boolean func_150936_a(final World p_150936_1_, int p_150936_2_, int p_150936_3_, int p_150936_4_, int p_150936_5_, final EntityPlayer p_150936_6_, final ItemStack p_150936_7_) { + final Block field_150939_a = Botany.flower; + final Block block = p_150936_1_.getBlock(p_150936_2_, p_150936_3_, p_150936_4_); + if (block == Blocks.snow_layer) { + p_150936_5_ = 1; + } + else if (block != Blocks.vine && block != Blocks.tallgrass && block != Blocks.deadbush && !block.isReplaceable(p_150936_1_, p_150936_2_, p_150936_3_, p_150936_4_)) { + if (p_150936_5_ == 0) { + --p_150936_3_; + } + if (p_150936_5_ == 1) { + ++p_150936_3_; + } + if (p_150936_5_ == 2) { + --p_150936_4_; + } + if (p_150936_5_ == 3) { + ++p_150936_4_; + } + if (p_150936_5_ == 4) { + --p_150936_2_; + } + if (p_150936_5_ == 5) { + ++p_150936_2_; + } + } + return p_150936_1_.canPlaceEntityOnSide(field_150939_a, p_150936_2_, p_150936_3_, p_150936_4_, false, p_150936_5_, (Entity) null, p_150936_7_); + } + + public boolean placeBlockAt(final ItemStack stack, final EntityPlayer player, final World world, final int x, final int y, final int z, final int side, final float hitX, final float hitY, final float hitZ, final int metadata) { + final Block field_150939_a = Botany.flower; + if (!world.setBlock(x, y, z, field_150939_a, metadata, 3)) { + return false; + } + if (world.getBlock(x, y, z) == field_150939_a) { + field_150939_a.onBlockPlacedBy(world, x, y, z, player, stack); + field_150939_a.onPostBlockPlaced(world, x, y, z, metadata); + } + return true; + } + + public abstract EnumFlowerStage getStage(); + + public abstract String getTag(); +} diff --git a/src/main/java/binnie/botany/flower/ItemFlower.java b/src/main/java/binnie/botany/flower/ItemFlower.java new file mode 100644 index 00000000..b4d62346 --- /dev/null +++ b/src/main/java/binnie/botany/flower/ItemFlower.java @@ -0,0 +1,24 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.flower; + +import binnie.botany.api.EnumFlowerStage; + +public class ItemFlower extends ItemBotany +{ + public ItemFlower() { + super("itemFlower"); + } + + @Override + public EnumFlowerStage getStage() { + return EnumFlowerStage.FLOWER; + } + + @Override + public String getTag() { + return ""; + } +} diff --git a/src/main/java/binnie/botany/flower/ItemInsulatedTube.java b/src/main/java/binnie/botany/flower/ItemInsulatedTube.java new file mode 100644 index 00000000..73ea95a6 --- /dev/null +++ b/src/main/java/binnie/botany/flower/ItemInsulatedTube.java @@ -0,0 +1,173 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.flower; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import binnie.botany.CreativeTabBotany; +import net.minecraft.entity.player.EntityPlayer; +import binnie.botany.Botany; +import net.minecraft.client.renderer.texture.IIconRegister; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.item.ItemStack; +import java.util.List; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.util.IIcon; +import net.minecraft.item.Item; + +public class ItemInsulatedTube extends Item +{ + IIcon[] icons; + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(final Item p_150895_1_, final CreativeTabs p_150895_2_, final List p_150895_3_) { + for (final Material mat : Material.values()) { + for (final Insulate ins : Insulate.values()) { + p_150895_3_.add(new ItemStack(this, 1, mat.ordinal() + ins.ordinal() * 128)); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister p_94581_1_) { + for (int i = 0; i < 3; ++i) { + this.icons[i] = Botany.proxy.getIcon(p_94581_1_, "insulatedTube." + i); + } + } + + @Override + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(final ItemStack stack, final int pass) { + return (pass == 0) ? 16777215 : ((pass == 1) ? Material.get(stack.getItemDamage()).getColor() : Insulate.get(stack.getItemDamage()).getColor()); + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(final ItemStack p_77624_1_, final EntityPlayer p_77624_2_, final List p_77624_3_, final boolean p_77624_4_) { + super.addInformation(p_77624_1_, p_77624_2_, p_77624_3_, p_77624_4_); + p_77624_3_.add(Insulate.get(p_77624_1_.getItemDamage()).getName()); + } + + @Override + public String getItemStackDisplayName(final ItemStack p_77653_1_) { + return Material.get(p_77653_1_.getItemDamage()).getName() + " Insulated Tube"; + } + + @Override + public int getRenderPasses(final int metadata) { + return 3; + } + + @Override + public IIcon getIcon(final ItemStack stack, final int pass) { + return this.icons[pass % 3]; + } + + @Override + public boolean requiresMultipleRenderPasses() { + return true; + } + + public ItemInsulatedTube() { + this.icons = new IIcon[3]; + this.setUnlocalizedName("insulatedTube"); + this.setCreativeTab(CreativeTabBotany.instance); + } + + public static String getInsulate(final ItemStack stack) { + return Insulate.get(stack.getItemDamage()).getName(); + } + + public static ItemStack getInsulateStack(final ItemStack stack) { + return Insulate.get(stack.getItemDamage()).getStack(); + } + + enum Material + { + Copper(14923662, "Copper"), + Tin(14806772, "Tin"), + Bronze(14533238, "Bronze"), + Iron(14211288, "Iron"); + + int color; + String name; + + public int getColor() { + return this.color; + } + + public String getName() { + return this.name; + } + + private Material(final int color, final String name) { + this.color = color; + this.name = name; + } + + public static Material get(final int i) { + return values()[i % values().length]; + } + } + + enum Insulate + { + Clay(10595020, "Clay"), + Cobble(8092539, "Cobblestone"), + Sand(15723189, "Sand"), + HardenedClay(9657411, "Hardened Clay"), + Stone(7171437, "Smooth Stone"), + Sandstone(12695945, "Sandstone"); + + int color; + String name; + + public int getColor() { + return this.color; + } + + public String getName() { + return this.name; + } + + private Insulate(final int color, final String name) { + this.color = color; + this.name = name; + } + + public static Insulate get(final int i) { + return values()[i / 128 % values().length]; + } + + public ItemStack getStack() { + switch (this) { + case Clay: { + return new ItemStack(Blocks.clay); + } + case Cobble: { + return new ItemStack(Blocks.cobblestone); + } + case HardenedClay: { + return new ItemStack(Blocks.hardened_clay); + } + case Sand: { + return new ItemStack(Blocks.sand); + } + case Sandstone: { + return new ItemStack(Blocks.sandstone); + } + case Stone: { + return new ItemStack(Blocks.stone); + } + default: { + return null; + } + } + } + } +} diff --git a/src/main/java/binnie/botany/flower/ItemPollen.java b/src/main/java/binnie/botany/flower/ItemPollen.java new file mode 100644 index 00000000..af6cacf0 --- /dev/null +++ b/src/main/java/binnie/botany/flower/ItemPollen.java @@ -0,0 +1,24 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.flower; + +import binnie.botany.api.EnumFlowerStage; + +public class ItemPollen extends ItemBotany +{ + public ItemPollen() { + super("pollen"); + } + + @Override + public EnumFlowerStage getStage() { + return EnumFlowerStage.POLLEN; + } + + @Override + public String getTag() { + return " Pollen"; + } +} diff --git a/src/main/java/binnie/botany/flower/ItemSeed.java b/src/main/java/binnie/botany/flower/ItemSeed.java new file mode 100644 index 00000000..f2a4b485 --- /dev/null +++ b/src/main/java/binnie/botany/flower/ItemSeed.java @@ -0,0 +1,24 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.flower; + +import binnie.botany.api.EnumFlowerStage; + +public class ItemSeed extends ItemBotany +{ + public ItemSeed() { + super("seed"); + } + + @Override + public EnumFlowerStage getStage() { + return EnumFlowerStage.SEED; + } + + @Override + public String getTag() { + return " Germling"; + } +} diff --git a/src/main/java/binnie/botany/flower/RendererBotany.java b/src/main/java/binnie/botany/flower/RendererBotany.java new file mode 100644 index 00000000..2bee2efa --- /dev/null +++ b/src/main/java/binnie/botany/flower/RendererBotany.java @@ -0,0 +1,66 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.flower; + +import net.minecraft.util.IIcon; +import net.minecraft.client.renderer.EntityRenderer; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.world.IBlockAccess; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.block.Block; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; + +public class RendererBotany implements ISimpleBlockRenderingHandler +{ + public static int renderID; + public static int pass; + + @Override + public void renderInventoryBlock(final Block block, final int metadata, final int modelID, final RenderBlocks renderer) { + } + + @Override + public boolean renderWorldBlock(final IBlockAccess world, final int x, final int y, final int z, final Block block, final int modelId, final RenderBlocks renderer) { + final Tessellator tessellator = Tessellator.instance; + tessellator.setBrightness(block.getMixedBrightnessForBlock(renderer.blockAccess, x, y, z)); + double d1 = x; + final double d2 = y; + double d3 = z; + long i1 = x * 3129871 ^ z * 116129781L; + i1 = i1 * i1 * 42317861L + i1 * 11L; + d1 += ((i1 >> 16 & 0xFL) / 15.0f - 0.5) * 0.3; + d3 += ((i1 >> 24 & 0xFL) / 15.0f - 0.5) * 0.3; + final int rot = (int) (i1 % 4L); + for (int j = 0; j < 3; ++j) { + RendererBotany.pass = j; + final int l = block.colorMultiplier(renderer.blockAccess, x, y, z); + float f = (l >> 16 & 0xFF) / 255.0f; + float f2 = (l >> 8 & 0xFF) / 255.0f; + float f3 = (l & 0xFF) / 255.0f; + if (EntityRenderer.anaglyphEnable) { + final float f4 = (f * 30.0f + f2 * 59.0f + f3 * 11.0f) / 100.0f; + final float f5 = (f * 30.0f + f2 * 70.0f) / 100.0f; + final float f6 = (f * 30.0f + f3 * 70.0f) / 100.0f; + f = f4; + f2 = f5; + f3 = f6; + } + tessellator.setColorOpaque_F(f, f2, f3); + final IIcon iicon = block.getIcon(world, x, y, z, 0); + renderer.drawCrossedSquares(iicon, d1, d2, d3, 1.0f); + } + return false; + } + + @Override + public boolean shouldRender3DInInventory(final int i) { + return false; + } + + @Override + public int getRenderId() { + return RendererBotany.renderID; + } +} diff --git a/src/main/java/binnie/botany/flower/TileEntityFlower.java b/src/main/java/binnie/botany/flower/TileEntityFlower.java new file mode 100644 index 00000000..302cee3d --- /dev/null +++ b/src/main/java/binnie/botany/flower/TileEntityFlower.java @@ -0,0 +1,684 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.flower; + +import binnie.botany.api.IFlowerColour; + +import java.util.HashSet; +import java.util.Set; + +import forestry.api.core.IErrorState; + +import net.minecraft.world.biome.BiomeGenBase; + +import binnie.botany.genetics.EnumFlowerType; +import binnie.botany.api.IFlowerType; +import binnie.botany.genetics.EnumFlowerColor; +import forestry.api.core.EnumHumidity; +import forestry.api.core.EnumTemperature; + +import net.minecraft.world.World; + +import forestry.lepidopterology.entities.EntityButterfly; +import binnie.botany.gardening.BlockPlant; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; + +import binnie.botany.api.EnumFlowerStage; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; + +import binnie.botany.network.MessageFlowerUpdate; + +import net.minecraft.network.Packet; + +import binnie.botany.api.IFlowerGenome; +import binnie.botany.api.EnumSoilType; + +import net.minecraft.init.Blocks; + +import binnie.botany.Botany; + +import java.util.Random; + +import net.minecraft.block.Block; + +import binnie.botany.gardening.Gardening; +import binnie.botany.api.IAlleleFlowerSpecies; +import forestry.api.genetics.IIndividual; + +import net.minecraftforge.common.EnumPlantType; + +import java.util.EnumSet; + +import binnie.botany.core.BotanyCore; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; + +import binnie.Binnie; +import binnie.core.BinnieCore; + +import net.minecraft.nbt.NBTUtil; + +import binnie.botany.genetics.Flower; + +import net.minecraft.nbt.NBTTagCompound; + +import forestry.api.lepidopterology.IButterfly; + +import com.mojang.authlib.GameProfile; + +import binnie.botany.api.IFlower; +import forestry.api.lepidopterology.IButterflyNursery; +import forestry.api.genetics.IPollinatable; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChunkCoordinates; + +public class TileEntityFlower extends TileEntity implements IPollinatable, IButterflyNursery +{ + IFlower flower; + GameProfile owner; + int section; + RenderInfo renderInfo; + IButterfly caterpillar; + int matureTime; + + public TileEntityFlower() { + this.flower = null; + this.section = 0; + this.renderInfo = null; + this.matureTime = 0; + } + + @Override + public void readFromNBT(final NBTTagCompound nbttagcompound) { + this.flower = new Flower(nbttagcompound); + this.section = nbttagcompound.getByte("section"); + if (this.flower.getAge() == 0) { + this.flower.setFlowered(false); + } + this.owner = NBTUtil.func_152459_a(nbttagcompound.getCompoundTag("owner")); + if (nbttagcompound.hasKey("CATER") && BinnieCore.isLepidopteryActive()) { + this.matureTime = nbttagcompound.getInteger("caterTime"); + this.caterpillar = Binnie.Genetics.getButterflyRoot().getMember(nbttagcompound.getCompoundTag("cater")); + } + super.readFromNBT(nbttagcompound); + } + + @Override + public void writeToNBT(final NBTTagCompound nbttagcompound) { + if (this.flower != null) { + this.flower.writeToNBT(nbttagcompound); + } + if (this.owner != null) { + final NBTTagCompound nbt = new NBTTagCompound(); + NBTUtil.func_152460_a(nbt, this.owner); + nbttagcompound.setTag("owner", nbt); + } + if (this.caterpillar != null) { + nbttagcompound.setInteger("caterTime", this.matureTime); + final NBTTagCompound subcompound = new NBTTagCompound(); + this.caterpillar.writeToNBT(subcompound); + nbttagcompound.setTag("cater", subcompound); + } + nbttagcompound.setByte("section", (byte) this.getSection()); + super.writeToNBT(nbttagcompound); + } + + public void create(final ItemStack stack, final GameProfile owner) { + this.create(BotanyCore.getFlowerRoot().getMember(stack), owner); + } + + public void create(final IFlower stack, final GameProfile owner) { + this.flower = stack; + if (this.flower.getAge() == 0) { + this.flower.setFlowered(false); + } + this.updateRender(true); + this.owner = owner; + } + + @Override + public EnumSet getPlantType() { + return EnumSet.of(EnumPlantType.Plains); + } + + @Override + public IIndividual getPollen() { + return this.getFlower(); + } + + @Override + public boolean canMateWith(final IIndividual individual) { + return this.isBreeding() && individual instanceof IFlower && this.getFlower() != null && this.getFlower().getMate() == null && this.getFlower().hasFlowered() && !this.getFlower().isGeneticEqual(individual); + } + + @Override + public void mateWith(final IIndividual individual) { + if (this.getFlower() == null || !(individual instanceof IFlower)) { + return; + } + final IAlleleFlowerSpecies primary = (IAlleleFlowerSpecies) individual.getGenome().getPrimary(); + final IAlleleFlowerSpecies primary2 = this.getFlower().getGenome().getPrimary(); + if (primary == primary2 || this.worldObj.rand.nextInt(4) == 0) { + this.getFlower().mate((IFlower) individual); + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); + } + } + + public IFlower getFlower() { + if (this.getSection() <= 0) { + return this.flower; + } + final TileEntity tile = this.worldObj.getTileEntity(this.xCoord, this.yCoord - this.getSection(), this.zCoord); + if (tile instanceof TileEntityFlower) { + return ((TileEntityFlower) tile).getFlower(); + } + return null; + } + + public boolean isBreeding() { + final Block roots = this.getWorldObj().getBlock(this.xCoord, this.yCoord - 1, this.zCoord); + return Gardening.isSoil(roots); + } + + public void randomUpdate(final Random rand) { + if (this.worldObj.getBlock(this.xCoord, this.yCoord, this.zCoord) != Botany.flower) { + this.invalidate(); + return; + } + if (this.getSection() > 0) { + return; + } + if (this.flower == null) { + return; + } + if (this.flower.getGenome() == null) { + this.invalidate(); + return; + } + if (!this.isBreeding()) { + return; + } + float light = this.worldObj.getBlockLightValue(this.xCoord, this.yCoord, this.zCoord); + if (light < 6.0f) { + for (int dx = -2; dx <= 2; ++dx) { + for (int dy = -2; dy <= 2; ++dy) { + light -= (this.worldObj.canBlockSeeTheSky(this.xCoord, this.yCoord, this.zCoord) ? 0.0f : 0.5f); + } + } + } + final boolean canTolerate = Gardening.canTolerate(this.getFlower(), this.worldObj, this.xCoord, this.yCoord, this.zCoord); + final EnumSoilType soil = Gardening.getSoilType(this.worldObj, this.xCoord, this.yCoord, this.zCoord); + if (rand.nextFloat() < this.getFlower().getGenome().getAgeChance()) { + if (this.flower.getAge() < 1) { + if (canTolerate && light > 6.0f) { + this.doFlowerAge(); + } + } + else { + this.doFlowerAge(); + } + } + if (canTolerate && this.flower.getAge() > 1 && !this.flower.isWilted() && light > 6.0f) { + this.flower.setFlowered(true); + } + if (!canTolerate && this.flower.isWilted() && rand.nextInt(2 + Math.max(this.flower.getAge(), 2)) == 0) { + this.kill(); + return; + } + if (light < 2.0f && this.flower.isWilted()) { + this.kill(); + return; + } + if (!canTolerate || light < 1.0f) { + this.flower.setWilted(true); + } + else { + this.flower.setWilted(false); + } + float CHANCE_DISPERSAL = 0.8f; + CHANCE_DISPERSAL += 0.2f * this.flower.getGenome().getFertility(); + CHANCE_DISPERSAL *= 1.0f + soil.ordinal() * 0.5f; + float CHANCE_POLLINATE = 1.0f; + CHANCE_POLLINATE += 0.25f * this.flower.getGenome().getFertility(); + CHANCE_POLLINATE *= 1.0f + soil.ordinal() * 0.5f; + final float CHANCE_SELFPOLLINATE = 0.2f * CHANCE_POLLINATE; + if (this.worldObj.rand.nextFloat() < CHANCE_DISPERSAL && this.flower.hasFlowered() && !this.flower.isWilted()) { + final IFlowerGenome mate = this.flower.getMate(); + if (mate != null) { + boolean dispersed = false; + for (int a = 0; a < 5 && !dispersed; ++a) { + int dx2; + int dz; + for (dx2 = 0, dz = 0; dx2 == 0 && dz == 0; dx2 = rand.nextInt(3) - 1, dz = rand.nextInt(3) - 1) { + } + final Block b = this.getWorldObj().getBlock(this.xCoord + dx2, this.yCoord, this.zCoord + dz); + final Block b2 = this.getWorldObj().getBlock(this.xCoord + dx2, this.yCoord - 1, this.zCoord + dz); + if (b == Blocks.air && Gardening.isSoil(b2)) { + final IFlower offspring = this.flower.getOffspring(this.getWorldObj()); + if (offspring != null) { + Gardening.plant(this.getWorldObj(), this.xCoord + dx2, this.yCoord, this.zCoord + dz, offspring, this.getOwner()); + this.flower.removeMate(); + dispersed = true; + } + } + } + } + } + if (this.worldObj.rand.nextFloat() < CHANCE_POLLINATE && this.flower.hasFlowered() && !this.flower.isWilted()) { + for (int a2 = 0; a2 < 4; ++a2) { + int dx3; + int dz2; + for (dx3 = 0, dz2 = 0; dx3 == 0 && dz2 == 0; dx3 = rand.nextInt(5) - 2, dz2 = rand.nextInt(5) - 2) { + } + final TileEntity tile = this.getWorldObj().getTileEntity(this.xCoord + dx3, this.yCoord, this.zCoord + dz2); + if (tile instanceof IPollinatable && ((IPollinatable) tile).canMateWith(this.getFlower())) { + ((IPollinatable) tile).mateWith(this.getFlower()); + } + } + } + if (this.worldObj.rand.nextFloat() < CHANCE_SELFPOLLINATE && this.flower.hasFlowered() && this.flower.getMate() == null) { + this.mateWith(this.getFlower()); + } + this.spawnButterflies(); + this.matureCaterpillar(); + this.checkIfDead(false); + this.updateRender(true); + } + + private void doFlowerAge() { + this.getFlower().age(); + if (this.getFlower().getAge() == 1) { + Gardening.onGrowFromSeed(this.worldObj, this.xCoord, this.yCoord, this.zCoord); + if (this.getOwner() != null && this.getFlower() != null) { + BotanyCore.getFlowerRoot().getBreedingTracker(this.getWorldObj(), this.getOwner()).registerBirth(this.getFlower()); + } + } + } + + @Override + public Packet getDescriptionPacket() { + if (this.renderInfo == null && this.getFlower() != null && this.getFlower().getGenome() != null) { + this.renderInfo = new RenderInfo(this.getFlower(), this); + } + return (this.renderInfo != null) ? Botany.instance.getNetworkWrapper().getPacketFrom(new MessageFlowerUpdate(this.xCoord, this.yCoord, this.zCoord, this.renderInfo).GetMessage()) : null; + } + + public void updateRender(final boolean update) { + if (update && this.getFlower() != null && this.getFlower().getGenome() != null) { + final RenderInfo newInfo = new RenderInfo(this.getFlower(), this); + if (this.renderInfo == null || !newInfo.equals(this.renderInfo)) { + this.setRender(newInfo); + } + } + final TileEntity above = this.worldObj.getTileEntity(this.xCoord, this.yCoord + 1, this.zCoord); + if (above instanceof TileEntityFlower) { + ((TileEntityFlower) above).updateRender(true); + } + } + + public int getSection() { + return this.section; + } + + public void setSection(final int i) { + this.section = i; + if (BinnieCore.proxy.isSimulating(this.worldObj)) { + this.updateRender(true); + } + } + + public ItemStack getItemStack() { + if (this.flower == null) { + return null; + } + return Binnie.Genetics.getFlowerRoot().getMemberStack(this.getFlower(), (this.flower.getAge() == 0) ? EnumFlowerStage.SEED.ordinal() : EnumFlowerStage.FLOWER.ordinal()); + } + + private TileEntityFlower getRoot() { + if (this.getSection() == 0) { + return null; + } + final TileEntity tile = this.worldObj.getTileEntity(this.xCoord, this.yCoord - this.getSection(), this.zCoord); + return (tile instanceof TileEntityFlower) ? ((TileEntityFlower) tile) : null; + } + + public void onShear() { + if (this.getRoot() != null) { + this.getRoot().onShear(); + } + if (this.getFlower() != null && this.getFlower().getAge() > 1) { + final Random rand = new Random(); + final IFlower cutting = (IFlower) this.getFlower().copy(); + cutting.setAge(0); + final ItemStack cuttingStack = BotanyCore.getFlowerRoot().getMemberStack(cutting, EnumFlowerStage.SEED.ordinal()); + final float f = 0.7f; + final double d = rand.nextFloat() * f + (1.0f - f) * 0.5; + final double d2 = rand.nextFloat() * f + (1.0f - f) * 0.5; + final double d3 = rand.nextFloat() * f + (1.0f - f) * 0.5; + final EntityItem entityitem = new EntityItem(this.worldObj, this.xCoord + d, this.yCoord + d2, this.zCoord + d3, cuttingStack); + entityitem.delayBeforeCanPickup = 10; + this.worldObj.spawnEntityInWorld(entityitem); + for (int maxAge = this.getFlower().getMaxAge(), i = 0; i < maxAge; ++i) { + if (rand.nextBoolean()) { + this.getFlower().age(); + if (this.checkIfDead(true)) { + return; + } + } + } + } + } + + public boolean checkIfDead(final boolean wasCut) { + if (this.getSection() != 0) { + return this.getRoot().checkIfDead(wasCut); + } + final EnumSoilType soil = Gardening.getSoilType(this.worldObj, this.xCoord, this.yCoord, this.zCoord); + final int maxAge = (int) (this.flower.getMaxAge() * (1.0f + soil.ordinal() * 0.25f)); + if (this.flower.getAge() > maxAge) { + if (!wasCut && this.flower.getMate() != null) { + this.worldObj.setBlockToAir(this.xCoord, this.yCoord, this.zCoord); + final IFlower offspring = this.flower.getOffspring(this.getWorldObj()); + final TileEntity above = this.worldObj.getTileEntity(this.xCoord, this.yCoord + 1, this.zCoord); + if (above instanceof TileEntityFlower) { + this.worldObj.setBlockToAir(this.xCoord, this.yCoord + 1, this.zCoord); + } + Gardening.plant(this.worldObj, this.xCoord, this.yCoord, this.zCoord, offspring, this.getOwner()); + } + else { + this.kill(); + } + return true; + } + return false; + } + + public void kill() { + if (this.flower.getAge() > 0) { + this.worldObj.setBlock(this.xCoord, this.yCoord, this.zCoord, Botany.plant, BlockPlant.Type.DeadFlower.ordinal(), 2); + } + else { + this.worldObj.setBlockToAir(this.xCoord, this.yCoord, this.zCoord); + } + for (int i = 1; this.worldObj.getTileEntity(this.xCoord, this.yCoord + i, this.zCoord) instanceof TileEntityFlower; ++i) { + this.worldObj.setBlockToAir(this.xCoord, this.yCoord + i, this.zCoord); + } + } + + public boolean onBonemeal() { + if (this.getFlower() == null) { + return false; + } + if (!this.isBreeding()) { + return false; + } + if (this.getFlower().isWilted()) { + return false; + } + this.doFlowerAge(); + if (this.getFlower().getAge() > 1 && !this.getFlower().hasFlowered()) { + this.getFlower().setFlowered(true); + } + this.checkIfDead(false); + this.updateRender(true); + return true; + } + + public GameProfile getOwner() { + return this.owner; + } + + public void setOwner(final GameProfile ownerName) { + this.owner = ownerName; + } + + public void spawnButterflies() { + if (!BinnieCore.isLepidopteryActive()) { + return; + } + final int x = this.xCoord; + final int y = this.yCoord; + final int z = this.zCoord; + final World world = this.worldObj; + if (this.getCaterpillar() != null) { + return; + } + if (world.rand.nextFloat() >= this.getFlower().getGenome().getSappiness()) { + return; + } + if (this.worldObj.rand.nextFloat() >= 0.2f) { + return; + } + final IButterfly spawn = Binnie.Genetics.getButterflyRoot().getIndividualTemplates().get(this.worldObj.rand.nextInt(Binnie.Genetics.getButterflyRoot().getIndividualTemplates().size())); + if (this.worldObj.rand.nextFloat() >= spawn.getGenome().getPrimary().getRarity() * 0.5f) { + return; + } + if (this.worldObj.countEntities(EntityButterfly.class) > 100) { + return; + } + if (!spawn.canSpawn(this.worldObj, x, y, z)) { + return; + } + if (world.isAirBlock(x, y + 1, z)) { + this.attemptButterflySpawn(world, spawn, x, y + 1, z); + } + else if (world.isAirBlock(x - 1, y, z)) { + this.attemptButterflySpawn(world, spawn, x - 1, y, z); + } + else if (world.isAirBlock(x + 1, y, z)) { + this.attemptButterflySpawn(world, spawn, x + 1, y, z); + } + else if (world.isAirBlock(x, y, z - 1)) { + this.attemptButterflySpawn(world, spawn, x, y, z - 1); + } + else if (world.isAirBlock(x, y, z + 1)) { + this.attemptButterflySpawn(world, spawn, x, y, z + 1); + } + } + + private void attemptButterflySpawn(final World world, final IButterfly butterfly, final double x, final double y, final double z) { + if (BinnieCore.isLepidopteryActive()) { + Binnie.Genetics.getButterflyRoot().spawnButterflyInWorld(world, butterfly.copy(), x, y + 0.10000000149011612, z); + } + } + + public GameProfile getOwnerName() { + return this.getOwner(); + } + + public World getWorld() { + return this.getWorldObj(); + } + + public int getXCoord() { + return this.xCoord; + } + + public int getYCoord() { + return this.yCoord; + } + + public int getZCoord() { + return this.zCoord; + } + + public int getBiomeId() { + return this.worldObj.getBiomeGenForCoords(this.xCoord, this.zCoord).biomeID; + } + + public EnumTemperature getTemperature() { + return EnumTemperature.getFromValue(this.worldObj.getBiomeGenForCoords(this.xCoord, this.zCoord).temperature); + } + + public EnumHumidity getHumidity() { + return EnumHumidity.getFromValue(this.worldObj.getBiomeGenForCoords(this.xCoord, this.zCoord).rainfall); + } + + public void setErrorState(final int state) { + } + + public int getErrorOrdinal() { + return 0; + } + + public boolean addProduct(final ItemStack product, final boolean all) { + return false; + } + + @Override + public IButterfly getCaterpillar() { + return this.caterpillar; + } + + @Override + public IIndividual getNanny() { + return this.getFlower(); + } + + @Override + public void setCaterpillar(final IButterfly butterfly) { + this.caterpillar = butterfly; + this.matureTime = 0; + } + + @Override + public boolean canNurse(final IButterfly butterfly) { + return this.getFlower() != null && !this.getFlower().isWilted() && this.getFlower().getAge() > 1; + } + + private void matureCaterpillar() { + if (this.getCaterpillar() == null) { + return; + } + ++this.matureTime; + if (this.matureTime >= this.caterpillar.getGenome().getLifespan() / (this.caterpillar.getGenome().getFertility() * 2) && this.caterpillar.canTakeFlight(this.worldObj, this.xCoord, this.yCoord, this.zCoord)) { + if (this.worldObj.isAirBlock(this.xCoord, this.yCoord + 1, this.zCoord)) { + this.attemptButterflySpawn(this.worldObj, this.caterpillar, this.xCoord, this.yCoord + 1, this.zCoord); + } + else if (this.worldObj.isAirBlock(this.xCoord - 1, this.yCoord, this.zCoord)) { + this.attemptButterflySpawn(this.worldObj, this.caterpillar, this.xCoord - 1, this.yCoord, this.zCoord); + } + else if (this.worldObj.isAirBlock(this.xCoord + 1, this.yCoord, this.zCoord)) { + this.attemptButterflySpawn(this.worldObj, this.caterpillar, this.xCoord + 1, this.yCoord, this.zCoord); + } + else if (this.worldObj.isAirBlock(this.xCoord, this.yCoord, this.zCoord - 1)) { + this.attemptButterflySpawn(this.worldObj, this.caterpillar, this.xCoord, this.yCoord, this.zCoord - 1); + } + else if (this.worldObj.isAirBlock(this.xCoord, this.yCoord, this.zCoord + 1)) { + this.attemptButterflySpawn(this.worldObj, this.caterpillar, this.xCoord, this.yCoord, this.zCoord + 1); + } + this.setCaterpillar(null); + } + } + + public void setRender(final RenderInfo render) { + this.renderInfo = render; + this.section = this.renderInfo.section; + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); + } + + public int getAge() { + return (this.renderInfo == null) ? 1 : this.renderInfo.age; + } + + public int getRenderSection() { + return (this.renderInfo == null) ? 1 : this.renderInfo.section; + } + + public boolean isWilted() { + return this.renderInfo != null && this.renderInfo.wilted; + } + + public boolean isFlowered() { + return this.renderInfo == null || this.renderInfo.flowered; + } + + public int getPrimaryColour() { + return (this.renderInfo == null) ? EnumFlowerColor.Red.getColor(false) : this.renderInfo.primary.getColor(this.isWilted()); + } + + public int getSecondaryColour() { + return (this.renderInfo == null) ? EnumFlowerColor.Red.getColor(false) : this.renderInfo.secondary.getColor(this.isWilted()); + } + + public int getStemColour() { + return (this.renderInfo == null) ? EnumFlowerColor.Green.getColor(false) : this.renderInfo.stem.getColor(this.isWilted()); + } + + public IFlowerType getType() { + return (this.renderInfo == null) ? EnumFlowerType.Poppy : this.renderInfo.type; + } + + public BiomeGenBase getBiome() { + return this.getWorld().getBiomeGenForCoords(this.xCoord, this.zCoord); + } + + public void setErrorState(final IErrorState state) { + } + + public IErrorState getErrorState() { + return null; + } + + public boolean setErrorCondition(final boolean condition, final IErrorState errorState) { + return false; + } + + public Set getErrorStates() { + return new HashSet(); + } + + public static class RenderInfo + { + public IFlowerColour primary; + public IFlowerColour secondary; + public IFlowerColour stem; + public IFlowerType type; + public byte age; + public boolean wilted; + public boolean flowered; + public byte section; + + @Override + public boolean equals(final Object obj) { + if (obj instanceof RenderInfo) { + final RenderInfo o = (RenderInfo) obj; + return o.age == this.age && o.wilted == this.wilted && o.flowered == this.flowered && o.primary == this.primary && o.secondary == this.secondary && o.stem == this.stem && o.type == this.type; + } + return super.equals(obj); + } + + public RenderInfo() { + } + + public RenderInfo(final IFlower flower, final TileEntityFlower tile) { + this.section = (byte) tile.getSection(); + this.primary = flower.getGenome().getPrimaryColor(); + this.secondary = flower.getGenome().getSecondaryColor(); + this.stem = flower.getGenome().getStemColor(); + this.age = (byte) flower.getAge(); + this.wilted = flower.isWilted(); + this.flowered = flower.hasFlowered(); + this.type = flower.getGenome().getType(); + } + } + + @Override + public ChunkCoordinates getCoordinates() { + return new ChunkCoordinates(xCoord, yCoord, zCoord); + } + + // TODO ?? + @Override + public boolean isPollinated() { + return isBreeding(); + } + +} diff --git a/src/main/java/binnie/botany/gardening/BlockPlant.java b/src/main/java/binnie/botany/gardening/BlockPlant.java new file mode 100644 index 00000000..d220ee7b --- /dev/null +++ b/src/main/java/binnie/botany/gardening/BlockPlant.java @@ -0,0 +1,156 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.gardening; + +import net.minecraft.world.IBlockAccess; +import binnie.botany.api.EnumSoilType; +import binnie.botany.api.gardening.IBlockSoil; +import java.util.Random; +import java.util.List; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.util.IIcon; +import net.minecraft.block.Block; +import binnie.botany.CreativeTabBotany; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.botany.Botany; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import java.util.ArrayList; +import net.minecraft.world.World; +import net.minecraft.block.BlockBush; + +public class BlockPlant extends BlockBush +{ + @Override + public ArrayList getDrops(final World world, final int x, final int y, final int z, final int metadata, final int fortune) { + return new ArrayList(); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister p_149651_1_) { + for (final Type t : Type.values()) { + t.icon = Botany.proxy.getIcon(p_149651_1_, t.name().toLowerCase()); + } + } + + public BlockPlant() { + this.setBlockName("plant"); + this.setCreativeTab(CreativeTabBotany.instance); + this.setTickRandomly(true); + } + + @Override + protected boolean canPlaceBlockOn(final Block p_149854_1_) { + return super.canPlaceBlockOn(p_149854_1_) || Gardening.isSoil(p_149854_1_); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final int side, final int meta) { + return Type.values()[meta % Type.values().length].icon; + } + + @Override + public int damageDropped(final int p_149692_1_) { + return p_149692_1_; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(final Item p_149666_1_, final CreativeTabs p_149666_2_, final List p_149666_3_) { + for (final Type type : Type.values()) { + p_149666_3_.add(type.get()); + } + } + + @Override + public void updateTick(final World world, final int x, final int y, final int z, final Random random) { + final Type type = Type.get(world.getBlockMetadata(x, y, z)); + if (random.nextInt(4) == 0) { + if (type == Type.Weeds) { + world.setBlockMetadataWithNotify(x, y, z, Type.WeedsLong.ordinal(), 2); + } + else if (type == Type.WeedsLong) { + world.setBlockMetadataWithNotify(x, y, z, Type.WeedsVeryLong.ordinal(), 2); + } + else if (type == Type.DeadFlower) { + world.setBlockMetadataWithNotify(x, y, z, Type.DecayingFlower.ordinal(), 2); + } + else if (type == Type.DecayingFlower) { + world.setBlockToAir(x, y, z); + return; + } + } + if (random.nextInt(6) == 0) { + if (type == Type.Weeds) { + world.setBlockToAir(x, y, z); + } + else if (type == Type.WeedsLong) { + world.setBlockMetadataWithNotify(x, y, z, Type.Weeds.ordinal(), 2); + } + else if (type == Type.WeedsVeryLong) { + world.setBlockMetadataWithNotify(x, y, z, Type.WeedsLong.ordinal(), 2); + } + } + final Block below = world.getBlock(x, y - 1, z); + if (Gardening.isSoil(below)) { + final IBlockSoil soil = (IBlockSoil) below; + if (random.nextInt(3) == 0) { + if (type == Type.Weeds || type == Type.WeedsLong || type == Type.WeedsVeryLong) { + if (!soil.degrade(world, x, y - 1, z, EnumSoilType.LOAM)) { + soil.degrade(world, x, y - 1, z, EnumSoilType.SOIL); + } + } + else if (type == Type.DecayingFlower && !soil.fertilise(world, x, y - 1, z, EnumSoilType.LOAM)) { + soil.fertilise(world, x, y - 1, z, EnumSoilType.FLOWERBED); + } + } + } + } + + @Override + public boolean isReplaceable(final IBlockAccess world, final int x, final int y, final int z) { + return true; + } + + public static boolean isWeed(final IBlockAccess world, final int x, final int y, final int z) { + if (!(world.getBlock(x, y, z) instanceof BlockPlant)) { + return false; + } + final Type type = Type.get(world.getBlockMetadata(x, y, z)); + return type == Type.Weeds || type == Type.WeedsLong || type == Type.WeedsVeryLong; + } + + public enum Type + { + Weeds("Weeds"), + WeedsLong("Long Weeds"), + WeedsVeryLong("Very Long Weeds"), + DeadFlower("Dead Flower"), + DecayingFlower("Decaying Flower"); + + public IIcon icon; + String name; + + private Type(final String name) { + this.name = name; + } + + public ItemStack get() { + return new ItemStack(Botany.plant, 1, this.ordinal()); + } + + public static Type get(final int id) { + return values()[id % values().length]; + } + + public String getName() { + return this.name; + } + } +} diff --git a/src/main/java/binnie/botany/gardening/BlockSoil.java b/src/main/java/binnie/botany/gardening/BlockSoil.java new file mode 100644 index 00000000..b461ca5e --- /dev/null +++ b/src/main/java/binnie/botany/gardening/BlockSoil.java @@ -0,0 +1,220 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.gardening; + +import net.minecraftforge.common.IPlantable; +import binnie.Binnie; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraft.util.AxisAlignedBB; +import java.util.Random; +import net.minecraft.world.World; +import binnie.botany.CreativeTabBotany; +import net.minecraft.block.material.Material; +import binnie.botany.Botany; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.init.Blocks; +import binnie.botany.api.EnumAcidity; +import binnie.botany.api.EnumMoisture; +import net.minecraft.world.IBlockAccess; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.item.ItemStack; +import java.util.List; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import binnie.botany.api.EnumSoilType; +import net.minecraft.util.IIcon; +import binnie.botany.api.gardening.IBlockSoil; +import net.minecraft.block.Block; + +public class BlockSoil extends Block implements IBlockSoil +{ + boolean weedKilled; + IIcon[] iconsTop; + IIcon[] iconsSide; + IIcon[] iconsNoWeed; + EnumSoilType type; + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(final Item par1, final CreativeTabs par2CreativeTabs, final List par3List) { + for (int i = 0; i < 9; ++i) { + par3List.add(new ItemStack(this, 1, i)); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final IBlockAccess world, final int x, final int y, final int z, final int side) { + return this.getIcon(side, world.getBlockMetadata(x, y, z)); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final int side, int meta) { + meta = ((meta >= 9) ? 8 : meta); + final EnumMoisture moisture = EnumMoisture.values()[meta % 3]; + final EnumAcidity acidity = EnumAcidity.values()[meta / 3]; + return (side == 1) ? (this.weedKilled ? this.iconsNoWeed[meta] : this.iconsTop[meta]) : ((side == 0) ? Blocks.dirt.getIcon(side, 0) : this.iconsSide[meta]); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister register) { + for (final EnumMoisture moisture : EnumMoisture.values()) { + for (final EnumAcidity pH : EnumAcidity.values()) { + this.iconsTop[moisture.ordinal() + pH.ordinal() * 3] = Botany.proxy.getIcon(register, "soil/" + this.getType().getID() + "." + pH.getID() + "." + moisture.getID() + ".0"); + this.iconsSide[moisture.ordinal() + pH.ordinal() * 3] = Botany.proxy.getIcon(register, "soil/" + this.getType().getID() + "." + pH.getID() + "." + moisture.getID() + ".1"); + this.iconsNoWeed[moisture.ordinal() + pH.ordinal() * 3] = Botany.proxy.getIcon(register, "soil/" + this.getType().getID() + "." + pH.getID() + "." + moisture.getID() + ".2"); + } + } + } + + public EnumSoilType getType() { + return this.type; + } + + public BlockSoil(final EnumSoilType type, final String blockName, final boolean weedKilled) { + super(Material.ground); + this.weedKilled = false; + this.iconsTop = new IIcon[9]; + this.iconsSide = new IIcon[9]; + this.iconsNoWeed = new IIcon[9]; + this.weedKilled = weedKilled; + this.setCreativeTab(CreativeTabBotany.instance); + this.setBlockName(blockName); + this.setTickRandomly(true); + this.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 0.9375f, 1.0f); + this.setLightOpacity(255); + this.setHardness(0.5f); + this.setStepSound(Block.soundTypeGravel); + this.type = type; + } + + @Override + public int damageDropped(final int p_149692_1_) { + return p_149692_1_; + } + + @Override + public void updateTick(final World world, final int x, final int y, final int z, final Random random) { + final int meta = world.getBlockMetadata(x, y, z); + EnumMoisture moisture = EnumMoisture.values()[meta % 3]; + final EnumAcidity acidity = EnumAcidity.values()[meta / 3]; + final EnumMoisture desiredMoisture = Gardening.getNaturalMoisture(world, x, y, z); + if (desiredMoisture.ordinal() > moisture.ordinal()) { + moisture = ((moisture == EnumMoisture.Dry) ? EnumMoisture.Normal : EnumMoisture.Damp); + } + if (desiredMoisture.ordinal() < moisture.ordinal()) { + moisture = ((moisture == EnumMoisture.Damp) ? EnumMoisture.Normal : EnumMoisture.Dry); + } + final int meta2 = getMeta(acidity, moisture); + if (meta != meta2) { + world.setBlockMetadataWithNotify(x, y, z, meta2, 2); + } + if (!this.weedKilled && random.nextInt(5 - this.getType(world, x, y, z).ordinal()) == 0 && world.getBlock(x, y + 1, z) == Blocks.air) { + world.setBlock(x, y + 1, z, Botany.plant, BlockPlant.Type.Weeds.ordinal(), 2); + } + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(final World p_149668_1_, final int p_149668_2_, final int p_149668_3_, final int p_149668_4_) { + return AxisAlignedBB.getBoundingBox(p_149668_2_ + 0, p_149668_3_ + 0, p_149668_4_ + 0, p_149668_2_ + 1, p_149668_3_ + 1, p_149668_4_ + 1); + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public EnumAcidity getPH(final World world, final int x, final int y, final int z) { + return EnumAcidity.values()[world.getBlockMetadata(x, y, z) / 3]; + } + + @Override + public EnumMoisture getMoisture(final World world, final int x, final int y, final int z) { + return EnumMoisture.values()[world.getBlockMetadata(x, y, z) % 3]; + } + + @Override + public EnumSoilType getType(final World world, final int x, final int y, final int z) { + return this.type; + } + + @Override + public boolean fertilise(final World world, final int x, final int y, final int z, final EnumSoilType maxLevel) { + final EnumSoilType type = this.getType(world, x, y, z); + if (type.ordinal() >= maxLevel.ordinal()) { + return false; + } + final int meta = world.getBlockMetadata(x, y, z); + return world.setBlock(x, y, z, Gardening.getSoilBlock(maxLevel, this.weedKilled), meta, 2); + } + + @Override + public boolean degrade(final World world, final int x, final int y, final int z, final EnumSoilType minLevel) { + final EnumSoilType type = this.getType(world, x, y, z); + if (type.ordinal() <= minLevel.ordinal()) { + return false; + } + final int meta = world.getBlockMetadata(x, y, z); + return world.setBlock(x, y, z, Gardening.getSoilBlock(minLevel, this.weedKilled), meta, 2); + } + + @Override + public boolean setPH(final World world, final int x, final int y, final int z, final EnumAcidity pH) { + final int meta = getMeta(pH, this.getMoisture(world, x, y, z)); + return world.setBlockMetadataWithNotify(x, y, z, meta, 2); + } + + @Override + public boolean setMoisture(final World world, final int x, final int y, final int z, final EnumMoisture moisture) { + final int meta = getMeta(this.getPH(world, x, y, z), moisture); + return world.setBlockMetadataWithNotify(x, y, z, meta, 2); + } + + public static int getMeta(final EnumAcidity acid, final EnumMoisture moisture) { + return acid.ordinal() * 3 + moisture.ordinal(); + } + + @Override + public void onNeighborBlockChange(final World world, final int x, final int y, final int z, final Block p_149695_5_) { + super.onNeighborBlockChange(world, x, y, z, p_149695_5_); + if (world.isSideSolid(x, y + 1, z, ForgeDirection.DOWN, false)) { + world.setBlock(x, y, z, Blocks.dirt, 0, 2); + } + } + + public static String getPH(final ItemStack stack) { + return Binnie.Language.localise(EnumAcidity.values()[stack.getItemDamage() / 3]); + } + + public static String getMoisture(final ItemStack stack) { + return Binnie.Language.localise(EnumMoisture.values()[stack.getItemDamage() % 3]); + } + + @Override + public boolean canSustainPlant(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection direction, final IPlantable plantable) { + final Block plant = plantable.getPlant(world, x, y + 1, z); + if (plant == Botany.flower) { + return true; + } + if (plant == Botany.plant) { + return !this.weedKilled || !BlockPlant.isWeed(world, x, y, z); + } + return world instanceof World && Blocks.dirt.canSustainPlant(world, x, y, z, direction, plantable); + } + + @Override + public boolean resistsWeeds(final World world, final int x, final int y, final int z) { + return this.weedKilled; + } +} diff --git a/src/main/java/binnie/botany/gardening/Gardening.java b/src/main/java/binnie/botany/gardening/Gardening.java new file mode 100644 index 00000000..8fa58a84 --- /dev/null +++ b/src/main/java/binnie/botany/gardening/Gardening.java @@ -0,0 +1,264 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.gardening; + +import java.util.LinkedHashMap; +import net.minecraft.world.IBlockAccess; +import binnie.botany.items.BotanyItems; +import forestry.api.core.EnumTemperature; +import java.util.Collection; +import binnie.core.BinnieCore; +import net.minecraft.tileentity.TileEntity; +import binnie.botany.flower.TileEntityFlower; +import binnie.botany.Botany; +import com.mojang.authlib.GameProfile; +import binnie.botany.api.IFlower; +import binnie.botany.api.EnumSoilType; +import net.minecraft.world.biome.BiomeGenBase; +import binnie.botany.api.EnumAcidity; +import net.minecraft.init.Blocks; +import binnie.botany.api.EnumMoisture; +import net.minecraft.world.World; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.Item; +import binnie.botany.api.gardening.IBlockSoil; +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import java.util.Map; + +public class Gardening +{ + public static Map fertiliserAcid; + public static Map fertiliserAlkaline; + public static Map fertiliserNutrient; + + public static boolean isSoil(final Block block) { + return block instanceof IBlockSoil; + } + + public static boolean isSoil(final Item item) { + return item instanceof ItemBlock && isSoil(((ItemBlock) item).field_150939_a); + } + + public static boolean isSoil(final ItemStack item) { + return isSoil(item.getItem()); + } + + public static EnumMoisture getNaturalMoisture(final World world, final int x, final int y, final int z) { + float bias = getBiomeMoisture(world.getBiomeGenForCoords(x, z), y); + for (int dx = -1; dx < 2; ++dx) { + for (int dz = -1; dz < 2; ++dz) { + if (dx != 0 || dz != 0) { + if (world.getBlock(x + dx, y, z + dz) == Blocks.sand) { + bias -= 1.5; + } + else if (world.getBlock(x + dx, y, z + dz) == Blocks.water) { + bias += 1.5; + } + } + } + } + if (world.isRaining() && world.canBlockSeeTheSky(x, y + 1, z) && world.getPrecipitationHeight(x, z) <= y + 1) { + bias += 1.5; + } + for (int dx = -1; dx < 2; ++dx) { + for (int dz = -1; dz < 2; ++dz) { + if (dx != 0 || dz != 0) { + if (world.getBlock(x + dx, y, z + dz) == Blocks.gravel && bias > 0.0f) { + bias *= 0.4f; + } + } + } + } + return (bias <= -1.0f) ? EnumMoisture.Dry : ((bias >= 1.0f) ? EnumMoisture.Damp : EnumMoisture.Normal); + } + + public static EnumAcidity getNaturalPH(final World world, final int x, final int y, final int z) { + final float bias = getBiomePH(world.getBiomeGenForCoords(x, z), y); + return (bias <= -1.0f) ? EnumAcidity.Acid : ((bias >= 1.0f) ? EnumAcidity.Alkaline : EnumAcidity.Neutral); + } + + public static float getBiomeMoisture(final BiomeGenBase biome, final int H) { + final double R = biome.rainfall; + final double T = biome.temperature; + final double m = 3.2 * (R - 0.5) - 0.4 * (1.0 + T + 0.5 * T * T) + 1.1 - 1.6 * (T - 0.9) * (T - 0.9) - 0.002 * (H - 64); + return (float) ((m == 0.0) ? m : ((m < 0.0) ? (-Math.sqrt(m * m)) : Math.sqrt(m * m))); + } + + public static float getBiomePH(final BiomeGenBase biome, final int H) { + final double R = biome.rainfall; + final double T = biome.temperature; + return (float) (-3.0 * (R - 0.5) + 0.5 * (T - 0.699999988079071) * (T - 0.699999988079071) + 0.02f * (H - 64) - 0.15000000596046448); + } + + public static void createSoil(final World world, final int x, final int y, final int z, final EnumSoilType soil, final EnumMoisture moisture, final EnumAcidity acidity) { + final int meta = moisture.ordinal() + acidity.ordinal() * 3; + world.setBlock(x, y, z, getSoilBlock(soil), meta, 2); + } + + public static boolean plant(final World world, final int x, final int y, final int z, final IFlower flower, final GameProfile owner) { + final boolean set = world.setBlock(x, y, z, Botany.flower, 0, 2); + if (!set) { + return false; + } + final TileEntity tileFlower = world.getTileEntity(x, y, z); + final TileEntity below = world.getTileEntity(x, y - 1, z); + if (tileFlower != null && tileFlower instanceof TileEntityFlower) { + if (below instanceof TileEntityFlower) { + ((TileEntityFlower) tileFlower).setSection(((TileEntityFlower) below).getSection()); + } + else { + ((TileEntityFlower) tileFlower).create(flower, owner); + } + } + tryGrowSection(world, x, y, z); + return true; + } + + public static void tryGrowSection(final World world, final int x, final int y, final int z) { + if (!BinnieCore.proxy.isSimulating(world)) { + return; + } + final TileEntity flower = world.getTileEntity(x, y, z); + if (flower != null && flower instanceof TileEntityFlower) { + final IFlower iflower = ((TileEntityFlower) flower).getFlower(); + final int section = ((TileEntityFlower) flower).getSection(); + if (iflower != null && section < iflower.getGenome().getPrimary().getType().getSections() - 1 && iflower.getAge() > 0) { + world.setBlock(x, y + 1, z, Botany.flower, 0, 2); + final TileEntity tileFlower = world.getTileEntity(x, y + 1, z); + if (tileFlower != null && tileFlower instanceof TileEntityFlower) { + ((TileEntityFlower) tileFlower).setSection(section + 1); + } + } + } + } + + public static void onGrowFromSeed(final World world, final int x, final int y, final int z) { + tryGrowSection(world, x, y, z); + } + + public static Collection getAcidFertilisers() { + return Gardening.fertiliserAcid.keySet(); + } + + public static Collection getAlkalineFertilisers() { + return Gardening.fertiliserAlkaline.keySet(); + } + + public static Collection getNutrientFertilisers() { + return Gardening.fertiliserNutrient.keySet(); + } + + public static boolean isAcidFertiliser(final ItemStack itemstack) { + for (final ItemStack stack : getAcidFertilisers()) { + if (stack != null && stack.isItemEqual(itemstack)) { + return true; + } + } + return false; + } + + public static boolean isAlkalineFertiliser(final ItemStack itemstack) { + for (final ItemStack stack : getAlkalineFertilisers()) { + if (stack != null && stack.isItemEqual(itemstack)) { + return true; + } + } + return false; + } + + public static boolean isNutrientFertiliser(final ItemStack itemstack) { + for (final ItemStack stack : getNutrientFertilisers()) { + if (stack != null && stack.isItemEqual(itemstack)) { + return true; + } + } + return false; + } + + public static int getFertiliserStrength(final ItemStack stack) { + if (stack == null) { + return 1; + } + for (final Map.Entry entry : Gardening.fertiliserAcid.entrySet()) { + if (entry.getKey().isItemEqual(stack)) { + return entry.getValue(); + } + } + for (final Map.Entry entry : Gardening.fertiliserAlkaline.entrySet()) { + if (entry.getKey().isItemEqual(stack)) { + return entry.getValue(); + } + } + for (final Map.Entry entry : Gardening.fertiliserNutrient.entrySet()) { + if (entry.getKey().isItemEqual(stack)) { + return entry.getValue(); + } + } + return 1; + } + + public static boolean canTolerate(final IFlower flower, final World world, final int x, final int y, final int z) { + if (flower == null || flower.getGenome() == null) { + return false; + } + final Block soil = world.getBlock(x, y - 1, z); + final int soilMeta = world.getBlockMetadata(x, y - 1, z); + final BiomeGenBase biome = world.getBiomeGenForCoords(x, z); + return canTolerate(flower, EnumAcidity.values()[soilMeta / 3 % 3], EnumMoisture.values()[soilMeta % 3], EnumTemperature.getFromValue(biome.temperature)); + } + + public static EnumSoilType getSoilType(final World world, final int x, final int y, final int z) { + if (world.getBlock(x, y, z) instanceof IBlockSoil) { + return ((IBlockSoil) world.getBlock(x, y, z)).getType(world, x, y, z); + } + return EnumSoilType.SOIL; + } + + public static Block getSoilBlock(final EnumSoilType type) { + return getSoilBlock(type, false); + } + + public static Block getSoilBlock(final EnumSoilType type, final boolean weedkill) { + switch (type) { + case FLOWERBED: { + return weedkill ? Botany.flowerbedNoWeed : Botany.flowerbed; + } + case LOAM: { + return weedkill ? Botany.loamNoWeed : Botany.loam; + } + default: { + return weedkill ? Botany.soilNoWeed : Botany.soil; + } + } + } + + public static boolean canTolerate(final IFlower flower, final EnumAcidity ePH, final EnumMoisture eMoisture, final EnumTemperature eTemp) { + return flower.getGenome().canTolerate(ePH) && flower.getGenome().canTolerate(eMoisture) && flower.getGenome().canTolerate(eTemp); + } + + public static boolean isWeedkiller(final ItemStack heldItem) { + return heldItem != null && heldItem.isItemEqual(BotanyItems.Weedkiller.get(1)); + } + + public static boolean addWeedKiller(final World world, final int x, final int y, final int z) { + if (!(world.getBlock(x, y, z) instanceof IBlockSoil)) { + return false; + } + final EnumSoilType type = getSoilType(world, x, y, z); + final Block block = getSoilBlock(type, true); + final boolean done = world.setBlock(x, y, z, block, world.getBlockMetadata(x, y, z), 2); + if (done && BlockPlant.isWeed(world, x, y + 1, z)) { + world.setBlockToAir(x, y + 1, z); + } + return done; + } + + static { + Gardening.fertiliserAcid = new LinkedHashMap(); + Gardening.fertiliserAlkaline = new LinkedHashMap(); + Gardening.fertiliserNutrient = new LinkedHashMap(); + } +} diff --git a/src/main/java/binnie/botany/gardening/ItemSoil.java b/src/main/java/binnie/botany/gardening/ItemSoil.java new file mode 100644 index 00000000..77ea06b0 --- /dev/null +++ b/src/main/java/binnie/botany/gardening/ItemSoil.java @@ -0,0 +1,72 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.gardening; + +import net.minecraft.block.Block; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.botany.api.EnumAcidity; +import binnie.botany.api.EnumMoisture; +import java.util.List; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import binnie.botany.api.EnumSoilType; +import net.minecraft.item.ItemBlock; + +public class ItemSoil extends ItemBlock +{ + EnumSoilType type; + private boolean noWeed; + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(final ItemStack stack, final EntityPlayer p_77624_2_, final List p_77624_3_, final boolean p_77624_4_) { + super.addInformation(stack, p_77624_2_, p_77624_3_, p_77624_4_); + final EnumMoisture moisture = EnumMoisture.values()[stack.getItemDamage() % 3]; + final EnumAcidity acidity = EnumAcidity.values()[stack.getItemDamage() / 3]; + String info = ""; + if (moisture == EnumMoisture.Dry) { + info += "§eDry§f"; + } + if (moisture == EnumMoisture.Damp) { + info += "§9Damp§f"; + } + if (acidity == EnumAcidity.Acid) { + if (info.length() > 0) { + info += ", "; + } + info += "§cAcidic§f"; + } + if (acidity == EnumAcidity.Alkaline) { + if (info.length() > 0) { + info += ", "; + } + info += "§bAlkaline§f"; + } + if (info.length() > 0) { + p_77624_3_.add(info); + } + if (this.noWeed) { + p_77624_3_.add("Weedkiller"); + } + } + + public ItemSoil(final Block p_i45328_1_) { + super(p_i45328_1_); + this.type = ((BlockSoil) this.field_150939_a).getType(); + this.noWeed = ((BlockSoil) this.field_150939_a).weedKilled; + this.hasSubtypes = true; + } + + @Override + public String getItemStackDisplayName(final ItemStack stack) { + return this.type.name().substring(0, 1) + this.type.name().toLowerCase().substring(1); + } + + @Override + public int getMetadata(final int p_77647_1_) { + return p_77647_1_; + } +} diff --git a/src/main/java/binnie/botany/gardening/ItemSoilMeter.java b/src/main/java/binnie/botany/gardening/ItemSoilMeter.java new file mode 100644 index 00000000..a6f6a044 --- /dev/null +++ b/src/main/java/binnie/botany/gardening/ItemSoilMeter.java @@ -0,0 +1,68 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.gardening; + +import binnie.botany.CreativeTabBotany; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.botany.Botany; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IChatComponent; +import binnie.botany.api.EnumAcidity; +import binnie.botany.api.EnumMoisture; +import binnie.botany.api.EnumSoilType; +import net.minecraft.block.Block; +import net.minecraft.util.ChatComponentText; +import binnie.Binnie; +import binnie.botany.api.gardening.IBlockSoil; +import binnie.core.BinnieCore; +import net.minecraft.world.World; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Item; + +public class ItemSoilMeter extends Item +{ + @Override + public boolean onItemUse(final ItemStack stack, final EntityPlayer player, final World world, final int x, int y, final int z, final int p_77648_7_, final float p_77648_8_, final float p_77648_9_, final float p_77648_10_) { + Block block = world.getBlock(x, y, z); + if (!Gardening.isSoil(block)) { + --y; + block = world.getBlock(x, y, z); + } + if (Gardening.isSoil(block) && !BinnieCore.proxy.isSimulating(world)) { + final IBlockSoil soil = (IBlockSoil) block; + final EnumSoilType type = soil.getType(world, x, y, z); + final EnumMoisture moisture = soil.getMoisture(world, x, y, z); + final EnumAcidity pH = soil.getPH(world, x, y, z); + String info = "Type: "; + info = info + "§" + (new char[] { '8', '6', 'd' })[type.ordinal()] + Binnie.Language.localise(type) + "§f"; + info += ", Moisture: "; + info = info + "§" + (new char[] { 'e', '7', '9' })[moisture.ordinal()] + Binnie.Language.localise(moisture) + "§f"; + info += ", pH: "; + info = info + "§" + (new char[] { 'c', 'a', 'b' })[pH.ordinal()] + Binnie.Language.localise(pH) + "§f"; + final IChatComponent chat = new ChatComponentText(info); + player.addChatMessage(chat); + } + return super.onItemUse(stack, player, world, x, y, z, p_77648_7_, p_77648_8_, p_77648_9_, p_77648_10_); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.itemIcon = Botany.proxy.getIcon(register, "soilMeter"); + } + + public ItemSoilMeter() { + this.setCreativeTab(CreativeTabBotany.instance); + this.setUnlocalizedName("soilMeter"); + this.setMaxStackSize(1); + } + + @Override + public String getItemStackDisplayName(final ItemStack i) { + return "Soil Meter"; + } +} diff --git a/src/main/java/binnie/botany/gardening/ItemTrowel.java b/src/main/java/binnie/botany/gardening/ItemTrowel.java new file mode 100644 index 00000000..708bde74 --- /dev/null +++ b/src/main/java/binnie/botany/gardening/ItemTrowel.java @@ -0,0 +1,74 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.gardening; + +import binnie.botany.api.EnumAcidity; +import binnie.botany.api.EnumMoisture; +import net.minecraft.block.Block; +import net.minecraft.entity.EntityLivingBase; +import binnie.botany.api.EnumSoilType; +import net.minecraft.init.Blocks; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.botany.Botany; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.botany.CreativeTabBotany; +import net.minecraft.item.Item; + +public class ItemTrowel extends Item +{ + protected Item.ToolMaterial theToolMaterial; + String locName; + + public ItemTrowel(final Item.ToolMaterial p_i45343_1_, final String material) { + this.theToolMaterial = p_i45343_1_; + this.maxStackSize = 1; + this.setMaxDamage(p_i45343_1_.getMaxUses()); + this.setCreativeTab(CreativeTabBotany.instance); + this.setUnlocalizedName("trowel" + material); + this.locName = "trowel" + material; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister p_94581_1_) { + this.itemIcon = Botany.proxy.getIcon(p_94581_1_, "tools/" + this.locName); + } + + @Override + public boolean onItemUse(final ItemStack stack, final EntityPlayer player, final World world, final int x, final int y, final int z, final int p_77648_7_, final float p_77648_8_, final float p_77648_9_, final float p_77648_10_) { + if (!player.canPlayerEdit(x, y, z, p_77648_7_, stack)) { + return false; + } + final Block block = world.getBlock(x, y, z); + if (p_77648_7_ == 0 || (!world.getBlock(x, y + 1, z).isAir(world, x, y + 1, z) && world.getBlock(x, y + 1, z) != Botany.flower) || (block != Blocks.grass && block != Blocks.dirt)) { + return false; + } + final Block block2 = Botany.soil; + world.playSoundEffect(x + 0.5f, y + 0.5f, z + 0.5f, block2.stepSound.getStepResourcePath(), (block2.stepSound.getVolume() + 1.0f) / 2.0f, block2.stepSound.getPitch() * 0.8f); + if (world.isRemote) { + return true; + } + final EnumMoisture moisture = Gardening.getNaturalMoisture(world, x, y, z); + final EnumAcidity acidity = Gardening.getNaturalPH(world, x, y, z); + Gardening.createSoil(world, x, y, z, EnumSoilType.SOIL, moisture, acidity); + stack.damageItem(1, player); + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean isFull3D() { + return true; + } + + public String getToolMaterialName() { + return this.theToolMaterial.toString(); + } +} diff --git a/src/main/java/binnie/botany/gardening/ItemWeed.java b/src/main/java/binnie/botany/gardening/ItemWeed.java new file mode 100644 index 00000000..11dfe439 --- /dev/null +++ b/src/main/java/binnie/botany/gardening/ItemWeed.java @@ -0,0 +1,37 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.gardening; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.IIcon; +import net.minecraft.item.ItemStack; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; + +public class ItemWeed extends ItemBlock +{ + public ItemWeed(final Block p_i45328_1_) { + super(p_i45328_1_); + this.setHasSubtypes(true); + this.hasSubtypes = true; + } + + @Override + public String getItemStackDisplayName(final ItemStack stack) { + return BlockPlant.Type.values()[stack.getItemDamage()].getName(); + } + + @Override + public int getMetadata(final int p_77647_1_) { + return p_77647_1_; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(final int p_77617_1_) { + return this.field_150939_a.getIcon(2, p_77617_1_); + } +} diff --git a/src/main/java/binnie/botany/gardening/ModuleGardening.java b/src/main/java/binnie/botany/gardening/ModuleGardening.java new file mode 100644 index 00000000..399b220b --- /dev/null +++ b/src/main/java/binnie/botany/gardening/ModuleGardening.java @@ -0,0 +1,274 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.gardening; + +import binnie.core.block.TileEntityMetadata; +import java.util.Map; +import binnie.botany.genetics.EnumFlowerColor; +import net.minecraftforge.oredict.ShapelessOreRecipe; +import net.minecraft.init.Items; +import net.minecraftforge.oredict.ShapedOreRecipe; +import binnie.core.Mods; +import net.minecraft.item.crafting.IRecipe; +import binnie.botany.api.EnumAcidity; +import binnie.botany.farm.CircuitGarden; +import binnie.botany.api.EnumMoisture; +import net.minecraft.init.Blocks; +import binnie.botany.ceramic.PigmentRecipe; +import net.minecraftforge.oredict.RecipeSorter; +import binnie.botany.ceramic.CeramicTileRecipe; +import binnie.core.block.MultipassItemRenderer; +import binnie.botany.ceramic.BlockCeramicBrick; +import binnie.botany.ceramic.BlockCeramicPatterned; +import net.minecraftforge.client.IItemRenderer; +import binnie.core.block.ItemMetadataRenderer; +import binnie.core.BinnieCore; +import binnie.core.block.ItemMetadata; +import binnie.botany.ceramic.BlockStained; +import binnie.botany.ceramic.BlockCeramic; +import net.minecraftforge.oredict.OreDictionary; +import binnie.botany.items.ItemClay; +import binnie.botany.items.ItemPigment; +import binnie.botany.CreativeTabBotany; +import binnie.botany.items.BotanyItems; +import binnie.Binnie; +import net.minecraft.item.Item; +import binnie.botany.flower.ItemInsulatedTube; +import net.minecraft.block.Block; +import cpw.mods.fml.common.registry.GameRegistry; +import binnie.botany.Botany; +import binnie.botany.api.EnumSoilType; +import net.minecraft.item.ItemStack; +import java.util.HashMap; +import binnie.core.IInitializable; + +public class ModuleGardening implements IInitializable +{ + public static HashMap queuedAcidFertilisers; + public static HashMap queuedAlkalineFertilisers; + public static HashMap queuedNutrientFertilisers; + + @Override + public void preInit() { + Botany.soil = new BlockSoil(EnumSoilType.SOIL, "soil", false); + Botany.loam = new BlockSoil(EnumSoilType.LOAM, "loam", false); + Botany.flowerbed = new BlockSoil(EnumSoilType.FLOWERBED, "flowerbed", false); + Botany.soilNoWeed = new BlockSoil(EnumSoilType.SOIL, "soilNoWeed", true); + Botany.loamNoWeed = new BlockSoil(EnumSoilType.LOAM, "loamNoWeed", true); + Botany.flowerbedNoWeed = new BlockSoil(EnumSoilType.FLOWERBED, "flowerbedNoWeed", true); + GameRegistry.registerBlock(Botany.plant = new BlockPlant(), ItemWeed.class, "plant"); + GameRegistry.registerBlock(Botany.soil, ItemSoil.class, "soil"); + GameRegistry.registerBlock(Botany.loam, ItemSoil.class, "loam"); + GameRegistry.registerBlock(Botany.flowerbed, ItemSoil.class, "flowerbed"); + GameRegistry.registerBlock(Botany.soilNoWeed, ItemSoil.class, "soilNoWeed"); + GameRegistry.registerBlock(Botany.loamNoWeed, ItemSoil.class, "loamNoWeed"); + GameRegistry.registerBlock(Botany.flowerbedNoWeed, ItemSoil.class, "flowerbedNoWeed"); + Botany.soilMeter = new ItemSoilMeter(); + Botany.insulatedTube = new ItemInsulatedTube(); + Botany.trowelWood = new ItemTrowel(Item.ToolMaterial.WOOD, "Wood"); + Botany.trowelStone = new ItemTrowel(Item.ToolMaterial.STONE, "Stone"); + Botany.trowelIron = new ItemTrowel(Item.ToolMaterial.IRON, "Iron"); + Botany.trowelDiamond = new ItemTrowel(Item.ToolMaterial.EMERALD, "Diamond"); + Botany.trowelGold = new ItemTrowel(Item.ToolMaterial.GOLD, "Gold"); + Botany.misc = Binnie.Item.registerMiscItems(BotanyItems.values(), CreativeTabBotany.instance); + Botany.pigment = new ItemPigment(); + Botany.clay = new ItemClay(); + Botany.ceramic = new BlockCeramic(); + Botany.stained = new BlockStained(); + GameRegistry.registerBlock(Botany.ceramic, ItemMetadata.class, "ceramic"); + BinnieCore.proxy.registerCustomItemRenderer(Item.getItemFromBlock(Botany.ceramic), new ItemMetadataRenderer()); + GameRegistry.registerBlock(Botany.stained, ItemMetadata.class, "stained"); + BinnieCore.proxy.registerCustomItemRenderer(Item.getItemFromBlock(Botany.stained), new ItemMetadataRenderer()); + Botany.ceramicTile = new BlockCeramicPatterned(); + Botany.ceramicBrick = new BlockCeramicBrick(); + GameRegistry.registerBlock(Botany.ceramicTile, ItemMetadata.class, "ceramicPattern"); + GameRegistry.registerBlock(Botany.ceramicBrick, ItemMetadata.class, "ceramicBrick"); + BinnieCore.proxy.registerCustomItemRenderer(Item.getItemFromBlock(Botany.ceramicTile), new MultipassItemRenderer()); + BinnieCore.proxy.registerCustomItemRenderer(Item.getItemFromBlock(Botany.ceramicBrick), new MultipassItemRenderer()); + } + + @Override + public void init() { + OreDictionary.registerOre("pigment", Botany.pigment); + RecipeSorter.register("botany:ceramictile", CeramicTileRecipe.class, RecipeSorter.Category.SHAPED, ""); + RecipeSorter.register("botany:pigment", PigmentRecipe.class, RecipeSorter.Category.SHAPED, ""); + final ItemStack yellow = new ItemStack(Blocks.yellow_flower, 1); + final ItemStack red = new ItemStack(Blocks.red_flower, 1); + final ItemStack blue = new ItemStack(Blocks.red_flower, 1, 7); + for (final boolean manual : new boolean[] { true, false }) { + for (final boolean fertilised : new boolean[] { true, false }) { + for (final EnumMoisture moist : EnumMoisture.values()) { + final ItemStack icon = (moist == EnumMoisture.Dry) ? yellow : ((moist == EnumMoisture.Normal) ? red : blue); + int insulate = 2 - moist.ordinal(); + if (fertilised) { + insulate += 3; + } + new CircuitGarden(moist, null, manual, fertilised, new ItemStack(Botany.insulatedTube, 1, 0 + 128 * insulate), icon); + new CircuitGarden(moist, EnumAcidity.Acid, manual, fertilised, new ItemStack(Botany.insulatedTube, 1, 1 + 128 * insulate), icon); + new CircuitGarden(moist, EnumAcidity.Neutral, manual, fertilised, new ItemStack(Botany.insulatedTube, 1, 2 + 128 * insulate), icon); + new CircuitGarden(moist, EnumAcidity.Alkaline, manual, fertilised, new ItemStack(Botany.insulatedTube, 1, 3 + 128 * insulate), icon); + } + } + } + } + + @Override + public void postInit() { + GameRegistry.addRecipe(new CeramicTileRecipe()); + for (int mat = 0; mat < 4; ++mat) { + for (int insulate = 0; insulate < 6; ++insulate) { + final ItemStack tubes = new ItemStack(Botany.insulatedTube, 2, mat + 128 * insulate); + final ItemStack insulateStack = ItemInsulatedTube.getInsulateStack(tubes); + final ItemStack forestryTube = new ItemStack(Mods.Forestry.item("thermionicTubes"), 1, mat); + GameRegistry.addShapelessRecipe(tubes, new Object[] { forestryTube, forestryTube, insulateStack }); + } + } + GameRegistry.addRecipe(new ShapedOreRecipe((Item) Botany.trowelWood, new Object[] { "d ", " x ", " s", 'd', Blocks.dirt, 's', "stickWood", 'x', "plankWood" })); + GameRegistry.addRecipe(new ShapedOreRecipe((Item) Botany.trowelStone, new Object[] { "d ", " x ", " s", 'd', Blocks.dirt, 's', "stickWood", 'x', "cobblestone" })); + GameRegistry.addRecipe(new ShapedOreRecipe((Item) Botany.trowelIron, new Object[] { "d ", " x ", " s", 'd', Blocks.dirt, 's', "stickWood", 'x', "ingotIron" })); + GameRegistry.addRecipe(new ShapedOreRecipe((Item) Botany.trowelGold, new Object[] { "d ", " x ", " s", 'd', Blocks.dirt, 's', "stickWood", 'x', "ingotGold" })); + GameRegistry.addRecipe(new ShapedOreRecipe((Item) Botany.trowelDiamond, new Object[] { "d ", " x ", " s", 'd', Blocks.dirt, 's', "stickWood", 'x', "gemDiamond" })); + GameRegistry.addRecipe(new ShapedOreRecipe((Item) Botany.soilMeter, new Object[] { " gg", " rg", "i ", 'g', "ingotGold", 'r', "dustRedstone", 'i', "ingotIron" })); + GameRegistry.addShapelessRecipe(BotanyItems.Weedkiller.get(4), new Object[] { new ItemStack(Items.spider_eye), new ItemStack(Items.wheat_seeds), new ItemStack(Items.wheat_seeds), new ItemStack(Items.wheat_seeds) }); + GameRegistry.addShapelessRecipe(BotanyItems.AshPowder.get(4), new Object[] { Mods.Forestry.stack("ash") }); + GameRegistry.addShapelessRecipe(BotanyItems.MulchPowder.get(4), new Object[] { Mods.Forestry.stack("mulch") }); + GameRegistry.addShapelessRecipe(BotanyItems.CompostPowder.get(4), new Object[] { Mods.Forestry.stack("fertilizerBio") }); + GameRegistry.addShapelessRecipe(BotanyItems.FertiliserPowder.get(4), new Object[] { Mods.Forestry.stack("fertilizerCompound") }); + GameRegistry.addShapelessRecipe(BotanyItems.PulpPowder.get(4), new Object[] { Mods.Forestry.stack("woodPulp") }); + GameRegistry.addRecipe(new ShapelessOreRecipe(BotanyItems.SulphurPowder.get(4), new Object[] { "dustSulphur" })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(Botany.pigment, 2, EnumFlowerColor.Black.ordinal()), new Object[] { "pigment", "pigment", "dyeBlack" })); + ModuleGardening.queuedAcidFertilisers.put(BotanyItems.SulphurPowder.get(1), 1); + ModuleGardening.queuedAcidFertilisers.put(BotanyItems.MulchPowder.get(1), 1); + ModuleGardening.queuedAcidFertilisers.put(new ItemStack(GameRegistry.findItem("Forestry", "mulch")), 2); + for (final ItemStack stack : OreDictionary.getOres("dustSulfur")) { + ModuleGardening.queuedAcidFertilisers.put(stack, 2); + } + ModuleGardening.queuedAlkalineFertilisers.put(BotanyItems.AshPowder.get(1), 1); + ModuleGardening.queuedAlkalineFertilisers.put(BotanyItems.PulpPowder.get(1), 1); + ModuleGardening.queuedAlkalineFertilisers.put(new ItemStack(GameRegistry.findItem("Forestry", "ash")), 2); + ModuleGardening.queuedAlkalineFertilisers.put(new ItemStack(GameRegistry.findItem("Forestry", "woodPulp")), 2); + ModuleGardening.queuedNutrientFertilisers.put(BotanyItems.CompostPowder.get(1), 1); + ModuleGardening.queuedNutrientFertilisers.put(BotanyItems.FertiliserPowder.get(1), 1); + ModuleGardening.queuedNutrientFertilisers.put(new ItemStack(GameRegistry.findItem("Forestry", "fertilizerBio")), 2); + ModuleGardening.queuedNutrientFertilisers.put(new ItemStack(GameRegistry.findItem("Forestry", "fertilizerCompound")), 2); + for (final Map.Entry entry : ModuleGardening.queuedAcidFertilisers.entrySet()) { + this.addAcidFertiliser(entry.getKey(), entry.getValue()); + } + for (final Map.Entry entry : ModuleGardening.queuedAlkalineFertilisers.entrySet()) { + this.addAlkalineFertiliser(entry.getKey(), entry.getValue()); + } + for (final Map.Entry entry : ModuleGardening.queuedNutrientFertilisers.entrySet()) { + this.addNutrientFertiliser(entry.getKey(), entry.getValue()); + } + GameRegistry.addRecipe(BotanyItems.Mortar.get(6), new Object[] { " c ", "cgc", " c ", 'c', Items.clay_ball, 'g', Blocks.gravel }); + for (final EnumFlowerColor c : EnumFlowerColor.values()) { + final ItemStack clay = new ItemStack(Botany.clay, 1, c.ordinal()); + final ItemStack pigment = new ItemStack(Botany.pigment, 1, c.ordinal()); + GameRegistry.addShapelessRecipe(clay, new Object[] { Items.clay_ball, Items.clay_ball, Items.clay_ball, pigment }); + GameRegistry.addSmelting(clay, TileEntityMetadata.getItemStack(Botany.ceramic, c.ordinal()), 0.0f); + final ItemStack glass = TileEntityMetadata.getItemStack(Botany.stained, c.ordinal()); + glass.stackSize = 4; + GameRegistry.addShapedRecipe(glass, new Object[] { " g ", "gpg", " g ", 'g', Blocks.glass, 'p', pigment }); + } + GameRegistry.addRecipe(new PigmentRecipe()); + } + + private ItemStack getStack(final int type, final int pH, final int moisture) { + if (type < 0 || type > 2 || pH < 0 || pH > 2 || moisture < 0 || moisture > 2) { + return null; + } + return new ItemStack(Gardening.getSoilBlock(EnumSoilType.values()[type]), 1, BlockSoil.getMeta(EnumAcidity.values()[pH], EnumMoisture.values()[moisture])); + } + + private void addAcidFertiliser(final ItemStack stack, final int strengthMax) { + if (stack == null) { + return; + } + Gardening.fertiliserAcid.put(stack, strengthMax); + for (int moisture = 0; moisture < 3; ++moisture) { + for (int pH = 0; pH < 3; ++pH) { + for (int type = 0; type < 3; ++type) { + int numOfBlocks = strengthMax * strengthMax; + for (int strength = 1; strength < strengthMax; ++strength) { + final ItemStack start = this.getStack(type, pH, moisture); + final ItemStack end = this.getStack(type, pH - strength, moisture); + if (end != null) { + end.stackSize = numOfBlocks; + final Object[] stacks = new Object[numOfBlocks + 1]; + for (int i = 0; i < numOfBlocks; ++i) { + stacks[i] = start; + } + stacks[numOfBlocks] = stack.copy(); + GameRegistry.addShapelessRecipe(end, stacks); + } + numOfBlocks /= 2; + } + } + } + } + } + + private void addAlkalineFertiliser(final ItemStack stack, final int strengthMax) { + if (stack == null) { + return; + } + Gardening.fertiliserAlkaline.put(stack, strengthMax); + for (int moisture = 0; moisture < 3; ++moisture) { + for (int pH = 0; pH < 3; ++pH) { + for (int type = 0; type < 3; ++type) { + int numOfBlocks = strengthMax * strengthMax; + for (int strength = 1; strength < strengthMax; ++strength) { + final ItemStack start = this.getStack(type, pH, moisture); + final ItemStack end = this.getStack(type, pH + strength, moisture); + if (end != null) { + end.stackSize = numOfBlocks; + final Object[] stacks = new Object[numOfBlocks + 1]; + for (int i = 0; i < numOfBlocks; ++i) { + stacks[i] = start; + } + stacks[numOfBlocks] = stack.copy(); + GameRegistry.addShapelessRecipe(end, stacks); + } + numOfBlocks /= 2; + } + } + } + } + } + + private void addNutrientFertiliser(final ItemStack stack, final int strengthMax) { + if (stack == null) { + return; + } + Gardening.fertiliserNutrient.put(stack, strengthMax); + for (int moisture = 0; moisture < 3; ++moisture) { + for (int pH = 0; pH < 3; ++pH) { + for (int type = 0; type < 3; ++type) { + int numOfBlocks = strengthMax * strengthMax; + for (int strength = 1; strength < strengthMax; ++strength) { + final ItemStack start = this.getStack(type, pH, moisture); + final ItemStack end = this.getStack(type + strength, pH, moisture); + if (end != null) { + end.stackSize = numOfBlocks; + final Object[] stacks = new Object[numOfBlocks + 1]; + for (int i = 0; i < numOfBlocks; ++i) { + stacks[i] = start; + } + stacks[numOfBlocks] = stack.copy(); + GameRegistry.addShapelessRecipe(end, stacks); + } + numOfBlocks /= 2; + } + } + } + } + } + + static { + ModuleGardening.queuedAcidFertilisers = new HashMap(); + ModuleGardening.queuedAlkalineFertilisers = new HashMap(); + ModuleGardening.queuedNutrientFertilisers = new HashMap(); + } +} diff --git a/src/main/java/binnie/botany/genetics/AlleleColor.java b/src/main/java/binnie/botany/genetics/AlleleColor.java new file mode 100644 index 00000000..8c92442e --- /dev/null +++ b/src/main/java/binnie/botany/genetics/AlleleColor.java @@ -0,0 +1,52 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.genetics; + +import forestry.api.genetics.IAlleleInteger; + +public class AlleleColor implements IAlleleInteger +{ + String uid; + boolean dominant; + String name; + int value; + EnumFlowerColor color; + + public AlleleColor(final EnumFlowerColor color, final String uid, final String name, final int value) { + this.color = color; + this.uid = uid; + this.name = name; + this.value = value; + } + + @Override + public String getUID() { + return this.uid; + } + + @Override + public boolean isDominant() { + return true; + } + + @Override + public String getName() { + return this.color.getName(); + } + + @Override + public int getValue() { + return this.value; + } + + public EnumFlowerColor getColor() { + return this.color; + } + + @Override + public String getUnlocalizedName() { + return this.getUID(); + } +} diff --git a/src/main/java/binnie/botany/genetics/AlleleEffectNone.java b/src/main/java/binnie/botany/genetics/AlleleEffectNone.java new file mode 100644 index 00000000..0ec0add8 --- /dev/null +++ b/src/main/java/binnie/botany/genetics/AlleleEffectNone.java @@ -0,0 +1,48 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.genetics; + +import net.minecraft.world.World; +import binnie.botany.api.IFlowerGenome; +import forestry.api.genetics.IEffectData; +import binnie.botany.api.IAlleleFlowerEffect; + +public class AlleleEffectNone implements IAlleleFlowerEffect +{ + @Override + public boolean isCombinable() { + return true; + } + + @Override + public IEffectData validateStorage(final IEffectData storedData) { + return storedData; + } + + @Override + public String getUID() { + return "binnie.flowerEffectNone"; + } + + @Override + public boolean isDominant() { + return false; + } + + @Override + public String getName() { + return "None"; + } + + @Override + public IEffectData doEffect(final IFlowerGenome genome, final IEffectData storedData, final World world, final int x, final int y, final int z) { + return storedData; + } + + @Override + public String getUnlocalizedName() { + return this.getUID(); + } +} diff --git a/src/main/java/binnie/botany/genetics/BotanistTracker.java b/src/main/java/binnie/botany/genetics/BotanistTracker.java new file mode 100644 index 00000000..c245651f --- /dev/null +++ b/src/main/java/binnie/botany/genetics/BotanistTracker.java @@ -0,0 +1,35 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.genetics; + +import binnie.Binnie; +import forestry.api.genetics.IBreedingTracker; + +import net.minecraft.entity.player.EntityPlayer; +import forestry.api.genetics.IIndividual; + +import binnie.botany.api.IBotanistTracker; +import forestry.core.genetics.BreedingTracker; + +public class BotanistTracker extends BreedingTracker implements IBotanistTracker +{ + public BotanistTracker(final String s) { + super(s); + } + + @Override + public void registerPickup(final IIndividual individual) { + } + + @Override + protected IBreedingTracker getBreedingTracker(final EntityPlayer player) { + return Binnie.Genetics.getFlowerRoot().getBreedingTracker(player.worldObj, player.getGameProfile()); + } + + @Override + protected String speciesRootUID() { + return "rootFlowers"; + } +} diff --git a/src/main/java/binnie/botany/genetics/ColourMix.java b/src/main/java/binnie/botany/genetics/ColourMix.java new file mode 100644 index 00000000..70a455d9 --- /dev/null +++ b/src/main/java/binnie/botany/genetics/ColourMix.java @@ -0,0 +1,48 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.genetics; + +import binnie.botany.api.IFlowerColour; +import binnie.botany.api.IColourMix; + +public class ColourMix implements IColourMix +{ + IFlowerColour colour1; + IFlowerColour colour2; + IFlowerColour result; + int chance; + + @Override + public IFlowerColour getColour1() { + return this.colour1; + } + + @Override + public IFlowerColour getColour2() { + return this.colour2; + } + + @Override + public boolean isMutation(final IFlowerColour a, final IFlowerColour b) { + return (a == this.colour1 && b == this.colour2) || (a == this.colour2 && b == this.colour1); + } + + @Override + public int getChance() { + return this.chance; + } + + @Override + public IFlowerColour getResult() { + return this.result; + } + + public ColourMix(final IFlowerColour colour1, final IFlowerColour colour2, final IFlowerColour result, final int chance) { + this.colour1 = colour1; + this.colour2 = colour2; + this.result = result; + this.chance = chance; + } +} diff --git a/src/main/java/binnie/botany/genetics/EnumFlowerColor.java b/src/main/java/binnie/botany/genetics/EnumFlowerColor.java new file mode 100644 index 00000000..54331889 --- /dev/null +++ b/src/main/java/binnie/botany/genetics/EnumFlowerColor.java @@ -0,0 +1,2965 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.genetics; + +import binnie.botany.Botany; +import binnie.botany.core.BotanyCore; +import forestry.api.genetics.IAlleleInteger; +import binnie.botany.api.IFlowerColour; + +public enum EnumFlowerColor implements IFlowerColour +{ + Aquamarine("aquamarine", 8388564), + Black("black", 2631720), + Blue("blue", 255), + Brown("brown", 10824234), + CadetBlue("cadetBlue", 6266528), + Chocolate("chocolate", 13789470), + Coral("coral", 16744272), + Crimson("crimson", 14423100), + Cyan("cyan", 65535), + DarkGoldenrod("darkGoldenrod", 12092939), + DarkGray("darkGray", 11119017), + DarkGreen("darkGreen", 25600), + DarkKhaki("darkKhaki", 12433259), + DarkOliveGreen("darkOliveGreen", 5597999), + DarkOrange("darkOrange", 16747520), + DarkSalmon("darkSalmon", 15308410), + DarkSeaGreen("darkSeaGreen", 9419915), + DarkSlateBlue("darkSlateBlue", 4734347), + DarkSlateGray("darkSlateGray", 3100495), + DarkTurquoise("darkTurquoise", 52945), + DarkViolet("darkViolet", 9699539), + DeepPink("deepPink", 16716947), + DeepSkyBlue("deepSkyBlue", 49151), + DimGray("dimGray", 6908265), + DodgerBlue("dodgerBlue", 2003199), + Gold("gold", 16766720), + Goldenrod("goldenrod", 14329120), + Gray("gray", 8421504), + Green("green", 32768), + HotPink("hotPink", 16738740), + IndianRed("indianRed", 13458524), + Indigo("indigo", 4915330), + Khaki("khaki", 15787660), + Lavender("lavender", 15132410), + LemonChiffon("lemonChiffon", 16775885), + LightGray("lightGray", 13882323), + LightSeaGreen("lightSeaGreen", 2142890), + LightSteelBlue("lightSteelBlue", 11584734), + Lime("lime", 65280), + LimeGreen("limeGreen", 3329330), + Magenta("magenta", 16711935), + Maroon("maroon", 8388608), + MediumAquamarine("mediumAquamarine", 6737322), + MediumOrchid("mediumOrchid", 12211667), + MediumPurple("mediumPurple", 9662683), + MediumSeaGreen("mediumSeaGreen", 3978097), + MediumVioletRed("mediumVioletRed", 13047173), + MistyRose("mistyRose", 16770273), + Navy("navy", 128), + Olive("olive", 8421376), + OliveDrab("oliveDrab", 7048739), + Orange("orange", 16753920), + PaleGreen("paleGreen", 10025880), + PaleTurquoise("paleTurquoise", 11529966), + PaleVioletRed("paleVioletRed", 14381203), + Peru("peru", 13468991), + Pink("pink", 16761035), + Plum("plum", 14524637), + Purple("purple", 8388736), + Red("red", 16711680), + RosyBrown("rosyBrown", 12357519), + RoyalBlue("royalBlue", 4286945), + Salmon("salmon", 16416882), + SandyBrown("sandyBrown", 16032864), + SeaGreen("seaGreen", 3050327), + Sienna("sienna", 10506797), + SkyBlue("skyBlue", 8900331), + SlateBlue("slateBlue", 6970061), + SlateGray("slateGray", 7372944), + SpringGreen("springGreen", 65407), + SteelBlue("steelBlue", 4620980), + Tan("tan", 13808780), + Teal("teal", 32896), + Thistle("thistle", 14204888), + Turquoise("turquoise", 4251856), + Violet("violet", 15631086), + Wheat("wheat", 16113331), + White("white", 16777215), + Yellow("yellow", 16776960), + YellowGreen("yellowGreen", 10145074); + + int color; + int colorDis; + AlleleColor allele; + String ident; + + private EnumFlowerColor(final String ident, final int c) { + this(c); + } + + private EnumFlowerColor(final int c) { + this.color = c; + this.allele = new AlleleColor(this, "botany.color" + this.name(), this.toString(), this.color); + int r = this.color >> 16 & 0xFF; + int g = this.color >> 8 & 0xFF; + int b = this.color & 0xFF; + r = (int) (0.45 * (r + 214)); + g = (int) (0.45 * (r + 174)); + b = (int) (0.45 * (r + 131)); + this.colorDis = (r << 16) + (g << 8) + b; + } + + @Override + public int getColor(final boolean dis) { + return dis ? this.colorDis : this.color; + } + + @Override + public IAlleleInteger getAllele() { + return this.allele; + } + + @Override + public int getID() { + return this.ordinal(); + } + + public static void addMix(final EnumFlowerColor start1, final EnumFlowerColor start2, final EnumFlowerColor result, final int chance) { + BotanyCore.getFlowerRoot().registerColourMix(new ColourMix(start1, start2, result, chance)); + } + + public static void setupMutations() { + addMix(EnumFlowerColor.Blue, EnumFlowerColor.Aquamarine, EnumFlowerColor.SteelBlue, 55); + addMix(EnumFlowerColor.Blue, EnumFlowerColor.Black, EnumFlowerColor.Navy, 85); + addMix(EnumFlowerColor.Brown, EnumFlowerColor.Aquamarine, EnumFlowerColor.Gray, 50); + addMix(EnumFlowerColor.Brown, EnumFlowerColor.Black, EnumFlowerColor.Maroon, 90); + addMix(EnumFlowerColor.Brown, EnumFlowerColor.Blue, EnumFlowerColor.Indigo, 85); + addMix(EnumFlowerColor.CadetBlue, EnumFlowerColor.Aquamarine, EnumFlowerColor.MediumAquamarine, 100); + addMix(EnumFlowerColor.CadetBlue, EnumFlowerColor.Black, EnumFlowerColor.DarkSlateGray, 75); + addMix(EnumFlowerColor.CadetBlue, EnumFlowerColor.Blue, EnumFlowerColor.SlateBlue, 85); + addMix(EnumFlowerColor.Chocolate, EnumFlowerColor.Aquamarine, EnumFlowerColor.DarkKhaki, 65); + addMix(EnumFlowerColor.Chocolate, EnumFlowerColor.Blue, EnumFlowerColor.DarkSlateBlue, 65); + addMix(EnumFlowerColor.Chocolate, EnumFlowerColor.Brown, EnumFlowerColor.Sienna, 100); + addMix(EnumFlowerColor.Coral, EnumFlowerColor.Aquamarine, EnumFlowerColor.DarkKhaki, 65); + addMix(EnumFlowerColor.Coral, EnumFlowerColor.Black, EnumFlowerColor.Sienna, 65); + addMix(EnumFlowerColor.Coral, EnumFlowerColor.Blue, EnumFlowerColor.DarkViolet, 65); + addMix(EnumFlowerColor.Coral, EnumFlowerColor.Brown, EnumFlowerColor.IndianRed, 95); + addMix(EnumFlowerColor.Coral, EnumFlowerColor.CadetBlue, EnumFlowerColor.RosyBrown, 80); + addMix(EnumFlowerColor.Coral, EnumFlowerColor.Chocolate, EnumFlowerColor.Peru, 115); + addMix(EnumFlowerColor.Crimson, EnumFlowerColor.Aquamarine, EnumFlowerColor.RosyBrown, 45); + addMix(EnumFlowerColor.Crimson, EnumFlowerColor.Black, EnumFlowerColor.Maroon, 80); + addMix(EnumFlowerColor.Crimson, EnumFlowerColor.Blue, EnumFlowerColor.Indigo, 85); + addMix(EnumFlowerColor.Crimson, EnumFlowerColor.Brown, EnumFlowerColor.IndianRed, 115); + addMix(EnumFlowerColor.Crimson, EnumFlowerColor.Chocolate, EnumFlowerColor.Red, 100); + addMix(EnumFlowerColor.Crimson, EnumFlowerColor.Coral, EnumFlowerColor.IndianRed, 105); + addMix(EnumFlowerColor.Cyan, EnumFlowerColor.Aquamarine, EnumFlowerColor.Turquoise, 115); + addMix(EnumFlowerColor.Cyan, EnumFlowerColor.Blue, EnumFlowerColor.DodgerBlue, 60); + addMix(EnumFlowerColor.Cyan, EnumFlowerColor.Brown, EnumFlowerColor.CadetBlue, 50); + addMix(EnumFlowerColor.Cyan, EnumFlowerColor.CadetBlue, EnumFlowerColor.DarkTurquoise, 100); + addMix(EnumFlowerColor.Cyan, EnumFlowerColor.Chocolate, EnumFlowerColor.MediumAquamarine, 65); + addMix(EnumFlowerColor.Cyan, EnumFlowerColor.Coral, EnumFlowerColor.MediumAquamarine, 65); + addMix(EnumFlowerColor.Cyan, EnumFlowerColor.Crimson, EnumFlowerColor.SlateGray, 50); + addMix(EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Aquamarine, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Blue, EnumFlowerColor.DarkSlateBlue, 55); + addMix(EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Brown, EnumFlowerColor.Sienna, 85); + addMix(EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.CadetBlue, EnumFlowerColor.OliveDrab, 90); + addMix(EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Chocolate, EnumFlowerColor.Peru, 110); + addMix(EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Coral, EnumFlowerColor.Peru, 100); + addMix(EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Crimson, EnumFlowerColor.Sienna, 85); + addMix(EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Cyan, EnumFlowerColor.MediumSeaGreen, 75); + addMix(EnumFlowerColor.DarkGray, EnumFlowerColor.Aquamarine, EnumFlowerColor.MediumAquamarine, 95); + addMix(EnumFlowerColor.DarkGray, EnumFlowerColor.Black, EnumFlowerColor.DimGray, 70); + addMix(EnumFlowerColor.DarkGray, EnumFlowerColor.Blue, EnumFlowerColor.SlateBlue, 75); + addMix(EnumFlowerColor.DarkGray, EnumFlowerColor.Brown, EnumFlowerColor.IndianRed, 85); + addMix(EnumFlowerColor.DarkGray, EnumFlowerColor.Chocolate, EnumFlowerColor.Peru, 95); + addMix(EnumFlowerColor.DarkGray, EnumFlowerColor.Coral, EnumFlowerColor.DarkSalmon, 100); + addMix(EnumFlowerColor.DarkGray, EnumFlowerColor.Crimson, EnumFlowerColor.IndianRed, 90); + addMix(EnumFlowerColor.DarkGray, EnumFlowerColor.Cyan, EnumFlowerColor.DarkTurquoise, 95); + addMix(EnumFlowerColor.DarkGray, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.DarkKhaki, 100); + addMix(EnumFlowerColor.DarkGreen, EnumFlowerColor.Aquamarine, EnumFlowerColor.MediumSeaGreen, 75); + addMix(EnumFlowerColor.DarkGreen, EnumFlowerColor.Blue, EnumFlowerColor.DarkSlateBlue, 65); + addMix(EnumFlowerColor.DarkGreen, EnumFlowerColor.CadetBlue, EnumFlowerColor.SeaGreen, 90); + addMix(EnumFlowerColor.DarkGreen, EnumFlowerColor.Chocolate, EnumFlowerColor.DarkOliveGreen, 70); + addMix(EnumFlowerColor.DarkGreen, EnumFlowerColor.Coral, EnumFlowerColor.Olive, 60); + addMix(EnumFlowerColor.DarkGreen, EnumFlowerColor.Crimson, EnumFlowerColor.Sienna, 55); + addMix(EnumFlowerColor.DarkGreen, EnumFlowerColor.Cyan, EnumFlowerColor.MediumSeaGreen, 70); + addMix(EnumFlowerColor.DarkGreen, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.DarkOliveGreen, 85); + addMix(EnumFlowerColor.DarkGreen, EnumFlowerColor.DarkGray, EnumFlowerColor.SeaGreen, 85); + addMix(EnumFlowerColor.DarkKhaki, EnumFlowerColor.Aquamarine, EnumFlowerColor.DarkSeaGreen, 100); + addMix(EnumFlowerColor.DarkKhaki, EnumFlowerColor.Black, EnumFlowerColor.DarkOliveGreen, 60); + addMix(EnumFlowerColor.DarkKhaki, EnumFlowerColor.Brown, EnumFlowerColor.Chocolate, 75); + addMix(EnumFlowerColor.DarkKhaki, EnumFlowerColor.CadetBlue, EnumFlowerColor.DarkSeaGreen, 95); + addMix(EnumFlowerColor.DarkKhaki, EnumFlowerColor.Chocolate, EnumFlowerColor.Peru, 95); + addMix(EnumFlowerColor.DarkKhaki, EnumFlowerColor.Coral, EnumFlowerColor.SandyBrown, 90); + addMix(EnumFlowerColor.DarkKhaki, EnumFlowerColor.Crimson, EnumFlowerColor.IndianRed, 75); + addMix(EnumFlowerColor.DarkKhaki, EnumFlowerColor.Cyan, EnumFlowerColor.MediumAquamarine, 90); + addMix(EnumFlowerColor.DarkKhaki, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Goldenrod, 110); + addMix(EnumFlowerColor.DarkKhaki, EnumFlowerColor.DarkGray, EnumFlowerColor.Tan, 105); + addMix(EnumFlowerColor.DarkKhaki, EnumFlowerColor.DarkGreen, EnumFlowerColor.OliveDrab, 85); + addMix(EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.Aquamarine, EnumFlowerColor.MediumSeaGreen, 80); + addMix(EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.Blue, EnumFlowerColor.DarkSlateBlue, 50); + addMix(EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.Brown, EnumFlowerColor.Sienna, 80); + addMix(EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.CadetBlue, EnumFlowerColor.SeaGreen, 95); + addMix(EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.Chocolate, EnumFlowerColor.DarkGoldenrod, 85); + addMix(EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.Coral, EnumFlowerColor.Peru, 75); + addMix(EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.Crimson, EnumFlowerColor.Brown, 70); + addMix(EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.Cyan, EnumFlowerColor.LightSeaGreen, 75); + addMix(EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Olive, 100); + addMix(EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.DarkGreen, EnumFlowerColor.Green, 115); + addMix(EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.DarkKhaki, EnumFlowerColor.OliveDrab, 95); + addMix(EnumFlowerColor.DarkOrange, EnumFlowerColor.Aquamarine, EnumFlowerColor.DarkKhaki, 70); + addMix(EnumFlowerColor.DarkOrange, EnumFlowerColor.Black, EnumFlowerColor.Sienna, 60); + addMix(EnumFlowerColor.DarkOrange, EnumFlowerColor.Blue, EnumFlowerColor.Violet, 55); + addMix(EnumFlowerColor.DarkOrange, EnumFlowerColor.Brown, EnumFlowerColor.Chocolate, 85); + addMix(EnumFlowerColor.DarkOrange, EnumFlowerColor.CadetBlue, EnumFlowerColor.DarkGoldenrod, 80); + addMix(EnumFlowerColor.DarkOrange, EnumFlowerColor.Chocolate, EnumFlowerColor.Peru, 115); + addMix(EnumFlowerColor.DarkOrange, EnumFlowerColor.Coral, EnumFlowerColor.SandyBrown, 115); + addMix(EnumFlowerColor.DarkOrange, EnumFlowerColor.Crimson, EnumFlowerColor.Red, 90); + addMix(EnumFlowerColor.DarkOrange, EnumFlowerColor.Cyan, EnumFlowerColor.DarkSeaGreen, 70); + addMix(EnumFlowerColor.DarkOrange, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Peru, 110); + addMix(EnumFlowerColor.DarkOrange, EnumFlowerColor.DarkGray, EnumFlowerColor.Peru, 95); + addMix(EnumFlowerColor.DarkOrange, EnumFlowerColor.DarkGreen, EnumFlowerColor.Olive, 70); + addMix(EnumFlowerColor.DarkOrange, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Goldenrod, 100); + addMix(EnumFlowerColor.DarkOrange, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.DarkGoldenrod, 80); + addMix(EnumFlowerColor.DarkSalmon, EnumFlowerColor.Aquamarine, EnumFlowerColor.DarkSeaGreen, 75); + addMix(EnumFlowerColor.DarkSalmon, EnumFlowerColor.Black, EnumFlowerColor.Sienna, 65); + addMix(EnumFlowerColor.DarkSalmon, EnumFlowerColor.Blue, EnumFlowerColor.SlateBlue, 70); + addMix(EnumFlowerColor.DarkSalmon, EnumFlowerColor.Brown, EnumFlowerColor.IndianRed, 95); + addMix(EnumFlowerColor.DarkSalmon, EnumFlowerColor.CadetBlue, EnumFlowerColor.DarkGray, 85); + addMix(EnumFlowerColor.DarkSalmon, EnumFlowerColor.Chocolate, EnumFlowerColor.Coral, 110); + addMix(EnumFlowerColor.DarkSalmon, EnumFlowerColor.Coral, EnumFlowerColor.Salmon, 120); + addMix(EnumFlowerColor.DarkSalmon, EnumFlowerColor.Crimson, EnumFlowerColor.IndianRed, 100); + addMix(EnumFlowerColor.DarkSalmon, EnumFlowerColor.Cyan, EnumFlowerColor.MediumAquamarine, 75); + addMix(EnumFlowerColor.DarkSalmon, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Peru, 100); + addMix(EnumFlowerColor.DarkSalmon, EnumFlowerColor.DarkGray, EnumFlowerColor.RosyBrown, 105); + addMix(EnumFlowerColor.DarkSalmon, EnumFlowerColor.DarkGreen, EnumFlowerColor.Olive, 65); + addMix(EnumFlowerColor.DarkSalmon, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Tan, 95); + addMix(EnumFlowerColor.DarkSalmon, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.Peru, 80); + addMix(EnumFlowerColor.DarkSalmon, EnumFlowerColor.DarkOrange, EnumFlowerColor.SandyBrown, 110); + addMix(EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.Aquamarine, EnumFlowerColor.MediumAquamarine, 110); + addMix(EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.Black, EnumFlowerColor.DarkOliveGreen, 60); + addMix(EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.Blue, EnumFlowerColor.RoyalBlue, 60); + addMix(EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.Brown, EnumFlowerColor.Sienna, 65); + addMix(EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.CadetBlue, EnumFlowerColor.MediumAquamarine, 105); + addMix(EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.Chocolate, EnumFlowerColor.DarkGoldenrod, 80); + addMix(EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.Coral, EnumFlowerColor.Tan, 80); + addMix(EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.Crimson, EnumFlowerColor.IndianRed, 60); + addMix(EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.Cyan, EnumFlowerColor.Turquoise, 100); + addMix(EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.DarkKhaki, 95); + addMix(EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkGreen, EnumFlowerColor.SeaGreen, 90); + addMix(EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkKhaki, EnumFlowerColor.YellowGreen, 110); + addMix(EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.OliveDrab, 100); + addMix(EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkOrange, EnumFlowerColor.Goldenrod, 85); + addMix(EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkSalmon, EnumFlowerColor.Tan, 85); + addMix(EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.Aquamarine, EnumFlowerColor.CadetBlue, 60); + addMix(EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.Blue, EnumFlowerColor.Indigo, 110); + addMix(EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.Brown, EnumFlowerColor.Purple, 90); + addMix(EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.CadetBlue, EnumFlowerColor.RoyalBlue, 85); + addMix(EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.Chocolate, EnumFlowerColor.Brown, 75); + addMix(EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.Coral, EnumFlowerColor.IndianRed, 70); + addMix(EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.Crimson, EnumFlowerColor.MediumVioletRed, 90); + addMix(EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.Cyan, EnumFlowerColor.DeepSkyBlue, 60); + addMix(EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Sienna, 65); + addMix(EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.DarkGreen, EnumFlowerColor.DarkSlateGray, 75); + addMix(EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Gray, 55); + addMix(EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.DimGray, 70); + addMix(EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.DarkOrange, EnumFlowerColor.Sienna, 60); + addMix(EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.SlateGray, 65); + addMix(EnumFlowerColor.DarkSlateGray, EnumFlowerColor.Aquamarine, EnumFlowerColor.LightSeaGreen, 70); + addMix(EnumFlowerColor.DarkSlateGray, EnumFlowerColor.Blue, EnumFlowerColor.Navy, 95); + addMix(EnumFlowerColor.DarkSlateGray, EnumFlowerColor.CadetBlue, EnumFlowerColor.Teal, 95); + addMix(EnumFlowerColor.DarkSlateGray, EnumFlowerColor.Chocolate, EnumFlowerColor.Sienna, 80); + addMix(EnumFlowerColor.DarkSlateGray, EnumFlowerColor.Coral, EnumFlowerColor.Sienna, 75); + addMix(EnumFlowerColor.DarkSlateGray, EnumFlowerColor.Crimson, EnumFlowerColor.Brown, 80); + addMix(EnumFlowerColor.DarkSlateGray, EnumFlowerColor.Cyan, EnumFlowerColor.LightSeaGreen, 70); + addMix(EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.DarkOliveGreen, 85); + addMix(EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkGray, EnumFlowerColor.Gray, 85); + addMix(EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkGreen, EnumFlowerColor.DarkOliveGreen, 100); + addMix(EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkKhaki, EnumFlowerColor.DarkOliveGreen, 75); + addMix(EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkOrange, EnumFlowerColor.DarkGoldenrod, 70); + addMix(EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkSalmon, EnumFlowerColor.Gray, 75); + addMix(EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.SeaGreen, 80); + addMix(EnumFlowerColor.DarkTurquoise, EnumFlowerColor.Aquamarine, EnumFlowerColor.Turquoise, 110); + addMix(EnumFlowerColor.DarkTurquoise, EnumFlowerColor.Black, EnumFlowerColor.Teal, 55); + addMix(EnumFlowerColor.DarkTurquoise, EnumFlowerColor.Blue, EnumFlowerColor.RoyalBlue, 65); + addMix(EnumFlowerColor.DarkTurquoise, EnumFlowerColor.Brown, EnumFlowerColor.Teal, 60); + addMix(EnumFlowerColor.DarkTurquoise, EnumFlowerColor.CadetBlue, EnumFlowerColor.LightSeaGreen, 115); + addMix(EnumFlowerColor.DarkTurquoise, EnumFlowerColor.Chocolate, EnumFlowerColor.SeaGreen, 70); + addMix(EnumFlowerColor.DarkTurquoise, EnumFlowerColor.Coral, EnumFlowerColor.DarkSeaGreen, 70); + addMix(EnumFlowerColor.DarkTurquoise, EnumFlowerColor.Crimson, EnumFlowerColor.SlateGray, 55); + addMix(EnumFlowerColor.DarkTurquoise, EnumFlowerColor.Cyan, EnumFlowerColor.Turquoise, 115); + addMix(EnumFlowerColor.DarkTurquoise, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.MediumSeaGreen, 80); + addMix(EnumFlowerColor.DarkTurquoise, EnumFlowerColor.DarkGray, EnumFlowerColor.LightSeaGreen, 100); + addMix(EnumFlowerColor.DarkTurquoise, EnumFlowerColor.DarkGreen, EnumFlowerColor.SeaGreen, 80); + addMix(EnumFlowerColor.DarkTurquoise, EnumFlowerColor.DarkKhaki, EnumFlowerColor.MediumAquamarine, 95); + addMix(EnumFlowerColor.DarkTurquoise, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.SeaGreen, 85); + addMix(EnumFlowerColor.DarkTurquoise, EnumFlowerColor.DarkOrange, EnumFlowerColor.DarkSeaGreen, 75); + addMix(EnumFlowerColor.DarkTurquoise, EnumFlowerColor.DarkSalmon, EnumFlowerColor.LightSeaGreen, 80); + addMix(EnumFlowerColor.DarkTurquoise, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.MediumAquamarine, 105); + addMix(EnumFlowerColor.DarkTurquoise, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.SteelBlue, 70); + addMix(EnumFlowerColor.DarkTurquoise, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.Teal, 80); + addMix(EnumFlowerColor.DarkViolet, EnumFlowerColor.Aquamarine, EnumFlowerColor.MediumPurple, 60); + addMix(EnumFlowerColor.DarkViolet, EnumFlowerColor.Black, EnumFlowerColor.Indigo, 85); + addMix(EnumFlowerColor.DarkViolet, EnumFlowerColor.Brown, EnumFlowerColor.Purple, 90); + addMix(EnumFlowerColor.DarkViolet, EnumFlowerColor.CadetBlue, EnumFlowerColor.SlateBlue, 90); + addMix(EnumFlowerColor.DarkViolet, EnumFlowerColor.Chocolate, EnumFlowerColor.MediumVioletRed, 70); + addMix(EnumFlowerColor.DarkViolet, EnumFlowerColor.Coral, EnumFlowerColor.MediumVioletRed, 75); + addMix(EnumFlowerColor.DarkViolet, EnumFlowerColor.Crimson, EnumFlowerColor.MediumVioletRed, 90); + addMix(EnumFlowerColor.DarkViolet, EnumFlowerColor.Cyan, EnumFlowerColor.SteelBlue, 60); + addMix(EnumFlowerColor.DarkViolet, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.MediumVioletRed, 55); + addMix(EnumFlowerColor.DarkViolet, EnumFlowerColor.DarkGray, EnumFlowerColor.MediumOrchid, 85); + addMix(EnumFlowerColor.DarkViolet, EnumFlowerColor.DarkKhaki, EnumFlowerColor.MediumOrchid, 50); + addMix(EnumFlowerColor.DarkViolet, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.Purple, 55); + addMix(EnumFlowerColor.DarkViolet, EnumFlowerColor.DarkOrange, EnumFlowerColor.IndianRed, 60); + addMix(EnumFlowerColor.DarkViolet, EnumFlowerColor.DarkSalmon, EnumFlowerColor.MediumOrchid, 75); + addMix(EnumFlowerColor.DarkViolet, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.MediumOrchid, 70); + addMix(EnumFlowerColor.DarkViolet, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.Indigo, 110); + addMix(EnumFlowerColor.DarkViolet, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.Indigo, 100); + addMix(EnumFlowerColor.DarkViolet, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.RoyalBlue, 70); + addMix(EnumFlowerColor.DeepPink, EnumFlowerColor.Blue, EnumFlowerColor.DarkViolet, 90); + addMix(EnumFlowerColor.DeepPink, EnumFlowerColor.Brown, EnumFlowerColor.Crimson, 100); + addMix(EnumFlowerColor.DeepPink, EnumFlowerColor.CadetBlue, EnumFlowerColor.MediumVioletRed, 80); + addMix(EnumFlowerColor.DeepPink, EnumFlowerColor.Chocolate, EnumFlowerColor.IndianRed, 85); + addMix(EnumFlowerColor.DeepPink, EnumFlowerColor.Coral, EnumFlowerColor.IndianRed, 95); + addMix(EnumFlowerColor.DeepPink, EnumFlowerColor.Crimson, EnumFlowerColor.IndianRed, 105); + addMix(EnumFlowerColor.DeepPink, EnumFlowerColor.Cyan, EnumFlowerColor.MediumPurple, 45); + addMix(EnumFlowerColor.DeepPink, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.IndianRed, 70); + addMix(EnumFlowerColor.DeepPink, EnumFlowerColor.DarkGray, EnumFlowerColor.PaleVioletRed, 95); + addMix(EnumFlowerColor.DeepPink, EnumFlowerColor.DarkKhaki, EnumFlowerColor.PaleVioletRed, 65); + addMix(EnumFlowerColor.DeepPink, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.MediumVioletRed, 60); + addMix(EnumFlowerColor.DeepPink, EnumFlowerColor.DarkOrange, EnumFlowerColor.Salmon, 80); + addMix(EnumFlowerColor.DeepPink, EnumFlowerColor.DarkSalmon, EnumFlowerColor.PaleVioletRed, 95); + addMix(EnumFlowerColor.DeepPink, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.PaleVioletRed, 55); + addMix(EnumFlowerColor.DeepPink, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.MediumVioletRed, 90); + addMix(EnumFlowerColor.DeepPink, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.MediumVioletRed, 90); + addMix(EnumFlowerColor.DeepPink, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.MediumPurple, 55); + addMix(EnumFlowerColor.DeepPink, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumVioletRed, 100); + addMix(EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.Aquamarine, EnumFlowerColor.DarkTurquoise, 90); + addMix(EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.Blue, EnumFlowerColor.RoyalBlue, 75); + addMix(EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.Brown, EnumFlowerColor.SteelBlue, 60); + addMix(EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.CadetBlue, EnumFlowerColor.SkyBlue, 105); + addMix(EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.Chocolate, EnumFlowerColor.CadetBlue, 70); + addMix(EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.Coral, EnumFlowerColor.CadetBlue, 70); + addMix(EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.Crimson, EnumFlowerColor.SlateBlue, 60); + addMix(EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.Cyan, EnumFlowerColor.SkyBlue, 105); + addMix(EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.MediumSeaGreen, 70); + addMix(EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DarkGray, EnumFlowerColor.SkyBlue, 105); + addMix(EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DarkGreen, EnumFlowerColor.Teal, 65); + addMix(EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DarkKhaki, EnumFlowerColor.LightSeaGreen, 75); + addMix(EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.CadetBlue, 70); + addMix(EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DarkOrange, EnumFlowerColor.DarkSeaGreen, 70); + addMix(EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DarkSalmon, EnumFlowerColor.CadetBlue, 80); + addMix(EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkTurquoise, 85); + addMix(EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.SteelBlue, 75); + addMix(EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.SteelBlue, 80); + addMix(EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.SkyBlue, 110); + addMix(EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DarkViolet, EnumFlowerColor.RoyalBlue, 70); + addMix(EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DeepPink, EnumFlowerColor.MediumPurple, 55); + addMix(EnumFlowerColor.DimGray, EnumFlowerColor.Aquamarine, EnumFlowerColor.MediumAquamarine, 80); + addMix(EnumFlowerColor.DimGray, EnumFlowerColor.Blue, EnumFlowerColor.DarkSlateBlue, 90); + addMix(EnumFlowerColor.DimGray, EnumFlowerColor.CadetBlue, EnumFlowerColor.SlateGray, 100); + addMix(EnumFlowerColor.DimGray, EnumFlowerColor.Chocolate, EnumFlowerColor.Sienna, 95); + addMix(EnumFlowerColor.DimGray, EnumFlowerColor.Coral, EnumFlowerColor.IndianRed, 90); + addMix(EnumFlowerColor.DimGray, EnumFlowerColor.Crimson, EnumFlowerColor.Brown, 100); + addMix(EnumFlowerColor.DimGray, EnumFlowerColor.Cyan, EnumFlowerColor.LightSeaGreen, 80); + addMix(EnumFlowerColor.DimGray, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Olive, 95); + addMix(EnumFlowerColor.DimGray, EnumFlowerColor.DarkGray, EnumFlowerColor.Gray, 105); + addMix(EnumFlowerColor.DimGray, EnumFlowerColor.DarkGreen, EnumFlowerColor.DarkOliveGreen, 100); + addMix(EnumFlowerColor.DimGray, EnumFlowerColor.DarkOrange, EnumFlowerColor.Peru, 90); + addMix(EnumFlowerColor.DimGray, EnumFlowerColor.DarkSalmon, EnumFlowerColor.RosyBrown, 95); + addMix(EnumFlowerColor.DimGray, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.CadetBlue, 90); + addMix(EnumFlowerColor.DimGray, EnumFlowerColor.DarkViolet, EnumFlowerColor.Purple, 95); + addMix(EnumFlowerColor.DimGray, EnumFlowerColor.DeepPink, EnumFlowerColor.MediumVioletRed, 95); + addMix(EnumFlowerColor.DimGray, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.SteelBlue, 90); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.Aquamarine, EnumFlowerColor.SkyBlue, 80); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.Black, EnumFlowerColor.DarkSlateBlue, 75); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.Blue, EnumFlowerColor.SlateBlue, 90); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.Brown, EnumFlowerColor.SlateBlue, 75); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.CadetBlue, EnumFlowerColor.SteelBlue, 100); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.Chocolate, EnumFlowerColor.SlateGray, 75); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.Crimson, EnumFlowerColor.SlateBlue, 75); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.Cyan, EnumFlowerColor.DeepSkyBlue, 85); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.CadetBlue, 70); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.DarkGray, EnumFlowerColor.SteelBlue, 100); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.DarkGreen, EnumFlowerColor.Teal, 65); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.DarkKhaki, EnumFlowerColor.CadetBlue, 65); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.SteelBlue, 70); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.DarkOrange, EnumFlowerColor.Gray, 70); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.DarkSalmon, EnumFlowerColor.SlateGray, 80); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DeepSkyBlue, 80); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.RoyalBlue, 90); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.SteelBlue, 90); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.DeepSkyBlue, 95); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.DarkViolet, EnumFlowerColor.SlateBlue, 90); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.DeepPink, EnumFlowerColor.SlateBlue, 80); + addMix(EnumFlowerColor.DodgerBlue, EnumFlowerColor.DimGray, EnumFlowerColor.SteelBlue, 95); + addMix(EnumFlowerColor.Gold, EnumFlowerColor.Aquamarine, EnumFlowerColor.YellowGreen, 90); + addMix(EnumFlowerColor.Gold, EnumFlowerColor.Brown, EnumFlowerColor.Peru, 65); + addMix(EnumFlowerColor.Gold, EnumFlowerColor.CadetBlue, EnumFlowerColor.DarkKhaki, 85); + addMix(EnumFlowerColor.Gold, EnumFlowerColor.Chocolate, EnumFlowerColor.Orange, 90); + addMix(EnumFlowerColor.Gold, EnumFlowerColor.Coral, EnumFlowerColor.Orange, 90); + addMix(EnumFlowerColor.Gold, EnumFlowerColor.Crimson, EnumFlowerColor.Chocolate, 65); + addMix(EnumFlowerColor.Gold, EnumFlowerColor.Cyan, EnumFlowerColor.PaleGreen, 80); + addMix(EnumFlowerColor.Gold, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Goldenrod, 105); + addMix(EnumFlowerColor.Gold, EnumFlowerColor.DarkGray, EnumFlowerColor.DarkKhaki, 95); + addMix(EnumFlowerColor.Gold, EnumFlowerColor.DarkGreen, EnumFlowerColor.OliveDrab, 75); + addMix(EnumFlowerColor.Gold, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Khaki, 110); + addMix(EnumFlowerColor.Gold, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.DarkKhaki, 85); + addMix(EnumFlowerColor.Gold, EnumFlowerColor.DarkOrange, EnumFlowerColor.Orange, 100); + addMix(EnumFlowerColor.Gold, EnumFlowerColor.DarkSalmon, EnumFlowerColor.Goldenrod, 90); + addMix(EnumFlowerColor.Gold, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkKhaki, 95); + addMix(EnumFlowerColor.Gold, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.Olive, 65); + addMix(EnumFlowerColor.Gold, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.LimeGreen, 80); + addMix(EnumFlowerColor.Gold, EnumFlowerColor.DeepPink, EnumFlowerColor.Coral, 55); + addMix(EnumFlowerColor.Gold, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DarkSeaGreen, 65); + addMix(EnumFlowerColor.Gold, EnumFlowerColor.DimGray, EnumFlowerColor.DarkKhaki, 80); + addMix(EnumFlowerColor.Gold, EnumFlowerColor.DodgerBlue, EnumFlowerColor.DarkSeaGreen, 60); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.Aquamarine, EnumFlowerColor.YellowGreen, 85); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.Blue, EnumFlowerColor.DarkSlateBlue, 45); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.Brown, EnumFlowerColor.Chocolate, 80); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.CadetBlue, EnumFlowerColor.DarkKhaki, 90); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.Chocolate, EnumFlowerColor.Peru, 105); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.Coral, EnumFlowerColor.DarkOrange, 100); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.Crimson, EnumFlowerColor.Chocolate, 80); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.Cyan, EnumFlowerColor.MediumAquamarine, 80); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Orange, 115); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkGray, EnumFlowerColor.DarkKhaki, 100); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkGreen, EnumFlowerColor.OliveDrab, 80); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkKhaki, EnumFlowerColor.DarkGoldenrod, 110); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.Olive, 90); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkOrange, EnumFlowerColor.Orange, 110); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkSalmon, EnumFlowerColor.SandyBrown, 100); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkKhaki, 95); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.Olive, 75); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.MediumSeaGreen, 80); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumVioletRed, 50); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.DeepPink, EnumFlowerColor.IndianRed, 65); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DarkSeaGreen, 70); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.DimGray, EnumFlowerColor.DarkGoldenrod, 90); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.DodgerBlue, EnumFlowerColor.CadetBlue, 65); + addMix(EnumFlowerColor.Goldenrod, EnumFlowerColor.Gold, EnumFlowerColor.Orange, 115); + addMix(EnumFlowerColor.Gray, EnumFlowerColor.Aquamarine, EnumFlowerColor.MediumAquamarine, 90); + addMix(EnumFlowerColor.Gray, EnumFlowerColor.Blue, EnumFlowerColor.DarkSlateBlue, 85); + addMix(EnumFlowerColor.Gray, EnumFlowerColor.CadetBlue, EnumFlowerColor.SlateGray, 105); + addMix(EnumFlowerColor.Gray, EnumFlowerColor.Chocolate, EnumFlowerColor.Peru, 100); + addMix(EnumFlowerColor.Gray, EnumFlowerColor.Coral, EnumFlowerColor.DarkSalmon, 95); + addMix(EnumFlowerColor.Gray, EnumFlowerColor.Crimson, EnumFlowerColor.IndianRed, 95); + addMix(EnumFlowerColor.Gray, EnumFlowerColor.Cyan, EnumFlowerColor.DarkTurquoise, 90); + addMix(EnumFlowerColor.Gray, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Olive, 100); + addMix(EnumFlowerColor.Gray, EnumFlowerColor.DarkGray, EnumFlowerColor.SlateGray, 115); + addMix(EnumFlowerColor.Gray, EnumFlowerColor.DarkGreen, EnumFlowerColor.DarkOliveGreen, 95); + addMix(EnumFlowerColor.Gray, EnumFlowerColor.DarkOrange, EnumFlowerColor.Peru, 95); + addMix(EnumFlowerColor.Gray, EnumFlowerColor.DarkSalmon, EnumFlowerColor.RosyBrown, 100); + addMix(EnumFlowerColor.Gray, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DimGray, 100); + addMix(EnumFlowerColor.Gray, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.CadetBlue, 95); + addMix(EnumFlowerColor.Gray, EnumFlowerColor.DarkViolet, EnumFlowerColor.Purple, 90); + addMix(EnumFlowerColor.Gray, EnumFlowerColor.DeepPink, EnumFlowerColor.MediumVioletRed, 95); + addMix(EnumFlowerColor.Gray, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.CadetBlue, 100); + addMix(EnumFlowerColor.Gray, EnumFlowerColor.DimGray, EnumFlowerColor.SlateGray, 120); + addMix(EnumFlowerColor.Gray, EnumFlowerColor.DodgerBlue, EnumFlowerColor.SteelBlue, 100); + addMix(EnumFlowerColor.Gray, EnumFlowerColor.Gold, EnumFlowerColor.DarkKhaki, 85); + addMix(EnumFlowerColor.Gray, EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkGoldenrod, 95); + addMix(EnumFlowerColor.Green, EnumFlowerColor.Aquamarine, EnumFlowerColor.MediumSeaGreen, 85); + addMix(EnumFlowerColor.Green, EnumFlowerColor.Black, EnumFlowerColor.DarkGreen, 85); + addMix(EnumFlowerColor.Green, EnumFlowerColor.Blue, EnumFlowerColor.DarkSlateBlue, 60); + addMix(EnumFlowerColor.Green, EnumFlowerColor.Brown, EnumFlowerColor.DarkOliveGreen, 60); + addMix(EnumFlowerColor.Green, EnumFlowerColor.CadetBlue, EnumFlowerColor.SeaGreen, 95); + addMix(EnumFlowerColor.Green, EnumFlowerColor.Chocolate, EnumFlowerColor.Olive, 70); + addMix(EnumFlowerColor.Green, EnumFlowerColor.Coral, EnumFlowerColor.Olive, 65); + addMix(EnumFlowerColor.Green, EnumFlowerColor.Cyan, EnumFlowerColor.MediumSeaGreen, 80); + addMix(EnumFlowerColor.Green, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.OliveDrab, 90); + addMix(EnumFlowerColor.Green, EnumFlowerColor.DarkGray, EnumFlowerColor.SeaGreen, 90); + addMix(EnumFlowerColor.Green, EnumFlowerColor.DarkGreen, EnumFlowerColor.DarkOliveGreen, 120); + addMix(EnumFlowerColor.Green, EnumFlowerColor.DarkKhaki, EnumFlowerColor.OliveDrab, 95); + addMix(EnumFlowerColor.Green, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.DarkGreen, 115); + addMix(EnumFlowerColor.Green, EnumFlowerColor.DarkOrange, EnumFlowerColor.Olive, 70); + addMix(EnumFlowerColor.Green, EnumFlowerColor.DarkSalmon, EnumFlowerColor.OliveDrab, 70); + addMix(EnumFlowerColor.Green, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.MediumSeaGreen, 100); + addMix(EnumFlowerColor.Green, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.DarkSlateGray, 70); + addMix(EnumFlowerColor.Green, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkGreen, 95); + addMix(EnumFlowerColor.Green, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.MediumSeaGreen, 85); + addMix(EnumFlowerColor.Green, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.SeaGreen, 70); + addMix(EnumFlowerColor.Green, EnumFlowerColor.DimGray, EnumFlowerColor.DarkGreen, 100); + addMix(EnumFlowerColor.Green, EnumFlowerColor.DodgerBlue, EnumFlowerColor.Teal, 65); + addMix(EnumFlowerColor.Green, EnumFlowerColor.Gold, EnumFlowerColor.YellowGreen, 80); + addMix(EnumFlowerColor.Green, EnumFlowerColor.Goldenrod, EnumFlowerColor.OliveDrab, 85); + addMix(EnumFlowerColor.Green, EnumFlowerColor.Gray, EnumFlowerColor.SeaGreen, 100); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.Aquamarine, EnumFlowerColor.Thistle, 50); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.Blue, EnumFlowerColor.DarkViolet, 80); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.Brown, EnumFlowerColor.IndianRed, 90); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.CadetBlue, EnumFlowerColor.Plum, 85); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.Chocolate, EnumFlowerColor.IndianRed, 85); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.Coral, EnumFlowerColor.Salmon, 95); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.Crimson, EnumFlowerColor.DeepPink, 100); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.Cyan, EnumFlowerColor.SkyBlue, 55); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Salmon, 70); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.DarkGray, EnumFlowerColor.PaleVioletRed, 100); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.DarkKhaki, EnumFlowerColor.RosyBrown, 70); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.IndianRed, 60); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.DarkOrange, EnumFlowerColor.Coral, 80); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.DarkSalmon, EnumFlowerColor.PaleVioletRed, 100); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.RosyBrown, 60); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.MediumOrchid, 85); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.DodgerBlue, 60); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumOrchid, 95); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.DeepPink, EnumFlowerColor.PaleVioletRed, 115); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DodgerBlue, 65); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.DimGray, EnumFlowerColor.PaleVioletRed, 95); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.DodgerBlue, EnumFlowerColor.MediumPurple, 85); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.Gold, EnumFlowerColor.SandyBrown, 60); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkSalmon, 70); + addMix(EnumFlowerColor.HotPink, EnumFlowerColor.Gray, EnumFlowerColor.PaleVioletRed, 100); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.Aquamarine, EnumFlowerColor.DarkGray, 55); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.Black, EnumFlowerColor.Maroon, 80); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.Blue, EnumFlowerColor.DarkViolet, 80); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.Brown, EnumFlowerColor.Crimson, 110); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.CadetBlue, EnumFlowerColor.RosyBrown, 80); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.Chocolate, EnumFlowerColor.Red, 105); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.Coral, EnumFlowerColor.Salmon, 110); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.Crimson, EnumFlowerColor.Brown, 115); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.Cyan, EnumFlowerColor.CadetBlue, 60); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Chocolate, 90); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.DarkGray, EnumFlowerColor.RosyBrown, 100); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.DarkGreen, EnumFlowerColor.DarkOliveGreen, 60); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Peru, 85); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.Sienna, 80); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.DarkOrange, EnumFlowerColor.Chocolate, 95); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.DarkSalmon, EnumFlowerColor.Salmon, 110); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.Peru, 75); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.MediumVioletRed, 90); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.CadetBlue, 65); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumVioletRed, 90); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.DeepPink, EnumFlowerColor.PaleVioletRed, 110); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.SteelBlue, 70); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.DodgerBlue, EnumFlowerColor.MediumPurple, 80); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.Gold, EnumFlowerColor.Orange, 75); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.Goldenrod, EnumFlowerColor.Peru, 85); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.Gray, EnumFlowerColor.RosyBrown, 100); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.Green, EnumFlowerColor.DarkOliveGreen, 60); + addMix(EnumFlowerColor.IndianRed, EnumFlowerColor.HotPink, EnumFlowerColor.PaleVioletRed, 105); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.Black, EnumFlowerColor.Navy, 95); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.Blue, EnumFlowerColor.Navy, 110); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.Brown, EnumFlowerColor.Purple, 90); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.CadetBlue, EnumFlowerColor.DarkSlateBlue, 80); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.Coral, EnumFlowerColor.MediumVioletRed, 65); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.Crimson, EnumFlowerColor.Purple, 85); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Brown, 55); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.DarkGray, EnumFlowerColor.SlateBlue, 70); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.DarkOrange, EnumFlowerColor.Brown, 55); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.DarkSalmon, EnumFlowerColor.MediumVioletRed, 65); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.Navy, 115); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkSlateBlue, 100); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.RoyalBlue, 55); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.DarkViolet, EnumFlowerColor.Purple, 110); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.DeepPink, EnumFlowerColor.Purple, 90); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.RoyalBlue, 60); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.DimGray, EnumFlowerColor.DarkSlateBlue, 90); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.DodgerBlue, EnumFlowerColor.SlateBlue, 80); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.Goldenrod, EnumFlowerColor.Brown, 45); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.Gray, EnumFlowerColor.DarkSlateBlue, 85); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.Green, EnumFlowerColor.DarkSlateGray, 65); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.HotPink, EnumFlowerColor.MediumVioletRed, 80); + addMix(EnumFlowerColor.Indigo, EnumFlowerColor.IndianRed, EnumFlowerColor.Purple, 85); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.Aquamarine, EnumFlowerColor.PaleGreen, 100); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.Brown, EnumFlowerColor.Peru, 65); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.CadetBlue, EnumFlowerColor.DarkSeaGreen, 90); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.Chocolate, EnumFlowerColor.Goldenrod, 85); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.Coral, EnumFlowerColor.SandyBrown, 90); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.Crimson, EnumFlowerColor.Salmon, 65); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.Cyan, EnumFlowerColor.Aquamarine, 90); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Goldenrod, 100); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.DarkGray, EnumFlowerColor.DarkKhaki, 100); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.DarkGreen, EnumFlowerColor.OliveDrab, 75); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Wheat, 115); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.DarkKhaki, 85); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.DarkOrange, EnumFlowerColor.Goldenrod, 95); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.DarkSalmon, EnumFlowerColor.Tan, 95); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkKhaki, 105); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.Gray, 50); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkSeaGreen, 65); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.MediumAquamarine, 90); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.DeepPink, EnumFlowerColor.PaleVioletRed, 60); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.Turquoise, 75); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.DimGray, EnumFlowerColor.DarkKhaki, 85); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.DodgerBlue, EnumFlowerColor.SkyBlue, 60); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.Gold, EnumFlowerColor.Yellow, 115); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.Goldenrod, EnumFlowerColor.Gold, 110); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.Gray, EnumFlowerColor.DarkKhaki, 90); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.Green, EnumFlowerColor.YellowGreen, 85); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.HotPink, EnumFlowerColor.DarkSalmon, 65); + addMix(EnumFlowerColor.Khaki, EnumFlowerColor.IndianRed, EnumFlowerColor.SandyBrown, 75); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.Aquamarine, EnumFlowerColor.PaleTurquoise, 95); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.Blue, EnumFlowerColor.MediumPurple, 65); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.Brown, EnumFlowerColor.RosyBrown, 70); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.CadetBlue, EnumFlowerColor.SkyBlue, 95); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.Chocolate, EnumFlowerColor.DarkSalmon, 85); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.Coral, EnumFlowerColor.DarkSalmon, 90); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.Crimson, EnumFlowerColor.PaleVioletRed, 80); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.Cyan, EnumFlowerColor.PaleTurquoise, 95); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Tan, 85); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.DarkGray, EnumFlowerColor.LightGray, 110); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.DarkGreen, EnumFlowerColor.DarkSeaGreen, 65); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Wheat, 90); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.DarkGray, 75); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.DarkOrange, EnumFlowerColor.SandyBrown, 85); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.DarkSalmon, EnumFlowerColor.Pink, 95); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.PaleTurquoise, 95); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.MediumPurple, 70); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkGray, 70); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.PaleTurquoise, 95); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumOrchid, 75); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.DeepPink, EnumFlowerColor.HotPink, 85); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.SkyBlue, 95); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.DimGray, EnumFlowerColor.DarkGray, 85); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.DodgerBlue, EnumFlowerColor.LightSteelBlue, 95); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.Gold, EnumFlowerColor.Khaki, 85); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.Goldenrod, EnumFlowerColor.Tan, 85); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.Gray, EnumFlowerColor.DarkGray, 95); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.Green, EnumFlowerColor.DarkSeaGreen, 75); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.HotPink, EnumFlowerColor.Plum, 95); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.IndianRed, EnumFlowerColor.RosyBrown, 85); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.Indigo, EnumFlowerColor.MediumPurple, 55); + addMix(EnumFlowerColor.Lavender, EnumFlowerColor.Khaki, EnumFlowerColor.LemonChiffon, 90); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.Aquamarine, EnumFlowerColor.PaleGreen, 105); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.Blue, EnumFlowerColor.MediumPurple, 45); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.Brown, EnumFlowerColor.DarkSalmon, 65); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.CadetBlue, EnumFlowerColor.DarkSeaGreen, 90); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.Chocolate, EnumFlowerColor.SandyBrown, 85); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.Coral, EnumFlowerColor.SandyBrown, 90); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.Crimson, EnumFlowerColor.Salmon, 70); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.Cyan, EnumFlowerColor.Aquamarine, 95); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.DarkKhaki, 95); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.DarkGray, EnumFlowerColor.LightGray, 100); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.DarkGreen, EnumFlowerColor.DarkSeaGreen, 75); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Khaki, 110); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.DarkKhaki, 80); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.DarkOrange, EnumFlowerColor.Orange, 95); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.DarkSalmon, EnumFlowerColor.Tan, 95); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.Khaki, 105); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.DarkGray, 55); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkSeaGreen, 65); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.Turquoise, 95); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.DarkViolet, EnumFlowerColor.Violet, 50); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.DeepPink, EnumFlowerColor.HotPink, 65); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.PaleTurquoise, 80); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.DimGray, EnumFlowerColor.DarkGray, 80); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.DodgerBlue, EnumFlowerColor.SkyBlue, 70); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.Gold, EnumFlowerColor.Khaki, 105); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.Goldenrod, EnumFlowerColor.Khaki, 100); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.Gray, EnumFlowerColor.DarkGray, 90); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.Green, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.HotPink, EnumFlowerColor.Pink, 75); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.IndianRed, EnumFlowerColor.DarkSalmon, 80); + addMix(EnumFlowerColor.LemonChiffon, EnumFlowerColor.Khaki, EnumFlowerColor.Wheat, 115); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.Aquamarine, EnumFlowerColor.PaleTurquoise, 100); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.Black, EnumFlowerColor.DimGray, 45); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.Blue, EnumFlowerColor.RoyalBlue, 65); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.Brown, EnumFlowerColor.RosyBrown, 75); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.CadetBlue, EnumFlowerColor.SkyBlue, 100); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.Chocolate, EnumFlowerColor.SandyBrown, 90); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.Coral, EnumFlowerColor.DarkSalmon, 95); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.Crimson, EnumFlowerColor.PaleVioletRed, 85); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.Cyan, EnumFlowerColor.Turquoise, 100); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Tan, 95); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.DarkGray, EnumFlowerColor.LightSteelBlue, 115); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.DarkGreen, EnumFlowerColor.SeaGreen, 75); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Wheat, 105); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.DarkSeaGreen, 85); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.DarkOrange, EnumFlowerColor.SandyBrown, 95); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.DarkSalmon, EnumFlowerColor.RosyBrown, 100); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.Gray, 75); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.Turquoise, 100); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumOrchid, 75); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.DeepPink, EnumFlowerColor.HotPink, 90); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.SkyBlue, 100); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.DimGray, EnumFlowerColor.DarkGray, 95); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.DodgerBlue, EnumFlowerColor.DeepSkyBlue, 95); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.Gold, EnumFlowerColor.Khaki, 95); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkKhaki, 100); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.Gray, EnumFlowerColor.DarkGray, 100); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.Green, EnumFlowerColor.MediumSeaGreen, 85); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.HotPink, EnumFlowerColor.Plum, 95); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.IndianRed, EnumFlowerColor.RosyBrown, 90); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.Indigo, EnumFlowerColor.MediumPurple, 55); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.Khaki, EnumFlowerColor.LemonChiffon, 105); + addMix(EnumFlowerColor.LightGray, EnumFlowerColor.LemonChiffon, EnumFlowerColor.Wheat, 110); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.Aquamarine, EnumFlowerColor.Turquoise, 105); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.Black, EnumFlowerColor.DarkSlateGray, 65); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.Blue, EnumFlowerColor.RoyalBlue, 70); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.Brown, EnumFlowerColor.DimGray, 60); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.CadetBlue, EnumFlowerColor.DarkTurquoise, 120); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.Chocolate, EnumFlowerColor.OliveDrab, 75); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.Cyan, EnumFlowerColor.DarkTurquoise, 110); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.OliveDrab, 85); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DarkGray, EnumFlowerColor.CadetBlue, 105); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DarkGreen, EnumFlowerColor.SeaGreen, 90); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DarkKhaki, EnumFlowerColor.DarkSeaGreen, 95); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.SeaGreen, 95); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DarkOrange, EnumFlowerColor.OliveDrab, 75); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DarkSalmon, EnumFlowerColor.CadetBlue, 80); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.MediumAquamarine, 110); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.SteelBlue, 75); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.Teal, 90); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.Turquoise, 120); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DarkViolet, EnumFlowerColor.SlateBlue, 75); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DeepPink, EnumFlowerColor.MediumOrchid, 65); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.SkyBlue, 105); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DimGray, EnumFlowerColor.Teal, 95); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DodgerBlue, EnumFlowerColor.DeepSkyBlue, 95); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.Gold, EnumFlowerColor.YellowGreen, 85); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkSeaGreen, 85); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.Gray, EnumFlowerColor.CadetBlue, 100); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.Green, EnumFlowerColor.SeaGreen, 95); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.IndianRed, EnumFlowerColor.Gray, 70); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.Indigo, EnumFlowerColor.RoyalBlue, 65); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.Khaki, EnumFlowerColor.DarkSeaGreen, 90); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.Lavender, EnumFlowerColor.DarkTurquoise, 95); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.LemonChiffon, EnumFlowerColor.MediumAquamarine, 95); + addMix(EnumFlowerColor.LightSeaGreen, EnumFlowerColor.LightGray, EnumFlowerColor.DarkTurquoise, 100); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Aquamarine, EnumFlowerColor.PaleTurquoise, 95); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Black, EnumFlowerColor.DimGray, 55); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Blue, EnumFlowerColor.RoyalBlue, 80); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Brown, EnumFlowerColor.RosyBrown, 75); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.CadetBlue, EnumFlowerColor.SkyBlue, 105); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Chocolate, EnumFlowerColor.DarkSalmon, 85); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Coral, EnumFlowerColor.RosyBrown, 90); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Crimson, EnumFlowerColor.PaleVioletRed, 80); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Cyan, EnumFlowerColor.DarkTurquoise, 100); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.DarkKhaki, 85); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DarkGray, EnumFlowerColor.LightGray, 115); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DarkGreen, EnumFlowerColor.SeaGreen, 70); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DarkKhaki, EnumFlowerColor.DarkSeaGreen, 90); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.CadetBlue, 80); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DarkOrange, EnumFlowerColor.Tan, 85); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DarkSalmon, EnumFlowerColor.RosyBrown, 95); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.MediumAquamarine, 95); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.MediumPurple, 80); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.SlateGray, 80); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.SkyBlue, 105); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumPurple, 85); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DeepPink, EnumFlowerColor.HotPink, 85); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.SkyBlue, 110); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DimGray, EnumFlowerColor.SlateGray, 95); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DodgerBlue, EnumFlowerColor.DeepSkyBlue, 105); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Gold, EnumFlowerColor.Khaki, 80); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkKhaki, 85); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Gray, EnumFlowerColor.DarkGray, 105); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Green, EnumFlowerColor.MediumSeaGreen, 75); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.HotPink, EnumFlowerColor.Plum, 90); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.IndianRed, EnumFlowerColor.RosyBrown, 85); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Indigo, EnumFlowerColor.SlateBlue, 65); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Khaki, EnumFlowerColor.LemonChiffon, 85); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Lavender, EnumFlowerColor.LightGray, 115); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.LemonChiffon, EnumFlowerColor.LightGray, 95); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.LightGray, EnumFlowerColor.Lavender, 115); + addMix(EnumFlowerColor.LightSteelBlue, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DarkTurquoise, 100); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.Aquamarine, EnumFlowerColor.SpringGreen, 105); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.CadetBlue, EnumFlowerColor.LimeGreen, 85); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.Chocolate, EnumFlowerColor.YellowGreen, 60); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.Coral, EnumFlowerColor.YellowGreen, 55); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.Cyan, EnumFlowerColor.SpringGreen, 90); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.LimeGreen, 80); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.DarkGray, EnumFlowerColor.LimeGreen, 90); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.DarkGreen, EnumFlowerColor.LimeGreen, 80); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.DarkKhaki, EnumFlowerColor.LimeGreen, 100); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.LimeGreen, 85); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.DarkOrange, EnumFlowerColor.YellowGreen, 65); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.DarkSalmon, EnumFlowerColor.LimeGreen, 65); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.LimeGreen, 105); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.MediumSeaGreen, 50); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.MediumSeaGreen, 65); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.SpringGreen, 90); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.SpringGreen, 65); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.DimGray, EnumFlowerColor.LimeGreen, 80); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.DodgerBlue, EnumFlowerColor.MediumSeaGreen, 55); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.Gold, EnumFlowerColor.YellowGreen, 95); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.Goldenrod, EnumFlowerColor.LimeGreen, 85); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.Gray, EnumFlowerColor.LimeGreen, 85); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.Green, EnumFlowerColor.LimeGreen, 90); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.IndianRed, EnumFlowerColor.LimeGreen, 45); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.Khaki, EnumFlowerColor.PaleGreen, 100); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.Lavender, EnumFlowerColor.PaleGreen, 85); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.LemonChiffon, EnumFlowerColor.PaleGreen, 100); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.LightGray, EnumFlowerColor.SpringGreen, 95); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.LimeGreen, 90); + addMix(EnumFlowerColor.Lime, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.SpringGreen, 80); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.Aquamarine, EnumFlowerColor.SpringGreen, 105); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.Black, EnumFlowerColor.DarkGreen, 55); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.Blue, EnumFlowerColor.SteelBlue, 50); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.Brown, EnumFlowerColor.DarkOliveGreen, 45); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.CadetBlue, EnumFlowerColor.MediumSeaGreen, 95); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.Chocolate, EnumFlowerColor.OliveDrab, 65); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.Coral, EnumFlowerColor.DarkKhaki, 60); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.Cyan, EnumFlowerColor.SpringGreen, 90); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.OliveDrab, 90); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.DarkGray, EnumFlowerColor.MediumSeaGreen, 95); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.DarkGreen, EnumFlowerColor.Green, 90); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.DarkKhaki, EnumFlowerColor.YellowGreen, 105); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.OliveDrab, 95); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.DarkOrange, EnumFlowerColor.YellowGreen, 70); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.DarkSalmon, EnumFlowerColor.YellowGreen, 70); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.MediumSeaGreen, 110); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.SeaGreen, 55); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.SeaGreen, 75); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.MediumSeaGreen, 95); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.DarkViolet, EnumFlowerColor.DimGray, 55); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.MediumAquamarine, 70); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.DimGray, EnumFlowerColor.SeaGreen, 85); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.DodgerBlue, EnumFlowerColor.LightSeaGreen, 65); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.Gold, EnumFlowerColor.YellowGreen, 95); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.Goldenrod, EnumFlowerColor.YellowGreen, 90); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.Gray, EnumFlowerColor.MediumSeaGreen, 90); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.Green, EnumFlowerColor.MediumSeaGreen, 105); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.IndianRed, EnumFlowerColor.OliveDrab, 55); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.Indigo, EnumFlowerColor.DarkSlateGray, 50); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.Khaki, EnumFlowerColor.YellowGreen, 100); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.Lavender, EnumFlowerColor.DarkSeaGreen, 85); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.LemonChiffon, EnumFlowerColor.PaleGreen, 100); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.LightGray, EnumFlowerColor.DarkSeaGreen, 95); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.MediumSeaGreen, 100); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DarkSeaGreen, 85); + addMix(EnumFlowerColor.LimeGreen, EnumFlowerColor.Lime, EnumFlowerColor.SpringGreen, 115); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.Aquamarine, EnumFlowerColor.Violet, 70); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.Black, EnumFlowerColor.Purple, 70); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.Blue, EnumFlowerColor.DarkViolet, 95); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.Brown, EnumFlowerColor.MediumVioletRed, 85); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.CadetBlue, EnumFlowerColor.MediumOrchid, 95); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.Chocolate, EnumFlowerColor.DeepPink, 75); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.Coral, EnumFlowerColor.DeepPink, 80); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.Crimson, EnumFlowerColor.DeepPink, 90); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.Cyan, EnumFlowerColor.MediumPurple, 65); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.DeepPink, 60); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.DarkGray, EnumFlowerColor.MediumOrchid, 95); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.DarkKhaki, EnumFlowerColor.HotPink, 55); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.MediumVioletRed, 50); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.DarkOrange, EnumFlowerColor.DeepPink, 65); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.DarkSalmon, EnumFlowerColor.HotPink, 85); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.MediumOrchid, 50); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.DarkViolet, 90); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkViolet, 90); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.MediumPurple, 75); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumOrchid, 105); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.DeepPink, EnumFlowerColor.HotPink, 110); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.MediumPurple, 70); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.DimGray, EnumFlowerColor.MediumOrchid, 90); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.DodgerBlue, EnumFlowerColor.SlateBlue, 85); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.Goldenrod, EnumFlowerColor.DeepPink, 55); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.Gray, EnumFlowerColor.MediumOrchid, 95); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.HotPink, EnumFlowerColor.Violet, 110); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.IndianRed, EnumFlowerColor.DeepPink, 95); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.Indigo, EnumFlowerColor.DarkViolet, 90); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.Khaki, EnumFlowerColor.HotPink, 50); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.Lavender, EnumFlowerColor.Violet, 90); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.LemonChiffon, EnumFlowerColor.Violet, 60); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.LightGray, EnumFlowerColor.Violet, 90); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.MediumPurple, 80); + addMix(EnumFlowerColor.Magenta, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.MediumOrchid, 95); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.Blue, EnumFlowerColor.Indigo, 80); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.Chocolate, EnumFlowerColor.Sienna, 95); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.Coral, EnumFlowerColor.Sienna, 85); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.Crimson, EnumFlowerColor.Brown, 105); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Sienna, 85); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.DarkGray, EnumFlowerColor.Brown, 75); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Sienna, 65); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.DarkOrange, EnumFlowerColor.Sienna, 80); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.DarkSalmon, EnumFlowerColor.Brown, 80); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.Sienna, 55); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.DarkSlateGray, 50); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.DarkViolet, EnumFlowerColor.Purple, 85); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.DeepPink, EnumFlowerColor.Crimson, 90); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.RoyalBlue, 50); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.DimGray, EnumFlowerColor.Brown, 95); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.DodgerBlue, EnumFlowerColor.DarkSlateBlue, 70); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.Gold, EnumFlowerColor.Chocolate, 55); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.Goldenrod, EnumFlowerColor.Sienna, 70); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.Gray, EnumFlowerColor.Brown, 90); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.Green, EnumFlowerColor.Olive, 60); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.HotPink, EnumFlowerColor.Crimson, 80); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.IndianRed, EnumFlowerColor.Brown, 100); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.Indigo, EnumFlowerColor.Purple, 90); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.Khaki, EnumFlowerColor.Chocolate, 55); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.Lavender, EnumFlowerColor.RosyBrown, 60); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.LemonChiffon, EnumFlowerColor.DarkSalmon, 55); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.LightGray, EnumFlowerColor.IndianRed, 65); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DimGray, 60); + addMix(EnumFlowerColor.Maroon, EnumFlowerColor.Magenta, EnumFlowerColor.MediumVioletRed, 75); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Aquamarine, EnumFlowerColor.Turquoise, 115); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Black, EnumFlowerColor.DarkSlateGray, 55); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Blue, EnumFlowerColor.RoyalBlue, 60); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Brown, EnumFlowerColor.Gray, 55); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.CadetBlue, EnumFlowerColor.LightSeaGreen, 110); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Chocolate, EnumFlowerColor.DarkKhaki, 75); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Coral, EnumFlowerColor.Tan, 70); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Crimson, EnumFlowerColor.RosyBrown, 55); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Cyan, EnumFlowerColor.Turquoise, 110); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.DarkSeaGreen, 85); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkGray, EnumFlowerColor.DarkSeaGreen, 100); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkGreen, EnumFlowerColor.SeaGreen, 85); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkKhaki, EnumFlowerColor.DarkSeaGreen, 105); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.SeaGreen, 90); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkOrange, EnumFlowerColor.DarkKhaki, 75); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkSalmon, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.MediumSeaGreen, 115); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.SlateGray, 65); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.Teal, 80); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.Turquoise, 115); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkViolet, EnumFlowerColor.SlateBlue, 70); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DeepPink, EnumFlowerColor.PaleVioletRed, 45); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DarkTurquoise, 95); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DimGray, EnumFlowerColor.CadetBlue, 90); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DodgerBlue, EnumFlowerColor.DeepSkyBlue, 85); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Gold, EnumFlowerColor.YellowGreen, 90); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkKhaki, 90); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Gray, EnumFlowerColor.CadetBlue, 95); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Green, EnumFlowerColor.MediumSeaGreen, 95); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.HotPink, EnumFlowerColor.Thistle, 55); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.IndianRed, EnumFlowerColor.DarkGray, 65); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Indigo, EnumFlowerColor.SlateBlue, 55); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Khaki, EnumFlowerColor.DarkSeaGreen, 100); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Lavender, EnumFlowerColor.PaleTurquoise, 95); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.LemonChiffon, EnumFlowerColor.DarkSeaGreen, 100); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.LightGray, EnumFlowerColor.PaleTurquoise, 100); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.Turquoise, 115); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.PaleTurquoise, 100); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Lime, EnumFlowerColor.LimeGreen, 100); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.LimeGreen, EnumFlowerColor.MediumSeaGreen, 110); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Magenta, EnumFlowerColor.MediumOrchid, 75); + addMix(EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Maroon, EnumFlowerColor.DimGray, 50); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.Aquamarine, EnumFlowerColor.LightSteelBlue, 70); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.Black, EnumFlowerColor.Purple, 75); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.Blue, EnumFlowerColor.DarkViolet, 100); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.Brown, EnumFlowerColor.MediumVioletRed, 90); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.CadetBlue, EnumFlowerColor.MediumPurple, 95); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.Chocolate, EnumFlowerColor.PaleVioletRed, 80); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.Coral, EnumFlowerColor.PaleVioletRed, 85); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.Crimson, EnumFlowerColor.MediumVioletRed, 95); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.Cyan, EnumFlowerColor.DodgerBlue, 70); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.IndianRed, 65); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.DarkGray, EnumFlowerColor.Plum, 95); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.DarkKhaki, EnumFlowerColor.RosyBrown, 60); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.DarkOrange, EnumFlowerColor.IndianRed, 70); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.DarkSalmon, EnumFlowerColor.PaleVioletRed, 85); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.Plum, 55); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.SlateBlue, 100); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkSlateBlue, 95); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.DodgerBlue, 75); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.DeepPink, EnumFlowerColor.MediumVioletRed, 110); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DodgerBlue, 75); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.DimGray, EnumFlowerColor.MediumPurple, 95); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.DodgerBlue, EnumFlowerColor.RoyalBlue, 95); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.Gold, EnumFlowerColor.SandyBrown, 50); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.Goldenrod, EnumFlowerColor.RosyBrown, 60); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.Gray, EnumFlowerColor.MediumPurple, 100); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.HotPink, EnumFlowerColor.Violet, 110); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.IndianRed, EnumFlowerColor.MediumVioletRed, 95); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.Indigo, EnumFlowerColor.DarkViolet, 100); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.Khaki, EnumFlowerColor.RosyBrown, 55); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.Lavender, EnumFlowerColor.Plum, 90); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.LemonChiffon, EnumFlowerColor.Plum, 65); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.LightGray, EnumFlowerColor.Plum, 90); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.SteelBlue, 80); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Plum, 95); + addMix(EnumFlowerColor.MediumOrchid, EnumFlowerColor.Maroon, EnumFlowerColor.MediumVioletRed, 80); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.Aquamarine, EnumFlowerColor.SkyBlue, 75); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.Black, EnumFlowerColor.DarkSlateBlue, 75); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.Blue, EnumFlowerColor.SlateBlue, 100); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.Brown, EnumFlowerColor.MediumVioletRed, 85); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.CadetBlue, EnumFlowerColor.SlateGray, 95); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.Chocolate, EnumFlowerColor.PaleVioletRed, 80); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.Coral, EnumFlowerColor.PaleVioletRed, 80); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.Crimson, EnumFlowerColor.MediumVioletRed, 90); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.Cyan, EnumFlowerColor.DeepSkyBlue, 75); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.RosyBrown, 65); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.DarkGreen, EnumFlowerColor.DarkSlateGray, 70); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.DarkKhaki, EnumFlowerColor.RosyBrown, 65); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.DimGray, 65); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.DarkOrange, EnumFlowerColor.DarkSalmon, 70); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.DarkSalmon, EnumFlowerColor.PaleVioletRed, 85); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.SlateGray, 80); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.SlateBlue, 105); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.SlateBlue, 95); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.DodgerBlue, 85); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.DarkViolet, EnumFlowerColor.SlateBlue, 110); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.DeepPink, EnumFlowerColor.MediumOrchid, 100); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DodgerBlue, 90); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.DimGray, EnumFlowerColor.SlateBlue, 100); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.DodgerBlue, EnumFlowerColor.RoyalBlue, 105); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.Gold, EnumFlowerColor.Tan, 55); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.Goldenrod, EnumFlowerColor.RosyBrown, 65); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.Green, EnumFlowerColor.Teal, 70); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.HotPink, EnumFlowerColor.MediumOrchid, 105); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.IndianRed, EnumFlowerColor.PaleVioletRed, 95); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.Indigo, EnumFlowerColor.DarkViolet, 95); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.Khaki, EnumFlowerColor.Thistle, 60); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.Lavender, EnumFlowerColor.Plum, 95); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.LemonChiffon, EnumFlowerColor.Thistle, 65); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.LightGray, EnumFlowerColor.Plum, 90); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.SteelBlue, 85); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.Lime, EnumFlowerColor.MediumSeaGreen, 60); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.LimeGreen, EnumFlowerColor.CadetBlue, 65); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.Magenta, EnumFlowerColor.MediumOrchid, 110); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.Maroon, EnumFlowerColor.Purple, 80); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DodgerBlue, 80); + addMix(EnumFlowerColor.MediumPurple, EnumFlowerColor.MediumOrchid, EnumFlowerColor.SlateBlue, 115); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.Aquamarine, EnumFlowerColor.MediumAquamarine, 105); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.Black, EnumFlowerColor.DarkGreen, 65); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.Blue, EnumFlowerColor.RoyalBlue, 60); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.Brown, EnumFlowerColor.DarkOliveGreen, 55); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.CadetBlue, EnumFlowerColor.LightSeaGreen, 105); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.Chocolate, EnumFlowerColor.OliveDrab, 70); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.Coral, EnumFlowerColor.DarkKhaki, 65); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.Crimson, EnumFlowerColor.Sienna, 50); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.Cyan, EnumFlowerColor.MediumAquamarine, 100); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.OliveDrab, 90); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkGray, EnumFlowerColor.DarkSeaGreen, 100); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkGreen, EnumFlowerColor.SeaGreen, 95); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkKhaki, EnumFlowerColor.DarkSeaGreen, 105); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.SeaGreen, 100); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkOrange, EnumFlowerColor.DarkKhaki, 75); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkSalmon, EnumFlowerColor.DarkSeaGreen, 75); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.MediumAquamarine, 115); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.Teal, 70); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.SeaGreen, 85); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.MediumAquamarine, 105); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkViolet, EnumFlowerColor.SlateBlue, 65); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.LightSeaGreen, 85); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DimGray, EnumFlowerColor.SeaGreen, 95); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DodgerBlue, EnumFlowerColor.CadetBlue, 75); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.Gold, EnumFlowerColor.YellowGreen, 90); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.Goldenrod, EnumFlowerColor.YellowGreen, 90); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.Gray, EnumFlowerColor.SeaGreen, 100); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.Green, EnumFlowerColor.SeaGreen, 105); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.HotPink, EnumFlowerColor.Gray, 45); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.Indigo, EnumFlowerColor.DarkSlateBlue, 60); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.Khaki, EnumFlowerColor.DarkSeaGreen, 95); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.Lavender, EnumFlowerColor.MediumAquamarine, 90); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.LemonChiffon, EnumFlowerColor.DarkSeaGreen, 95); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.LightGray, EnumFlowerColor.MediumAquamarine, 95); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.MediumAquamarine, 110); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.MediumAquamarine, 90); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.Lime, EnumFlowerColor.LimeGreen, 105); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.Magenta, EnumFlowerColor.MediumOrchid, 70); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.Maroon, EnumFlowerColor.DarkOliveGreen, 50); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkSeaGreen, 115); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.MediumOrchid, EnumFlowerColor.SlateGray, 75); + addMix(EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.MediumPurple, EnumFlowerColor.SlateGray, 75); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Black, EnumFlowerColor.Purple, 85); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Blue, EnumFlowerColor.DarkViolet, 95); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Chocolate, EnumFlowerColor.Crimson, 85); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Coral, EnumFlowerColor.IndianRed, 85); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Crimson, EnumFlowerColor.DeepPink, 105); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Cyan, EnumFlowerColor.SteelBlue, 45); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.IndianRed, 70); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.DarkGray, EnumFlowerColor.PaleVioletRed, 90); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.DarkKhaki, EnumFlowerColor.PaleVioletRed, 60); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.DarkOrange, EnumFlowerColor.IndianRed, 70); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.DarkSalmon, EnumFlowerColor.PaleVioletRed, 90); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.PaleVioletRed, 55); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.Purple, 100); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.Purple, 100); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.RoyalBlue, 55); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.DarkViolet, EnumFlowerColor.Purple, 110); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.SlateBlue, 60); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.DimGray, EnumFlowerColor.Purple, 100); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.DodgerBlue, EnumFlowerColor.SlateBlue, 80); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Gold, EnumFlowerColor.Coral, 50); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Goldenrod, EnumFlowerColor.IndianRed, 60); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.HotPink, EnumFlowerColor.DeepPink, 105); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.IndianRed, EnumFlowerColor.DeepPink, 105); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Indigo, EnumFlowerColor.Purple, 100); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Khaki, EnumFlowerColor.PaleVioletRed, 55); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Lavender, EnumFlowerColor.Violet, 80); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.LemonChiffon, EnumFlowerColor.PaleVioletRed, 60); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.LightGray, EnumFlowerColor.PaleVioletRed, 85); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.SlateBlue, 65); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.MediumOrchid, 80); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Magenta, EnumFlowerColor.MediumOrchid, 105); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Maroon, EnumFlowerColor.Brown, 95); + addMix(EnumFlowerColor.MediumVioletRed, EnumFlowerColor.MediumPurple, EnumFlowerColor.MediumOrchid, 105); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.Aquamarine, EnumFlowerColor.PaleTurquoise, 90); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.Blue, EnumFlowerColor.MediumPurple, 65); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.Brown, EnumFlowerColor.RosyBrown, 75); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.CadetBlue, EnumFlowerColor.LightGray, 85); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.Chocolate, EnumFlowerColor.DarkSalmon, 90); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.Coral, EnumFlowerColor.DarkSalmon, 100); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.Crimson, EnumFlowerColor.PaleVioletRed, 85); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.Cyan, EnumFlowerColor.PaleTurquoise, 90); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Tan, 90); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.DarkGray, EnumFlowerColor.LightGray, 105); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.DarkGreen, EnumFlowerColor.DarkSeaGreen, 65); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Wheat, 100); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.DarkKhaki, 75); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.DarkOrange, EnumFlowerColor.SandyBrown, 95); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.DarkSalmon, EnumFlowerColor.Pink, 105); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.LemonChiffon, 90); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.Plum, 65); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkGray, 65); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.PaleTurquoise, 90); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.DarkViolet, EnumFlowerColor.Violet, 70); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.DeepPink, EnumFlowerColor.HotPink, 90); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.SkyBlue, 90); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.DimGray, EnumFlowerColor.DarkGray, 85); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.DodgerBlue, EnumFlowerColor.LightSteelBlue, 85); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.Gold, EnumFlowerColor.Khaki, 95); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.Goldenrod, EnumFlowerColor.Tan, 95); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.Gray, EnumFlowerColor.DarkGray, 95); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.Green, EnumFlowerColor.DarkSeaGreen, 70); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.HotPink, EnumFlowerColor.Pink, 95); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.IndianRed, EnumFlowerColor.RosyBrown, 90); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.Indigo, EnumFlowerColor.MediumOrchid, 50); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.Khaki, EnumFlowerColor.Wheat, 100); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.LemonChiffon, EnumFlowerColor.Wheat, 105); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.PaleTurquoise, 85); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Lavender, 105); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.Lime, EnumFlowerColor.PaleGreen, 80); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.LimeGreen, EnumFlowerColor.PaleGreen, 80); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.Magenta, EnumFlowerColor.Violet, 85); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.Maroon, EnumFlowerColor.IndianRed, 60); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.PaleTurquoise, 90); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.MediumOrchid, EnumFlowerColor.Plum, 85); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.MediumPurple, EnumFlowerColor.Plum, 85); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkSeaGreen, 85); + addMix(EnumFlowerColor.MistyRose, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.HotPink, 80); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.Blue, EnumFlowerColor.Indigo, 110); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.Brown, EnumFlowerColor.Purple, 85); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.CadetBlue, EnumFlowerColor.DarkSlateBlue, 75); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.Coral, EnumFlowerColor.Purple, 60); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.Crimson, EnumFlowerColor.Purple, 80); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.DarkGray, EnumFlowerColor.DarkSlateBlue, 65); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.DarkGreen, EnumFlowerColor.DarkSlateGray, 65); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.DarkSlateBlue, 55); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.DarkOrange, EnumFlowerColor.Brown, 50); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.RoyalBlue, 55); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.Indigo, 110); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkSlateBlue, 95); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.SteelBlue, 55); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.DarkViolet, EnumFlowerColor.Indigo, 105); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.DeepPink, EnumFlowerColor.Purple, 80); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.RoyalBlue, 60); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.DimGray, EnumFlowerColor.DarkSlateBlue, 90); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.DodgerBlue, EnumFlowerColor.DarkSlateBlue, 80); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.Gray, EnumFlowerColor.DarkSlateBlue, 80); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.Green, EnumFlowerColor.Teal, 60); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.HotPink, EnumFlowerColor.Purple, 75); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.IndianRed, EnumFlowerColor.Purple, 80); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.LightGray, EnumFlowerColor.SlateBlue, 50); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.RoyalBlue, 65); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.SlateBlue, 60); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.Magenta, EnumFlowerColor.DarkViolet, 85); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.Maroon, EnumFlowerColor.Purple, 85); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.RoyalBlue, 50); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.MediumOrchid, EnumFlowerColor.DarkSlateBlue, 90); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.MediumPurple, EnumFlowerColor.DarkSlateBlue, 90); + addMix(EnumFlowerColor.Navy, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Indigo, 95); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.Aquamarine, EnumFlowerColor.DarkSeaGreen, 85); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.Blue, EnumFlowerColor.DarkSlateBlue, 45); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.Brown, EnumFlowerColor.Sienna, 80); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.CadetBlue, EnumFlowerColor.OliveDrab, 95); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.Chocolate, EnumFlowerColor.DarkGoldenrod, 95); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.Coral, EnumFlowerColor.Peru, 85); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.Crimson, EnumFlowerColor.Sienna, 75); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.Cyan, EnumFlowerColor.MediumSeaGreen, 80); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.DarkGray, EnumFlowerColor.OliveDrab, 95); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.DarkGreen, EnumFlowerColor.Green, 105); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.DarkKhaki, EnumFlowerColor.OliveDrab, 110); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.OliveDrab, 110); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.DarkOrange, EnumFlowerColor.DarkGoldenrod, 95); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.DarkSalmon, EnumFlowerColor.DarkGoldenrod, 90); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.OliveDrab, 100); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.DimGray, 60); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkOliveGreen, 90); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.MediumSeaGreen, 85); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumVioletRed, 50); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.DeepPink, EnumFlowerColor.IndianRed, 60); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.MediumSeaGreen, 70); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.DimGray, EnumFlowerColor.DarkOliveGreen, 100); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.DodgerBlue, EnumFlowerColor.Teal, 60); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.Gold, EnumFlowerColor.Goldenrod, 95); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkGoldenrod, 105); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.Gray, EnumFlowerColor.OliveDrab, 100); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.Green, EnumFlowerColor.OliveDrab, 110); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.HotPink, EnumFlowerColor.IndianRed, 60); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.IndianRed, EnumFlowerColor.Peru, 80); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.Khaki, EnumFlowerColor.DarkKhaki, 95); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.Lavender, EnumFlowerColor.DarkKhaki, 75); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.LemonChiffon, EnumFlowerColor.DarkKhaki, 90); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.LightGray, EnumFlowerColor.DarkKhaki, 90); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.SeaGreen, 90); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DarkKhaki, 80); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.Lime, EnumFlowerColor.LimeGreen, 90); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.LimeGreen, EnumFlowerColor.OliveDrab, 100); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.Magenta, EnumFlowerColor.MediumVioletRed, 45); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.Maroon, EnumFlowerColor.Sienna, 80); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.OliveDrab, 95); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.MediumOrchid, EnumFlowerColor.IndianRed, 55); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.MediumPurple, EnumFlowerColor.Gray, 60); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.OliveDrab, 100); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Brown, 60); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.MistyRose, EnumFlowerColor.DarkKhaki, 85); + addMix(EnumFlowerColor.Olive, EnumFlowerColor.Navy, EnumFlowerColor.Gray, 50); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.Aquamarine, EnumFlowerColor.DarkSeaGreen, 90); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.Black, EnumFlowerColor.DarkOliveGreen, 75); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.Brown, EnumFlowerColor.Sienna, 70); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.CadetBlue, EnumFlowerColor.SeaGreen, 95); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.Chocolate, EnumFlowerColor.DarkGoldenrod, 85); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.Coral, EnumFlowerColor.DarkGoldenrod, 75); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.Crimson, EnumFlowerColor.Sienna, 65); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.Cyan, EnumFlowerColor.MediumAquamarine, 85); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Olive, 100); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.DarkGray, EnumFlowerColor.DarkSeaGreen, 100); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.DarkGreen, EnumFlowerColor.Green, 105); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Olive, 110); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.Olive, 115); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.DarkOrange, EnumFlowerColor.DarkGoldenrod, 85); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.DarkSalmon, EnumFlowerColor.DarkGoldenrod, 85); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.MediumSeaGreen, 110); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.DimGray, 55); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkOliveGreen, 90); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.MediumSeaGreen, 90); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.DeepPink, EnumFlowerColor.IndianRed, 50); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.LightSeaGreen, 70); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.DimGray, EnumFlowerColor.DarkOliveGreen, 100); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.DodgerBlue, EnumFlowerColor.CadetBlue, 65); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.Gold, EnumFlowerColor.DarkKhaki, 95); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.Goldenrod, EnumFlowerColor.Olive, 100); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.Gray, EnumFlowerColor.DarkOliveGreen, 100); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.Green, EnumFlowerColor.SeaGreen, 115); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.HotPink, EnumFlowerColor.RosyBrown, 55); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.IndianRed, EnumFlowerColor.DarkGoldenrod, 70); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.Khaki, EnumFlowerColor.DarkKhaki, 100); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.Lavender, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.LemonChiffon, EnumFlowerColor.DarkKhaki, 90); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.LightGray, EnumFlowerColor.DarkSeaGreen, 90); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.MediumSeaGreen, 95); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.Lime, EnumFlowerColor.LimeGreen, 95); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.LimeGreen, EnumFlowerColor.MediumSeaGreen, 105); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.Maroon, EnumFlowerColor.Sienna, 70); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.MediumSeaGreen, 100); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.MediumOrchid, EnumFlowerColor.RosyBrown, 50); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.MediumPurple, EnumFlowerColor.Gray, 55); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.SeaGreen, 110); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Brown, 50); + addMix(EnumFlowerColor.OliveDrab, EnumFlowerColor.MistyRose, EnumFlowerColor.DarkKhaki, 80); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.Aquamarine, EnumFlowerColor.YellowGreen, 80); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.Blue, EnumFlowerColor.Plum, 45); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.Brown, EnumFlowerColor.Chocolate, 80); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.CadetBlue, EnumFlowerColor.DarkKhaki, 85); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.Chocolate, EnumFlowerColor.DarkOrange, 105); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.Coral, EnumFlowerColor.DarkOrange, 105); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.Crimson, EnumFlowerColor.Chocolate, 80); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.Cyan, EnumFlowerColor.DarkSeaGreen, 75); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Goldenrod, 110); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.DarkGray, EnumFlowerColor.Goldenrod, 95); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.DarkGreen, EnumFlowerColor.Olive, 70); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Goldenrod, 105); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.DarkGoldenrod, 85); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.DarkOrange, EnumFlowerColor.SandyBrown, 120); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.DarkSalmon, EnumFlowerColor.SandyBrown, 105); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkKhaki, 90); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.Peru, 55); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkGoldenrod, 70); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.DarkViolet, EnumFlowerColor.IndianRed, 55); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.DeepPink, EnumFlowerColor.Salmon, 70); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DarkSeaGreen, 70); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.DimGray, EnumFlowerColor.DarkGoldenrod, 85); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.DodgerBlue, EnumFlowerColor.DarkSeaGreen, 65); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.Gold, EnumFlowerColor.Goldenrod, 110); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkGoldenrod, 120); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.Gray, EnumFlowerColor.DarkGoldenrod, 90); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.Green, EnumFlowerColor.OliveDrab, 75); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.HotPink, EnumFlowerColor.Coral, 75); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.IndianRed, EnumFlowerColor.Peru, 90); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.Khaki, EnumFlowerColor.Gold, 105); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.Lavender, EnumFlowerColor.Tan, 85); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.LemonChiffon, EnumFlowerColor.Gold, 100); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.LightGray, EnumFlowerColor.Goldenrod, 95); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DarkKhaki, 80); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Tan, 85); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.Lime, EnumFlowerColor.YellowGreen, 75); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.LimeGreen, EnumFlowerColor.YellowGreen, 80); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.Magenta, EnumFlowerColor.PaleVioletRed, 60); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.Maroon, EnumFlowerColor.Chocolate, 70); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkKhaki, 80); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.MediumOrchid, EnumFlowerColor.Salmon, 65); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.MediumPurple, EnumFlowerColor.DarkSalmon, 65); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkKhaki, 80); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Red, 65); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.MistyRose, EnumFlowerColor.SandyBrown, 95); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.Olive, EnumFlowerColor.DarkGoldenrod, 95); + addMix(EnumFlowerColor.Orange, EnumFlowerColor.OliveDrab, EnumFlowerColor.Goldenrod, 90); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.Aquamarine, EnumFlowerColor.SpringGreen, 115); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.Blue, EnumFlowerColor.SteelBlue, 50); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.Brown, EnumFlowerColor.DarkKhaki, 45); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.CadetBlue, EnumFlowerColor.MediumAquamarine, 95); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.Chocolate, EnumFlowerColor.DarkKhaki, 65); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.Coral, EnumFlowerColor.DarkKhaki, 65); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.Cyan, EnumFlowerColor.Aquamarine, 100); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.YellowGreen, 85); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkGray, EnumFlowerColor.DarkSeaGreen, 95); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkGreen, EnumFlowerColor.MediumSeaGreen, 80); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkKhaki, EnumFlowerColor.YellowGreen, 105); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.DarkSeaGreen, 85); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkOrange, EnumFlowerColor.DarkKhaki, 75); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkSalmon, EnumFlowerColor.DarkKhaki, 75); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.MediumAquamarine, 110); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.CadetBlue, 55); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.MediumSeaGreen, 70); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.MediumAquamarine, 95); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumPurple, 55); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.Turquoise, 75); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.DimGray, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.DodgerBlue, EnumFlowerColor.DarkTurquoise, 65); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.Gold, EnumFlowerColor.YellowGreen, 95); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.Goldenrod, EnumFlowerColor.YellowGreen, 90); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.Gray, EnumFlowerColor.DarkSeaGreen, 90); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.Green, EnumFlowerColor.LimeGreen, 90); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.IndianRed, EnumFlowerColor.DarkKhaki, 55); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.Khaki, EnumFlowerColor.YellowGreen, 105); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.Lavender, EnumFlowerColor.Aquamarine, 90); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.LightGray, EnumFlowerColor.DarkSeaGreen, 100); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.MediumAquamarine, 100); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.MediumAquamarine, 90); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.Lime, EnumFlowerColor.SpringGreen, 115); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.LimeGreen, EnumFlowerColor.SpringGreen, 115); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Aquamarine, 110); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.MediumOrchid, EnumFlowerColor.DarkGray, 65); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.MediumPurple, EnumFlowerColor.CadetBlue, 65); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.LimeGreen, 110); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.MistyRose, EnumFlowerColor.LemonChiffon, 90); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.Olive, EnumFlowerColor.YellowGreen, 90); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.OliveDrab, EnumFlowerColor.LimeGreen, 95); + addMix(EnumFlowerColor.PaleGreen, EnumFlowerColor.Orange, EnumFlowerColor.Khaki, 80); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Aquamarine, EnumFlowerColor.Turquoise, 110); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Blue, EnumFlowerColor.RoyalBlue, 65); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Brown, EnumFlowerColor.RosyBrown, 60); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.CadetBlue, EnumFlowerColor.DarkTurquoise, 105); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Chocolate, EnumFlowerColor.Tan, 75); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Coral, EnumFlowerColor.Tan, 80); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Crimson, EnumFlowerColor.PaleVioletRed, 65); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Cyan, EnumFlowerColor.Turquoise, 115); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.DarkKhaki, 85); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.DarkGray, EnumFlowerColor.SkyBlue, 105); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.DarkGreen, EnumFlowerColor.MediumSeaGreen, 75); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.DarkKhaki, EnumFlowerColor.DarkSeaGreen, 95); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.DarkOrange, EnumFlowerColor.DarkKhaki, 80); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.DarkSalmon, EnumFlowerColor.LightGray, 85); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.MediumAquamarine, 105); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.SteelBlue, 65); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.CadetBlue, 75); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.Turquoise, 115); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumPurple, 75); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.DeepPink, EnumFlowerColor.Plum, 75); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.SkyBlue, 105); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.DimGray, EnumFlowerColor.CadetBlue, 85); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.DodgerBlue, EnumFlowerColor.DeepSkyBlue, 90); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Gold, EnumFlowerColor.Khaki, 90); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkKhaki, 85); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Gray, EnumFlowerColor.CadetBlue, 95); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Green, EnumFlowerColor.MediumSeaGreen, 80); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.HotPink, EnumFlowerColor.Plum, 80); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.IndianRed, EnumFlowerColor.RosyBrown, 70); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Indigo, EnumFlowerColor.MediumPurple, 50); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Khaki, EnumFlowerColor.LemonChiffon, 95); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Lavender, EnumFlowerColor.SkyBlue, 105); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.LightGray, EnumFlowerColor.SkyBlue, 110); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DarkTurquoise, 110); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.SkyBlue, 110); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Lime, EnumFlowerColor.SpringGreen, 95); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.LimeGreen, EnumFlowerColor.PaleGreen, 95); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Magenta, EnumFlowerColor.Violet, 85); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Maroon, EnumFlowerColor.RosyBrown, 50); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Turquoise, 110); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.MediumOrchid, EnumFlowerColor.Plum, 85); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.MediumPurple, EnumFlowerColor.LightSteelBlue, 85); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.MediumAquamarine, 100); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Plum, 70); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.MistyRose, EnumFlowerColor.LightGray, 95); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Olive, EnumFlowerColor.DarkSeaGreen, 85); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.OliveDrab, EnumFlowerColor.DarkSeaGreen, 85); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Orange, EnumFlowerColor.DarkKhaki, 85); + addMix(EnumFlowerColor.PaleTurquoise, EnumFlowerColor.PaleGreen, EnumFlowerColor.Aquamarine, 100); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Aquamarine, EnumFlowerColor.DarkGray, 55); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Blue, EnumFlowerColor.DarkViolet, 85); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Brown, EnumFlowerColor.IndianRed, 100); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.CadetBlue, EnumFlowerColor.RosyBrown, 80); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Chocolate, EnumFlowerColor.IndianRed, 95); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Coral, EnumFlowerColor.Salmon, 100); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Crimson, EnumFlowerColor.IndianRed, 105); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Cyan, EnumFlowerColor.SkyBlue, 50); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Chocolate, 80); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.DarkGray, EnumFlowerColor.RosyBrown, 100); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.DarkGreen, EnumFlowerColor.DarkOliveGreen, 55); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.DarkKhaki, EnumFlowerColor.DarkSalmon, 75); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.Sienna, 70); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.DarkOrange, EnumFlowerColor.Coral, 85); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.DarkSalmon, EnumFlowerColor.Salmon, 105); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.RosyBrown, 70); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.MediumVioletRed, 90); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.CadetBlue, 60); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumOrchid, 95); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.DeepPink, EnumFlowerColor.HotPink, 115); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DodgerBlue, 70); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.DodgerBlue, EnumFlowerColor.MediumPurple, 85); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Gold, EnumFlowerColor.SandyBrown, 65); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Goldenrod, EnumFlowerColor.Peru, 80); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Gray, EnumFlowerColor.RosyBrown, 100); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Green, EnumFlowerColor.DarkOliveGreen, 55); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.HotPink, EnumFlowerColor.DeepPink, 120); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Indigo, EnumFlowerColor.Purple, 85); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Khaki, EnumFlowerColor.DarkSalmon, 70); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Lavender, EnumFlowerColor.Thistle, 95); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.LemonChiffon, EnumFlowerColor.Pink, 80); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.LightGray, EnumFlowerColor.Pink, 95); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.SlateGray, 65); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Plum, 90); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.LimeGreen, EnumFlowerColor.DarkSeaGreen, 50); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Magenta, EnumFlowerColor.MediumOrchid, 105); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Maroon, EnumFlowerColor.Brown, 90); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkGray, 60); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.MediumOrchid, EnumFlowerColor.HotPink, 105); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.MediumPurple, EnumFlowerColor.MediumOrchid, 100); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.Gray, 55); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.DeepPink, 110); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.MistyRose, EnumFlowerColor.Pink, 95); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Navy, EnumFlowerColor.Purple, 80); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Olive, EnumFlowerColor.Peru, 70); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.OliveDrab, EnumFlowerColor.Peru, 65); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Orange, EnumFlowerColor.SandyBrown, 80); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkKhaki, 55); + addMix(EnumFlowerColor.PaleVioletRed, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Thistle, 80); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.Aquamarine, EnumFlowerColor.DarkSeaGreen, 75); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.Blue, EnumFlowerColor.DarkSlateBlue, 60); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.Brown, EnumFlowerColor.Sienna, 95); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.Chocolate, EnumFlowerColor.DarkOrange, 120); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.Coral, EnumFlowerColor.Chocolate, 115); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.Crimson, EnumFlowerColor.IndianRed, 95); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.Cyan, EnumFlowerColor.MediumAquamarine, 75); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Goldenrod, 115); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.DarkGray, EnumFlowerColor.Tan, 100); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.DarkGreen, EnumFlowerColor.DarkOliveGreen, 80); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Goldenrod, 105); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.Olive, 90); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.DarkOrange, EnumFlowerColor.SandyBrown, 115); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.DarkSalmon, EnumFlowerColor.SandyBrown, 115); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkKhaki, 90); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.MediumSeaGreen, 80); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumVioletRed, 65); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.DeepPink, EnumFlowerColor.IndianRed, 85); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.CadetBlue, 75); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.DodgerBlue, EnumFlowerColor.SlateGray, 75); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.Gold, EnumFlowerColor.Goldenrod, 100); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkGoldenrod, 110); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.Green, EnumFlowerColor.OliveDrab, 80); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.HotPink, EnumFlowerColor.Salmon, 85); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.IndianRed, EnumFlowerColor.Chocolate, 100); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.Indigo, EnumFlowerColor.MediumVioletRed, 65); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.Khaki, EnumFlowerColor.Goldenrod, 95); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.Lavender, EnumFlowerColor.Tan, 90); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.LemonChiffon, EnumFlowerColor.Tan, 95); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.LightGray, EnumFlowerColor.Tan, 95); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Tan, 90); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.Lime, EnumFlowerColor.LimeGreen, 75); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.LimeGreen, EnumFlowerColor.OliveDrab, 80); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.Magenta, EnumFlowerColor.DeepPink, 70); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.Maroon, EnumFlowerColor.Sienna, 90); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkSeaGreen, 85); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.MediumOrchid, EnumFlowerColor.PaleVioletRed, 75); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.MediumPurple, EnumFlowerColor.PaleVioletRed, 75); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.OliveDrab, 80); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.IndianRed, 80); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.MistyRose, EnumFlowerColor.Tan, 95); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.Olive, EnumFlowerColor.DarkGoldenrod, 100); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.OliveDrab, EnumFlowerColor.Olive, 95); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.Orange, EnumFlowerColor.DarkOrange, 115); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkKhaki, 80); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.DarkKhaki, 85); + addMix(EnumFlowerColor.Peru, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Salmon, 90); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.Aquamarine, EnumFlowerColor.PaleTurquoise, 75); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.Blue, EnumFlowerColor.SlateBlue, 70); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.Brown, EnumFlowerColor.IndianRed, 85); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.CadetBlue, EnumFlowerColor.DarkGray, 80); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.Chocolate, EnumFlowerColor.DarkSalmon, 90); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.Coral, EnumFlowerColor.DarkSalmon, 100); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.Crimson, EnumFlowerColor.PaleVioletRed, 90); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.Cyan, EnumFlowerColor.PaleTurquoise, 60); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.SandyBrown, 85); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.DarkGray, EnumFlowerColor.Thistle, 105); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.DarkGreen, EnumFlowerColor.OliveDrab, 60); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Tan, 90); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.Tan, 70); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.DarkOrange, EnumFlowerColor.SandyBrown, 95); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.DarkSalmon, EnumFlowerColor.Salmon, 110); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.Tan, 80); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.Gray, 65); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.SkyBlue, 65); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumOrchid, 80); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.DeepPink, EnumFlowerColor.HotPink, 100); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.SkyBlue, 80); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.DimGray, EnumFlowerColor.RosyBrown, 90); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.DodgerBlue, EnumFlowerColor.LightSteelBlue, 85); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.Gold, EnumFlowerColor.Goldenrod, 80); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.Goldenrod, EnumFlowerColor.SandyBrown, 90); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.Gray, EnumFlowerColor.RosyBrown, 95); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.Green, EnumFlowerColor.DarkSeaGreen, 60); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.HotPink, EnumFlowerColor.PaleVioletRed, 105); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.IndianRed, EnumFlowerColor.Salmon, 100); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.Indigo, EnumFlowerColor.MediumOrchid, 60); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.Khaki, EnumFlowerColor.Wheat, 90); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.Lavender, EnumFlowerColor.Thistle, 105); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.LemonChiffon, EnumFlowerColor.MistyRose, 95); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.LightGray, EnumFlowerColor.MistyRose, 105); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.CadetBlue, 70); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Thistle, 100); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.Lime, EnumFlowerColor.LimeGreen, 60); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.LimeGreen, EnumFlowerColor.DarkSeaGreen, 65); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.Magenta, EnumFlowerColor.Violet, 95); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.Maroon, EnumFlowerColor.IndianRed, 65); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.LightGray, 75); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.MediumOrchid, EnumFlowerColor.Plum, 95); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.MediumPurple, EnumFlowerColor.Plum, 95); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkSeaGreen, 70); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.HotPink, 90); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.MistyRose, EnumFlowerColor.Thistle, 115); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.Navy, EnumFlowerColor.SlateBlue, 50); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.Olive, EnumFlowerColor.Tan, 75); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.OliveDrab, EnumFlowerColor.DarkKhaki, 75); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.Orange, EnumFlowerColor.SandyBrown, 90); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.PaleGreen, EnumFlowerColor.LemonChiffon, 70); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.LightGray, 80); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.HotPink, 105); + addMix(EnumFlowerColor.Pink, EnumFlowerColor.Peru, EnumFlowerColor.DarkSalmon, 95); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Aquamarine, EnumFlowerColor.SkyBlue, 80); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Blue, EnumFlowerColor.SlateBlue, 80); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Brown, EnumFlowerColor.PaleVioletRed, 85); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.CadetBlue, EnumFlowerColor.LightSteelBlue, 90); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Chocolate, EnumFlowerColor.Salmon, 85); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Coral, EnumFlowerColor.Salmon, 90); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Crimson, EnumFlowerColor.PaleVioletRed, 90); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Cyan, EnumFlowerColor.SkyBlue, 75); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.DarkSalmon, 75); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.DarkGray, EnumFlowerColor.Thistle, 105); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.DarkKhaki, EnumFlowerColor.RosyBrown, 75); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.RosyBrown, 65); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.DarkOrange, EnumFlowerColor.DarkSalmon, 80); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.DarkSalmon, EnumFlowerColor.Pink, 95); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkGray, 70); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.MediumPurple, 80); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.SkyBlue, 80); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumOrchid, 90); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.DeepPink, EnumFlowerColor.HotPink, 105); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DodgerBlue, 80); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Gold, EnumFlowerColor.Tan, 65); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkSalmon, 75); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Gray, EnumFlowerColor.RosyBrown, 100); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Green, EnumFlowerColor.SeaGreen, 50); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.HotPink, EnumFlowerColor.Violet, 115); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.IndianRed, EnumFlowerColor.PaleVioletRed, 95); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Indigo, EnumFlowerColor.MediumOrchid, 70); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Khaki, EnumFlowerColor.MistyRose, 70); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Lavender, EnumFlowerColor.Thistle, 105); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.LemonChiffon, EnumFlowerColor.MistyRose, 80); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.LightGray, EnumFlowerColor.Thistle, 100); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.SkyBlue, 80); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Thistle, 105); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Lime, EnumFlowerColor.LimeGreen, 45); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.LimeGreen, EnumFlowerColor.DarkSeaGreen, 50); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Magenta, EnumFlowerColor.Violet, 105); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Maroon, EnumFlowerColor.MediumVioletRed, 70); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.LightSteelBlue, 85); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.MediumOrchid, EnumFlowerColor.Violet, 105); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.MediumPurple, EnumFlowerColor.Violet, 105); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.CadetBlue, 80); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.MediumOrchid, 100); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.MistyRose, EnumFlowerColor.Thistle, 105); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Navy, EnumFlowerColor.SlateBlue, 65); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Olive, EnumFlowerColor.Tan, 65); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.OliveDrab, EnumFlowerColor.Tan, 60); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Orange, EnumFlowerColor.SandyBrown, 75); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkSeaGreen, 55); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Lavender, 90); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.HotPink, 110); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Peru, EnumFlowerColor.RosyBrown, 85); + addMix(EnumFlowerColor.Plum, EnumFlowerColor.Pink, EnumFlowerColor.Thistle, 110); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.Aquamarine, EnumFlowerColor.MediumPurple, 50); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.Black, EnumFlowerColor.Indigo, 95); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.Blue, EnumFlowerColor.Indigo, 105); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.Brown, EnumFlowerColor.MediumVioletRed, 95); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.CadetBlue, EnumFlowerColor.DarkSlateBlue, 80); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.Chocolate, EnumFlowerColor.Brown, 75); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.Coral, EnumFlowerColor.MediumVioletRed, 70); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.Crimson, EnumFlowerColor.MediumVioletRed, 95); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.Cyan, EnumFlowerColor.SteelBlue, 50); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Brown, 60); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.DarkGray, EnumFlowerColor.MediumVioletRed, 80); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.DarkOrange, EnumFlowerColor.Crimson, 60); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.DarkSalmon, EnumFlowerColor.MediumVioletRed, 75); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.Indigo, 110); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.Indigo, 105); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.RoyalBlue, 60); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.DarkViolet, EnumFlowerColor.Indigo, 115); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.DeepPink, EnumFlowerColor.MediumVioletRed, 100); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.RoyalBlue, 60); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.DodgerBlue, EnumFlowerColor.SlateBlue, 80); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.Goldenrod, EnumFlowerColor.IndianRed, 50); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.HotPink, EnumFlowerColor.MediumVioletRed, 90); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.IndianRed, EnumFlowerColor.MediumVioletRed, 90); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.Lavender, EnumFlowerColor.MediumOrchid, 65); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.LemonChiffon, EnumFlowerColor.PaleVioletRed, 50); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.LightGray, EnumFlowerColor.MediumOrchid, 70); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DarkSlateBlue, 65); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.MediumOrchid, 70); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.Magenta, EnumFlowerColor.DarkViolet, 95); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.SlateBlue, 60); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.MediumOrchid, EnumFlowerColor.DarkViolet, 105); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.MediumPurple, EnumFlowerColor.DarkViolet, 100); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.MistyRose, EnumFlowerColor.PaleVioletRed, 65); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.Navy, EnumFlowerColor.Indigo, 110); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.Olive, EnumFlowerColor.Brown, 55); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.Orange, EnumFlowerColor.IndianRed, 50); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.MediumPurple, 65); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.MediumVioletRed, 95); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.Peru, EnumFlowerColor.MediumVioletRed, 70); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.Pink, EnumFlowerColor.MediumOrchid, 70); + addMix(EnumFlowerColor.Purple, EnumFlowerColor.Plum, EnumFlowerColor.MediumOrchid, 80); + addMix(EnumFlowerColor.Red, EnumFlowerColor.Aquamarine, EnumFlowerColor.DarkSalmon, 50); + addMix(EnumFlowerColor.Red, EnumFlowerColor.Black, EnumFlowerColor.Maroon, 75); + addMix(EnumFlowerColor.Red, EnumFlowerColor.Blue, EnumFlowerColor.Magenta, 70); + addMix(EnumFlowerColor.Red, EnumFlowerColor.Brown, EnumFlowerColor.Crimson, 110); + addMix(EnumFlowerColor.Red, EnumFlowerColor.CadetBlue, EnumFlowerColor.IndianRed, 75); + addMix(EnumFlowerColor.Red, EnumFlowerColor.Crimson, EnumFlowerColor.IndianRed, 115); + addMix(EnumFlowerColor.Red, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Chocolate, 90); + addMix(EnumFlowerColor.Red, EnumFlowerColor.DarkGray, EnumFlowerColor.IndianRed, 90); + addMix(EnumFlowerColor.Red, EnumFlowerColor.DarkGreen, EnumFlowerColor.Maroon, 55); + addMix(EnumFlowerColor.Red, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Chocolate, 80); + addMix(EnumFlowerColor.Red, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.Brown, 70); + addMix(EnumFlowerColor.Red, EnumFlowerColor.DarkOrange, EnumFlowerColor.Coral, 100); + addMix(EnumFlowerColor.Red, EnumFlowerColor.DarkSalmon, EnumFlowerColor.IndianRed, 105); + addMix(EnumFlowerColor.Red, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.IndianRed, 65); + addMix(EnumFlowerColor.Red, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.Brown, 80); + addMix(EnumFlowerColor.Red, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.Brown, 75); + addMix(EnumFlowerColor.Red, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.DimGray, 60); + addMix(EnumFlowerColor.Red, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumVioletRed, 80); + addMix(EnumFlowerColor.Red, EnumFlowerColor.DeepPink, EnumFlowerColor.Crimson, 95); + addMix(EnumFlowerColor.Red, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.Plum, 60); + addMix(EnumFlowerColor.Red, EnumFlowerColor.DimGray, EnumFlowerColor.Brown, 95); + addMix(EnumFlowerColor.Red, EnumFlowerColor.DodgerBlue, EnumFlowerColor.MediumVioletRed, 75); + addMix(EnumFlowerColor.Red, EnumFlowerColor.Gold, EnumFlowerColor.Chocolate, 75); + addMix(EnumFlowerColor.Red, EnumFlowerColor.Goldenrod, EnumFlowerColor.Chocolate, 85); + addMix(EnumFlowerColor.Red, EnumFlowerColor.Gray, EnumFlowerColor.Crimson, 95); + addMix(EnumFlowerColor.Red, EnumFlowerColor.Green, EnumFlowerColor.Sienna, 50); + addMix(EnumFlowerColor.Red, EnumFlowerColor.HotPink, EnumFlowerColor.IndianRed, 95); + addMix(EnumFlowerColor.Red, EnumFlowerColor.IndianRed, EnumFlowerColor.Crimson, 110); + addMix(EnumFlowerColor.Red, EnumFlowerColor.Indigo, EnumFlowerColor.Brown, 75); + addMix(EnumFlowerColor.Red, EnumFlowerColor.Khaki, EnumFlowerColor.Coral, 75); + addMix(EnumFlowerColor.Red, EnumFlowerColor.Lavender, EnumFlowerColor.Salmon, 80); + addMix(EnumFlowerColor.Red, EnumFlowerColor.LemonChiffon, EnumFlowerColor.Salmon, 75); + addMix(EnumFlowerColor.Red, EnumFlowerColor.LightGray, EnumFlowerColor.IndianRed, 85); + addMix(EnumFlowerColor.Red, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.Sienna, 60); + addMix(EnumFlowerColor.Red, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.IndianRed, 80); + addMix(EnumFlowerColor.Red, EnumFlowerColor.Magenta, EnumFlowerColor.DeepPink, 85); + addMix(EnumFlowerColor.Red, EnumFlowerColor.Maroon, EnumFlowerColor.Brown, 100); + addMix(EnumFlowerColor.Red, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.IndianRed, 60); + addMix(EnumFlowerColor.Red, EnumFlowerColor.MediumOrchid, EnumFlowerColor.DeepPink, 85); + addMix(EnumFlowerColor.Red, EnumFlowerColor.MediumPurple, EnumFlowerColor.MediumVioletRed, 80); + addMix(EnumFlowerColor.Red, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.Sienna, 55); + addMix(EnumFlowerColor.Red, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Crimson, 95); + addMix(EnumFlowerColor.Red, EnumFlowerColor.MistyRose, EnumFlowerColor.Salmon, 85); + addMix(EnumFlowerColor.Red, EnumFlowerColor.Olive, EnumFlowerColor.Sienna, 75); + addMix(EnumFlowerColor.Red, EnumFlowerColor.OliveDrab, EnumFlowerColor.Sienna, 65); + addMix(EnumFlowerColor.Red, EnumFlowerColor.Orange, EnumFlowerColor.Coral, 90); + addMix(EnumFlowerColor.Red, EnumFlowerColor.PaleGreen, EnumFlowerColor.Peru, 50); + addMix(EnumFlowerColor.Red, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.IndianRed, 65); + addMix(EnumFlowerColor.Red, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Crimson, 100); + addMix(EnumFlowerColor.Red, EnumFlowerColor.Peru, EnumFlowerColor.Chocolate, 105); + addMix(EnumFlowerColor.Red, EnumFlowerColor.Pink, EnumFlowerColor.Salmon, 90); + addMix(EnumFlowerColor.Red, EnumFlowerColor.Plum, EnumFlowerColor.IndianRed, 85); + addMix(EnumFlowerColor.Red, EnumFlowerColor.Purple, EnumFlowerColor.Crimson, 80); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Aquamarine, EnumFlowerColor.DarkSeaGreen, 75); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Blue, EnumFlowerColor.SlateBlue, 80); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Brown, EnumFlowerColor.IndianRed, 95); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.CadetBlue, EnumFlowerColor.DarkGray, 90); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Chocolate, EnumFlowerColor.Peru, 105); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Coral, EnumFlowerColor.DarkSalmon, 105); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Crimson, EnumFlowerColor.IndianRed, 100); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Cyan, EnumFlowerColor.DarkTurquoise, 75); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Peru, 95); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.DarkGreen, EnumFlowerColor.DarkOliveGreen, 75); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Tan, 95); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.DarkOrange, EnumFlowerColor.Peru, 100); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.DarkSalmon, EnumFlowerColor.Salmon, 115); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkGray, 85); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DimGray, 80); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.CadetBlue, 80); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumOrchid, 85); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.DeepPink, EnumFlowerColor.PaleVioletRed, 105); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.SkyBlue, 85); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.DimGray, EnumFlowerColor.Gray, 100); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.DodgerBlue, EnumFlowerColor.SteelBlue, 90); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Gold, EnumFlowerColor.Goldenrod, 85); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Goldenrod, EnumFlowerColor.Peru, 95); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Green, EnumFlowerColor.OliveDrab, 75); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.HotPink, EnumFlowerColor.PaleVioletRed, 105); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.IndianRed, EnumFlowerColor.PaleVioletRed, 110); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Indigo, EnumFlowerColor.Purple, 80); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Khaki, EnumFlowerColor.Tan, 90); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Lavender, EnumFlowerColor.Thistle, 100); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.LemonChiffon, EnumFlowerColor.Tan, 90); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.LightGray, EnumFlowerColor.DarkGray, 105); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.CadetBlue, 85); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Thistle, 100); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Lime, EnumFlowerColor.LimeGreen, 65); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.LimeGreen, EnumFlowerColor.DarkSeaGreen, 75); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Magenta, EnumFlowerColor.MediumOrchid, 95); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Maroon, EnumFlowerColor.Brown, 85); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.MediumOrchid, EnumFlowerColor.PaleVioletRed, 100); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.MediumPurple, EnumFlowerColor.Plum, 100); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.DeepPink, 100); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.MistyRose, EnumFlowerColor.Pink, 105); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Navy, EnumFlowerColor.DarkSlateBlue, 75); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Olive, EnumFlowerColor.DarkGoldenrod, 90); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.OliveDrab, EnumFlowerColor.Olive, 85); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Orange, EnumFlowerColor.SandyBrown, 95); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkSeaGreen, 75); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.DarkGray, 85); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.HotPink, 115); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Peru, EnumFlowerColor.DarkSalmon, 105); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Pink, EnumFlowerColor.Thistle, 110); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Plum, EnumFlowerColor.Thistle, 105); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Purple, EnumFlowerColor.MediumVioletRed, 85); + addMix(EnumFlowerColor.RosyBrown, EnumFlowerColor.Red, EnumFlowerColor.IndianRed, 100); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Aquamarine, EnumFlowerColor.DeepSkyBlue, 70); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Black, EnumFlowerColor.DarkSlateBlue, 80); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Blue, EnumFlowerColor.SlateBlue, 105); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Brown, EnumFlowerColor.DarkSlateBlue, 85); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.CadetBlue, EnumFlowerColor.SteelBlue, 95); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Crimson, EnumFlowerColor.Purple, 85); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Cyan, EnumFlowerColor.DeepSkyBlue, 75); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Gray, 65); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.DarkGray, EnumFlowerColor.SteelBlue, 95); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.DarkGreen, EnumFlowerColor.DarkSlateGray, 70); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.DarkKhaki, EnumFlowerColor.SlateGray, 60); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.SteelBlue, 70); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.DarkOrange, EnumFlowerColor.RosyBrown, 65); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.DarkSalmon, EnumFlowerColor.MediumPurple, 80); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.SteelBlue, 75); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.SlateBlue, 110); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.SlateBlue, 95); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.DodgerBlue, 85); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.DarkViolet, EnumFlowerColor.Blue, 105); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.DeepPink, EnumFlowerColor.DarkViolet, 90); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DodgerBlue, 95); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.DimGray, EnumFlowerColor.SlateBlue, 100); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.DodgerBlue, EnumFlowerColor.SteelBlue, 110); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Gold, EnumFlowerColor.DarkKhaki, 50); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Goldenrod, EnumFlowerColor.Gray, 60); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Gray, EnumFlowerColor.SteelBlue, 100); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Green, EnumFlowerColor.Teal, 65); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.HotPink, EnumFlowerColor.MediumPurple, 90); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.IndianRed, EnumFlowerColor.MediumPurple, 85); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Indigo, EnumFlowerColor.DarkSlateBlue, 100); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Khaki, EnumFlowerColor.DarkGray, 55); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Lavender, EnumFlowerColor.LightSteelBlue, 85); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.LemonChiffon, EnumFlowerColor.LightSteelBlue, 65); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.LightGray, EnumFlowerColor.LightSteelBlue, 85); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.SteelBlue, 85); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DodgerBlue, 100); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Lime, EnumFlowerColor.MediumSeaGreen, 55); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.LimeGreen, EnumFlowerColor.LightSeaGreen, 60); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Magenta, EnumFlowerColor.DarkViolet, 95); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Maroon, EnumFlowerColor.Purple, 80); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DodgerBlue, 80); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.MediumOrchid, EnumFlowerColor.SlateBlue, 105); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.MediumPurple, EnumFlowerColor.SlateBlue, 115); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.SteelBlue, 75); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.DarkViolet, 95); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.MistyRose, EnumFlowerColor.LightSteelBlue, 80); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Navy, EnumFlowerColor.DarkSlateBlue, 95); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Olive, EnumFlowerColor.DimGray, 60); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.OliveDrab, EnumFlowerColor.SlateGray, 65); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.PaleGreen, EnumFlowerColor.CadetBlue, 60); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.DodgerBlue, 80); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.MediumPurple, 90); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Pink, EnumFlowerColor.MediumPurple, 85); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Plum, EnumFlowerColor.MediumPurple, 95); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Purple, EnumFlowerColor.DarkSlateBlue, 95); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.Red, EnumFlowerColor.MediumVioletRed, 75); + addMix(EnumFlowerColor.RoyalBlue, EnumFlowerColor.RosyBrown, EnumFlowerColor.MediumPurple, 90); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Aquamarine, EnumFlowerColor.DarkKhaki, 60); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Black, EnumFlowerColor.Brown, 65); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Blue, EnumFlowerColor.DarkViolet, 70); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Brown, EnumFlowerColor.IndianRed, 95); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.CadetBlue, EnumFlowerColor.RosyBrown, 80); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Chocolate, EnumFlowerColor.Coral, 110); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Coral, EnumFlowerColor.DarkSalmon, 120); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Crimson, EnumFlowerColor.IndianRed, 105); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Cyan, EnumFlowerColor.LightSeaGreen, 65); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Peru, 95); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.DarkGray, EnumFlowerColor.RosyBrown, 100); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.DarkGreen, EnumFlowerColor.Olive, 60); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.DarkKhaki, EnumFlowerColor.SandyBrown, 90); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.Peru, 75); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.DarkOrange, EnumFlowerColor.Coral, 105); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.DarkSalmon, EnumFlowerColor.Coral, 120); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.Tan, 75); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.MediumVioletRed, 75); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.CadetBlue, 70); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumVioletRed, 80); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.DeepPink, EnumFlowerColor.PaleVioletRed, 105); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.SlateGray, 70); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.DimGray, EnumFlowerColor.IndianRed, 95); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.DodgerBlue, EnumFlowerColor.MediumPurple, 80); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Gold, EnumFlowerColor.Orange, 80); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Goldenrod, EnumFlowerColor.SandyBrown, 95); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Gray, EnumFlowerColor.RosyBrown, 100); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Green, EnumFlowerColor.Olive, 60); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.HotPink, EnumFlowerColor.PaleVioletRed, 105); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.IndianRed, EnumFlowerColor.DarkSalmon, 115); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Indigo, EnumFlowerColor.MediumVioletRed, 70); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Khaki, EnumFlowerColor.SandyBrown, 85); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Lavender, EnumFlowerColor.Pink, 95); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.LemonChiffon, EnumFlowerColor.DarkSalmon, 85); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.LightGray, EnumFlowerColor.DarkSalmon, 100); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DarkGray, 70); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.RosyBrown, 90); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Lime, EnumFlowerColor.YellowGreen, 50); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.LimeGreen, EnumFlowerColor.DarkKhaki, 55); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Magenta, EnumFlowerColor.HotPink, 90); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Maroon, EnumFlowerColor.Crimson, 85); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Tan, 70); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.MediumOrchid, EnumFlowerColor.PaleVioletRed, 90); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.MediumPurple, EnumFlowerColor.PaleVioletRed, 90); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkKhaki, 65); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.DeepPink, 95); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.MistyRose, EnumFlowerColor.Pink, 100); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Navy, EnumFlowerColor.Purple, 65); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Olive, EnumFlowerColor.Peru, 80); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.OliveDrab, EnumFlowerColor.Peru, 75); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Orange, EnumFlowerColor.DarkOrange, 95); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkKhaki, 60); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.MistyRose, 80); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.IndianRed, 110); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Peru, EnumFlowerColor.Coral, 105); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Pink, EnumFlowerColor.DarkSalmon, 110); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Plum, EnumFlowerColor.PaleVioletRed, 100); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Purple, EnumFlowerColor.MediumVioletRed, 80); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.Red, EnumFlowerColor.IndianRed, 110); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.RosyBrown, EnumFlowerColor.DarkSalmon, 110); + addMix(EnumFlowerColor.Salmon, EnumFlowerColor.RoyalBlue, EnumFlowerColor.MediumPurple, 80); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Aquamarine, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Black, EnumFlowerColor.Sienna, 60); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Blue, EnumFlowerColor.SlateBlue, 55); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Brown, EnumFlowerColor.Chocolate, 85); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.CadetBlue, EnumFlowerColor.Tan, 85); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Chocolate, EnumFlowerColor.Peru, 110); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Coral, EnumFlowerColor.DarkSalmon, 115); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Crimson, EnumFlowerColor.IndianRed, 90); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Cyan, EnumFlowerColor.MediumAquamarine, 75); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Peru, 110); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.DarkGray, EnumFlowerColor.Tan, 100); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.DarkGreen, EnumFlowerColor.Olive, 70); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Tan, 105); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.DarkGoldenrod, 85); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.DarkOrange, EnumFlowerColor.Orange, 120); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.DarkSalmon, EnumFlowerColor.Coral, 115); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkKhaki, 90); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.RosyBrown, 65); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumVioletRed, 65); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.DeepPink, EnumFlowerColor.PaleVioletRed, 80); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.CadetBlue, 75); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.DimGray, EnumFlowerColor.Peru, 90); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.DodgerBlue, EnumFlowerColor.SlateGray, 75); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Gold, EnumFlowerColor.Goldenrod, 105); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Goldenrod, EnumFlowerColor.Orange, 115); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Gray, EnumFlowerColor.Peru, 95); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Green, EnumFlowerColor.OliveDrab, 75); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.HotPink, EnumFlowerColor.Salmon, 85); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.IndianRed, EnumFlowerColor.Coral, 100); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Indigo, EnumFlowerColor.MediumVioletRed, 55); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Khaki, EnumFlowerColor.Tan, 100); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Lavender, EnumFlowerColor.Tan, 95); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.LemonChiffon, EnumFlowerColor.Wheat, 100); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.LightGray, EnumFlowerColor.Tan, 100); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Tan, 90); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Lime, EnumFlowerColor.YellowGreen, 75); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.LimeGreen, EnumFlowerColor.YellowGreen, 80); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Magenta, EnumFlowerColor.HotPink, 70); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Maroon, EnumFlowerColor.Sienna, 75); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkKhaki, 85); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.MediumOrchid, EnumFlowerColor.PaleVioletRed, 75); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.MediumPurple, EnumFlowerColor.RosyBrown, 75); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkKhaki, 80); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.IndianRed, 75); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.MistyRose, EnumFlowerColor.Tan, 105); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Olive, EnumFlowerColor.DarkGoldenrod, 95); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.OliveDrab, EnumFlowerColor.DarkGoldenrod, 90); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Orange, EnumFlowerColor.DarkOrange, 115); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkKhaki, 80); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Wheat, 85); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Salmon, 90); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Peru, EnumFlowerColor.DarkOrange, 115); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Pink, EnumFlowerColor.DarkSalmon, 100); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Plum, EnumFlowerColor.DarkSalmon, 85); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Purple, EnumFlowerColor.PaleVioletRed, 60); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Red, EnumFlowerColor.Coral, 100); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.RosyBrown, EnumFlowerColor.DarkSalmon, 105); + addMix(EnumFlowerColor.SandyBrown, EnumFlowerColor.Salmon, EnumFlowerColor.DarkSalmon, 105); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Aquamarine, EnumFlowerColor.MediumAquamarine, 95); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Blue, EnumFlowerColor.DarkSlateBlue, 70); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.CadetBlue, EnumFlowerColor.LightSeaGreen, 105); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Chocolate, EnumFlowerColor.Olive, 75); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Coral, EnumFlowerColor.Olive, 70); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Crimson, EnumFlowerColor.Brown, 55); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Cyan, EnumFlowerColor.MediumAquamarine, 90); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.OliveDrab, 90); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.DarkGray, EnumFlowerColor.CadetBlue, 100); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.DarkGreen, EnumFlowerColor.Green, 110); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.DarkKhaki, EnumFlowerColor.DarkSeaGreen, 100); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.Green, 110); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.DarkOrange, EnumFlowerColor.Olive, 75); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.MediumSeaGreen, 110); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.DarkSlateGray, 80); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.LightSeaGreen, 100); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.DarkViolet, EnumFlowerColor.DarkSlateBlue, 75); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.DeepPink, EnumFlowerColor.MediumVioletRed, 45); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.CadetBlue, 85); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.DimGray, EnumFlowerColor.Teal, 100); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.DodgerBlue, EnumFlowerColor.SteelBlue, 80); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Gold, EnumFlowerColor.YellowGreen, 85); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Goldenrod, EnumFlowerColor.OliveDrab, 90); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Green, EnumFlowerColor.DarkGreen, 115); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.HotPink, EnumFlowerColor.RosyBrown, 50); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.IndianRed, EnumFlowerColor.DimGray, 65); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Indigo, EnumFlowerColor.DarkSlateBlue, 70); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Khaki, EnumFlowerColor.DarkSeaGreen, 90); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Lavender, EnumFlowerColor.MediumAquamarine, 85); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.LemonChiffon, EnumFlowerColor.DarkSeaGreen, 85); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.LightGray, EnumFlowerColor.DarkSeaGreen, 90); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.MediumSeaGreen, 105); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.CadetBlue, 90); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Lime, EnumFlowerColor.LimeGreen, 95); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.LimeGreen, EnumFlowerColor.MediumSeaGreen, 105); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Magenta, EnumFlowerColor.DarkViolet, 75); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.MediumSeaGreen, 105); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.MediumPurple, EnumFlowerColor.SlateGray, 80); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.MistyRose, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Navy, EnumFlowerColor.DarkSlateBlue, 70); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Olive, EnumFlowerColor.OliveDrab, 105); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.OliveDrab, EnumFlowerColor.Green, 110); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Orange, EnumFlowerColor.Olive, 80); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.PaleGreen, EnumFlowerColor.MediumSeaGreen, 95); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.MediumAquamarine, 90); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Gray, 60); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Peru, EnumFlowerColor.OliveDrab, 85); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Pink, EnumFlowerColor.DarkSeaGreen, 70); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Plum, EnumFlowerColor.SlateGray, 80); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Purple, EnumFlowerColor.DarkSlateBlue, 75); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.Red, EnumFlowerColor.Sienna, 60); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.RoyalBlue, EnumFlowerColor.SteelBlue, 80); + addMix(EnumFlowerColor.SeaGreen, EnumFlowerColor.SandyBrown, EnumFlowerColor.OliveDrab, 80); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Aquamarine, EnumFlowerColor.DarkSeaGreen, 60); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Blue, EnumFlowerColor.DarkSlateBlue, 75); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Brown, EnumFlowerColor.Maroon, 115); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.CadetBlue, EnumFlowerColor.Gray, 85); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Coral, EnumFlowerColor.Chocolate, 105); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Crimson, EnumFlowerColor.Brown, 110); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Cyan, EnumFlowerColor.LightSeaGreen, 60); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Peru, 100); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.DarkGray, EnumFlowerColor.RosyBrown, 95); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.DarkGreen, EnumFlowerColor.DarkOliveGreen, 80); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Peru, 90); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.DarkOrange, EnumFlowerColor.Chocolate, 100); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.DarkSalmon, EnumFlowerColor.Chocolate, 100); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.CadetBlue, 70); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.DarkViolet, EnumFlowerColor.Purple, 80); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.DeepPink, EnumFlowerColor.Crimson, 90); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.CadetBlue, 70); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.DodgerBlue, EnumFlowerColor.SlateGray, 75); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Gold, EnumFlowerColor.Goldenrod, 80); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Goldenrod, EnumFlowerColor.Peru, 95); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Green, EnumFlowerColor.DarkOliveGreen, 75); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.HotPink, EnumFlowerColor.IndianRed, 90); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.IndianRed, EnumFlowerColor.Brown, 110); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Indigo, EnumFlowerColor.Purple, 80); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Khaki, EnumFlowerColor.Tan, 80); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Lavender, EnumFlowerColor.RosyBrown, 80); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.LemonChiffon, EnumFlowerColor.Tan, 75); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.LightGray, EnumFlowerColor.RosyBrown, 85); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.SeaGreen, 75); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.RosyBrown, 80); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Lime, EnumFlowerColor.OliveDrab, 55); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.LimeGreen, EnumFlowerColor.OliveDrab, 65); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Magenta, EnumFlowerColor.MediumVioletRed, 80); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Maroon, EnumFlowerColor.Brown, 110); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.MediumOrchid, EnumFlowerColor.MediumVioletRed, 85); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkOliveGreen, 70); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Crimson, 95); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.MistyRose, EnumFlowerColor.DarkSalmon, 85); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Navy, EnumFlowerColor.Purple, 75); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Olive, EnumFlowerColor.DarkGoldenrod, 95); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.OliveDrab, EnumFlowerColor.Olive, 85); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Orange, EnumFlowerColor.Peru, 95); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkKhaki, 65); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.DarkGray, 70); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.IndianRed, 95); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Peru, EnumFlowerColor.Chocolate, 105); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Pink, EnumFlowerColor.DarkSalmon, 90); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Plum, EnumFlowerColor.PaleVioletRed, 85); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Purple, EnumFlowerColor.MediumVioletRed, 85); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Red, EnumFlowerColor.Crimson, 110); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.RosyBrown, EnumFlowerColor.IndianRed, 100); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.Salmon, EnumFlowerColor.IndianRed, 100); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.SandyBrown, EnumFlowerColor.Peru, 100); + addMix(EnumFlowerColor.Sienna, EnumFlowerColor.SeaGreen, EnumFlowerColor.DarkOliveGreen, 80); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Aquamarine, EnumFlowerColor.Turquoise, 100); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Black, EnumFlowerColor.DarkSlateGray, 55); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Blue, EnumFlowerColor.RoyalBlue, 75); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Brown, EnumFlowerColor.RosyBrown, 60); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.CadetBlue, EnumFlowerColor.DarkTurquoise, 110); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Chocolate, EnumFlowerColor.Tan, 75); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Coral, EnumFlowerColor.RosyBrown, 75); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Crimson, EnumFlowerColor.PaleVioletRed, 60); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Cyan, EnumFlowerColor.DarkTurquoise, 110); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.DarkGray, EnumFlowerColor.LightSteelBlue, 105); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.DarkGreen, EnumFlowerColor.SeaGreen, 70); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.DarkKhaki, EnumFlowerColor.DarkSeaGreen, 85); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.CadetBlue, 80); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.DarkOrange, EnumFlowerColor.Tan, 80); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.DarkSalmon, EnumFlowerColor.DarkGray, 80); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.MediumAquamarine, 95); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.SteelBlue, 75); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.CadetBlue, 80); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.Turquoise, 115); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumPurple, 80); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.DeepPink, EnumFlowerColor.MediumOrchid, 65); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.DimGray, EnumFlowerColor.CadetBlue, 90); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.DodgerBlue, EnumFlowerColor.DeepSkyBlue, 105); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Gold, EnumFlowerColor.DarkKhaki, 75); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkKhaki, 80); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Gray, EnumFlowerColor.CadetBlue, 100); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Green, EnumFlowerColor.MediumSeaGreen, 75); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.HotPink, EnumFlowerColor.Plum, 75); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.IndianRed, EnumFlowerColor.RosyBrown, 70); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Indigo, EnumFlowerColor.SlateBlue, 60); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Khaki, EnumFlowerColor.DarkSeaGreen, 85); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Lavender, EnumFlowerColor.LightSteelBlue, 105); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.LemonChiffon, EnumFlowerColor.PaleTurquoise, 95); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.LightGray, EnumFlowerColor.LightSteelBlue, 110); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DarkTurquoise, 110); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DeepSkyBlue, 115); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Lime, EnumFlowerColor.SpringGreen, 80); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.LimeGreen, EnumFlowerColor.MediumAquamarine, 80); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Magenta, EnumFlowerColor.MediumOrchid, 85); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkTurquoise, 100); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.MediumOrchid, EnumFlowerColor.MediumPurple, 90); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.MediumPurple, EnumFlowerColor.LightSteelBlue, 95); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.MediumAquamarine, 90); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.MediumOrchid, 70); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.MistyRose, EnumFlowerColor.LightSteelBlue, 90); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Navy, EnumFlowerColor.RoyalBlue, 55); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Olive, EnumFlowerColor.DarkSeaGreen, 75); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.OliveDrab, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Orange, EnumFlowerColor.DarkKhaki, 80); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.PaleGreen, EnumFlowerColor.MediumAquamarine, 85); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.DarkTurquoise, 115); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Thistle, 75); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Peru, EnumFlowerColor.DarkGray, 80); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Pink, EnumFlowerColor.LightSteelBlue, 85); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Plum, EnumFlowerColor.LightSteelBlue, 90); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Purple, EnumFlowerColor.MediumPurple, 65); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Red, EnumFlowerColor.IndianRed, 65); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.RosyBrown, EnumFlowerColor.LightSteelBlue, 85); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.RoyalBlue, EnumFlowerColor.DodgerBlue, 95); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Salmon, EnumFlowerColor.RosyBrown, 75); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.SandyBrown, EnumFlowerColor.DarkGray, 85); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.SeaGreen, EnumFlowerColor.LightSeaGreen, 90); + addMix(EnumFlowerColor.SkyBlue, EnumFlowerColor.Sienna, EnumFlowerColor.Gray, 70); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Aquamarine, EnumFlowerColor.DeepSkyBlue, 70); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Black, EnumFlowerColor.DarkSlateBlue, 85); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Blue, EnumFlowerColor.DarkViolet, 110); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Brown, EnumFlowerColor.Purple, 90); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.CadetBlue, EnumFlowerColor.SteelBlue, 95); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Coral, EnumFlowerColor.PaleVioletRed, 75); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Crimson, EnumFlowerColor.MediumVioletRed, 90); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Cyan, EnumFlowerColor.DeepSkyBlue, 70); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.RosyBrown, 65); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.DarkGray, EnumFlowerColor.MediumPurple, 90); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.DarkGreen, EnumFlowerColor.DarkSlateGray, 70); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Gray, 60); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.DarkOrange, EnumFlowerColor.IndianRed, 65); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.DarkSalmon, EnumFlowerColor.PaleVioletRed, 80); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.SlateGray, 75); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkSlateBlue, 100); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.DodgerBlue, 80); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.DarkViolet, EnumFlowerColor.Blue, 115); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.DeepPink, EnumFlowerColor.MediumOrchid, 95); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DodgerBlue, 90); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.DimGray, EnumFlowerColor.DarkSlateBlue, 100); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.DodgerBlue, EnumFlowerColor.RoyalBlue, 105); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Gold, EnumFlowerColor.Tan, 50); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Goldenrod, EnumFlowerColor.RosyBrown, 60); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Gray, EnumFlowerColor.MediumPurple, 100); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Green, EnumFlowerColor.Teal, 70); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.HotPink, EnumFlowerColor.MediumOrchid, 95); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.IndianRed, EnumFlowerColor.MediumOrchid, 90); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Indigo, EnumFlowerColor.DarkSlateBlue, 105); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Khaki, EnumFlowerColor.DarkGray, 55); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Lavender, EnumFlowerColor.LightSteelBlue, 85); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.LemonChiffon, EnumFlowerColor.Thistle, 60); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.LightGray, EnumFlowerColor.MediumPurple, 85); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.SteelBlue, 85); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.MediumPurple, 95); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Lime, EnumFlowerColor.MediumSeaGreen, 55); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.LimeGreen, EnumFlowerColor.CadetBlue, 60); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Magenta, EnumFlowerColor.MediumOrchid, 100); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Maroon, EnumFlowerColor.Purple, 80); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.SteelBlue, 75); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.MediumOrchid, EnumFlowerColor.MediumPurple, 110); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.MediumPurple, EnumFlowerColor.RoyalBlue, 115); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.SteelBlue, 75); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.DarkViolet, 100); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.MistyRose, EnumFlowerColor.Plum, 80); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Navy, EnumFlowerColor.DarkSlateBlue, 100); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Olive, EnumFlowerColor.DimGray, 60); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.OliveDrab, EnumFlowerColor.DimGray, 55); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Orange, EnumFlowerColor.DarkSalmon, 60); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.PaleGreen, EnumFlowerColor.CadetBlue, 60); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.LightSteelBlue, 80); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.MediumOrchid, 95); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Pink, EnumFlowerColor.Plum, 85); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Plum, EnumFlowerColor.MediumPurple, 95); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Purple, EnumFlowerColor.DarkViolet, 105); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Red, EnumFlowerColor.MediumVioletRed, 80); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.RosyBrown, EnumFlowerColor.MediumPurple, 90); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.RoyalBlue, EnumFlowerColor.MediumPurple, 120); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.Salmon, EnumFlowerColor.PaleVioletRed, 85); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.SandyBrown, EnumFlowerColor.RosyBrown, 70); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.SeaGreen, EnumFlowerColor.SteelBlue, 80); + addMix(EnumFlowerColor.SlateBlue, EnumFlowerColor.SkyBlue, EnumFlowerColor.DodgerBlue, 90); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Aquamarine, EnumFlowerColor.MediumAquamarine, 85); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Black, EnumFlowerColor.DarkSlateGray, 85); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Blue, EnumFlowerColor.DarkSlateBlue, 100); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Chocolate, EnumFlowerColor.Sienna, 90); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Coral, EnumFlowerColor.RosyBrown, 90); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Crimson, EnumFlowerColor.MediumVioletRed, 90); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Cyan, EnumFlowerColor.DarkTurquoise, 90); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Olive, 90); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.DarkGray, EnumFlowerColor.Gray, 110); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.DarkGreen, EnumFlowerColor.SeaGreen, 90); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.DarkOrange, EnumFlowerColor.Peru, 85); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.DarkSalmon, EnumFlowerColor.RosyBrown, 90); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.CadetBlue, 95); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.SlateBlue, 105); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DimGray, 105); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.CadetBlue, 100); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.DarkViolet, EnumFlowerColor.SlateBlue, 105); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.DeepPink, EnumFlowerColor.MediumVioletRed, 90); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.SteelBlue, 105); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.DimGray, EnumFlowerColor.Gray, 115); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.DodgerBlue, EnumFlowerColor.SteelBlue, 110); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Gold, EnumFlowerColor.DarkKhaki, 75); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkGoldenrod, 85); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Gray, EnumFlowerColor.DimGray, 120); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Green, EnumFlowerColor.SeaGreen, 90); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.HotPink, EnumFlowerColor.PaleVioletRed, 95); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.IndianRed, EnumFlowerColor.RosyBrown, 95); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Indigo, EnumFlowerColor.DarkSlateBlue, 95); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Khaki, EnumFlowerColor.DarkKhaki, 80); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Lavender, EnumFlowerColor.LightSteelBlue, 95); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.LemonChiffon, EnumFlowerColor.DarkGray, 85); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.LightGray, EnumFlowerColor.DarkGray, 100); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.CadetBlue, 100); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DarkGray, 105); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Lime, EnumFlowerColor.LimeGreen, 75); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.LimeGreen, EnumFlowerColor.MediumSeaGreen, 85); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Magenta, EnumFlowerColor.MediumOrchid, 100); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.CadetBlue, 95); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.MediumOrchid, EnumFlowerColor.MediumPurple, 110); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.MediumPurple, EnumFlowerColor.SlateBlue, 115); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.SeaGreen, 95); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.MistyRose, EnumFlowerColor.DarkGray, 90); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Navy, EnumFlowerColor.DarkSlateBlue, 90); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Olive, EnumFlowerColor.OliveDrab, 90); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.OliveDrab, EnumFlowerColor.SeaGreen, 90); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Orange, EnumFlowerColor.DarkGoldenrod, 85); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.SkyBlue, 95); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.RosyBrown, 95); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Pink, EnumFlowerColor.RosyBrown, 90); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Purple, EnumFlowerColor.DarkSlateBlue, 95); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Red, EnumFlowerColor.Crimson, 85); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.RosyBrown, EnumFlowerColor.Gray, 100); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.RoyalBlue, EnumFlowerColor.SteelBlue, 115); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.Salmon, EnumFlowerColor.RosyBrown, 90); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.SandyBrown, EnumFlowerColor.Tan, 90); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.SeaGreen, EnumFlowerColor.Teal, 100); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.SkyBlue, EnumFlowerColor.CadetBlue, 100); + addMix(EnumFlowerColor.SlateGray, EnumFlowerColor.SlateBlue, EnumFlowerColor.MediumPurple, 115); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.Aquamarine, EnumFlowerColor.PaleGreen, 110); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.Blue, EnumFlowerColor.SteelBlue, 45); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.CadetBlue, EnumFlowerColor.MediumAquamarine, 90); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.Chocolate, EnumFlowerColor.LimeGreen, 60); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.Coral, EnumFlowerColor.DarkSeaGreen, 55); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.Cyan, EnumFlowerColor.Aquamarine, 100); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.LimeGreen, 80); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.DarkGray, EnumFlowerColor.MediumAquamarine, 95); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.DarkGreen, EnumFlowerColor.MediumSeaGreen, 80); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.DarkKhaki, EnumFlowerColor.LimeGreen, 100); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.MediumSeaGreen, 85); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.DarkOrange, EnumFlowerColor.YellowGreen, 65); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.DarkSalmon, EnumFlowerColor.DarkSeaGreen, 65); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.PaleGreen, 105); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.LightSeaGreen, 50); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.MediumSeaGreen, 65); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.MediumAquamarine, 95); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.DarkViolet, EnumFlowerColor.SteelBlue, 55); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.Turquoise, 75); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.DimGray, EnumFlowerColor.MediumSeaGreen, 80); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.DodgerBlue, EnumFlowerColor.DarkTurquoise, 65); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.Gold, EnumFlowerColor.Lime, 90); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.Goldenrod, EnumFlowerColor.LimeGreen, 85); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.Gray, EnumFlowerColor.MediumSeaGreen, 85); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.Green, EnumFlowerColor.LimeGreen, 90); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.IndianRed, EnumFlowerColor.MediumSeaGreen, 45); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.Khaki, EnumFlowerColor.PaleGreen, 100); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.Lavender, EnumFlowerColor.Aquamarine, 90); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.LemonChiffon, EnumFlowerColor.PaleGreen, 100); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.LightGray, EnumFlowerColor.Aquamarine, 95); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.MediumAquamarine, 95); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.MediumAquamarine, 85); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.Lime, EnumFlowerColor.PaleGreen, 120); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.LimeGreen, EnumFlowerColor.Lime, 115); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.Magenta, EnumFlowerColor.MediumPurple, 60); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.PaleGreen, 110); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.MediumOrchid, EnumFlowerColor.CadetBlue, 65); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.MediumPurple, EnumFlowerColor.LightSeaGreen, 65); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.LimeGreen, 110); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.MistyRose, EnumFlowerColor.Aquamarine, 80); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.Olive, EnumFlowerColor.LimeGreen, 90); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.OliveDrab, EnumFlowerColor.LimeGreen, 95); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.Orange, EnumFlowerColor.YellowGreen, 75); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.PaleGreen, EnumFlowerColor.Lime, 120); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Aquamarine, 100); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.Peru, EnumFlowerColor.LimeGreen, 75); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.Pink, EnumFlowerColor.MediumAquamarine, 65); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.Plum, EnumFlowerColor.MediumAquamarine, 75); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.Purple, EnumFlowerColor.Teal, 50); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.RosyBrown, EnumFlowerColor.MediumSeaGreen, 70); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.RoyalBlue, EnumFlowerColor.LightSeaGreen, 60); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.Salmon, EnumFlowerColor.DarkSeaGreen, 50); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.SandyBrown, EnumFlowerColor.LimeGreen, 75); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.SeaGreen, EnumFlowerColor.MediumSeaGreen, 95); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.Sienna, EnumFlowerColor.MediumSeaGreen, 55); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.SkyBlue, EnumFlowerColor.Aquamarine, 85); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.SlateBlue, EnumFlowerColor.LightSeaGreen, 60); + addMix(EnumFlowerColor.SpringGreen, EnumFlowerColor.SlateGray, EnumFlowerColor.MediumSeaGreen, 80); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Aquamarine, EnumFlowerColor.DarkTurquoise, 80); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Black, EnumFlowerColor.DarkSlateBlue, 85); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Blue, EnumFlowerColor.SlateBlue, 100); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.CadetBlue, EnumFlowerColor.SlateGray, 105); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Chocolate, EnumFlowerColor.Gray, 80); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Coral, EnumFlowerColor.RosyBrown, 80); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Crimson, EnumFlowerColor.MediumVioletRed, 80); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Cyan, EnumFlowerColor.DarkTurquoise, 90); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.DarkGray, EnumFlowerColor.SlateGray, 105); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.DarkGreen, EnumFlowerColor.SeaGreen, 75); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.DarkKhaki, EnumFlowerColor.CadetBlue, 75); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.Teal, 80); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.DarkOrange, EnumFlowerColor.DarkGoldenrod, 75); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.DarkSalmon, EnumFlowerColor.Gray, 85); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.CadetBlue, 85); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.RoyalBlue, 100); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.RoyalBlue, 100); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.CadetBlue, 100); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.DarkViolet, EnumFlowerColor.SlateBlue, 95); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.DeepPink, EnumFlowerColor.MediumOrchid, 80); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DodgerBlue, 105); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.DimGray, EnumFlowerColor.SlateGray, 105); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Gold, EnumFlowerColor.DarkKhaki, 60); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Gray, EnumFlowerColor.SlateGray, 110); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Green, EnumFlowerColor.SeaGreen, 75); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.HotPink, EnumFlowerColor.MediumPurple, 80); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Indigo, EnumFlowerColor.DarkSlateBlue, 90); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Khaki, EnumFlowerColor.DarkSeaGreen, 70); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Lavender, EnumFlowerColor.LightSteelBlue, 90); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.LemonChiffon, EnumFlowerColor.SkyBlue, 75); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.LightGray, EnumFlowerColor.LightSteelBlue, 95); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.CadetBlue, 100); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DodgerBlue, 105); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Lime, EnumFlowerColor.MediumSeaGreen, 65); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.LimeGreen, EnumFlowerColor.MediumSeaGreen, 70); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Magenta, EnumFlowerColor.MediumOrchid, 85); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.CadetBlue, 90); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.MediumOrchid, EnumFlowerColor.MediumPurple, 95); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.MediumPurple, EnumFlowerColor.RoyalBlue, 105); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.CadetBlue, 85); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.DarkViolet, 80); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.MistyRose, EnumFlowerColor.LightSteelBlue, 85); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Navy, EnumFlowerColor.DarkSlateBlue, 90); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Olive, EnumFlowerColor.SeaGreen, 75); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.OliveDrab, EnumFlowerColor.SeaGreen, 75); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Orange, EnumFlowerColor.DarkKhaki, 75); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.PaleGreen, EnumFlowerColor.MediumAquamarine, 70); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.SkyBlue, 90); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Peru, EnumFlowerColor.Gray, 80); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Pink, EnumFlowerColor.LightSteelBlue, 85); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Plum, EnumFlowerColor.MediumPurple, 90); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Purple, EnumFlowerColor.DarkSlateBlue, 85); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Red, EnumFlowerColor.MediumVioletRed, 75); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.RosyBrown, EnumFlowerColor.SlateGray, 95); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.RoyalBlue, EnumFlowerColor.DodgerBlue, 115); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Salmon, EnumFlowerColor.RosyBrown, 80); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.SandyBrown, EnumFlowerColor.DarkGray, 80); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.SeaGreen, EnumFlowerColor.Teal, 90); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.Sienna, EnumFlowerColor.DimGray, 85); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.SkyBlue, EnumFlowerColor.DeepSkyBlue, 105); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.SlateBlue, EnumFlowerColor.RoyalBlue, 110); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.SlateGray, EnumFlowerColor.RoyalBlue, 115); + addMix(EnumFlowerColor.SteelBlue, EnumFlowerColor.SpringGreen, EnumFlowerColor.MediumAquamarine, 70); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Aquamarine, EnumFlowerColor.DarkSeaGreen, 95); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Black, EnumFlowerColor.DimGray, 60); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Blue, EnumFlowerColor.SlateBlue, 60); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Brown, EnumFlowerColor.IndianRed, 85); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.CadetBlue, EnumFlowerColor.DarkSeaGreen, 95); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Chocolate, EnumFlowerColor.Peru, 105); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Coral, EnumFlowerColor.DarkSalmon, 105); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Crimson, EnumFlowerColor.IndianRed, 85); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Cyan, EnumFlowerColor.Turquoise, 90); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Goldenrod, 110); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.DarkGreen, EnumFlowerColor.OliveDrab, 80); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Wheat, 115); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.Olive, 90); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.DarkOrange, EnumFlowerColor.SandyBrown, 105); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.DarkSalmon, EnumFlowerColor.SandyBrown, 110); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkKhaki, 105); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.Gray, 75); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.MediumAquamarine, 90); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumOrchid, 65); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.DeepPink, EnumFlowerColor.PaleVioletRed, 80); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.CadetBlue, 85); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.DimGray, EnumFlowerColor.Gray, 95); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.DodgerBlue, EnumFlowerColor.SteelBlue, 80); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Gold, EnumFlowerColor.Goldenrod, 105); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkKhaki, 110); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Gray, EnumFlowerColor.DarkGray, 100); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Green, EnumFlowerColor.OliveDrab, 85); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.HotPink, EnumFlowerColor.PaleVioletRed, 85); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.IndianRed, EnumFlowerColor.DarkSalmon, 95); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Khaki, EnumFlowerColor.Wheat, 110); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Lavender, EnumFlowerColor.LightGray, 100); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.LemonChiffon, EnumFlowerColor.Wheat, 110); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.LightGray, EnumFlowerColor.Wheat, 110); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.MediumAquamarine, 95); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DarkGray, 100); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Lime, EnumFlowerColor.LimeGreen, 90); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.LimeGreen, EnumFlowerColor.YellowGreen, 95); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Magenta, EnumFlowerColor.HotPink, 75); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Maroon, EnumFlowerColor.Sienna, 70); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkSeaGreen, 95); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.MediumOrchid, EnumFlowerColor.PaleVioletRed, 75); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.MediumPurple, EnumFlowerColor.Plum, 80); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkSeaGreen, 95); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.PaleVioletRed, 75); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.MistyRose, EnumFlowerColor.Wheat, 110); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Navy, EnumFlowerColor.DarkSlateBlue, 50); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Olive, EnumFlowerColor.DarkKhaki, 100); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.OliveDrab, EnumFlowerColor.DarkKhaki, 100); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Orange, EnumFlowerColor.Goldenrod, 110); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkSeaGreen, 95); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.LightGray, 95); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.RosyBrown, 90); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Peru, EnumFlowerColor.SandyBrown, 110); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Pink, EnumFlowerColor.DarkSalmon, 100); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Plum, EnumFlowerColor.Pink, 90); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Purple, EnumFlowerColor.MediumVioletRed, 60); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Red, EnumFlowerColor.IndianRed, 90); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.RosyBrown, EnumFlowerColor.DarkSalmon, 105); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.RoyalBlue, EnumFlowerColor.SlateGray, 75); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Salmon, EnumFlowerColor.DarkSalmon, 100); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.SandyBrown, EnumFlowerColor.Peru, 115); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.SeaGreen, EnumFlowerColor.DarkSeaGreen, 90); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.Sienna, EnumFlowerColor.Peru, 95); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.SkyBlue, EnumFlowerColor.DarkGray, 95); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.SlateGray, EnumFlowerColor.DarkGray, 95); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.SpringGreen, EnumFlowerColor.PaleGreen, 90); + addMix(EnumFlowerColor.Tan, EnumFlowerColor.SteelBlue, EnumFlowerColor.DarkGray, 85); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Aquamarine, EnumFlowerColor.LightSeaGreen, 90); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Black, EnumFlowerColor.DarkSlateGray, 85); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Blue, EnumFlowerColor.DarkSlateBlue, 85); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Brown, EnumFlowerColor.DimGray, 75); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.CadetBlue, EnumFlowerColor.LightSeaGreen, 115); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Chocolate, EnumFlowerColor.DarkOliveGreen, 80); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Coral, EnumFlowerColor.Gray, 75); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Cyan, EnumFlowerColor.DarkTurquoise, 90); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.OliveDrab, 85); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.DarkGray, EnumFlowerColor.CadetBlue, 100); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.DarkGreen, EnumFlowerColor.SeaGreen, 100); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.DarkKhaki, EnumFlowerColor.SeaGreen, 90); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.SeaGreen, 100); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.DarkOrange, EnumFlowerColor.OliveDrab, 75); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.DarkSalmon, EnumFlowerColor.CadetBlue, 80); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.LightSeaGreen, 100); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.LightSeaGreen, 105); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.DarkViolet, EnumFlowerColor.DarkSlateBlue, 90); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.DeepPink, EnumFlowerColor.Purple, 70); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.CadetBlue, 100); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.DodgerBlue, EnumFlowerColor.SteelBlue, 95); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Gold, EnumFlowerColor.OliveDrab, 75); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Goldenrod, EnumFlowerColor.OliveDrab, 80); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Gray, EnumFlowerColor.CadetBlue, 105); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Green, EnumFlowerColor.SeaGreen, 100); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.IndianRed, EnumFlowerColor.DimGray, 75); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Indigo, EnumFlowerColor.DarkSlateBlue, 85); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Khaki, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Lavender, EnumFlowerColor.CadetBlue, 85); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.LemonChiffon, EnumFlowerColor.MediumAquamarine, 80); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.LightGray, EnumFlowerColor.CadetBlue, 90); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.CadetBlue, 110); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.CadetBlue, 95); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Lime, EnumFlowerColor.LimeGreen, 80); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.LimeGreen, EnumFlowerColor.MediumSeaGreen, 90); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Magenta, EnumFlowerColor.DarkViolet, 85); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Maroon, EnumFlowerColor.Gray, 70); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.LightSeaGreen, 100); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.MediumOrchid, EnumFlowerColor.RoyalBlue, 85); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.MediumPurple, EnumFlowerColor.SteelBlue, 90); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.SeaGreen, 100); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.DarkSlateBlue, 75); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.MistyRose, EnumFlowerColor.CadetBlue, 75); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Navy, EnumFlowerColor.DarkSlateBlue, 80); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Olive, EnumFlowerColor.SeaGreen, 95); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.OliveDrab, EnumFlowerColor.SeaGreen, 95); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Orange, EnumFlowerColor.OliveDrab, 75); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.PaleGreen, EnumFlowerColor.MediumSeaGreen, 85); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.LightSeaGreen, 95); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.SlateGray, 70); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Peru, EnumFlowerColor.SeaGreen, 85); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Pink, EnumFlowerColor.CadetBlue, 65); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Plum, EnumFlowerColor.SteelBlue, 80); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Purple, EnumFlowerColor.DarkSlateBlue, 80); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Red, EnumFlowerColor.Brown, 70); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.RosyBrown, EnumFlowerColor.CadetBlue, 85); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.RoyalBlue, EnumFlowerColor.SteelBlue, 95); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Salmon, EnumFlowerColor.Gray, 70); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.SandyBrown, EnumFlowerColor.SeaGreen, 80); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Sienna, EnumFlowerColor.DarkOliveGreen, 80); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.SkyBlue, EnumFlowerColor.CadetBlue, 100); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.SlateBlue, EnumFlowerColor.SteelBlue, 95); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.SlateGray, EnumFlowerColor.CadetBlue, 105); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.SpringGreen, EnumFlowerColor.MediumSeaGreen, 85); + addMix(EnumFlowerColor.Teal, EnumFlowerColor.Tan, EnumFlowerColor.CadetBlue, 85); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Aquamarine, EnumFlowerColor.PaleTurquoise, 85); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Black, EnumFlowerColor.DimGray, 55); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Blue, EnumFlowerColor.SlateBlue, 75); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Brown, EnumFlowerColor.PaleVioletRed, 80); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.CadetBlue, EnumFlowerColor.LightSteelBlue, 90); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Chocolate, EnumFlowerColor.DarkSalmon, 90); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Coral, EnumFlowerColor.DarkSalmon, 95); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Crimson, EnumFlowerColor.PaleVioletRed, 85); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Cyan, EnumFlowerColor.DarkTurquoise, 80); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Tan, 85); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.DarkGray, EnumFlowerColor.LightGray, 110); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.DarkGreen, EnumFlowerColor.SeaGreen, 60); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Tan, 85); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.DarkGray, 75); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.DarkOrange, EnumFlowerColor.SandyBrown, 90); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.DarkSalmon, EnumFlowerColor.Pink, 100); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkGray, 85); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.MediumPurple, 75); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.SlateGray, 70); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.SkyBlue, 85); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumOrchid, 85); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.DeepPink, EnumFlowerColor.HotPink, 95); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.SkyBlue, 85); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.DimGray, EnumFlowerColor.DarkGray, 90); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.DodgerBlue, EnumFlowerColor.LightSteelBlue, 90); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Gold, EnumFlowerColor.Khaki, 80); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Goldenrod, EnumFlowerColor.Tan, 85); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Gray, EnumFlowerColor.DarkGray, 100); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Green, EnumFlowerColor.MediumSeaGreen, 65); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.HotPink, EnumFlowerColor.Plum, 105); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.IndianRed, EnumFlowerColor.RosyBrown, 95); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Indigo, EnumFlowerColor.MediumOrchid, 60); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Khaki, EnumFlowerColor.Wheat, 85); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Lavender, EnumFlowerColor.MistyRose, 115); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.LemonChiffon, EnumFlowerColor.MistyRose, 90); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.LightGray, EnumFlowerColor.Lavender, 110); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.CadetBlue, 85); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Lavender, 110); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Lime, EnumFlowerColor.LimeGreen, 65); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.LimeGreen, EnumFlowerColor.DarkSeaGreen, 70); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Magenta, EnumFlowerColor.Violet, 95); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Maroon, EnumFlowerColor.IndianRed, 65); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.PaleTurquoise, 90); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.MediumOrchid, EnumFlowerColor.Plum, 95); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.MediumPurple, EnumFlowerColor.Plum, 100); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkSeaGreen, 85); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.HotPink, 90); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.MistyRose, EnumFlowerColor.Pink, 115); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Navy, EnumFlowerColor.SlateBlue, 55); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Olive, EnumFlowerColor.DarkKhaki, 75); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.OliveDrab, EnumFlowerColor.DarkKhaki, 75); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Orange, EnumFlowerColor.SandyBrown, 85); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.PaleGreen, EnumFlowerColor.DarkSeaGreen, 75); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.LightSteelBlue, 90); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Plum, 105); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Peru, EnumFlowerColor.DarkSalmon, 90); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Pink, EnumFlowerColor.MistyRose, 115); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Plum, EnumFlowerColor.Pink, 115); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Purple, EnumFlowerColor.MediumOrchid, 75); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Red, EnumFlowerColor.IndianRed, 85); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.RosyBrown, EnumFlowerColor.Pink, 110); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.RoyalBlue, EnumFlowerColor.MediumPurple, 90); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Salmon, EnumFlowerColor.Pink, 100); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.SandyBrown, EnumFlowerColor.DarkSalmon, 95); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.SeaGreen, EnumFlowerColor.CadetBlue, 85); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Sienna, EnumFlowerColor.RosyBrown, 85); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.SkyBlue, EnumFlowerColor.LightSteelBlue, 90); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.SlateBlue, EnumFlowerColor.MediumPurple, 90); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.SlateGray, EnumFlowerColor.DarkGray, 100); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.SpringGreen, EnumFlowerColor.MediumAquamarine, 85); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.SteelBlue, EnumFlowerColor.LightSteelBlue, 90); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Tan, EnumFlowerColor.MistyRose, 100); + addMix(EnumFlowerColor.Thistle, EnumFlowerColor.Teal, EnumFlowerColor.CadetBlue, 80); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Aquamarine, EnumFlowerColor.MediumAquamarine, 115); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Black, EnumFlowerColor.Teal, 50); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Blue, EnumFlowerColor.RoyalBlue, 60); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Brown, EnumFlowerColor.Gray, 55); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.CadetBlue, EnumFlowerColor.LightSeaGreen, 110); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Chocolate, EnumFlowerColor.DarkSeaGreen, 70); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Coral, EnumFlowerColor.DarkSeaGreen, 70); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Crimson, EnumFlowerColor.Gray, 50); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Cyan, EnumFlowerColor.DarkTurquoise, 120); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.DarkGray, EnumFlowerColor.DarkTurquoise, 100); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.DarkGreen, EnumFlowerColor.MediumSeaGreen, 80); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.DarkKhaki, EnumFlowerColor.MediumAquamarine, 95); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.MediumSeaGreen, 85); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.DarkOrange, EnumFlowerColor.DarkKhaki, 75); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.DarkSalmon, EnumFlowerColor.DarkSeaGreen, 75); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.MediumAquamarine, 110); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.SteelBlue, 65); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.CadetBlue, 75); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.Cyan, 120); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.DarkViolet, EnumFlowerColor.RoyalBlue, 65); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.DeepPink, EnumFlowerColor.MediumPurple, 55); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DarkTurquoise, 100); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.DimGray, EnumFlowerColor.CadetBlue, 85); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.DodgerBlue, EnumFlowerColor.DeepSkyBlue, 90); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Gold, EnumFlowerColor.YellowGreen, 85); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkSeaGreen, 85); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Gray, EnumFlowerColor.LightSeaGreen, 95); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Green, EnumFlowerColor.MediumSeaGreen, 90); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.HotPink, EnumFlowerColor.LightSteelBlue, 65); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.IndianRed, EnumFlowerColor.CadetBlue, 60); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Indigo, EnumFlowerColor.RoyalBlue, 50); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Khaki, EnumFlowerColor.MediumAquamarine, 95); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Lavender, EnumFlowerColor.PaleTurquoise, 95); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.LemonChiffon, EnumFlowerColor.Aquamarine, 100); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.LightGray, EnumFlowerColor.PaleTurquoise, 100); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.DarkTurquoise, 115); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DarkTurquoise, 100); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Lime, EnumFlowerColor.SpringGreen, 95); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.LimeGreen, EnumFlowerColor.MediumSeaGreen, 100); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Magenta, EnumFlowerColor.MediumPurple, 75); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Maroon, EnumFlowerColor.DimGray, 45); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkTurquoise, 120); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.MediumOrchid, EnumFlowerColor.DodgerBlue, 75); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.MediumPurple, EnumFlowerColor.DeepSkyBlue, 80); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.MediumAquamarine, 110); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.MediumPurple, 60); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.MistyRose, EnumFlowerColor.PaleTurquoise, 90); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Navy, EnumFlowerColor.SteelBlue, 45); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Olive, EnumFlowerColor.MediumSeaGreen, 85); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.OliveDrab, EnumFlowerColor.MediumSeaGreen, 90); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Orange, EnumFlowerColor.YellowGreen, 80); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.PaleGreen, EnumFlowerColor.Aquamarine, 105); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Cyan, 115); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.DarkGray, 60); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Peru, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Pink, EnumFlowerColor.PaleTurquoise, 75); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Plum, EnumFlowerColor.SkyBlue, 80); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Purple, EnumFlowerColor.RoyalBlue, 55); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Red, EnumFlowerColor.RosyBrown, 55); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.RosyBrown, EnumFlowerColor.CadetBlue, 80); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.RoyalBlue, EnumFlowerColor.DeepSkyBlue, 80); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Salmon, EnumFlowerColor.DarkGray, 65); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.SandyBrown, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.SeaGreen, EnumFlowerColor.MediumAquamarine, 100); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Sienna, EnumFlowerColor.DarkSeaGreen, 65); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.SkyBlue, EnumFlowerColor.DarkTurquoise, 110); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.SlateBlue, EnumFlowerColor.DodgerBlue, 75); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.SlateGray, EnumFlowerColor.LightSeaGreen, 95); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.SpringGreen, EnumFlowerColor.Aquamarine, 105); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.SteelBlue, EnumFlowerColor.CadetBlue, 90); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Tan, EnumFlowerColor.MediumAquamarine, 95); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Teal, EnumFlowerColor.LightSeaGreen, 100); + addMix(EnumFlowerColor.Turquoise, EnumFlowerColor.Thistle, EnumFlowerColor.PaleTurquoise, 85); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Aquamarine, EnumFlowerColor.LightSteelBlue, 75); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Black, EnumFlowerColor.Purple, 60); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Blue, EnumFlowerColor.SlateBlue, 85); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Brown, EnumFlowerColor.PaleVioletRed, 85); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.CadetBlue, EnumFlowerColor.Plum, 95); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Chocolate, EnumFlowerColor.PaleVioletRed, 80); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Coral, EnumFlowerColor.PaleVioletRed, 85); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Crimson, EnumFlowerColor.DeepPink, 90); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Cyan, EnumFlowerColor.DeepSkyBlue, 70); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Salmon, 65); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.DarkGray, EnumFlowerColor.Plum, 100); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.DarkKhaki, EnumFlowerColor.RosyBrown, 65); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.RosyBrown, 55); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.DarkOrange, EnumFlowerColor.Salmon, 75); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.DarkSalmon, EnumFlowerColor.HotPink, 90); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.Thistle, 60); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.MediumOrchid, 85); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.MediumPurple, 80); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.DodgerBlue, 75); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumOrchid, 95); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.DeepPink, EnumFlowerColor.HotPink, 110); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.DodgerBlue, 75); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.DimGray, EnumFlowerColor.MediumOrchid, 90); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.DodgerBlue, EnumFlowerColor.MediumPurple, 90); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Gold, EnumFlowerColor.SandyBrown, 55); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkSalmon, 65); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Gray, EnumFlowerColor.Plum, 95); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.HotPink, EnumFlowerColor.Plum, 115); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.IndianRed, EnumFlowerColor.PaleVioletRed, 95); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Indigo, EnumFlowerColor.DarkViolet, 80); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Khaki, EnumFlowerColor.Pink, 60); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Lavender, EnumFlowerColor.Plum, 100); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.LemonChiffon, EnumFlowerColor.Pink, 70); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.LightGray, EnumFlowerColor.Plum, 95); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Plum, 100); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Magenta, EnumFlowerColor.MediumOrchid, 115); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Maroon, EnumFlowerColor.MediumVioletRed, 70); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.Thistle, 80); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.MediumOrchid, EnumFlowerColor.Magenta, 115); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.MediumPurple, EnumFlowerColor.MediumOrchid, 110); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkGray, 75); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.MediumOrchid, 100); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.MistyRose, EnumFlowerColor.Plum, 95); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Navy, EnumFlowerColor.DarkViolet, 75); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Olive, EnumFlowerColor.RosyBrown, 55); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.OliveDrab, EnumFlowerColor.RosyBrown, 50); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Orange, EnumFlowerColor.DarkSalmon, 65); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Thistle, 90); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.HotPink, 110); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Peru, EnumFlowerColor.PaleVioletRed, 80); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Pink, EnumFlowerColor.Plum, 105); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Plum, EnumFlowerColor.HotPink, 120); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Purple, EnumFlowerColor.MediumOrchid, 85); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Red, EnumFlowerColor.DeepPink, 85); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.RosyBrown, EnumFlowerColor.Plum, 100); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.RoyalBlue, EnumFlowerColor.MediumPurple, 95); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Salmon, EnumFlowerColor.HotPink, 95); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.SandyBrown, EnumFlowerColor.PaleVioletRed, 80); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Sienna, EnumFlowerColor.PaleVioletRed, 80); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.SkyBlue, EnumFlowerColor.Plum, 90); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.SlateBlue, EnumFlowerColor.MediumPurple, 100); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.SlateGray, EnumFlowerColor.Plum, 100); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.SpringGreen, EnumFlowerColor.LightSeaGreen, 70); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.SteelBlue, EnumFlowerColor.MediumPurple, 90); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Tan, EnumFlowerColor.Plum, 80); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Teal, EnumFlowerColor.MediumPurple, 80); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Thistle, EnumFlowerColor.Plum, 105); + addMix(EnumFlowerColor.Violet, EnumFlowerColor.Turquoise, EnumFlowerColor.LightSteelBlue, 75); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Aquamarine, EnumFlowerColor.PaleGreen, 100); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Blue, EnumFlowerColor.MediumPurple, 50); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Brown, EnumFlowerColor.DarkSalmon, 75); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.CadetBlue, EnumFlowerColor.DarkSeaGreen, 90); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Chocolate, EnumFlowerColor.SandyBrown, 95); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Coral, EnumFlowerColor.SandyBrown, 100); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Crimson, EnumFlowerColor.Salmon, 80); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Cyan, EnumFlowerColor.Turquoise, 90); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Goldenrod, 100); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.DarkGray, EnumFlowerColor.Tan, 105); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.DarkGreen, EnumFlowerColor.OliveDrab, 75); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Khaki, 110); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.DarkKhaki, 85); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.DarkOrange, EnumFlowerColor.Orange, 100); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.DarkSalmon, EnumFlowerColor.Tan, 105); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkKhaki, 105); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.DarkSlateBlue, EnumFlowerColor.RosyBrown, 60); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkGray, 70); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.MediumAquamarine, 90); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.DarkViolet, EnumFlowerColor.MediumOrchid, 60); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.DeepPink, EnumFlowerColor.PaleVioletRed, 75); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.SkyBlue, 80); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.DimGray, EnumFlowerColor.Tan, 85); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.DodgerBlue, EnumFlowerColor.SkyBlue, 75); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Gold, EnumFlowerColor.Khaki, 110); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkKhaki, 105); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Gray, EnumFlowerColor.Tan, 95); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Green, EnumFlowerColor.DarkSeaGreen, 85); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.HotPink, EnumFlowerColor.Pink, 80); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.IndianRed, EnumFlowerColor.DarkSalmon, 85); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Khaki, EnumFlowerColor.LemonChiffon, 115); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Lavender, EnumFlowerColor.LightGray, 100); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.LemonChiffon, EnumFlowerColor.Khaki, 120); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.LightGray, EnumFlowerColor.LemonChiffon, 110); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.MediumAquamarine, 90); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.LightGray, 95); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Lime, EnumFlowerColor.PaleGreen, 95); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.LimeGreen, EnumFlowerColor.YellowGreen, 95); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Magenta, EnumFlowerColor.Violet, 70); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Maroon, EnumFlowerColor.IndianRed, 60); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.DarkSeaGreen, 100); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.MediumOrchid, EnumFlowerColor.Plum, 70); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.MediumPurple, EnumFlowerColor.Thistle, 75); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.DarkSeaGreen, 95); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.PaleVioletRed, 70); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.MistyRose, EnumFlowerColor.Tan, 110); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Olive, EnumFlowerColor.DarkKhaki, 95); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.OliveDrab, EnumFlowerColor.DarkKhaki, 95); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Orange, EnumFlowerColor.Goldenrod, 105); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.PaleGreen, EnumFlowerColor.LemonChiffon, 100); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.LemonChiffon, 100); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Pink, 85); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Peru, EnumFlowerColor.Tan, 100); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Pink, EnumFlowerColor.MistyRose, 100); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Plum, EnumFlowerColor.Pink, 85); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Purple, EnumFlowerColor.PaleVioletRed, 55); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Red, EnumFlowerColor.Salmon, 85); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.RosyBrown, EnumFlowerColor.Tan, 100); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.RoyalBlue, EnumFlowerColor.LightSteelBlue, 70); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Salmon, EnumFlowerColor.DarkSalmon, 95); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.SandyBrown, EnumFlowerColor.Tan, 110); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.SeaGreen, EnumFlowerColor.DarkSeaGreen, 90); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Sienna, EnumFlowerColor.Peru, 85); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.SkyBlue, EnumFlowerColor.PaleTurquoise, 95); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.SlateBlue, EnumFlowerColor.Plum, 65); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.SlateGray, EnumFlowerColor.DarkGray, 90); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.SpringGreen, EnumFlowerColor.PaleGreen, 95); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.SteelBlue, EnumFlowerColor.DarkGray, 75); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Tan, EnumFlowerColor.DarkKhaki, 115); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Teal, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Thistle, EnumFlowerColor.MistyRose, 95); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Turquoise, EnumFlowerColor.MediumAquamarine, 95); + addMix(EnumFlowerColor.Wheat, EnumFlowerColor.Violet, EnumFlowerColor.Pink, 75); + addMix(EnumFlowerColor.White, EnumFlowerColor.Aquamarine, EnumFlowerColor.PaleTurquoise, 100); + addMix(EnumFlowerColor.White, EnumFlowerColor.Blue, EnumFlowerColor.MediumPurple, 60); + addMix(EnumFlowerColor.White, EnumFlowerColor.Brown, EnumFlowerColor.RosyBrown, 70); + addMix(EnumFlowerColor.White, EnumFlowerColor.CadetBlue, EnumFlowerColor.PaleTurquoise, 95); + addMix(EnumFlowerColor.White, EnumFlowerColor.Chocolate, EnumFlowerColor.Tan, 85); + addMix(EnumFlowerColor.White, EnumFlowerColor.Coral, EnumFlowerColor.DarkSalmon, 90); + addMix(EnumFlowerColor.White, EnumFlowerColor.Crimson, EnumFlowerColor.PaleVioletRed, 75); + addMix(EnumFlowerColor.White, EnumFlowerColor.Cyan, EnumFlowerColor.PaleTurquoise, 100); + addMix(EnumFlowerColor.White, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Tan, 85); + addMix(EnumFlowerColor.White, EnumFlowerColor.DarkGray, EnumFlowerColor.LightGray, 105); + addMix(EnumFlowerColor.White, EnumFlowerColor.DarkGreen, EnumFlowerColor.DarkSeaGreen, 70); + addMix(EnumFlowerColor.White, EnumFlowerColor.DarkKhaki, EnumFlowerColor.LemonChiffon, 100); + addMix(EnumFlowerColor.White, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.DarkSeaGreen, 75); + addMix(EnumFlowerColor.White, EnumFlowerColor.DarkOrange, EnumFlowerColor.SandyBrown, 90); + addMix(EnumFlowerColor.White, EnumFlowerColor.DarkSalmon, EnumFlowerColor.MistyRose, 95); + addMix(EnumFlowerColor.White, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkGray, 70); + addMix(EnumFlowerColor.White, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.PaleTurquoise, 95); + addMix(EnumFlowerColor.White, EnumFlowerColor.DarkViolet, EnumFlowerColor.Violet, 70); + addMix(EnumFlowerColor.White, EnumFlowerColor.DeepPink, EnumFlowerColor.HotPink, 85); + addMix(EnumFlowerColor.White, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.SkyBlue, 95); + addMix(EnumFlowerColor.White, EnumFlowerColor.DimGray, EnumFlowerColor.DarkGray, 85); + addMix(EnumFlowerColor.White, EnumFlowerColor.DodgerBlue, EnumFlowerColor.SkyBlue, 85); + addMix(EnumFlowerColor.White, EnumFlowerColor.Gold, EnumFlowerColor.Khaki, 95); + addMix(EnumFlowerColor.White, EnumFlowerColor.Goldenrod, EnumFlowerColor.Wheat, 95); + addMix(EnumFlowerColor.White, EnumFlowerColor.Gray, EnumFlowerColor.LightGray, 95); + addMix(EnumFlowerColor.White, EnumFlowerColor.Green, EnumFlowerColor.DarkSeaGreen, 75); + addMix(EnumFlowerColor.White, EnumFlowerColor.HotPink, EnumFlowerColor.Pink, 90); + addMix(EnumFlowerColor.White, EnumFlowerColor.IndianRed, EnumFlowerColor.Pink, 85); + addMix(EnumFlowerColor.White, EnumFlowerColor.Indigo, EnumFlowerColor.MediumPurple, 50); + addMix(EnumFlowerColor.White, EnumFlowerColor.Khaki, EnumFlowerColor.LemonChiffon, 105); + addMix(EnumFlowerColor.White, EnumFlowerColor.Lavender, EnumFlowerColor.LightGray, 115); + addMix(EnumFlowerColor.White, EnumFlowerColor.LemonChiffon, EnumFlowerColor.Wheat, 110); + addMix(EnumFlowerColor.White, EnumFlowerColor.LightGray, EnumFlowerColor.Lavender, 120); + addMix(EnumFlowerColor.White, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.PaleTurquoise, 95); + addMix(EnumFlowerColor.White, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Lavender, 110); + addMix(EnumFlowerColor.White, EnumFlowerColor.Lime, EnumFlowerColor.PaleGreen, 95); + addMix(EnumFlowerColor.White, EnumFlowerColor.LimeGreen, EnumFlowerColor.PaleGreen, 90); + addMix(EnumFlowerColor.White, EnumFlowerColor.Magenta, EnumFlowerColor.Violet, 85); + addMix(EnumFlowerColor.White, EnumFlowerColor.Maroon, EnumFlowerColor.RosyBrown, 55); + addMix(EnumFlowerColor.White, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.PaleTurquoise, 100); + addMix(EnumFlowerColor.White, EnumFlowerColor.MediumOrchid, EnumFlowerColor.Plum, 80); + addMix(EnumFlowerColor.White, EnumFlowerColor.MediumPurple, EnumFlowerColor.Thistle, 85); + addMix(EnumFlowerColor.White, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.MediumAquamarine, 90); + addMix(EnumFlowerColor.White, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Plum, 75); + addMix(EnumFlowerColor.White, EnumFlowerColor.MistyRose, EnumFlowerColor.LightGray, 115); + addMix(EnumFlowerColor.White, EnumFlowerColor.Olive, EnumFlowerColor.DarkKhaki, 85); + addMix(EnumFlowerColor.White, EnumFlowerColor.OliveDrab, EnumFlowerColor.DarkSeaGreen, 85); + addMix(EnumFlowerColor.White, EnumFlowerColor.Orange, EnumFlowerColor.Wheat, 95); + addMix(EnumFlowerColor.White, EnumFlowerColor.PaleGreen, EnumFlowerColor.Aquamarine, 100); + addMix(EnumFlowerColor.White, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Pink, 90); + addMix(EnumFlowerColor.White, EnumFlowerColor.Peru, EnumFlowerColor.Tan, 90); + addMix(EnumFlowerColor.White, EnumFlowerColor.Pink, EnumFlowerColor.MistyRose, 105); + addMix(EnumFlowerColor.White, EnumFlowerColor.Plum, EnumFlowerColor.Thistle, 100); + addMix(EnumFlowerColor.White, EnumFlowerColor.Purple, EnumFlowerColor.Plum, 60); + addMix(EnumFlowerColor.White, EnumFlowerColor.Red, EnumFlowerColor.Salmon, 80); + addMix(EnumFlowerColor.White, EnumFlowerColor.RosyBrown, EnumFlowerColor.MistyRose, 95); + addMix(EnumFlowerColor.White, EnumFlowerColor.RoyalBlue, EnumFlowerColor.LightSteelBlue, 80); + addMix(EnumFlowerColor.White, EnumFlowerColor.Salmon, EnumFlowerColor.Pink, 95); + addMix(EnumFlowerColor.White, EnumFlowerColor.SandyBrown, EnumFlowerColor.Wheat, 95); + addMix(EnumFlowerColor.White, EnumFlowerColor.SeaGreen, EnumFlowerColor.DarkSeaGreen, 85); + addMix(EnumFlowerColor.White, EnumFlowerColor.Sienna, EnumFlowerColor.DarkSalmon, 75); + addMix(EnumFlowerColor.White, EnumFlowerColor.SkyBlue, EnumFlowerColor.PaleTurquoise, 105); + addMix(EnumFlowerColor.White, EnumFlowerColor.SlateBlue, EnumFlowerColor.LightSteelBlue, 75); + addMix(EnumFlowerColor.White, EnumFlowerColor.SlateGray, EnumFlowerColor.LightGray, 90); + addMix(EnumFlowerColor.White, EnumFlowerColor.SpringGreen, EnumFlowerColor.Aquamarine, 95); + addMix(EnumFlowerColor.White, EnumFlowerColor.SteelBlue, EnumFlowerColor.LightSteelBlue, 85); + addMix(EnumFlowerColor.White, EnumFlowerColor.Tan, EnumFlowerColor.Wheat, 105); + addMix(EnumFlowerColor.White, EnumFlowerColor.Teal, EnumFlowerColor.DarkTurquoise, 80); + addMix(EnumFlowerColor.White, EnumFlowerColor.Thistle, EnumFlowerColor.Lavender, 105); + addMix(EnumFlowerColor.White, EnumFlowerColor.Turquoise, EnumFlowerColor.PaleTurquoise, 100); + addMix(EnumFlowerColor.White, EnumFlowerColor.Violet, EnumFlowerColor.Plum, 95); + addMix(EnumFlowerColor.White, EnumFlowerColor.Wheat, EnumFlowerColor.LemonChiffon, 110); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Aquamarine, EnumFlowerColor.PaleGreen, 95); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Brown, EnumFlowerColor.Goldenrod, 55); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.CadetBlue, EnumFlowerColor.YellowGreen, 80); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Chocolate, EnumFlowerColor.Goldenrod, 80); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Coral, EnumFlowerColor.Goldenrod, 75); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Crimson, EnumFlowerColor.DarkOrange, 55); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Cyan, EnumFlowerColor.PaleGreen, 85); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.Gold, 95); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.DarkGray, EnumFlowerColor.Khaki, 90); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.DarkGreen, EnumFlowerColor.YellowGreen, 70); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.DarkKhaki, EnumFlowerColor.Khaki, 105); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.YellowGreen, 80); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.DarkOrange, EnumFlowerColor.Gold, 90); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.DarkSalmon, EnumFlowerColor.Gold, 80); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.YellowGreen, 95); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.DarkKhaki, 60); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.PaleGreen, 80); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.PaleGreen, 60); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.DimGray, EnumFlowerColor.DarkKhaki, 75); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.DodgerBlue, EnumFlowerColor.DarkSeaGreen, 45); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Gold, EnumFlowerColor.Khaki, 115); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Goldenrod, EnumFlowerColor.Gold, 100); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Gray, EnumFlowerColor.DarkKhaki, 80); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Green, EnumFlowerColor.YellowGreen, 80); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.HotPink, EnumFlowerColor.SandyBrown, 50); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.IndianRed, EnumFlowerColor.Goldenrod, 65); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Khaki, EnumFlowerColor.Gold, 115); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Lavender, EnumFlowerColor.Khaki, 80); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.LemonChiffon, EnumFlowerColor.Khaki, 105); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.LightGray, EnumFlowerColor.Khaki, 95); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.YellowGreen, 80); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.Khaki, 75); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Lime, EnumFlowerColor.SpringGreen, 105); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.LimeGreen, EnumFlowerColor.YellowGreen, 100); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Maroon, EnumFlowerColor.DarkGoldenrod, 45); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.YellowGreen, 90); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.YellowGreen, 90); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.MistyRose, EnumFlowerColor.Khaki, 90); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Olive, EnumFlowerColor.DarkKhaki, 90); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.OliveDrab, EnumFlowerColor.YellowGreen, 90); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Orange, EnumFlowerColor.Gold, 95); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.PaleGreen, EnumFlowerColor.YellowGreen, 105); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.Khaki, 90); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Goldenrod, 55); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Peru, EnumFlowerColor.Gold, 90); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Pink, EnumFlowerColor.Gold, 75); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Plum, EnumFlowerColor.Khaki, 55); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Red, EnumFlowerColor.DarkOrange, 60); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.RosyBrown, EnumFlowerColor.Gold, 75); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Salmon, EnumFlowerColor.Goldenrod, 70); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.SandyBrown, EnumFlowerColor.Gold, 90); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.SeaGreen, EnumFlowerColor.YellowGreen, 85); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Sienna, EnumFlowerColor.Goldenrod, 70); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.SkyBlue, EnumFlowerColor.YellowGreen, 75); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.SlateGray, EnumFlowerColor.DarkKhaki, 70); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.SpringGreen, EnumFlowerColor.Lime, 100); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.SteelBlue, EnumFlowerColor.YellowGreen, 55); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Tan, EnumFlowerColor.Gold, 100); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Teal, EnumFlowerColor.YellowGreen, 70); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Thistle, EnumFlowerColor.Khaki, 75); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Turquoise, EnumFlowerColor.PaleGreen, 85); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.Wheat, EnumFlowerColor.Khaki, 105); + addMix(EnumFlowerColor.Yellow, EnumFlowerColor.White, EnumFlowerColor.Khaki, 95); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Aquamarine, EnumFlowerColor.PaleGreen, 100); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Black, EnumFlowerColor.DarkOliveGreen, 55); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Brown, EnumFlowerColor.DarkGoldenrod, 55); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.CadetBlue, EnumFlowerColor.DarkSeaGreen, 90); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Chocolate, EnumFlowerColor.Goldenrod, 75); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Coral, EnumFlowerColor.Goldenrod, 75); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Crimson, EnumFlowerColor.Chocolate, 50); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Cyan, EnumFlowerColor.SpringGreen, 90); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.DarkGoldenrod, EnumFlowerColor.DarkKhaki, 95); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.DarkGray, EnumFlowerColor.DarkKhaki, 100); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.DarkGreen, EnumFlowerColor.OliveDrab, 85); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.DarkOliveGreen, EnumFlowerColor.OliveDrab, 95); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.DarkOrange, EnumFlowerColor.Goldenrod, 85); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.DarkSalmon, EnumFlowerColor.DarkKhaki, 80); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.LimeGreen, 110); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.DarkSlateGray, EnumFlowerColor.OliveDrab, 70); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.DarkTurquoise, EnumFlowerColor.MediumSeaGreen, 90); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.DeepSkyBlue, EnumFlowerColor.MediumAquamarine, 70); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.DimGray, EnumFlowerColor.OliveDrab, 85); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.DodgerBlue, EnumFlowerColor.LightSeaGreen, 55); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Gold, EnumFlowerColor.Yellow, 105); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Goldenrod, EnumFlowerColor.DarkKhaki, 100); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Gray, EnumFlowerColor.OliveDrab, 90); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Green, EnumFlowerColor.OliveDrab, 100); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.HotPink, EnumFlowerColor.Tan, 45); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.IndianRed, EnumFlowerColor.DarkGoldenrod, 65); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Khaki, EnumFlowerColor.DarkKhaki, 110); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Lavender, EnumFlowerColor.DarkSeaGreen, 85); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.LemonChiffon, EnumFlowerColor.Khaki, 105); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.LightGray, EnumFlowerColor.DarkKhaki, 100); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.LightSeaGreen, EnumFlowerColor.MediumSeaGreen, 95); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.LightSteelBlue, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Lime, EnumFlowerColor.LimeGreen, 110); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.LimeGreen, EnumFlowerColor.Lime, 115); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.MediumAquamarine, EnumFlowerColor.LimeGreen, 105); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.MediumPurple, EnumFlowerColor.DarkGray, 45); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.MediumSeaGreen, EnumFlowerColor.LimeGreen, 110); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.MistyRose, EnumFlowerColor.Khaki, 90); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Olive, EnumFlowerColor.OliveDrab, 105); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.OliveDrab, EnumFlowerColor.LimeGreen, 110); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Orange, EnumFlowerColor.Gold, 90); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.PaleGreen, EnumFlowerColor.LimeGreen, 110); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.PaleTurquoise, EnumFlowerColor.PaleGreen, 95); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.PaleVioletRed, EnumFlowerColor.Tan, 60); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Peru, EnumFlowerColor.DarkKhaki, 90); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Pink, EnumFlowerColor.DarkKhaki, 75); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Plum, EnumFlowerColor.DarkKhaki, 55); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Red, EnumFlowerColor.Chocolate, 55); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.RosyBrown, EnumFlowerColor.DarkKhaki, 80); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.RoyalBlue, EnumFlowerColor.CadetBlue, 55); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Salmon, EnumFlowerColor.Goldenrod, 70); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.SandyBrown, EnumFlowerColor.DarkKhaki, 90); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.SeaGreen, EnumFlowerColor.MediumSeaGreen, 100); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Sienna, EnumFlowerColor.Olive, 70); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.SkyBlue, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.SlateGray, EnumFlowerColor.DarkSeaGreen, 80); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.SpringGreen, EnumFlowerColor.LimeGreen, 110); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.SteelBlue, EnumFlowerColor.DarkSeaGreen, 65); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Tan, EnumFlowerColor.DarkKhaki, 100); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Teal, EnumFlowerColor.MediumSeaGreen, 85); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Thistle, EnumFlowerColor.DarkKhaki, 75); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Turquoise, EnumFlowerColor.PaleGreen, 95); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Wheat, EnumFlowerColor.Khaki, 100); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.White, EnumFlowerColor.Khaki, 95); + addMix(EnumFlowerColor.YellowGreen, EnumFlowerColor.Yellow, EnumFlowerColor.Khaki, 110); + } + + @Override + public String getName() { + return Botany.proxy.localise("colour." + this.name().toLowerCase()); + } + + public static EnumFlowerColor get(final int i) { + return values()[Math.max(0, i) % values().length]; + } + + public String getHTMLName() { + return this.name(); + } +} diff --git a/src/main/java/binnie/botany/genetics/EnumFlowerType.java b/src/main/java/binnie/botany/genetics/EnumFlowerType.java new file mode 100644 index 00000000..5c9db86f --- /dev/null +++ b/src/main/java/binnie/botany/genetics/EnumFlowerType.java @@ -0,0 +1,135 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.genetics; + +import binnie.botany.Botany; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.botany.api.EnumFlowerStage; +import net.minecraft.util.IIcon; +import binnie.botany.api.IFlowerType; + +public enum EnumFlowerType implements IFlowerType +{ + Dandelion, + Poppy, + Orchid, + Allium, + Bluet, + Tulip, + Daisy, + Cornflower, + Pansy, + Iris, + Lavender(2), + Viola, + Daffodil, + Dahlia, + Peony(2), + Rose(2), + Lilac(2), + Hydrangea(2), + Foxglove(2), + Zinnia, + Mums, + Marigold, + Geranium, + Azalea, + Primrose, + Aster, + Carnation, + Lily, + Yarrow, + Petunia, + Agapanthus, + Fuchsia, + Dianthus, + Forget, + Anemone, + Aquilegia, + Edelweiss, + Scabious, + Coneflower, + Gaillardia, + Auricula, + Camellia(2), + Goldenrod(2), + Althea(2), + Penstemon(2), + Delphinium(2), + Hollyhock(2); + + int sections; + IIcon[] stem; + IIcon[] petal; + IIcon[] variant; + IIcon[] unflowered; + IIcon seedStem; + IIcon seedPetal; + IIcon seedVariant; + IIcon pollenStem; + IIcon pollenPetal; + IIcon pollenVariant; + IIcon blank; + + private EnumFlowerType() { + this(1); + } + + private EnumFlowerType(final int sections) { + this.sections = 1; + this.sections = sections; + this.stem = new IIcon[sections]; + this.petal = new IIcon[sections]; + this.variant = new IIcon[sections]; + this.unflowered = new IIcon[sections]; + } + + @Override + public IIcon getStem(final EnumFlowerStage stage, final boolean flowered, final int section) { + return (stage == EnumFlowerStage.SEED) ? this.seedStem : ((stage == EnumFlowerStage.POLLEN) ? this.pollenStem : this.stem[section % this.sections]); + } + + @Override + public IIcon getPetalIcon(final EnumFlowerStage stage, final boolean flowered, final int section) { + return (stage == EnumFlowerStage.SEED) ? this.seedPetal : ((stage == EnumFlowerStage.POLLEN) ? this.pollenPetal : (flowered ? this.petal[section % this.sections] : this.unflowered[section % this.sections])); + } + + @Override + public IIcon getVariantIcon(final EnumFlowerStage stage, final boolean flowered, final int section) { + return (stage == EnumFlowerStage.SEED) ? this.seedVariant : ((stage == EnumFlowerStage.POLLEN) ? this.pollenVariant : (flowered ? this.variant[section % this.sections] : this.blank)); + } + + public void registerIcons(final IIconRegister register) { + for (int i = 0; i < this.sections; ++i) { + final String suf = (i == 0) ? "" : ("" + (i + 1)); + final String pre = (this.sections == 1) ? "" : "double/"; + this.stem[i] = Botany.proxy.getIcon(register, "flowers/" + pre + this.toString().toLowerCase() + suf + ".0"); + this.petal[i] = Botany.proxy.getIcon(register, "flowers/" + pre + this.toString().toLowerCase() + suf + ".1"); + this.variant[i] = Botany.proxy.getIcon(register, "flowers/" + pre + this.toString().toLowerCase() + suf + ".2"); + this.unflowered[i] = Botany.proxy.getIcon(register, "flowers/" + pre + this.toString().toLowerCase() + suf + ".3"); + } + this.blank = Botany.proxy.getIcon(register, "flowers/blank"); + this.seedStem = Botany.proxy.getIcon(register, "flowers/seed.0"); + this.seedPetal = Botany.proxy.getIcon(register, "flowers/seed.1"); + this.seedVariant = Botany.proxy.getIcon(register, "flowers/seed.2"); + this.pollenStem = Botany.proxy.getIcon(register, "flowers/pollen.0"); + this.pollenPetal = Botany.proxy.getIcon(register, "flowers/pollen.1"); + this.pollenVariant = Botany.proxy.getIcon(register, "flowers/pollen.2"); + } + + @Override + public int getID() { + return this.ordinal(); + } + + @Override + public int getSections() { + return this.sections; + } + + public IIcon getBlank() { + return this.blank; + } +} diff --git a/src/main/java/binnie/botany/genetics/Flower.java b/src/main/java/binnie/botany/genetics/Flower.java new file mode 100644 index 00000000..abcf555d --- /dev/null +++ b/src/main/java/binnie/botany/genetics/Flower.java @@ -0,0 +1,290 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.genetics; + +import binnie.botany.api.IFlowerColour; +import forestry.api.genetics.IGenome; +import binnie.botany.api.IFlowerMutation; +import binnie.botany.api.IColourMix; +import forestry.api.arboriculture.EnumTreeChromosome; +import net.minecraft.world.World; +import forestry.api.genetics.IAllele; +import forestry.core.genetics.Chromosome; +import forestry.api.genetics.IChromosome; +import java.util.Random; +import net.minecraft.nbt.NBTBase; +import binnie.botany.core.BotanyCore; +import forestry.api.genetics.IChromosomeType; +import binnie.botany.api.EnumFlowerChromosome; +import java.util.List; +import binnie.botany.api.IAlleleFlowerSpecies; +import net.minecraft.nbt.NBTTagCompound; +import binnie.botany.api.IFlowerGenome; +import binnie.botany.api.IFlower; +import forestry.core.genetics.Individual; + +public class Flower extends Individual implements IFlower +{ + public IFlowerGenome genome; + public IFlowerGenome mate; + int age; + boolean wilting; + boolean flowered; + + public Flower(final NBTTagCompound nbttagcompound) { + this.age = 0; + this.wilting = false; + this.readFromNBT(nbttagcompound); + } + + public Flower(final IFlowerGenome genome, final int age) { + this.age = 0; + this.wilting = false; + this.genome = genome; + this.age = age; + if (age > 0) { + this.flowered = true; + } + else { + this.flowered = false; + } + } + + @Override + public String getDisplayName() { + final IAlleleFlowerSpecies species = this.getGenome().getPrimary(); + String name = ""; + if (species != null) { + name += species.getName(); + } + if (this.age == 0) { + name += ""; + } + return name; + } + + @Override + public void addTooltip(final List list) { + final IAlleleFlowerSpecies primary = this.genome.getPrimary(); + final IAlleleFlowerSpecies secondary = this.genome.getSecondary(); + if (!this.isPureBred(EnumFlowerChromosome.SPECIES)) { + list.add("§9" + primary.getName() + "-" + secondary.getName() + " Hybrid"); + } + list.add("§6Age: " + this.getAge()); + list.add("§6T: " + this.getGenome().getPrimary().getTemperature() + " / " + this.getGenome().getToleranceTemperature()); + list.add("§6M: " + this.getGenome().getPrimary().getMoisture() + " / " + this.getGenome().getToleranceMoisture()); + list.add("§6pH: " + this.getGenome().getPrimary().getHumidity() + " / " + this.getGenome().getTolerancePH()); + list.add("§6Fert: " + this.getGenome().getFertility() + "x"); + } + + @Override + public String getIdent() { + return this.getGenome().getPrimary().getUID(); + } + + @Override + public void readFromNBT(final NBTTagCompound nbttagcompound) { + super.readFromNBT(nbttagcompound); + if (nbttagcompound == null) { + this.genome = BotanyCore.getFlowerRoot().templateAsGenome(BotanyCore.getFlowerRoot().getDefaultTemplate()); + return; + } + this.age = nbttagcompound.getInteger("Age"); + this.wilting = nbttagcompound.getBoolean("Wilt"); + this.flowered = nbttagcompound.getBoolean("Flowered"); + if (nbttagcompound.hasKey("Genome")) { + this.genome = new FlowerGenome(nbttagcompound.getCompoundTag("Genome")); + } + if (nbttagcompound.hasKey("Mate")) { + this.mate = new FlowerGenome(nbttagcompound.getCompoundTag("Mate")); + } + } + + @Override + public void writeToNBT(final NBTTagCompound nbttagcompound) { + super.writeToNBT(nbttagcompound); + nbttagcompound.setInteger("Age", this.age); + nbttagcompound.setBoolean("Wilt", this.wilting); + nbttagcompound.setBoolean("Flowered", this.flowered); + if (this.genome != null) { + final NBTTagCompound NBTmachine = new NBTTagCompound(); + this.genome.writeToNBT(NBTmachine); + nbttagcompound.setTag("Genome", NBTmachine); + } + if (this.mate != null) { + final NBTTagCompound NBTmachine = new NBTTagCompound(); + this.mate.writeToNBT(NBTmachine); + nbttagcompound.setTag("Mate", NBTmachine); + } + } + + public int getMetadata() { + return 0; + } + + @Override + public IFlowerGenome getGenome() { + return this.genome; + } + + private IChromosome inheritChromosome(final Random rand, final IChromosome parent1, final IChromosome parent2) { + IAllele choice1; + if (rand.nextBoolean()) { + choice1 = parent1.getPrimaryAllele(); + } + else { + choice1 = parent1.getSecondaryAllele(); + } + IAllele choice2; + if (rand.nextBoolean()) { + choice2 = parent2.getPrimaryAllele(); + } + else { + choice2 = parent2.getSecondaryAllele(); + } + if (rand.nextBoolean()) { + return new Chromosome(choice1, choice2); + } + return new Chromosome(choice2, choice1); + } + + @Override + public void mate(final IFlower other) { + this.mate = new FlowerGenome(other.getGenome().getChromosomes()); + } + + @Override + public IFlowerGenome getMate() { + return this.mate; + } + + @Override + public IFlower copy() { + final NBTTagCompound nbttagcompound = new NBTTagCompound(); + this.writeToNBT(nbttagcompound); + return new Flower(nbttagcompound); + } + + @Override + public int getAge() { + return this.age; + } + + @Override + public void age() { + if (this.age < 15) { + ++this.age; + } + } + + @Override + public void setAge(final int i) { + this.age = i; + } + + @Override + public int getMaxAge() { + return this.getGenome().getLifespan(); + } + + @Override + public boolean isWilted() { + return this.wilting; + } + + @Override + public void setWilted(final boolean wilted) { + this.wilting = wilted; + } + + @Override + public boolean hasFlowered() { + return this.flowered; + } + + @Override + public void setFlowered(final boolean flowered) { + this.flowered = flowered; + } + + @Override + public void removeMate() { + this.mate = null; + } + + @Override + public IFlower getOffspring(final World world) { + final IChromosome[] chromosomes = new IChromosome[this.genome.getChromosomes().length]; + IChromosome[] parent1 = this.genome.getChromosomes(); + IChromosome[] parent2 = this.mate.getChromosomes(); + parent1 = this.mutateSpecies(world, this.genome, this.mate); + parent2 = this.mutateSpecies(world, this.mate, this.genome); + for (int i = 0; i < parent1.length; ++i) { + if (parent1[i] != null && parent2[i] != null) { + chromosomes[i] = Chromosome.inheritChromosome(world.rand, parent1[i], parent2[i]); + } + } + return new Flower(new FlowerGenome(chromosomes), 0); + } + + private IChromosome[] mutateSpecies(final World world, final IFlowerGenome genomeOne, final IFlowerGenome genomeTwo) { + IChromosome[] parent1 = genomeOne.getChromosomes(); + final IChromosome[] parent2 = genomeTwo.getChromosomes(); + IAllele allele0; + IAllele allele2; + IFlowerGenome genome0; + IFlowerGenome genome2; + if (world.rand.nextBoolean()) { + allele0 = parent1[EnumTreeChromosome.SPECIES.ordinal()].getPrimaryAllele(); + allele2 = parent2[EnumTreeChromosome.SPECIES.ordinal()].getSecondaryAllele(); + genome0 = genomeOne; + genome2 = genomeTwo; + } + else { + allele0 = parent2[EnumTreeChromosome.SPECIES.ordinal()].getPrimaryAllele(); + allele2 = parent1[EnumTreeChromosome.SPECIES.ordinal()].getSecondaryAllele(); + genome0 = genomeTwo; + genome2 = genomeOne; + } + IFlowerColour colour1 = genome0.getPrimaryColor(); + IFlowerColour colour2 = genome2.getPrimaryColor(); + if (colour1 != colour2) { + for (final IColourMix mutation : BotanyCore.getFlowerRoot().getColourMixes(true)) { + if (mutation.isMutation(colour1, colour2) && world.rand.nextFloat() * 100.0f < mutation.getChance()) { + parent1[EnumFlowerChromosome.PRIMARY.ordinal()] = new Chromosome(mutation.getResult().getAllele()); + } + } + } + colour1 = genome0.getSecondaryColor(); + colour2 = genome2.getSecondaryColor(); + if (colour1 != colour2) { + for (final IColourMix mutation : BotanyCore.getFlowerRoot().getColourMixes(true)) { + if (mutation.isMutation(colour1, colour2) && world.rand.nextFloat() * 100.0f < mutation.getChance()) { + parent1[EnumFlowerChromosome.SECONDARY.ordinal()] = new Chromosome(mutation.getResult().getAllele()); + } + } + } + colour1 = genome0.getStemColor(); + colour2 = genome2.getStemColor(); + if (colour1 != colour2) { + for (final IColourMix mutation : BotanyCore.getFlowerRoot().getColourMixes(true)) { + if (mutation.isMutation(colour1, colour2) && world.rand.nextFloat() * 100.0f < mutation.getChance()) { + parent1[EnumFlowerChromosome.STEM.ordinal()] = new Chromosome(mutation.getResult().getAllele()); + } + } + } + IChromosome[] template = null; + for (final IFlowerMutation mutation2 : BotanyCore.getFlowerRoot().getMutations(true)) { + final float chance = mutation2.getChance(allele0, allele2, genome0, genome2); + if (chance > 0.0f && world.rand.nextFloat() * 100.0f < chance && template == null) { + template = BotanyCore.getFlowerRoot().templateAsChromosomes(mutation2.getTemplate()); + } + } + if (template != null) { + parent1 = template; + } + return parent1; + } +} diff --git a/src/main/java/binnie/botany/genetics/FlowerGenome.java b/src/main/java/binnie/botany/genetics/FlowerGenome.java new file mode 100644 index 00000000..df388bb3 --- /dev/null +++ b/src/main/java/binnie/botany/genetics/FlowerGenome.java @@ -0,0 +1,134 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.genetics; + +import forestry.api.core.EnumTemperature; +import binnie.botany.api.EnumMoisture; +import binnie.Binnie; +import binnie.botany.api.EnumAcidity; +import forestry.api.genetics.IAlleleFloat; +import forestry.api.genetics.IAlleleTolerance; +import forestry.api.genetics.EnumTolerance; +import binnie.botany.api.IFlowerType; +import forestry.api.genetics.IAlleleInteger; +import forestry.api.genetics.IChromosomeType; +import binnie.botany.core.BotanyCore; +import forestry.api.genetics.ISpeciesRoot; +import binnie.botany.api.EnumFlowerChromosome; +import binnie.botany.api.IAlleleFlowerSpecies; +import forestry.api.genetics.IChromosome; +import net.minecraft.nbt.NBTTagCompound; +import binnie.botany.api.IFlowerGenome; +import forestry.core.genetics.Genome; + +public class FlowerGenome extends Genome implements IFlowerGenome +{ + public FlowerGenome(final NBTTagCompound nbttagcompound) { + super(nbttagcompound); + } + + public FlowerGenome(final IChromosome[] chromosomes) { + super(chromosomes); + } + + @Override + public IAlleleFlowerSpecies getPrimary() { + return (IAlleleFlowerSpecies) this.getChromosomes()[EnumFlowerChromosome.SPECIES.ordinal()].getPrimaryAllele(); + } + + @Override + public IAlleleFlowerSpecies getSecondary() { + return (IAlleleFlowerSpecies) this.getChromosomes()[EnumFlowerChromosome.SPECIES.ordinal()].getSecondaryAllele(); + } + + @Override + public ISpeciesRoot getSpeciesRoot() { + return BotanyCore.getFlowerRoot(); + } + + @Override + public EnumFlowerColor getPrimaryColor() { + return ((AlleleColor) this.getActiveAllele(EnumFlowerChromosome.PRIMARY)).getColor(); + } + + @Override + public EnumFlowerColor getSecondaryColor() { + return ((AlleleColor) this.getActiveAllele(EnumFlowerChromosome.SECONDARY)).getColor(); + } + + @Override + public EnumFlowerColor getStemColor() { + return ((AlleleColor) this.getActiveAllele(EnumFlowerChromosome.STEM)).getColor(); + } + + @Override + public int getFertility() { + return ((IAlleleInteger) this.getActiveAllele(EnumFlowerChromosome.FERTILITY)).getValue(); + } + + @Override + public int getLifespan() { + return ((IAlleleInteger) this.getActiveAllele(EnumFlowerChromosome.LIFESPAN)).getValue() / 5; + } + + @Override + public IFlowerType getType() { + return this.getPrimary().getType(); + } + + @Override + public EnumTolerance getToleranceTemperature() { + return ((IAlleleTolerance) this.getActiveAllele(EnumFlowerChromosome.TEMPERATURE_TOLERANCE)).getValue(); + } + + @Override + public EnumTolerance getToleranceMoisture() { + return ((IAlleleTolerance) this.getActiveAllele(EnumFlowerChromosome.HUMIDITY_TOLERANCE)).getValue(); + } + + @Override + public EnumTolerance getTolerancePH() { + return ((IAlleleTolerance) this.getActiveAllele(EnumFlowerChromosome.PH_TOLERANCE)).getValue(); + } + + @Override + public void readFromNBT(final NBTTagCompound nbttagcompound) { + super.readFromNBT(nbttagcompound); + } + + @Override + public float getAgeChance() { + return 1.0f * (float) Math.sqrt(2.0f / this.getLifespan()); + } + + @Override + public float getSappiness() { + return ((IAlleleFloat) this.getActiveAllele(EnumFlowerChromosome.SAPPINESS)).getValue(); + } + + @Override + public boolean canTolerate(final EnumAcidity ePH) { + final int pH = ePH.ordinal(); + final int[] pHTol = Binnie.Genetics.getTolerance(this.getTolerancePH()); + final int fPH = this.getPrimary().getPH().ordinal(); + return pH >= fPH + pHTol[0] && pH <= fPH + pHTol[1]; + } + + @Override + public boolean canTolerate(final EnumMoisture eMoisture) { + final int moisture = eMoisture.ordinal(); + final int[] moistTol = Binnie.Genetics.getTolerance(this.getToleranceMoisture()); + final int fMoisture = this.getPrimary().getMoisture().ordinal(); + return moisture >= fMoisture + moistTol[0] && moisture <= fMoisture + moistTol[1]; + } + + @Override + public boolean canTolerate(final EnumTemperature eTemp) { + final int temp = eTemp.ordinal(); + final int[] tempTol = Binnie.Genetics.getTolerance(this.getToleranceTemperature()); + final int fTemp = this.getPrimary().getTemperature().ordinal(); + return temp >= fTemp + tempTol[0] && temp <= fTemp + tempTol[1]; + } +} diff --git a/src/main/java/binnie/botany/genetics/FlowerHelper.java b/src/main/java/binnie/botany/genetics/FlowerHelper.java new file mode 100644 index 00000000..c42219b9 --- /dev/null +++ b/src/main/java/binnie/botany/genetics/FlowerHelper.java @@ -0,0 +1,286 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.genetics; + +import forestry.api.genetics.ISpeciesType; +import binnie.botany.api.EnumFlowerChromosome; +import forestry.api.genetics.IChromosomeType; + +import net.minecraft.world.WorldSavedData; + +import binnie.botany.api.IBotanistTracker; + +import com.mojang.authlib.GameProfile; + +import forestry.api.genetics.IMutation; + +import java.util.Collections; +import java.util.Collection; +import java.util.Random; + +import binnie.botany.api.IFlowerGenome; + +import net.minecraft.world.World; +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; + +import binnie.botany.Botany; +import forestry.api.genetics.IIndividual; +import binnie.botany.api.EnumFlowerStage; + +import binnie.botany.api.IAlleleFlowerSpecies; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.AlleleManager; + +import java.util.HashMap; + +import binnie.botany.api.IColourMix; + +import net.minecraft.item.ItemStack; + +import java.util.Map; + +import binnie.botany.api.IFlowerMutation; +import binnie.botany.api.IFlower; + +import java.util.ArrayList; + +import binnie.botany.api.IFlowerRoot; +import forestry.core.genetics.SpeciesRoot; + +public class FlowerHelper extends SpeciesRoot implements IFlowerRoot +{ + public static int flowerSpeciesCount; + static final String UID = "rootFlowers"; + public static ArrayList flowerTemplates; + private static ArrayList flowerMutations; + Map conversions; + private static ArrayList colourMixes; + + public FlowerHelper() { + this.conversions = new HashMap(); + } + + @Override + public String getUID() { + return "rootFlowers"; + } + + @Override + public int getSpeciesCount() { + if (FlowerHelper.flowerSpeciesCount < 0) { + FlowerHelper.flowerSpeciesCount = 0; + for (final Map.Entry entry : AlleleManager.alleleRegistry.getRegisteredAlleles().entrySet()) { + if (entry.getValue() instanceof IAlleleFlowerSpecies && ((IAlleleFlowerSpecies) entry.getValue()).isCounted()) { + ++FlowerHelper.flowerSpeciesCount; + } + } + } + return FlowerHelper.flowerSpeciesCount; + } + + @Override + public boolean isMember(final ItemStack stack) { + return stack != null && this.getStageType(stack) != EnumFlowerStage.NONE; + } + + @Override + public boolean isMember(final ItemStack stack, final int type) { + return this.getStageType(stack).ordinal() == type; + } + + @Override + public boolean isMember(final IIndividual individual) { + return individual instanceof IFlower; + } + + @Override + public ItemStack getMemberStack(final IIndividual flower, final int type) { + if (!this.isMember(flower)) { + return null; + } + Item flowerItem = Botany.flowerItem; + if (type == EnumFlowerStage.SEED.ordinal()) { + flowerItem = Botany.seed; + } + if (type == EnumFlowerStage.POLLEN.ordinal()) { + flowerItem = Botany.pollen; + } + if (flowerItem != Botany.flowerItem) { + ((IFlower) flower).setAge(0); + } + final NBTTagCompound nbttagcompound = new NBTTagCompound(); + flower.writeToNBT(nbttagcompound); + final ItemStack flowerStack = new ItemStack(flowerItem); + flowerStack.setTagCompound(nbttagcompound); + return flowerStack; + } + + @Override + public EnumFlowerStage getStageType(final ItemStack stack) { + return (stack == null) ? EnumFlowerStage.NONE : ((stack.getItem() == Botany.flowerItem) ? EnumFlowerStage.FLOWER : ((stack.getItem() == Botany.pollen) ? EnumFlowerStage.POLLEN : ((stack.getItem() == Botany.seed) ? EnumFlowerStage.SEED : EnumFlowerStage.NONE))); + } + + @Override + public IFlower getMember(final ItemStack stack) { + if (!this.isMember(stack)) { + return null; + } + return new Flower(stack.getTagCompound()); + } + + @Override + public IFlower getFlower(final World world, final IFlowerGenome genome) { + return new Flower(genome, 2); + } + + @Override + public IFlowerGenome templateAsGenome(final IAllele[] template) { + return new FlowerGenome(this.templateAsChromosomes(template)); + } + + @Override + public IFlowerGenome templateAsGenome(final IAllele[] templateActive, final IAllele[] templateInactive) { + return new FlowerGenome(this.templateAsChromosomes(templateActive, templateInactive)); + } + + @Override + public IFlower templateAsIndividual(final IAllele[] template) { + return new Flower(this.templateAsGenome(template), 2); + } + + @Override + public IFlower templateAsIndividual(final IAllele[] templateActive, final IAllele[] templateInactive) { + return new Flower(this.templateAsGenome(templateActive, templateInactive), 2); + } + + @Override + public ArrayList getIndividualTemplates() { + return FlowerHelper.flowerTemplates; + } + + @Override + public void registerTemplate(final IAllele[] template) { + this.registerTemplate(template[0].getUID(), template); + } + + @Override + public void registerTemplate(final String identifier, final IAllele[] template) { + FlowerHelper.flowerTemplates.add(new Flower(this.templateAsGenome(template), 2)); + if (!this.speciesTemplates.containsKey(identifier)) { + this.speciesTemplates.put(identifier, template); + } + } + + @Override + public IAllele[] getTemplate(final String identifier) { + return this.speciesTemplates.get(identifier); + } + + @Override + public IAllele[] getDefaultTemplate() { + return FlowerTemplates.getDefaultTemplate(); + } + + @Override + public IAllele[] getRandomTemplate(final Random rand) { + return this.speciesTemplates.values().toArray(new IAllele[0][])[rand.nextInt(this.speciesTemplates.values().size())]; + } + + @Override + public Collection getMutations(final boolean shuffle) { + if (shuffle) { + Collections.shuffle(FlowerHelper.flowerMutations); + } + return FlowerHelper.flowerMutations; + } + + @Override + public void registerMutation(final IMutation mutation) { + if (AlleleManager.alleleRegistry.isBlacklisted(mutation.getTemplate()[0].getUID())) { + return; + } + if (AlleleManager.alleleRegistry.isBlacklisted(mutation.getAllele0().getUID())) { + return; + } + if (AlleleManager.alleleRegistry.isBlacklisted(mutation.getAllele1().getUID())) { + return; + } + FlowerHelper.flowerMutations.add((IFlowerMutation) mutation); + } + + @Override + public IBotanistTracker getBreedingTracker(final World world, final GameProfile player) { + final String filename = "BotanistTracker." + ((player == null) ? "common" : player.getId()); + BotanistTracker tracker = (BotanistTracker) world.loadItemData(BotanistTracker.class, filename); + if (tracker == null) { + tracker = new BotanistTracker(filename); + world.setItemData(filename, tracker); + } + return tracker; + } + + @Override + public IIndividual getMember(final NBTTagCompound compound) { + return new Flower(compound); + } + + @Override + public Class getMemberClass() { + return IFlower.class; + } + + @Override + public IChromosomeType[] getKaryotype() { + return EnumFlowerChromosome.values(); + } + + @Override + public IChromosomeType getKaryotypeKey() { + return EnumFlowerChromosome.SPECIES; + } + + @Override + public void addConversion(final ItemStack itemstack, final IAllele[] template) { + final IFlower flower = this.getFlower(null, this.templateAsGenome(template)); + this.conversions.put(itemstack, flower); + } + + @Override + public IFlower getConversion(final ItemStack itemstack) { + for (final Map.Entry entry : this.conversions.entrySet()) { + if (entry.getKey().isItemEqual(itemstack)) { + return (IFlower) entry.getValue().copy(); + } + } + return null; + } + + @Override + public void registerColourMix(final IColourMix colourMix) { + FlowerHelper.colourMixes.add(colourMix); + } + + @Override + public Collection getColourMixes(final boolean shuffle) { + if (shuffle) { + Collections.shuffle(FlowerHelper.colourMixes); + } + return FlowerHelper.colourMixes; + } + + static { + FlowerHelper.flowerSpeciesCount = -1; + FlowerHelper.flowerTemplates = new ArrayList(); + FlowerHelper.flowerMutations = new ArrayList(); + FlowerHelper.colourMixes = new ArrayList(); + } + + // ?? + @Override + public ISpeciesType getType(ItemStack itemstack) { + return null; + } +} diff --git a/src/main/java/binnie/botany/genetics/FlowerMutation.java b/src/main/java/binnie/botany/genetics/FlowerMutation.java new file mode 100644 index 00000000..203e5ad8 --- /dev/null +++ b/src/main/java/binnie/botany/genetics/FlowerMutation.java @@ -0,0 +1,89 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.genetics; + +import java.util.ArrayList; +import java.util.Collection; + +import binnie.botany.core.BotanyCore; +import forestry.api.genetics.ISpeciesRoot; +import forestry.api.genetics.IGenome; +import forestry.api.genetics.IAllele; +import binnie.botany.api.IAlleleFlowerSpecies; +import binnie.botany.api.IFlowerMutation; + +public class FlowerMutation implements IFlowerMutation +{ + IAlleleFlowerSpecies allele0; + IAlleleFlowerSpecies allele1; + IAllele[] template; + int chance; + + FlowerMutation(final IAlleleFlowerSpecies allele0, final IAlleleFlowerSpecies allele1, final IAllele[] template, final int chance) { + this.allele0 = allele0; + this.allele1 = allele1; + this.template = template; + this.chance = chance; + } + + @Override + public IAlleleFlowerSpecies getAllele0() { + return this.allele0; + } + + @Override + public IAlleleFlowerSpecies getAllele1() { + return this.allele1; + } + + @Override + public IAllele[] getTemplate() { + return this.template; + } + + @Override + public float getBaseChance() { + return this.chance; + } + + @Override + public boolean isPartner(final IAllele allele) { + return allele.getUID().equals(this.allele0.getUID()) || allele.getUID().equals(this.allele1.getUID()); + } + + @Override + public IAllele getPartner(final IAllele allele) { + return allele.getUID().equals(this.allele0.getUID()) ? this.allele1 : this.allele0; + } + + @Override + public boolean isSecret() { + return false; + } + + @Override + public float getChance(final IAllele allele0, final IAllele allele1, final IGenome genome0, final IGenome genome1) { + if (allele0 == null || allele1 == null) { + return 0.0f; + } + if (this.allele0.getUID().equals(allele0.getUID()) && this.allele1.getUID().equals(allele1.getUID())) { + return this.getBaseChance(); + } + if (this.allele1.getUID().equals(allele0.getUID()) && this.allele0.getUID().equals(allele1.getUID())) { + return this.getBaseChance(); + } + return 0.0f; + } + + @Override + public ISpeciesRoot getRoot() { + return BotanyCore.getFlowerRoot(); + } + + @Override + public Collection getSpecialConditions() { + return new ArrayList(); + } +} diff --git a/src/main/java/binnie/botany/genetics/FlowerSpecies.java b/src/main/java/binnie/botany/genetics/FlowerSpecies.java new file mode 100644 index 00000000..300f580c --- /dev/null +++ b/src/main/java/binnie/botany/genetics/FlowerSpecies.java @@ -0,0 +1,555 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.genetics; + +import forestry.api.genetics.IIndividual; +import com.mojang.authlib.GameProfile; +import net.minecraft.world.World; +import forestry.api.genetics.ISpeciesRoot; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import forestry.api.core.IIconProvider; +import binnie.Binnie; +import forestry.api.core.EnumHumidity; +import binnie.botany.api.EnumFlowerChromosome; +import java.util.ArrayList; +import forestry.api.genetics.IMutation; +import forestry.api.genetics.IAlleleSpecies; +import forestry.api.genetics.AlleleManager; +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.init.Blocks; +import binnie.botany.core.BotanyCore; +import forestry.api.genetics.IClassification; +import forestry.api.genetics.IAllele; +import java.util.List; +import forestry.api.genetics.EnumTolerance; +import binnie.botany.api.EnumMoisture; +import binnie.botany.api.EnumAcidity; +import forestry.api.core.EnumTemperature; +import binnie.botany.api.IFlowerType; +import binnie.core.genetics.ForestryAllele; +import binnie.botany.api.IAlleleFlowerSpecies; + +public enum FlowerSpecies implements IAlleleFlowerSpecies +{ + Dandelion("Dandelion", "taraxacum", "officinale", EnumFlowerType.Dandelion, EnumFlowerColor.Yellow), + Poppy("Poppy", "papaver", "rhoeas", EnumFlowerType.Poppy, EnumFlowerColor.Red), + Orchid("Orchid", "vanda", "coerulea", EnumFlowerType.Orchid, EnumFlowerColor.DeepSkyBlue), + Allium("Allium", "allium", "giganteum", EnumFlowerType.Allium, EnumFlowerColor.MediumPurple), + Bluet("Bluet", "houstonia", "caerulea", EnumFlowerType.Bluet, EnumFlowerColor.Lavender, EnumFlowerColor.Khaki), + Tulip("Tulip", "tulipa", "agenensis", EnumFlowerType.Tulip, EnumFlowerColor.Violet), + Daisy("Daisy", "leucanthemum", "vulgare", EnumFlowerType.Daisy, EnumFlowerColor.White, EnumFlowerColor.Yellow), + Cornflower("Cornflower", "centaurea", "cyanus", EnumFlowerType.Cornflower, EnumFlowerColor.SkyBlue), + Pansy("Pansy", "viola", "tricolor", EnumFlowerType.Pansy, EnumFlowerColor.Pink, EnumFlowerColor.Purple), + Iris("Iris", "iris", "germanica", EnumFlowerType.Iris, EnumFlowerColor.LightGray, EnumFlowerColor.Purple), + Lavender("Lavender", "Lavandula", "angustifolia", EnumFlowerType.Lavender, EnumFlowerColor.MediumOrchid), + Viola("Viola", "viola", "odorata", EnumFlowerType.Viola, EnumFlowerColor.MediumPurple, EnumFlowerColor.SlateBlue), + Daffodil("Daffodil", "narcissus", "pseudonarcissus", EnumFlowerType.Daffodil, EnumFlowerColor.Yellow, EnumFlowerColor.Gold), + Dahlia("Dahlia", "dahlia", "variabilis", EnumFlowerType.Dahlia, EnumFlowerColor.HotPink, EnumFlowerColor.DeepPink), + Peony("Peony", "paeonia", "suffruticosa", EnumFlowerType.Peony, EnumFlowerColor.Thistle), + Rose("Rose", "rosa", "rubiginosa", EnumFlowerType.Rose, EnumFlowerColor.Red), + Lilac("Lilac", "syringa", "vulgaris", EnumFlowerType.Lilac, EnumFlowerColor.Plum), + Hydrangea("Hydrangea", "hydrangea", "macrophylla", EnumFlowerType.Hydrangea, EnumFlowerColor.DeepSkyBlue), + Foxglove("Foxglove", "digitalis", "purpurea", EnumFlowerType.Foxglove, EnumFlowerColor.HotPink), + Zinnia("Zinnia", "zinnia", "elegans", EnumFlowerType.Zinnia, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Yellow), + Chrysanthemum("Chrysanthemum", "chrysanthemum", "\u00ef?? grandiflorum", EnumFlowerType.Mums, EnumFlowerColor.Violet), + Marigold("Marigold", "calendula", "officinalis", EnumFlowerType.Marigold, EnumFlowerColor.Gold, EnumFlowerColor.DarkOrange), + Geranium("Geranium", "geranium", "maderense", EnumFlowerType.Geranium, EnumFlowerColor.DeepPink), + Azalea("Azalea", "rhododendrons", "aurigeranum", EnumFlowerType.Azalea, EnumFlowerColor.HotPink), + Primrose("Primrose", "primula", "vulgaris", EnumFlowerType.Primrose, EnumFlowerColor.Red, EnumFlowerColor.Gold), + Aster("Aster", "aster", "amellus", EnumFlowerType.Aster, EnumFlowerColor.MediumPurple, EnumFlowerColor.Goldenrod), + Carnation("Carnation", "dianthus", "caryophyllus", EnumFlowerType.Carnation, EnumFlowerColor.Crimson, EnumFlowerColor.White), + Lily("Lily", "lilium", "auratum", EnumFlowerType.Lily, EnumFlowerColor.Pink, EnumFlowerColor.Gold), + Yarrow("Yarrow", "achillea", "millefolium", EnumFlowerType.Yarrow, EnumFlowerColor.Yellow), + Petunia("Petunia", "petunia", "\u00ef?? atkinsiana", EnumFlowerType.Petunia, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Thistle), + Agapanthus("Agapanthus", "agapanthus", "praecox", EnumFlowerType.Agapanthus, EnumFlowerColor.DeepSkyBlue), + Fuchsia("Fuchsia", "fuchsia", "magellanica", EnumFlowerType.Fuchsia, EnumFlowerColor.DeepPink, EnumFlowerColor.MediumOrchid), + Dianthus("Dianthus", "dianthus", "barbatus", EnumFlowerType.Dianthus, EnumFlowerColor.Crimson, EnumFlowerColor.HotPink), + Forget("Forget-me-nots", "myosotis", "arvensis", EnumFlowerType.Forget, EnumFlowerColor.LightSteelBlue), + Anemone("Anemone", "anemone", "coronaria", EnumFlowerType.Anemone, EnumFlowerColor.Red, EnumFlowerColor.MistyRose), + Aquilegia("Aquilegia", "aquilegia", "vulgaris", EnumFlowerType.Aquilegia, EnumFlowerColor.SlateBlue, EnumFlowerColor.Thistle), + Edelweiss("Edelweiss", "leontopodium", "alpinum", EnumFlowerType.Edelweiss, EnumFlowerColor.White, EnumFlowerColor.Khaki), + Scabious("Scabious", "scabiosa", "columbaria", EnumFlowerType.Scabious, EnumFlowerColor.RoyalBlue), + Coneflower("Coneflower", "echinacea", "purpurea", EnumFlowerType.Coneflower, EnumFlowerColor.Violet, EnumFlowerColor.DarkOrange), + Gaillardia("Gaillardia", "gaillardia", "aristata", EnumFlowerType.Gaillardia, EnumFlowerColor.DarkOrange, EnumFlowerColor.Yellow), + Auricula("Auricula", "primula", "auricula", EnumFlowerType.Auricula, EnumFlowerColor.Red, EnumFlowerColor.Yellow), + Camellia("Camellia", "camellia", "japonica", EnumFlowerType.Camellia, EnumFlowerColor.Crimson), + Goldenrod("Goldenrod", "solidago", "canadensis", EnumFlowerType.Goldenrod, EnumFlowerColor.Gold), + Althea("Althea", "althaea", "officinalis", EnumFlowerType.Althea, EnumFlowerColor.Thistle, EnumFlowerColor.MediumOrchid), + Penstemon("Penstemon", "penstemon", "digitalis", EnumFlowerType.Penstemon, EnumFlowerColor.MediumOrchid, EnumFlowerColor.Thistle), + Delphinium("Delphinium", "delphinium", "staphisagria", EnumFlowerType.Delphinium, EnumFlowerColor.DarkSlateBlue), + Hollyhock("Hollyhock", "Alcea", "rosea", EnumFlowerType.Hollyhock, EnumFlowerColor.Black, EnumFlowerColor.Gold); + + EnumFlowerColor stemColor; + ForestryAllele.Fertility fert; + ForestryAllele.Lifespan life; + ForestryAllele.Sappiness sap; + IFlowerType type; + String name; + String binomial; + String branchName; + EnumFlowerColor primaryColor; + EnumFlowerColor secondaryColor; + EnumTemperature temperature; + EnumAcidity pH; + EnumMoisture moisture; + EnumTolerance tempTolerance; + EnumTolerance pHTolerance; + EnumTolerance moistureTolerance; + List variantTemplates; + IClassification branch; + + public static void setupVariants() { + FlowerSpecies.Dandelion.setTraits(ForestryAllele.Fertility.High, ForestryAllele.Lifespan.Shortened, ForestryAllele.Sappiness.Lower); + FlowerSpecies.Poppy.setTraits(ForestryAllele.Fertility.High, ForestryAllele.Lifespan.Shorter, ForestryAllele.Sappiness.Average); + FlowerSpecies.Orchid.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Long, ForestryAllele.Sappiness.Low); + FlowerSpecies.Allium.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Normal, ForestryAllele.Sappiness.Low); + FlowerSpecies.Bluet.setTraits(ForestryAllele.Fertility.Low, ForestryAllele.Lifespan.Normal, ForestryAllele.Sappiness.Lower); + FlowerSpecies.Tulip.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Long, ForestryAllele.Sappiness.Average); + FlowerSpecies.Daisy.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Normal, ForestryAllele.Sappiness.Low); + FlowerSpecies.Cornflower.setTraits(ForestryAllele.Fertility.High, ForestryAllele.Lifespan.Shorter, ForestryAllele.Sappiness.Low); + FlowerSpecies.Pansy.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Shortened, ForestryAllele.Sappiness.Average); + FlowerSpecies.Iris.setTraits(ForestryAllele.Fertility.High, ForestryAllele.Lifespan.Normal, ForestryAllele.Sappiness.Average); + FlowerSpecies.Lavender.setTraits(ForestryAllele.Fertility.High, ForestryAllele.Lifespan.Normal, ForestryAllele.Sappiness.Low); + FlowerSpecies.Viola.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Shortened, ForestryAllele.Sappiness.Average); + FlowerSpecies.Daffodil.setTraits(ForestryAllele.Fertility.High, ForestryAllele.Lifespan.Elongated, ForestryAllele.Sappiness.Average); + FlowerSpecies.Aster.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Normal, ForestryAllele.Sappiness.Higher); + FlowerSpecies.Lilac.setTraits(ForestryAllele.Fertility.Low, ForestryAllele.Lifespan.Longer, ForestryAllele.Sappiness.Average); + FlowerSpecies.Rose.setTraits(ForestryAllele.Fertility.Low, ForestryAllele.Lifespan.Longer, ForestryAllele.Sappiness.High); + FlowerSpecies.Peony.setTraits(ForestryAllele.Fertility.Low, ForestryAllele.Lifespan.Long, ForestryAllele.Sappiness.Average); + FlowerSpecies.Marigold.setTraits(ForestryAllele.Fertility.High, ForestryAllele.Lifespan.Shorter, ForestryAllele.Sappiness.Average); + FlowerSpecies.Hydrangea.setTraits(ForestryAllele.Fertility.Low, ForestryAllele.Lifespan.Longer, ForestryAllele.Sappiness.High); + FlowerSpecies.Foxglove.setTraits(ForestryAllele.Fertility.Low, ForestryAllele.Lifespan.Shortened, ForestryAllele.Sappiness.Low); + FlowerSpecies.Dahlia.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Normal, ForestryAllele.Sappiness.Average); + FlowerSpecies.Chrysanthemum.setTraits(ForestryAllele.Fertility.High, ForestryAllele.Lifespan.Long, ForestryAllele.Sappiness.High); + FlowerSpecies.Carnation.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Normal, ForestryAllele.Sappiness.High); + FlowerSpecies.Zinnia.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Shorter, ForestryAllele.Sappiness.Average); + FlowerSpecies.Primrose.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Long, ForestryAllele.Sappiness.Average); + FlowerSpecies.Azalea.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Normal, ForestryAllele.Sappiness.Average); + FlowerSpecies.Geranium.setTraits(ForestryAllele.Fertility.Low, ForestryAllele.Lifespan.Long, ForestryAllele.Sappiness.Low); + FlowerSpecies.Lily.setTraits(ForestryAllele.Fertility.Low, ForestryAllele.Lifespan.Long, ForestryAllele.Sappiness.Low); + FlowerSpecies.Yarrow.setTraits(ForestryAllele.Fertility.High, ForestryAllele.Lifespan.Normal, ForestryAllele.Sappiness.Low); + FlowerSpecies.Petunia.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Shorter, ForestryAllele.Sappiness.Average); + FlowerSpecies.Agapanthus.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Normal, ForestryAllele.Sappiness.Low); + FlowerSpecies.Fuchsia.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Shortened, ForestryAllele.Sappiness.Average); + FlowerSpecies.Dianthus.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Short, ForestryAllele.Sappiness.High); + FlowerSpecies.Forget.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Short, ForestryAllele.Sappiness.Lower); + FlowerSpecies.Anemone.setTraits(ForestryAllele.Fertility.High, ForestryAllele.Lifespan.Normal, ForestryAllele.Sappiness.Low); + FlowerSpecies.Aquilegia.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Normal, ForestryAllele.Sappiness.Average); + FlowerSpecies.Edelweiss.setTraits(ForestryAllele.Fertility.Low, ForestryAllele.Lifespan.Normal, ForestryAllele.Sappiness.Lowest); + FlowerSpecies.Scabious.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Shortened, ForestryAllele.Sappiness.Low); + FlowerSpecies.Coneflower.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Normal, ForestryAllele.Sappiness.Higher); + FlowerSpecies.Gaillardia.setTraits(ForestryAllele.Fertility.High, ForestryAllele.Lifespan.Long, ForestryAllele.Sappiness.Higher); + FlowerSpecies.Auricula.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Elongated, ForestryAllele.Sappiness.High); + FlowerSpecies.Camellia.setTraits(ForestryAllele.Fertility.Normal, ForestryAllele.Lifespan.Normal, ForestryAllele.Sappiness.High); + FlowerSpecies.Goldenrod.setTraits(ForestryAllele.Fertility.High, ForestryAllele.Lifespan.Normal, ForestryAllele.Sappiness.Higher); + FlowerSpecies.Althea.setTraits(ForestryAllele.Fertility.Low, ForestryAllele.Lifespan.Elongated, ForestryAllele.Sappiness.High); + FlowerSpecies.Penstemon.setTraits(ForestryAllele.Fertility.Low, ForestryAllele.Lifespan.Long, ForestryAllele.Sappiness.Low); + FlowerSpecies.Delphinium.setTraits(ForestryAllele.Fertility.Low, ForestryAllele.Lifespan.Longer, ForestryAllele.Sappiness.Low); + FlowerSpecies.Hollyhock.setTraits(ForestryAllele.Fertility.Low, ForestryAllele.Lifespan.Long, ForestryAllele.Sappiness.High); + FlowerSpecies.Dandelion.setPH(EnumAcidity.Neutral, EnumTolerance.BOTH_1); + FlowerSpecies.Dandelion.setMoisture(EnumMoisture.Normal, EnumTolerance.BOTH_1); + FlowerSpecies.Poppy.setPH(EnumAcidity.Neutral, EnumTolerance.DOWN_1); + FlowerSpecies.Poppy.setMoisture(EnumMoisture.Normal, EnumTolerance.DOWN_1); + FlowerSpecies.Poppy.setTemperature(EnumTemperature.WARM, EnumTolerance.BOTH_2); + FlowerSpecies.Orchid.setPH(EnumAcidity.Acid, EnumTolerance.NONE); + FlowerSpecies.Orchid.setMoisture(EnumMoisture.Normal, EnumTolerance.BOTH_1); + FlowerSpecies.Allium.setPH(EnumAcidity.Alkaline, EnumTolerance.DOWN_1); + FlowerSpecies.Allium.setMoisture(EnumMoisture.Normal, EnumTolerance.DOWN_1); + FlowerSpecies.Bluet.setPH(EnumAcidity.Neutral, EnumTolerance.DOWN_1); + FlowerSpecies.Bluet.setMoisture(EnumMoisture.Damp, EnumTolerance.NONE); + FlowerSpecies.Tulip.setMoisture(EnumMoisture.Normal, EnumTolerance.BOTH_1); + FlowerSpecies.Daisy.setPH(EnumAcidity.Neutral, EnumTolerance.DOWN_1); + FlowerSpecies.Daisy.setMoisture(EnumMoisture.Normal, EnumTolerance.DOWN_1); + FlowerSpecies.Daisy.setTemperature(EnumTemperature.WARM, EnumTolerance.BOTH_2); + FlowerSpecies.Cornflower.setMutation(FlowerSpecies.Dandelion, FlowerSpecies.Tulip, 10); + FlowerSpecies.Cornflower.setPH(EnumAcidity.Neutral, EnumTolerance.BOTH_1); + FlowerSpecies.Pansy.setMutation(FlowerSpecies.Tulip, FlowerSpecies.Viola, 5); + FlowerSpecies.Pansy.setPH(EnumAcidity.Acid, EnumTolerance.NONE); + FlowerSpecies.Pansy.setTemperature(EnumTemperature.WARM, EnumTolerance.DOWN_1); + FlowerSpecies.Iris.setMutation(FlowerSpecies.Orchid, FlowerSpecies.Viola, 10); + FlowerSpecies.Iris.setPH(EnumAcidity.Acid, EnumTolerance.NONE); + FlowerSpecies.Iris.setTemperature(EnumTemperature.WARM, EnumTolerance.DOWN_1); + FlowerSpecies.Lavender.setMutation(FlowerSpecies.Allium, FlowerSpecies.Viola, 10); + FlowerSpecies.Lavender.setPH(EnumAcidity.Neutral, EnumTolerance.UP_1); + FlowerSpecies.Lavender.setMoisture(EnumMoisture.Normal, EnumTolerance.DOWN_1); + FlowerSpecies.Lavender.setTemperature(EnumTemperature.WARM, EnumTolerance.DOWN_1); + FlowerSpecies.Viola.setMutation(FlowerSpecies.Orchid, FlowerSpecies.Poppy, 15); + FlowerSpecies.Viola.setPH(EnumAcidity.Acid, EnumTolerance.NONE); + FlowerSpecies.Viola.setMoisture(EnumMoisture.Normal, EnumTolerance.DOWN_1); + FlowerSpecies.Daffodil.setMutation(FlowerSpecies.Dandelion, FlowerSpecies.Poppy, 10); + FlowerSpecies.Daffodil.setPH(EnumAcidity.Neutral, EnumTolerance.DOWN_1); + FlowerSpecies.Aster.setMutation(FlowerSpecies.Daisy, FlowerSpecies.Tulip, 10); + FlowerSpecies.Aster.setPH(EnumAcidity.Neutral, EnumTolerance.BOTH_1); + FlowerSpecies.Lilac.setPH(EnumAcidity.Alkaline, EnumTolerance.DOWN_1); + FlowerSpecies.Rose.setPH(EnumAcidity.Acid, EnumTolerance.UP_1); + FlowerSpecies.Peony.setPH(EnumAcidity.Alkaline, EnumTolerance.DOWN_1); + FlowerSpecies.Peony.setMoisture(EnumMoisture.Normal, EnumTolerance.UP_1); + FlowerSpecies.Marigold.setMutation(FlowerSpecies.Daisy, FlowerSpecies.Dandelion, 10); + FlowerSpecies.Marigold.setPH(EnumAcidity.Neutral, EnumTolerance.DOWN_1); + FlowerSpecies.Marigold.setMoisture(EnumMoisture.Normal, EnumTolerance.UP_1); + FlowerSpecies.Marigold.setTemperature(EnumTemperature.WARM, EnumTolerance.BOTH_2); + FlowerSpecies.Hydrangea.setMutation(FlowerSpecies.Peony, FlowerSpecies.Bluet, 10); + FlowerSpecies.Hydrangea.setPH(EnumAcidity.Neutral, EnumTolerance.BOTH_1); + FlowerSpecies.Hydrangea.setMoisture(EnumMoisture.Damp, EnumTolerance.NONE); + FlowerSpecies.Foxglove.setMutation(FlowerSpecies.Lilac, FlowerSpecies.Zinnia, 5); + FlowerSpecies.Foxglove.setPH(EnumAcidity.Neutral, EnumTolerance.DOWN_1); + FlowerSpecies.Foxglove.setMoisture(EnumMoisture.Normal, EnumTolerance.UP_1); + FlowerSpecies.Dahlia.setMutation(FlowerSpecies.Daisy, FlowerSpecies.Allium, 15); + FlowerSpecies.Dahlia.setPH(EnumAcidity.Neutral, EnumTolerance.DOWN_1); + FlowerSpecies.Dahlia.setMoisture(EnumMoisture.Normal, EnumTolerance.UP_1); + FlowerSpecies.Dahlia.setTemperature(EnumTemperature.NORMAL, EnumTolerance.BOTH_2); + FlowerSpecies.Chrysanthemum.setMutation(FlowerSpecies.Geranium, FlowerSpecies.Rose, 10); + FlowerSpecies.Chrysanthemum.setPH(EnumAcidity.Neutral, EnumTolerance.DOWN_1); + FlowerSpecies.Chrysanthemum.setMoisture(EnumMoisture.Normal, EnumTolerance.DOWN_1); + FlowerSpecies.Carnation.setMutation(FlowerSpecies.Dianthus, FlowerSpecies.Rose, 5); + FlowerSpecies.Carnation.setPH(EnumAcidity.Alkaline, EnumTolerance.DOWN_1); + FlowerSpecies.Zinnia.setMutation(FlowerSpecies.Dahlia, FlowerSpecies.Marigold, 5); + FlowerSpecies.Zinnia.setPH(EnumAcidity.Neutral, EnumTolerance.BOTH_1); + FlowerSpecies.Zinnia.setMoisture(EnumMoisture.Normal, EnumTolerance.DOWN_1); + FlowerSpecies.Zinnia.setTemperature(EnumTemperature.NORMAL, EnumTolerance.BOTH_2); + FlowerSpecies.Primrose.setMutation(FlowerSpecies.Chrysanthemum, FlowerSpecies.Auricula, 5); + FlowerSpecies.Primrose.setPH(EnumAcidity.Acid, EnumTolerance.UP_1); + FlowerSpecies.Primrose.setMoisture(EnumMoisture.Normal, EnumTolerance.UP_1); + FlowerSpecies.Azalea.setMutation(FlowerSpecies.Orchid, FlowerSpecies.Geranium, 5); + FlowerSpecies.Azalea.setPH(EnumAcidity.Acid, EnumTolerance.NONE); + FlowerSpecies.Geranium.setMutation(FlowerSpecies.Tulip, FlowerSpecies.Orchid, 15); + FlowerSpecies.Geranium.setPH(EnumAcidity.Neutral, EnumTolerance.BOTH_1); + FlowerSpecies.Geranium.setTemperature(EnumTemperature.WARM, EnumTolerance.BOTH_1); + FlowerSpecies.Lily.setMutation(FlowerSpecies.Tulip, FlowerSpecies.Chrysanthemum, 5); + FlowerSpecies.Lily.setPH(EnumAcidity.Neutral, EnumTolerance.DOWN_1); + FlowerSpecies.Lily.setTemperature(EnumTemperature.WARM, EnumTolerance.BOTH_1); + FlowerSpecies.Yarrow.setMutation(FlowerSpecies.Dandelion, FlowerSpecies.Orchid, 10); + FlowerSpecies.Yarrow.setPH(EnumAcidity.Acid, EnumTolerance.UP_1); + FlowerSpecies.Yarrow.setMoisture(EnumMoisture.Normal, EnumTolerance.DOWN_1); + FlowerSpecies.Petunia.setMutation(FlowerSpecies.Tulip, FlowerSpecies.Dahlia, 5); + FlowerSpecies.Petunia.setPH(EnumAcidity.Neutral, EnumTolerance.DOWN_1); + FlowerSpecies.Petunia.setMoisture(EnumMoisture.Normal, EnumTolerance.UP_1); + FlowerSpecies.Petunia.setTemperature(EnumTemperature.WARM, EnumTolerance.UP_1); + FlowerSpecies.Agapanthus.setMutation(FlowerSpecies.Allium, FlowerSpecies.Geranium, 5); + FlowerSpecies.Agapanthus.setPH(EnumAcidity.Neutral, EnumTolerance.BOTH_1); + FlowerSpecies.Agapanthus.setMoisture(EnumMoisture.Normal, EnumTolerance.DOWN_1); + FlowerSpecies.Agapanthus.setTemperature(EnumTemperature.WARM, EnumTolerance.BOTH_1); + FlowerSpecies.Fuchsia.setMutation(FlowerSpecies.Foxglove, FlowerSpecies.Dahlia, 5); + FlowerSpecies.Fuchsia.setPH(EnumAcidity.Neutral, EnumTolerance.BOTH_1); + FlowerSpecies.Fuchsia.setMoisture(EnumMoisture.Normal, EnumTolerance.UP_1); + FlowerSpecies.Fuchsia.setTemperature(EnumTemperature.WARM, EnumTolerance.BOTH_1); + FlowerSpecies.Dianthus.setMutation(FlowerSpecies.Tulip, FlowerSpecies.Poppy, 15); + FlowerSpecies.Dianthus.setPH(EnumAcidity.Alkaline, EnumTolerance.DOWN_1); + FlowerSpecies.Dianthus.setMoisture(EnumMoisture.Normal, EnumTolerance.DOWN_1); + FlowerSpecies.Dianthus.setTemperature(EnumTemperature.NORMAL, EnumTolerance.BOTH_2); + FlowerSpecies.Forget.setMutation(FlowerSpecies.Orchid, FlowerSpecies.Bluet, 10); + FlowerSpecies.Forget.setPH(EnumAcidity.Acid, EnumTolerance.NONE); + FlowerSpecies.Forget.setMoisture(EnumMoisture.Normal, EnumTolerance.UP_1); + FlowerSpecies.Forget.setTemperature(EnumTemperature.NORMAL, EnumTolerance.UP_1); + FlowerSpecies.Anemone.setMutation(FlowerSpecies.Aquilegia, FlowerSpecies.Rose, 5); + FlowerSpecies.Anemone.setPH(EnumAcidity.Neutral, EnumTolerance.BOTH_1); + FlowerSpecies.Anemone.setMoisture(EnumMoisture.Normal, EnumTolerance.UP_1); + FlowerSpecies.Aquilegia.setMutation(FlowerSpecies.Iris, FlowerSpecies.Poppy, 5); + FlowerSpecies.Aquilegia.setMoisture(EnumMoisture.Normal, EnumTolerance.UP_1); + FlowerSpecies.Edelweiss.setMutation(FlowerSpecies.Peony, FlowerSpecies.Bluet, 5); + FlowerSpecies.Edelweiss.setPH(EnumAcidity.Alkaline, EnumTolerance.DOWN_1); + FlowerSpecies.Edelweiss.setMoisture(EnumMoisture.Normal, EnumTolerance.DOWN_1); + FlowerSpecies.Edelweiss.setTemperature(EnumTemperature.NORMAL, EnumTolerance.DOWN_1); + FlowerSpecies.Scabious.setMutation(FlowerSpecies.Allium, FlowerSpecies.Cornflower, 5); + FlowerSpecies.Scabious.setPH(EnumAcidity.Neutral, EnumTolerance.UP_1); + FlowerSpecies.Scabious.setTemperature(EnumTemperature.NORMAL, EnumTolerance.DOWN_1); + FlowerSpecies.Coneflower.setMutation(FlowerSpecies.Tulip, FlowerSpecies.Cornflower, 5); + FlowerSpecies.Coneflower.setPH(EnumAcidity.Neutral, EnumTolerance.BOTH_1); + FlowerSpecies.Gaillardia.setMutation(FlowerSpecies.Dandelion, FlowerSpecies.Marigold, 5); + FlowerSpecies.Gaillardia.setPH(EnumAcidity.Neutral, EnumTolerance.BOTH_1); + FlowerSpecies.Gaillardia.setMoisture(EnumMoisture.Damp, EnumTolerance.DOWN_1); + FlowerSpecies.Gaillardia.setTemperature(EnumTemperature.NORMAL, EnumTolerance.BOTH_2); + FlowerSpecies.Auricula.setMutation(FlowerSpecies.Poppy, FlowerSpecies.Geranium, 10); + FlowerSpecies.Auricula.setPH(EnumAcidity.Acid, EnumTolerance.UP_1); + FlowerSpecies.Auricula.setMoisture(EnumMoisture.Normal, EnumTolerance.UP_1); + FlowerSpecies.Camellia.setMutation(FlowerSpecies.Hydrangea, FlowerSpecies.Rose, 5); + FlowerSpecies.Camellia.setPH(EnumAcidity.Acid, EnumTolerance.NONE); + FlowerSpecies.Camellia.setMoisture(EnumMoisture.Damp, EnumTolerance.NONE); + FlowerSpecies.Camellia.setTemperature(EnumTemperature.WARM, EnumTolerance.UP_1); + FlowerSpecies.Goldenrod.setMutation(FlowerSpecies.Lilac, FlowerSpecies.Marigold, 10); + FlowerSpecies.Goldenrod.setPH(EnumAcidity.Neutral, EnumTolerance.BOTH_1); + FlowerSpecies.Althea.setMutation(FlowerSpecies.Hydrangea, FlowerSpecies.Iris, 5); + FlowerSpecies.Althea.setPH(EnumAcidity.Neutral, EnumTolerance.DOWN_1); + FlowerSpecies.Althea.setTemperature(EnumTemperature.WARM, EnumTolerance.BOTH_1); + FlowerSpecies.Penstemon.setMutation(FlowerSpecies.Peony, FlowerSpecies.Lilac, 5); + FlowerSpecies.Penstemon.setMoisture(EnumMoisture.Dry, EnumTolerance.UP_1); + FlowerSpecies.Penstemon.setTemperature(EnumTemperature.WARM, EnumTolerance.UP_1); + FlowerSpecies.Delphinium.setMutation(FlowerSpecies.Lilac, FlowerSpecies.Bluet, 5); + FlowerSpecies.Delphinium.setMoisture(EnumMoisture.Damp, EnumTolerance.DOWN_1); + FlowerSpecies.Delphinium.setTemperature(EnumTemperature.NORMAL, EnumTolerance.DOWN_1); + FlowerSpecies.Hollyhock.setMutation(FlowerSpecies.Delphinium, FlowerSpecies.Lavender, 5); + FlowerSpecies.Hollyhock.setPH(EnumAcidity.Neutral, EnumTolerance.UP_1); + FlowerSpecies.Dandelion.setStemColor(EnumFlowerColor.Green); + FlowerSpecies.Poppy.setStemColor(EnumFlowerColor.Green); + FlowerSpecies.Orchid.setStemColor(EnumFlowerColor.Green); + FlowerSpecies.Allium.setStemColor(EnumFlowerColor.Green); + FlowerSpecies.Bluet.setStemColor(EnumFlowerColor.OliveDrab); + FlowerSpecies.Tulip.setStemColor(EnumFlowerColor.OliveDrab); + FlowerSpecies.Daisy.setStemColor(EnumFlowerColor.OliveDrab); + FlowerSpecies.Cornflower.setStemColor(EnumFlowerColor.OliveDrab); + FlowerSpecies.Pansy.setStemColor(EnumFlowerColor.SeaGreen); + FlowerSpecies.Iris.setStemColor(EnumFlowerColor.SeaGreen); + FlowerSpecies.Lavender.setStemColor(EnumFlowerColor.Green); + FlowerSpecies.Viola.setStemColor(EnumFlowerColor.OliveDrab); + FlowerSpecies.Daffodil.setStemColor(EnumFlowerColor.Green); + FlowerSpecies.Dahlia.setStemColor(EnumFlowerColor.OliveDrab); + FlowerSpecies.Peony.setStemColor(EnumFlowerColor.DarkGreen); + FlowerSpecies.Rose.setStemColor(EnumFlowerColor.Green); + FlowerSpecies.Lilac.setStemColor(EnumFlowerColor.OliveDrab); + FlowerSpecies.Hydrangea.setStemColor(EnumFlowerColor.DarkGreen); + FlowerSpecies.Foxglove.setStemColor(EnumFlowerColor.DarkGreen); + FlowerSpecies.Zinnia.setStemColor(EnumFlowerColor.MediumSeaGreen); + FlowerSpecies.Chrysanthemum.setStemColor(EnumFlowerColor.MediumSeaGreen); + FlowerSpecies.Marigold.setStemColor(EnumFlowerColor.Green); + FlowerSpecies.Geranium.setStemColor(EnumFlowerColor.MediumSeaGreen); + FlowerSpecies.Azalea.setStemColor(EnumFlowerColor.Green); + FlowerSpecies.Primrose.setStemColor(EnumFlowerColor.Green); + FlowerSpecies.Aster.setStemColor(EnumFlowerColor.Green); + FlowerSpecies.Carnation.setStemColor(EnumFlowerColor.SeaGreen); + FlowerSpecies.Lily.setStemColor(EnumFlowerColor.Green); + FlowerSpecies.Yarrow.setStemColor(EnumFlowerColor.DarkOliveGreen); + FlowerSpecies.Petunia.setStemColor(EnumFlowerColor.Green); + FlowerSpecies.Agapanthus.setStemColor(EnumFlowerColor.DarkOliveGreen); + FlowerSpecies.Fuchsia.setStemColor(EnumFlowerColor.SeaGreen); + FlowerSpecies.Dianthus.setStemColor(EnumFlowerColor.OliveDrab); + FlowerSpecies.Forget.setStemColor(EnumFlowerColor.Green); + FlowerSpecies.Anemone.setStemColor(EnumFlowerColor.DarkOliveGreen); + FlowerSpecies.Aquilegia.setStemColor(EnumFlowerColor.MediumSeaGreen); + FlowerSpecies.Edelweiss.setStemColor(EnumFlowerColor.DarkOliveGreen); + FlowerSpecies.Scabious.setStemColor(EnumFlowerColor.OliveDrab); + FlowerSpecies.Coneflower.setStemColor(EnumFlowerColor.DarkOliveGreen); + FlowerSpecies.Gaillardia.setStemColor(EnumFlowerColor.OliveDrab); + FlowerSpecies.Auricula.setStemColor(EnumFlowerColor.DarkOliveGreen); + FlowerSpecies.Camellia.setStemColor(EnumFlowerColor.DarkOliveGreen); + FlowerSpecies.Goldenrod.setStemColor(EnumFlowerColor.MediumSeaGreen); + FlowerSpecies.Althea.setStemColor(EnumFlowerColor.DarkGreen); + FlowerSpecies.Penstemon.setStemColor(EnumFlowerColor.OliveDrab); + FlowerSpecies.Delphinium.setStemColor(EnumFlowerColor.DarkSeaGreen); + FlowerSpecies.Hollyhock.setStemColor(EnumFlowerColor.Green); + BotanyCore.getFlowerRoot().addConversion(new ItemStack(Blocks.yellow_flower, 1, 0), FlowerSpecies.Dandelion.getTemplate()); + BotanyCore.getFlowerRoot().addConversion(new ItemStack(Blocks.red_flower, 1, 0), FlowerSpecies.Poppy.getTemplate()); + BotanyCore.getFlowerRoot().addConversion(new ItemStack(Blocks.red_flower, 1, 1), FlowerSpecies.Orchid.getTemplate()); + BotanyCore.getFlowerRoot().addConversion(new ItemStack(Blocks.red_flower, 1, 2), FlowerSpecies.Allium.getTemplate()); + BotanyCore.getFlowerRoot().addConversion(new ItemStack(Blocks.red_flower, 1, 3), FlowerSpecies.Bluet.getTemplate()); + BotanyCore.getFlowerRoot().addConversion(new ItemStack(Blocks.red_flower, 1, 7), FlowerSpecies.Tulip.getTemplate()); + BotanyCore.getFlowerRoot().addConversion(new ItemStack(Blocks.red_flower, 1, 8), FlowerSpecies.Daisy.getTemplate()); + BotanyCore.getFlowerRoot().addConversion(new ItemStack(Blocks.double_plant, 1, 1), FlowerSpecies.Lilac.getTemplate()); + BotanyCore.getFlowerRoot().addConversion(new ItemStack(Blocks.double_plant, 1, 4), FlowerSpecies.Rose.getTemplate()); + BotanyCore.getFlowerRoot().addConversion(new ItemStack(Blocks.double_plant, 1, 5), FlowerSpecies.Peony.getTemplate()); + BotanyCore.getFlowerRoot().addConversion(new ItemStack(Blocks.red_flower, 1, 6), FlowerSpecies.Tulip.AddVariant(EnumFlowerColor.White)); + BotanyCore.getFlowerRoot().addConversion(new ItemStack(Blocks.red_flower, 1, 4), FlowerSpecies.Tulip.AddVariant(EnumFlowerColor.Crimson)); + BotanyCore.getFlowerRoot().addConversion(new ItemStack(Blocks.red_flower, 1, 5), FlowerSpecies.Tulip.AddVariant(EnumFlowerColor.DarkOrange)); + for (final FlowerSpecies species : values()) { + final String scientific = species.branchName.substring(0, 1).toUpperCase() + species.branchName.substring(1).toLowerCase(); + final String uid = "flowers." + species.branchName.toLowerCase(); + IClassification branch = AlleleManager.alleleRegistry.getClassification("genus." + uid); + if (branch == null) { + branch = AlleleManager.alleleRegistry.createAndRegisterClassification(IClassification.EnumClassLevel.GENUS, uid, scientific); + } + (species.branch = branch).addMemberSpecies(species); + } + } + + private void setStemColor(final EnumFlowerColor green) { + this.stemColor = green; + } + + private void setTraits(final ForestryAllele.Fertility high, final ForestryAllele.Lifespan shortened, final ForestryAllele.Sappiness lower) { + this.fert = high; + this.life = shortened; + this.sap = lower; + } + + private void setMutation(final FlowerSpecies dandelion2, final FlowerSpecies tulip2, final int i) { + BotanyCore.getFlowerRoot().registerMutation(new FlowerMutation(dandelion2, tulip2, this.getTemplate(), i)); + } + + private FlowerSpecies(final String name, final String branch, final String binomial, final IFlowerType type, final EnumFlowerColor colour) { + this(name, branch, binomial, type, colour, colour); + } + + private FlowerSpecies(final String name, final String branch, final String binomial, final IFlowerType type, final EnumFlowerColor primaryColor, final EnumFlowerColor secondaryColor) { + this.stemColor = EnumFlowerColor.Green; + this.temperature = EnumTemperature.NORMAL; + this.pH = EnumAcidity.Neutral; + this.moisture = EnumMoisture.Normal; + this.tempTolerance = EnumTolerance.BOTH_1; + this.pHTolerance = EnumTolerance.NONE; + this.moistureTolerance = EnumTolerance.NONE; + this.variantTemplates = new ArrayList(); + this.name = name; + this.binomial = binomial; + this.branchName = branch; + this.type = type; + this.primaryColor = primaryColor; + this.secondaryColor = secondaryColor; + } + + private IAllele[] AddVariant(final EnumFlowerColor a, final EnumFlowerColor b) { + final IAllele[] template = this.getTemplate(); + template[EnumFlowerChromosome.PRIMARY.ordinal()] = a.getAllele(); + template[EnumFlowerChromosome.SECONDARY.ordinal()] = b.getAllele(); + this.variantTemplates.add(template); + return template; + } + + private void setTemperature(final EnumTemperature temperature, final EnumTolerance tolerance) { + this.temperature = temperature; + this.tempTolerance = tolerance; + } + + private void setPH(final EnumAcidity temperature, final EnumTolerance tolerance) { + this.pH = temperature; + this.pHTolerance = tolerance; + } + + private void setMoisture(final EnumMoisture temperature, final EnumTolerance tolerance) { + this.moisture = temperature; + this.moistureTolerance = tolerance; + } + + private IAllele[] AddVariant(final EnumFlowerColor a) { + return this.AddVariant(a, a); + } + + public List getVariants() { + return this.variantTemplates; + } + + @Override + public String getName() { + return this.name; + } + + @Override + public String getDescription() { + return ""; + } + + @Override + public EnumTemperature getTemperature() { + return this.temperature; + } + + @Override + public EnumHumidity getHumidity() { + return EnumHumidity.values()[this.getMoisture().ordinal()]; + } + + @Override + public EnumAcidity getPH() { + return this.pH; + } + + @Override + public EnumMoisture getMoisture() { + return this.moisture; + } + + @Override + public boolean hasEffect() { + return false; + } + + @Override + public boolean isSecret() { + return false; + } + + @Override + public boolean isCounted() { + return true; + } + + @Override + public String getBinomial() { + return this.binomial; + } + + @Override + public String getAuthority() { + return "Binnie"; + } + + public void setBranch(final IClassification branch) { + this.branch = branch; + } + + @Override + public IClassification getBranch() { + return this.branch; + } + + @Override + public String getUID() { + return "botany.flowers.species." + this.toString().toLowerCase(); + } + + @Override + public boolean isDominant() { + return false; + } + + public IAllele[] getTemplate() { + final IAllele[] template = FlowerTemplates.getDefaultTemplate(); + template[0] = this; + template[EnumFlowerChromosome.PRIMARY.ordinal()] = this.primaryColor.getAllele(); + template[EnumFlowerChromosome.SECONDARY.ordinal()] = this.secondaryColor.getAllele(); + template[EnumFlowerChromosome.TEMPERATURE_TOLERANCE.ordinal()] = Binnie.Genetics.getToleranceAllele(this.tempTolerance); + template[EnumFlowerChromosome.PH_TOLERANCE.ordinal()] = Binnie.Genetics.getToleranceAllele(this.pHTolerance); + template[EnumFlowerChromosome.HUMIDITY_TOLERANCE.ordinal()] = Binnie.Genetics.getToleranceAllele(this.moistureTolerance); + template[EnumFlowerChromosome.FERTILITY.ordinal()] = this.fert.getAllele(); + template[EnumFlowerChromosome.LIFESPAN.ordinal()] = this.life.getAllele(); + template[EnumFlowerChromosome.SAPPINESS.ordinal()] = this.sap.getAllele(); + template[EnumFlowerChromosome.STEM.ordinal()] = this.stemColor.getAllele(); + return template; + } + + @Override + @SideOnly(Side.CLIENT) + public IIconProvider getIconProvider() { + return null; + } + + @Override + public ISpeciesRoot getRoot() { + return BotanyCore.getFlowerRoot(); + } + + @Override + public int getIconColour(final int renderPass) { + return 0; + } + + @Override + public int getComplexity() { + return 0; + } + + @Override + public float getResearchSuitability(final ItemStack itemstack) { + return 0.0f; + } + + @Override + public ItemStack[] getResearchBounty(final World world, final GameProfile researcher, final IIndividual individual, final int bountyLevel) { + return null; + } + + public static void init() { + } + + @Override + public IFlowerType getType() { + return this.type; + } + + @Override + public String getUnlocalizedName() { + return this.getUID(); + } +} diff --git a/src/main/java/binnie/botany/genetics/FlowerTemplates.java b/src/main/java/binnie/botany/genetics/FlowerTemplates.java new file mode 100644 index 00000000..e1644826 --- /dev/null +++ b/src/main/java/binnie/botany/genetics/FlowerTemplates.java @@ -0,0 +1,29 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.genetics; + +import forestry.api.genetics.AlleleManager; +import binnie.botany.api.EnumFlowerChromosome; +import forestry.api.genetics.IAllele; + +public class FlowerTemplates +{ + public static IAllele[] getDefaultTemplate() { + final IAllele[] alleles = new IAllele[EnumFlowerChromosome.values().length]; + alleles[EnumFlowerChromosome.SPECIES.ordinal()] = FlowerSpecies.Poppy; + alleles[EnumFlowerChromosome.PRIMARY.ordinal()] = EnumFlowerColor.Red.getAllele(); + alleles[EnumFlowerChromosome.SECONDARY.ordinal()] = EnumFlowerColor.Red.getAllele(); + alleles[EnumFlowerChromosome.FERTILITY.ordinal()] = AlleleManager.alleleRegistry.getAllele("forestry.fertilityNormal"); + alleles[EnumFlowerChromosome.TERRITORY.ordinal()] = AlleleManager.alleleRegistry.getAllele("forestry.territoryDefault"); + alleles[EnumFlowerChromosome.EFFECT.ordinal()] = ModuleGenetics.alleleEffectNone; + alleles[EnumFlowerChromosome.LIFESPAN.ordinal()] = AlleleManager.alleleRegistry.getAllele("forestry.lifespanNormal"); + alleles[EnumFlowerChromosome.TEMPERATURE_TOLERANCE.ordinal()] = AlleleManager.alleleRegistry.getAllele("forestry.toleranceNone"); + alleles[EnumFlowerChromosome.HUMIDITY_TOLERANCE.ordinal()] = AlleleManager.alleleRegistry.getAllele("forestry.toleranceNone"); + alleles[EnumFlowerChromosome.PH_TOLERANCE.ordinal()] = AlleleManager.alleleRegistry.getAllele("forestry.toleranceNone"); + alleles[EnumFlowerChromosome.SAPPINESS.ordinal()] = AlleleManager.alleleRegistry.getAllele("forestry.sappinessAverage"); + alleles[EnumFlowerChromosome.STEM.ordinal()] = EnumFlowerColor.Green.getAllele(); + return alleles; + } +} diff --git a/src/main/java/binnie/botany/genetics/ItemDictionary.java b/src/main/java/binnie/botany/genetics/ItemDictionary.java new file mode 100644 index 00000000..13786191 --- /dev/null +++ b/src/main/java/binnie/botany/genetics/ItemDictionary.java @@ -0,0 +1,72 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.genetics; + +import binnie.botany.core.BotanyGUI; +import net.minecraft.world.World; +import binnie.botany.CreativeTabBotany; +import net.minecraft.creativetab.CreativeTabs; +import java.util.List; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.botany.Botany; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraft.item.Item; + +public class ItemDictionary extends Item +{ + IIcon iconMaster; + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.itemIcon = Botany.proxy.getIcon(register, "botanistDatabase"); + this.iconMaster = Botany.proxy.getIcon(register, "masterBotanistDatabase"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(final int par1) { + return (par1 == 0) ? this.itemIcon : this.iconMaster; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(final ItemStack par1ItemStack, final EntityPlayer par2EntityPlayer, final List par3List, final boolean par4) { + super.addInformation(par1ItemStack, par2EntityPlayer, par3List, par4); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(final Item par1, final CreativeTabs par2CreativeTabs, final List par3List) { + super.getSubItems(par1, par2CreativeTabs, par3List); + par3List.add(new ItemStack(par1, 1, 1)); + } + + public ItemDictionary() { + this.setCreativeTab(CreativeTabBotany.instance); + this.setUnlocalizedName("database"); + this.setMaxStackSize(1); + } + + @Override + public ItemStack onItemRightClick(final ItemStack itemstack, final World world, final EntityPlayer player) { + if (itemstack.getItemDamage() == 0) { + Botany.proxy.openGui(BotanyGUI.Database, player, (int) player.posX, (int) player.posY, (int) player.posZ); + } + else { + Botany.proxy.openGui(BotanyGUI.DatabaseNEI, player, (int) player.posX, (int) player.posY, (int) player.posZ); + } + return itemstack; + } + + @Override + public String getItemStackDisplayName(final ItemStack i) { + return (i.getItemDamage() == 0) ? "Botanist Database" : "Master Botanist Database"; + } +} diff --git a/src/main/java/binnie/botany/genetics/ItemEncyclopedia.java b/src/main/java/binnie/botany/genetics/ItemEncyclopedia.java new file mode 100644 index 00000000..17b0a3b7 --- /dev/null +++ b/src/main/java/binnie/botany/genetics/ItemEncyclopedia.java @@ -0,0 +1,45 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.genetics; + +import net.minecraft.item.ItemStack; +import binnie.botany.CreativeTabBotany; +import net.minecraft.util.IIcon; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.botany.Botany; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.Item; + +public class ItemEncyclopedia extends Item +{ + boolean reinforced; + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.itemIcon = Botany.proxy.getIcon(register, "encylopedia" + (this.reinforced ? "Iron" : "")); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(final int par1) { + return this.itemIcon; + } + + public ItemEncyclopedia(final boolean reinforced) { + this.reinforced = false; + this.reinforced = reinforced; + this.setCreativeTab(CreativeTabBotany.instance); + this.setUnlocalizedName("encylopedia" + (reinforced ? "Iron" : "")); + this.setMaxStackSize(1); + this.setMaxDamage(reinforced ? 480 : 120); + } + + @Override + public String getItemStackDisplayName(final ItemStack i) { + return (this.reinforced ? "Reinforced " : "") + "Florist's Encyclopaedia"; + } +} diff --git a/src/main/java/binnie/botany/genetics/ModuleGenetics.java b/src/main/java/binnie/botany/genetics/ModuleGenetics.java new file mode 100644 index 00000000..75b27c2e --- /dev/null +++ b/src/main/java/binnie/botany/genetics/ModuleGenetics.java @@ -0,0 +1,84 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.genetics; + +import binnie.Binnie; +import forestry.api.recipes.RecipeManagers; +import forestry.api.apiculture.FlowerManager; +import net.minecraftforge.oredict.ShapelessOreRecipe; +import net.minecraft.item.crafting.IRecipe; +import net.minecraftforge.oredict.ShapedOreRecipe; +import net.minecraft.init.Items; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import binnie.botany.flower.RendererBotany; +import cpw.mods.fml.client.registry.RenderingRegistry; +import binnie.botany.flower.TileEntityFlower; +import binnie.core.BinnieCore; +import net.minecraft.block.Block; +import cpw.mods.fml.common.registry.GameRegistry; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.ISpeciesRoot; +import binnie.botany.core.BotanyCore; +import forestry.api.genetics.AlleleManager; +import binnie.botany.flower.ItemSeed; +import binnie.botany.flower.ItemPollen; +import binnie.botany.flower.ItemFlower; +import binnie.botany.Botany; +import binnie.botany.flower.BlockFlower; +import binnie.core.IInitializable; + +public class ModuleGenetics implements IInitializable +{ + static AlleleEffectNone alleleEffectNone; + + @Override + public void preInit() { + EnumFlowerColor.setupMutations(); + Botany.flower = new BlockFlower(); + Botany.flowerItem = new ItemFlower(); + Botany.pollen = new ItemPollen(); + Botany.seed = new ItemSeed(); + AlleleManager.alleleRegistry.registerSpeciesRoot(BotanyCore.speciesRoot); + AlleleManager.alleleRegistry.registerAllele(ModuleGenetics.alleleEffectNone); + GameRegistry.registerBlock(Botany.flower, "flower"); + BinnieCore.proxy.registerTileEntity(TileEntityFlower.class, "botany.tile.flower", null); + Botany.database = new ItemDictionary(); + Botany.encyclopedia = new ItemEncyclopedia(false); + Botany.encyclopediaIron = new ItemEncyclopedia(true); + } + + @Override + public void init() { + for (final EnumFlowerColor color : EnumFlowerColor.values()) { + AlleleManager.alleleRegistry.registerAllele(color.getAllele()); + } + FlowerSpecies.setupVariants(); + for (final FlowerSpecies species : FlowerSpecies.values()) { + AlleleManager.alleleRegistry.registerAllele(species); + BotanyCore.getFlowerRoot().registerTemplate(species.getUID(), species.getTemplate()); + for (final IAllele[] variant : species.getVariants()) { + BotanyCore.getFlowerRoot().registerTemplate(variant); + } + } + RendererBotany.renderID = RenderingRegistry.getNextAvailableRenderId(); + BinnieCore.proxy.registerBlockRenderer(new RendererBotany()); + } + + @Override + public void postInit() { + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Botany.encyclopedia), new Object[] { "fff", "fbf", "fff", 'f', new ItemStack(Blocks.red_flower, 1, 32767), 'b', Items.book })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Botany.encyclopedia), new Object[] { "fff", "fbf", "fff", 'f', new ItemStack(Blocks.yellow_flower, 1, 32767), 'b', Items.book })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Botany.encyclopedia), new Object[] { "fff", "fbf", "fff", 'f', new ItemStack(Botany.flower, 1, 32767), 'b', Items.book })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(Botany.encyclopediaIron), new Object[] { new ItemStack(Botany.encyclopedia), "ingotIron" })); + FlowerManager.flowerRegistry.registerAcceptableFlower(Botany.flower, new String[] { "flowersVanilla" }); + RecipeManagers.carpenterManager.addRecipe(100, Binnie.Liquid.getLiquidStack("water", 2000), (ItemStack) null, new ItemStack(Botany.database), new Object[] { "X#X", "YEY", "RDR", '#', Blocks.glass_pane, 'X', Items.gold_ingot, 'Y', Items.gold_nugget, 'R', Items.redstone, 'D', Items.diamond, 'E', Items.emerald }); + } + + static { + ModuleGenetics.alleleEffectNone = new AlleleEffectNone(); + } +} diff --git a/src/main/java/binnie/botany/items/BotanyItems.java b/src/main/java/binnie/botany/items/BotanyItems.java new file mode 100644 index 00000000..c4422a39 --- /dev/null +++ b/src/main/java/binnie/botany/items/BotanyItems.java @@ -0,0 +1,63 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.items; + +import net.minecraft.item.Item; +import java.util.List; +import binnie.botany.Botany; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import binnie.core.item.IItemMisc; + +public enum BotanyItems implements IItemMisc +{ + AshPowder("Ash Powder", "powderAsh"), + PulpPowder("Wood Pulp Powder", "powderPulp"), + MulchPowder("Mulch Powder", "powderMulch"), + SulphurPowder("Sulphur Powder", "powderSulphur"), + FertiliserPowder("Fertiliser Powder", "powderFertiliser"), + CompostPowder("Compost Powder", "powderCompost"), + Mortar("Mortar", "mortar"), + Weedkiller("Weedkiller", "weedkiller"); + + IIcon icon; + String name; + String iconPath; + + private BotanyItems(final String name, final String iconPath) { + this.name = name; + this.iconPath = iconPath; + } + + @Override + public IIcon getIcon(final ItemStack stack) { + return this.icon; + } + + @Override + public void registerIcons(final IIconRegister register) { + this.icon = Botany.proxy.getIcon(register, this.iconPath); + } + + @Override + public void addInformation(final List par3List) { + } + + @Override + public String getName(final ItemStack stack) { + return this.name; + } + + @Override + public ItemStack get(final int size) { + return new ItemStack(Botany.misc, size, this.ordinal()); + } + + @Override + public boolean isActive() { + return true; + } +} diff --git a/src/main/java/binnie/botany/items/ItemClay.java b/src/main/java/binnie/botany/items/ItemClay.java new file mode 100644 index 00000000..9ff0e4e9 --- /dev/null +++ b/src/main/java/binnie/botany/items/ItemClay.java @@ -0,0 +1,51 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.items; + +import binnie.botany.Botany; +import net.minecraft.client.renderer.texture.IIconRegister; +import java.util.List; +import net.minecraft.creativetab.CreativeTabs; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.botany.genetics.EnumFlowerColor; +import net.minecraft.item.ItemStack; +import binnie.botany.CreativeTabBotany; +import net.minecraft.item.Item; + +public class ItemClay extends Item +{ + public ItemClay() { + this.setUnlocalizedName("clay"); + this.setHasSubtypes(true); + this.setCreativeTab(CreativeTabBotany.instance); + } + + @Override + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(final ItemStack stack, final int p_82790_2_) { + final int damage = stack.getItemDamage(); + return EnumFlowerColor.get(damage).getColor(false); + } + + @Override + public String getItemStackDisplayName(final ItemStack stack) { + return EnumFlowerColor.get(stack.getItemDamage()).getName() + " Clay"; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(final Item p_150895_1_, final CreativeTabs p_150895_2_, final List list) { + for (final EnumFlowerColor c : EnumFlowerColor.values()) { + list.add(new ItemStack(this, 1, c.ordinal())); + } + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.itemIcon = Botany.proxy.getIcon(register, "clay"); + } +} diff --git a/src/main/java/binnie/botany/items/ItemPigment.java b/src/main/java/binnie/botany/items/ItemPigment.java new file mode 100644 index 00000000..86df46ae --- /dev/null +++ b/src/main/java/binnie/botany/items/ItemPigment.java @@ -0,0 +1,51 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.items; + +import binnie.botany.Botany; +import net.minecraft.client.renderer.texture.IIconRegister; +import java.util.List; +import net.minecraft.creativetab.CreativeTabs; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.botany.genetics.EnumFlowerColor; +import net.minecraft.item.ItemStack; +import binnie.botany.CreativeTabBotany; +import net.minecraft.item.Item; + +public class ItemPigment extends Item +{ + public ItemPigment() { + this.setUnlocalizedName("pigment"); + this.setHasSubtypes(true); + this.setCreativeTab(CreativeTabBotany.instance); + } + + @Override + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(final ItemStack stack, final int p_82790_2_) { + final int damage = stack.getItemDamage(); + return EnumFlowerColor.get(damage).getColor(false); + } + + @Override + public String getItemStackDisplayName(final ItemStack stack) { + return EnumFlowerColor.get(stack.getItemDamage()).getName() + " Pigment"; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(final Item p_150895_1_, final CreativeTabs p_150895_2_, final List list) { + for (final EnumFlowerColor c : EnumFlowerColor.values()) { + list.add(new ItemStack(this, 1, c.ordinal())); + } + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.itemIcon = Botany.proxy.getIcon(register, "pigment"); + } +} diff --git a/src/main/java/binnie/botany/network/MessageFlowerUpdate.java b/src/main/java/binnie/botany/network/MessageFlowerUpdate.java new file mode 100644 index 00000000..91556f6f --- /dev/null +++ b/src/main/java/binnie/botany/network/MessageFlowerUpdate.java @@ -0,0 +1,54 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.network; + +import binnie.botany.genetics.EnumFlowerType; +import binnie.botany.genetics.EnumFlowerColor; +import java.io.IOException; +import io.netty.buffer.ByteBuf; +import binnie.core.network.packet.MessageBinnie; +import binnie.botany.flower.TileEntityFlower; +import binnie.core.network.packet.MessageCoordinates; + +public class MessageFlowerUpdate extends MessageCoordinates +{ + public TileEntityFlower.RenderInfo render; + + public MessageFlowerUpdate(final int posX, final int posY, final int posZ, final TileEntityFlower.RenderInfo render) { + super(PacketID.FlowerUpdate.ordinal(), posX, posY, posZ); + this.render = render; + } + + public MessageFlowerUpdate(final MessageBinnie message) { + super(message); + } + + @Override + public void writeData(final ByteBuf data) throws IOException { + super.writeData(data); + data.writeByte(this.render.primary.getID()); + data.writeByte(this.render.secondary.getID()); + data.writeByte(this.render.stem.getID()); + data.writeByte(this.render.type.ordinal()); + data.writeByte(this.render.age); + data.writeByte(this.render.section); + data.writeBoolean(this.render.wilted); + data.writeBoolean(this.render.flowered); + } + + @Override + public void readData(final ByteBuf data) throws IOException { + super.readData(data); + this.render = new TileEntityFlower.RenderInfo(); + this.render.primary = EnumFlowerColor.values()[data.readByte()]; + this.render.secondary = EnumFlowerColor.values()[data.readByte()]; + this.render.stem = EnumFlowerColor.values()[data.readByte()]; + this.render.type = EnumFlowerType.values()[data.readByte()]; + this.render.age = data.readByte(); + this.render.section = data.readByte(); + this.render.wilted = data.readBoolean(); + this.render.flowered = data.readBoolean(); + } +} diff --git a/src/main/java/binnie/botany/network/PacketID.java b/src/main/java/binnie/botany/network/PacketID.java new file mode 100644 index 00000000..7a229bf5 --- /dev/null +++ b/src/main/java/binnie/botany/network/PacketID.java @@ -0,0 +1,90 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.network; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IChatComponent; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import binnie.botany.flower.TileEntityFlower; +import net.minecraft.util.ChatComponentText; +import binnie.botany.genetics.EnumFlowerColor; +import forestry.api.genetics.AlleleManager; +import binnie.botany.api.IAlleleFlowerSpecies; +import binnie.core.BinnieCore; +import binnie.core.network.packet.MessageNBT; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import binnie.core.network.packet.MessageBinnie; +import binnie.core.network.IPacketID; + +public enum PacketID implements IPacketID +{ + Encylopedia, + FlowerUpdate; + + @Override + public void onMessage(final MessageBinnie message, final MessageContext context) { + if (this == PacketID.Encylopedia && context.side == Side.CLIENT) { + final MessageNBT packet = new MessageNBT(message); + final NBTTagCompound data = packet.getTagCompound(); + final EntityPlayer player = BinnieCore.proxy.getPlayer(); + String info = ""; + if (data.hasNoTags()) { + info += "Flower has not been discovered by you. Breed this flower yourself to discover."; + } + else { + final IAlleleFlowerSpecies primary = (IAlleleFlowerSpecies) AlleleManager.alleleRegistry.getAllele(data.getString("Species")); + final IAlleleFlowerSpecies secondary = (IAlleleFlowerSpecies) AlleleManager.alleleRegistry.getAllele(data.getString("Species2")); + final float age = data.getFloat("Age"); + final EnumFlowerColor color1 = EnumFlowerColor.get(data.getShort("Colour")); + final EnumFlowerColor color2 = EnumFlowerColor.get(data.getShort("Colour2")); + if (primary == null || secondary == null) { + return; + } + info += "A"; + if (age == 0.0f) { + info += ""; + } + else if (age < 0.25f) { + info += " Young"; + } + else if (age < 0.75f) { + info += " Mature"; + } + else { + info += " Old"; + } + if (color1 == color2) { + info = info + " " + color1.getName(); + } + else { + info = info + " " + color1.getName() + " & " + color2.getName(); + } + if (primary == secondary) { + info = info + " " + primary.getName(); + } + else { + info = info + " " + primary.getName() + "-" + secondary.getName() + " Hybrid"; + } + if (age == 0.0f) { + info += " Germling"; + } + if (data.getBoolean("Wilting")) { + info += ". Shame it is Wilting!"; + } + } + final IChatComponent chat = new ChatComponentText(info); + player.addChatMessage(chat); + } + else if (this == PacketID.FlowerUpdate) { + final MessageFlowerUpdate packet2 = new MessageFlowerUpdate(message); + final TileEntity tile = packet2.getTileEntity(BinnieCore.proxy.getWorld()); + if (tile instanceof TileEntityFlower) { + ((TileEntityFlower) tile).setRender(packet2.render); + } + } + } +} diff --git a/src/main/java/binnie/botany/proxy/IBotanyProxy.java b/src/main/java/binnie/botany/proxy/IBotanyProxy.java new file mode 100644 index 00000000..b3ff4283 --- /dev/null +++ b/src/main/java/binnie/botany/proxy/IBotanyProxy.java @@ -0,0 +1,11 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.proxy; + +import binnie.core.proxy.IProxyCore; + +public interface IBotanyProxy extends IProxyCore +{ +} diff --git a/src/main/java/binnie/botany/proxy/Proxy.java b/src/main/java/binnie/botany/proxy/Proxy.java new file mode 100644 index 00000000..36b839a8 --- /dev/null +++ b/src/main/java/binnie/botany/proxy/Proxy.java @@ -0,0 +1,15 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.proxy; + +import binnie.botany.Botany; +import binnie.core.proxy.BinnieModProxy; + +public class Proxy extends BinnieModProxy implements IBotanyProxy +{ + public Proxy() { + super(Botany.instance); + } +} diff --git a/src/main/java/binnie/botany/proxy/ProxyClient.java b/src/main/java/binnie/botany/proxy/ProxyClient.java new file mode 100644 index 00000000..14bb48cc --- /dev/null +++ b/src/main/java/binnie/botany/proxy/ProxyClient.java @@ -0,0 +1,9 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.proxy; + +public class ProxyClient extends Proxy implements IBotanyProxy +{ +} diff --git a/src/main/java/binnie/botany/proxy/ProxyServer.java b/src/main/java/binnie/botany/proxy/ProxyServer.java new file mode 100644 index 00000000..b360fb7d --- /dev/null +++ b/src/main/java/binnie/botany/proxy/ProxyServer.java @@ -0,0 +1,9 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.botany.proxy; + +public class ProxyServer extends Proxy implements IBotanyProxy +{ +} diff --git a/src/main/java/binnie/core/AbstractMod.java b/src/main/java/binnie/core/AbstractMod.java new file mode 100644 index 00000000..90305346 --- /dev/null +++ b/src/main/java/binnie/core/AbstractMod.java @@ -0,0 +1,143 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core; + +import cpw.mods.fml.relauncher.Side; +import binnie.core.network.packet.MessageBinnie; +import cpw.mods.fml.common.network.NetworkRegistry; +import binnie.core.mod.parser.FieldParser; +import binnie.Binnie; +import binnie.core.network.BinniePacketHandler; +import binnie.core.proxy.IProxyCore; +import binnie.core.gui.IBinnieGUID; +import binnie.core.network.IPacketID; +import net.minecraftforge.common.MinecraftForge; +import java.util.ArrayList; +import java.util.List; +import java.lang.reflect.Field; +import java.util.LinkedHashSet; +import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper; +import binnie.core.network.IPacketProvider; + +public abstract class AbstractMod implements IPacketProvider, IInitializable +{ + private SimpleNetworkWrapper wrapper; + private LinkedHashSet fields; + protected List modules; + + public AbstractMod() { + this.fields = new LinkedHashSet(); + this.modules = new ArrayList(); + BinnieCore.registerMod(this); + MinecraftForge.EVENT_BUS.register(this); + } + + public abstract boolean isActive(); + + @Override + public abstract String getChannel(); + + @Override + public IPacketID[] getPacketIDs() { + return new IPacketID[0]; + } + + public IBinnieGUID[] getGUIDs() { + return new IBinnieGUID[0]; + } + + public Class[] getConfigs() { + return new Class[0]; + } + + public abstract IProxyCore getProxy(); + + public abstract String getModID(); + + public SimpleNetworkWrapper getNetworkWrapper() { + return this.wrapper; + } + + protected abstract Class getPacketHandler(); + + @Override + public void preInit() { + if (!this.isActive()) { + return; + } + if (this.getConfigs() != null) { + for (final Class cls : this.getConfigs()) { + Binnie.Configuration.registerConfiguration(cls, this); + } + } + this.getProxy().preInit(); + for (final IInitializable module : this.modules) { + module.preInit(); + } + for (final Field field : this.getClass().getFields()) { + this.fields.add(field); + } + for (final Class cls : this.getClass().getClasses()) { + for (final Field field2 : this.getClass().getFields()) { + this.fields.add(field2); + } + } + for (final IInitializable module : this.modules) { + for (final Field field3 : module.getClass().getFields()) { + this.fields.add(field3); + } + } + for (final Field field4 : this.fields) { + try { + FieldParser.preInitParse(field4, this); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } + + @Override + public void init() { + if (!this.isActive()) { + return; + } + this.getProxy().init(); + (this.wrapper = NetworkRegistry.INSTANCE.newSimpleChannel(this.getChannel())).registerMessage((Class) this.getPacketHandler(), (Class) MessageBinnie.class, 1, Side.CLIENT); + this.wrapper.registerMessage((Class) this.getPacketHandler(), (Class) MessageBinnie.class, 1, Side.SERVER); + for (final IInitializable module : this.modules) { + module.init(); + } + for (final Field field : this.fields) { + try { + FieldParser.initParse(field, this); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } + + @Override + public void postInit() { + if (!this.isActive()) { + return; + } + this.getProxy().postInit(); + for (final IInitializable module : this.modules) { + module.postInit(); + } + for (final Field field : this.fields) { + try { + FieldParser.postInitParse(field, this); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } + + protected final void addModule(final IInitializable init) { + this.modules.add(init); + MinecraftForge.EVENT_BUS.register(init); + } +} diff --git a/src/main/java/binnie/core/BinnieCore.java b/src/main/java/binnie/core/BinnieCore.java new file mode 100644 index 00000000..fc60598d --- /dev/null +++ b/src/main/java/binnie/core/BinnieCore.java @@ -0,0 +1,238 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core; + +import binnie.core.network.BinniePacketHandler; +import binnie.core.mod.config.ConfigurationMain; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraftforge.client.event.TextureStitchEvent; +import binnie.core.network.BinnieCorePacketID; +import binnie.core.network.IPacketID; +import binnie.core.proxy.IBinnieProxy; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.server.MinecraftServer; +import forestry.api.core.ForestryEvent; +import java.util.ArrayList; +import forestry.plugins.PluginManager; +import binnie.core.block.TileEntityMetadata; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import binnie.core.block.MultipassBlockRenderer; +import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.common.network.IGuiHandler; +import binnie.core.gui.BinnieGUIHandler; +import cpw.mods.fml.common.network.NetworkRegistry; +import net.minecraft.item.Item; +import binnie.core.mod.parser.ItemParser; +import binnie.core.mod.parser.FieldParser; +import cpw.mods.fml.common.registry.GameRegistry; +import binnie.core.liquid.ItemFluidContainer; +import binnie.core.liquid.FluidContainer; +import binnie.core.gui.BinnieCoreGUI; +import binnie.core.gui.IBinnieGUID; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import binnie.core.triggers.ModuleTrigger; +import cpw.mods.fml.common.Loader; +import binnie.core.item.ModuleItems; +import binnie.core.machines.storage.ModuleStorage; +import binnie.craftgui.minecraft.ModuleCraftGUI; +import binnie.core.mod.config.ConfigurationMods; +import binnie.Binnie; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import binnie.core.item.ItemFieldKit; +import binnie.core.item.ItemGenesis; +import binnie.core.machines.MachineGroup; +import java.util.List; +import cpw.mods.fml.common.SidedProxy; +import binnie.core.proxy.BinnieProxy; +import cpw.mods.fml.common.Mod; + +@Mod(modid = "BinnieCore", name = "Binnie Core", useMetadata = true) +public final class BinnieCore extends AbstractMod +{ + @Mod.Instance("BinnieCore") + public static BinnieCore instance; + @SidedProxy(clientSide = "binnie.core.proxy.BinnieProxyClient", serverSide = "binnie.core.proxy.BinnieProxyServer") + public static BinnieProxy proxy; + public static int multipassRenderID; + private static List modList; + public static MachineGroup packageCompartment; + public static ItemGenesis genesis; + public static ItemFieldKit fieldKit; + + @Mod.EventHandler + public void preInit(final FMLPreInitializationEvent evt) { + Binnie.Configuration.registerConfiguration(ConfigurationMods.class, this); + for (final ManagerBase baseManager : Binnie.Managers) { + this.addModule(baseManager); + } + this.addModule(new ModuleCraftGUI()); + this.addModule(new ModuleStorage()); + this.addModule(new ModuleItems()); + if (Loader.isModLoaded("BuildCraft|Silicon")) { + this.addModule(new ModuleTrigger()); + } + this.preInit(); + } + + @Mod.EventHandler + public void init(final FMLInitializationEvent evt) { + this.init(); + } + + @Mod.EventHandler + public void postInit(final FMLPostInitializationEvent evt) { + this.postInit(); + } + + @Override + public IBinnieGUID[] getGUIDs() { + return BinnieCoreGUI.values(); + } + + @Override + public void preInit() { + BinnieCore.instance = this; + for (final FluidContainer container : FluidContainer.values()) { + final Item item = new ItemFluidContainer(container); + GameRegistry.registerItem(item, item.getUnlocalizedName().substring(5)); + } + FieldParser.parsers.add(new ItemParser()); + super.preInit(); + } + + @Override + public void init() { + super.init(); + for (final AbstractMod mod : getActiveMods()) { + NetworkRegistry.INSTANCE.registerGuiHandler(mod, new BinnieGUIHandler(mod)); + } + BinnieCore.multipassRenderID = RenderingRegistry.getNextAvailableRenderId(); + RenderingRegistry.registerBlockHandler(new MultipassBlockRenderer()); + GameRegistry.registerTileEntity(TileEntityMetadata.class, "binnie.tile.metadata"); + } + + public static boolean isLepidopteryActive() { + return PluginManager.Module.LEPIDOPTEROLOGY.isEnabled(); + } + + public static boolean isApicultureActive() { + return PluginManager.Module.APICULTURE.isEnabled(); + } + + public static boolean isArboricultureActive() { + return PluginManager.Module.ARBORICULTURE.isEnabled(); + } + + public static boolean isBotanyActive() { + return ConfigurationMods.botany; + } + + public static boolean isGeneticsActive() { + return ConfigurationMods.genetics; + } + + public static boolean isExtraBeesActive() { + return ConfigurationMods.extraBees && isApicultureActive(); + } + + public static boolean isExtraTreesActive() { + return ConfigurationMods.extraTrees && isArboricultureActive(); + } + + @Override + public void postInit() { + super.postInit(); + } + + static void registerMod(final AbstractMod mod) { + BinnieCore.modList.add(mod); + } + + private static List getActiveMods() { + final List list = new ArrayList(); + for (final AbstractMod mod : BinnieCore.modList) { + if (mod.isActive()) { + list.add(mod); + } + } + return list; + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void handleSpeciesDiscovered(final ForestryEvent.SpeciesDiscovered event) { + try { + final EntityPlayerMP player = MinecraftServer.getServer().getConfigurationManager().func_152612_a(event.username.getName()); + if (player == null) { + return; + } + event.tracker.synchToPlayer(player); + final NBTTagCompound nbt = new NBTTagCompound(); + nbt.setString("species", event.species.getUID()); + } catch (Exception ex) { + } + } + + @Override + public String getChannel() { + return "BIN"; + } + + @Override + public IBinnieProxy getProxy() { + return BinnieCore.proxy; + } + + @Override + public String getModID() { + return "binniecore"; + } + + @Override + public IPacketID[] getPacketIDs() { + return BinnieCorePacketID.values(); + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void handleTextureRemap(final TextureStitchEvent.Pre event) { + if (event.map.getTextureType() == 0) { + Binnie.Liquid.reloadIcons(event.map); + } + Binnie.Resource.registerIcons(event.map, event.map.getTextureType()); + } + + @Override + public Class[] getConfigs() { + return new Class[] { ConfigurationMain.class }; + } + + @Override + protected Class getPacketHandler() { + return PacketHandler.class; + } + + @Override + public boolean isActive() { + return true; + } + + static { + BinnieCore.modList = new ArrayList(); + } + + public static class PacketHandler extends BinniePacketHandler + { + public PacketHandler() { + super(BinnieCore.instance); + } + } +} diff --git a/src/main/java/binnie/core/IInitializable.java b/src/main/java/binnie/core/IInitializable.java new file mode 100644 index 00000000..740d9591 --- /dev/null +++ b/src/main/java/binnie/core/IInitializable.java @@ -0,0 +1,14 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core; + +public interface IInitializable +{ + void preInit(); + + void init(); + + void postInit(); +} diff --git a/src/main/java/binnie/core/ManagerBase.java b/src/main/java/binnie/core/ManagerBase.java new file mode 100644 index 00000000..d114da4f --- /dev/null +++ b/src/main/java/binnie/core/ManagerBase.java @@ -0,0 +1,26 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core; + +import binnie.Binnie; + +public abstract class ManagerBase implements IInitializable +{ + public ManagerBase() { + Binnie.Managers.add(this); + } + + @Override + public void preInit() { + } + + @Override + public void init() { + } + + @Override + public void postInit() { + } +} diff --git a/src/main/java/binnie/core/Mods.java b/src/main/java/binnie/core/Mods.java new file mode 100644 index 00000000..3221b9d6 --- /dev/null +++ b/src/main/java/binnie/core/Mods.java @@ -0,0 +1,97 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core; + +import cpw.mods.fml.common.versioning.ArtifactVersion; +import cpw.mods.fml.common.versioning.Restriction; +import cpw.mods.fml.common.versioning.DefaultArtifactVersion; +import cpw.mods.fml.common.Loader; +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.item.Item; + +public class Mods +{ + public static Mod Forestry; + public static Mod IC2; + public static Mod Botania; + private static boolean WARN; + + private static Item findItem(final String modId, final String name) { + final Item stack = GameRegistry.findItem(modId, name); + if (stack == null && Mods.WARN && modId == "Forestry") { + throw new RuntimeException("Item not found: " + modId + ":" + name); + } + return stack; + } + + private static ItemStack findItemStack(final String modId, final String name, final int stackSize) { + final ItemStack stack = GameRegistry.findItemStack(modId, name, stackSize); + if (stack == null && Mods.WARN && modId == "Forestry") { + throw new RuntimeException("Stack not found: " + modId + ":" + name); + } + return stack; + } + + private static Block findBlock(final String modId, final String name) { + final Block stack = GameRegistry.findBlock(modId, name); + if (stack == null && Mods.WARN && modId == "Forestry") { + throw new RuntimeException("Block not found: " + modId + ":" + name); + } + return stack; + } + + static { + Mods.Forestry = new Mod("Forestry") { + @Override + public boolean dev() { + final String forVersion = Loader.instance().getIndexedModList().get("Forestry").getVersion(); + final Restriction rest = new Restriction(new DefaultArtifactVersion("3.6"), true, (ArtifactVersion) null, false); + return rest.containsVersion(new DefaultArtifactVersion(forVersion)); + } + }; + Mods.IC2 = new Mod("IC2"); + Mods.Botania = new Mod("Botania"); + Mods.WARN = true; + } + + public static class Mod + { + private String id; + + private Mod(final String id) { + this.id = id; + } + + public Item item(final String name) { + return findItem(this.id, name); + } + + public Block block(final String name) { + return findBlock(this.id, name); + } + + public ItemStack stack(final String name, final int stackSize) { + return findItemStack(this.id, name, stackSize); + } + + public ItemStack stack(final String name) { + return this.stack(name, 1); + } + + public ItemStack stack(final String string, final int i, final int j) { + return new ItemStack(this.item(string), i, j); + } + + public boolean active() { + return Loader.isModLoaded(this.id); + } + + public boolean dev() { + return false; + } + } +} diff --git a/src/main/java/binnie/core/block/BlockMetadata.java b/src/main/java/binnie/core/block/BlockMetadata.java new file mode 100644 index 00000000..e4a3bee8 --- /dev/null +++ b/src/main/java/binnie/core/block/BlockMetadata.java @@ -0,0 +1,135 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.block; + +import net.minecraft.util.MovingObjectPosition; +import binnie.core.BinnieCore; +import net.minecraft.block.Block; +import net.minecraftforge.common.util.ForgeDirection; +import java.util.List; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import java.util.ArrayList; +import net.minecraft.world.World; +import net.minecraft.block.material.Material; +import net.minecraft.block.BlockContainer; + +public class BlockMetadata extends BlockContainer implements IBlockMetadata +{ + static int temporyMeta; + + public BlockMetadata(final Material material) { + super(material); + } + + @Override + public ArrayList getDrops(final World world, final int x, final int y, final int z, final int blockMeta, final int fortune) { + return getBlockDropped(this, world, x, y, z, blockMeta); + } + + @Override + public boolean removedByPlayer(final World world, final EntityPlayer player, final int x, final int y, final int z) { + return breakBlock(this, player, world, x, y, z); + } + + @Override + public TileEntity createNewTileEntity(final World var1, final int i) { + return new TileEntityMetadata(); + } + + @Override + public boolean hasTileEntity(final int meta) { + return true; + } + + @Override + public boolean onBlockEventReceived(final World par1World, final int par2, final int par3, final int par4, final int par5, final int par6) { + super.onBlockEventReceived(par1World, par2, par3, par4, par5, par6); + final TileEntity tileentity = par1World.getTileEntity(par2, par3, par4); + return tileentity != null && tileentity.receiveClientEvent(par5, par6); + } + + @Override + public IIcon getIcon(final IBlockAccess par1IBlockAccess, final int par2, final int par3, final int par4, final int par5) { + final int metadata = TileEntityMetadata.getTileMetadata(par1IBlockAccess, par2, par3, par4); + return this.getIcon(par5, metadata); + } + + @Override + public String getBlockName(final ItemStack par1ItemStack) { + return this.getLocalizedName(); + } + + @Override + public void getBlockTooltip(final ItemStack par1ItemStack, final List par3List) { + } + + @Override + public int getPlacedMeta(final ItemStack item, final World world, final int x, final int y, final int z, final ForgeDirection clickedBlock) { + final int damage = TileEntityMetadata.getItemDamage(item); + return damage; + } + + @Override + public int getDroppedMeta(final int tileMeta, final int blockMeta) { + return tileMeta; + } + + public static ArrayList getBlockDropped(final IBlockMetadata block, final World world, final int x, final int y, final int z, final int blockMeta) { + final ArrayList array = new ArrayList(); + final TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z); + if (tile != null && !tile.hasDroppedBlock()) { + final int meta = block.getDroppedMeta(world.getBlockMetadata(x, y, z), tile.getTileMetadata()); + array.add(TileEntityMetadata.getItemStack((Block) block, meta)); + } + return array; + } + + public static boolean breakBlock(final IBlockMetadata block, final EntityPlayer player, final World world, final int i, final int j, final int k) { + List drops = new ArrayList(); + final Block block2 = (Block) block; + final TileEntityMetadata tile = TileEntityMetadata.getTile(world, i, j, k); + if (tile != null && !tile.hasDroppedBlock()) { + final int tileMeta = TileEntityMetadata.getTileMetadata(world, i, j, k); + drops = block2.getDrops(world, i, j, k, world.getBlockMetadata(i, j, k), 0); + } + final boolean hasBeenBroken = world.setBlockToAir(i, j, k); + if (hasBeenBroken && BinnieCore.proxy.isSimulating(world) && drops.size() > 0 && (player == null || !player.capabilities.isCreativeMode)) { + for (final ItemStack drop : drops) { + block.dropAsStack(world, i, j, k, drop); + } + tile.dropBlock(); + } + return hasBeenBroken; + } + + @Override + public void dropAsStack(final World world, final int x, final int y, final int z, final ItemStack drop) { + this.dropBlockAsItem(world, x, y, z, drop); + } + + @Override + public void breakBlock(final World par1World, final int par2, final int par3, final int par4, final Block par5, final int par6) { + super.breakBlock(par1World, par2, par3, par4, par5, par6); + par1World.removeTileEntity(par2, par3, par4); + } + + public static ItemStack getPickBlock(final World world, final int x, final int y, final int z) { + final List list = getBlockDropped((IBlockMetadata) world.getBlock(x, y, z), world, x, y, z, world.getBlockMetadata(x, y, z)); + return list.isEmpty() ? null : list.get(0); + } + + @Override + public ItemStack getPickBlock(final MovingObjectPosition target, final World world, final int x, final int y, final int z) { + return getPickBlock(world, x, y, z); + } + + static { + BlockMetadata.temporyMeta = -1; + } +} diff --git a/src/main/java/binnie/core/block/IBlockMetadata.java b/src/main/java/binnie/core/block/IBlockMetadata.java new file mode 100644 index 00000000..9cbec26c --- /dev/null +++ b/src/main/java/binnie/core/block/IBlockMetadata.java @@ -0,0 +1,24 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.block; + +import java.util.List; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraft.world.World; +import net.minecraft.item.ItemStack; +import net.minecraft.block.ITileEntityProvider; + +public interface IBlockMetadata extends ITileEntityProvider +{ + int getPlacedMeta(final ItemStack p0, final World p1, final int p2, final int p3, final int p4, final ForgeDirection p5); + + int getDroppedMeta(final int p0, final int p1); + + String getBlockName(final ItemStack p0); + + void getBlockTooltip(final ItemStack p0, final List p1); + + void dropAsStack(final World p0, final int p1, final int p2, final int p3, final ItemStack p4); +} diff --git a/src/main/java/binnie/core/block/IMultipassBlock.java b/src/main/java/binnie/core/block/IMultipassBlock.java new file mode 100644 index 00000000..aeecf2b1 --- /dev/null +++ b/src/main/java/binnie/core/block/IMultipassBlock.java @@ -0,0 +1,12 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.block; + +public interface IMultipassBlock +{ + int getNumberOfPasses(); + + int colorMultiplier(final int p0); +} diff --git a/src/main/java/binnie/core/block/ItemMetadata.java b/src/main/java/binnie/core/block/ItemMetadata.java new file mode 100644 index 00000000..85fe3e43 --- /dev/null +++ b/src/main/java/binnie/core/block/ItemMetadata.java @@ -0,0 +1,71 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.block; + +import net.minecraft.util.IIcon; +import java.util.List; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraft.world.World; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; + +public class ItemMetadata extends ItemBlock +{ + public ItemMetadata(final Block block) { + super(block); + } + + @Override + public int getMetadata(final int par1) { + return 0; + } + + @Override + public boolean placeBlockAt(final ItemStack stack, final EntityPlayer player, final World world, final int x, final int y, final int z, final int side, final float hitX, final float hitY, final float hitZ, final int metadata) { + final Block block = this.field_150939_a; + if (!(block instanceof IBlockMetadata)) { + return false; + } + final int placedMeta = ((IBlockMetadata) block).getPlacedMeta(stack, world, x, y, z, ForgeDirection.values()[side]); + if (placedMeta < 0) { + return false; + } + if (!world.setBlock(x, y, z, block, metadata, 3)) { + return false; + } + if (world.getBlock(x, y, z) == block) { + final TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z); + if (tile != null) { + tile.setTileMetadata(placedMeta, false); + } + block.onBlockPlacedBy(world, x, y, z, player, stack); + block.onPostBlockPlaced(world, x, y, z, metadata); + } + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public String getItemStackDisplayName(final ItemStack par1ItemStack) { + return ((IBlockMetadata) this.field_150939_a).getBlockName(par1ItemStack); + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(final ItemStack par1ItemStack, final EntityPlayer par2EntityPlayer, final List par3List, final boolean par4) { + ((IBlockMetadata) this.field_150939_a).getBlockTooltip(par1ItemStack, par3List); + } + + @Override + public IIcon getIconFromDamage(final int par1) { + return this.field_150939_a.getIcon(1, par1); + } +} diff --git a/src/main/java/binnie/core/block/ItemMetadataRenderer.java b/src/main/java/binnie/core/block/ItemMetadataRenderer.java new file mode 100644 index 00000000..3d6bad5d --- /dev/null +++ b/src/main/java/binnie/core/block/ItemMetadataRenderer.java @@ -0,0 +1,49 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.block; + +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.block.Block; +import org.lwjgl.opengl.GL11; +import net.minecraft.item.ItemStack; +import net.minecraftforge.client.IItemRenderer; + +public class ItemMetadataRenderer implements IItemRenderer +{ + @Override + public boolean handleRenderType(final ItemStack item, final IItemRenderer.ItemRenderType type) { + return type == IItemRenderer.ItemRenderType.INVENTORY || type == IItemRenderer.ItemRenderType.ENTITY || type == IItemRenderer.ItemRenderType.EQUIPPED || type == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON; + } + + @Override + public boolean shouldUseRenderHelper(final IItemRenderer.ItemRenderType type, final ItemStack item, final IItemRenderer.ItemRendererHelper helper) { + if (type == IItemRenderer.ItemRenderType.INVENTORY) { + return helper == IItemRenderer.ItemRendererHelper.INVENTORY_BLOCK; + } + if (type == IItemRenderer.ItemRenderType.ENTITY) { + return helper == IItemRenderer.ItemRendererHelper.ENTITY_BOBBING || helper == IItemRenderer.ItemRendererHelper.ENTITY_ROTATION; + } + return (type == IItemRenderer.ItemRenderType.EQUIPPED || type == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON) && helper == IItemRenderer.ItemRendererHelper.EQUIPPED_BLOCK; + } + + @Override + public void renderItem(final IItemRenderer.ItemRenderType type, final ItemStack item, final Object... data) { + GL11.glPushMatrix(); + final Block block = Block.getBlockFromItem(item.getItem()); + if (type == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON) { + GL11.glTranslated(0.5, 0.5, 0.5); + } + if (type == IItemRenderer.ItemRenderType.INVENTORY && block.getRenderBlockPass() != 0) { + GL11.glAlphaFunc(516, 0.1f); + GL11.glEnable(3042); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + } + GL11.glPushMatrix(); + ((RenderBlocks) data[0]).renderBlockAsItem(block, TileEntityMetadata.getItemDamage(item), 1.0f); + GL11.glPopMatrix(); + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/binnie/core/block/MultipassBlockRenderer.java b/src/main/java/binnie/core/block/MultipassBlockRenderer.java new file mode 100644 index 00000000..7864d341 --- /dev/null +++ b/src/main/java/binnie/core/block/MultipassBlockRenderer.java @@ -0,0 +1,109 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.block; + +import binnie.core.BinnieCore; +import net.minecraft.world.IBlockAccess; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.block.Block; +import org.lwjgl.opengl.GL11; +import net.minecraft.client.renderer.Tessellator; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; + +public class MultipassBlockRenderer implements ISimpleBlockRenderingHandler +{ + public static MultipassBlockRenderer instance; + private static int layer; + + public MultipassBlockRenderer() { + MultipassBlockRenderer.instance = this; + } + + private void setColour(final Tessellator tess, final int colour) { + final float var6 = (colour >> 16 & 0xFF) / 255.0f; + final float var7 = (colour >> 8 & 0xFF) / 255.0f; + final float var8 = (colour & 0xFF) / 255.0f; + GL11.glColor3f(var6, var7, var8); + } + + public static int getLayer() { + return MultipassBlockRenderer.layer; + } + + @Override + public void renderInventoryBlock(final Block block, final int meta, final int modelID, final RenderBlocks renderer) { + block.setBlockBoundsForItemRender(); + renderer.setRenderBoundsFromBlock(block); + GL11.glTranslatef(-0.5f, -0.5f, -0.5f); + MultipassBlockRenderer.layer = 0; + while (MultipassBlockRenderer.layer < ((IMultipassBlock) block).getNumberOfPasses()) { + this.renderItem(block, renderer, meta); + ++MultipassBlockRenderer.layer; + } + MultipassBlockRenderer.layer = 0; + } + + @Override + public boolean renderWorldBlock(final IBlockAccess world, final int x, final int y, final int z, final Block block, final int modelId, final RenderBlocks renderer) { + boolean r = true; + MultipassBlockRenderer.layer = 0; + while (MultipassBlockRenderer.layer < ((IMultipassBlock) block).getNumberOfPasses()) { + r = renderer.renderStandardBlock(block, x, y, z); + ++MultipassBlockRenderer.layer; + } + MultipassBlockRenderer.layer = 0; + return r; + } + + @Override + public boolean shouldRender3DInInventory(final int i) { + return true; + } + + @Override + public int getRenderId() { + return BinnieCore.multipassRenderID; + } + + public void renderItem(final Block block, final RenderBlocks renderer, final int meta) { + this.setColor(((IMultipassBlock) block).colorMultiplier(meta)); + final Tessellator tessellator = Tessellator.instance; + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0f, -1.0f, 0.0f); + renderer.renderFaceYNeg(block, 0.0, 0.0, 0.0, renderer.getBlockIconFromSideAndMetadata(block, 0, meta)); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0f, 1.0f, 0.0f); + renderer.renderFaceYPos(block, 0.0, 0.0, 0.0, renderer.getBlockIconFromSideAndMetadata(block, 1, meta)); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0f, 0.0f, -1.0f); + renderer.renderFaceZNeg(block, 0.0, 0.0, 0.0, renderer.getBlockIconFromSideAndMetadata(block, 2, meta)); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0f, 0.0f, 1.0f); + renderer.renderFaceZPos(block, 0.0, 0.0, 0.0, renderer.getBlockIconFromSideAndMetadata(block, 3, meta)); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(-1.0f, 0.0f, 0.0f); + renderer.renderFaceXNeg(block, 0.0, 0.0, 0.0, renderer.getBlockIconFromSideAndMetadata(block, 4, meta)); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(1.0f, 0.0f, 0.0f); + renderer.renderFaceXPos(block, 0.0, 0.0, 0.0, renderer.getBlockIconFromSideAndMetadata(block, 5, meta)); + tessellator.draw(); + } + + public void setColor(final int l) { + final float f = (l >> 16 & 0xFF) / 255.0f; + final float f2 = (l >> 8 & 0xFF) / 255.0f; + final float f3 = (l & 0xFF) / 255.0f; + GL11.glColor3f(f, f2, f3); + } + + static { + MultipassBlockRenderer.layer = 0; + } +} diff --git a/src/main/java/binnie/core/block/MultipassItemRenderer.java b/src/main/java/binnie/core/block/MultipassItemRenderer.java new file mode 100644 index 00000000..1794ac22 --- /dev/null +++ b/src/main/java/binnie/core/block/MultipassItemRenderer.java @@ -0,0 +1,81 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.block; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.item.ItemBlock; +import org.lwjgl.opengl.GL11; +import net.minecraft.item.ItemStack; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraftforge.client.IItemRenderer; + +public class MultipassItemRenderer implements IItemRenderer +{ + private void render(final RenderBlocks renderer, final ItemStack item, final float f, final float g, final float h) { + GL11.glTranslatef(f, g, h); + final Block block = ((ItemBlock) item.getItem()).field_150939_a; + GL11.glEnable(3008); + if (block.getRenderBlockPass() != 0) { + GL11.glAlphaFunc(516, 0.1f); + GL11.glEnable(3042); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + } + else { + GL11.glAlphaFunc(516, 0.5f); + GL11.glDisable(3042); + } + MultipassBlockRenderer.instance.renderInventoryBlock(block, TileEntityMetadata.getItemDamage(item), 0, renderer); + if (block.getRenderBlockPass() == 0) { + GL11.glAlphaFunc(516, 0.1f); + } + GL11.glTranslatef(-f, -g, -h); + } + + @Override + public boolean handleRenderType(final ItemStack item, final IItemRenderer.ItemRenderType type) { + switch (type) { + case ENTITY: { + return true; + } + case EQUIPPED: { + return true; + } + case INVENTORY: { + return true; + } + case EQUIPPED_FIRST_PERSON: { + return true; + } + default: { + return false; + } + } + } + + @Override + public boolean shouldUseRenderHelper(final IItemRenderer.ItemRenderType type, final ItemStack item, final IItemRenderer.ItemRendererHelper helper) { + return true; + } + + @Override + public void renderItem(final IItemRenderer.ItemRenderType type, final ItemStack item, final Object... data) { + switch (type) { + case ENTITY: { + this.render((RenderBlocks) data[0], item, 0.0f, 0.0f, 0.0f); + break; + } + case EQUIPPED: + case EQUIPPED_FIRST_PERSON: { + this.render((RenderBlocks) data[0], item, 0.5f, 0.5f, 0.5f); + break; + } + case INVENTORY: { + this.render((RenderBlocks) data[0], item, 0.0f, 0.0f, 0.0f); + break; + } + } + } +} diff --git a/src/main/java/binnie/core/block/TileEntityMetadata.java b/src/main/java/binnie/core/block/TileEntityMetadata.java new file mode 100644 index 00000000..63b32253 --- /dev/null +++ b/src/main/java/binnie/core/block/TileEntityMetadata.java @@ -0,0 +1,110 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.block; + +import net.minecraft.item.ItemStack; +import net.minecraft.block.Block; +import net.minecraft.world.IBlockAccess; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import binnie.core.network.packet.MessageMetadata; +import binnie.core.BinnieCore; +import net.minecraft.network.Packet; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; + +public class TileEntityMetadata extends TileEntity +{ + private int meta; + private boolean droppedBlock; + + public TileEntityMetadata() { + this.droppedBlock = false; + } + + @Override + public boolean receiveClientEvent(final int par1, final int par2) { + if (par1 == 42) { + this.meta = par2; + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); + } + return true; + } + + @Override + public void readFromNBT(final NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.meta = nbt.getInteger("meta"); + } + + @Override + public void writeToNBT(final NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setInteger("meta", this.meta); + } + + @Override + public boolean canUpdate() { + return false; + } + + public int getTileMetadata() { + return this.meta; + } + + public void setTileMetadata(final int meta, final boolean notify) { + if (this.meta != meta) { + this.meta = meta; + if (notify) { + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); + } + } + } + + @Override + public Packet getDescriptionPacket() { + return BinnieCore.instance.getNetworkWrapper().getPacketFrom(new MessageMetadata(this.xCoord, this.yCoord, this.zCoord, this.meta).GetMessage()); + } + + public static TileEntityMetadata getTile(final IBlockAccess world, final int x, final int y, final int z) { + final TileEntity tile = world.getTileEntity(x, y, z); + if (!(tile instanceof TileEntityMetadata)) { + return null; + } + return (TileEntityMetadata) tile; + } + + public static ItemStack getItemStack(final Block block, final int damage) { + final ItemStack item = new ItemStack(block, 1, 0); + setItemDamage(item, damage); + return item; + } + + public static void setItemDamage(final ItemStack item, final int i) { + item.setItemDamage((i < 16387) ? i : 16387); + final NBTTagCompound tag = new NBTTagCompound(); + tag.setInteger("meta", i); + item.setTagCompound(tag); + } + + public static int getItemDamage(final ItemStack item) { + if (item.hasTagCompound() && item.getTagCompound().hasKey("meta")) { + return item.getTagCompound().getInteger("meta"); + } + return item.getItemDamage(); + } + + public static int getTileMetadata(final IBlockAccess world, final int x, final int y, final int z) { + final TileEntityMetadata tile = getTile(world, x, y, z); + return (tile == null) ? 0 : tile.getTileMetadata(); + } + + public boolean hasDroppedBlock() { + return this.droppedBlock; + } + + public void dropBlock() { + this.droppedBlock = true; + } +} diff --git a/src/main/java/binnie/core/circuits/BinnieCircuit.java b/src/main/java/binnie/core/circuits/BinnieCircuit.java new file mode 100644 index 00000000..38504958 --- /dev/null +++ b/src/main/java/binnie/core/circuits/BinnieCircuit.java @@ -0,0 +1,92 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.circuits; + +import net.minecraft.item.Item; + +import forestry.api.circuits.ChipsetManager; + +import java.util.ArrayList; + +import net.minecraft.item.ItemStack; + +import forestry.api.circuits.ICircuitLayout; + +import java.util.List; + +import forestry.api.circuits.ICircuit; + +public class BinnieCircuit implements ICircuit +{ + private String uid; + private int limit; + private List tooltips; + + public BinnieCircuit(final String uid, final int limit, final ICircuitLayout layout, final ItemStack itemStack) { + this.tooltips = new ArrayList(); + this.uid = "binnie.circuit." + uid; + this.limit = limit; + ChipsetManager.circuitRegistry.registerCircuit(this); + if (itemStack != null) { + ChipsetManager.solderManager.addRecipe(layout, itemStack, this); + } + } + + public BinnieCircuit(final String uid, final int limit, final ICircuitLayout layout, final Item item, final int itemMeta) { + this(uid, limit, layout, new ItemStack(item, 1, itemMeta)); + } + + public void addTooltipString(final String string) { + this.tooltips.add(string); + } + + @Override + public String getUID() { + return this.uid; + } + + @Override + public boolean requiresDiscovery() { + return false; + } + + @Override + public int getLimit() { + return this.limit; + } + + @Override + public String getName() { + return this.uid; + } + + @Override + public void addTooltip(final List list) { + for (final String string : this.tooltips) { + list.add(" - " + string); + } + } + + @Override + public boolean isCircuitable(Object arg0) { + return false; + } + + @Override + public void onInsertion(int arg0, Object arg1) { + } + + @Override + public void onLoad(int arg0, Object arg1) { + } + + @Override + public void onRemoval(int arg0, Object arg1) { + } + + @Override + public void onTick(int arg0, Object arg1) { + } +} diff --git a/src/main/java/binnie/core/circuits/BinnieCircuitLayout.java b/src/main/java/binnie/core/circuits/BinnieCircuitLayout.java new file mode 100644 index 00000000..6a8e46ef --- /dev/null +++ b/src/main/java/binnie/core/circuits/BinnieCircuitLayout.java @@ -0,0 +1,44 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.circuits; + +import binnie.Binnie; +import forestry.api.circuits.ChipsetManager; +import forestry.api.circuits.CircuitSocketType; +import forestry.api.circuits.ICircuitSocketType; +import binnie.core.AbstractMod; +import forestry.api.circuits.ICircuitLayout; + +public class BinnieCircuitLayout implements ICircuitLayout +{ + private String uid; + private AbstractMod mod; + + public BinnieCircuitLayout(final AbstractMod mod, final String uid) { + this.uid = uid; + this.mod = mod; + ChipsetManager.circuitRegistry.registerLayout(this); + } + + @Override + public String getUID() { + return "binnie.circuitLayout" + this.uid; + } + + @Override + public String getName() { + return Binnie.Language.localise(this.mod, "circuit.layout." + this.uid.toLowerCase()); + } + + @Override + public String getUsage() { + return Binnie.Language.localise(this.mod, "circuit.layout." + this.uid.toLowerCase() + ".usage"); + } + + @Override + public ICircuitSocketType getSocketType() { + return CircuitSocketType.NONE;// TODO hmm? CircuitSocketType + } +} diff --git a/src/main/java/binnie/core/genetics/BeeBreedingSystem.java b/src/main/java/binnie/core/genetics/BeeBreedingSystem.java new file mode 100644 index 00000000..d2974cd6 --- /dev/null +++ b/src/main/java/binnie/core/genetics/BeeBreedingSystem.java @@ -0,0 +1,143 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.genetics; + +import java.util.TreeSet; + +import forestry.api.apiculture.EnumBeeType; +import forestry.api.apiculture.IAlleleBeeSpecies; +import forestry.api.apiculture.IBeeGenome; +import forestry.api.apiculture.IBeeRoot; + +import net.minecraft.item.ItemStack; + +import binnie.core.BinnieCore; +import forestry.api.apiculture.EnumBeeChromosome; +import forestry.api.genetics.IChromosomeType; +import forestry.api.apiculture.IApiaristTracker; +import forestry.api.genetics.IBreedingTracker; +import forestry.api.genetics.ISpeciesRoot; +import forestry.api.apiculture.IBeeMutation; +import forestry.api.genetics.IAllele; + +import net.minecraft.entity.player.EntityPlayer; + +import forestry.api.genetics.IMutation; +import binnie.extrabees.ExtraBees; +import binnie.Binnie; + +class BeeBreedingSystem extends BreedingSystem +{ + public BeeBreedingSystem() { + this.iconUndiscovered = Binnie.Resource.getItemIcon(ExtraBees.instance, "icon/undiscoveredBee"); + this.iconDiscovered = Binnie.Resource.getItemIcon(ExtraBees.instance, "icon/discoveredBee"); + } + + @Override + public float getChance(final IMutation mutation, final EntityPlayer player, final IAllele species1, final IAllele species2) { + return ((IBeeMutation) mutation). + getChance(new VirtualBeeHousing(player), + (IAlleleBeeSpecies) species1, + (IAlleleBeeSpecies) species2, + (IBeeGenome) this.getSpeciesRoot(). + templateAsGenome(this.getSpeciesRoot().getTemplate(species1.getUID())), + (IBeeGenome) this.getSpeciesRoot().templateAsGenome(this.getSpeciesRoot().getTemplate(species2.getUID()))); + } + + @Override + public ISpeciesRoot getSpeciesRoot() { + return Binnie.Genetics.getBeeRoot(); + } + + @Override + public int getColour() { + return 16767232; + } + + @Override + public Class getTrackerClass() { + return IApiaristTracker.class; + } + + @Override + public String getAlleleName(final IChromosomeType chromosome, final IAllele allele) { + if (chromosome == EnumBeeChromosome.FERTILITY) { + if (allele.getUID().contains("Low")) { + return Binnie.Language.localise(BinnieCore.instance, "allele.fertility.low"); + } + if (allele.getUID().contains("Normal")) { + return Binnie.Language.localise(BinnieCore.instance, "allele.fertility.normal"); + } + if (allele.getUID().contains("High")) { + return Binnie.Language.localise(BinnieCore.instance, "allele.fertility.high"); + } + if (allele.getUID().contains("Maximum")) { + return Binnie.Language.localise(BinnieCore.instance, "allele.fertility.maximum"); + } + } + return super.getAlleleName(chromosome, allele); + } + + @Override + public boolean isDNAManipulable(final ItemStack member) { + return ((IBeeRoot) this.getSpeciesRoot()).getType(member) == EnumBeeType.LARVAE; + } + + @Override + public int[] getActiveTypes() { + return new int[] { EnumBeeType.DRONE.ordinal(), EnumBeeType.PRINCESS.ordinal(), EnumBeeType.QUEEN.ordinal(), EnumBeeType.LARVAE.ordinal() }; + } + + @Override + public void addExtraAlleles(final IChromosomeType chromosome, final TreeSet alleles) { + switch ((EnumBeeChromosome) chromosome) { + case FERTILITY: { + for (final ForestryAllele.Fertility a : ForestryAllele.Fertility.values()) { + alleles.add(a.getAllele()); + } + break; + } + case FLOWERING: { + for (final ForestryAllele.Flowering a2 : ForestryAllele.Flowering.values()) { + alleles.add(a2.getAllele()); + } + break; + } + case HUMIDITY_TOLERANCE: + case TEMPERATURE_TOLERANCE: { + for (final Tolerance a3 : Tolerance.values()) { + alleles.add(a3.getAllele()); + } + break; + } + case LIFESPAN: { + for (final ForestryAllele.Lifespan a4 : ForestryAllele.Lifespan.values()) { + alleles.add(a4.getAllele()); + } + break; + } + case SPEED: { + for (final ForestryAllele.Speed a5 : ForestryAllele.Speed.values()) { + alleles.add(a5.getAllele()); + } + break; + } + case TERRITORY: { + for (final ForestryAllele.Territory a6 : ForestryAllele.Territory.values()) { + alleles.add(a6.getAllele()); + } + break; + } + case NOCTURNAL: + case CAVE_DWELLING: + case TOLERANT_FLYER: { + for (final ForestryAllele.Bool a7 : ForestryAllele.Bool.values()) { + alleles.add(a7.getAllele()); + } + break; + } + } + } +} diff --git a/src/main/java/binnie/core/genetics/BeeModifierLogic.java b/src/main/java/binnie/core/genetics/BeeModifierLogic.java new file mode 100644 index 00000000..6d314bc9 --- /dev/null +++ b/src/main/java/binnie/core/genetics/BeeModifierLogic.java @@ -0,0 +1,53 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.genetics; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class BeeModifierLogic +{ + private Map modifiers; + private List booleanModifiers; + + public BeeModifierLogic() { + this.modifiers = new HashMap(); + this.booleanModifiers = new ArrayList(); + } + + public float getModifier(final EnumBeeModifier modifier, final float currentModifier) { + if (!this.modifiers.containsKey(modifier)) { + return 1.0f; + } + final float mult = this.modifiers.get(modifier)[0]; + final float max = this.modifiers.get(modifier)[1]; + if (max >= 1.0f) { + if (max <= currentModifier) { + return 1.0f; + } + return Math.min(max / currentModifier, mult); + } + else { + if (max >= currentModifier) { + return 1.0f; + } + return Math.max(max / currentModifier, mult); + } + } + + public boolean getModifier(final EnumBeeBooleanModifier modifier) { + return this.booleanModifiers.contains(modifier); + } + + public void setModifier(final EnumBeeBooleanModifier modifier) { + this.booleanModifiers.add(modifier); + } + + public void setModifier(final EnumBeeModifier modifier, final float mult, final float max) { + this.modifiers.put(modifier, new Float[] { mult, max }); + } +} diff --git a/src/main/java/binnie/core/genetics/BreedingSystem.java b/src/main/java/binnie/core/genetics/BreedingSystem.java new file mode 100644 index 00000000..c6d15e31 --- /dev/null +++ b/src/main/java/binnie/core/genetics/BreedingSystem.java @@ -0,0 +1,494 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.genetics; + +import forestry.api.genetics.IGenome; +import java.util.TreeSet; +import forestry.api.genetics.IIndividual; +import net.minecraft.item.ItemStack; +import forestry.api.genetics.IAlleleBoolean; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import forestry.api.core.ForestryEvent; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.IIcon; +import forestry.api.genetics.IBreedingTracker; +import com.mojang.authlib.GameProfile; +import net.minecraft.world.World; +import java.util.Set; +import binnie.extrabees.genetics.ExtraBeeMutation; +import java.util.LinkedHashSet; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.AlleleManager; +import java.util.Collection; +import forestry.api.genetics.ISpeciesRoot; +import binnie.core.BinnieCore; +import forestry.api.genetics.IChromosomeType; +import net.minecraftforge.common.MinecraftForge; +import binnie.Binnie; +import java.util.HashMap; +import java.util.ArrayList; +import java.util.Map; +import forestry.api.genetics.IMutation; +import forestry.api.genetics.IAlleleSpecies; +import forestry.api.genetics.IClassification; +import java.util.List; +import binnie.core.resource.BinnieIcon; + +public abstract class BreedingSystem implements IItemStackRepresentitive +{ + protected BinnieIcon iconUndiscovered; + protected BinnieIcon iconDiscovered; + private List allBranches; + List allActiveSpecies; + private List allSpecies; + private List allMutations; + private Map> resultantMutations; + private Map> furtherMutations; + private Map> allResultantMutations; + private Map> allFurtherMutations; + public float discoveredSpeciesPercentage; + public int totalSpeciesCount; + public int discoveredSpeciesCount; + public int totalSecretCount; + public int discoveredSecretCount; + public float discoveredBranchPercentage; + public int totalBranchCount; + public int discoveredBranchCount; + private int totalSecretBranchCount; + private int discoveredSecretBranchCount; + String currentEpithet; + + public BreedingSystem() { + this.allBranches = new ArrayList(); + this.allActiveSpecies = new ArrayList(); + this.allSpecies = new ArrayList(); + this.allMutations = new ArrayList(); + this.resultantMutations = new HashMap>(); + this.furtherMutations = new HashMap>(); + this.allResultantMutations = new HashMap>(); + this.allFurtherMutations = new HashMap>(); + Binnie.Genetics.registerBreedingSystem(this); + MinecraftForge.EVENT_BUS.register(this); + } + + public String getChromosomeName(final IChromosomeType chromo) { + return BinnieCore.proxy.localise(this.getSpeciesRoot().getUID() + ".chromosome." + chromo.getName()); + } + + public String getChromosomeShortName(final IChromosomeType chromo) { + return BinnieCore.proxy.localise(this.getSpeciesRoot().getUID() + ".chromosome." + chromo.getName() + ".short"); + } + + public final String getEpitome(final float discoveredPercentage) { + int i = 0; + if (discoveredPercentage == 1.0f) { + i = 6; + } + else if (discoveredPercentage < 0.1f) { + i = 0; + } + else if (discoveredPercentage < 0.3f) { + i = 1; + } + else if (discoveredPercentage < 0.5f) { + i = 2; + } + else if (discoveredPercentage < 0.7f) { + i = 3; + } + else if (discoveredPercentage < 0.9f) { + i = 4; + } + else if (discoveredPercentage < 1.0f) { + i = 5; + } + return BinnieCore.proxy.localise(this.getSpeciesRoot().getUID() + ".epitome." + i); + } + + public abstract ISpeciesRoot getSpeciesRoot(); + + public final List getAllBranches() { + return this.allBranches; + } + + public final Collection getAllSpecies() { + return this.allActiveSpecies; + } + + public final Collection getAllMutations() { + return this.allMutations; + } + + public void calculateArrays() { + final Collection allAlleles = AlleleManager.alleleRegistry.getRegisteredAlleles().values(); + this.resultantMutations = new HashMap>(); + this.furtherMutations = new HashMap>(); + this.allResultantMutations = new HashMap>(); + this.allFurtherMutations = new HashMap>(); + this.allActiveSpecies = new ArrayList(); + this.allSpecies = new ArrayList(); + for (final IAllele species : allAlleles) { + if (this.getSpeciesRoot().getTemplate(species.getUID()) != null) { + this.resultantMutations.put((IAlleleSpecies) species, new ArrayList()); + this.furtherMutations.put((IAlleleSpecies) species, new ArrayList()); + this.allResultantMutations.put((IAlleleSpecies) species, new ArrayList()); + this.allFurtherMutations.put((IAlleleSpecies) species, new ArrayList()); + this.allSpecies.add((IAlleleSpecies) species); + if (this.isBlacklisted(species) || species.getUID().contains("speciesBotAlfheim")) { + continue; + } + this.allActiveSpecies.add((IAlleleSpecies) species); + } + } + this.allMutations = new ArrayList(); + final Collection allRegBranches = AlleleManager.alleleRegistry.getRegisteredClassifications().values(); + this.allBranches = new ArrayList(); + for (final IClassification branch : allRegBranches) { + if (branch.getMemberSpecies().length > 0 && this.getSpeciesRoot().getTemplate(branch.getMemberSpecies()[0].getUID()) != null) { + boolean possible = false; + for (final IAlleleSpecies species2 : branch.getMemberSpecies()) { + if (this.allActiveSpecies.contains(species2)) { + possible = true; + } + } + if (!possible) { + continue; + } + this.allBranches.add(branch); + } + } + if (this.getSpeciesRoot().getMutations(false) != null) { + final Set mutations = new LinkedHashSet(); + mutations.addAll(this.getSpeciesRoot().getMutations(false)); + if (this == Binnie.Genetics.beeBreedingSystem) { + mutations.addAll(ExtraBeeMutation.mutations); + } + for (final IMutation mutation : mutations) { + this.allMutations.add(mutation); + final Set participatingSpecies = new LinkedHashSet(); + if (mutation.getAllele0() instanceof IAlleleSpecies) { + participatingSpecies.add(mutation.getAllele0()); + } + if (mutation.getAllele1() instanceof IAlleleSpecies) { + participatingSpecies.add(mutation.getAllele1()); + } + for (final IAlleleSpecies species3 : participatingSpecies) { + this.allFurtherMutations.get(species3).add(mutation); + if (this.allActiveSpecies.contains(species3)) { + this.furtherMutations.get(species3).add(mutation); + } + } + if (this.resultantMutations.containsKey(mutation.getTemplate()[0])) { + this.allResultantMutations.get(mutation.getTemplate()[0]).add(mutation); + this.resultantMutations.get(mutation.getTemplate()[0]).add(mutation); + } + } + } + } + + public final boolean isBlacklisted(final IAllele allele) { + return AlleleManager.alleleRegistry.isBlacklisted(allele.getUID()); + } + + public final List getResultantMutations(final IAlleleSpecies species, final boolean includeInactive) { + if (this.resultantMutations.isEmpty()) { + this.calculateArrays(); + } + return includeInactive ? this.allResultantMutations.get(species) : this.resultantMutations.get(species); + } + + public final List getResultantMutations(final IAlleleSpecies species) { + if (this.resultantMutations.isEmpty()) { + this.calculateArrays(); + } + return this.resultantMutations.get(species); + } + + public final List getFurtherMutations(final IAlleleSpecies species, final boolean includeInactive) { + if (this.furtherMutations.isEmpty()) { + this.calculateArrays(); + } + return includeInactive ? this.allFurtherMutations.get(species) : this.furtherMutations.get(species); + } + + public final List getFurtherMutations(final IAlleleSpecies species) { + if (this.furtherMutations.isEmpty()) { + this.calculateArrays(); + } + return this.furtherMutations.get(species); + } + + public final boolean isMutationDiscovered(final IMutation mutation, final World world, final GameProfile name) { + return this.isMutationDiscovered(mutation, this.getSpeciesRoot().getBreedingTracker(world, name)); + } + + public final boolean isMutationDiscovered(final IMutation mutation, final IBreedingTracker tracker) { + return tracker == null || tracker.isDiscovered(mutation); + } + + public final boolean isSpeciesDiscovered(final IAlleleSpecies species, final World world, final GameProfile name) { + return this.isSpeciesDiscovered(species, this.getSpeciesRoot().getBreedingTracker(world, name)); + } + + public final boolean isSpeciesDiscovered(final IAlleleSpecies species, final IBreedingTracker tracker) { + return tracker == null || tracker.isDiscovered(species); + } + + public final boolean isSecret(final IAlleleSpecies species) { + return !species.isCounted(); + } + + public final boolean isSecret(final IClassification branch) { + for (final IAlleleSpecies species : branch.getMemberSpecies()) { + if (!this.isSecret(species)) { + return false; + } + } + return true; + } + + public final Collection getDiscoveredBranches(final World world, final GameProfile player) { + final List branches = new ArrayList(); + for (final IClassification branch : this.getAllBranches()) { + boolean discovered = false; + for (final IAlleleSpecies species : branch.getMemberSpecies()) { + if (this.isSpeciesDiscovered(species, world, player)) { + discovered = true; + } + } + if (discovered) { + branches.add(branch); + } + } + return branches; + } + + public final Collection getDiscoveredBranches(final IBreedingTracker tracker) { + final List branches = new ArrayList(); + for (final IClassification branch : this.getAllBranches()) { + boolean discovered = false; + for (final IAlleleSpecies species : branch.getMemberSpecies()) { + if (this.isSpeciesDiscovered(species, tracker)) { + discovered = true; + } + } + if (discovered) { + branches.add(branch); + } + } + return branches; + } + + public final Collection getDiscoveredSpecies(final World world, final GameProfile player) { + final List speciesList = new ArrayList(); + for (final IAlleleSpecies species : this.getAllSpecies()) { + if (this.isSpeciesDiscovered(species, world, player)) { + speciesList.add(species); + } + } + return speciesList; + } + + public final Collection getDiscoveredSpecies(final IBreedingTracker tracker) { + final List speciesList = new ArrayList(); + for (final IAlleleSpecies species : this.getAllSpecies()) { + if (this.isSpeciesDiscovered(species, tracker)) { + speciesList.add(species); + } + } + return speciesList; + } + + public final List getDiscoveredMutations(final World world, final GameProfile player) { + final List speciesList = new ArrayList(); + for (final IMutation species : this.getAllMutations()) { + if (this.isMutationDiscovered(species, world, player)) { + speciesList.add(species); + } + } + return speciesList; + } + + public final List getDiscoveredMutations(final IBreedingTracker tracker) { + final List speciesList = new ArrayList(); + for (final IMutation species : this.getAllMutations()) { + if (this.isMutationDiscovered(species, tracker)) { + speciesList.add(species); + } + } + return speciesList; + } + + public final int getDiscoveredBranchMembers(final IClassification branch, final IBreedingTracker tracker) { + int discoveredSpecies = 0; + for (final IAlleleSpecies species : branch.getMemberSpecies()) { + if (this.isSpeciesDiscovered(species, tracker)) { + ++discoveredSpecies; + } + } + return discoveredSpecies; + } + + public IIcon getUndiscoveredIcon() { + return this.iconUndiscovered.getIcon(); + } + + public IIcon getDiscoveredIcon() { + return this.iconDiscovered.getIcon(); + } + + public abstract float getChance(final IMutation p0, final EntityPlayer p1, final IAllele p2, final IAllele p3); + + public abstract Class getTrackerClass(); + + @SubscribeEvent + public final void onSyncBreedingTracker(final ForestryEvent.SyncedBreedingTracker event) { + final IBreedingTracker tracker = event.tracker; + if (!this.getTrackerClass().isInstance(tracker)) { + return; + } + this.syncTracker(tracker); + } + + public final void syncTracker(final IBreedingTracker tracker) { + this.discoveredSpeciesPercentage = 0.0f; + this.totalSpeciesCount = 0; + this.discoveredSpeciesCount = 0; + this.totalSecretCount = 0; + this.discoveredSecretCount = 0; + final Collection discoveredSpecies = this.getDiscoveredSpecies(tracker); + final Collection allSpecies = this.getAllSpecies(); + for (final IAlleleSpecies species : allSpecies) { + if (!this.isSecret(species)) { + ++this.totalSpeciesCount; + if (!this.isSpeciesDiscovered(species, tracker)) { + continue; + } + ++this.discoveredSpeciesCount; + } + else { + ++this.totalSecretCount; + if (!this.isSpeciesDiscovered(species, tracker)) { + continue; + } + ++this.discoveredSecretCount; + } + } + this.discoveredBranchPercentage = 0.0f; + this.totalBranchCount = 0; + this.discoveredBranchCount = 0; + final Collection discoveredBranches = this.getDiscoveredBranches(tracker); + final Collection allBranches = this.getAllBranches(); + for (final IClassification branch : allBranches) { + if (!this.isSecret(branch)) { + ++this.totalBranchCount; + if (!discoveredBranches.contains(branch)) { + continue; + } + ++this.discoveredBranchCount; + } + else { + ++this.totalSecretBranchCount; + if (!discoveredBranches.contains(branch)) { + continue; + } + ++this.discoveredSecretBranchCount; + } + } + this.discoveredSpeciesPercentage = this.discoveredSpeciesCount / this.totalSpeciesCount; + this.discoveredBranchPercentage = this.discoveredBranchCount / this.totalBranchCount; + final String epithet = this.getEpitome(); + this.onSyncBreedingTracker(tracker); + } + + public void onSyncBreedingTracker(final IBreedingTracker tracker) { + } + + public String getEpitome() { + return this.getEpitome(this.discoveredSpeciesPercentage); + } + + public final String getDescriptor() { + return BinnieCore.proxy.localise(this.getSpeciesRoot().getUID() + ".descriptor"); + } + + public final String getIdent() { + return this.getSpeciesRoot().getUID(); + } + + public final IChromosomeType getChromosome(final int i) { + for (final IChromosomeType chromosome : this.getSpeciesRoot().getKaryotype()) { + if (i == chromosome.ordinal()) { + return chromosome; + } + } + return null; + } + + public abstract int getColour(); + + public String getAlleleName(final IChromosomeType chromosome, final IAllele allele) { + if (allele instanceof IAlleleBoolean) { + return ((IAlleleBoolean) allele).getValue() ? Binnie.Language.localise(BinnieCore.instance, "allele.true") : Binnie.Language.localise(BinnieCore.instance, "allele.false"); + } + if (allele.getName() == "for.gui.maximum") { + return Binnie.Language.localise(BinnieCore.instance, "allele.fertility.maximum"); + } + return allele.getName(); + } + + public String getName() { + return BinnieCore.proxy.localise(this.getSpeciesRoot().getUID() + ".shortName"); + } + + @Override + public ItemStack getItemStackRepresentitive() { + final IIndividual first = this.getSpeciesRoot().getIndividualTemplates().get(0); + return this.getSpeciesRoot().getMemberStack(first, this.getDefaultType()); + } + + @Override + public String toString() { + return this.getName(); + } + + public abstract boolean isDNAManipulable(final ItemStack p0); + + public IIndividual getConversion(final ItemStack stack) { + return null; + } + + public final IIndividual getDefaultIndividual() { + return this.getSpeciesRoot().templateAsIndividual(this.getSpeciesRoot().getDefaultTemplate()); + } + + public final int getDefaultType() { + return this.getActiveTypes()[0]; + } + + public abstract int[] getActiveTypes(); + + public abstract void addExtraAlleles(final IChromosomeType p0, final TreeSet p1); + + public ItemStack getConversionStack(final ItemStack stack) { + return this.getSpeciesRoot().getMemberStack(this.getConversion(stack), this.getDefaultType()); + } + + public final Collection getActiveKaryotype() { + return Binnie.Genetics.getActiveChromosomes(this.getSpeciesRoot()); + } + + public ItemStack getDefaultMember(final String uid) { + return this.getSpeciesRoot().getMemberStack(this.getIndividual(uid), this.getDefaultType()); + } + + public IIndividual getIndividual(final String uid) { + return this.getSpeciesRoot().templateAsIndividual(this.getSpeciesRoot().getTemplate(uid)); + } + + public IGenome getGenome(final String uid) { + return this.getSpeciesRoot().templateAsGenome(this.getSpeciesRoot().getTemplate(uid)); + } +} diff --git a/src/main/java/binnie/core/genetics/EnumBeeBooleanModifier.java b/src/main/java/binnie/core/genetics/EnumBeeBooleanModifier.java new file mode 100644 index 00000000..b9e46f5c --- /dev/null +++ b/src/main/java/binnie/core/genetics/EnumBeeBooleanModifier.java @@ -0,0 +1,13 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.genetics; + +public enum EnumBeeBooleanModifier +{ + Sealed, + SelfLighted, + SunlightStimulated, + Hellish; +} diff --git a/src/main/java/binnie/core/genetics/EnumBeeModifier.java b/src/main/java/binnie/core/genetics/EnumBeeModifier.java new file mode 100644 index 00000000..91ccf076 --- /dev/null +++ b/src/main/java/binnie/core/genetics/EnumBeeModifier.java @@ -0,0 +1,22 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.genetics; + +import binnie.core.BinnieCore; +import binnie.Binnie; + +public enum EnumBeeModifier +{ + Territory, + Mutation, + Lifespan, + Production, + Flowering, + GeneticDecay; + + public String getName() { + return Binnie.Language.localise(BinnieCore.instance, "beemodifier." + this.name().toLowerCase()); + } +} diff --git a/src/main/java/binnie/core/genetics/FlowerBreedingSystem.java b/src/main/java/binnie/core/genetics/FlowerBreedingSystem.java new file mode 100644 index 00000000..50cc4ce0 --- /dev/null +++ b/src/main/java/binnie/core/genetics/FlowerBreedingSystem.java @@ -0,0 +1,133 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.genetics; + +import binnie.botany.genetics.EnumFlowerColor; +import java.util.TreeSet; +import binnie.botany.core.BotanyCore; +import forestry.api.genetics.IIndividual; +import binnie.botany.api.EnumFlowerStage; +import binnie.botany.api.IFlowerRoot; +import net.minecraft.item.ItemStack; +import binnie.core.BinnieCore; +import binnie.botany.api.EnumFlowerChromosome; +import forestry.api.genetics.IChromosomeType; +import binnie.botany.api.IBotanistTracker; +import forestry.api.genetics.IBreedingTracker; +import forestry.api.genetics.ISpeciesRoot; +import binnie.botany.api.IFlowerMutation; +import forestry.api.genetics.IAllele; +import net.minecraft.entity.player.EntityPlayer; +import forestry.api.genetics.IMutation; +import binnie.extrabees.ExtraBees; +import binnie.Binnie; + +class FlowerBreedingSystem extends BreedingSystem +{ + public FlowerBreedingSystem() { + this.iconUndiscovered = Binnie.Resource.getItemIcon(ExtraBees.instance, "icon/undiscoveredBee"); + this.iconDiscovered = Binnie.Resource.getItemIcon(ExtraBees.instance, "icon/discoveredBee"); + } + + @Override + public float getChance(final IMutation mutation, final EntityPlayer player, final IAllele species1, final IAllele species2) { + return ((IFlowerMutation) mutation).getBaseChance(); + } + + @Override + public ISpeciesRoot getSpeciesRoot() { + return Binnie.Genetics.getFlowerRoot(); + } + + @Override + public int getColour() { + return 14563127; + } + + @Override + public Class getTrackerClass() { + return IBotanistTracker.class; + } + + @Override + public String getAlleleName(final IChromosomeType chromosome, final IAllele allele) { + if (chromosome == EnumFlowerChromosome.FERTILITY) { + if (allele.getUID().contains("Low")) { + return Binnie.Language.localise(BinnieCore.instance, "allele.fertility.low"); + } + if (allele.getUID().contains("Normal")) { + return Binnie.Language.localise(BinnieCore.instance, "allele.fertility.normal"); + } + if (allele.getUID().contains("High")) { + return Binnie.Language.localise(BinnieCore.instance, "allele.fertility.high"); + } + if (allele.getUID().contains("Maximum")) { + return Binnie.Language.localise(BinnieCore.instance, "allele.fertility.maximum"); + } + } + return super.getAlleleName(chromosome, allele); + } + + @Override + public boolean isDNAManipulable(final ItemStack member) { + return ((IFlowerRoot) this.getSpeciesRoot()).getStageType(member) == EnumFlowerStage.POLLEN; + } + + @Override + public IIndividual getConversion(final ItemStack stack) { + return BotanyCore.getFlowerRoot().getConversion(stack); + } + + @Override + public int[] getActiveTypes() { + return new int[] { EnumFlowerStage.FLOWER.ordinal(), EnumFlowerStage.POLLEN.ordinal(), EnumFlowerStage.SEED.ordinal() }; + } + + @Override + public void addExtraAlleles(final IChromosomeType chromosome, final TreeSet alleles) { + switch ((EnumFlowerChromosome) chromosome) { + case FERTILITY: { + for (final ForestryAllele.Fertility a : ForestryAllele.Fertility.values()) { + alleles.add(a.getAllele()); + } + break; + } + case LIFESPAN: { + for (final ForestryAllele.Lifespan a2 : ForestryAllele.Lifespan.values()) { + alleles.add(a2.getAllele()); + } + break; + } + case HUMIDITY_TOLERANCE: + case PH_TOLERANCE: + case TEMPERATURE_TOLERANCE: { + for (final Tolerance a3 : Tolerance.values()) { + alleles.add(a3.getAllele()); + } + break; + } + case PRIMARY: + case SECONDARY: + case STEM: { + for (final EnumFlowerColor a4 : EnumFlowerColor.values()) { + alleles.add(a4.getAllele()); + } + break; + } + case SAPPINESS: { + for (final ForestryAllele.Sappiness a5 : ForestryAllele.Sappiness.values()) { + alleles.add(a5.getAllele()); + } + break; + } + case TERRITORY: { + for (final ForestryAllele.Territory a6 : ForestryAllele.Territory.values()) { + alleles.add(a6.getAllele()); + } + break; + } + } + } +} diff --git a/src/main/java/binnie/core/genetics/ForestryAllele.java b/src/main/java/binnie/core/genetics/ForestryAllele.java new file mode 100644 index 00000000..9074af10 --- /dev/null +++ b/src/main/java/binnie/core/genetics/ForestryAllele.java @@ -0,0 +1,271 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.genetics; + +import binnie.Binnie; +import forestry.api.apiculture.IAlleleBeeSpecies; +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.IAllele; + +public class ForestryAllele +{ + public enum Lifespan + { + Shortest, + Shorter, + Short, + Shortened, + Normal, + Elongated, + Long, + Longer, + Longest; + + public IAllele getAllele() { + return AlleleManager.alleleRegistry.getAllele("forestry.lifespan" + this.toString()); + } + } + + public enum Speed + { + Slowest, + Slower, + Slow, + Norm, + Fast, + Faster, + Fastest; + + public IAllele getAllele() { + return AlleleManager.alleleRegistry.getAllele("forestry.speed" + this.toString()); + } + } + + public enum Fertility + { + Low, + Normal, + High, + Maximum; + + public IAllele getAllele() { + return AlleleManager.alleleRegistry.getAllele("forestry.fertility" + this.toString()); + } + } + + public enum Flowering + { + Slowest, + Slower, + Slow, + Average, + Fast, + Faster, + Fastest, + Maximum; + + public IAllele getAllele() { + return AlleleManager.alleleRegistry.getAllele("forestry.flowering" + this.toString()); + } + } + + public enum Territory + { + Default, + Large, + Larger, + Largest; + + public IAllele getAllele() { + return AlleleManager.alleleRegistry.getAllele("forestry.territory" + this.toString()); + } + } + + public enum Sappiness + { + Lowest, + Lower, + Low, + Average, + High, + Higher, + Highest; + + public IAllele getAllele() { + return AlleleManager.alleleRegistry.getAllele("forestry.sappiness" + this.toString()); + } + } + + public enum TreeHeight + { + Smallest, + Smaller, + Small, + Average, + Large, + Larger, + Largest, + Gigantic; + + public IAllele getAllele() { + return AlleleManager.alleleRegistry.getAllele("forestry.height" + ((this == TreeHeight.Average) ? "Max10" : this.toString())); + } + } + + public enum Size + { + Smallest, + Smaller, + Small, + Average, + Large, + Larger, + Largest; + + public IAllele getAllele() { + return AlleleManager.alleleRegistry.getAllele("forestry.size" + this.toString()); + } + } + + public enum Saplings + { + Lowest, + Lower, + Low, + Average, + High, + Higher, + Highest; + + public IAllele getAllele() { + String s = this.toString(); + if (this == Saplings.Average) { + s = "Default"; + } + if (this == Saplings.High) { + s = "Double"; + } + if (this == Saplings.Higher) { + s = "Triple"; + } + return AlleleManager.alleleRegistry.getAllele("forestry.saplings" + s); + } + } + + public enum Yield + { + Lowest, + Lower, + Low, + Average, + High, + Higher, + Highest; + + public IAllele getAllele() { + return AlleleManager.alleleRegistry.getAllele("forestry.yield" + ((this == Yield.Average) ? "Default" : this.toString())); + } + } + + public enum Maturation + { + Slowest, + Slower, + Slow, + Average, + Fast, + Faster, + Fastest; + + public IAllele getAllele() { + return AlleleManager.alleleRegistry.getAllele("forestry.maturation" + this.toString()); + } + } + + public enum Bool + { + True, + False; + + public IAllele getAllele() { + return AlleleManager.alleleRegistry.getAllele("forestry.bool" + this.toString()); + } + + public static IAllele get(final boolean bool) { + return (bool ? Bool.True : Bool.False).getAllele(); + } + } + + public enum Growth + { + Tropical; + + public IAllele getAllele() { + return AlleleManager.alleleRegistry.getAllele("forestry.growth" + this.toString()); + } + } + + public enum Int + { + Int1, + Int2, + Int3, + Int4, + Int5, + Int6, + Int7, + Int8, + Int9, + Int10; + + public IAllele getAllele() { + return AlleleManager.alleleRegistry.getAllele("forestry.i" + (this.ordinal() + 1) + "d"); + } + } + + public enum BeeSpecies + { + Modest, + Noble, + Forest, + Rural, + Marshy, + Sinister, + Tropical, + Wintry, + Merry, + Austere, + Imperial, + Ended, + Meadows, + Common, + Frugal, + Unweary, + Diligent, + Majestic, + Cultivated, + Industrious, + Valiant, + Secluded, + Hermitic, + Spectral, + Exotic, + Fiendish, + Monastic, + Steadfast, + Miry, + Farmerly, + Boggy, + Demonic; + + public IAlleleBeeSpecies getAllele() { + return (IAlleleBeeSpecies) AlleleManager.alleleRegistry.getAllele("forestry.species" + this.toString()); + } + + public IAllele[] getTemplate() { + return Binnie.Genetics.getBeeRoot().getTemplate(this.getAllele().getUID()); + } + } +} diff --git a/src/main/java/binnie/core/genetics/Gene.java b/src/main/java/binnie/core/genetics/Gene.java new file mode 100644 index 00000000..30f0add4 --- /dev/null +++ b/src/main/java/binnie/core/genetics/Gene.java @@ -0,0 +1,119 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.genetics; + +import binnie.Binnie; +import forestry.api.genetics.AlleleManager; +import net.minecraft.nbt.NBTTagCompound; +import forestry.api.genetics.ISpeciesRoot; +import forestry.api.genetics.IChromosomeType; +import forestry.api.genetics.IAllele; +import binnie.genetics.api.IGene; +import forestry.api.core.INBTTagable; + +public class Gene implements INBTTagable, IGene +{ + private IAllele allele; + private IChromosomeType chromosome; + private ISpeciesRoot root; + + @Override + public ISpeciesRoot getSpeciesRoot() { + return this.root; + } + + @Override + public String toString() { + return this.getAlleleName(); + } + + public Gene(final IAllele allele, final IChromosomeType chromosome, final ISpeciesRoot root) { + this.allele = allele; + this.chromosome = chromosome; + this.root = root; + } + + public Gene(final NBTTagCompound nbt) { + this.readFromNBT(nbt); + } + + @Override + public void readFromNBT(final NBTTagCompound nbt) { + this.allele = AlleleManager.alleleRegistry.getAllele(nbt.getString("allele")); + this.root = AlleleManager.alleleRegistry.getSpeciesRoot(nbt.getString("root")); + final int chromoID = nbt.getByte("chromo"); + if (this.root != null && chromoID >= 0 && chromoID < this.root.getKaryotype().length) { + this.chromosome = this.root.getKaryotype()[chromoID]; + } + } + + @Override + public void writeToNBT(final NBTTagCompound nbt) { + nbt.setString("allele", this.allele.getUID()); + nbt.setString("root", this.root.getUID()); + nbt.setByte("chromo", (byte) this.chromosome.ordinal()); + } + + public boolean isCorrupted() { + return this.allele == null || this.chromosome == null || this.root == null; + } + + public static Gene create(final NBTTagCompound nbt) { + final Gene gene = new Gene(nbt); + return gene.isCorrupted() ? null : gene; + } + + public static Gene create(final IAllele allele, final IChromosomeType chromosome, final ISpeciesRoot root) { + final Gene gene = new Gene(allele, chromosome, root); + return gene.isCorrupted() ? null : gene; + } + + @Override + public NBTTagCompound getNBTTagCompound() { + final NBTTagCompound nbt = new NBTTagCompound(); + this.writeToNBT(nbt); + return nbt; + } + + @Override + public String getName() { + return Binnie.Genetics.getSystem(this.root).getAlleleName(this.chromosome, this.allele); + } + + public BreedingSystem getSystem() { + return Binnie.Genetics.getSystem(this.root); + } + + @Override + public IChromosomeType getChromosome() { + return this.chromosome; + } + + @Override + public IAllele getAllele() { + return this.allele; + } + + @Override + public boolean equals(final Object obj) { + if (!(obj instanceof Gene)) { + return false; + } + final Gene g = (Gene) obj; + return this.allele == g.allele && this.chromosome.ordinal() == g.chromosome.ordinal() && this.root == g.root; + } + + public String getAlleleName() { + return this.getSystem().getAlleleName(this.chromosome, this.allele); + } + + public String getChromosomeName() { + return this.getSystem().getChromosomeName(this.chromosome); + } + + public String getShortChromosomeName() { + return this.getSystem().getChromosomeShortName(this.chromosome); + } +} diff --git a/src/main/java/binnie/core/genetics/IAlleleProvider.java b/src/main/java/binnie/core/genetics/IAlleleProvider.java new file mode 100644 index 00000000..65eff615 --- /dev/null +++ b/src/main/java/binnie/core/genetics/IAlleleProvider.java @@ -0,0 +1,12 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.genetics; + +import forestry.api.genetics.IAllele; + +public interface IAlleleProvider +{ + IAllele getAllele(); +} diff --git a/src/main/java/binnie/core/genetics/IBreedingMessage.java b/src/main/java/binnie/core/genetics/IBreedingMessage.java new file mode 100644 index 00000000..825a5ad5 --- /dev/null +++ b/src/main/java/binnie/core/genetics/IBreedingMessage.java @@ -0,0 +1,118 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.genetics; + +import forestry.api.genetics.IClassification; +import binnie.core.BinnieCore; +import binnie.Binnie; +import forestry.api.genetics.ISpeciesRoot; +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.IAlleleSpecies; +import net.minecraft.item.ItemStack; + +interface IBreedingMessage +{ + String getTitle(); + + String getBody(); + + ItemStack getIcon(); + + public static class MessageSpeciesDiscovered implements IBreedingMessage + { + IAlleleSpecies species; + ItemStack stack; + + public MessageSpeciesDiscovered(final IAlleleSpecies species) { + this.species = species; + ISpeciesRoot root = null; + for (final ISpeciesRoot sRoot : AlleleManager.alleleRegistry.getSpeciesRoot().values()) { + if (sRoot.getKaryotype()[0].getAlleleClass().isInstance(species)) { + root = sRoot; + } + } + if (root != null) { + this.stack = root.getMemberStack(root.templateAsIndividual(root.getTemplate(species.getUID())), 0); + } + } + + @Override + public String getTitle() { + return Binnie.Language.localise(BinnieCore.instance, "gui.breedingmessage.species"); + } + + @Override + public String getBody() { + return this.species.getName(); + } + + @Override + public ItemStack getIcon() { + return this.stack; + } + } + + public static class BranchDiscovered implements IBreedingMessage + { + IAlleleSpecies species; + IClassification classification; + ItemStack stack; + + public BranchDiscovered(final IAlleleSpecies species, final IClassification classification) { + this.species = species; + this.classification = classification; + ISpeciesRoot root = null; + for (final ISpeciesRoot sRoot : AlleleManager.alleleRegistry.getSpeciesRoot().values()) { + if (sRoot.getKaryotype()[0].getAlleleClass().isInstance(species)) { + root = sRoot; + } + } + if (root != null) { + this.stack = root.getMemberStack(root.templateAsIndividual(root.getTemplate(species.getUID())), 0); + } + } + + @Override + public String getTitle() { + return Binnie.Language.localise(BinnieCore.instance, "gui.breedingmessage.branch"); + } + + @Override + public String getBody() { + return this.classification.getScientific(); + } + + @Override + public ItemStack getIcon() { + return this.stack; + } + } + + public static class EpithetGained implements IBreedingMessage + { + String epithet; + ItemStack stack; + + public EpithetGained(final String epithet, final ISpeciesRoot root) { + this.epithet = epithet; + this.stack = root.getMemberStack(root.templateAsIndividual(root.getDefaultTemplate()), 0); + } + + @Override + public String getTitle() { + return Binnie.Language.localise(BinnieCore.instance, "gui.breedingmessage.epithet"); + } + + @Override + public String getBody() { + return this.epithet; + } + + @Override + public ItemStack getIcon() { + return this.stack; + } + } +} diff --git a/src/main/java/binnie/core/genetics/IItemStackRepresentitive.java b/src/main/java/binnie/core/genetics/IItemStackRepresentitive.java new file mode 100644 index 00000000..08242ced --- /dev/null +++ b/src/main/java/binnie/core/genetics/IItemStackRepresentitive.java @@ -0,0 +1,12 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.genetics; + +import net.minecraft.item.ItemStack; + +public interface IItemStackRepresentitive +{ + ItemStack getItemStackRepresentitive(); +} diff --git a/src/main/java/binnie/core/genetics/ManagerGenetics.java b/src/main/java/binnie/core/genetics/ManagerGenetics.java new file mode 100644 index 00000000..cddf4baa --- /dev/null +++ b/src/main/java/binnie/core/genetics/ManagerGenetics.java @@ -0,0 +1,230 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.genetics; + +import binnie.botany.genetics.AlleleColor; +import forestry.api.genetics.IAlleleInteger; +import forestry.api.genetics.IAlleleFloat; +import forestry.api.genetics.IGenome; +import java.util.Comparator; +import java.util.TreeSet; +import binnie.Binnie; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.event.world.WorldEvent; +import forestry.api.genetics.IIndividual; +import net.minecraft.item.ItemStack; +import java.util.Collection; +import forestry.api.genetics.EnumTolerance; +import binnie.botany.api.IFlowerRoot; +import forestry.api.lepidopterology.IButterflyRoot; +import forestry.api.apiculture.IBeeRoot; +import forestry.api.genetics.AlleleManager; +import forestry.api.arboriculture.ITreeRoot; +import net.minecraft.world.World; +import forestry.api.genetics.IAlleleSpecies; +import binnie.core.BinnieCore; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.IChromosomeType; +import java.util.List; +import forestry.api.genetics.ISpeciesRoot; +import java.util.Map; +import binnie.core.ManagerBase; + +public class ManagerGenetics extends ManagerBase +{ + public BreedingSystem beeBreedingSystem; + public BreedingSystem treeBreedingSystem; + public BreedingSystem mothBreedingSystem; + public BreedingSystem flowerBreedingSystem; + private final Map BREEDING_SYSTEMS; + private List invalidChromosomeTypes; + private Map>> chromosomeArray; + + public ManagerGenetics() { + this.BREEDING_SYSTEMS = new LinkedHashMap(); + this.invalidChromosomeTypes = new ArrayList(); + this.chromosomeArray = new LinkedHashMap>>(); + } + + @Override + public void init() { + if (BinnieCore.isApicultureActive()) { + this.beeBreedingSystem = new BeeBreedingSystem(); + } + if (BinnieCore.isArboricultureActive()) { + this.treeBreedingSystem = new TreeBreedingSystem(); + } + if (BinnieCore.isLepidopteryActive()) { + this.mothBreedingSystem = new MothBreedingSystem(); + } + if (BinnieCore.isBotanyActive()) { + this.flowerBreedingSystem = new FlowerBreedingSystem(); + } + } + + @Override + public void postInit() { + this.refreshData(); + } + + public boolean isSpeciesDiscovered(final IAlleleSpecies species, final World world, final boolean nei) { + return true; + } + + public ITreeRoot getTreeRoot() { + return (ITreeRoot) AlleleManager.alleleRegistry.getSpeciesRoot("rootTrees"); + } + + public IBeeRoot getBeeRoot() { + return (IBeeRoot) AlleleManager.alleleRegistry.getSpeciesRoot("rootBees"); + } + + public IButterflyRoot getButterflyRoot() { + return (IButterflyRoot) AlleleManager.alleleRegistry.getSpeciesRoot("rootButterflies"); + } + + public IFlowerRoot getFlowerRoot() { + return (IFlowerRoot) AlleleManager.alleleRegistry.getSpeciesRoot("rootFlowers"); + } + + public BreedingSystem getSystem(final String string) { + for (final BreedingSystem system : this.BREEDING_SYSTEMS.values()) { + if (system.getIdent().equals(string)) { + return system; + } + } + return null; + } + + public BreedingSystem getSystem(final ISpeciesRoot root) { + return this.getSystem(root.getUID()); + } + + public ISpeciesRoot getSpeciesRoot(final IAlleleSpecies species) { + for (final ISpeciesRoot root : AlleleManager.alleleRegistry.getSpeciesRoot().values()) { + if (root.getKaryotype()[0].getAlleleClass().isInstance(species)) { + return root; + } + } + return null; + } + + public IAllele getToleranceAllele(final EnumTolerance tol) { + return AlleleManager.alleleRegistry.getAllele(Tolerance.values()[tol.ordinal()].getUID()); + } + + public int[] getTolerance(final EnumTolerance tol) { + return Tolerance.values()[tol.ordinal()].getBounds(); + } + + public Collection getActiveSystems() { + return this.BREEDING_SYSTEMS.values(); + } + + public void registerBreedingSystem(final BreedingSystem system) { + this.BREEDING_SYSTEMS.put(system.getSpeciesRoot(), system); + } + + public BreedingSystem getConversionSystem(final ItemStack stack) { + for (final BreedingSystem system : this.getActiveSystems()) { + if (system.getConversion(stack) != null) { + return system; + } + } + return null; + } + + public ItemStack getConversionStack(final ItemStack stack) { + final BreedingSystem system = this.getConversionSystem(stack); + return (system == null) ? null : system.getConversionStack(stack); + } + + public IIndividual getConversion(final ItemStack stack) { + final BreedingSystem system = this.getConversionSystem(stack); + return (system == null) ? null : system.getConversion(stack); + } + + @SubscribeEvent + public void onWorldLoad(final WorldEvent.Load event) { + this.refreshData(); + } + + private void refreshData() { + this.loadAlleles(); + for (final BreedingSystem system : Binnie.Genetics.getActiveSystems()) { + system.calculateArrays(); + } + } + + private void loadAlleles() { + this.invalidChromosomeTypes.clear(); + for (final ISpeciesRoot root : AlleleManager.alleleRegistry.getSpeciesRoot().values()) { + final BreedingSystem system = this.getSystem(root); + final Map> chromosomeMap = new LinkedHashMap>(); + for (final IChromosomeType chromosome : root.getKaryotype()) { + final TreeSet alleles = new TreeSet(new ComparatorAllele()); + for (final IIndividual individual : root.getIndividualTemplates()) { + final IGenome genome = individual.getGenome(); + try { + final IAllele a1 = genome.getActiveAllele(chromosome); + final IAllele a2 = genome.getInactiveAllele(chromosome); + if (chromosome.getAlleleClass().isInstance(a1)) { + alleles.add(a1); + } + if (!chromosome.getAlleleClass().isInstance(a2)) { + continue; + } + alleles.add(a2); + } catch (Exception ex) { + } + } + system.addExtraAlleles(chromosome, alleles); + if (alleles.size() == 0) { + this.invalidChromosomeTypes.add(chromosome); + } + else { + final List alleleList = new ArrayList(); + alleleList.addAll(alleles); + chromosomeMap.put(chromosome, alleleList); + } + } + this.chromosomeArray.put(root, chromosomeMap); + } + } + + public Map> getChromosomeMap(final ISpeciesRoot root) { + return this.chromosomeArray.get(root); + } + + public Collection getActiveChromosomes(final ISpeciesRoot root) { + return this.getChromosomeMap(root).keySet(); + } + + public boolean isInvalidChromosome(final IChromosomeType type) { + return this.invalidChromosomeTypes.contains(type); + } + + static class ComparatorAllele implements Comparator + { + @Override + public int compare(final IAllele o1, final IAllele o2) { + if (o1 == null || o2 == null) { + throw new NullPointerException("Allele is null!"); + } + if (o1 instanceof IAlleleFloat && o2 instanceof IAlleleFloat) { + return Float.valueOf(((IAlleleFloat) o1).getValue()).compareTo(Float.valueOf(((IAlleleFloat) o2).getValue())); + } + if (o1 instanceof IAlleleInteger && o2 instanceof IAlleleInteger && !(o1 instanceof AlleleColor)) { + return Integer.valueOf(((IAlleleInteger) o1).getValue()).compareTo(Integer.valueOf(((IAlleleInteger) o2).getValue())); + } + if (o1.getName() != null && o2.getName() != null) { + return o1.getName().compareTo(o2.getName()); + } + return o1.getUID().compareTo(o2.getUID()); + } + } +} diff --git a/src/main/java/binnie/core/genetics/MothBreedingSystem.java b/src/main/java/binnie/core/genetics/MothBreedingSystem.java new file mode 100644 index 00000000..a21d3927 --- /dev/null +++ b/src/main/java/binnie/core/genetics/MothBreedingSystem.java @@ -0,0 +1,144 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.genetics; + +import java.util.TreeSet; +import forestry.api.lepidopterology.EnumFlutterType; +import forestry.api.lepidopterology.IButterflyRoot; +import net.minecraft.item.ItemStack; +import binnie.core.BinnieCore; +import forestry.api.genetics.IAlleleInteger; +import forestry.api.lepidopterology.EnumButterflyChromosome; +import forestry.api.genetics.IChromosomeType; +import forestry.api.lepidopterology.ILepidopteristTracker; +import forestry.api.genetics.IBreedingTracker; +import forestry.api.genetics.ISpeciesRoot; +import forestry.api.genetics.IAllele; +import net.minecraft.entity.player.EntityPlayer; +import forestry.api.genetics.IMutation; +import binnie.extratrees.ExtraTrees; +import binnie.Binnie; + +class MothBreedingSystem extends BreedingSystem +{ + public MothBreedingSystem() { + this.iconUndiscovered = Binnie.Resource.getItemIcon(ExtraTrees.instance, "icon/undiscoveredMoth"); + this.iconDiscovered = Binnie.Resource.getItemIcon(ExtraTrees.instance, "icon/discoveredMoth"); + } + + @Override + public float getChance(final IMutation mutation, final EntityPlayer player, final IAllele species1, final IAllele species2) { + return 0.0f; + } + + @Override + public ISpeciesRoot getSpeciesRoot() { + return Binnie.Genetics.getButterflyRoot(); + } + + @Override + public int getColour() { + return 62194; + } + + @Override + public Class getTrackerClass() { + return ILepidopteristTracker.class; + } + + @Override + public String getAlleleName(final IChromosomeType chromosome, final IAllele allele) { + if (chromosome == EnumButterflyChromosome.METABOLISM) { + final int metabolism = ((IAlleleInteger) allele).getValue(); + if (metabolism >= 19) { + return Binnie.Language.localise(BinnieCore.instance, "allele.metabolism.highest"); + } + if (metabolism >= 16) { + return Binnie.Language.localise(BinnieCore.instance, "allele.metabolism.higher"); + } + if (metabolism >= 13) { + return Binnie.Language.localise(BinnieCore.instance, "allele.metabolism.high"); + } + if (metabolism >= 10) { + return Binnie.Language.localise(BinnieCore.instance, "allele.metabolism.normal"); + } + if (metabolism >= 7) { + return Binnie.Language.localise(BinnieCore.instance, "allele.metabolism.slow"); + } + if (metabolism >= 4) { + return Binnie.Language.localise(BinnieCore.instance, "allele.metabolism.slower"); + } + return Binnie.Language.localise(BinnieCore.instance, "allele.metabolism.slowest"); + } + else { + if (chromosome == EnumButterflyChromosome.FERTILITY) { + final int metabolism = ((IAlleleInteger) allele).getValue(); + return metabolism + "x"; + } + return super.getAlleleName(chromosome, allele); + } + } + + @Override + public boolean isDNAManipulable(final ItemStack member) { + return ((IButterflyRoot) this.getSpeciesRoot()).getType(member) == EnumFlutterType.SERUM; + } + + @Override + public int[] getActiveTypes() { + return new int[] { EnumFlutterType.BUTTERFLY.ordinal(), EnumFlutterType.CATERPILLAR.ordinal(), EnumFlutterType.SERUM.ordinal() }; + } + + @Override + public void addExtraAlleles(final IChromosomeType chromosome, final TreeSet alleles) { + switch ((EnumButterflyChromosome) chromosome) { + case FERTILITY: { + for (final ForestryAllele.Int a : ForestryAllele.Int.values()) { + alleles.add(a.getAllele()); + } + break; + } + case LIFESPAN: { + for (final ForestryAllele.Lifespan a2 : ForestryAllele.Lifespan.values()) { + alleles.add(a2.getAllele()); + } + break; + } + case METABOLISM: { + for (final ForestryAllele.Int a : ForestryAllele.Int.values()) { + alleles.add(a.getAllele()); + } + break; + } + case TOLERANT_FLYER: + case FIRE_RESIST: + case NOCTURNAL: { + for (final ForestryAllele.Bool a3 : ForestryAllele.Bool.values()) { + alleles.add(a3.getAllele()); + } + break; + } + case SIZE: { + for (final ForestryAllele.Size a4 : ForestryAllele.Size.values()) { + alleles.add(a4.getAllele()); + } + break; + } + case SPEED: { + for (final ForestryAllele.Speed a5 : ForestryAllele.Speed.values()) { + alleles.add(a5.getAllele()); + } + break; + } + case HUMIDITY_TOLERANCE: + case TEMPERATURE_TOLERANCE: { + for (final Tolerance a6 : Tolerance.values()) { + alleles.add(a6.getAllele()); + } + break; + } + } + } +} diff --git a/src/main/java/binnie/core/genetics/Tolerance.java b/src/main/java/binnie/core/genetics/Tolerance.java new file mode 100644 index 00000000..ea0bf2bb --- /dev/null +++ b/src/main/java/binnie/core/genetics/Tolerance.java @@ -0,0 +1,59 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.genetics; + +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.EnumTolerance; + +public enum Tolerance +{ + None(0, 0), + Both1(-1, 1), + Both2(-2, 2), + Both3(-3, 3), + Both4(-4, 4), + Both5(-5, 5), + Up1(0, 1), + Up2(0, 2), + Up3(0, 3), + Up4(0, 4), + Up5(0, 5), + Down1(-1, 0), + Down2(-2, 0), + Down3(-3, 0), + Down4(-4, 0), + Down5(-5, 0); + + private int[] bounds; + + private Tolerance(final int a, final int b) { + this.bounds = new int[] { a, b }; + } + + public String getUID() { + return "forestry.tolerance" + this.toString(); + } + + public int[] getBounds() { + return this.bounds; + } + + public static Tolerance get(final EnumTolerance tol) { + return values()[tol.ordinal()]; + } + + public IAllele getAllele() { + return AlleleManager.alleleRegistry.getAllele(this.getUID()); + } + + public > boolean canTolerate(final T base, final T test) { + return test.ordinal() <= base.ordinal() + this.bounds[1] && test.ordinal() >= base.ordinal() + this.bounds[0]; + } + + public static > boolean canTolerate(final T base, final T test, final EnumTolerance tol) { + return get(tol).canTolerate(base, test); + } +} diff --git a/src/main/java/binnie/core/genetics/TreeBreedingSystem.java b/src/main/java/binnie/core/genetics/TreeBreedingSystem.java new file mode 100644 index 00000000..230625de --- /dev/null +++ b/src/main/java/binnie/core/genetics/TreeBreedingSystem.java @@ -0,0 +1,335 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.genetics; + +import java.util.TreeSet; +import java.util.Map; + +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.IIndividual; +import forestry.api.arboriculture.EnumGermlingType; +import forestry.api.arboriculture.ITreeRoot; +import forestry.api.arboriculture.TreeManager; +import binnie.extratrees.machines.Lumbermill; + +import java.util.Set; + +import forestry.api.genetics.IFruitFamily; + +import java.util.HashSet; +import java.util.List; +import java.util.ArrayList; +import java.util.Collection; + +import com.mojang.authlib.GameProfile; + +import net.minecraft.world.World; + +import net.minecraft.item.ItemStack; + +import forestry.api.arboriculture.ITreeGenome; +import forestry.api.arboriculture.IAlleleTreeSpecies; +import forestry.api.genetics.IAlleleSpecies; +import forestry.api.arboriculture.IFruitProvider; + +import java.util.EnumSet; + +import forestry.api.arboriculture.IAlleleFruit; + +import net.minecraftforge.common.EnumPlantType; +import net.minecraftforge.common.util.ForgeDirection; + +import binnie.core.BinnieCore; +import forestry.api.genetics.IAllelePlantType; +import forestry.api.genetics.IAlleleInteger; +import forestry.api.arboriculture.EnumTreeChromosome; +import forestry.api.genetics.IChromosomeType; +import forestry.api.arboriculture.IArboristTracker; +import forestry.api.genetics.IBreedingTracker; +import forestry.api.genetics.ISpeciesRoot; +import forestry.api.arboriculture.ITreeMutation; +import forestry.api.genetics.IAllele; + +import net.minecraft.entity.player.EntityPlayer; + +import forestry.api.genetics.IMutation; +import binnie.extratrees.ExtraTrees; +import binnie.extratrees.FakeWorld; +import binnie.Binnie; +import binnie.core.util.UniqueItemStackSet; + +public class TreeBreedingSystem extends BreedingSystem +{ + public UniqueItemStackSet allFruits; + public UniqueItemStackSet allWoods; + private UniqueItemStackSet discoveredFruits; + private UniqueItemStackSet discoveredWoods; + public UniqueItemStackSet discoveredPlanks; + + public TreeBreedingSystem() { + this.allFruits = new UniqueItemStackSet(); + this.allWoods = new UniqueItemStackSet(); + this.discoveredFruits = new UniqueItemStackSet(); + this.discoveredWoods = new UniqueItemStackSet(); + this.discoveredPlanks = new UniqueItemStackSet(); + this.iconUndiscovered = Binnie.Resource.getItemIcon(ExtraTrees.instance, "icon/undiscoveredTree"); + this.iconDiscovered = Binnie.Resource.getItemIcon(ExtraTrees.instance, "icon/discoveredTree"); + } + + @Override + public float getChance(final IMutation mutation, final EntityPlayer player, final IAllele species1, final IAllele species2) { + final ITreeGenome genome0 = (ITreeGenome) this.getSpeciesRoot().templateAsGenome(this.getSpeciesRoot().getTemplate(species1.getUID())); + final ITreeGenome genome2 = (ITreeGenome) this.getSpeciesRoot().templateAsGenome(this.getSpeciesRoot().getTemplate(species2.getUID())); + return ((ITreeMutation) mutation).getChance(player.worldObj, (int) player.posX, (int) player.posY, (int) player.posZ, (IAlleleTreeSpecies) species1, (IAlleleTreeSpecies) species2, genome0, genome2); + } + + @Override + public ISpeciesRoot getSpeciesRoot() { + return Binnie.Genetics.getTreeRoot(); + } + + @Override + public int getColour() { + return 53006; + } + + @Override + public Class getTrackerClass() { + return IArboristTracker.class; + } + + @Override + public String getAlleleName(final IChromosomeType chromosome, final IAllele allele) { + if (chromosome == EnumTreeChromosome.GIRTH) { + return ((IAlleleInteger) allele).getValue() + "x" + ((IAlleleInteger) allele).getValue(); + } + if (chromosome == EnumTreeChromosome.PLANT) { + final EnumSet types = ((IAllelePlantType) allele).getPlantTypes(); + return types.isEmpty() ? Binnie.Language.localise(BinnieCore.instance, "allele.none") : types.iterator().next().toString(); + } + if (chromosome == EnumTreeChromosome.FRUITS && allele.getUID().contains(".")) { + final IFruitProvider provider = ((IAlleleFruit) allele).getProvider(); + return (provider.getProducts().length == 0) ? Binnie.Language.localise(BinnieCore.instance, "allele.none") : provider.getProducts()[0].getDisplayName(); + } + if (chromosome == EnumTreeChromosome.GROWTH) { + if (allele.getUID().contains("Tropical")) { + return Binnie.Language.localise(BinnieCore.instance, "allele.growth.tropical"); + } + if (allele.getUID().contains("Lightlevel")) { + return Binnie.Language.localise(BinnieCore.instance, "allele.growth.lightlevel"); + } + } + return super.getAlleleName(chromosome, allele); + } + + @Override + public void onSyncBreedingTracker(final IBreedingTracker tracker) { + this.discoveredFruits.clear(); + this.discoveredWoods.clear(); + for (final IAlleleSpecies species : this.getDiscoveredSpecies(tracker)) { + final IAlleleTreeSpecies tSpecies = (IAlleleTreeSpecies) species; + final ITreeGenome genome = (ITreeGenome) this.getSpeciesRoot().templateAsGenome(this.getSpeciesRoot().getTemplate(tSpecies.getUID())); + + FakeWorld world = FakeWorld.instance; + genome.getPrimary().getGenerator().setLogBlock(genome, world, 0, 0, 0, ForgeDirection.UP); + final ItemStack wood = world.getWooLog(); + if (wood != null) { + this.discoveredWoods.add(wood); + } + + // for (final ItemStack wood : + // tSpecies.getRoot().templateAsIndividual(getSpeciesRoot().getTemplate(tSpecies.getUID())).getProduceList()) + // { + // this.discoveredWoods.add(wood); + // } + for (final ItemStack fruit : genome.getFruitProvider().getProducts()) { + this.discoveredFruits.add(fruit); + } + for (ItemStack wood2 : this.discoveredWoods) { + } + } + } + + @Override + public final void calculateArrays() { + super.calculateArrays(); + for (final IAlleleSpecies species : this.allActiveSpecies) { + final IAlleleTreeSpecies tSpecies = (IAlleleTreeSpecies) species; + final ITreeGenome genome = (ITreeGenome) this.getSpeciesRoot().templateAsGenome(this.getSpeciesRoot().getTemplate(tSpecies.getUID())); + + FakeWorld world = FakeWorld.instance; + genome.getPrimary().getGenerator().setLogBlock(genome, world, 0, 0, 0, ForgeDirection.UP); + final ItemStack wood = world.getWooLog(); + if (wood != null) { + this.allWoods.add(wood); + } + + // for (final ItemStack wood : + // tSpecies.getRoot().templateAsIndividual(getSpeciesRoot().getTemplate(tSpecies.getUID())).getProduceList()) + // { + // this.allWoods.add(wood); + // } + for (final ItemStack fruit : genome.getFruitProvider().getProducts()) { + this.allFruits.add(fruit); + } + } + } + + public Collection getTreesThatBearFruit(final ItemStack fruit, final boolean nei, final World world, final GameProfile player) { + final Collection set = nei ? this.getAllSpecies() : this.getDiscoveredSpecies(world, player); + final List found = new ArrayList(); + for (final IAlleleSpecies species : set) { + final IAlleleTreeSpecies tSpecies = (IAlleleTreeSpecies) species; + final ITreeGenome genome = (ITreeGenome) this.getSpeciesRoot().templateAsGenome(this.getSpeciesRoot().getTemplate(tSpecies.getUID())); + for (final ItemStack fruit2 : genome.getFruitProvider().getProducts()) { + if (fruit2.isItemEqual(fruit)) { + found.add(species); + } + } + } + return found; + } + + public Collection getTreesThatCanBearFruit(final ItemStack fruit, final boolean nei, final World world, final GameProfile player) { + final Collection set = nei ? this.getAllSpecies() : this.getDiscoveredSpecies(world, player); + final List found = new ArrayList(); + final Set providers = new HashSet(); + for (final IAlleleSpecies species : set) { + final IAlleleTreeSpecies tSpecies = (IAlleleTreeSpecies) species; + final ITreeGenome genome = (ITreeGenome) this.getSpeciesRoot().templateAsGenome(this.getSpeciesRoot().getTemplate(tSpecies.getUID())); + for (final ItemStack fruit2 : genome.getFruitProvider().getProducts()) { + if (fruit2.isItemEqual(fruit)) { + providers.add(genome.getFruitProvider().getFamily()); + } + } + } + for (final IAlleleSpecies species : set) { + final IAlleleTreeSpecies tSpecies = (IAlleleTreeSpecies) species; + for (final IFruitFamily family : providers) { + if (tSpecies.getSuitableFruit().contains(family)) { + found.add(species); + break; + } + } + } + return found; + } + + public Collection getTreesThatHaveWood(final ItemStack fruit, final boolean nei, final World world, final GameProfile player) { + final Collection set = nei ? this.getAllSpecies() : this.getDiscoveredSpecies(world, player); + final List found = new ArrayList(); + for (final IAlleleSpecies species : set) { + IAlleleTreeSpecies tSpecies = (IAlleleTreeSpecies) species; + ITreeGenome genome = TreeManager.treeRoot.templateAsGenome(TreeManager.treeRoot.getTemplate(tSpecies.getUID())); + // for (final ItemStack fruit2 : + // tSpecies.getRoot().getMember(fruit).getProduceList()){ + tSpecies.getGenerator().setLogBlock(genome, FakeWorld.instance, 0, 0, 0, ForgeDirection.UP); + ItemStack fruit2 = FakeWorld.instance.getWooLog(); + if (fruit2.isItemEqual(fruit)) { + found.add(species); + // } + } + } + return found; + } + + public Collection getTreesThatMakePlanks(final ItemStack fruit, final boolean nei, final World world, final GameProfile player) { + if (fruit == null) { + return new ArrayList(); + } + final Collection set = nei ? this.getAllSpecies() : this.getDiscoveredSpecies(world, player); + final List found = new ArrayList(); + for (final IAlleleSpecies species : set) { + final IAlleleTreeSpecies tSpecies = (IAlleleTreeSpecies) species; + ITreeGenome genome = TreeManager.treeRoot.templateAsGenome(TreeManager.treeRoot.getTemplate(tSpecies.getUID())); + tSpecies.getGenerator().setLogBlock(genome, FakeWorld.instance, 0, 0, 0, ForgeDirection.UP); + ItemStack fruit2 = FakeWorld.instance.getWooLog(); + // for (final ItemStack fruit2 : + // tSpecies.getRoot().getMember(fruit).getProduceList()) { + if (Lumbermill.getPlankProduct(fruit2) != null && fruit.isItemEqual(Lumbermill.getPlankProduct(fruit2))) { + found.add(species); + } + // } + } + return found; + } + + @Override + public boolean isDNAManipulable(final ItemStack member) { + return ((ITreeRoot) this.getSpeciesRoot()).getType(member) == EnumGermlingType.POLLEN; + } + + @Override + public IIndividual getConversion(final ItemStack stack) { + if (stack == null) { + return null; + } + for (final Map.Entry entry : AlleleManager.ersatzSaplings.entrySet()) { + if (ItemStack.areItemStacksEqual(stack, entry.getKey())) { + return entry.getValue(); + } + } + return null; + } + + @Override + public int[] getActiveTypes() { + return new int[] { EnumGermlingType.SAPLING.ordinal(), EnumGermlingType.POLLEN.ordinal() }; + } + + @Override + public void addExtraAlleles(final IChromosomeType chromosome, final TreeSet alleles) { + switch ((EnumTreeChromosome) chromosome) { + case FERTILITY: { + for (final ForestryAllele.Saplings a : ForestryAllele.Saplings.values()) { + alleles.add(a.getAllele()); + } + break; + } + case GIRTH: { + for (final ForestryAllele.Int a2 : ForestryAllele.Int.values()) { + alleles.add(a2.getAllele()); + } + break; + } + case HEIGHT: { + for (final ForestryAllele.TreeHeight a3 : ForestryAllele.TreeHeight.values()) { + alleles.add(a3.getAllele()); + } + break; + } + case MATURATION: { + for (final ForestryAllele.Maturation a4 : ForestryAllele.Maturation.values()) { + alleles.add(a4.getAllele()); + } + break; + } + case SAPPINESS: { + for (final ForestryAllele.Sappiness a5 : ForestryAllele.Sappiness.values()) { + alleles.add(a5.getAllele()); + } + break; + } + case TERRITORY: { + for (final ForestryAllele.Territory a6 : ForestryAllele.Territory.values()) { + alleles.add(a6.getAllele()); + } + break; + } + case YIELD: { + for (final ForestryAllele.Yield a7 : ForestryAllele.Yield.values()) { + alleles.add(a7.getAllele()); + } + break; + } + case FIREPROOF: { + for (final ForestryAllele.Bool a8 : ForestryAllele.Bool.values()) { + alleles.add(a8.getAllele()); + } + break; + } + } + } +} diff --git a/src/main/java/binnie/core/genetics/VirtualBeeHousing.java b/src/main/java/binnie/core/genetics/VirtualBeeHousing.java new file mode 100644 index 00000000..3fa332fb --- /dev/null +++ b/src/main/java/binnie/core/genetics/VirtualBeeHousing.java @@ -0,0 +1,181 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.genetics; + +import java.util.ArrayList; + +import com.mojang.authlib.GameProfile; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Vec3; +import net.minecraft.world.biome.BiomeGenBase; + +import forestry.api.apiculture.IBee; +import forestry.api.apiculture.IBeeGenome; +import forestry.api.apiculture.IBeeHousing; +import forestry.api.apiculture.IBeeHousingInventory; +import forestry.api.apiculture.IBeeListener; +import forestry.api.apiculture.IBeeModifier; +import forestry.api.apiculture.IBeekeepingLogic; +import forestry.api.core.IErrorLogic; +import forestry.api.genetics.IIndividual; +import forestry.apiculture.InventoryBeeHousing; +import forestry.core.access.FakeAccessHandler; + +public class VirtualBeeHousing extends VirtualHousing implements IBeeHousing, IBeeModifier +{ + ArrayList beeModifier = new ArrayList(); + private InventoryBeeHousing beeInventory; + + public VirtualBeeHousing(final EntityPlayer player) { + super(player); + beeModifier.add(this); + beeInventory = new InventoryBeeHousing(12, FakeAccessHandler.getInstance()); + + } + + @Override + public float getTerritoryModifier(final IBeeGenome genome, final float currentModifier) { + return 1.0f; + } + + @Override + public float getMutationModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return 1.0f; + } + + @Override + public float getLifespanModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return 1.0f; + } + + @Override + public float getProductionModifier(final IBeeGenome genome, final float currentModifier) { + return 1.0f; + } + + public ItemStack getQueen() { + return null; + } + + public ItemStack getDrone() { + return null; + } + + public void setQueen(final ItemStack itemstack) { + } + + public void setDrone(final ItemStack itemstack) { + } + + public boolean canBreed() { + return true; + } + + @Override + public boolean addProduct(final ItemStack product, final boolean all) { + return false; + } + + public void wearOutEquipment(final int amount) { + } + + public void onQueenChange(final ItemStack queen) { + } + + @Override + public boolean isSealed() { + return false; + } + + @Override + public boolean isSelfLighted() { + return false; + } + + @Override + public boolean isSunlightSimulated() { + return false; + } + + @Override + public boolean isHellish() { + return this.getBiomeId() == BiomeGenBase.hell.biomeID; + } + + @Override + public float getFloweringModifier(final IBeeGenome genome, final float currentModifier) { + return 1.0f; + } + + public void onQueenDeath(final IBee queen) { + } + + public void onPostQueenDeath(final IBee queen) { + } + + public boolean onPollenRetrieved(final IBee queen, final IIndividual pollen, final boolean isHandled) { + return false; + } + + public boolean onEggLaid(final IBee queen) { + return false; + } + + @Override + public float getGeneticDecay(final IBeeGenome genome, final float currentModifier) { + return 1.0f; + } + + @Override + public IErrorLogic getErrorLogic() { + return null; + } + + // TODO ?? + @Override + public boolean canBlockSeeTheSky() { + return true; + } + + // TODO ?? + @Override + public Vec3 getBeeFXCoordinates() { + return Vec3.createVectorHelper(0, -100000, 0); + } + + @Override + public IBeeHousingInventory getBeeInventory() { + return beeInventory; + } + + // TODO ?? + @Override + public Iterable getBeeListeners() { + return null; + } + + @Override + public Iterable getBeeModifiers() { + return beeModifier; + } + + @Override + public IBeekeepingLogic getBeekeepingLogic() { + return null; + } + + @Override + public int getBlockLightValue() { + return 0; + } + + @Override + public GameProfile getOwner() { + return getOwnerName(); + } + +} diff --git a/src/main/java/binnie/core/genetics/VirtualHousing.java b/src/main/java/binnie/core/genetics/VirtualHousing.java new file mode 100644 index 00000000..67f3b26e --- /dev/null +++ b/src/main/java/binnie/core/genetics/VirtualHousing.java @@ -0,0 +1,100 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.genetics; + +import java.util.Set; + +import forestry.api.core.IErrorState; + +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.world.biome.BiomeGenBase; + +import com.mojang.authlib.GameProfile; + +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import forestry.api.core.EnumHumidity; +import forestry.api.core.EnumTemperature; + +import net.minecraft.entity.player.EntityPlayer; + +import forestry.api.genetics.IHousing; + +class VirtualHousing implements IHousing +{ + private EntityPlayer player; + + public VirtualHousing(final EntityPlayer player) { + this.player = player; + } + + public int getXCoord() { + return (int) this.player.posX; + } + + public int getYCoord() { + return (int) this.player.posY; + } + + public int getZCoord() { + return (int) this.player.posZ; + } + + public int getBiomeId() { + return this.player.worldObj.getBiomeGenForCoords(this.getXCoord(), this.getYCoord()).biomeID; + } + + public EnumTemperature getTemperature() { + return EnumTemperature.getFromValue(this.getBiome().temperature); + } + + public EnumHumidity getHumidity() { + return EnumHumidity.getFromValue(this.getBiome().rainfall); + } + + public World getWorld() { + return this.player.worldObj; + } + + public void setErrorState(final int state) { + } + + public int getErrorOrdinal() { + return 0; + } + + public boolean addProduct(final ItemStack product, final boolean all) { + return false; + } + + public GameProfile getOwnerName() { + return this.player.getGameProfile(); + } + + public BiomeGenBase getBiome() { + return this.player.worldObj.getBiomeGenForCoords(this.getXCoord(), this.getZCoord()); + } + + // public EnumErrorCode getErrorState() { + // return null; + // } + + public void setErrorState(final IErrorState state) { + } + + public boolean setErrorCondition(final boolean condition, final IErrorState errorState) { + return false; + } + + public Set getErrorStates() { + return null; + } + + @Override + public ChunkCoordinates getCoordinates() { + return new ChunkCoordinates(getXCoord(), getYCoord(), getZCoord()); + } +} diff --git a/src/main/java/binnie/core/genetics/VirtualMothHousing.java b/src/main/java/binnie/core/genetics/VirtualMothHousing.java new file mode 100644 index 00000000..7747f125 --- /dev/null +++ b/src/main/java/binnie/core/genetics/VirtualMothHousing.java @@ -0,0 +1,36 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.genetics; + +import forestry.api.genetics.IIndividual; +import forestry.api.lepidopterology.IButterfly; +import net.minecraft.entity.player.EntityPlayer; +import forestry.api.lepidopterology.IButterflyNursery; + +public class VirtualMothHousing extends VirtualHousing implements IButterflyNursery +{ + public VirtualMothHousing(final EntityPlayer player) { + super(player); + } + + @Override + public IButterfly getCaterpillar() { + return null; + } + + @Override + public IIndividual getNanny() { + return null; + } + + @Override + public void setCaterpillar(final IButterfly butterfly) { + } + + @Override + public boolean canNurse(final IButterfly butterfly) { + return false; + } +} diff --git a/src/main/java/binnie/core/gui/BinnieCoreGUI.java b/src/main/java/binnie/core/gui/BinnieCoreGUI.java new file mode 100644 index 00000000..df61e45d --- /dev/null +++ b/src/main/java/binnie/core/gui/BinnieCoreGUI.java @@ -0,0 +1,55 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.gui; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import binnie.craftgui.binniecore.WindowGenesis; +import binnie.craftgui.binniecore.WindowFieldKit; +import binnie.core.machines.storage.WindowCompartment; +import binnie.craftgui.minecraft.Window; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; + +public enum BinnieCoreGUI implements IBinnieGUID +{ + Compartment, + FieldKit, + Genesis; + + public Window getWindow(final EntityPlayer player, final IInventory object, final Side side) throws Exception { + switch (this) { + case Compartment: { + return new WindowCompartment(player, object, side); + } + case FieldKit: { + return new WindowFieldKit(player, null, side); + } + case Genesis: { + return new WindowGenesis(player, null, side); + } + default: { + return null; + } + } + } + + @Override + public Window getWindow(final EntityPlayer player, final World world, final int x, final int y, final int z, final Side side) { + Window window = null; + final TileEntity tileEntity = world.getTileEntity(x, y, z); + IInventory object = null; + if (tileEntity instanceof IInventory) { + object = (IInventory) tileEntity; + } + try { + window = this.getWindow(player, object, side); + } catch (Exception e) { + e.printStackTrace(); + } + return window; + } +} diff --git a/src/main/java/binnie/core/gui/BinnieGUIHandler.java b/src/main/java/binnie/core/gui/BinnieGUIHandler.java new file mode 100644 index 00000000..e1a63b9d --- /dev/null +++ b/src/main/java/binnie/core/gui/BinnieGUIHandler.java @@ -0,0 +1,53 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.gui; + +import binnie.core.BinnieCore; +import binnie.craftgui.minecraft.Window; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.world.World; +import net.minecraft.entity.player.EntityPlayer; +import binnie.core.AbstractMod; +import cpw.mods.fml.common.network.IGuiHandler; + +public final class BinnieGUIHandler implements IGuiHandler +{ + private AbstractMod mod; + + public BinnieGUIHandler(final AbstractMod mod) { + this.mod = mod; + } + + @Override + public final Object getServerGuiElement(final int id, final EntityPlayer player, final World world, final int x, final int y, final int z) { + final Window window = this.getWindow(id, player, world, x, y, z, Side.SERVER); + if (window == null) { + return null; + } + window.initialiseServer(); + return window.getContainer(); + } + + @Override + public final Object getClientGuiElement(final int id, final EntityPlayer player, final World world, final int x, final int y, final int z) { + if (BinnieCore.proxy.isSimulating(world)) { + return this.getServerGuiElement(id, player, world, x, y, z); + } + final Window window = this.getWindow(id, player, world, x, y, z, Side.CLIENT); + if (window == null) { + return null; + } + return window.getGui(); + } + + public Window getWindow(final int id, final EntityPlayer player, final World world, final int x, final int y, final int z, final Side side) { + for (final IBinnieGUID guid : this.mod.getGUIDs()) { + if (guid.ordinal() == id) { + return guid.getWindow(player, world, x, y, z, side); + } + } + return null; + } +} diff --git a/src/main/java/binnie/core/gui/IBinnieGUID.java b/src/main/java/binnie/core/gui/IBinnieGUID.java new file mode 100644 index 00000000..f66b1caa --- /dev/null +++ b/src/main/java/binnie/core/gui/IBinnieGUID.java @@ -0,0 +1,16 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.gui; + +import binnie.craftgui.minecraft.Window; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.world.World; +import net.minecraft.entity.player.EntityPlayer; +import binnie.core.network.IOrdinaled; + +public interface IBinnieGUID extends IOrdinaled +{ + Window getWindow(final EntityPlayer p0, final World p1, final int p2, final int p3, final int p4, final Side p5); +} diff --git a/src/main/java/binnie/core/item/IItemEnum.java b/src/main/java/binnie/core/item/IItemEnum.java new file mode 100644 index 00000000..b6ba3682 --- /dev/null +++ b/src/main/java/binnie/core/item/IItemEnum.java @@ -0,0 +1,18 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.item; + +import net.minecraft.item.ItemStack; + +public interface IItemEnum +{ + boolean isActive(); + + String getName(final ItemStack p0); + + int ordinal(); + + ItemStack get(final int p0); +} diff --git a/src/main/java/binnie/core/item/IItemMisc.java b/src/main/java/binnie/core/item/IItemMisc.java new file mode 100644 index 00000000..618c38c5 --- /dev/null +++ b/src/main/java/binnie/core/item/IItemMisc.java @@ -0,0 +1,22 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.item; + +import java.util.List; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraft.item.ItemStack; + +public interface IItemMisc extends IItemEnum +{ + IIcon getIcon(final ItemStack p0); + + @SideOnly(Side.CLIENT) + void registerIcons(final IIconRegister p0); + + void addInformation(final List p0); +} diff --git a/src/main/java/binnie/core/item/ItemFieldKit.java b/src/main/java/binnie/core/item/ItemFieldKit.java new file mode 100644 index 00000000..575b93f3 --- /dev/null +++ b/src/main/java/binnie/core/item/ItemFieldKit.java @@ -0,0 +1,84 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.item; + +import java.util.List; +import binnie.core.gui.BinnieCoreGUI; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import net.minecraft.item.ItemStack; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.core.BinnieCore; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.util.IIcon; +import net.minecraft.item.Item; + +public class ItemFieldKit extends Item +{ + private IIcon fieldKit0; + private IIcon fieldKit1; + private IIcon fieldKit2; + private IIcon fieldKit3; + + public ItemFieldKit() { + this.setUnlocalizedName("fieldKit"); + this.setCreativeTab(CreativeTabs.tabTools); + this.setMaxStackSize(1); + this.setMaxDamage(64); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.fieldKit0 = BinnieCore.proxy.getIcon(register, "fieldKit"); + this.fieldKit1 = BinnieCore.proxy.getIcon(register, "fieldKit1"); + this.fieldKit2 = BinnieCore.proxy.getIcon(register, "fieldKit2"); + this.fieldKit3 = BinnieCore.proxy.getIcon(register, "fieldKit3"); + this.itemIcon = this.fieldKit0; + } + + @Override + public IIcon getIcon(final ItemStack stack, final int pass) { + final int damage = stack.getItemDamage(); + if (damage < 24) { + return this.fieldKit3; + } + if (damage < 48) { + return this.fieldKit2; + } + if (damage < 64) { + return this.fieldKit1; + } + return this.fieldKit0; + } + + @Override + public ItemStack onItemRightClick(final ItemStack itemstack, final World world, final EntityPlayer player) { + if (!player.isSneaking()) { + BinnieCore.proxy.openGui(BinnieCoreGUI.FieldKit, player, (int) player.posX, (int) player.posY, (int) player.posZ); + } + return itemstack; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(final ItemStack p_77624_1_, final EntityPlayer p_77624_2_, final List p_77624_3_, final boolean p_77624_4_) { + final int i = this.getMaxDamage() - p_77624_1_.getItemDamage(); + if (i == 0) { + p_77624_3_.add("No paper"); + } + else { + p_77624_3_.add("" + i + " sheet" + ((i > 1) ? "s" : "") + " of paper"); + } + super.addInformation(p_77624_1_, p_77624_2_, p_77624_3_, p_77624_4_); + } + + @Override + public String getItemStackDisplayName(final ItemStack p_77653_1_) { + return "Field Kit"; + } +} diff --git a/src/main/java/binnie/core/item/ItemGenesis.java b/src/main/java/binnie/core/item/ItemGenesis.java new file mode 100644 index 00000000..dd595872 --- /dev/null +++ b/src/main/java/binnie/core/item/ItemGenesis.java @@ -0,0 +1,42 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.item; + +import binnie.core.gui.BinnieCoreGUI; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import net.minecraft.item.ItemStack; +import forestry.api.core.Tabs; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.core.BinnieCore; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.Item; + +public class ItemGenesis extends Item +{ + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.itemIcon = BinnieCore.proxy.getIcon(register, "genesis"); + } + + public ItemGenesis() { + this.setCreativeTab(Tabs.tabApiculture); + this.setUnlocalizedName("genesis"); + this.setMaxStackSize(1); + } + + @Override + public ItemStack onItemRightClick(final ItemStack itemstack, final World world, final EntityPlayer player) { + BinnieCore.proxy.openGui(BinnieCoreGUI.Genesis, player, (int) player.posX, (int) player.posY, (int) player.posZ); + return itemstack; + } + + @Override + public String getItemStackDisplayName(final ItemStack i) { + return "Genesis"; + } +} diff --git a/src/main/java/binnie/core/item/ItemMisc.java b/src/main/java/binnie/core/item/ItemMisc.java new file mode 100644 index 00000000..07b099e4 --- /dev/null +++ b/src/main/java/binnie/core/item/ItemMisc.java @@ -0,0 +1,81 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.item; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import java.util.List; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; + +public class ItemMisc extends Item +{ + private IItemMisc[] items; + + protected ItemMisc(final CreativeTabs tab, final IItemMisc[] items2) { + this.setCreativeTab(tab); + this.setHasSubtypes(true); + this.setUnlocalizedName("misc"); + this.items = items2; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(final Item par1, final CreativeTabs par2CreativeTabs, final List par3List) { + for (final IItemMisc item : this.items) { + if (item.isActive()) { + par3List.add(this.getStack(item, 1)); + } + } + } + + private IItemMisc getItem(final int damage) { + return (damage >= this.items.length) ? this.items[0] : this.items[damage]; + } + + public ItemStack getStack(final IItemMisc type, final int size) { + return new ItemStack(this, size, type.ordinal()); + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(final ItemStack par1ItemStack, final EntityPlayer par2EntityPlayer, final List par3List, final boolean par4) { + super.addInformation(par1ItemStack, par2EntityPlayer, par3List, par4); + final IItemMisc item = this.getItem(par1ItemStack.getItemDamage()); + if (item != null) { + item.addInformation(par3List); + } + } + + @Override + public String getItemStackDisplayName(final ItemStack stack) { + final IItemMisc item = this.getItem(stack.getItemDamage()); + return (item != null) ? item.getName(stack) : "null"; + } + + @Override + public IIcon getIcon(final ItemStack stack, final int pass) { + final IItemMisc item = this.getItem(stack.getItemDamage()); + return (item != null) ? item.getIcon(stack) : null; + } + + @Override + public IIcon getIconFromDamage(final int damage) { + final IItemMisc item = this.getItem(damage); + return (item != null) ? item.getIcon(null) : null; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + for (final IItemMisc item : this.items) { + item.registerIcons(register); + } + } +} diff --git a/src/main/java/binnie/core/item/ManagerItem.java b/src/main/java/binnie/core/item/ManagerItem.java new file mode 100644 index 00000000..e53193d3 --- /dev/null +++ b/src/main/java/binnie/core/item/ManagerItem.java @@ -0,0 +1,14 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.item; + +import net.minecraft.creativetab.CreativeTabs; + +public class ManagerItem +{ + public ItemMisc registerMiscItems(final IItemMisc[] items, final CreativeTabs tab) { + return new ItemMisc(tab, items); + } +} diff --git a/src/main/java/binnie/core/item/ModuleItems.java b/src/main/java/binnie/core/item/ModuleItems.java new file mode 100644 index 00000000..7d223b25 --- /dev/null +++ b/src/main/java/binnie/core/item/ModuleItems.java @@ -0,0 +1,70 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.item; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import binnie.botany.api.IFlower; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.entity.EntityLivingBase; +import binnie.core.network.packet.MessageNBT; +import binnie.botany.network.PacketID; +import binnie.botany.Botany; +import net.minecraft.nbt.NBTTagCompound; +import binnie.botany.flower.TileEntityFlower; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.init.Items; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import binnie.core.BinnieCore; +import binnie.core.IInitializable; + +public class ModuleItems implements IInitializable +{ + @Override + public void preInit() { + BinnieCore.fieldKit = new ItemFieldKit(); + BinnieCore.genesis = new ItemGenesis(); + } + + @Override + public void init() { + } + + @Override + public void postInit() { + GameRegistry.addRecipe(new ItemStack(BinnieCore.fieldKit, 1, 63), new Object[] { "g ", " is", " pi", 'g', Blocks.glass_pane, 'i', Items.iron_ingot, 'p', Items.paper, 's', new ItemStack(Items.dye, 1) }); + } + + @SubscribeEvent + public void onUseFieldKit(final PlayerInteractEvent event) { + if (!BinnieCore.isBotanyActive()) { + return; + } + if (event.action != PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) { + return; + } + if (event.entityPlayer != null && event.entityPlayer.getHeldItem() != null && event.entityPlayer.getHeldItem().getItem() == BinnieCore.fieldKit && event.entityPlayer.isSneaking()) { + final TileEntity tile = event.world.getTileEntity(event.x, event.y, event.z); + if (tile instanceof TileEntityFlower) { + final TileEntityFlower tileFlower = (TileEntityFlower) tile; + final IFlower flower = tileFlower.getFlower(); + if (flower != null) { + final NBTTagCompound info = new NBTTagCompound(); + info.setString("Species", flower.getGenome().getPrimary().getUID()); + info.setString("Species2", flower.getGenome().getSecondary().getUID()); + info.setFloat("Age", flower.getAge() / flower.getGenome().getLifespan()); + info.setShort("Colour", (short) flower.getGenome().getPrimaryColor().getID()); + info.setShort("Colour2", (short) flower.getGenome().getSecondaryColor().getID()); + info.setBoolean("Wilting", flower.isWilted()); + info.setBoolean("Flowered", flower.hasFlowered()); + Botany.proxy.sendToPlayer(new MessageNBT(PacketID.Encylopedia.ordinal(), info), event.entityPlayer); + event.entityPlayer.getHeldItem().damageItem(1, event.entityPlayer); + } + } + } + } +} diff --git a/src/main/java/binnie/core/language/ManagerLanguage.java b/src/main/java/binnie/core/language/ManagerLanguage.java new file mode 100644 index 00000000..755cf695 --- /dev/null +++ b/src/main/java/binnie/core/language/ManagerLanguage.java @@ -0,0 +1,58 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.language; + +import net.minecraft.util.StatCollector; +import binnie.core.AbstractMod; +import java.util.HashMap; +import java.util.Map; +import binnie.core.ManagerBase; + +public class ManagerLanguage extends ManagerBase +{ + private Map objNames; + + public ManagerLanguage() { + this.objNames = new HashMap(); + } + + public void addObjectName(final Object obj, final String name) { + this.objNames.put(obj, name); + } + + public String unlocalised(final AbstractMod mod, final String id) { + return mod.getModID() + "." + id; + } + + public String localise(final Object key) { + final String loc = StatCollector.translateToLocal(key.toString()); + if (loc.equals(key.toString())) { + return this.objNames.containsKey(key) ? this.localise(this.objNames.get(key)) : key.toString(); + } + return loc; + } + + public String localise(final AbstractMod mod, final String id) { + return this.localise(this.unlocalised(mod, id)); + } + + public String localiseOrBlank(final AbstractMod mod, final String id) { + return this.localiseOrBlank(this.unlocalised(mod, id)); + } + + public String localise(final AbstractMod mod, final String id, final Object... objs) { + return String.format(this.localise(mod, id), objs); + } + + public String localiseOrBlank(final Object key) { + final String trans = this.localise(key); + return trans.equals(key) ? "" : trans; + } + + public boolean canLocalise(final Object key) { + final String trans = this.localise(key); + return !trans.equals(key); + } +} diff --git a/src/main/java/binnie/core/liquid/BinnieFluid.java b/src/main/java/binnie/core/liquid/BinnieFluid.java new file mode 100644 index 00000000..cba22f09 --- /dev/null +++ b/src/main/java/binnie/core/liquid/BinnieFluid.java @@ -0,0 +1,33 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.liquid; + +import net.minecraftforge.fluids.Fluid; + +class BinnieFluid extends Fluid +{ + private final String name; + final IFluidType fluidType; + + @Override + public String getLocalizedName() { + return this.name; + } + + public BinnieFluid(final IFluidType fluid) { + super(fluid.getIdentifier()); + this.fluidType = fluid; + this.name = fluid.getName(); + } + + @Override + public int getColor() { + return this.fluidType.getColour(); + } + + public IFluidType getType() { + return this.fluidType; + } +} diff --git a/src/main/java/binnie/core/liquid/FluidContainer.java b/src/main/java/binnie/core/liquid/FluidContainer.java new file mode 100644 index 00000000..823b5187 --- /dev/null +++ b/src/main/java/binnie/core/liquid/FluidContainer.java @@ -0,0 +1,95 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.liquid; + +import net.minecraftforge.fluids.FluidContainerRegistry; +import binnie.genetics.item.GeneticsItems; +import binnie.core.Mods; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.core.BinnieCore; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; + +public enum FluidContainer +{ + Bucket, + Capsule, + Refractory, + Can, + Glass, + Cylinder; + + IIcon bottle; + IIcon contents; + ItemFluidContainer item; + + public int getMaxStackSize() { + return (this == FluidContainer.Bucket) ? 1 : 16; + } + + @SideOnly(Side.CLIENT) + public void updateIcons(final IIconRegister register) { + this.bottle = BinnieCore.proxy.getIcon(register, (this == FluidContainer.Cylinder) ? "binniecore" : "forestry", "liquids/" + this.toString().toLowerCase() + ".bottle"); + this.contents = BinnieCore.proxy.getIcon(register, (this == FluidContainer.Cylinder) ? "binniecore" : "forestry", "liquids/" + this.toString().toLowerCase() + ".contents"); + } + + public IIcon getBottleIcon() { + return this.bottle; + } + + public IIcon getContentsIcon() { + return this.contents; + } + + public String getName() { + return BinnieCore.proxy.localise("item.container." + this.name().toLowerCase()); + } + + public boolean isActive() { + return this.getEmpty() != null; + } + + public ItemStack getEmpty() { + switch (this) { + case Bucket: { + return new ItemStack(Items.bucket, 1, 0); + } + case Can: { + return Mods.Forestry.stack("canEmpty"); + } + case Capsule: { + return Mods.Forestry.stack("waxCapsule"); + } + case Glass: { + return new ItemStack(Items.glass_bottle, 1, 0); + } + case Refractory: { + return Mods.Forestry.stack("refractoryEmpty"); + } + case Cylinder: { + return GeneticsItems.Cylinder.get(1); + } + default: { + return null; + } + } + } + + public void registerContainerData(final IFluidType fluid) { + if (!this.isActive()) { + return; + } + final ItemStack filled = this.item.getContainer(fluid); + final ItemStack empty = this.getEmpty(); + if (filled == null || empty == null || fluid.get(1000) == null) { + return; + } + final FluidContainerRegistry.FluidContainerData data = new FluidContainerRegistry.FluidContainerData(fluid.get(1000), filled, empty); + FluidContainerRegistry.registerFluidContainer(data); + } +} diff --git a/src/main/java/binnie/core/liquid/IFluidType.java b/src/main/java/binnie/core/liquid/IFluidType.java new file mode 100644 index 00000000..0972efe3 --- /dev/null +++ b/src/main/java/binnie/core/liquid/IFluidType.java @@ -0,0 +1,32 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.liquid; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; + +public interface IFluidType +{ + IIcon getIcon(); + + void registerIcon(final IIconRegister p0); + + String getName(); + + String getIdentifier(); + + FluidStack get(final int p0); + + int getColour(); + + int getContainerColour(); + + int getTransparency(); + + boolean canPlaceIn(final FluidContainer p0); + + boolean showInCreative(final FluidContainer p0); +} diff --git a/src/main/java/binnie/core/liquid/ILiquidType.java b/src/main/java/binnie/core/liquid/ILiquidType.java new file mode 100644 index 00000000..9ca1556b --- /dev/null +++ b/src/main/java/binnie/core/liquid/ILiquidType.java @@ -0,0 +1,10 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.liquid; + +public interface ILiquidType extends IFluidType +{ + int ordinal(); +} diff --git a/src/main/java/binnie/core/liquid/ItemFluidContainer.java b/src/main/java/binnie/core/liquid/ItemFluidContainer.java new file mode 100644 index 00000000..1770377b --- /dev/null +++ b/src/main/java/binnie/core/liquid/ItemFluidContainer.java @@ -0,0 +1,188 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.liquid; + +import java.util.HashMap; +import net.minecraft.item.EnumAction; +import binnie.extratrees.alcohol.drink.IDrinkLiquid; +import binnie.extratrees.alcohol.AlcoholEffect; +import binnie.extratrees.alcohol.drink.DrinkManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import net.minecraft.util.IIcon; +import java.util.List; +import net.minecraft.item.Item; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.Binnie; +import net.minecraftforge.fluids.FluidStack; +import net.minecraft.item.ItemStack; +import net.minecraft.creativetab.CreativeTabs; +import java.util.Map; +import net.minecraft.item.ItemFood; + +public class ItemFluidContainer extends ItemFood +{ + private FluidContainer container; + public static int LiquidExtraBee; + public static int LiquidExtraTree; + public static int LiquidJuice; + public static int LiquidAlcohol; + public static int LiquidSpirit; + public static int LiquidLiqueuer; + public static int LiquidGenetics; + private static Map idToFluid; + private static Map fluidToID; + + public static void registerFluid(final IFluidType fluid, final int id) { + ItemFluidContainer.idToFluid.put(id, fluid.getIdentifier().toLowerCase()); + ItemFluidContainer.fluidToID.put(fluid.getIdentifier().toLowerCase(), id); + } + + public ItemFluidContainer(final FluidContainer container) { + super(0, false); + this.container = container; + container.item = this; + this.maxStackSize = container.getMaxStackSize(); + this.setHasSubtypes(true); + this.setUnlocalizedName("container" + container.name()); + this.setCreativeTab(CreativeTabs.tabMaterials); + } + + private FluidStack getLiquid(final ItemStack stack) { + final String liquid = ItemFluidContainer.idToFluid.get(stack.getItemDamage()); + return (liquid == null) ? null : Binnie.Liquid.getLiquidStack(liquid, 1000); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.container.updateIcons(register); + } + + @Override + public String getItemStackDisplayName(final ItemStack itemstack) { + if (itemstack == null) { + return "???"; + } + final FluidStack fluid = this.getLiquid(itemstack); + if (fluid == null) { + return "Missing Fluid"; + } + return fluid.getFluid().getLocalizedName(fluid) + " " + this.container.getName(); + } + + @Override + public void getSubItems(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + for (final IFluidType liquid : Binnie.Liquid.fluids.values()) { + if (!liquid.canPlaceIn(this.container)) { + continue; + } + if (!liquid.showInCreative(this.container)) { + continue; + } + itemList.add(this.getContainer(liquid)); + } + } + + public ItemStack getContainer(final IFluidType liquid) { + final int id = ItemFluidContainer.fluidToID.get(liquid.getIdentifier().toLowerCase()); + final ItemStack itemstack = new ItemStack(this, 1, id); + return itemstack; + } + + @Override + public IIcon getIcon(final ItemStack itemstack, final int j) { + if (j > 0) { + return this.container.getBottleIcon(); + } + return this.container.getContentsIcon(); + } + + @Override + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(final ItemStack item, final int pass) { + final FluidStack fluid = this.getLiquid(item); + if (fluid == null) { + return 16777215; + } + if (pass == 0 && fluid.getFluid() instanceof BinnieFluid) { + return ((BinnieFluid) fluid.getFluid()).fluidType.getContainerColour(); + } + return super.getColorFromItemStack(item, pass); + } + + @Override + public boolean requiresMultipleRenderPasses() { + return true; + } + + @Override + public ItemStack onEaten(final ItemStack stack, final World world, final EntityPlayer player) { + player.getFoodStats().func_151686_a(this, stack); + world.playSoundAtEntity(player, "random.burp", 0.5f, world.rand.nextFloat() * 0.1f + 0.9f); + this.onFoodEaten(stack, world, player); + return this.container.getEmpty(); + } + + @Override + protected void onFoodEaten(final ItemStack stack, final World world, final EntityPlayer player) { + if (!world.isRemote) { + final FluidStack fluid = this.getLiquid(stack); + final IDrinkLiquid liquid = DrinkManager.getLiquid(fluid); + if (liquid != null) { + AlcoholEffect.makeDrunk(player, liquid.getABV() * fluid.amount); + } + } + } + + @Override + public int getMaxItemUseDuration(final ItemStack stack) { + return 32; + } + + @Override + public EnumAction getItemUseAction(final ItemStack stack) { + return this.isDrinkable(stack) ? EnumAction.drink : EnumAction.none; + } + + @Override + public ItemStack onItemRightClick(final ItemStack stack, final World world, final EntityPlayer player) { + if (this.isDrinkable(stack)) { + player.setItemInUse(stack, this.getMaxItemUseDuration(stack)); + } + return stack; + } + + @Override + public int func_150905_g(final ItemStack p_150905_1_) { + return 0; + } + + @Override + public float func_150906_h(final ItemStack p_150906_1_) { + return 0.0f; + } + + private boolean isDrinkable(final ItemStack stack) { + final FluidStack fluid = this.getLiquid(stack); + final IDrinkLiquid liquid = DrinkManager.getLiquid(fluid); + return liquid != null && liquid.isConsumable(); + } + + static { + ItemFluidContainer.LiquidExtraBee = 64; + ItemFluidContainer.LiquidExtraTree = 128; + ItemFluidContainer.LiquidJuice = 256; + ItemFluidContainer.LiquidAlcohol = 384; + ItemFluidContainer.LiquidSpirit = 512; + ItemFluidContainer.LiquidLiqueuer = 640; + ItemFluidContainer.LiquidGenetics = 768; + ItemFluidContainer.idToFluid = new HashMap(); + ItemFluidContainer.fluidToID = new HashMap(); + } +} diff --git a/src/main/java/binnie/core/liquid/ManagerLiquid.java b/src/main/java/binnie/core/liquid/ManagerLiquid.java new file mode 100644 index 00000000..846a117b --- /dev/null +++ b/src/main/java/binnie/core/liquid/ManagerLiquid.java @@ -0,0 +1,81 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.liquid; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.Map; +import binnie.core.ManagerBase; + +public class ManagerLiquid extends ManagerBase +{ + Map fluids; + + public ManagerLiquid() { + this.fluids = new LinkedHashMap(); + } + + public Collection getFluidTypes() { + return this.fluids.values(); + } + + public void createLiquids(final IFluidType[] liquids, int startID) { + for (final IFluidType liquid : liquids) { + final BinnieFluid fluid = this.createLiquid(liquid, startID++); + if (fluid == null) { + throw new RuntimeException("Liquid registered incorrectly - " + liquid.getIdentifier()); + } + } + } + + public BinnieFluid createLiquid(final IFluidType fluid, final int id) { + this.fluids.put(fluid.getIdentifier().toLowerCase(), fluid); + final BinnieFluid bFluid = new BinnieFluid(fluid); + FluidRegistry.registerFluid(bFluid); + ItemFluidContainer.registerFluid(fluid, id); + return bFluid; + } + + public FluidStack getLiquidStack(final String name, final int amount) { + return FluidRegistry.getFluidStack(name.toLowerCase(), amount); + } + + @SideOnly(Side.CLIENT) + public void reloadIcons(final IIconRegister register) { + for (final IFluidType type : this.fluids.values()) { + final Fluid fluid = this.getLiquidStack(type.getIdentifier(), 1).getFluid(); + type.registerIcon(register); + if (fluid == null) { + throw new RuntimeException("[Binnie] Liquid not registered properly - " + type.getIdentifier()); + } + fluid.setIcons(type.getIcon()); + } + } + + @Override + public void init() { + } + + @Override + public void postInit() { + for (final IFluidType fluid : this.fluids.values()) { + for (final FluidContainer container : FluidContainer.values()) { + if (container.isActive() && fluid.canPlaceIn(container)) { + container.registerContainerData(fluid); + } + } + } + } + + public IFluidType getFluidType(final String liquid) { + return this.fluids.get(liquid.toLowerCase()); + } +} diff --git a/src/main/java/binnie/core/machines/BlockMachine.java b/src/main/java/binnie/core/machines/BlockMachine.java new file mode 100644 index 00000000..4eabf6be --- /dev/null +++ b/src/main/java/binnie/core/machines/BlockMachine.java @@ -0,0 +1,180 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines; + +import java.util.ArrayList; +import binnie.core.machines.component.IRender; +import java.util.Random; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.init.Blocks; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.entity.EntityLivingBase; +import binnie.core.BinnieCore; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import binnie.Binnie; +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import java.util.List; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.block.material.Material; +import net.minecraft.block.BlockContainer; + +class BlockMachine extends BlockContainer implements IBlockMachine +{ + private MachineGroup group; + + public BlockMachine(final MachineGroup group, final String blockName) { + super(Material.iron); + this.group = group; + this.setHardness(1.5f); + this.setBlockName(blockName); + } + + @Override + public void getSubBlocks(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + for (final MachinePackage pack : this.group.getPackages()) { + if (pack.isActive()) { + itemList.add(new ItemStack(this, 1, pack.getMetadata())); + } + } + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return !this.group.customRenderer; + } + + @Override + public int getRenderType() { + return Binnie.Machine.getMachineRenderID(); + } + + @Override + public TileEntity createTileEntity(final World world, final int metadata) { + if (this.group.getPackage(metadata) == null) { + return null; + } + return this.group.getPackage(metadata).createTileEntity(); + } + + @Override + public MachinePackage getPackage(final int meta) { + return this.group.getPackage(meta); + } + + @Override + public String getMachineName(final int meta) { + return (this.getPackage(meta) == null) ? "Unnamed Machine" : this.getPackage(meta).getDisplayName(); + } + + @Override + public int damageDropped(final int par1) { + return par1; + } + + @Override + public TileEntity createNewTileEntity(final World var1, final int meta) { + return this.createTileEntity(var1, meta); + } + + @Override + public boolean onBlockActivated(final World world, final int x, final int y, final int z, final EntityPlayer player, final int par6, final float par7, final float par8, final float par9) { + if (!BinnieCore.proxy.isSimulating(world)) { + return true; + } + if (player.isSneaking()) { + return true; + } + final TileEntity entity = world.getTileEntity(x, y, z); + if (entity instanceof TileEntityMachine) { + ((TileEntityMachine) entity).getMachine().onRightClick(world, player, x, y, z); + } + return true; + } + + @Override + public void onBlockPlacedBy(final World world, final int i, final int j, final int k, final EntityLivingBase entityliving, final ItemStack stack) { + super.onBlockPlacedBy(world, i, j, k, entityliving, stack); + if (!BinnieCore.proxy.isSimulating(world)) { + return; + } + final IMachine machine = Machine.getMachine(world.getTileEntity(i, j, k)); + if (machine == null) { + return; + } + if (entityliving instanceof EntityPlayer) { + machine.setOwner(((EntityPlayer) entityliving).getGameProfile()); + } + } + + @Override + public IIcon getIcon(final IBlockAccess world, final int x, final int y, final int z, final int side) { + final TileEntity entity = world.getTileEntity(x, y, z); + if (entity instanceof TileEntityMachine && ((TileEntityMachine) entity).getMachine().hasInterface(IMachineTexturedFaces.class)) { + return ((TileEntityMachine) entity).getMachine().getInterface(IMachineTexturedFaces.class).getIcon(side); + } + return Blocks.dirt.getIcon(0, 0); + } + + @Override + public void breakBlock(final World world, final int x, final int y, final int z, final Block par5, final int par6) { + final TileEntity tileentity = world.getTileEntity(x, y, z); + if (!(tileentity instanceof TileEntityMachine)) { + return; + } + final TileEntityMachine entity = (TileEntityMachine) tileentity; + if (entity != null) { + entity.onBlockDestroy(); + } + super.breakBlock(world, x, y, z, par5, par6); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister register) { + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(final World world, final int x, final int y, final int z, final Random rand) { + final IMachine machine = Machine.getMachine(world.getTileEntity(x, y, z)); + if (machine != null) { + for (final IRender.RandomDisplayTick renders : machine.getInterfaces(IRender.RandomDisplayTick.class)) { + renders.onRandomDisplayTick(world, x, y, z, rand); + } + } + } + + @Override + public ArrayList getDrops(final World world, final int x, final int y, final int z, final int metadata, final int fortune) { + return new ArrayList(); + } + + @Override + public boolean removedByPlayer(final World world, final EntityPlayer player, final int x, final int y, final int z, final boolean willHarvest) { + if (BinnieCore.proxy.isSimulating(world) && this.canHarvestBlock(player, world.getBlockMetadata(x, y, z)) && !player.capabilities.isCreativeMode) { + final int metadata = world.getBlockMetadata(x, y, z); + final ItemStack stack = new ItemStack(Item.getItemFromBlock(this), 1, this.damageDropped(metadata)); + this.dropBlockAsItem(world, x, y, z, stack); + } + return world.setBlockToAir(x, y, z); + } + + public interface IMachineTexturedFaces + { + IIcon getIcon(final int p0); + } +} diff --git a/src/main/java/binnie/core/machines/IBlockMachine.java b/src/main/java/binnie/core/machines/IBlockMachine.java new file mode 100644 index 00000000..e14df469 --- /dev/null +++ b/src/main/java/binnie/core/machines/IBlockMachine.java @@ -0,0 +1,12 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines; + +interface IBlockMachine +{ + MachinePackage getPackage(final int p0); + + String getMachineName(final int p0); +} diff --git a/src/main/java/binnie/core/machines/IMachine.java b/src/main/java/binnie/core/machines/IMachine.java new file mode 100644 index 00000000..87dcac7d --- /dev/null +++ b/src/main/java/binnie/core/machines/IMachine.java @@ -0,0 +1,28 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines; + +import java.util.Collection; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public interface IMachine extends IOwnable +{ + void addComponent(final MachineComponent p0); + + MachineUtil getMachineUtil(); + + T getInterface(final Class p0); + + void markDirty(); + + World getWorld(); + + TileEntity getTileEntity(); + + Collection getInterfaces(final Class p0); + + MachinePackage getPackage(); +} diff --git a/src/main/java/binnie/core/machines/IMachineType.java b/src/main/java/binnie/core/machines/IMachineType.java new file mode 100644 index 00000000..70898f4a --- /dev/null +++ b/src/main/java/binnie/core/machines/IMachineType.java @@ -0,0 +1,14 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines; + +import binnie.core.network.IOrdinaled; + +public interface IMachineType extends IOrdinaled +{ + Class getPackageClass(); + + boolean isActive(); +} diff --git a/src/main/java/binnie/core/machines/IOwnable.java b/src/main/java/binnie/core/machines/IOwnable.java new file mode 100644 index 00000000..d56be7d2 --- /dev/null +++ b/src/main/java/binnie/core/machines/IOwnable.java @@ -0,0 +1,14 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines; + +import com.mojang.authlib.GameProfile; + +interface IOwnable +{ + GameProfile getOwner(); + + void setOwner(final GameProfile p0); +} diff --git a/src/main/java/binnie/core/machines/ItemMachine.java b/src/main/java/binnie/core/machines/ItemMachine.java new file mode 100644 index 00000000..7a13589b --- /dev/null +++ b/src/main/java/binnie/core/machines/ItemMachine.java @@ -0,0 +1,31 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines; + +import net.minecraft.item.ItemStack; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; + +public class ItemMachine extends ItemBlock +{ + private IBlockMachine associatedBlock; + + public ItemMachine(final Block block) { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.associatedBlock = (IBlockMachine) block; + } + + @Override + public int getMetadata(final int i) { + return i; + } + + @Override + public String getItemStackDisplayName(final ItemStack itemstack) { + return this.associatedBlock.getMachineName(itemstack.getItemDamage()); + } +} diff --git a/src/main/java/binnie/core/machines/Machine.java b/src/main/java/binnie/core/machines/Machine.java new file mode 100644 index 00000000..af7ae740 --- /dev/null +++ b/src/main/java/binnie/core/machines/Machine.java @@ -0,0 +1,302 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import binnie.core.network.packet.MessageTileNBT; +import binnie.core.network.BinnieCorePacketID; +import net.minecraft.network.Packet; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.nbt.NBTTagCompound; +import binnie.core.machines.power.ITankMachine; +import net.minecraft.inventory.IInventory; +import binnie.core.machines.component.IRender; +import binnie.core.machines.component.IInteraction; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import binnie.core.network.packet.PacketPayload; +import cpw.mods.fml.relauncher.Side; +import binnie.core.BinnieCore; +import java.util.Collection; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import com.mojang.authlib.GameProfile; +import net.minecraft.tileentity.TileEntity; +import java.util.List; +import java.util.Map; +import binnie.core.machines.network.INetwork; +import forestry.api.core.INBTTagable; +import binnie.core.network.INetworkedEntity; + +public class Machine implements INetworkedEntity, INBTTagable, INetwork.TilePacketSync, IMachine, INetwork.GuiNBT +{ + private MachinePackage machinePackage; + private Map> componentInterfaceMap; + private Map, MachineComponent> componentMap; + private TileEntity tile; + private boolean queuedInventoryUpdate; + private int nextProgressBarID; + private GameProfile owner; + + public Machine(final MachinePackage pack, final TileEntity tile) { + this.componentInterfaceMap = new LinkedHashMap>(); + this.componentMap = new LinkedHashMap, MachineComponent>(); + this.queuedInventoryUpdate = false; + this.nextProgressBarID = 0; + this.owner = null; + this.tile = tile; + pack.createMachine(this); + this.machinePackage = pack; + } + + @Override + public void addComponent(final MachineComponent component) { + if (component == null) { + throw new NullPointerException("Can't have a null machine component!"); + } + component.setMachine(this); + this.componentMap.put(component.getClass(), component); + for (final Class inter : component.getComponentInterfaces()) { + if (!this.componentInterfaceMap.containsKey(inter)) { + this.componentInterfaceMap.put(inter, new ArrayList()); + } + this.componentInterfaceMap.get(inter).add(component); + } + } + + public Collection getComponents() { + return this.componentMap.values(); + } + + public T getComponent(final Class componentClass) { + return this.hasComponent(componentClass) ? ((T) componentClass.cast(this.componentMap.get(componentClass))) : null; + } + + @Override + public T getInterface(final Class interfaceClass) { + if (this.hasInterface(interfaceClass)) { + return this.getInterfaces(interfaceClass).get(0); + } + if (interfaceClass.isInstance(this.getPackage())) { + return interfaceClass.cast(this.getPackage()); + } + for (final MachineComponent component : this.getComponents()) { + if (interfaceClass.isInstance(component)) { + return interfaceClass.cast(component); + } + } + return null; + } + + @Override + public List getInterfaces(final Class interfaceClass) { + final ArrayList interfaces = new ArrayList(); + if (!this.hasInterface(interfaceClass)) { + return interfaces; + } + for (final MachineComponent component : this.componentInterfaceMap.get(interfaceClass)) { + interfaces.add(interfaceClass.cast(component)); + } + return interfaces; + } + + public boolean hasInterface(final Class interfaceClass) { + return this.componentInterfaceMap.containsKey(interfaceClass); + } + + public boolean hasComponent(final Class componentClass) { + return this.componentMap.containsKey(componentClass); + } + + @Override + public TileEntity getTileEntity() { + return this.tile; + } + + public void sendPacket() { + if (!BinnieCore.proxy.isSimulating(this.getTileEntity().getWorldObj())) { + return; + } + BinnieCore.proxy.sendNetworkEntityPacket((INetworkedEntity) this.getTileEntity()); + } + + public Side getSide() { + return BinnieCore.proxy.isSimulating(this.getTileEntity().getWorldObj()) ? Side.SERVER : Side.CLIENT; + } + + @Override + public void writeToPacket(final PacketPayload payload) { + for (final MachineComponent component : this.getComponents()) { + if (component instanceof INetworkedEntity) { + ((INetworkedEntity) component).writeToPacket(payload); + } + } + } + + @Override + public void readFromPacket(final PacketPayload payload) { + for (final MachineComponent component : this.getComponents()) { + if (component instanceof INetworkedEntity) { + ((INetworkedEntity) component).readFromPacket(payload); + } + } + } + + public void onRightClick(final World world, final EntityPlayer player, final int x, final int y, final int z) { + for (final IInteraction.RightClick component : this.getInterfaces(IInteraction.RightClick.class)) { + component.onRightClick(world, player, x, y, z); + } + } + + @Override + public void markDirty() { + this.queuedInventoryUpdate = true; + } + + public void onUpdate() { + if (BinnieCore.proxy.isSimulating(this.getWorld())) { + for (final MachineComponent component : this.getComponents()) { + component.onUpdate(); + } + } + else { + for (final IRender.DisplayTick renders : this.getInterfaces(IRender.DisplayTick.class)) { + renders.onDisplayTick(this.getWorld(), this.getTileEntity().xCoord, this.getTileEntity().yCoord, this.getTileEntity().zCoord, this.getWorld().rand); + } + } + if (this.queuedInventoryUpdate) { + for (final MachineComponent component : this.getComponents()) { + component.onInventoryUpdate(); + } + this.queuedInventoryUpdate = false; + } + } + + public IInventory getInventory() { + return this.getInterface(IInventory.class); + } + + public ITankMachine getTankContainer() { + return this.getInterface(ITankMachine.class); + } + + @Override + public void readFromNBT(final NBTTagCompound nbttagcompound) { + for (final MachineComponent component : this.getComponents()) { + component.readFromNBT(nbttagcompound); + } + this.owner = NBTUtil.func_152459_a(nbttagcompound.getCompoundTag("owner")); + this.markDirty(); + } + + @Override + public void writeToNBT(final NBTTagCompound nbttagcompound) { + for (final MachineComponent component : this.getComponents()) { + component.writeToNBT(nbttagcompound); + } + if (this.owner != null) { + final NBTTagCompound nbt = new NBTTagCompound(); + NBTUtil.func_152460_a(nbt, this.owner); + nbttagcompound.setTag("owner", nbt); + } + } + + @Override + public MachinePackage getPackage() { + return this.machinePackage; + } + + public static IMachine getMachine(final Object inventory) { + if (inventory != null && inventory instanceof IMachine) { + return (IMachine) inventory; + } + if (inventory != null && inventory instanceof TileEntityMachine) { + return ((TileEntityMachine) inventory).getMachine(); + } + if (inventory != null && inventory instanceof MachineComponent) { + return ((MachineComponent) inventory).getMachine(); + } + return null; + } + + public static T getInterface(final Class interfac, final Object inventory) { + final IMachine machine = getMachine(inventory); + if (machine != null) { + return machine.getInterface(interfac); + } + if (interfac.isInstance(inventory)) { + return interfac.cast(inventory); + } + return null; + } + + @Override + public MachineUtil getMachineUtil() { + return new MachineUtil(this); + } + + @Override + public World getWorld() { + return this.getTileEntity().getWorldObj(); + } + + public void onBlockDestroy() { + for (final MachineComponent component : this.getComponents()) { + component.onDestruction(); + } + } + + public int getUniqueProgressBarID() { + return this.nextProgressBarID++; + } + + @Override + public GameProfile getOwner() { + return this.owner; + } + + @Override + public void setOwner(final GameProfile owner) { + this.owner = owner; + } + + public Packet getDescriptionPacket() { + final NBTTagCompound nbt = new NBTTagCompound(); + this.syncToNBT(nbt); + if (nbt.hasNoTags()) { + return null; + } + return BinnieCore.instance.getNetworkWrapper().getPacketFrom(new MessageTileNBT(BinnieCorePacketID.TileDescriptionSync.ordinal(), this.getTileEntity(), nbt).GetMessage()); + } + + @Override + public void syncToNBT(final NBTTagCompound nbt) { + for (final INetwork.TilePacketSync comp : this.getInterfaces(INetwork.TilePacketSync.class)) { + comp.syncToNBT(nbt); + } + } + + @Override + public void syncFromNBT(final NBTTagCompound nbt) { + for (final INetwork.TilePacketSync comp : this.getInterfaces(INetwork.TilePacketSync.class)) { + comp.syncFromNBT(nbt); + } + } + + @Override + public void recieveGuiNBT(final Side side, final EntityPlayer player, final String name, final NBTTagCompound nbt) { + for (final INetwork.RecieveGuiNBT recieve : this.getInterfaces(INetwork.RecieveGuiNBT.class)) { + recieve.recieveGuiNBT(side, player, name, nbt); + } + } + + @Override + public void sendGuiNBT(final Map nbt) { + for (final INetwork.SendGuiNBT recieve : this.getInterfaces(INetwork.SendGuiNBT.class)) { + recieve.sendGuiNBT(nbt); + } + } +} diff --git a/src/main/java/binnie/core/machines/MachineComponent.java b/src/main/java/binnie/core/machines/MachineComponent.java new file mode 100644 index 00000000..4dd670c9 --- /dev/null +++ b/src/main/java/binnie/core/machines/MachineComponent.java @@ -0,0 +1,65 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines; + +import net.minecraft.inventory.IInventory; +import binnie.core.network.packet.MachinePayload; +import binnie.Binnie; +import net.minecraft.nbt.NBTTagCompound; +import forestry.api.core.INBTTagable; + +public class MachineComponent implements INBTTagable +{ + private IMachine machine; + + public MachineComponent(final IMachine machine) { + this.setMachine(machine); + machine.addComponent(this); + } + + public void setMachine(final IMachine machine) { + this.machine = machine; + } + + public IMachine getMachine() { + return this.machine; + } + + @Override + public void readFromNBT(final NBTTagCompound nbttagcompound) { + } + + @Override + public void writeToNBT(final NBTTagCompound nbttagcompound) { + } + + public void onUpdate() { + } + + public Class[] getComponentInterfaces() { + return Binnie.Machine.getComponentInterfaces(this.getClass()); + } + + public void onInventoryUpdate() { + } + + public final MachinePayload getPayload() { + return new MachinePayload(Binnie.Machine.getNetworkID(this.getClass())); + } + + public void recieveData(final MachinePayload payload) { + } + + public MachineUtil getUtil() { + return this.getMachine().getMachineUtil(); + } + + public void onDestruction() { + } + + public IInventory getInventory() { + return this.getMachine().getInterface(IInventory.class); + } +} diff --git a/src/main/java/binnie/core/machines/MachineGroup.java b/src/main/java/binnie/core/machines/MachineGroup.java new file mode 100644 index 00000000..2b922221 --- /dev/null +++ b/src/main/java/binnie/core/machines/MachineGroup.java @@ -0,0 +1,104 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines; + +import net.minecraft.creativetab.CreativeTabs; +import java.util.Collection; +import net.minecraft.block.Block; +import cpw.mods.fml.common.registry.GameRegistry; +import binnie.Binnie; +import java.util.LinkedHashMap; +import java.util.Map; +import binnie.core.AbstractMod; + +public class MachineGroup +{ + private AbstractMod mod; + private String blockName; + private String uid; + private Map packages; + private Map packagesID; + private BlockMachine block; + public boolean customRenderer; + private boolean renderedTileEntity; + + public MachineGroup(final AbstractMod mod, final String uid, final String blockName, final IMachineType[] types) { + this.packages = new LinkedHashMap(); + this.packagesID = new LinkedHashMap(); + this.customRenderer = true; + this.renderedTileEntity = true; + this.mod = mod; + this.uid = uid; + this.blockName = blockName; + for (final IMachineType type : types) { + if (type.getPackageClass() != null) { + if (type.isActive()) { + try { + final MachinePackage pack = type.getPackageClass().newInstance(); + pack.assignMetadata(type.ordinal()); + pack.setActive(type.isActive()); + this.addPackage(pack); + } catch (Exception e) { + throw new RuntimeException("Failed to create machine package " + type.toString(), e); + } + } + } + } + Binnie.Machine.registerMachineGroup(this); + this.block = new BlockMachine(this, blockName); + if (this.block != null) { + GameRegistry.registerBlock(this.block, ItemMachine.class, blockName); + for (final MachinePackage pack2 : this.getPackages()) { + pack2.register(); + } + } + } + + private void addPackage(final MachinePackage pack) { + this.packages.put(pack.getUID(), pack); + this.packagesID.put(pack.getMetadata(), pack); + pack.setGroup(this); + } + + public Collection getPackages() { + return this.packages.values(); + } + + public BlockMachine getBlock() { + return this.block; + } + + public MachinePackage getPackage(final int metadata) { + return this.packagesID.get(metadata); + } + + public MachinePackage getPackage(final String name) { + return this.packages.get(name); + } + + public String getUID() { + return this.mod.getModID() + "." + this.uid; + } + + public String getShortUID() { + return this.uid; + } + + boolean isTileEntityRenderered() { + return this.renderedTileEntity; + } + + public void renderAsBlock() { + this.renderedTileEntity = false; + } + + public void setCreativeTab(final CreativeTabs tab) { + this.block.setCreativeTab(tab); + } + + public AbstractMod getMod() { + return this.mod; + } +} diff --git a/src/main/java/binnie/core/machines/MachinePackage.java b/src/main/java/binnie/core/machines/MachinePackage.java new file mode 100644 index 00000000..dfffb65b --- /dev/null +++ b/src/main/java/binnie/core/machines/MachinePackage.java @@ -0,0 +1,70 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines; + +import net.minecraft.client.renderer.RenderBlocks; +import binnie.Binnie; +import net.minecraft.tileentity.TileEntity; + +public abstract class MachinePackage +{ + private String uid; + private boolean active; + boolean powered; + private int metadata; + private MachineGroup group; + + public String getUID() { + return this.uid; + } + + protected MachinePackage(final String uid, final boolean powered) { + this.active = true; + this.powered = false; + this.metadata = -1; + this.uid = uid; + this.powered = powered; + } + + public abstract void createMachine(final Machine p0); + + public abstract TileEntity createTileEntity(); + + public abstract void register(); + + public final String getDisplayName() { + return Binnie.Language.localise(this.group.getMod(), "machine." + this.group.getShortUID() + "." + this.getUID()); + } + + public final Integer getMetadata() { + return this.metadata; + } + + public void assignMetadata(final int meta) { + this.metadata = meta; + } + + public MachineGroup getGroup() { + return this.group; + } + + public void setGroup(final MachineGroup group) { + this.group = group; + } + + public abstract void renderMachine(final Machine p0, final double p1, final double p2, final double p3, final float p4, final RenderBlocks p5); + + public boolean isActive() { + return this.active; + } + + public void setActive(final boolean active) { + this.active = active; + } + + public final String getInformation() { + return Binnie.Language.localise(this.group.getMod(), "machine." + this.group.getShortUID() + "." + this.getUID() + ".info"); + } +} diff --git a/src/main/java/binnie/core/machines/MachineRendererBlock.java b/src/main/java/binnie/core/machines/MachineRendererBlock.java new file mode 100644 index 00000000..4cfac8d7 --- /dev/null +++ b/src/main/java/binnie/core/machines/MachineRendererBlock.java @@ -0,0 +1,39 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines; + +import binnie.core.BinnieCore; +import org.lwjgl.opengl.GL11; +import binnie.core.resource.BinnieResource; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class MachineRendererBlock +{ + public static MachineRendererBlock instance; + private BinnieResource texture; + private ModelBlock model; + + public MachineRendererBlock() { + this.model = new ModelBlock(); + } + + public void renderMachine(final BinnieResource texture, final double x, final double y, final double z, final float var8) { + this.texture = texture; + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y + 1.5, z + 0.5); + GL11.glRotatef(180.0f, 0.0f, 0.0f, 1.0f); + BinnieCore.proxy.bindTexture(texture); + GL11.glPushMatrix(); + this.model.render((float) x, (float) y, (float) z, 0.0625f, 0.0625f, 0.0625f); + GL11.glPopMatrix(); + GL11.glPopMatrix(); + } + + static { + MachineRendererBlock.instance = new MachineRendererBlock(); + } +} diff --git a/src/main/java/binnie/core/machines/MachineUtil.java b/src/main/java/binnie/core/machines/MachineUtil.java new file mode 100644 index 00000000..17f6ff21 --- /dev/null +++ b/src/main/java/binnie/core/machines/MachineUtil.java @@ -0,0 +1,184 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines; + +import binnie.core.BinnieCore; +import java.util.ArrayList; +import java.util.List; +import binnie.core.machines.power.IProcess; +import binnie.core.machines.inventory.IChargedSlots; +import binnie.core.machines.power.PowerSystem; +import binnie.core.util.ItemStackSet; +import java.util.Random; +import net.minecraftforge.fluids.FluidStack; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.IFluidTank; +import binnie.core.machines.power.IPoweredMachine; +import binnie.core.machines.power.ITankMachine; +import net.minecraft.inventory.IInventory; + +public class MachineUtil +{ + private IMachine machine; + + public MachineUtil(final IMachine machine) { + this.machine = machine; + } + + public IInventory getInventory() { + return this.machine.getInterface(IInventory.class); + } + + public ITankMachine getTankContainer() { + return this.machine.getInterface(ITankMachine.class); + } + + public IPoweredMachine getPoweredMachine() { + return this.machine.getInterface(IPoweredMachine.class); + } + + public boolean isSlotEmpty(final int slot) { + return this.getInventory().getStackInSlot(slot) == null; + } + + public IFluidTank getTank(final int id) { + return this.getTankContainer().getTanks()[id]; + } + + public boolean spaceInTank(final int id, final int amount) { + final IFluidTank tank = this.getTank(id); + final int space = tank.getCapacity() - tank.getFluidAmount(); + return amount <= space; + } + + public ItemStack getStack(final int slot) { + return this.getInventory().getStackInSlot(slot); + } + + public void deleteStack(final int slot) { + this.setStack(slot, null); + } + + public ItemStack decreaseStack(final int slotWood, final int amount) { + return this.getInventory().decrStackSize(slotWood, amount); + } + + public void setStack(final int slot, final ItemStack stack) { + this.getInventory().setInventorySlotContents(slot, stack); + } + + public void fillTank(final int id, final FluidStack liquidStack) { + final IFluidTank tank = this.getTank(id); + tank.fill(liquidStack, true); + } + + public void addStack(final int slot, final ItemStack addition) { + if (this.isSlotEmpty(slot)) { + this.setStack(slot, addition); + } + else { + final ItemStack merge = this.getStack(slot); + if (merge.isItemEqual(addition) && merge.stackSize + addition.stackSize <= merge.getMaxStackSize()) { + final ItemStack itemStack = merge; + itemStack.stackSize += addition.stackSize; + this.setStack(slot, merge); + } + } + } + + public FluidStack drainTank(final int tank, final int amount) { + return this.getTank(tank).drain(amount, true); + } + + public boolean liquidInTank(final int tank, final int amount) { + return this.getTank(tank).drain(amount, false) != null && this.getTank(tank).drain(amount, false).amount == amount; + } + + public void damageItem(final int slot, final int damage) { + final ItemStack item = this.getStack(slot); + if (damage < 0) { + item.setItemDamage(Math.max(0, item.getItemDamage() + damage)); + } + else if (item.attemptDamageItem(damage, new Random())) { + this.setStack(slot, null); + } + this.setStack(slot, item); + } + + public boolean isTankEmpty(final int tankInput) { + return this.getTank(tankInput).getFluidAmount() == 0; + } + + public FluidStack getFluid(final int tankInput) { + return (this.getTank(tankInput).getFluid() == null) ? null : this.getTank(tankInput).getFluid(); + } + + public ItemStack[] getStacks(final int[] slotGrains) { + final ItemStack[] stacks = new ItemStack[slotGrains.length]; + for (int i = 0; i < slotGrains.length; ++i) { + stacks[i] = this.getStack(slotGrains[i]); + } + return stacks; + } + + public ItemStack hasIngredients(final int recipe, final int[] inventory) { + return null; + } + + public boolean hasIngredients(final int[] recipe, final int[] inventory) { + final ItemStackSet requiredStacks = new ItemStackSet(); + for (final ItemStack stack : this.getStacks(recipe)) { + requiredStacks.add(stack); + } + final ItemStackSet inventoryStacks = new ItemStackSet(); + for (final ItemStack stack2 : this.getStacks(inventory)) { + inventoryStacks.add(stack2); + } + requiredStacks.removeAll(inventoryStacks); + return requiredStacks.isEmpty(); + } + + public void useEnergyMJ(final float powerUsage) { + this.getPoweredMachine().getInterface().useEnergy(PowerSystem.MJ, powerUsage, true); + } + + public boolean hasEnergyMJ(final float powerUsage) { + return this.getPoweredMachine().getInterface().useEnergy(PowerSystem.MJ, powerUsage, false) >= powerUsage; + } + + public float getSlotCharge(final int slot) { + return this.machine.getInterface(IChargedSlots.class).getCharge(slot); + } + + public void useCharge(final int slot, final float loss) { + this.machine.getInterface(IChargedSlots.class).alterCharge(slot, -loss); + } + + public Random getRandom() { + return new Random(); + } + + public void refreshBlock() { + this.machine.getWorld().markBlockForUpdate(this.machine.getTileEntity().xCoord, this.machine.getTileEntity().yCoord, this.machine.getTileEntity().zCoord); + } + + public IProcess getProcess() { + return this.machine.getInterface(IProcess.class); + } + + public List getNonNullStacks(final int[] slotacclimatiser) { + final List stacks = new ArrayList(); + for (final ItemStack stack : this.getStacks(slotacclimatiser)) { + if (stack != null) { + stacks.add(stack); + } + } + return stacks; + } + + public boolean isServer() { + return BinnieCore.proxy.isSimulating(this.machine.getWorld()); + } +} diff --git a/src/main/java/binnie/core/machines/ManagerMachine.java b/src/main/java/binnie/core/machines/ManagerMachine.java new file mode 100644 index 00000000..8db0d07a --- /dev/null +++ b/src/main/java/binnie/core/machines/ManagerMachine.java @@ -0,0 +1,100 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines; + +import binnie.core.machines.inventory.SlotValidator; +import binnie.core.machines.inventory.ValidatorIcon; +import binnie.core.BinnieCore; +import java.util.Set; +import forestry.api.core.INBTTagable; +import java.util.HashSet; +import java.util.HashMap; +import java.util.Map; +import binnie.core.ManagerBase; + +public class ManagerMachine extends ManagerBase +{ + private Map, Class[]> componentInterfaceMap; + private Map machineGroups; + private Map> networkIDToComponent; + private Map, Integer> componentToNetworkID; + private int nextNetworkID; + private int machineRenderID; + + public ManagerMachine() { + this.componentInterfaceMap = new HashMap, Class[]>(); + this.machineGroups = new HashMap(); + this.networkIDToComponent = new HashMap>(); + this.componentToNetworkID = new HashMap, Integer>(); + this.nextNetworkID = 0; + } + + public void registerMachineGroup(final MachineGroup group) { + this.machineGroups.put(group.getUID(), group); + } + + public MachineGroup getGroup(final String name) { + return this.machineGroups.get(name); + } + + public MachinePackage getPackage(final String group, final String name) { + final MachineGroup machineGroup = this.getGroup(group); + return (machineGroup == null) ? null : machineGroup.getPackage(name); + } + + private void registerComponentClass(final Class component) { + if (this.componentInterfaceMap.containsKey(component)) { + return; + } + final Set> interfaces = new HashSet>(); + for (Class currentClass = component; currentClass != null; currentClass = null) { + for (final Class clss : currentClass.getInterfaces()) { + interfaces.add(clss); + } + currentClass = currentClass.getSuperclass(); + if (currentClass == Object.class) { + } + } + interfaces.remove(INBTTagable.class); + this.componentInterfaceMap.put(component, interfaces.toArray(new Class[0])); + final int networkID = this.nextNetworkID++; + this.networkIDToComponent.put(networkID, component); + this.componentToNetworkID.put(component, networkID); + } + + public int getNetworkID(final Class component) { + return this.componentToNetworkID.get(component); + } + + public Class getComponentClass(final int networkID) { + return this.networkIDToComponent.get(networkID); + } + + public int getMachineRenderID() { + return this.machineRenderID; + } + + @Override + public void init() { + this.machineRenderID = BinnieCore.proxy.getUniqueRenderID(); + SlotValidator.IconBee = new ValidatorIcon(BinnieCore.instance, "validator/bee.0", "validator/bee.1"); + SlotValidator.IconFrame = new ValidatorIcon(BinnieCore.instance, "validator/frame.0", "validator/frame.1"); + SlotValidator.IconCircuit = new ValidatorIcon(BinnieCore.instance, "validator/circuit.0", "validator/circuit.1"); + SlotValidator.IconBlock = new ValidatorIcon(BinnieCore.instance, "validator/block.0", "validator/block.1"); + } + + @Override + public void postInit() { + BinnieCore.proxy.registerBlockRenderer(BinnieCore.proxy.createObject("binnie.core.machines.RendererMachine")); + BinnieCore.proxy.registerTileEntity(TileEntityMachine.class, "binnie.tile.machine", BinnieCore.proxy.createObject("binnie.core.machines.RendererMachine")); + } + + public Class[] getComponentInterfaces(final Class clss) { + if (!this.componentInterfaceMap.containsKey(clss)) { + this.registerComponentClass(clss); + } + return this.componentInterfaceMap.get(clss); + } +} diff --git a/src/main/java/binnie/core/machines/ModelBlock.java b/src/main/java/binnie/core/machines/ModelBlock.java new file mode 100644 index 00000000..9036ec1d --- /dev/null +++ b/src/main/java/binnie/core/machines/ModelBlock.java @@ -0,0 +1,40 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines; + +import net.minecraft.entity.Entity; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.model.ModelBase; + +class ModelBlock extends ModelBase +{ + private ModelRenderer Block; + + public ModelBlock() { + this.textureWidth = 64; + this.textureHeight = 32; + (this.Block = new ModelRenderer(this, 0, 0)).addBox(0.0f, 0.0f, 0.0f, 16, 16, 16); + this.Block.setRotationPoint(-8.0f, 8.0f, -8.0f); + this.Block.setTextureSize(64, 32); + this.Block.mirror = true; + this.setRotation(this.Block, 0.0f, 0.0f, 0.0f); + } + + public void render(final float f, final float f1, final float f2, final float f3, final float f4, final float f5) { + super.render((Entity) null, f, f1, f2, f3, f4, f5); + this.setRotationAngles(f, f1, f2, f3, f4, f5); + this.Block.render(f5); + } + + private void setRotation(final ModelRenderer model, final float x, final float y, final float z) { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(final float f, final float f1, final float f2, final float f3, final float f4, final float f5) { + super.setRotationAngles(f, f1, f2, f3, f4, f5, (Entity) null); + } +} diff --git a/src/main/java/binnie/core/machines/RendererMachine.java b/src/main/java/binnie/core/machines/RendererMachine.java new file mode 100644 index 00000000..c18eab8c --- /dev/null +++ b/src/main/java/binnie/core/machines/RendererMachine.java @@ -0,0 +1,67 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines; + +import net.minecraft.world.IBlockAccess; +import binnie.Binnie; +import net.minecraft.world.World; +import net.minecraft.block.Block; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.client.renderer.RenderBlocks; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; + +public class RendererMachine extends TileEntitySpecialRenderer implements ISimpleBlockRenderingHandler +{ + RenderBlocks blockRenderer; + + @Override + public void renderTileEntityAt(final TileEntity entity, final double x, final double y, final double z, final float var8) { + this.renderTileEntity((TileEntityMachine) entity, x, y, z, var8, this.blockRenderer); + } + + public void renderTileEntity(final TileEntityMachine entity, final double x, final double y, final double z, final float var8, final RenderBlocks renderer) { + if (entity != null && entity.getMachine() != null) { + final MachinePackage machinePackage = entity.getMachine().getPackage(); + machinePackage.renderMachine(entity.getMachine(), x, y, z, var8, renderer); + } + } + + public void renderInvBlock(final RenderBlocks renderblocks, final Block block, final int i, final int j) { + final TileEntity entity = block.createTileEntity((World) null, i); + this.renderTileEntity((TileEntityMachine) entity, 0.0, -0.1, 0.0, 0.0625f, renderblocks); + } + + @Override + public void renderInventoryBlock(final Block block, final int metadata, final int modelID, final RenderBlocks renderer) { + if (modelID == Binnie.Machine.getMachineRenderID()) { + this.renderInvBlock(renderer, block, metadata, modelID); + } + } + + @Override + public boolean renderWorldBlock(final IBlockAccess world, final int x, final int y, final int z, final Block block, final int modelId, final RenderBlocks renderer) { + final TileEntityMachine tile = (TileEntityMachine) world.getTileEntity(x, y, z); + if (tile != null && tile.getMachine() != null && tile.getMachine().getPackage() != null && tile.getMachine().getPackage().getGroup() != null && !tile.getMachine().getPackage().getGroup().customRenderer) { + this.renderTileEntity(tile, x, y, z, 1.0f, renderer); + } + return true; + } + + @Override + public boolean shouldRender3DInInventory(final int i) { + return true; + } + + @Override + public int getRenderId() { + return Binnie.Machine.getMachineRenderID(); + } + + @Override + public void func_147496_a(final World par1World) { + this.blockRenderer = new RenderBlocks(par1World); + } +} diff --git a/src/main/java/binnie/core/machines/TileEntityMachine.java b/src/main/java/binnie/core/machines/TileEntityMachine.java new file mode 100644 index 00000000..bd43382d --- /dev/null +++ b/src/main/java/binnie/core/machines/TileEntityMachine.java @@ -0,0 +1,109 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines; + +import binnie.core.machines.component.IInteraction; +import net.minecraft.network.Packet; +import binnie.core.network.packet.PacketPayload; +import binnie.Binnie; +import net.minecraft.nbt.NBTTagCompound; +import binnie.core.network.INetworkedEntity; +import binnie.core.machines.base.TileEntityMachineBase; + +public class TileEntityMachine extends TileEntityMachineBase implements INetworkedEntity +{ + private Machine machine; + + @Override + public void updateEntity() { + super.updateEntity(); + if (this.machine != null) { + this.machine.onUpdate(); + } + } + + @Override + public boolean canUpdate() { + return super.canUpdate(); + } + + public TileEntityMachine(final MachinePackage pack) { + this.setMachine(pack); + } + + public TileEntityMachine() { + } + + public void setMachine(final MachinePackage pack) { + if (pack != null) { + this.machine = new Machine(pack, this); + } + } + + @Override + public void readFromNBT(final NBTTagCompound nbtTagCompound) { + super.readFromNBT(nbtTagCompound); + final String name = nbtTagCompound.getString("name"); + final String group = nbtTagCompound.getString("group"); + final MachinePackage pack = Binnie.Machine.getPackage(group, name); + if (pack == null) { + this.invalidate(); + return; + } + this.setMachine(pack); + this.getMachine().readFromNBT(nbtTagCompound); + } + + @Override + public void writeToNBT(final NBTTagCompound nbtTagCompound) { + super.writeToNBT(nbtTagCompound); + final String name = this.machine.getPackage().getUID(); + final String group = this.machine.getPackage().getGroup().getUID(); + nbtTagCompound.setString("group", group); + nbtTagCompound.setString("name", name); + this.getMachine().writeToNBT(nbtTagCompound); + } + + @Override + public void writeToPacket(final PacketPayload payload) { + this.machine.writeToPacket(payload); + } + + @Override + public void readFromPacket(final PacketPayload payload) { + this.machine.readFromPacket(payload); + } + + public Machine getMachine() { + return this.machine; + } + + public void onBlockDestroy() { + if (this.getMachine() != null) { + this.getMachine().onBlockDestroy(); + } + } + + @Override + public final Packet getDescriptionPacket() { + return (this.getMachine() != null) ? this.getMachine().getDescriptionPacket() : null; + } + + @Override + public void invalidate() { + super.invalidate(); + for (final IInteraction.Invalidation c : this.getMachine().getInterfaces(IInteraction.Invalidation.class)) { + c.onInvalidation(); + } + } + + @Override + public void onChunkUnload() { + super.onChunkUnload(); + for (final IInteraction.ChunkUnload c : this.getMachine().getInterfaces(IInteraction.ChunkUnload.class)) { + c.onChunkUnload(); + } + } +} diff --git a/src/main/java/binnie/core/machines/base/DefaultInventory.java b/src/main/java/binnie/core/machines/base/DefaultInventory.java new file mode 100644 index 00000000..b9e419c3 --- /dev/null +++ b/src/main/java/binnie/core/machines/base/DefaultInventory.java @@ -0,0 +1,93 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.base; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import binnie.core.machines.inventory.IInventoryMachine; + +class DefaultInventory implements IInventoryMachine +{ + @Override + public int getSizeInventory() { + return 0; + } + + @Override + public ItemStack getStackInSlot(final int i) { + return null; + } + + @Override + public ItemStack decrStackSize(final int i, final int j) { + return null; + } + + @Override + public ItemStack getStackInSlotOnClosing(final int i) { + return null; + } + + @Override + public void setInventorySlotContents(final int i, final ItemStack itemstack) { + } + + @Override + public int getInventoryStackLimit() { + return 64; + } + + @Override + public boolean isUseableByPlayer(final EntityPlayer entityplayer) { + return false; + } + + @Override + public boolean isItemValidForSlot(final int i, final ItemStack itemstack) { + return false; + } + + @Override + public int[] getAccessibleSlotsFromSide(final int var1) { + return new int[0]; + } + + @Override + public boolean canInsertItem(final int i, final ItemStack itemstack, final int j) { + return false; + } + + @Override + public boolean canExtractItem(final int i, final ItemStack itemstack, final int j) { + return false; + } + + @Override + public boolean isReadOnly(final int slot) { + return false; + } + + @Override + public String getInventoryName() { + return ""; + } + + @Override + public boolean hasCustomInventoryName() { + return false; + } + + @Override + public void markDirty() { + } + + @Override + public void openInventory() { + } + + @Override + public void closeInventory() { + } +} diff --git a/src/main/java/binnie/core/machines/base/DefaultPower.java b/src/main/java/binnie/core/machines/base/DefaultPower.java new file mode 100644 index 00000000..f942f491 --- /dev/null +++ b/src/main/java/binnie/core/machines/base/DefaultPower.java @@ -0,0 +1,74 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.base; + +import binnie.core.machines.power.PowerInterface; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; +import cpw.mods.fml.common.Optional; +import binnie.core.machines.power.PowerInfo; +import binnie.core.machines.power.IPoweredMachine; + +class DefaultPower implements IPoweredMachine +{ + @Override + public PowerInfo getPowerInfo() { + return new PowerInfo(this, 0.0f); + } + + @Override + @Optional.Method(modid = "IC2") + public double getDemandedEnergy() { + return 0.0; + } + + @Override + @Optional.Method(modid = "IC2") + public int getSinkTier() { + return 0; + } + + @Override + @Optional.Method(modid = "IC2") + public double injectEnergy(final ForgeDirection directionFrom, final double amount, final double voltage) { + return 0.0; + } + + @Override + @Optional.Method(modid = "IC2") + public boolean acceptsEnergyFrom(final TileEntity emitter, final ForgeDirection direction) { + return false; + } + + @Override + public int receiveEnergy(final ForgeDirection from, final int maxReceive, final boolean simulate) { + return 0; + } + + @Override + public int extractEnergy(final ForgeDirection from, final int maxExtract, final boolean simulate) { + return 0; + } + + @Override + public int getEnergyStored(final ForgeDirection from) { + return 0; + } + + @Override + public int getMaxEnergyStored(final ForgeDirection from) { + return 0; + } + + @Override + public boolean canConnectEnergy(final ForgeDirection from) { + return false; + } + + @Override + public PowerInterface getInterface() { + return null; + } +} diff --git a/src/main/java/binnie/core/machines/base/DefaultTankContainer.java b/src/main/java/binnie/core/machines/base/DefaultTankContainer.java new file mode 100644 index 00000000..06e8bf83 --- /dev/null +++ b/src/main/java/binnie/core/machines/base/DefaultTankContainer.java @@ -0,0 +1,82 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.base; + +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.IFluidTank; +import binnie.core.machines.inventory.TankSlot; +import binnie.core.machines.power.TankInfo; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.common.util.ForgeDirection; +import binnie.core.machines.power.ITankMachine; + +class DefaultTankContainer implements ITankMachine +{ + @Override + public int fill(final ForgeDirection from, final FluidStack resource, final boolean doFill) { + return 0; + } + + @Override + public FluidStack drain(final ForgeDirection from, final int maxDrain, final boolean doDrain) { + return null; + } + + @Override + public TankInfo[] getTankInfos() { + return new TankInfo[0]; + } + + @Override + public boolean isTankReadOnly(final int tank) { + return false; + } + + @Override + public boolean isLiquidValidForTank(final FluidStack liquid, final int tank) { + return false; + } + + @Override + public TankSlot addTank(final int index, final String name, final int capacity) { + return null; + } + + @Override + public IFluidTank getTank(final int index) { + return null; + } + + @Override + public TankSlot getTankSlot(final int slot) { + return null; + } + + @Override + public FluidStack drain(final ForgeDirection from, final FluidStack resource, final boolean doDrain) { + return null; + } + + @Override + public boolean canFill(final ForgeDirection from, final Fluid fluid) { + return false; + } + + @Override + public boolean canDrain(final ForgeDirection from, final Fluid fluid) { + return false; + } + + @Override + public FluidTankInfo[] getTankInfo(final ForgeDirection from) { + return new FluidTankInfo[0]; + } + + @Override + public IFluidTank[] getTanks() { + return new IFluidTank[0]; + } +} diff --git a/src/main/java/binnie/core/machines/base/TileEntityMachineBase.java b/src/main/java/binnie/core/machines/base/TileEntityMachineBase.java new file mode 100644 index 00000000..325d8e02 --- /dev/null +++ b/src/main/java/binnie/core/machines/base/TileEntityMachineBase.java @@ -0,0 +1,251 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.base; + +import binnie.core.machines.power.PowerInterface; +import cpw.mods.fml.common.Optional; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.IFluidTank; +import binnie.core.machines.inventory.TankSlot; +import net.minecraftforge.fluids.FluidStack; +import binnie.core.machines.power.TankInfo; +import binnie.core.machines.power.PowerInfo; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import binnie.core.machines.Machine; +import binnie.core.machines.power.IPoweredMachine; +import binnie.core.machines.power.ITankMachine; +import binnie.core.machines.inventory.IInventoryMachine; +import net.minecraft.tileentity.TileEntity; + +public class TileEntityMachineBase extends TileEntity implements IInventoryMachine, ITankMachine, IPoweredMachine +{ + public IInventoryMachine getInventory() { + final IInventoryMachine inv = Machine.getInterface(IInventoryMachine.class, this); + return (inv == null || inv == this) ? new DefaultInventory() : inv; + } + + public ITankMachine getTankContainer() { + final ITankMachine inv = Machine.getInterface(ITankMachine.class, this); + return (inv == null || inv == this) ? new DefaultTankContainer() : inv; + } + + public IPoweredMachine getPower() { + final IPoweredMachine inv = Machine.getInterface(IPoweredMachine.class, this); + return (inv == null || inv == this) ? new DefaultPower() : inv; + } + + @Override + public int getSizeInventory() { + return this.getInventory().getSizeInventory(); + } + + @Override + public ItemStack getStackInSlot(final int index) { + return this.getInventory().getStackInSlot(index); + } + + @Override + public ItemStack decrStackSize(final int index, final int amount) { + return this.getInventory().decrStackSize(index, amount); + } + + @Override + public ItemStack getStackInSlotOnClosing(final int var1) { + return this.getInventory().getStackInSlotOnClosing(var1); + } + + @Override + public void setInventorySlotContents(final int index, final ItemStack itemStack) { + this.getInventory().setInventorySlotContents(index, itemStack); + } + + @Override + public String getInventoryName() { + return this.getInventory().getInventoryName(); + } + + @Override + public int getInventoryStackLimit() { + return this.getInventory().getInventoryStackLimit(); + } + + @Override + public boolean isUseableByPlayer(final EntityPlayer entityplayer) { + return !this.isInvalid() && this.getWorldObj().getTileEntity(this.xCoord, this.yCoord, this.zCoord) == this && entityplayer.getDistanceSq(this.xCoord + 0.5, this.yCoord + 0.5, this.zCoord + 0.5) <= 64.0 && this.getInventory().isUseableByPlayer(entityplayer); + } + + @Override + public void openInventory() { + this.getInventory().openInventory(); + } + + @Override + public void closeInventory() { + this.getInventory().closeInventory(); + } + + @Override + public boolean hasCustomInventoryName() { + return this.getInventory().hasCustomInventoryName(); + } + + @Override + public void markDirty() { + super.markDirty(); + this.getInventory().markDirty(); + } + + @Override + public boolean isItemValidForSlot(final int slot, final ItemStack itemStack) { + return this.getInventory().isItemValidForSlot(slot, itemStack); + } + + @Override + public int[] getAccessibleSlotsFromSide(final int var1) { + return this.getInventory().getAccessibleSlotsFromSide(var1); + } + + @Override + public boolean canInsertItem(final int i, final ItemStack itemstack, final int j) { + return this.getInventory().canInsertItem(i, itemstack, j); + } + + @Override + public boolean canExtractItem(final int i, final ItemStack itemstack, final int j) { + return this.getInventory().canExtractItem(i, itemstack, j); + } + + @Override + public boolean isReadOnly(final int slot) { + return this.getInventory().isReadOnly(slot); + } + + @Override + public PowerInfo getPowerInfo() { + return this.getPower().getPowerInfo(); + } + + @Override + public TankInfo[] getTankInfos() { + return this.getTankContainer().getTankInfos(); + } + + @Override + public boolean isTankReadOnly(final int tank) { + return this.getTankContainer().isTankReadOnly(tank); + } + + @Override + public boolean isLiquidValidForTank(final FluidStack liquid, final int tank) { + return this.getTankContainer().isLiquidValidForTank(liquid, tank); + } + + @Override + public TankSlot addTank(final int index, final String name, final int capacity) { + return this.getTankContainer().addTank(index, name, capacity); + } + + @Override + public IFluidTank getTank(final int index) { + return this.getTankContainer().getTank(index); + } + + @Override + public TankSlot getTankSlot(final int index) { + return this.getTankContainer().getTankSlot(index); + } + + @Override + public int fill(final ForgeDirection from, final FluidStack resource, final boolean doFill) { + return this.getTankContainer().fill(from, resource, doFill); + } + + @Override + public FluidStack drain(final ForgeDirection from, final FluidStack resource, final boolean doDrain) { + return this.getTankContainer().drain(from, resource, doDrain); + } + + @Override + public FluidStack drain(final ForgeDirection from, final int maxDrain, final boolean doDrain) { + return this.getTankContainer().drain(from, maxDrain, doDrain); + } + + @Override + public boolean canFill(final ForgeDirection from, final Fluid fluid) { + return this.getTankContainer().canFill(from, fluid); + } + + @Override + public boolean canDrain(final ForgeDirection from, final Fluid fluid) { + return this.getTankContainer().canDrain(from, fluid); + } + + @Override + public FluidTankInfo[] getTankInfo(final ForgeDirection from) { + return this.getTankContainer().getTankInfo(from); + } + + @Override + public IFluidTank[] getTanks() { + return this.getTankContainer().getTanks(); + } + + @Override + @Optional.Method(modid = "IC2") + public double getDemandedEnergy() { + return this.getPower().getDemandedEnergy(); + } + + @Override + @Optional.Method(modid = "IC2") + public int getSinkTier() { + return this.getPower().getSinkTier(); + } + + @Override + @Optional.Method(modid = "IC2") + public double injectEnergy(final ForgeDirection directionFrom, final double amount, final double voltage) { + return this.getPower().injectEnergy(directionFrom, amount, voltage); + } + + @Override + @Optional.Method(modid = "IC2") + public boolean acceptsEnergyFrom(final TileEntity emitter, final ForgeDirection direction) { + return this.getPower().acceptsEnergyFrom(emitter, direction); + } + + @Override + public int receiveEnergy(final ForgeDirection from, final int maxReceive, final boolean simulate) { + return this.getPower().receiveEnergy(from, maxReceive, simulate); + } + + @Override + public int extractEnergy(final ForgeDirection from, final int maxExtract, final boolean simulate) { + return this.getPower().extractEnergy(from, maxExtract, simulate); + } + + @Override + public int getEnergyStored(final ForgeDirection from) { + return this.getPower().getEnergyStored(from); + } + + @Override + public int getMaxEnergyStored(final ForgeDirection from) { + return this.getPower().getMaxEnergyStored(from); + } + + @Override + public boolean canConnectEnergy(final ForgeDirection from) { + return this.getPower().canConnectEnergy(from); + } + + @Override + public PowerInterface getInterface() { + return this.getPower().getInterface(); + } +} diff --git a/src/main/java/binnie/core/machines/component/ComponentRecipe.java b/src/main/java/binnie/core/machines/component/ComponentRecipe.java new file mode 100644 index 00000000..3fb6e8ed --- /dev/null +++ b/src/main/java/binnie/core/machines/component/ComponentRecipe.java @@ -0,0 +1,15 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.component; + +import binnie.core.machines.Machine; +import binnie.core.machines.MachineComponent; + +public abstract class ComponentRecipe extends MachineComponent implements IComponentRecipe +{ + public ComponentRecipe(final Machine machine) { + super(machine); + } +} diff --git a/src/main/java/binnie/core/machines/component/IBuildcraft.java b/src/main/java/binnie/core/machines/component/IBuildcraft.java new file mode 100644 index 00000000..0d01799b --- /dev/null +++ b/src/main/java/binnie/core/machines/component/IBuildcraft.java @@ -0,0 +1,23 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.component; + +import buildcraft.api.statements.IActionExternal; +import buildcraft.api.statements.IActionReceptor; +import binnie.core.triggers.TriggerData; +import java.util.List; + +public interface IBuildcraft +{ + public interface TriggerProvider + { + void getTriggers(final List p0); + } + + public interface ActionProvider extends IActionReceptor + { + void getActions(final List p0); + } +} diff --git a/src/main/java/binnie/core/machines/component/IComponentRecipe.java b/src/main/java/binnie/core/machines/component/IComponentRecipe.java new file mode 100644 index 00000000..aa301175 --- /dev/null +++ b/src/main/java/binnie/core/machines/component/IComponentRecipe.java @@ -0,0 +1,16 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.component; + +import net.minecraft.item.ItemStack; + +public interface IComponentRecipe +{ + boolean isRecipe(); + + ItemStack doRecipe(final boolean p0); + + ItemStack getProduct(); +} diff --git a/src/main/java/binnie/core/machines/component/IInteraction.java b/src/main/java/binnie/core/machines/component/IInteraction.java new file mode 100644 index 00000000..d52c9865 --- /dev/null +++ b/src/main/java/binnie/core/machines/component/IInteraction.java @@ -0,0 +1,26 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.component; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; + +public interface IInteraction +{ + public interface ChunkUnload + { + void onChunkUnload(); + } + + public interface Invalidation + { + void onInvalidation(); + } + + public interface RightClick + { + void onRightClick(final World p0, final EntityPlayer p1, final int p2, final int p3, final int p4); + } +} diff --git a/src/main/java/binnie/core/machines/component/IRender.java b/src/main/java/binnie/core/machines/component/IRender.java new file mode 100644 index 00000000..dceb631f --- /dev/null +++ b/src/main/java/binnie/core/machines/component/IRender.java @@ -0,0 +1,32 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.component; + +import net.minecraft.client.renderer.entity.RenderItem; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import java.util.Random; +import net.minecraft.world.World; + +public interface IRender +{ + public interface DisplayTick + { + @SideOnly(Side.CLIENT) + void onDisplayTick(final World p0, final int p1, final int p2, final int p3, final Random p4); + } + + public interface RandomDisplayTick + { + @SideOnly(Side.CLIENT) + void onRandomDisplayTick(final World p0, final int p1, final int p2, final int p3, final Random p4); + } + + public interface Render + { + @SideOnly(Side.CLIENT) + void renderInWorld(final RenderItem p0, final double p1, final double p2, final double p3); + } +} diff --git a/src/main/java/binnie/core/machines/inventory/AccessDirection.java b/src/main/java/binnie/core/machines/inventory/AccessDirection.java new file mode 100644 index 00000000..05345ced --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/AccessDirection.java @@ -0,0 +1,99 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +enum AccessDirection +{ + Both, + In, + Out, + Neither; + + boolean canInsert() { + return this == AccessDirection.Both || this == AccessDirection.In; + } + + boolean canExtract() { + return this == AccessDirection.Both || this == AccessDirection.Out; + } + + boolean canAccess() { + return this != AccessDirection.Neither; + } + + AccessDirection changeInsert(final boolean b) { + if (b) { + if (this == AccessDirection.Out) { + return AccessDirection.Both; + } + if (this == AccessDirection.Neither) { + return AccessDirection.In; + } + } + else { + if (this == AccessDirection.Both) { + return AccessDirection.Out; + } + if (this == AccessDirection.In) { + return AccessDirection.Neither; + } + } + return this; + } + + AccessDirection changeExtract(final boolean b) { + if (b) { + if (this == AccessDirection.In) { + return AccessDirection.Both; + } + if (this == AccessDirection.Neither) { + return AccessDirection.Out; + } + } + else { + if (this == AccessDirection.Both) { + return AccessDirection.In; + } + if (this == AccessDirection.Out) { + return AccessDirection.Neither; + } + } + return this; + } + + public String getTextColour() { + switch (this) { + case Both: { + return "§a"; + } + case In: { + return "§e"; + } + case Neither: { + return "§c"; + } + default: { + return "§b"; + } + } + } + + public int getShadeColour() { + switch (this) { + case Both: { + return 1431699285; + } + case In: { + return 1442840405; + } + case Neither: { + return 1442796885; + } + default: { + return 1431699455; + } + } + } +} diff --git a/src/main/java/binnie/core/machines/inventory/BaseSlot.java b/src/main/java/binnie/core/machines/inventory/BaseSlot.java new file mode 100644 index 00000000..cf9e98ca --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/BaseSlot.java @@ -0,0 +1,128 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +import java.util.Collection; +import net.minecraftforge.common.util.ForgeDirection; +import java.util.EnumSet; +import binnie.core.util.IValidator; +import forestry.api.core.INBTTagable; + +public abstract class BaseSlot implements INBTTagable, IValidator +{ + private SidedAccess access; + Validator validator; + private boolean readOnly; + private int index; + protected String unlocName; + + public BaseSlot(final int index, final String unlocName) { + this.access = new SidedAccess(); + this.validator = null; + this.readOnly = false; + this.unlocName = ""; + this.setIndex(index); + this.setUnlocalisedName(unlocName); + } + + public void setReadOnly() { + this.readOnly = true; + this.forbidInsertion(); + } + + @Override + public boolean isValid(final T item) { + return item == null || this.validator == null || this.validator.isValid(item); + } + + public abstract T getContent(); + + public abstract void setContent(final T p0); + + public void setValidator(final Validator val) { + this.validator = val; + } + + public boolean isEmpty() { + return this.getContent() == null; + } + + public boolean isReadOnly() { + return this.readOnly; + } + + public int getIndex() { + return this.index; + } + + private void setIndex(final int index) { + this.index = index; + } + + public boolean canInsert() { + return !this.access.getInsertionSides().isEmpty(); + } + + public boolean canExtract() { + return !this.access.getExtractionSides().isEmpty(); + } + + public void forbidInteraction() { + this.forbidInsertion(); + this.forbidExtraction(); + } + + public void setInputSides(final EnumSet sides) { + for (final ForgeDirection side : EnumSet.complementOf(sides)) { + if (side != ForgeDirection.UNKNOWN) { + this.access.setInsert(side, false); + } + } + } + + public void setOutputSides(final EnumSet sides) { + for (final ForgeDirection side : EnumSet.complementOf(sides)) { + if (side != ForgeDirection.UNKNOWN) { + this.access.setExtract(side, false); + } + } + } + + public void forbidExtraction() { + this.access.setExtract(false); + this.access.forbidExtractChange(); + } + + public void forbidInsertion() { + this.access.setInsert(false); + this.access.forbidInsertChange(); + } + + public boolean canInsert(final ForgeDirection dir) { + return this.access.canInsert(dir); + } + + public boolean canExtract(final ForgeDirection dir) { + return this.access.canExtract(dir); + } + + public Collection getInputSides() { + return this.access.getInsertionSides(); + } + + public Collection getOutputSides() { + return this.access.getExtractionSides(); + } + + public void setUnlocalisedName(final String name) { + this.unlocName = name; + } + + public abstract String getName(); + + public Validator getValidator() { + return this.validator; + } +} diff --git a/src/main/java/binnie/core/machines/inventory/ComponentChargedSlots.java b/src/main/java/binnie/core/machines/inventory/ComponentChargedSlots.java new file mode 100644 index 00000000..b9888016 --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/ComponentChargedSlots.java @@ -0,0 +1,104 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagCompound; +import java.util.HashMap; +import binnie.core.machines.Machine; +import java.util.Map; +import binnie.core.machines.network.INetwork; +import binnie.core.machines.MachineComponent; + +public class ComponentChargedSlots extends MachineComponent implements INetwork.GuiNBT, IChargedSlots +{ + private Map charges; + + public ComponentChargedSlots(final Machine machine) { + super(machine); + this.charges = new HashMap(); + } + + @Override + public void readFromNBT(final NBTTagCompound nbttagcompound) { + super.readFromNBT(nbttagcompound); + this.charges.clear(); + final NBTTagList list = nbttagcompound.getTagList("charges", 10); + for (int i = 0; i < list.tagCount(); ++i) { + final NBTTagCompound tag = list.getCompoundTagAt(i); + this.charges.put((int) tag.getByte("i"), tag.getByte("v") / 100.0f); + } + } + + @Override + public void writeToNBT(final NBTTagCompound nbttagcompound) { + super.writeToNBT(nbttagcompound); + final NBTTagList chargeList = new NBTTagList(); + for (final Map.Entry entry : this.charges.entrySet()) { + final NBTTagCompound chargesNBT = new NBTTagCompound(); + chargesNBT.setByte("i", (byte) (0 + entry.getKey())); + chargesNBT.setByte("v", (byte) (entry.getValue() * 100.0f)); + chargeList.appendTag(chargesNBT); + } + nbttagcompound.setTag("charges", chargeList); + } + + public void addCharge(final int slot) { + this.charges.put(slot, 0.0f); + } + + @Override + public void recieveGuiNBT(final Side side, final EntityPlayer player, final String name, final NBTTagCompound nbt) { + if (name.equals("slot-charges")) { + for (final int i : this.charges.keySet()) { + this.charges.put(i, nbt.getShort("" + i) / 100.0f); + } + } + } + + @Override + public void sendGuiNBT(final Map nbt) { + final NBTTagCompound tag = new NBTTagCompound(); + for (final int i : this.charges.keySet()) { + tag.setShort("" + i, (short) (this.charges.get(i) * 100.0f)); + } + nbt.put("slot-charges", tag); + } + + @Override + public float getCharge(final int slot) { + return this.charges.containsKey(slot) ? this.charges.get(slot) : 0.0f; + } + + @Override + public void setCharge(final int slot, float charge) { + if (charge > 1.0f) { + charge = 1.0f; + } + if (charge < 0.0f) { + charge = 0.0f; + } + if (this.charges.containsKey(slot)) { + this.charges.put(slot, charge); + } + } + + @Override + public void onUpdate() { + for (final int slot : this.charges.keySet()) { + if (this.getCharge(slot) <= 0.0f && this.getUtil().decreaseStack(slot, 1) != null) { + this.setCharge(slot, 1.0f); + } + } + } + + @Override + public void alterCharge(final int slot, final float charge) { + this.setCharge(slot, this.getCharge(slot) + charge); + } +} diff --git a/src/main/java/binnie/core/machines/inventory/ComponentInventory.java b/src/main/java/binnie/core/machines/inventory/ComponentInventory.java new file mode 100644 index 00000000..6b99e384 --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/ComponentInventory.java @@ -0,0 +1,23 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +import binnie.core.machines.IMachine; +import net.minecraft.inventory.IInventory; +import binnie.core.machines.MachineComponent; + +public abstract class ComponentInventory extends MachineComponent implements IInventory +{ + public ComponentInventory(final IMachine machine) { + super(machine); + } + + @Override + public void markDirty() { + if (this.getMachine() != null) { + this.getMachine().markDirty(); + } + } +} diff --git a/src/main/java/binnie/core/machines/inventory/ComponentInventorySlots.java b/src/main/java/binnie/core/machines/inventory/ComponentInventorySlots.java new file mode 100644 index 00000000..3d08dacc --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/ComponentInventorySlots.java @@ -0,0 +1,234 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import java.util.List; +import java.util.ArrayList; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import java.util.LinkedHashMap; +import binnie.core.machines.IMachine; +import java.util.Map; + +public class ComponentInventorySlots extends ComponentInventory implements IInventoryMachine, IInventorySlots +{ + private Map inventory; + + public ComponentInventorySlots(final IMachine machine) { + super(machine); + this.inventory = new LinkedHashMap(); + } + + @Override + public int getSizeInventory() { + int size = 0; + for (final Integer index : this.inventory.keySet()) { + size = Math.max(size, index + 1); + } + return size; + } + + @Override + public ItemStack getStackInSlot(final int index) { + if (this.inventory.containsKey(index)) { + return this.inventory.get(index).getContent(); + } + return null; + } + + @Override + public ItemStack decrStackSize(final int index, final int amount) { + if (this.inventory.containsKey(index)) { + final ItemStack stack = this.inventory.get(index).decrStackSize(amount); + this.markDirty(); + return stack; + } + return null; + } + + @Override + public ItemStack getStackInSlotOnClosing(final int var1) { + return null; + } + + @Override + public void setInventorySlotContents(final int index, final ItemStack itemStack) { + if (this.inventory.containsKey(index) && (itemStack == null || this.inventory.get(index).isValid(itemStack))) { + this.inventory.get(index).setContent(itemStack); + } + this.markDirty(); + } + + protected void transferItem(final int indexFrom, final int indexTo) { + if (this.inventory.containsKey(indexFrom) && this.inventory.containsKey(indexTo)) { + final ItemStack newStack = this.inventory.get(indexFrom).getContent().copy(); + this.inventory.get(indexFrom).setContent(null); + this.inventory.get(indexTo).setContent(newStack); + } + this.markDirty(); + } + + @Override + public String getInventoryName() { + return ""; + } + + @Override + public int getInventoryStackLimit() { + return 64; + } + + @Override + public boolean isUseableByPlayer(final EntityPlayer var1) { + return true; + } + + @Override + public void openInventory() { + } + + @Override + public void closeInventory() { + } + + @Override + public void readFromNBT(final NBTTagCompound nbttagcompound) { + super.readFromNBT(nbttagcompound); + if (nbttagcompound.hasKey("inventory")) { + final NBTTagList inventoryNBT = nbttagcompound.getTagList("inventory", 10); + for (int i = 0; i < inventoryNBT.tagCount(); ++i) { + final NBTTagCompound slotNBT = inventoryNBT.getCompoundTagAt(i); + int index = slotNBT.getInteger("id"); + if (slotNBT.hasKey("Slot")) { + index = (slotNBT.getByte("Slot") & 0xFF); + } + if (this.inventory.containsKey(index)) { + this.inventory.get(index).readFromNBT(slotNBT); + } + } + } + this.markDirty(); + } + + @Override + public void writeToNBT(final NBTTagCompound nbttagcompound) { + super.writeToNBT(nbttagcompound); + final NBTTagList inventoryNBT = new NBTTagList(); + for (final Map.Entry entry : this.inventory.entrySet()) { + final NBTTagCompound slotNBT = new NBTTagCompound(); + slotNBT.setInteger("id", entry.getKey()); + entry.getValue().writeToNBT(slotNBT); + inventoryNBT.appendTag(slotNBT); + } + nbttagcompound.setTag("inventory", inventoryNBT); + } + + @Override + public final InventorySlot addSlot(final int index, final String unlocName) { + this.inventory.put(index, new InventorySlot(index, unlocName)); + return this.getSlot(index); + } + + @Override + public final InventorySlot[] addSlotArray(final int[] indexes, final String unlocName) { + for (final int k : indexes) { + this.addSlot(k, unlocName); + } + return this.getSlots(indexes); + } + + @Override + public InventorySlot getSlot(final int index) { + if (this.inventory.containsKey(index)) { + return this.inventory.get(index); + } + return null; + } + + @Override + public InventorySlot[] getAllSlots() { + return this.inventory.values().toArray(new InventorySlot[0]); + } + + @Override + public InventorySlot[] getSlots(final int[] indexes) { + final List list = new ArrayList(); + for (final int i : indexes) { + if (this.getSlot(i) != null) { + list.add(this.getSlot(i)); + } + } + return list.toArray(new InventorySlot[0]); + } + + @Override + public boolean isReadOnly(final int slot) { + final InventorySlot iSlot = this.getSlot(slot); + return iSlot == null || iSlot.isReadOnly(); + } + + @Override + public boolean hasCustomInventoryName() { + return true; + } + + @Override + public boolean isItemValidForSlot(final int slot, final ItemStack itemStack) { + final InventorySlot iSlot = this.getSlot(slot); + return iSlot != null && (iSlot.isValid(itemStack) && !this.isReadOnly(slot)); + } + + @Override + public void onDestruction() { + for (final InventorySlot slot : this.inventory.values()) { + final ItemStack stack = slot.getContent(); + if (!slot.isRecipe() && stack != null) { + final float f = this.getMachine().getWorld().rand.nextFloat() * 0.8f + 0.1f; + final float f2 = this.getMachine().getWorld().rand.nextFloat() * 0.8f + 0.1f; + final float f3 = this.getMachine().getWorld().rand.nextFloat() * 0.8f + 0.1f; + if (stack.stackSize == 0) { + stack.stackSize = 1; + } + final EntityItem entityitem = new EntityItem(this.getMachine().getWorld(), this.getMachine().getTileEntity().xCoord + f, this.getMachine().getTileEntity().yCoord + f2, this.getMachine().getTileEntity().zCoord + f3, stack.copy()); + final float accel = 0.05f; + entityitem.motionX = (float) this.getMachine().getWorld().rand.nextGaussian() * accel; + entityitem.motionY = (float) this.getMachine().getWorld().rand.nextGaussian() * accel + 0.2f; + entityitem.motionZ = (float) this.getMachine().getWorld().rand.nextGaussian() * accel; + this.getMachine().getWorld().spawnEntityInWorld(entityitem); + } + } + } + + @Override + public int[] getAccessibleSlotsFromSide(final int var1) { + final List slots = new ArrayList(); + for (final InventorySlot slot : this.inventory.values()) { + if (slot.canInsert() || slot.canExtract()) { + slots.add(slot.getIndex()); + } + } + final int[] ids = new int[slots.size()]; + for (int i = 0; i < slots.size(); ++i) { + ids[i] = slots.get(i); + } + return ids; + } + + @Override + public boolean canInsertItem(final int i, final ItemStack itemstack, final int j) { + return this.isItemValidForSlot(i, itemstack) && this.getSlot(i).canInsert(ForgeDirection.getOrientation(j)); + } + + @Override + public boolean canExtractItem(final int i, final ItemStack itemstack, final int j) { + return this.getSlot(i).canExtract(ForgeDirection.getOrientation(j)); + } +} diff --git a/src/main/java/binnie/core/machines/inventory/ComponentInventoryTransfer.java b/src/main/java/binnie/core/machines/inventory/ComponentInventoryTransfer.java new file mode 100644 index 00000000..04fdf62f --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/ComponentInventoryTransfer.java @@ -0,0 +1,147 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +import binnie.core.machines.transfer.TransferRequest; +import net.minecraft.item.ItemStack; +import net.minecraft.inventory.IInventory; +import java.util.ArrayList; +import binnie.core.machines.IMachine; +import java.util.List; +import binnie.core.machines.MachineComponent; + +public class ComponentInventoryTransfer extends MachineComponent +{ + private List transfers; + + public ComponentInventoryTransfer(final IMachine machine) { + super(machine); + this.transfers = new ArrayList(); + } + + public void addRestock(final int[] buffer, final int destination, final int limit) { + this.transfers.add(new Restock(this.getMachine(), buffer, destination, limit)); + } + + public void addRestock(final int[] buffer, final int destination) { + this.transfers.add(new Restock(this.getMachine(), buffer, destination)); + } + + public void addStorage(final int source, final int[] destination) { + this.transfers.add(new Storage(this.getMachine(), source, destination)); + } + + public void performTransfer(final int source, final int[] destination) { + new Storage(this.getMachine(), source, destination).transfer(this.getMachine().getInterface(IInventoryMachine.class)); + } + + @Override + public void onUpdate() { + for (final Transfer transfer : this.transfers) { + transfer.transfer(this.getMachine().getInterface(IInventoryMachine.class)); + } + } + + public void addStorage(final int source, final int[] destination, final Condition condition) { + this.transfers.add(new Storage(this.getMachine(), source, destination).setCondition(condition)); + } + + public abstract class Transfer + { + protected Condition condition; + protected IMachine machine; + + private Transfer(final IMachine machine) { + this.machine = machine; + } + + public final void transfer(final IInventory inv) { + if (this.condition == null || this.fufilled(inv)) { + this.doTransfer(inv); + } + } + + protected boolean fufilled(final IInventory inv) { + return true; + } + + protected void doTransfer(final IInventory inv) { + } + + public final Transfer setCondition(final Condition condition) { + this.condition = condition; + return condition.transfer = this; + } + + public final IMachine getMachine() { + return this.machine; + } + } + + private class Restock extends Transfer + { + int[] buffer; + int destination; + int limit; + + private Restock(final IMachine machine, final int[] buffer, final int destination, final int limit) { + super(machine); + this.buffer = buffer; + this.destination = destination; + this.limit = limit; + } + + private Restock(final IMachine machine, final int[] buffer, final int destination) { + this(machine, buffer, destination, 64); + } + + @Override + protected void doTransfer(final IInventory inv) { + if (inv.getStackInSlot(this.destination) == null) { + for (final int i : this.buffer) { + if (inv.getStackInSlot(i) != null) { + final ItemStack newStack = inv.decrStackSize(i, this.limit); + if (newStack != null) { + inv.setInventorySlotContents(this.destination, newStack); + return; + } + } + } + } + } + } + + private class Storage extends Transfer + { + int source; + int[] destination; + + private Storage(final IMachine machine, final int source, final int[] destination) { + super(machine); + this.source = source; + this.destination = destination; + } + + @Override + protected void doTransfer(final IInventory inv) { + if (inv.getStackInSlot(this.source) != null) { + inv.setInventorySlotContents(this.source, new TransferRequest(inv.getStackInSlot(this.source), inv).setTargetSlots(this.destination).ignoreValidation().transfer(true)); + } + } + + @Override + protected boolean fufilled(final IInventory inv) { + final ItemStack stack = inv.getStackInSlot(this.source); + return stack != null && this.condition.fufilled(stack); + } + } + + public abstract static class Condition + { + public Transfer transfer; + + public abstract boolean fufilled(final ItemStack p0); + } +} diff --git a/src/main/java/binnie/core/machines/inventory/ComponentTankContainer.java b/src/main/java/binnie/core/machines/inventory/ComponentTankContainer.java new file mode 100644 index 00000000..1c7f2f30 --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/ComponentTankContainer.java @@ -0,0 +1,199 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.Fluid; +import java.util.List; +import java.util.ArrayList; +import net.minecraftforge.fluids.IFluidTank; +import binnie.core.machines.power.TankInfo; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.common.util.ForgeDirection; +import java.util.LinkedHashMap; +import binnie.core.machines.IMachine; +import java.util.Map; +import binnie.core.machines.power.ITankMachine; +import binnie.core.machines.MachineComponent; + +public class ComponentTankContainer extends MachineComponent implements ITankMachine +{ + private Map tanks; + + public ComponentTankContainer(final IMachine machine) { + super(machine); + this.tanks = new LinkedHashMap(); + } + + @Override + public final TankSlot addTank(final int index, final String name, final int capacity) { + final TankSlot tank = new TankSlot(index, name, capacity); + this.tanks.put(index, tank); + return tank; + } + + @Override + public final int fill(final ForgeDirection from, final FluidStack resource, final boolean doFill) { + final int index = this.getTankIndexToFill(from, resource); + if (this.tanks.containsKey(index)) { + return this.fill(index, resource, doFill); + } + return 0; + } + + @Override + public final FluidStack drain(final ForgeDirection from, final int maxDrain, final boolean doDrain) { + final int index = this.getTankIndexToDrain(from, null); + if (this.tanks.containsKey(index)) { + return this.drain(index, maxDrain, doDrain); + } + return null; + } + + private final int fill(final int tankIndex, final FluidStack resource, final boolean doFill) { + if (!this.tanks.containsKey(tankIndex)) { + return 0; + } + if (!this.isLiquidValidForTank(resource, tankIndex)) { + return 0; + } + final TankSlot tank = this.tanks.get(tankIndex); + final int filled = tank.getTank().fill(resource, doFill); + if (filled > 0) { + this.markDirty(); + } + return filled; + } + + private final FluidStack drain(final int tankIndex, final int maxDrain, final boolean doDrain) { + if (!this.tanks.containsKey(tankIndex)) { + return null; + } + final TankSlot tank = this.tanks.get(tankIndex); + final FluidStack drained = tank.getTank().drain(maxDrain, doDrain); + if (drained != null) { + this.markDirty(); + } + return drained; + } + + private int getTankIndexToFill(final ForgeDirection from, final FluidStack resource) { + for (final TankSlot tank : this.tanks.values()) { + if (tank.isValid(resource) && tank.canInsert(from) && (tank.getContent() == null || tank.getContent().isFluidEqual(resource))) { + return tank.getIndex(); + } + } + return -1; + } + + private int getTankIndexToDrain(final ForgeDirection from, final FluidStack resource) { + for (final TankSlot tank : this.tanks.values()) { + if (tank.getContent() != null && tank.canExtract(from) && (resource == null || resource.isFluidEqual(tank.getContent()))) { + return tank.getIndex(); + } + } + return -1; + } + + @Override + public void readFromNBT(final NBTTagCompound nbttagcompound) { + super.readFromNBT(nbttagcompound); + if (nbttagcompound.hasKey("liquidTanks")) { + final NBTTagList tanksNBT = nbttagcompound.getTagList("liquidTanks", 10); + for (int i = 0; i < tanksNBT.tagCount(); ++i) { + final NBTTagCompound tankNBT = tanksNBT.getCompoundTagAt(i); + final int index = tankNBT.getInteger("index"); + if (this.tanks.containsKey(index)) { + this.tanks.get(index).readFromNBT(tankNBT); + } + } + } + } + + @Override + public void writeToNBT(final NBTTagCompound nbttagcompound) { + super.writeToNBT(nbttagcompound); + final NBTTagList tanksNBT = new NBTTagList(); + for (final Map.Entry entry : this.tanks.entrySet()) { + final NBTTagCompound tankNBT = new NBTTagCompound(); + tankNBT.setInteger("index", entry.getKey()); + entry.getValue().writeToNBT(tankNBT); + tanksNBT.appendTag(tankNBT); + } + nbttagcompound.setTag("liquidTanks", tanksNBT); + } + + @Override + public boolean isTankReadOnly(final int tank) { + return this.tanks.get(tank).isReadOnly(); + } + + @Override + public boolean isLiquidValidForTank(final FluidStack liquid, final int tank) { + final TankSlot slot = this.getTankSlot(tank); + return slot != null && (slot.isValid(liquid) && !slot.isReadOnly()); + } + + @Override + public TankInfo[] getTankInfos() { + return TankInfo.get(this); + } + + @Override + public IFluidTank getTank(final int index) { + return this.getTanks()[index]; + } + + @Override + public IFluidTank[] getTanks() { + final List ltanks = new ArrayList(); + for (final TankSlot tank : this.tanks.values()) { + ltanks.add(tank.getTank()); + } + return ltanks.toArray(new IFluidTank[0]); + } + + @Override + public TankSlot getTankSlot(final int index) { + return this.tanks.get(index); + } + + @Override + public FluidStack drain(final ForgeDirection from, final FluidStack resource, final boolean doDrain) { + final int index = this.getTankIndexToDrain(from, null); + if (this.tanks.containsKey(index)) { + return this.drain(index, resource.amount, doDrain); + } + return null; + } + + @Override + public boolean canFill(final ForgeDirection from, final Fluid fluid) { + return this.fill(from, new FluidStack(fluid, 1), false) > 0; + } + + @Override + public boolean canDrain(final ForgeDirection from, final Fluid fluid) { + return this.drain(from, new FluidStack(fluid, 1), false) != null; + } + + @Override + public FluidTankInfo[] getTankInfo(final ForgeDirection from) { + final FluidTankInfo[] info = new FluidTankInfo[this.getTanks().length]; + for (int i = 0; i < info.length; ++i) { + info[i] = new FluidTankInfo(this.getTanks()[i]); + } + return info; + } + + public void markDirty() { + if (this.getMachine() != null) { + this.getMachine().markDirty(); + } + } +} diff --git a/src/main/java/binnie/core/machines/inventory/IChargedSlots.java b/src/main/java/binnie/core/machines/inventory/IChargedSlots.java new file mode 100644 index 00000000..63f9f264 --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/IChargedSlots.java @@ -0,0 +1,14 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +public interface IChargedSlots +{ + float getCharge(final int p0); + + void setCharge(final int p0, final float p1); + + void alterCharge(final int p0, final float p1); +} diff --git a/src/main/java/binnie/core/machines/inventory/IInventoryMachine.java b/src/main/java/binnie/core/machines/inventory/IInventoryMachine.java new file mode 100644 index 00000000..2f1b5836 --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/IInventoryMachine.java @@ -0,0 +1,12 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.inventory.IInventory; + +public interface IInventoryMachine extends IInventory, ISidedInventory, IValidatedInventory +{ +} diff --git a/src/main/java/binnie/core/machines/inventory/IInventorySlots.java b/src/main/java/binnie/core/machines/inventory/IInventorySlots.java new file mode 100644 index 00000000..0e5cce39 --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/IInventorySlots.java @@ -0,0 +1,18 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +public interface IInventorySlots +{ + InventorySlot addSlot(final int p0, final String p1); + + InventorySlot[] addSlotArray(final int[] p0, final String p1); + + InventorySlot getSlot(final int p0); + + InventorySlot[] getSlots(final int[] p0); + + InventorySlot[] getAllSlots(); +} diff --git a/src/main/java/binnie/core/machines/inventory/IValidatedInventory.java b/src/main/java/binnie/core/machines/inventory/IValidatedInventory.java new file mode 100644 index 00000000..742b647a --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/IValidatedInventory.java @@ -0,0 +1,12 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +import net.minecraft.inventory.IInventory; + +interface IValidatedInventory extends IInventory +{ + boolean isReadOnly(final int p0); +} diff --git a/src/main/java/binnie/core/machines/inventory/IValidatedTankContainer.java b/src/main/java/binnie/core/machines/inventory/IValidatedTankContainer.java new file mode 100644 index 00000000..84136a1d --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/IValidatedTankContainer.java @@ -0,0 +1,14 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +import net.minecraftforge.fluids.FluidStack; + +public interface IValidatedTankContainer +{ + boolean isTankReadOnly(final int p0); + + boolean isLiquidValidForTank(final FluidStack p0, final int p1); +} diff --git a/src/main/java/binnie/core/machines/inventory/InventorySlot.java b/src/main/java/binnie/core/machines/inventory/InventorySlot.java new file mode 100644 index 00000000..007a9a29 --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/InventorySlot.java @@ -0,0 +1,109 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +import binnie.core.BinnieCore; +import binnie.Binnie; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.item.ItemStack; + +public class InventorySlot extends BaseSlot +{ + private ItemStack itemStack; + private Type type; + + public InventorySlot(final int index, final String unlocName) { + super(index, unlocName); + this.itemStack = null; + this.type = Type.Standard; + } + + @Override + public ItemStack getContent() { + return this.itemStack; + } + + public ItemStack getItemStack() { + return this.getContent(); + } + + @Override + public void setContent(final ItemStack itemStack) { + this.itemStack = itemStack; + } + + public ItemStack decrStackSize(final int amount) { + if (this.itemStack == null) { + return null; + } + if (this.itemStack.stackSize <= amount) { + final ItemStack returnStack = this.itemStack.copy(); + this.itemStack = null; + return returnStack; + } + final ItemStack returnStack = this.itemStack.copy(); + final ItemStack itemStack = this.itemStack; + itemStack.stackSize -= amount; + returnStack.stackSize = amount; + return returnStack; + } + + @Override + public void readFromNBT(final NBTTagCompound slotNBT) { + if (slotNBT.hasKey("item")) { + final NBTTagCompound itemNBT = slotNBT.getCompoundTag("item"); + this.itemStack = ItemStack.loadItemStackFromNBT(itemNBT); + } + else { + this.itemStack = null; + } + } + + @Override + public void writeToNBT(final NBTTagCompound slotNBT) { + final NBTTagCompound itemNBT = new NBTTagCompound(); + if (this.itemStack != null) { + this.itemStack.writeToNBT(itemNBT); + } + slotNBT.setTag("item", itemNBT); + } + + public void setItemStack(final ItemStack duplicate) { + this.setContent(duplicate); + } + + @Override + public SlotValidator getValidator() { + return (SlotValidator) this.validator; + } + + public void setType(final Type type) { + this.type = type; + if (type == Type.Recipe) { + this.setReadOnly(); + this.forbidInteraction(); + } + } + + public Type getType() { + return this.type; + } + + public boolean isRecipe() { + return this.type == Type.Recipe; + } + + @Override + public String getName() { + return Binnie.Language.localise(BinnieCore.instance, "gui.slot." + this.unlocName); + } + + public enum Type + { + Standard, + Recipe; + } +} diff --git a/src/main/java/binnie/core/machines/inventory/MachineSide.java b/src/main/java/binnie/core/machines/inventory/MachineSide.java new file mode 100644 index 00000000..2d9d8f14 --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/MachineSide.java @@ -0,0 +1,83 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +import java.util.Collection; +import net.minecraftforge.common.util.ForgeDirection; +import java.util.EnumSet; + +public class MachineSide +{ + private static EnumSet All; + public static EnumSet TopAndBottom; + public static EnumSet None; + public static EnumSet Top; + public static EnumSet Bottom; + public static EnumSet Sides; + + public static String asString(final Collection sides) { + if (sides.containsAll(MachineSide.All)) { + return "Any"; + } + if (sides.isEmpty()) { + return "None"; + } + String text = ""; + if (sides.contains(ForgeDirection.UP)) { + if (sides.size() > 0) { + text += ", "; + } + text += "Up"; + } + if (sides.contains(ForgeDirection.DOWN)) { + if (sides.size() > 0) { + text += ", "; + } + text += "Down"; + } + if (sides.containsAll(MachineSide.Sides)) { + if (sides.size() > 0) { + text += ", "; + } + text += "Sides"; + } + else { + if (sides.contains(ForgeDirection.NORTH)) { + if (sides.size() > 0) { + text += ", "; + } + text += "North"; + } + if (sides.contains(ForgeDirection.EAST)) { + if (sides.size() > 0) { + text += ", "; + } + text += "East"; + } + if (sides.contains(ForgeDirection.SOUTH)) { + if (sides.size() > 0) { + text += ", "; + } + text += "South"; + } + if (sides.contains(ForgeDirection.WEST)) { + if (sides.size() > 0) { + text += ", "; + } + text += "West"; + } + } + return text; + } + + static { + MachineSide.All = EnumSet.of(ForgeDirection.UP, ForgeDirection.DOWN, ForgeDirection.NORTH, ForgeDirection.SOUTH, ForgeDirection.EAST, ForgeDirection.WEST); + MachineSide.TopAndBottom = EnumSet.of(ForgeDirection.UP, ForgeDirection.DOWN); + MachineSide.None = EnumSet.noneOf(ForgeDirection.class); + MachineSide.Top = EnumSet.of(ForgeDirection.UP); + MachineSide.Bottom = EnumSet.of(ForgeDirection.DOWN); + MachineSide.Sides = EnumSet.of(ForgeDirection.NORTH, ForgeDirection.SOUTH, ForgeDirection.EAST, ForgeDirection.WEST); + } +} diff --git a/src/main/java/binnie/core/machines/inventory/SetList.java b/src/main/java/binnie/core/machines/inventory/SetList.java new file mode 100644 index 00000000..4e7eeab5 --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/SetList.java @@ -0,0 +1,38 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +import java.util.Collection; +import java.util.Set; +import java.util.ArrayList; + +public class SetList extends ArrayList implements Set +{ + private static final long serialVersionUID = 1277112003159980135L; + + @Override + public boolean add(final E e) { + return !this.contains(e) && super.add(e); + } + + @Override + public void add(final int index, final E e) { + if (!this.contains(e)) { + super.add(index, e); + } + } + + @Override + public boolean addAll(final Collection c) { + return this.addAll(this.size(), c); + } + + @Override + public boolean addAll(final int index, final Collection c) { + final Collection copy = new ArrayList(c); + copy.removeAll(this); + return super.addAll(index, copy); + } +} diff --git a/src/main/java/binnie/core/machines/inventory/SidedAccess.java b/src/main/java/binnie/core/machines/inventory/SidedAccess.java new file mode 100644 index 00000000..8e3e8c5c --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/SidedAccess.java @@ -0,0 +1,103 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +import java.util.List; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import net.minecraftforge.common.util.ForgeDirection; +import java.util.Map; + +class SidedAccess +{ + private Map accesses; + private AccessDirection base; + private boolean insertLocked; + private boolean extractLocked; + + public SidedAccess() { + this.accesses = new HashMap(); + this.base = AccessDirection.Both; + this.insertLocked = false; + this.extractLocked = false; + } + + public AccessDirection getAccess(final ForgeDirection side) { + return this.accesses.containsKey(side) ? this.accesses.get(side) : this.base; + } + + public boolean canInsert(final ForgeDirection side) { + return this.getAccess(side).canInsert(); + } + + public boolean canExtract(final ForgeDirection side) { + return this.getAccess(side).canExtract(); + } + + public boolean canAccess(final ForgeDirection side) { + return this.getAccess(side).canAccess(); + } + + public boolean canChangeInsert() { + return !this.insertLocked; + } + + public boolean canChangeExtract() { + return !this.extractLocked; + } + + public void forbidInsertChange() { + this.insertLocked = true; + } + + public void forbidExtractChange() { + this.extractLocked = true; + } + + public Collection getInsertionSides() { + final List dirs = new ArrayList(); + for (final ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + if (this.getAccess(dir).canInsert()) { + dirs.add(dir); + } + } + return dirs; + } + + public Collection getExtractionSides() { + final List dirs = new ArrayList(); + for (final ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + if (this.getAccess(dir).canExtract()) { + dirs.add(dir); + } + } + return dirs; + } + + public void setInsert(final ForgeDirection side, final boolean b) { + if (this.getAccess(side).canInsert() != b) { + this.accesses.put(side, this.getAccess(side).changeInsert(b)); + } + } + + public void setExtract(final ForgeDirection side, final boolean b) { + if (this.getAccess(side).canExtract() != b) { + this.accesses.put(side, this.getAccess(side).changeExtract(b)); + } + } + + public void setInsert(final boolean b) { + if (this.base.canInsert() != b) { + this.base = this.base.changeInsert(b); + } + } + + public void setExtract(final boolean b) { + if (this.base.canExtract() != b) { + this.base = this.base.changeExtract(b); + } + } +} diff --git a/src/main/java/binnie/core/machines/inventory/SlotValidator.java b/src/main/java/binnie/core/machines/inventory/SlotValidator.java new file mode 100644 index 00000000..04cea0aa --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/SlotValidator.java @@ -0,0 +1,63 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +import forestry.api.genetics.AlleleManager; +import net.minecraft.util.IIcon; +import net.minecraft.item.ItemStack; + +public abstract class SlotValidator extends Validator +{ + public static ValidatorIcon IconBee; + public static ValidatorIcon IconFrame; + public static ValidatorIcon IconCircuit; + public static ValidatorIcon IconBlock; + private ValidatorIcon icon; + + public SlotValidator(final ValidatorIcon icon) { + this.icon = icon; + } + + public IIcon getIcon(final boolean input) { + return (this.icon == null) ? null : this.icon.getIcon(input).getIcon(); + } + + public static class Item extends SlotValidator + { + private ItemStack target; + + public Item(final ItemStack target, final ValidatorIcon icon) { + super(icon); + this.target = target; + } + + @Override + public boolean isValid(final ItemStack itemStack) { + return itemStack.isItemEqual(this.target); + } + + @Override + public String getTooltip() { + return this.target.getDisplayName(); + } + } + + public static class Individual extends SlotValidator + { + public Individual() { + super(null); + } + + @Override + public boolean isValid(final ItemStack itemStack) { + return AlleleManager.alleleRegistry.getIndividual(itemStack) != null; + } + + @Override + public String getTooltip() { + return "Breedable Individual"; + } + } +} diff --git a/src/main/java/binnie/core/machines/inventory/TankSlot.java b/src/main/java/binnie/core/machines/inventory/TankSlot.java new file mode 100644 index 00000000..2fff7a2d --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/TankSlot.java @@ -0,0 +1,61 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +import binnie.core.BinnieCore; +import binnie.Binnie; +import net.minecraftforge.fluids.IFluidTank; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.FluidStack; + +public class TankSlot extends BaseSlot +{ + public static final String NameJuice = "Juice Tank"; + public static final String NameWater = "Water Tank"; + public static String NameCupboard; + private FluidTank tank; + + public TankSlot(final int index, final String name, final int capacity) { + super(index, name); + this.tank = new FluidTank(capacity); + } + + @Override + public void readFromNBT(final NBTTagCompound nbttagcompound) { + final FluidStack liquid = FluidStack.loadFluidStackFromNBT(nbttagcompound); + this.setContent(liquid); + } + + @Override + public void writeToNBT(final NBTTagCompound nbttagcompound) { + if (this.getContent() != null) { + this.getContent().writeToNBT(nbttagcompound); + } + } + + @Override + public FluidStack getContent() { + return this.tank.getFluid(); + } + + @Override + public void setContent(final FluidStack itemStack) { + this.tank.setFluid(itemStack); + } + + public IFluidTank getTank() { + return this.tank; + } + + @Override + public String getName() { + return Binnie.Language.localise(BinnieCore.instance, "gui.slot." + this.unlocName); + } + + static { + TankSlot.NameCupboard = "Cupboard Slot"; + } +} diff --git a/src/main/java/binnie/core/machines/inventory/TankValidator.java b/src/main/java/binnie/core/machines/inventory/TankValidator.java new file mode 100644 index 00000000..e9e16c5d --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/TankValidator.java @@ -0,0 +1,34 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +import binnie.Binnie; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +public abstract class TankValidator extends Validator +{ + @Override + public abstract boolean isValid(final FluidStack p0); + + public static class Basic extends TankValidator + { + private Fluid fluid; + + public Basic(final String name) { + this.fluid = Binnie.Liquid.getLiquidStack(name, 1).getFluid(); + } + + @Override + public boolean isValid(final FluidStack stack) { + return new FluidStack(this.fluid, 1).isFluidEqual(stack); + } + + @Override + public String getTooltip() { + return new FluidStack(this.fluid, 1).getLocalizedName(); + } + } +} diff --git a/src/main/java/binnie/core/machines/inventory/TransferHandler.java b/src/main/java/binnie/core/machines/inventory/TransferHandler.java new file mode 100644 index 00000000..fd43e3f0 --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/TransferHandler.java @@ -0,0 +1,211 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +import net.minecraftforge.fluids.FluidStack; +import binnie.core.machines.Machine; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.IFluidTank; +import binnie.core.machines.power.ITankMachine; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; + +public class TransferHandler +{ + public static ItemStack transfer(final ItemStack item, final IInventory origin, final IInventory destination, final boolean doAdd) { + ItemStack ret = transferItemToInventory(item, destination, doAdd); + if (destination instanceof ITankMachine) { + ret = transferContainerIntoTank(ret, origin, (ITankMachine) destination, doAdd); + ret = transferTankIntoContainer(ret, origin, (ITankMachine) destination, doAdd); + } + return ret; + } + + public static ItemStack transferItemToInventory(final ItemStack item, final IInventory destination, final boolean doAdd) { + if (item == null || destination == null) { + return item; + } + ItemStack addition = item.copy(); + for (int i = 0; i < destination.getSizeInventory(); ++i) { + addition = transferToInventory(addition, destination, new int[] { i }, doAdd, false); + if (addition == null) { + return null; + } + } + return addition; + } + + public static ItemStack transferToInventory(ItemStack item, final IInventory destination, final int[] targetSlots, final boolean doAdd, final boolean ignoreValidation) { + for (final int i : targetSlots) { + if (destination.isItemValidForSlot(i, item) || ignoreValidation) { + if (destination.getStackInSlot(i) == null) { + if (doAdd) { + destination.setInventorySlotContents(i, item.copy()); + } + return null; + } + if (item.isStackable()) { + final ItemStack merged = destination.getStackInSlot(i).copy(); + final ItemStack[] newStacks = mergeStacks(item.copy(), merged.copy()); + item = newStacks[0]; + if (doAdd) { + destination.setInventorySlotContents(i, newStacks[1]); + } + if (item == null) { + return null; + } + } + } + } + return item; + } + + public static ItemStack[] mergeStacks(ItemStack itemstack, final ItemStack merged) { + if (ItemStack.areItemStackTagsEqual(itemstack, merged) && itemstack.isItemEqual(merged)) { + final int space = merged.getMaxStackSize() - merged.stackSize; + if (space > 0) { + if (itemstack.stackSize > space) { + final ItemStack itemStack = itemstack; + itemStack.stackSize -= space; + merged.stackSize += space; + } + else if (itemstack.stackSize <= space) { + merged.stackSize += itemstack.stackSize; + itemstack = null; + } + } + } + return new ItemStack[] { itemstack, merged }; + } + + public static ItemStack transferContainerIntoTank(final ItemStack item, final IInventory origin, final ITankMachine destination, final boolean doAdd) { + if (item == null) { + return null; + } + final IFluidTank[] tanks = destination.getTanks(); + ItemStack stack = item.copy(); + for (int i = 0; i < tanks.length; ++i) { + stack = transferToTank(stack, origin, destination, i, doAdd); + } + return stack; + } + + public static ItemStack transferTankIntoContainer(final ItemStack item, final IInventory origin, final ITankMachine destination, final boolean doAdd) { + if (item == null) { + return null; + } + final IFluidTank[] tanks = destination.getTanks(); + ItemStack stack = item.copy(); + for (int i = 0; i < tanks.length; ++i) { + stack = transferFromTank(stack, origin, destination, i, doAdd); + } + return stack; + } + + public static ItemStack transferToTank(final ItemStack item, final IInventory origin, final ITankMachine destination, final int tankID, final boolean doAdd) { + if (item == null) { + return item; + } + FluidStack containerLiquid = null; + FluidContainerRegistry.FluidContainerData containerLiquidData = null; + for (final FluidContainerRegistry.FluidContainerData data : FluidContainerRegistry.getRegisteredFluidContainerData()) { + if (data.filledContainer.isItemEqual(item)) { + containerLiquidData = data; + containerLiquid = data.fluid.copy(); + break; + } + } + if (containerLiquid == null) { + return item; + } + final IFluidTank tank = destination.getTanks()[tankID]; + final IValidatedTankContainer validated = Machine.getInterface(IValidatedTankContainer.class, destination); + if (validated != null && !validated.isLiquidValidForTank(containerLiquid, tankID)) { + return item; + } + final FluidStack largeAmountOfLiquid = containerLiquid.copy(); + largeAmountOfLiquid.amount = tank.getCapacity(); + final int amountAdded = tank.fill(largeAmountOfLiquid, false); + int numberOfContainersToAdd = amountAdded / containerLiquid.amount; + if (numberOfContainersToAdd > item.stackSize) { + numberOfContainersToAdd = item.stackSize; + } + final ItemStack copy; + ItemStack leftOverContainers = copy = item.copy(); + copy.stackSize -= numberOfContainersToAdd; + if (leftOverContainers.stackSize <= 0) { + leftOverContainers = null; + } + ItemStack emptyContainers = containerLiquidData.emptyContainer.copy(); + emptyContainers.stackSize = 0; + final ItemStack itemStack = emptyContainers; + itemStack.stackSize += numberOfContainersToAdd; + if (emptyContainers.stackSize <= 0) { + emptyContainers = null; + } + final ItemStack containersThatCantBeDumped = transferItemToInventory(emptyContainers, origin, false); + if (containersThatCantBeDumped != null) { + return item; + } + if (doAdd) { + final FluidStack copy2; + final FluidStack liquidToFillTank = copy2 = containerLiquid.copy(); + copy2.amount *= numberOfContainersToAdd; + tank.fill(liquidToFillTank, true); + transferItemToInventory(emptyContainers, origin, true); + } + return leftOverContainers; + } + + public static ItemStack transferFromTank(final ItemStack item, final IInventory origin, final ITankMachine destination, final int tankID, final boolean doAdd) { + if (item == null) { + return item; + } + final IFluidTank tank = destination.getTanks()[tankID]; + final FluidStack liquidInTank = tank.getFluid(); + if (liquidInTank == null) { + return item; + } + FluidContainerRegistry.FluidContainerData containerLiquidData = null; + for (final FluidContainerRegistry.FluidContainerData data : FluidContainerRegistry.getRegisteredFluidContainerData()) { + if (data.emptyContainer.isItemEqual(item) && liquidInTank.isFluidEqual(data.fluid)) { + containerLiquidData = data; + break; + } + } + if (containerLiquidData == null) { + return item; + } + final int maximumExtractedLiquid = item.stackSize * containerLiquidData.fluid.amount; + final FluidStack drainedLiquid = tank.drain(maximumExtractedLiquid, false); + final int amountInTank = (drainedLiquid == null) ? 0 : drainedLiquid.amount; + int numberOfContainersToFill = amountInTank / containerLiquidData.fluid.amount; + if (numberOfContainersToFill > item.stackSize) { + numberOfContainersToFill = item.stackSize; + } + final ItemStack copy; + ItemStack leftOverContainers = copy = item.copy(); + copy.stackSize -= numberOfContainersToFill; + if (leftOverContainers.stackSize <= 0) { + leftOverContainers = null; + } + ItemStack filledContainers = containerLiquidData.filledContainer.copy(); + filledContainers.stackSize = 0; + final ItemStack itemStack = filledContainers; + itemStack.stackSize += numberOfContainersToFill; + if (filledContainers.stackSize <= 0) { + filledContainers = null; + } + final ItemStack containersThatCantBeDumped = transferItemToInventory(filledContainers, origin, false); + if (containersThatCantBeDumped != null) { + return item; + } + if (doAdd) { + tank.drain(maximumExtractedLiquid, true); + transferItemToInventory(filledContainers, origin, true); + } + return leftOverContainers; + } +} diff --git a/src/main/java/binnie/core/machines/inventory/Validator.java b/src/main/java/binnie/core/machines/inventory/Validator.java new file mode 100644 index 00000000..5d77c298 --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/Validator.java @@ -0,0 +1,12 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +import binnie.core.util.IValidator; + +public abstract class Validator implements IValidator +{ + public abstract String getTooltip(); +} diff --git a/src/main/java/binnie/core/machines/inventory/ValidatorIcon.java b/src/main/java/binnie/core/machines/inventory/ValidatorIcon.java new file mode 100644 index 00000000..038bb612 --- /dev/null +++ b/src/main/java/binnie/core/machines/inventory/ValidatorIcon.java @@ -0,0 +1,28 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.inventory; + +import binnie.Binnie; +import java.util.ArrayList; +import binnie.core.AbstractMod; +import binnie.core.resource.BinnieIcon; +import java.util.List; + +public class ValidatorIcon +{ + private List iconsInput; + private List iconsOutput; + + public ValidatorIcon(final AbstractMod mod, final String pathInput, final String pathOutput) { + this.iconsInput = new ArrayList(); + this.iconsOutput = new ArrayList(); + this.iconsInput.add(Binnie.Resource.getItemIcon(mod, pathInput)); + this.iconsOutput.add(Binnie.Resource.getItemIcon(mod, pathOutput)); + } + + public BinnieIcon getIcon(final boolean input) { + return input ? this.iconsInput.get(0) : this.iconsOutput.get(0); + } +} diff --git a/src/main/java/binnie/core/machines/network/INetwork.java b/src/main/java/binnie/core/machines/network/INetwork.java new file mode 100644 index 00000000..179fe89a --- /dev/null +++ b/src/main/java/binnie/core/machines/network/INetwork.java @@ -0,0 +1,34 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.network; + +import net.minecraft.entity.player.EntityPlayer; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.nbt.NBTTagCompound; +import java.util.Map; + +public interface INetwork +{ + public interface SendGuiNBT + { + void sendGuiNBT(final Map p0); + } + + public interface TilePacketSync + { + void syncToNBT(final NBTTagCompound p0); + + void syncFromNBT(final NBTTagCompound p0); + } + + public interface RecieveGuiNBT + { + void recieveGuiNBT(final Side p0, final EntityPlayer p1, final String p2, final NBTTagCompound p3); + } + + public interface GuiNBT extends RecieveGuiNBT, SendGuiNBT + { + } +} diff --git a/src/main/java/binnie/core/machines/power/ComponentPowerReceptor.java b/src/main/java/binnie/core/machines/power/ComponentPowerReceptor.java new file mode 100644 index 00000000..9a4b4256 --- /dev/null +++ b/src/main/java/binnie/core/machines/power/ComponentPowerReceptor.java @@ -0,0 +1,186 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.power; + +import ic2.api.energy.event.EnergyTileUnloadEvent; +import cpw.mods.fml.common.eventhandler.Event; +import ic2.api.energy.event.EnergyTileLoadEvent; +import ic2.api.energy.tile.IEnergyTile; +import net.minecraftforge.common.MinecraftForge; +import binnie.core.Mods; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; +import binnie.core.triggers.TriggerPower; +import binnie.core.triggers.TriggerData; +import java.util.List; +import net.minecraft.nbt.NBTTagCompound; +import binnie.core.machines.IMachine; +import java.util.LinkedList; +import cpw.mods.fml.common.Optional; +import binnie.core.machines.component.IInteraction; +import binnie.core.machines.component.IBuildcraft; +import binnie.core.machines.MachineComponent; + +@Optional.Interface(iface = "binnie.core.machines.component.IBuildcraft.TriggerProvider", modid = "BuildCraft|Silicon") +public class ComponentPowerReceptor extends MachineComponent implements IPoweredMachine, IBuildcraft.TriggerProvider, IInteraction.ChunkUnload, IInteraction.Invalidation +{ + private boolean registeredToIC2EnergyNet; + float previousPower; + LinkedList inputs; + static final int inputAverageTicks = 20; + private PowerInterface container; + + public ComponentPowerReceptor(final IMachine machine) { + this(machine, 1000); + } + + public ComponentPowerReceptor(final IMachine machine, final int storage) { + super(machine); + this.registeredToIC2EnergyNet = false; + this.previousPower = 0.0f; + this.inputs = new LinkedList(); + this.container = new PowerInterface(storage); + if (!this.registeredToIC2EnergyNet) { + this.addToEnergyNet(); + } + } + + @Override + public void readFromNBT(final NBTTagCompound nbttagcompound) { + super.readFromNBT(nbttagcompound); + this.container.readFromNBT(nbttagcompound); + if (!this.registeredToIC2EnergyNet) { + this.addToEnergyNet(); + } + } + + @Override + public void writeToNBT(final NBTTagCompound nbttagcompound) { + super.writeToNBT(nbttagcompound); + this.container.writeToNBT(nbttagcompound); + } + + @Override + public void onUpdate() { + if (!this.registeredToIC2EnergyNet && !this.getMachine().getTileEntity().isInvalid()) { + this.addToEnergyNet(); + } + } + + @Override + public PowerInfo getPowerInfo() { + return new PowerInfo(this, 0.0f); + } + + @Optional.Method(modid = "BuildCraft|Silicon") + @Override + public final void getTriggers(final List triggers) { + triggers.add(TriggerPower.powerNone(this)); + triggers.add(TriggerPower.powerLow(this)); + triggers.add(TriggerPower.powerMedium(this)); + triggers.add(TriggerPower.powerHigh(this)); + triggers.add(TriggerPower.powerFull(this)); + } + + @Override + @Optional.Method(modid = "IC2") + public double getDemandedEnergy() { + return this.container.getEnergySpace(PowerSystem.EU); + } + + @Override + @Optional.Method(modid = "IC2") + public int getSinkTier() { + return 1; + } + + @Override + @Optional.Method(modid = "IC2") + public double injectEnergy(final ForgeDirection directionFrom, final double amount, final double voltage) { + this.container.addEnergy(PowerSystem.EU, amount, true); + return 0.0; + } + + @Override + @Optional.Method(modid = "IC2") + public boolean acceptsEnergyFrom(final TileEntity emitter, final ForgeDirection direction) { + return this.acceptsPowerSystem(PowerSystem.EU); + } + + @Override + public int receiveEnergy(final ForgeDirection from, final int maxReceive, final boolean simulate) { + return (int) this.container.addEnergy(PowerSystem.RF, maxReceive, !simulate); + } + + @Override + public int extractEnergy(final ForgeDirection from, final int maxExtract, final boolean simulate) { + return this.container.useEnergy(maxExtract, simulate); + } + + @Override + public int getEnergyStored(final ForgeDirection from) { + return (int) this.container.getEnergy(PowerSystem.RF); + } + + @Override + public int getMaxEnergyStored(final ForgeDirection from) { + return (int) this.container.getCapacity(PowerSystem.RF); + } + + @Override + public boolean canConnectEnergy(final ForgeDirection from) { + final boolean can = this.acceptsPowerSystem(PowerSystem.RF); + return can; + } + + @Override + public PowerInterface getInterface() { + return this.container; + } + + private boolean acceptsPowerSystem(final PowerSystem system) { + return true; + } + + @Override + public void onInvalidation() { + this.removeFromEnergyNet(); + } + + @Override + public void onChunkUnload() { + this.removeFromEnergyNet(); + } + + private void addToEnergyNet() { + if (this.getMachine().getWorld() == null) { + return; + } + if (Mods.IC2.active()) { + this.do_addToEnergyNet(); + } + } + + private void removeFromEnergyNet() { + if (this.getMachine().getWorld() == null) { + return; + } + if (Mods.IC2.active()) { + this.do_removeFromEnergyNet(); + } + } + + @Optional.Method(modid = "IC2") + private void do_addToEnergyNet() { + MinecraftForge.EVENT_BUS.post(new EnergyTileLoadEvent((IEnergyTile) this.getMachine().getTileEntity())); + this.registeredToIC2EnergyNet = true; + } + + @Optional.Method(modid = "IC2") + private void do_removeFromEnergyNet() { + MinecraftForge.EVENT_BUS.post(new EnergyTileUnloadEvent((IEnergyTile) this.getMachine().getTileEntity())); + this.registeredToIC2EnergyNet = false; + } +} diff --git a/src/main/java/binnie/core/machines/power/ComponentProcess.java b/src/main/java/binnie/core/machines/power/ComponentProcess.java new file mode 100644 index 00000000..04f35073 --- /dev/null +++ b/src/main/java/binnie/core/machines/power/ComponentProcess.java @@ -0,0 +1,92 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.power; + +import net.minecraft.nbt.NBTTagCompound; +import binnie.core.machines.IMachine; + +public abstract class ComponentProcess extends ComponentProcessIndefinate implements IProcessTimed +{ + private float progressAmount; + + public ComponentProcess(final IMachine machine) { + super(machine, 0.0f); + this.progressAmount = 0.0f; + } + + @Override + public float getEnergyPerTick() { + return this.getProcessEnergy() / this.getProcessLength(); + } + + @Override + public float getProgressPerTick() { + return 100.0f / this.getProcessLength(); + } + + @Override + protected void onStartTask() { + this.progressAmount += 0.01f; + } + + @Override + protected void onCancelTask() { + this.progressAmount = 0.0f; + } + + @Override + public void onUpdate() { + super.onUpdate(); + if (this.progressAmount >= 100.0f) { + this.onFinishTask(); + this.progressAmount = 0.0f; + } + } + + public void alterProgress(final float f) { + this.progressAmount += f; + } + + public void setProgress(final float f) { + this.progressAmount = f; + } + + @Override + protected void progressTick() { + super.progressTick(); + this.alterProgress(this.getProgressPerTick()); + } + + @Override + public boolean inProgress() { + return this.progressAmount > 0.0f; + } + + @Override + public float getProgress() { + return this.progressAmount; + } + + protected void onFinishTask() { + } + + @Override + public void readFromNBT(final NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.progressAmount = nbt.getFloat("progress"); + } + + @Override + public void writeToNBT(final NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setFloat("progress", this.progressAmount); + } + + @Override + public abstract int getProcessLength(); + + @Override + public abstract int getProcessEnergy(); +} diff --git a/src/main/java/binnie/core/machines/power/ComponentProcessIndefinate.java b/src/main/java/binnie/core/machines/power/ComponentProcessIndefinate.java new file mode 100644 index 00000000..225b774e --- /dev/null +++ b/src/main/java/binnie/core/machines/power/ComponentProcessIndefinate.java @@ -0,0 +1,119 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.power; + +import binnie.core.machines.IMachine; +import net.minecraft.nbt.NBTTagCompound; +import binnie.core.machines.network.INetwork; +import binnie.core.machines.MachineComponent; + +public abstract class ComponentProcessIndefinate extends MachineComponent implements IProcess, INetwork.TilePacketSync +{ + private float energyPerTick; + private boolean inProgress; + private float actionPauseProcess; + private float actionCancelTask; + int clientEnergyPerSecond; + int clientInProgress; + + @Override + public void syncFromNBT(final NBTTagCompound nbt) { + this.inProgress = nbt.getBoolean("progress"); + } + + @Override + public void syncToNBT(final NBTTagCompound nbt) { + nbt.setBoolean("progress", this.inProgress); + } + + public ComponentProcessIndefinate(final IMachine machine, final float energyPerTick) { + super(machine); + this.energyPerTick = 0.1f; + this.actionPauseProcess = 0.0f; + this.actionCancelTask = 0.0f; + this.clientEnergyPerSecond = 0; + this.energyPerTick = energyPerTick; + } + + protected final IPoweredMachine getPower() { + return this.getMachine().getInterface(IPoweredMachine.class); + } + + @Override + public float getEnergyPerTick() { + return this.energyPerTick; + } + + @Override + public void onUpdate() { + final float energyAvailable = (float) this.getPower().getInterface().useEnergy(PowerSystem.RF, this.getEnergyPerTick(), false); + if (this.canWork() == null) { + if (!this.isInProgress() && this.canProgress() == null) { + this.onStartTask(); + } + else if (this.canProgress() == null) { + this.progressTick(); + this.onTickTask(); + } + } + else if (this.isInProgress()) { + this.onCancelTask(); + } + if (this.actionPauseProcess > 0.0f) { + --this.actionPauseProcess; + } + if (this.actionCancelTask > 0.0f) { + --this.actionCancelTask; + } + super.onUpdate(); + if (this.inProgress != this.inProgress()) { + this.inProgress = this.inProgress(); + this.getUtil().refreshBlock(); + } + } + + protected void progressTick() { + this.getPower().getInterface().useEnergy(PowerSystem.RF, this.getEnergyPerTick(), true); + } + + @Override + public ErrorState canWork() { + return (this.actionCancelTask == 0.0f) ? null : new ErrorState("Task Cancelled", "Cancelled by Buildcraft Gate"); + } + + @Override + public ErrorState canProgress() { + if (this.actionPauseProcess != 0.0f) { + return new ErrorState("Process Paused", "Paused by Buildcraft Gate"); + } + return (this.getPower().getInterface().getEnergy(PowerSystem.RF) < this.getEnergyPerTick()) ? new ErrorState.InsufficientPower() : null; + } + + @Override + public final boolean isInProgress() { + return this.inProgress; + } + + protected abstract boolean inProgress(); + + protected void onCancelTask() { + } + + protected void onStartTask() { + } + + protected void onTickTask() { + } + + @Override + public String getTooltip() { + return "Processing"; + } + + @Override + public final ProcessInfo getInfo() { + return new ProcessInfo(this); + } +} diff --git a/src/main/java/binnie/core/machines/power/ComponentProcessSetCost.java b/src/main/java/binnie/core/machines/power/ComponentProcessSetCost.java new file mode 100644 index 00000000..80ecfedb --- /dev/null +++ b/src/main/java/binnie/core/machines/power/ComponentProcessSetCost.java @@ -0,0 +1,29 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.power; + +import binnie.core.machines.IMachine; + +public class ComponentProcessSetCost extends ComponentProcess +{ + private int processLength; + private int processEnergy; + + public ComponentProcessSetCost(final IMachine machine, final int rfCost, final int timePeriod) { + super(machine); + this.processLength = timePeriod; + this.processEnergy = rfCost; + } + + @Override + public int getProcessLength() { + return this.processLength; + } + + @Override + public int getProcessEnergy() { + return this.processEnergy; + } +} diff --git a/src/main/java/binnie/core/machines/power/ErrorState.java b/src/main/java/binnie/core/machines/power/ErrorState.java new file mode 100644 index 00000000..69a616f2 --- /dev/null +++ b/src/main/java/binnie/core/machines/power/ErrorState.java @@ -0,0 +1,174 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.power; + +import net.minecraft.nbt.NBTTagCompound; +import forestry.api.core.INBTTagable; + +public class ErrorState implements INBTTagable +{ + private String name; + private String desc; + private int[] data; + private boolean progress; + private boolean itemError; + private boolean tankError; + private boolean powerError; + + public ErrorState(final String name, final String desc) { + this.name = ""; + this.desc = ""; + this.data = new int[0]; + this.progress = false; + this.itemError = false; + this.tankError = false; + this.powerError = false; + this.name = name; + this.desc = desc; + } + + public ErrorState(final String name, final String desc, final int[] data) { + this.name = ""; + this.desc = ""; + this.data = new int[0]; + this.progress = false; + this.itemError = false; + this.tankError = false; + this.powerError = false; + this.name = name; + this.desc = desc; + this.data = data; + } + + @Override + public String toString() { + return this.name; + } + + public String getTooltip() { + return this.desc; + } + + public int[] getData() { + return this.data; + } + + public boolean isProgress() { + return this.progress; + } + + public void setIsProgress() { + this.progress = true; + } + + @Override + public void readFromNBT(final NBTTagCompound nbt) { + this.name = nbt.getString("name"); + this.desc = nbt.getString("desc"); + this.data = nbt.getIntArray("data"); + this.itemError = nbt.getBoolean("item"); + this.tankError = nbt.getBoolean("tank"); + this.powerError = nbt.getBoolean("power"); + } + + @Override + public void writeToNBT(final NBTTagCompound nbt) { + nbt.setString("name", this.toString()); + nbt.setString("desc", this.getTooltip()); + nbt.setIntArray("data", this.data); + if (this.isItemError()) { + nbt.setBoolean("item", true); + } + if (this.isTankError()) { + nbt.setBoolean("tank", true); + } + if (this.isPowerError()) { + nbt.setBoolean("power", true); + } + } + + public boolean isItemError() { + return this.itemError || this instanceof Item; + } + + public boolean isTankError() { + return this.tankError || this instanceof Tank; + } + + public boolean isPowerError() { + return this.powerError || this instanceof InsufficientPower; + } + + public static class Item extends ErrorState + { + public Item(final String name, final String desc, final int[] slots) { + super(name, desc, slots); + } + } + + public static class Tank extends ErrorState + { + public Tank(final String name, final String desc, final int[] slots) { + super(name, desc, slots); + } + } + + public static class NoItem extends Item + { + public NoItem(final String desc, final int slot) { + this(desc, new int[] { slot }); + } + + public NoItem(final String desc, final int[] slots) { + super("No Item", desc, slots); + } + } + + public static class InvalidItem extends Item + { + public InvalidItem(final String desc, final int slot) { + this("Invalid Item", desc, slot); + } + + public InvalidItem(final String name, final String desc, final int slot) { + super(name, desc, new int[] { slot }); + } + } + + public static class NoSpace extends Item + { + public NoSpace(final String desc, final int[] slots) { + super("No Space", desc, slots); + } + } + + public static class InsufficientPower extends ErrorState + { + public InsufficientPower() { + super("Insufficient Power", "Not enough power to operate"); + } + } + + public static class TankSpace extends Tank + { + public TankSpace(final String desc, final int tank) { + super("Tank Full", desc, new int[] { tank }); + } + } + + public static class InsufficientLiquid extends Tank + { + public InsufficientLiquid(final String desc, final int tank) { + super("Insufficient Liquid", desc, new int[] { tank }); + } + } + + public static class InvalidRecipe extends Item + { + public InvalidRecipe(final String string, final int[] slots) { + super("Invalid Recipe", string, slots); + } + } +} diff --git a/src/main/java/binnie/core/machines/power/IErrorStateSource.java b/src/main/java/binnie/core/machines/power/IErrorStateSource.java new file mode 100644 index 00000000..80793c80 --- /dev/null +++ b/src/main/java/binnie/core/machines/power/IErrorStateSource.java @@ -0,0 +1,12 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.power; + +public interface IErrorStateSource +{ + ErrorState canWork(); + + ErrorState canProgress(); +} diff --git a/src/main/java/binnie/core/machines/power/IPoweredMachine.java b/src/main/java/binnie/core/machines/power/IPoweredMachine.java new file mode 100644 index 00000000..577b4c20 --- /dev/null +++ b/src/main/java/binnie/core/machines/power/IPoweredMachine.java @@ -0,0 +1,17 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.power; + +import cpw.mods.fml.common.Optional; +import cofh.api.energy.IEnergyHandler; +import ic2.api.energy.tile.IEnergySink; + +@Optional.Interface(iface = "ic2.api.energy.tile.IEnergySink", modid = "IC2") +public interface IPoweredMachine extends IEnergySink, IEnergyHandler +{ + PowerInfo getPowerInfo(); + + PowerInterface getInterface(); +} diff --git a/src/main/java/binnie/core/machines/power/IProcess.java b/src/main/java/binnie/core/machines/power/IProcess.java new file mode 100644 index 00000000..ab5f6f04 --- /dev/null +++ b/src/main/java/binnie/core/machines/power/IProcess.java @@ -0,0 +1,16 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.power; + +public interface IProcess extends IErrorStateSource +{ + float getEnergyPerTick(); + + String getTooltip(); + + boolean isInProgress(); + + ProcessInfo getInfo(); +} diff --git a/src/main/java/binnie/core/machines/power/IProcessTimed.java b/src/main/java/binnie/core/machines/power/IProcessTimed.java new file mode 100644 index 00000000..fed9cd26 --- /dev/null +++ b/src/main/java/binnie/core/machines/power/IProcessTimed.java @@ -0,0 +1,16 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.power; + +interface IProcessTimed extends IProcess, IErrorStateSource +{ + int getProcessLength(); + + int getProcessEnergy(); + + float getProgress(); + + float getProgressPerTick(); +} diff --git a/src/main/java/binnie/core/machines/power/ITankMachine.java b/src/main/java/binnie/core/machines/power/ITankMachine.java new file mode 100644 index 00000000..13b073a4 --- /dev/null +++ b/src/main/java/binnie/core/machines/power/ITankMachine.java @@ -0,0 +1,23 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.power; + +import binnie.core.machines.inventory.TankSlot; +import net.minecraftforge.fluids.IFluidTank; +import binnie.core.machines.inventory.IValidatedTankContainer; +import net.minecraftforge.fluids.IFluidHandler; + +public interface ITankMachine extends IFluidHandler, IValidatedTankContainer +{ + TankInfo[] getTankInfos(); + + IFluidTank[] getTanks(); + + TankSlot addTank(final int p0, final String p1, final int p2); + + IFluidTank getTank(final int p0); + + TankSlot getTankSlot(final int p0); +} diff --git a/src/main/java/binnie/core/machines/power/PowerInfo.java b/src/main/java/binnie/core/machines/power/PowerInfo.java new file mode 100644 index 00000000..e83ad653 --- /dev/null +++ b/src/main/java/binnie/core/machines/power/PowerInfo.java @@ -0,0 +1,46 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.power; + +import net.minecraft.nbt.NBTTagCompound; +import forestry.api.core.INBTTagable; + +public class PowerInfo implements INBTTagable +{ + private float currentEnergy; + private float maxEnergy; + + public PowerInfo(final IPoweredMachine machine, final float currentInput) { + this.currentEnergy = 0.0f; + this.maxEnergy = 0.0f; + this.currentEnergy = (float) machine.getInterface().getEnergy(PowerSystem.RF); + this.maxEnergy = (float) machine.getInterface().getCapacity(PowerSystem.RF); + } + + public PowerInfo() { + this.currentEnergy = 0.0f; + this.maxEnergy = 0.0f; + } + + public int getStoredEnergy() { + return (int) this.currentEnergy; + } + + public int getMaxEnergy() { + return (int) this.maxEnergy; + } + + @Override + public void readFromNBT(final NBTTagCompound nbttagcompound) { + this.currentEnergy = nbttagcompound.getInteger("current"); + this.maxEnergy = nbttagcompound.getInteger("max"); + } + + @Override + public void writeToNBT(final NBTTagCompound nbttagcompound) { + nbttagcompound.setInteger("current", this.getStoredEnergy()); + nbttagcompound.setInteger("max", this.getMaxEnergy()); + } +} diff --git a/src/main/java/binnie/core/machines/power/PowerInterface.java b/src/main/java/binnie/core/machines/power/PowerInterface.java new file mode 100644 index 00000000..f71550e9 --- /dev/null +++ b/src/main/java/binnie/core/machines/power/PowerInterface.java @@ -0,0 +1,83 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.power; + +import net.minecraft.nbt.NBTTagCompound; +import forestry.api.core.INBTTagable; + +public class PowerInterface implements INBTTagable +{ + private int capacity; + private int energy; + + public PowerInterface(final int capacity) { + this.capacity = capacity * 100; + this.energy = 0; + } + + public int getCapacity() { + return this.capacity; + } + + public int getEnergy() { + return this.energy; + } + + public int addEnergy(final int amount, final boolean shouldDo) { + final int added = Math.min(this.getEnergySpace(), amount); + if (shouldDo) { + this.energy += added; + } + return added; + } + + public int useEnergy(final int amount, final boolean simulate) { + final int added = Math.min(this.getEnergy(), amount); + if (simulate) { + this.energy -= added; + } + return added; + } + + public int getEnergySpace() { + return this.getCapacity() - this.getEnergy(); + } + + public double addEnergy(final PowerSystem unit, final double amount, final boolean simulate) { + return unit.convertTo(this.addEnergy(unit.convertFrom(amount), simulate)); + } + + public double useEnergy(final PowerSystem unit, final double amount, final boolean simulate) { + return unit.convertTo(this.useEnergy(unit.convertFrom(amount), simulate)); + } + + public double getEnergy(final PowerSystem unit) { + return unit.convertTo(this.getEnergy()); + } + + public double getCapacity(final PowerSystem unit) { + return unit.convertTo(this.getCapacity()); + } + + public double getEnergySpace(final PowerSystem unit) { + return unit.convertTo(this.getEnergySpace()); + } + + @Override + public void readFromNBT(final NBTTagCompound nbt) { + this.energy = nbt.getInteger("Energy"); + if (this.energy > this.capacity) { + this.energy = this.capacity; + } + else if (this.energy < 0) { + this.energy = 0; + } + } + + @Override + public void writeToNBT(final NBTTagCompound nbt) { + nbt.setInteger("Energy", this.getEnergy()); + } +} diff --git a/src/main/java/binnie/core/machines/power/PowerSystem.java b/src/main/java/binnie/core/machines/power/PowerSystem.java new file mode 100644 index 00000000..6ec45adf --- /dev/null +++ b/src/main/java/binnie/core/machines/power/PowerSystem.java @@ -0,0 +1,44 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.power; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.item.ItemStack; + +public enum PowerSystem +{ + MJ(100.0), + RF(10.0), + EU(40.0); + + double conversion; + + private PowerSystem(final double conversion) { + this.conversion = conversion; + } + + public double convertTo(final int value) { + return value / this.conversion; + } + + public int convertFrom(final double value) { + return (int) (value * this.conversion); + } + + public static PowerSystem get(final int i) { + return values()[i % values().length]; + } + + public String getUnitName() { + return this.name(); + } + + public ItemStack saveTo(final ItemStack stack) { + final NBTTagCompound tag = stack.hasTagCompound() ? stack.getTagCompound() : new NBTTagCompound(); + tag.setByte("power-system", (byte) this.ordinal()); + stack.setTagCompound(tag); + return stack; + } +} diff --git a/src/main/java/binnie/core/machines/power/ProcessInfo.java b/src/main/java/binnie/core/machines/power/ProcessInfo.java new file mode 100644 index 00000000..9bd34417 --- /dev/null +++ b/src/main/java/binnie/core/machines/power/ProcessInfo.java @@ -0,0 +1,72 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.power; + +import net.minecraft.nbt.NBTTagCompound; +import forestry.api.core.INBTTagable; + +public class ProcessInfo implements INBTTagable +{ + private float currentProgress; + private int processEnergy; + private int processTime; + private float energyPerTick; + + public ProcessInfo(final IProcess process) { + this.currentProgress = 0.0f; + this.processEnergy = 0; + this.processTime = 0; + this.energyPerTick = 0.0f; + this.energyPerTick = process.getEnergyPerTick(); + if (process instanceof IProcessTimed) { + final IProcessTimed time = (IProcessTimed) process; + this.currentProgress = time.getProgress(); + this.processEnergy = time.getProcessEnergy(); + this.processTime = time.getProcessLength(); + } + else { + this.currentProgress = (process.isInProgress() ? 100.0f : 0.0f); + } + } + + public ProcessInfo() { + this.currentProgress = 0.0f; + this.processEnergy = 0; + this.processTime = 0; + this.energyPerTick = 0.0f; + } + + public float getCurrentProgress() { + return this.currentProgress; + } + + public int getProcessEnergy() { + return this.processEnergy; + } + + public int getProcessTime() { + return this.processTime; + } + + public float getEnergyPerTick() { + return this.energyPerTick; + } + + @Override + public void readFromNBT(final NBTTagCompound nbttagcompound) { + this.energyPerTick = nbttagcompound.getFloat("ept"); + this.processEnergy = nbttagcompound.getInteger("e"); + this.processTime = nbttagcompound.getInteger("t"); + this.currentProgress = nbttagcompound.getFloat("p"); + } + + @Override + public void writeToNBT(final NBTTagCompound nbttagcompound) { + nbttagcompound.setFloat("ept", this.energyPerTick); + nbttagcompound.setFloat("p", this.currentProgress); + nbttagcompound.setInteger("e", this.processEnergy); + nbttagcompound.setInteger("t", this.processTime); + } +} diff --git a/src/main/java/binnie/core/machines/power/TankInfo.java b/src/main/java/binnie/core/machines/power/TankInfo.java new file mode 100644 index 00000000..1caa45c4 --- /dev/null +++ b/src/main/java/binnie/core/machines/power/TankInfo.java @@ -0,0 +1,75 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.power; + +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.IIcon; +import net.minecraftforge.fluids.IFluidTank; +import net.minecraftforge.fluids.FluidStack; +import forestry.api.core.INBTTagable; + +public class TankInfo implements INBTTagable +{ + public FluidStack liquid; + private float capacity; + + public TankInfo(final IFluidTank tank) { + this.capacity = 0.0f; + this.capacity = tank.getCapacity(); + this.liquid = tank.getFluid(); + } + + public TankInfo() { + this.capacity = 0.0f; + } + + public float getAmount() { + return (this.liquid == null) ? 0.0f : this.liquid.amount; + } + + public float getCapacity() { + return this.capacity; + } + + public boolean isEmpty() { + return this.liquid == null; + } + + public IIcon getIcon() { + return this.liquid.getFluid().getStillIcon(); + } + + public String getName() { + return (this.liquid == null) ? "" : this.liquid.getFluid().getLocalizedName(); + } + + @Override + public void readFromNBT(final NBTTagCompound nbt) { + this.capacity = nbt.getInteger("capacity"); + if (nbt.hasKey("liquid")) { + this.liquid = FluidStack.loadFluidStackFromNBT(nbt.getCompoundTag("liquid")); + } + } + + @Override + public void writeToNBT(final NBTTagCompound nbt) { + nbt.setInteger("capacity", (int) this.getCapacity()); + if (this.liquid == null) { + return; + } + final NBTTagCompound tag = new NBTTagCompound(); + this.liquid.writeToNBT(tag); + nbt.setTag("liquid", tag); + } + + public static TankInfo[] get(final ITankMachine machine) { + final TankInfo[] info = new TankInfo[machine.getTanks().length]; + for (int i = 0; i < info.length; ++i) { + info[i] = new TankInfo(machine.getTanks()[i]); + } + return info; + } +} diff --git a/src/main/java/binnie/core/machines/storage/Compartment.java b/src/main/java/binnie/core/machines/storage/Compartment.java new file mode 100644 index 00000000..6d1cb1da --- /dev/null +++ b/src/main/java/binnie/core/machines/storage/Compartment.java @@ -0,0 +1,71 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.storage; + +import net.minecraft.client.renderer.RenderBlocks; +import binnie.core.machines.Machine; +import binnie.core.machines.TileEntityMachine; +import net.minecraft.tileentity.TileEntity; +import binnie.core.resource.IBinnieTexture; +import binnie.core.resource.BinnieResource; +import net.minecraft.block.Block; +import binnie.core.BinnieCore; +import net.minecraft.item.ItemStack; +import binnie.core.machines.MachinePackage; +import binnie.core.machines.IMachineType; + +enum Compartment implements IMachineType +{ + Compartment(StandardCompartment.PackageCompartment.class), + CompartmentCopper(StandardCompartment.PackageCompartmentCopper.class), + CompartmentBronze(StandardCompartment.PackageCompartmentBronze.class), + CompartmentIron(StandardCompartment.PackageCompartmentIron.class), + CompartmentGold(StandardCompartment.PackageCompartmentGold.class), + CompartmentDiamond(StandardCompartment.PackageCompartmentDiamond.class); + + Class clss; + + private Compartment(final Class clss) { + this.clss = clss; + } + + @Override + public Class getPackageClass() { + return this.clss; + } + + @Override + public boolean isActive() { + return true; + } + + public ItemStack get(final int i) { + return new ItemStack(BinnieCore.packageCompartment.getBlock(), i, this.ordinal()); + } + + public abstract static class PackageCompartment extends MachinePackage + { + private BinnieResource renderTexture; + + protected PackageCompartment(final String uid, final IBinnieTexture renderTexture) { + super(uid, false); + this.renderTexture = renderTexture.getTexture(); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + + @Override + public void renderMachine(final Machine machine, final double x, final double y, final double z, final float var8, final RenderBlocks renderer) { + MachineRendererCompartment.instance.renderMachine(machine, 16777215, this.renderTexture, x, y, z, var8); + } + } +} diff --git a/src/main/java/binnie/core/machines/storage/CompartmentTab.java b/src/main/java/binnie/core/machines/storage/CompartmentTab.java new file mode 100644 index 00000000..f2e8efad --- /dev/null +++ b/src/main/java/binnie/core/machines/storage/CompartmentTab.java @@ -0,0 +1,73 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.storage; + +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.init.Items; +import binnie.craftgui.minecraft.EnumColor; +import net.minecraft.item.ItemStack; +import forestry.api.core.INBTTagable; + +class CompartmentTab implements INBTTagable +{ + private String name; + private ItemStack icon; + private EnumColor color; + private int id; + + public CompartmentTab(final int id) { + this.name = ""; + this.icon = new ItemStack(Items.paper); + this.color = EnumColor.White; + this.id = id; + } + + @Override + public void readFromNBT(final NBTTagCompound nbt) { + this.name = nbt.getString("name"); + this.icon = ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("icon")); + this.color = EnumColor.values()[nbt.getByte("color")]; + this.id = nbt.getByte("id"); + } + + @Override + public void writeToNBT(final NBTTagCompound nbt) { + nbt.setString("name", this.name); + final NBTTagCompound n = new NBTTagCompound(); + this.icon.writeToNBT(n); + nbt.setTag("icon", n); + nbt.setByte("color", (byte) this.color.ordinal()); + nbt.setByte("id", (byte) this.id); + } + + public String getName() { + return this.name; + } + + public ItemStack getIcon() { + return this.icon; + } + + public EnumColor getColor() { + return this.color; + } + + public int getId() { + return this.id; + } + + public void setName(final String name) { + this.name = ((name == null) ? "" : name); + } + + public void setIcon(final ItemStack icon) { + this.icon = icon; + } + + public void setColor(final EnumColor color) { + this.color = color; + } +} diff --git a/src/main/java/binnie/core/machines/storage/ComponentBinnieCoreGUI.java b/src/main/java/binnie/core/machines/storage/ComponentBinnieCoreGUI.java new file mode 100644 index 00000000..98d9344f --- /dev/null +++ b/src/main/java/binnie/core/machines/storage/ComponentBinnieCoreGUI.java @@ -0,0 +1,28 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.storage; + +import binnie.core.BinnieCore; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import binnie.core.machines.Machine; +import binnie.core.gui.BinnieCoreGUI; +import binnie.core.machines.component.IInteraction; +import binnie.core.machines.MachineComponent; + +class ComponentBinnieCoreGUI extends MachineComponent implements IInteraction.RightClick +{ + private BinnieCoreGUI id; + + public ComponentBinnieCoreGUI(final Machine machine, final BinnieCoreGUI id) { + super(machine); + this.id = id; + } + + @Override + public void onRightClick(final World world, final EntityPlayer player, final int x, final int y, final int z) { + BinnieCore.proxy.openGui(this.id, player, x, y, z); + } +} diff --git a/src/main/java/binnie/core/machines/storage/ComponentCompartmentInventory.java b/src/main/java/binnie/core/machines/storage/ComponentCompartmentInventory.java new file mode 100644 index 00000000..29317118 --- /dev/null +++ b/src/main/java/binnie/core/machines/storage/ComponentCompartmentInventory.java @@ -0,0 +1,116 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.storage; + +import net.minecraft.entity.player.EntityPlayer; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagCompound; +import java.util.HashMap; +import binnie.core.machines.IMachine; +import java.util.Map; +import binnie.core.machines.network.INetwork; +import binnie.core.machines.inventory.ComponentInventorySlots; + +class ComponentCompartmentInventory extends ComponentInventorySlots implements INetwork.GuiNBT +{ + private int numberOfTabs; + private int slotsPerPage; + private Map tabs; + + public ComponentCompartmentInventory(final IMachine machine, final int sections) { + this(machine, sections, 4); + } + + public ComponentCompartmentInventory(final IMachine machine, final int tabs, final int pageSize) { + super(machine); + this.tabs = new HashMap(); + this.numberOfTabs = tabs; + this.slotsPerPage = pageSize; + for (int i = 0; i < this.numberOfTabs * this.slotsPerPage; ++i) { + this.addSlot(i, "compartment"); + } + } + + public int getPageSize() { + return this.slotsPerPage; + } + + public int getTabNumber() { + return this.numberOfTabs; + } + + public int[] getSlotsForTab(final int currentTab) { + final int[] slots = new int[this.slotsPerPage]; + for (int i = 0; i < this.slotsPerPage; ++i) { + slots[i] = i + currentTab * this.slotsPerPage; + } + return slots; + } + + public CompartmentTab getTab(final int i) { + if (!this.tabs.containsKey(i)) { + this.tabs.put(i, new CompartmentTab(i)); + } + return this.tabs.get(i); + } + + @Override + public void sendGuiNBT(final Map nbt) { + final NBTTagList list = new NBTTagList(); + for (int i = 0; i < this.numberOfTabs; ++i) { + final NBTTagCompound nbt2 = new NBTTagCompound(); + this.getTab(i).writeToNBT(nbt2); + list.appendTag(nbt2); + } + final NBTTagCompound tag = new NBTTagCompound(); + tag.setTag("tabs", list); + nbt.put("comp-tabs", tag); + } + + @Override + public void recieveGuiNBT(final Side side, final EntityPlayer player, final String name, final NBTTagCompound nbt) { + if (name.equals("comp-tabs")) { + final NBTTagList tags = nbt.getTagList("tabs", 10); + for (int i = 0; i < tags.tagCount(); ++i) { + final NBTTagCompound tag = tags.getCompoundTagAt(i); + final CompartmentTab tab = new CompartmentTab(0); + tab.readFromNBT(tag); + this.tabs.put(tab.getId(), tab); + } + } + if (name.equals("comp-change-tab")) { + final CompartmentTab tab2 = new CompartmentTab(0); + tab2.readFromNBT(nbt); + this.tabs.put(tab2.getId(), tab2); + this.getMachine().getTileEntity().markDirty(); + } + } + + @Override + public void readFromNBT(final NBTTagCompound nbt) { + super.readFromNBT(nbt); + final NBTTagList tags = nbt.getTagList("tabs", 10); + for (int i = 0; i < tags.tagCount(); ++i) { + final NBTTagCompound tag = tags.getCompoundTagAt(i); + final CompartmentTab tab = new CompartmentTab(0); + tab.readFromNBT(tag); + this.tabs.put(tab.getId(), tab); + } + } + + @Override + public void writeToNBT(final NBTTagCompound nbt) { + super.writeToNBT(nbt); + final NBTTagList list = new NBTTagList(); + for (int i = 0; i < this.numberOfTabs; ++i) { + final NBTTagCompound nbt2 = new NBTTagCompound(); + this.getTab(i).writeToNBT(nbt2); + list.appendTag(nbt2); + } + nbt.setTag("tabs", list); + } +} diff --git a/src/main/java/binnie/core/machines/storage/ControlColourSelector.java b/src/main/java/binnie/core/machines/storage/ControlColourSelector.java new file mode 100644 index 00000000..ddb471a1 --- /dev/null +++ b/src/main/java/binnie/core/machines/storage/ControlColourSelector.java @@ -0,0 +1,47 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.storage; + +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.minecraft.EnumColor; +import binnie.craftgui.controls.core.IControlValue; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +class ControlColourSelector extends Control implements ITooltip, IControlValue +{ + private EnumColor value; + + public ControlColourSelector(final IWidget parent, final float x, final float y, final float w, final float h, final EnumColor value) { + super(parent, x, y, w, h); + this.setValue(value); + this.addAttribute(Attribute.MouseOver); + } + + @Override + public void getTooltip(final Tooltip tooltip) { + tooltip.add(this.value.toString()); + } + + @Override + public EnumColor getValue() { + return this.value; + } + + @Override + public void setValue(final EnumColor value) { + this.value = value; + this.setColour(this.getValue().getColour()); + } + + @Override + public void onRenderBackground() { + super.onRenderBackground(); + CraftGUI.Render.gradientRect(this.getArea(), -16777216 + this.value.getColour(), -16777216 + this.value.getColour()); + } +} diff --git a/src/main/java/binnie/core/machines/storage/MachineRendererCompartment.java b/src/main/java/binnie/core/machines/storage/MachineRendererCompartment.java new file mode 100644 index 00000000..bcecffa6 --- /dev/null +++ b/src/main/java/binnie/core/machines/storage/MachineRendererCompartment.java @@ -0,0 +1,46 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.storage; + +import binnie.core.BinnieCore; +import org.lwjgl.opengl.GL11; +import binnie.core.resource.BinnieResource; +import binnie.core.machines.Machine; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +class MachineRendererCompartment +{ + public static MachineRendererCompartment instance; + private ModelCompartment model; + + public MachineRendererCompartment() { + this.model = new ModelCompartment(); + } + + public void renderMachine(final Machine machine, final int colour, final BinnieResource texture, final double x, final double y, final double z, final float var8) { + GL11.glPushMatrix(); + int i1 = 0; + final int ix = machine.getTileEntity().xCoord; + final int iy = machine.getTileEntity().yCoord; + final int iz = machine.getTileEntity().zCoord; + if (machine.getTileEntity() != null) { + i1 = ix * iy * iz + ix * iy - ix * iz + iy * iz - ix + iy - iz; + } + final float phase = (float) Math.max(0.0, Math.sin((System.currentTimeMillis() + i1) * 0.003)); + GL11.glTranslated(x + 0.5, y + 1.5, z + 0.5); + GL11.glRotatef(180.0f, 0.0f, 0.0f, 1.0f); + BinnieCore.proxy.bindTexture(texture); + GL11.glPushMatrix(); + this.model.render(null, (float) x, (float) y, (float) z, 0.0625f, 0.0625f, 0.0625f); + GL11.glPopMatrix(); + GL11.glPopMatrix(); + } + + static { + MachineRendererCompartment.instance = new MachineRendererCompartment(); + } +} diff --git a/src/main/java/binnie/core/machines/storage/ModelCompartment.java b/src/main/java/binnie/core/machines/storage/ModelCompartment.java new file mode 100644 index 00000000..620eef4c --- /dev/null +++ b/src/main/java/binnie/core/machines/storage/ModelCompartment.java @@ -0,0 +1,153 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.storage; + +import net.minecraft.entity.Entity; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.model.ModelBase; + +class ModelCompartment extends ModelBase +{ + private ModelRenderer Column1; + private ModelRenderer Column4; + private ModelRenderer Column2; + private ModelRenderer Column3; + private ModelRenderer Lid_1; + private ModelRenderer Body_1; + private ModelRenderer Lock_1; + private ModelRenderer Lid_2; + private ModelRenderer Body_2; + private ModelRenderer Lock_2; + private ModelRenderer Body; + private ModelRenderer Lid_3; + private ModelRenderer Body_3; + private ModelRenderer Lock_3; + private ModelRenderer Lid_4; + private ModelRenderer Body_4; + private ModelRenderer Lock_4; + + public ModelCompartment() { + this.textureWidth = 128; + this.textureHeight = 128; + (this.Column1 = new ModelRenderer(this, 0, 0)).addBox(-8.0f, 8.0f, -8.0f, 4, 16, 4); + this.Column1.setRotationPoint(0.0f, 0.0f, 0.0f); + this.Column1.setTextureSize(128, 128); + this.Column1.mirror = true; + this.setRotation(this.Column1, 0.0f, 0.0f, 0.0f); + (this.Column4 = new ModelRenderer(this, 0, 0)).addBox(4.0f, 8.0f, -8.0f, 4, 16, 4); + this.Column4.setRotationPoint(0.0f, 0.0f, 0.0f); + this.Column4.setTextureSize(128, 128); + this.Column4.mirror = true; + this.setRotation(this.Column4, 0.0f, 0.0f, 0.0f); + (this.Column2 = new ModelRenderer(this, 0, 0)).addBox(-8.0f, 8.0f, 4.0f, 4, 16, 4); + this.Column2.setRotationPoint(0.0f, 0.0f, 0.0f); + this.Column2.setTextureSize(128, 128); + this.Column2.mirror = true; + this.setRotation(this.Column2, 0.0f, 0.0f, 0.0f); + (this.Column3 = new ModelRenderer(this, 0, 0)).addBox(4.0f, 8.0f, 4.0f, 4, 16, 4); + this.Column3.setRotationPoint(0.0f, 0.0f, 0.0f); + this.Column3.setTextureSize(128, 128); + this.Column3.mirror = true; + this.setRotation(this.Column3, 0.0f, 0.0f, 0.0f); + (this.Lid_1 = new ModelRenderer(this, 48, 0)).addBox(-4.0f, 9.0f, -7.0f, 8, 5, 3); + this.Lid_1.setRotationPoint(0.0f, 0.0f, 0.0f); + this.Lid_1.setTextureSize(128, 128); + this.Lid_1.mirror = true; + this.setRotation(this.Lid_1, 0.0f, 0.0f, 0.0f); + (this.Body_1 = new ModelRenderer(this, 0, 24)).addBox(-4.0f, 14.0f, -7.0f, 8, 10, 3); + this.Body_1.setRotationPoint(0.0f, 0.0f, 0.0f); + this.Body_1.setTextureSize(128, 128); + this.Body_1.mirror = true; + this.setRotation(this.Body_1, 0.0f, 0.0f, 0.0f); + (this.Lock_1 = new ModelRenderer(this, 22, 24)).addBox(-1.0f, 12.0f, -8.0f, 2, 4, 1); + this.Lock_1.setRotationPoint(0.0f, 0.0f, 0.0f); + this.Lock_1.setTextureSize(128, 128); + this.Lock_1.mirror = true; + this.setRotation(this.Lock_1, 0.0f, 0.0f, 0.0f); + (this.Lid_2 = new ModelRenderer(this, 48, 0)).addBox(-4.0f, 9.0f, -7.0f, 8, 5, 3); + this.Lid_2.setRotationPoint(0.0f, 0.0f, 0.0f); + this.Lid_2.setTextureSize(128, 128); + this.Lid_2.mirror = true; + this.setRotation(this.Lid_2, 0.0f, 1.570796f, 0.0f); + (this.Body_2 = new ModelRenderer(this, 0, 24)).addBox(-4.0f, 14.0f, -7.0f, 8, 10, 3); + this.Body_2.setRotationPoint(0.0f, 0.0f, 0.0f); + this.Body_2.setTextureSize(128, 128); + this.Body_2.mirror = true; + this.setRotation(this.Body_2, 0.0f, 1.570796f, 0.0f); + (this.Lock_2 = new ModelRenderer(this, 22, 24)).addBox(-1.0f, 12.0f, -8.0f, 2, 4, 1); + this.Lock_2.setRotationPoint(0.0f, 0.0f, 0.0f); + this.Lock_2.setTextureSize(128, 128); + this.Lock_2.mirror = true; + this.setRotation(this.Lock_2, 0.0f, 1.570796f, 0.0f); + (this.Body = new ModelRenderer(this, 16, 0)).addBox(-4.0f, 8.0f, -4.0f, 8, 16, 8); + this.Body.setRotationPoint(0.0f, 0.0f, 0.0f); + this.Body.setTextureSize(128, 128); + this.Body.mirror = true; + this.setRotation(this.Body, 0.0f, 0.0f, 0.0f); + (this.Lid_3 = new ModelRenderer(this, 48, 0)).addBox(-4.0f, 9.0f, -7.0f, 8, 5, 3); + this.Lid_3.setRotationPoint(0.0f, 0.0f, 0.0f); + this.Lid_3.setTextureSize(128, 128); + this.Lid_3.mirror = true; + this.setRotation(this.Lid_3, 0.0f, 3.141593f, 0.0f); + (this.Body_3 = new ModelRenderer(this, 0, 24)).addBox(-4.0f, 14.0f, -7.0f, 8, 10, 3); + this.Body_3.setRotationPoint(0.0f, 0.0f, 0.0f); + this.Body_3.setTextureSize(128, 128); + this.Body_3.mirror = true; + this.setRotation(this.Body_3, 0.0f, 3.141593f, 0.0f); + (this.Lock_3 = new ModelRenderer(this, 22, 24)).addBox(-1.0f, 12.0f, -8.0f, 2, 4, 1); + this.Lock_3.setRotationPoint(0.0f, 0.0f, 0.0f); + this.Lock_3.setTextureSize(128, 128); + this.Lock_3.mirror = true; + this.setRotation(this.Lock_3, 0.0f, 3.141593f, 0.0f); + (this.Lid_4 = new ModelRenderer(this, 48, 0)).addBox(-4.0f, 9.0f, -7.0f, 8, 5, 3); + this.Lid_4.setRotationPoint(0.0f, 0.0f, 0.0f); + this.Lid_4.setTextureSize(128, 128); + this.Lid_4.mirror = true; + this.setRotation(this.Lid_4, 0.0f, -1.570796f, 0.0f); + (this.Body_4 = new ModelRenderer(this, 0, 24)).addBox(-4.0f, 14.0f, -7.0f, 8, 10, 3); + this.Body_4.setRotationPoint(0.0f, 0.0f, 0.0f); + this.Body_4.setTextureSize(128, 128); + this.Body_4.mirror = true; + this.setRotation(this.Body_4, 0.0f, -1.570796f, 0.0f); + (this.Lock_4 = new ModelRenderer(this, 22, 24)).addBox(-1.0f, 12.0f, -8.0f, 2, 4, 1); + this.Lock_4.setRotationPoint(0.0f, 0.0f, 0.0f); + this.Lock_4.setTextureSize(128, 128); + this.Lock_4.mirror = true; + this.setRotation(this.Lock_4, 0.0f, -1.570796f, 0.0f); + } + + @Override + public void render(final Entity entity, final float f, final float f1, final float f2, final float f3, final float f4, final float f5) { + super.render(entity, f, f1, f2, f3, f4, f5); + this.setRotationAngles(f, f1, f2, f3, f4, f5); + this.Column1.render(f5); + this.Column4.render(f5); + this.Column2.render(f5); + this.Column3.render(f5); + this.Lid_1.render(f5); + this.Body_1.render(f5); + this.Lock_1.render(f5); + this.Lid_2.render(f5); + this.Body_2.render(f5); + this.Lock_2.render(f5); + this.Body.render(f5); + this.Lid_3.render(f5); + this.Body_3.render(f5); + this.Lock_3.render(f5); + this.Lid_4.render(f5); + this.Body_4.render(f5); + this.Lock_4.render(f5); + } + + private void setRotation(final ModelRenderer model, final float x, final float y, final float z) { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(final float f, final float f1, final float f2, final float f3, final float f4, final float f5) { + super.setRotationAngles(f, f1, f2, f3, f4, f5, (Entity) null); + } +} diff --git a/src/main/java/binnie/core/machines/storage/ModuleStorage.java b/src/main/java/binnie/core/machines/storage/ModuleStorage.java new file mode 100644 index 00000000..7cd96789 --- /dev/null +++ b/src/main/java/binnie/core/machines/storage/ModuleStorage.java @@ -0,0 +1,41 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.storage; + +import net.minecraft.item.crafting.IRecipe; +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraftforge.oredict.ShapedOreRecipe; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraftforge.oredict.OreDictionary; +import net.minecraft.creativetab.CreativeTabs; +import binnie.core.machines.MachineGroup; +import binnie.core.BinnieCore; +import binnie.core.IInitializable; + +public class ModuleStorage implements IInitializable +{ + @Override + public void preInit() { + (BinnieCore.packageCompartment = new MachineGroup(BinnieCore.instance, "storage", "storage", Compartment.values())).setCreativeTab(CreativeTabs.tabBlock); + } + + @Override + public void init() { + } + + @Override + public void postInit() { + final String ironGear = OreDictionary.getOres("gearIron").isEmpty() ? "ingotIron" : "gearIron"; + final String goldGear = OreDictionary.getOres("gearGold").isEmpty() ? "ingotGold" : "gearGold"; + final String diamondGear = "gemDiamond"; + GameRegistry.addRecipe(new ShapedOreRecipe(Compartment.Compartment.get(1), new Object[] { "pcp", "cbc", "pcp", 'b', Items.book, 'c', Blocks.chest, 'p', Blocks.stone_button })); + GameRegistry.addRecipe(new ShapedOreRecipe(Compartment.CompartmentCopper.get(1), new Object[] { "pcp", "cbc", "pcp", 'b', Compartment.Compartment.get(1), 'c', "gearCopper", 'p', Blocks.stone_button })); + GameRegistry.addRecipe(new ShapedOreRecipe(Compartment.CompartmentBronze.get(1), new Object[] { "pcp", "cbc", "pcp", 'b', Compartment.CompartmentCopper.get(1), 'c', "gearBronze", 'p', Items.gold_nugget })); + GameRegistry.addRecipe(new ShapedOreRecipe(Compartment.CompartmentIron.get(1), new Object[] { "pcp", "cbc", "pcp", 'b', Compartment.CompartmentCopper.get(1), 'c', ironGear, 'p', Items.gold_nugget })); + GameRegistry.addRecipe(new ShapedOreRecipe(Compartment.CompartmentGold.get(1), new Object[] { "pcp", "cbc", "pcp", 'b', Compartment.CompartmentIron.get(1), 'c', goldGear, 'p', Items.emerald })); + GameRegistry.addRecipe(new ShapedOreRecipe(Compartment.CompartmentDiamond.get(1), new Object[] { "pcp", "cbc", "pcp", 'b', Compartment.CompartmentGold.get(1), 'c', diamondGear, 'p', Items.emerald })); + } +} diff --git a/src/main/java/binnie/core/machines/storage/StandardCompartment.java b/src/main/java/binnie/core/machines/storage/StandardCompartment.java new file mode 100644 index 00000000..34205fa5 --- /dev/null +++ b/src/main/java/binnie/core/machines/storage/StandardCompartment.java @@ -0,0 +1,146 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.storage; + +import binnie.core.machines.TileEntityMachine; +import net.minecraft.tileentity.TileEntity; +import binnie.core.gui.BinnieCoreGUI; +import binnie.core.machines.Machine; +import binnie.core.texture.BinnieCoreTexture; + +class StandardCompartment +{ + public static class PackageCompartment extends Compartment.PackageCompartment + { + public PackageCompartment() { + super("compartment", BinnieCoreTexture.Compartment); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentBinnieCoreGUI(machine, BinnieCoreGUI.Compartment); + new ComponentCompartmentInventory(machine, 4, 25); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + } + + public static class PackageCompartmentCopper extends Compartment.PackageCompartment + { + public PackageCompartmentCopper() { + super("compartmentCopper", BinnieCoreTexture.CompartmentCopper); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentBinnieCoreGUI(machine, BinnieCoreGUI.Compartment); + new ComponentCompartmentInventory(machine, 6, 25); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + } + + public static class PackageCompartmentBronze extends Compartment.PackageCompartment + { + public PackageCompartmentBronze() { + super("compartmentBronze", BinnieCoreTexture.CompartmentBronze); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentBinnieCoreGUI(machine, BinnieCoreGUI.Compartment); + new ComponentCompartmentInventory(machine, 8, 25); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + } + + public static class PackageCompartmentIron extends Compartment.PackageCompartment + { + public PackageCompartmentIron() { + super("compartmentIron", BinnieCoreTexture.CompartmentIron); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentBinnieCoreGUI(machine, BinnieCoreGUI.Compartment); + new ComponentCompartmentInventory(machine, 4, 50); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + } + + public static class PackageCompartmentGold extends Compartment.PackageCompartment + { + public PackageCompartmentGold() { + super("compartmentGold", BinnieCoreTexture.CompartmentGold); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentBinnieCoreGUI(machine, BinnieCoreGUI.Compartment); + new ComponentCompartmentInventory(machine, 6, 50); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + } + + public static class PackageCompartmentDiamond extends Compartment.PackageCompartment + { + public PackageCompartmentDiamond() { + super("compartmentDiamond", BinnieCoreTexture.CompartmentDiamond); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentBinnieCoreGUI(machine, BinnieCoreGUI.Compartment); + new ComponentCompartmentInventory(machine, 8, 50); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + } +} diff --git a/src/main/java/binnie/core/machines/storage/WindowCompartment.java b/src/main/java/binnie/core/machines/storage/WindowCompartment.java new file mode 100644 index 00000000..934b2717 --- /dev/null +++ b/src/main/java/binnie/core/machines/storage/WindowCompartment.java @@ -0,0 +1,481 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.storage; + +import binnie.core.machines.transfer.TransferRequest; +import binnie.core.BinnieCore; +import binnie.core.AbstractMod; + +import binnie.craftgui.minecraft.control.ControlSlot; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Collections; +import java.util.Comparator; +import java.util.LinkedList; +import java.util.Map.Entry; + +import net.minecraft.init.Blocks; +import net.minecraft.block.Block; + +import binnie.craftgui.controls.ControlCheckbox; +import binnie.craftgui.core.geometry.IBorder; +import binnie.craftgui.controls.scroll.ControlScrollableContent; +import binnie.craftgui.minecraft.Dialog; +import binnie.craftgui.controls.button.ControlButton; +import binnie.craftgui.minecraft.EnumColor; +import binnie.craftgui.events.EventMouse; +import binnie.craftgui.core.Attribute; + +import net.minecraft.init.Items; + +import binnie.craftgui.events.EventTextEdit; +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.minecraft.control.ControlSlide; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.minecraft.control.ControlSlotArray; +import binnie.craftgui.resource.Texture; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.minecraft.MinecraftGUI; +import binnie.craftgui.core.geometry.CraftGUIUtil; +import binnie.craftgui.controls.page.ControlPage; +import binnie.craftgui.controls.page.ControlPages; +import binnie.craftgui.events.EventHandler; +import net.minecraft.nbt.NBTTagCompound; + +import binnie.craftgui.events.EventValueChanged; + +import java.util.Arrays; + +import net.minecraft.item.ItemStack; + +import binnie.craftgui.minecraft.control.ControlTabIcon; +import binnie.craftgui.controls.tab.ControlTab; +import binnie.craftgui.controls.tab.ControlTabBar; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.core.Control; +import binnie.core.machines.Machine; + +import java.util.HashMap; + +import binnie.craftgui.minecraft.Window; + +import cpw.mods.fml.relauncher.Side; + +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; + +import binnie.craftgui.minecraft.control.ControlItemDisplay; +import binnie.craftgui.controls.ControlTextEdit; +import binnie.craftgui.window.Panel; + +import java.util.Map; + +import binnie.craftgui.minecraft.IWindowAffectsShiftClick; +import binnie.craftgui.genetics.machine.WindowMachine; + +public class WindowCompartment extends WindowMachine implements IWindowAffectsShiftClick +{ + private final Map panels; + private ControlTextEdit tabName; + private ControlItemDisplay tabIcon; + private ControlColourSelector tabColour; + boolean dueUpdate; + private int currentTab; + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + return new WindowCompartment(player, inventory, side); + } + + public WindowCompartment(final EntityPlayer player, final IInventory inventory, final Side side) { + super(320, 226, player, inventory, side); + this.panels = new HashMap(); + this.currentTab = 0; + } + + @Override + public void initialiseClient() { + this.setTitle(Machine.getMachine(this.getInventory()).getPackage().getDisplayName()); + int x = 16; + final int y = 32; + final ComponentCompartmentInventory inv = Machine.getMachine(this.getInventory()).getInterface(ComponentCompartmentInventory.class); + Integer[] tabs1 = new Integer[0]; + Integer[] tabs2 = new Integer[0]; + if (inv.getTabNumber() == 4) { + tabs1 = new Integer[] { 0, 1 }; + tabs2 = new Integer[] { 2, 3 }; + } + if (inv.getTabNumber() == 6) { + tabs1 = new Integer[] { 0, 1, 2 }; + tabs2 = new Integer[] { 3, 4, 5 }; + } + if (inv.getTabNumber() == 8) { + tabs1 = new Integer[] { 0, 1, 2, 3 }; + tabs2 = new Integer[] { 4, 5, 6, 7 }; + } + final boolean doubleTabbed = tabs2.length > 0; + final int compartmentPageWidth = 16 + 18 * inv.getPageSize() / 5; + final int compartmentPageHeight = 106; + final int compartmentWidth = compartmentPageWidth + (doubleTabbed ? 48 : 24); + final int compartmentHeight = compartmentPageHeight; + final Control controlCompartment = new Control(this, x, y, compartmentWidth, compartmentHeight); + final ControlTabBar tab = new ControlTabBar(controlCompartment, 0.0f, 0.0f, 24.0f, compartmentPageHeight, Position.Left) { + @Override + public ControlTab createTab(final float x, final float y, final float w, final float h, final Integer value) { + return new ControlTabIcon(this, x, y, w, h, value) { + @Override + public ItemStack getItemStack() { + return WindowCompartment.this.getTab(this.value).getIcon(); + } + + @Override + public String getName() { + return WindowCompartment.this.getTab(this.value).getName(); + } + + @Override + public int getOutlineColour() { + return WindowCompartment.this.getTab(this.value).getColor().getColour(); + } + + @Override + public boolean hasOutline() { + return true; + } + }; + } + }; + final String[] tabHelp = { "Compartment Tab", "Tabs that divide the inventory into sections. Each one can be labelled seperately." }; + tab.addHelp(tabHelp); + tab.setValues(Arrays.asList(tabs1)); + tab.setValue(0); + tab.addEventHandler(new EventValueChanged.Handler() { + @Override + public void onEvent(final EventValueChanged event) { + final NBTTagCompound nbt = new NBTTagCompound(); + final int i = ((Integer) event.getValue()).intValue(); + nbt.setByte("i", (byte) i); + Window.get(tab).sendClientAction("tab-change", nbt); + WindowCompartment.this.currentTab = i; + } + }.setOrigin(EventHandler.Origin.DirectChild, tab)); + x += 24; + final ControlPages compartmentPages = new ControlPages(controlCompartment, 24.0f, 0.0f, compartmentPageWidth, compartmentPageHeight); + final ControlPage[] page = new ControlPage[inv.getTabNumber()]; + for (int p = 0; p < inv.getTabNumber(); ++p) { + page[p] = new ControlPage(compartmentPages, Integer.valueOf(p)); + } + CraftGUIUtil.linkWidgets(tab, compartmentPages); + int i = 0; + for (int p2 = 0; p2 < inv.getTabNumber(); ++p2) { + final ControlPage thisPage = page[p2]; + final Panel panel = new Panel(thisPage, 0.0f, 0.0f, thisPage.w(), thisPage.h(), MinecraftGUI.PanelType.Black) { + @Override + public void onRenderForeground() { + final Texture iTexture = CraftGUI.Render.getTexture(CraftGUITexture.TabOutline); + CraftGUI.Render.colour(WindowCompartment.this.getTab(WindowCompartment.this.panels.get(this)).getColor().getColour()); + CraftGUI.Render.texture(iTexture, this.getArea().inset(3)); + } + }; + this.panels.put(panel, p2); + final int[] slotsIDs = new int[inv.getPageSize()]; + for (int k = 0; k < inv.getPageSize(); ++k) { + slotsIDs[k] = i++; + } + new ControlSlotArray(thisPage, 8, 8, inv.getPageSize() / 5, 5).create(slotsIDs); + } + x += compartmentPageWidth; + if (tabs2.length > 0) { + final ControlTabBar tab2 = new ControlTabBar(controlCompartment, 24 + compartmentPageWidth, 0.0f, 24.0f, compartmentPageHeight, Position.Right) { + @Override + public ControlTab createTab(final float x, final float y, final float w, final float h, final Integer value) { + return new ControlTabIcon(this, x, y, w, h, value) { + @Override + public ItemStack getItemStack() { + return WindowCompartment.this.getTab(this.value).getIcon(); + } + + @Override + public String getName() { + return WindowCompartment.this.getTab(this.value).getName(); + } + + @Override + public int getOutlineColour() { + return WindowCompartment.this.getTab(this.value).getColor().getColour(); + } + + @Override + public boolean hasOutline() { + return true; + } + }; + } + }; + tab2.setValues(Arrays.asList(tabs2)); + tab2.setValue(0); + tab2.addHelp(tabHelp); + tab2.addEventHandler(new EventValueChanged.Handler() { + @Override + public void onEvent(final EventValueChanged event) { + final NBTTagCompound nbt = new NBTTagCompound(); + final int i = ((Integer) event.getValue()).intValue(); + nbt.setByte("i", (byte) i); + Window.get(tab).sendClientAction("tab-change", nbt); + WindowCompartment.this.currentTab = i; + } + }.setOrigin(EventHandler.Origin.DirectChild, tab2)); + CraftGUIUtil.linkWidgets(tab2, compartmentPages); + x += 24; + } + x += 16; + this.setSize(new IPoint(Math.max(32 + compartmentWidth, 252), this.h())); + controlCompartment.setPosition(new IPoint((this.w() - controlCompartment.w()) / 2.0f, controlCompartment.y())); + final ControlPlayerInventory invent = new ControlPlayerInventory(this, true); + final ControlSlide slide = new ControlSlide(this, 0.0f, 134.0f, 136.0f, 92.0f, Position.Left); + slide.setLabel("Tab Properties"); + slide.setSlide(false); + slide.addHelp("Tab Properties"); + slide.addHelp("The label, colour and icon of the Tab can be altered here. Clicking on the icon with a held item will change it."); + final Panel tabPropertyPanel = new Panel(slide, 16.0f, 8.0f, 112.0f, 76.0f, MinecraftGUI.PanelType.Gray); + int y2 = 4; + new ControlText(tabPropertyPanel, new IPoint(4.0f, y2), "Tab Name:"); + final Panel parent = tabPropertyPanel; + final float x2 = 4.0f; + y2 += 12; + (this.tabName = new ControlTextEdit(parent, x2, y2, 104.0f, 12.0f)).addSelfEventHandler(new EventTextEdit.Handler() { + @Override + public void onEvent(final EventTextEdit event) { + final CompartmentTab tab = WindowCompartment.this.getCurrentTab(); + tab.setName(event.getValue()); + final NBTTagCompound nbt = new NBTTagCompound(); + tab.writeToNBT(nbt); + WindowCompartment.this.sendClientAction("comp-change-tab", nbt); + } + }.setOrigin(EventHandler.Origin.Self, this.tabName)); + y2 += 20; + new ControlText(tabPropertyPanel, new IPoint(4.0f, y2), "Tab Icon: "); + (this.tabIcon = new ControlItemDisplay(tabPropertyPanel, 58.0f, y2 - 4)).setItemStack(new ItemStack(Items.paper)); + this.tabIcon.addAttribute(Attribute.MouseOver); + this.tabIcon.addSelfEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + if (WindowCompartment.this.getHeldItemStack() == null) { + return; + } + final CompartmentTab tab = WindowCompartment.this.getCurrentTab(); + final ItemStack stack = WindowCompartment.this.getHeldItemStack().copy(); + stack.stackSize = 1; + tab.setIcon(stack); + final NBTTagCompound nbt = new NBTTagCompound(); + tab.writeToNBT(nbt); + WindowCompartment.this.sendClientAction("comp-change-tab", nbt); + } + }); + this.tabColour = new ControlColourSelector(tabPropertyPanel, 82.0f, y2 - 4, 16.0f, 16.0f, EnumColor.White); + this.tabIcon.addHelp("Icon for Current Tab"); + this.tabIcon.addHelp("Click here with an item to change"); + y2 += 20; + new ControlText(tabPropertyPanel, new IPoint(4.0f, y2), "Colour: "); + final int cw = 8; + final Panel panelColour = new Panel(tabPropertyPanel, 40.0f, y2 - 4, cw * 8 + 2, cw * 2 + 1, MinecraftGUI.PanelType.Gray); + for (int cc = 0; cc < 16; ++cc) { + final ControlColourSelector color = new ControlColourSelector(panelColour, 1 + cw * (cc % 8), 1 + cw * (cc / 8), cw, cw, EnumColor.values()[cc]); + color.addSelfEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + final CompartmentTab tab = WindowCompartment.this.getCurrentTab(); + tab.setColor(color.getValue()); + final NBTTagCompound nbt = new NBTTagCompound(); + tab.writeToNBT(nbt); + WindowCompartment.this.sendClientAction("comp-change-tab", nbt); + } + }); + color.addHelp("Colour Selector"); + color.addHelp("Select a colour to highlight the current tab"); + } + y2 += 20; + final ControlButton searchButton = new ControlButton(controlCompartment, compartmentWidth - 24 - 64 - 8, compartmentPageHeight, 64.0f, 16.0f, "Search") { + @Override + protected void onMouseClick(final EventMouse.Down event) { + WindowCompartment.this.createSearchDialog(); + } + + @Override + public void onRenderBackground() { + final Object texture = this.isMouseOver() ? CraftGUITexture.TabHighlighted : CraftGUITexture.Tab; + CraftGUI.Render.texture(CraftGUI.Render.getTexture(texture).crop(Position.Bottom, 8.0f), this.getArea()); + } + }; + searchButton.addHelp("Search Button"); + searchButton.addHelp("Clicking this will open the Search dialog. This allows you to search the inventory for specific items."); + } + + public void createSearchDialog() { + new Dialog(this, 252.0f, 192.0f) { + Control slotGrid; + String textSearch = ""; + boolean sortByName = false; + boolean includeItems = true; + boolean includeBlocks = true; + + @Override + public void onClose() { + } + + @Override + public void initialise() { + final ControlScrollableContent scroll = new ControlScrollableContent(this, 124.0f, 16.0f, 116.0f, 92.0f, 6.0f) { + @Override + public void onRenderBackground() { + CraftGUI.Render.colour(11184810); + CraftGUI.Render.texture(CraftGUITexture.Outline, this.getArea().inset(new IBorder(0.0f, 6.0f, 0.0f, 0.0f))); + } + }; + scroll.setScrollableContent(this.slotGrid = new Control(scroll, 1.0f, 1.0f, 108.0f, 18.0f)); + new ControlPlayerInventory(this, true); + new ControlTextEdit(this, 16.0f, 16.0f, 100.0f, 14.0f).addEventHandler(new EventTextEdit.Handler() { + @Override + public void onEvent(final EventTextEdit event) { + textSearch = event.value; + updateSearch(); + } + }); + this.includeItems = true; + this.includeBlocks = true; + new ControlCheckbox(this, 16.0f, 40.0f, 100.0f, "Sort A-Z", this.sortByName) { + @Override + protected void onValueChanged(final boolean value) { + sortByName = value; + updateSearch(); + } + }; + new ControlCheckbox(this, 16.0f, 64.0f, 100.0f, "Include Items", this.includeItems) { + @Override + protected void onValueChanged(final boolean value) { + includeItems = value; + updateSearch(); + } + }; + new ControlCheckbox(this, 16.0f, 88.0f, 100.0f, "Include Blocks", this.includeBlocks) { + @Override + protected void onValueChanged(final boolean value) { + includeBlocks = value; + updateSearch(); + } + }; + this.updateSearch(); + } + + private void updateSearch() { + Map slotIds = new HashMap(); + final IInventory inv = WindowCompartment.this.getInventory(); + for (int i = 0; i < inv.getSizeInventory(); ++i) { + final ItemStack stack = inv.getStackInSlot(i); + if (stack != null) { + final String name = stack.getDisplayName().toLowerCase(); + if (this.textSearch == null || name.contains(this.textSearch)) { + if (this.includeBlocks || Block.getBlockFromItem(stack.getItem()) == Blocks.air) { + if (this.includeItems || Block.getBlockFromItem(stack.getItem()) != Blocks.air) { + slotIds.put(i, name); + } + } + } + } + } + if (this.sortByName) { + final List> list = new LinkedList(slotIds.entrySet()); + Collections.sort(list, new Comparator>() { + @Override + public int compare(Entry o1, Entry o2) { + return -o2.getValue().compareTo(o1.getValue()); + } + }); + final Map result = new LinkedHashMap(); + for (final Map.Entry entry : list) { + result.put(entry.getKey(), entry.getValue()); + } + slotIds = result; + } + int y = 0; + int x = 0; + final int width = 108; + final int height = 2 + 18 * (1 + (slotIds.size() - 1) / 6); + this.slotGrid.deleteAllChildren(); + this.slotGrid.setSize(new IPoint(width, height)); + for (final int k : slotIds.keySet()) { + new ControlSlot(this.slotGrid, x, y).assign(k); + x += 18; + if (x >= 108) { + x = 0; + y += 18; + } + } + while (y < 108 || x != 0) { + new ControlSlot(this.slotGrid, x, y); + x += 18; + if (x >= 108) { + x = 0; + y += 18; + } + } + } + }; + } + + @Override + public void onUpdateClient() { + super.onUpdateClient(); + this.updateTabs(); + } + + public void updateTabs() { + this.tabName.setValue(this.getCurrentTab().getName()); + this.tabIcon.setItemStack(this.getCurrentTab().getIcon()); + this.tabColour.setValue(this.getCurrentTab().getColor()); + } + + @Override + public void recieveGuiNBT(final Side side, final EntityPlayer player, final String name, final NBTTagCompound action) { + super.recieveGuiNBT(side, player, name, action); + if (name.equals("tab-change")) { + this.currentTab = action.getByte("i"); + } + } + + @Override + public String getTitle() { + return "Compartment"; + } + + @Override + protected AbstractMod getMod() { + return BinnieCore.instance; + } + + @Override + protected String getName() { + return "compartment"; + } + + @Override + public void alterRequest(final TransferRequest request) { + if (request.getDestination() == this.getInventory()) { + final ComponentCompartmentInventory inv = Machine.getMachine(this.getInventory()).getInterface(ComponentCompartmentInventory.class); + request.setTargetSlots(inv.getSlotsForTab(this.currentTab)); + } + } + + public CompartmentTab getTab(final int i) { + return Machine.getInterface(ComponentCompartmentInventory.class, this.getInventory()).getTab(i); + } + + public CompartmentTab getCurrentTab() { + return this.getTab(this.currentTab); + } +} diff --git a/src/main/java/binnie/core/machines/storage/WindowTest.java b/src/main/java/binnie/core/machines/storage/WindowTest.java new file mode 100644 index 00000000..49b727cb --- /dev/null +++ b/src/main/java/binnie/core/machines/storage/WindowTest.java @@ -0,0 +1,43 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.storage; + +import binnie.core.BinnieCore; +import binnie.core.AbstractMod; +import binnie.craftgui.minecraft.Window; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.genetics.machine.WindowMachine; + +public class WindowTest extends WindowMachine +{ + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + return new WindowCompartment(player, inventory, side); + } + + public WindowTest(final EntityPlayer player, final IInventory inventory, final Side side) { + super(320, 240, player, inventory, side); + } + + @Override + public void initialiseClient() { + } + + @Override + public String getTitle() { + return "Test"; + } + + @Override + protected AbstractMod getMod() { + return BinnieCore.instance; + } + + @Override + protected String getName() { + return "Test"; + } +} diff --git a/src/main/java/binnie/core/machines/transfer/TransferHandler.java b/src/main/java/binnie/core/machines/transfer/TransferHandler.java new file mode 100644 index 00000000..5e6c9e3d --- /dev/null +++ b/src/main/java/binnie/core/machines/transfer/TransferHandler.java @@ -0,0 +1,9 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.transfer; + +public class TransferHandler +{ +} diff --git a/src/main/java/binnie/core/machines/transfer/TransferRequest.java b/src/main/java/binnie/core/machines/transfer/TransferRequest.java new file mode 100644 index 00000000..c7f101e0 --- /dev/null +++ b/src/main/java/binnie/core/machines/transfer/TransferRequest.java @@ -0,0 +1,382 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.machines.transfer; + +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.IFluidTank; +import net.minecraftforge.fluids.FluidStack; +import binnie.core.machines.Machine; +import binnie.core.machines.inventory.IValidatedTankContainer; +import net.minecraftforge.fluids.IFluidContainerItem; +import binnie.core.machines.inventory.IInventorySlots; +import binnie.core.machines.power.ITankMachine; +import java.util.ArrayList; +import java.util.List; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; + +public class TransferRequest +{ + private ItemStack itemToTransfer; + private ItemStack returnItem; + private IInventory origin; + private IInventory destination; + private int[] targetSlots; + private int[] targetTanks; + private boolean transferLiquids; + private boolean ignoreReadOnly; + private List insertedSlots; + private List insertedTanks; + + public TransferRequest(final ItemStack toTransfer, final IInventory destination) { + this.itemToTransfer = null; + this.returnItem = null; + this.targetSlots = new int[0]; + this.targetTanks = new int[0]; + this.transferLiquids = true; + this.ignoreReadOnly = false; + this.insertedSlots = new ArrayList(); + this.insertedTanks = new ArrayList(); + final int[] target = new int[destination.getSizeInventory()]; + for (int i = 0; i < target.length; ++i) { + target[i] = i; + } + int[] targetTanks = new int[0]; + if (destination instanceof ITankMachine) { + targetTanks = new int[((ITankMachine) destination).getTanks().length]; + for (int j = 0; j < targetTanks.length; ++j) { + targetTanks[j] = j; + } + } + if (toTransfer != null) { + this.setItemToTransfer(toTransfer.copy()); + this.setReturnItem(toTransfer.copy()); + } + this.setOrigin(null); + this.setDestination(destination); + this.setTargetSlots(target); + this.setTargetTanks(targetTanks); + this.transferLiquids = true; + } + + private void setItemToTransfer(final ItemStack itemToTransfer) { + this.itemToTransfer = itemToTransfer; + } + + private void setReturnItem(final ItemStack returnItem) { + this.returnItem = returnItem; + } + + public TransferRequest setOrigin(final IInventory origin) { + this.origin = origin; + return this; + } + + private void setDestination(final IInventory destination) { + this.destination = destination; + } + + public TransferRequest setTargetSlots(final int[] targetSlots) { + this.targetSlots = targetSlots; + return this; + } + + public TransferRequest setTargetTanks(final int[] targetTanks) { + this.targetTanks = targetTanks; + return this; + } + + public TransferRequest ignoreValidation() { + this.ignoreReadOnly = true; + return this; + } + + public ItemStack getReturnItem() { + return this.returnItem; + } + + public ItemStack transfer(final boolean doAdd) { + ItemStack item = this.returnItem; + if (item == null || this.destination == null) { + return null; + } + if (this.transferLiquids && this.destination instanceof ITankMachine) { + for (final int tankID : this.targetTanks) { + item = this.transferToTank(item, this.origin, (ITankMachine) this.destination, tankID, doAdd); + if (item != null) { + item = this.transferFromTank(item, this.origin, (ITankMachine) this.destination, tankID, doAdd); + } + } + } + if (item != null) { + for (final int slot : this.targetSlots) { + if (this.destination.isItemValidForSlot(slot, item) || this.ignoreReadOnly) { + if (!(this.destination instanceof IInventorySlots) || ((IInventorySlots) this.destination).getSlot(slot) == null || !((IInventorySlots) this.destination).getSlot(slot).isRecipe()) { + if (this.destination.getStackInSlot(slot) != null) { + if (item.isStackable()) { + final ItemStack merged = this.destination.getStackInSlot(slot).copy(); + final ItemStack[] newStacks = mergeStacks(item.copy(), merged.copy()); + item = newStacks[0]; + if (!areItemsEqual(merged, newStacks[1])) { + this.insertedSlots.add(new TransferSlot(slot, this.destination)); + } + if (doAdd) { + this.destination.setInventorySlotContents(slot, newStacks[1]); + } + if (item == null) { + return null; + } + } + } + } + } + } + } + if (item != null) { + for (final int slot : this.targetSlots) { + if (this.destination.isItemValidForSlot(slot, item) || this.ignoreReadOnly) { + if (!(this.destination instanceof IInventorySlots) || ((IInventorySlots) this.destination).getSlot(slot) == null || !((IInventorySlots) this.destination).getSlot(slot).isRecipe()) { + if (this.destination.getStackInSlot(slot) == null && item != null) { + this.insertedSlots.add(new TransferSlot(slot, this.destination)); + if (doAdd) { + this.destination.setInventorySlotContents(slot, item.copy()); + } + return null; + } + } + } + } + } + this.setReturnItem(item); + return this.getReturnItem(); + } + + private static boolean areItemsEqual(final ItemStack merged, final ItemStack itemstack) { + return ItemStack.areItemStackTagsEqual(itemstack, merged) && itemstack.isItemEqual(merged); + } + + public static ItemStack[] mergeStacks(ItemStack itemstack, final ItemStack merged) { + if (areItemsEqual(itemstack, merged)) { + final int space = merged.getMaxStackSize() - merged.stackSize; + if (space > 0) { + if (itemstack.stackSize > space) { + final ItemStack itemStack = itemstack; + itemStack.stackSize -= space; + merged.stackSize += space; + } + else if (itemstack.stackSize <= space) { + merged.stackSize += itemstack.stackSize; + itemstack = null; + } + } + } + return new ItemStack[] { itemstack, merged }; + } + + private ItemStack transferToTank(ItemStack item, final IInventory origin, final ITankMachine destination, final int tankID, final boolean doAdd) { + item = this.transferToTankUsingContainerData(item, origin, destination, tankID, doAdd); + item = this.transferToTankUsingFluidContainer(item, origin, destination, tankID, doAdd); + return item; + } + + private ItemStack transferToTankUsingFluidContainer(final ItemStack item, final IInventory origin, final ITankMachine destination, final int tankID, final boolean doAdd) { + if (item == null || !(item.getItem() instanceof IFluidContainerItem)) { + return item; + } + final IFluidContainerItem fluidContainer = (IFluidContainerItem) item.getItem(); + final FluidStack fluid = fluidContainer.getFluid(item); + if (fluid == null) { + return item; + } + final IFluidTank tank = destination.getTanks()[tankID]; + final IValidatedTankContainer validated = Machine.getInterface(IValidatedTankContainer.class, destination); + if (validated != null && (!validated.isLiquidValidForTank(fluid, tankID) || validated.isTankReadOnly(tankID))) { + return item; + } + final int maxFill = tank.fill(fluid, false); + final FluidStack toTake = fluidContainer.drain(item, maxFill, true); + if (doAdd) { + tank.fill(toTake, true); + } + return item; + } + + private ItemStack transferToTankUsingContainerData(final ItemStack item, final IInventory origin, final ITankMachine destination, final int tankID, final boolean doAdd) { + if (item == null) { + return item; + } + FluidStack containerLiquid = null; + FluidContainerRegistry.FluidContainerData containerLiquidData = null; + for (final FluidContainerRegistry.FluidContainerData data : FluidContainerRegistry.getRegisteredFluidContainerData()) { + if (data.filledContainer.isItemEqual(item)) { + containerLiquidData = data; + containerLiquid = data.fluid.copy(); + break; + } + } + if (containerLiquid == null) { + return item; + } + final IFluidTank tank = destination.getTanks()[tankID]; + final IValidatedTankContainer validated = Machine.getInterface(IValidatedTankContainer.class, destination); + if (validated != null && (!validated.isLiquidValidForTank(containerLiquid, tankID) || validated.isTankReadOnly(tankID))) { + return item; + } + final FluidStack largeAmountOfLiquid = containerLiquid.copy(); + largeAmountOfLiquid.amount = tank.getCapacity(); + final int amountAdded = tank.fill(largeAmountOfLiquid, false); + int numberOfContainersToAdd = amountAdded / containerLiquid.amount; + if (numberOfContainersToAdd > item.stackSize) { + numberOfContainersToAdd = item.stackSize; + } + final ItemStack copy; + ItemStack leftOverContainers = copy = item.copy(); + copy.stackSize -= numberOfContainersToAdd; + if (leftOverContainers.stackSize <= 0) { + leftOverContainers = null; + } + ItemStack emptyContainers = containerLiquidData.emptyContainer.copy(); + emptyContainers.stackSize = 0; + final ItemStack itemStack = emptyContainers; + itemStack.stackSize += numberOfContainersToAdd; + if (emptyContainers.stackSize <= 0) { + emptyContainers = null; + } + final TransferRequest containersDump = new TransferRequest(emptyContainers, origin); + final ItemStack containersThatCantBeDumped = containersDump.transfer(false); + if (containersThatCantBeDumped != null) { + return item; + } + if (doAdd) { + final FluidStack copy2; + final FluidStack liquidToFillTank = copy2 = containerLiquid.copy(); + copy2.amount *= numberOfContainersToAdd; + tank.fill(liquidToFillTank, true); + containersDump.transfer(true); + } + return leftOverContainers; + } + + private ItemStack transferFromTank(ItemStack item, final IInventory origin, final ITankMachine destination, final int tankID, final boolean doAdd) { + item = this.transferFromTankUsingContainerData(item, origin, destination, tankID, doAdd); + item = this.transferFromTankUsingFluidContainer(item, origin, destination, tankID, doAdd); + return item; + } + + private ItemStack transferFromTankUsingFluidContainer(final ItemStack item, final IInventory origin, final ITankMachine destination, final int tankID, final boolean doAdd) { + if (item == null || !(item.getItem() instanceof IFluidContainerItem)) { + return item; + } + final IFluidContainerItem fluidContainer = (IFluidContainerItem) item.getItem(); + final IFluidTank tank = destination.getTanks()[tankID]; + final FluidStack fluid = tank.getFluid(); + if (fluid == null) { + return item; + } + int amount = fluidContainer.fill(item, fluid, false); + amount = Math.min(amount, (tank.drain(amount, false) == null) ? 0 : tank.drain(amount, false).amount); + if (amount <= 0) { + return item; + } + fluidContainer.fill(item, tank.drain(amount, doAdd), doAdd); + return item; + } + + private ItemStack transferFromTankUsingContainerData(final ItemStack item, final IInventory origin, final ITankMachine destination, final int tankID, final boolean doAdd) { + if (item == null) { + return item; + } + final IFluidTank tank = destination.getTanks()[tankID]; + final FluidStack liquidInTank = tank.getFluid(); + if (liquidInTank == null) { + return item; + } + FluidContainerRegistry.FluidContainerData containerLiquidData = null; + for (final FluidContainerRegistry.FluidContainerData data : FluidContainerRegistry.getRegisteredFluidContainerData()) { + if (data.emptyContainer.isItemEqual(item) && liquidInTank.isFluidEqual(data.fluid)) { + containerLiquidData = data; + break; + } + } + FluidStack fluid = null; + ItemStack filled = null; + if (containerLiquidData != null) { + fluid = containerLiquidData.fluid; + filled = containerLiquidData.filledContainer; + } + if (fluid == null || filled == null) { + return item; + } + final int maximumExtractedLiquid = item.stackSize * fluid.amount; + final FluidStack drainedLiquid = tank.drain(maximumExtractedLiquid, false); + final int amountInTank = (drainedLiquid == null) ? 0 : drainedLiquid.amount; + int numberOfContainersToFill = amountInTank / fluid.amount; + if (numberOfContainersToFill > item.stackSize) { + numberOfContainersToFill = item.stackSize; + } + final ItemStack copy; + ItemStack leftOverContainers = copy = item.copy(); + copy.stackSize -= numberOfContainersToFill; + if (leftOverContainers.stackSize <= 0) { + leftOverContainers = null; + } + ItemStack filledContainers = filled.copy(); + filledContainers.stackSize = 0; + final ItemStack itemStack = filledContainers; + itemStack.stackSize += numberOfContainersToFill; + if (filledContainers.stackSize <= 0) { + filledContainers = null; + } + final TransferRequest containersDump = new TransferRequest(filledContainers, origin); + final ItemStack containersThatCantBeDumped = containersDump.transfer(false); + if (containersThatCantBeDumped != null) { + return item; + } + if (doAdd) { + tank.drain(maximumExtractedLiquid, true); + containersDump.transfer(true); + } + return leftOverContainers; + } + + public List getInsertedSlots() { + return this.insertedSlots; + } + + public List getInsertedTanks() { + return this.insertedTanks; + } + + public IInventory getOrigin() { + return this.origin; + } + + public IInventory getDestination() { + return this.destination; + } + + public ItemStack getItemToTransfer() { + return this.itemToTransfer; + } + + public int[] getTargetSlots() { + return this.targetSlots; + } + + public int[] getTargetTanks() { + return this.targetTanks; + } + + public static class TransferSlot + { + public int id; + public IInventory inventory; + + public TransferSlot(final int id, final IInventory inventory) { + this.id = id; + this.inventory = inventory; + } + } +} diff --git a/src/main/java/binnie/core/mod/config/BinnieConfiguration.java b/src/main/java/binnie/core/mod/config/BinnieConfiguration.java new file mode 100644 index 00000000..b5213c49 --- /dev/null +++ b/src/main/java/binnie/core/mod/config/BinnieConfiguration.java @@ -0,0 +1,22 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.mod.config; + +import java.io.File; +import binnie.core.BinnieCore; +import binnie.core.AbstractMod; +import net.minecraftforge.common.config.Configuration; + +class BinnieConfiguration extends Configuration +{ + public AbstractMod mod; + private String filename; + + public BinnieConfiguration(final String filename, final AbstractMod mod) { + super(new File(BinnieCore.proxy.getDirectory(), filename)); + this.mod = mod; + this.filename = filename; + } +} diff --git a/src/main/java/binnie/core/mod/config/BinnieItemData.java b/src/main/java/binnie/core/mod/config/BinnieItemData.java new file mode 100644 index 00000000..fd6a6cb9 --- /dev/null +++ b/src/main/java/binnie/core/mod/config/BinnieItemData.java @@ -0,0 +1,18 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.mod.config; + +class BinnieItemData +{ + private int item; + private BinnieConfiguration configFile; + private String configKey; + + public BinnieItemData(final int item, final BinnieConfiguration configFile, final String configKey) { + this.item = item; + this.configFile = configFile; + this.configKey = configKey; + } +} diff --git a/src/main/java/binnie/core/mod/config/ConfigFile.java b/src/main/java/binnie/core/mod/config/ConfigFile.java new file mode 100644 index 00000000..b4c83554 --- /dev/null +++ b/src/main/java/binnie/core/mod/config/ConfigFile.java @@ -0,0 +1,13 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.mod.config; + +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Retention; + +@Retention(RetentionPolicy.RUNTIME) +public @interface ConfigFile { + String filename(); +} diff --git a/src/main/java/binnie/core/mod/config/ConfigProperty.java b/src/main/java/binnie/core/mod/config/ConfigProperty.java new file mode 100644 index 00000000..8e03f407 --- /dev/null +++ b/src/main/java/binnie/core/mod/config/ConfigProperty.java @@ -0,0 +1,28 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.mod.config; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Retention; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ ElementType.FIELD }) +public @interface ConfigProperty { + String key(); + + String category() default ""; + + String[] comment() default {}; + + @Retention(RetentionPolicy.RUNTIME) + @Target({ ElementType.ANNOTATION_TYPE }) + public @interface Type { + Class propertyClass(); + + String category() default "general"; + } +} diff --git a/src/main/java/binnie/core/mod/config/ConfigurationMain.java b/src/main/java/binnie/core/mod/config/ConfigurationMain.java new file mode 100644 index 00000000..a1043a81 --- /dev/null +++ b/src/main/java/binnie/core/mod/config/ConfigurationMain.java @@ -0,0 +1,10 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.mod.config; + +@ConfigFile(filename = "/config/forestry/binniecore/main.conf") +public class ConfigurationMain +{ +} diff --git a/src/main/java/binnie/core/mod/config/ConfigurationMods.java b/src/main/java/binnie/core/mod/config/ConfigurationMods.java new file mode 100644 index 00000000..b3fe6687 --- /dev/null +++ b/src/main/java/binnie/core/mod/config/ConfigurationMods.java @@ -0,0 +1,29 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.mod.config; + +@ConfigFile(filename = "/config/forestry/binnie-mods.conf") +public class ConfigurationMods +{ + @ConfigProperty(key = "extraBees", comment = { "Enables the Extra Bees Mod." }) + @PropBoolean + public static boolean extraBees; + @ConfigProperty(key = "extraTrees", comment = { "Enables the Extra Trees Mod." }) + @PropBoolean + public static boolean extraTrees; + @ConfigProperty(key = "botany", comment = { "Enables the Botany Mod." }) + @PropBoolean + public static boolean botany; + @ConfigProperty(key = "genetics", comment = { "Enables the Genetics Mod." }) + @PropBoolean + public static boolean genetics; + + static { + ConfigurationMods.extraBees = true; + ConfigurationMods.extraTrees = true; + ConfigurationMods.botany = true; + ConfigurationMods.genetics = true; + } +} diff --git a/src/main/java/binnie/core/mod/config/ManagerConfig.java b/src/main/java/binnie/core/mod/config/ManagerConfig.java new file mode 100644 index 00000000..4ba20816 --- /dev/null +++ b/src/main/java/binnie/core/mod/config/ManagerConfig.java @@ -0,0 +1,63 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.mod.config; + +import java.util.ArrayList; +import java.lang.reflect.Field; +import java.lang.annotation.Annotation; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import binnie.core.AbstractMod; +import net.minecraftforge.common.config.Configuration; +import java.util.Map; +import binnie.core.ManagerBase; + +public class ManagerConfig extends ManagerBase +{ + private Map, Configuration> configurations; + private Map> itemIDs; + + public ManagerConfig() { + this.configurations = new LinkedHashMap, Configuration>(); + this.itemIDs = new HashMap>(); + } + + public void registerConfiguration(final Class cls, final AbstractMod mod) { + if (cls.isAnnotationPresent(ConfigFile.class)) { + this.loadConfiguration(cls, mod); + } + } + + public void loadConfiguration(final Class cls, final AbstractMod mod) { + try { + final String filename = cls.getAnnotation(ConfigFile.class).filename(); + final BinnieConfiguration config = new BinnieConfiguration(filename, mod); + config.load(); + for (final Field field : cls.getFields()) { + if (field.isAnnotationPresent(ConfigProperty.class)) { + final ConfigProperty propertyAnnot = field.getAnnotation(ConfigProperty.class); + for (final Annotation annotation : field.getAnnotations()) { + if (annotation.annotationType().isAnnotationPresent(ConfigProperty.Type.class)) { + final Class propertyClass = annotation.annotationType().getAnnotation(ConfigProperty.Type.class).propertyClass(); + final PropertyBase property = (PropertyBase) propertyClass.getConstructor(Field.class, BinnieConfiguration.class, ConfigProperty.class, annotation.annotationType()).newInstance(field, config, propertyAnnot, annotation.annotationType().cast(annotation)); + } + } + } + } + config.save(); + this.configurations.put(cls, config); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void addItemID(final Integer configValue, final String configKey, final BinnieConfiguration configFile) { + if (!this.itemIDs.containsKey(configFile.mod)) { + this.itemIDs.put(configFile.mod, new ArrayList()); + } + this.itemIDs.get(configFile.mod).add(new BinnieItemData(configValue + 256, configFile, configKey)); + } +} diff --git a/src/main/java/binnie/core/mod/config/PropBoolean.java b/src/main/java/binnie/core/mod/config/PropBoolean.java new file mode 100644 index 00000000..c1094636 --- /dev/null +++ b/src/main/java/binnie/core/mod/config/PropBoolean.java @@ -0,0 +1,36 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.mod.config; + +import net.minecraftforge.common.config.Property; +import java.lang.reflect.Field; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Retention; + +@Retention(RetentionPolicy.RUNTIME) +@ConfigProperty.Type(propertyClass = PropBoolean.PropertyBoolean.class) +public @interface PropBoolean { + public static class PropertyBoolean extends PropertyBase + { + public PropertyBoolean(final Field field, final BinnieConfiguration file, final ConfigProperty configProperty, final PropBoolean annotedProperty) throws IllegalArgumentException, IllegalAccessException { + super(field, file, configProperty, annotedProperty); + } + + @Override + protected Property getProperty() { + return this.file.get(this.getCategory(), this.getKey(), this.defaultValue); + } + + @Override + protected Boolean getConfigValue() { + return this.property.getBoolean(this.defaultValue); + } + + @Override + protected void addComments() { + this.addComment("Default value is " + this.defaultValue + "."); + } + } +} diff --git a/src/main/java/binnie/core/mod/config/PropDouble.java b/src/main/java/binnie/core/mod/config/PropDouble.java new file mode 100644 index 00000000..1ea970c1 --- /dev/null +++ b/src/main/java/binnie/core/mod/config/PropDouble.java @@ -0,0 +1,36 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.mod.config; + +import net.minecraftforge.common.config.Property; +import java.lang.reflect.Field; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Retention; + +@Retention(RetentionPolicy.RUNTIME) +@ConfigProperty.Type(propertyClass = PropDouble.PropertyDouble.class) +public @interface PropDouble { + public static class PropertyDouble extends PropertyBase + { + public PropertyDouble(final Field field, final BinnieConfiguration file, final ConfigProperty configProperty, final PropDouble annotedProperty) throws IllegalArgumentException, IllegalAccessException { + super(field, file, configProperty, annotedProperty); + } + + @Override + protected Property getProperty() { + return this.file.get(this.getCategory(), this.getKey(), this.defaultValue); + } + + @Override + protected Double getConfigValue() { + return this.property.getDouble(this.defaultValue); + } + + @Override + protected void addComments() { + this.addComment("Default value is " + this.defaultValue + "."); + } + } +} diff --git a/src/main/java/binnie/core/mod/config/PropInteger.java b/src/main/java/binnie/core/mod/config/PropInteger.java new file mode 100644 index 00000000..fe88423a --- /dev/null +++ b/src/main/java/binnie/core/mod/config/PropInteger.java @@ -0,0 +1,36 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.mod.config; + +import net.minecraftforge.common.config.Property; +import java.lang.reflect.Field; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Retention; + +@Retention(RetentionPolicy.RUNTIME) +@ConfigProperty.Type(propertyClass = PropInteger.PropertyInteger.class) +public @interface PropInteger { + public static class PropertyInteger extends PropertyBase + { + public PropertyInteger(final Field field, final BinnieConfiguration file, final ConfigProperty configProperty, final PropInteger annotedProperty) throws IllegalArgumentException, IllegalAccessException { + super(field, file, configProperty, annotedProperty); + } + + @Override + protected Property getProperty() { + return this.file.get(this.getCategory(), this.getKey(), this.defaultValue); + } + + @Override + protected Integer getConfigValue() { + return this.property.getInt(this.defaultValue); + } + + @Override + protected void addComments() { + this.addComment("Default value is " + this.defaultValue + "."); + } + } +} diff --git a/src/main/java/binnie/core/mod/config/PropPercentage.java b/src/main/java/binnie/core/mod/config/PropPercentage.java new file mode 100644 index 00000000..714de10e --- /dev/null +++ b/src/main/java/binnie/core/mod/config/PropPercentage.java @@ -0,0 +1,41 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.mod.config; + +import net.minecraftforge.common.config.Property; +import java.lang.reflect.Field; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Retention; + +@Retention(RetentionPolicy.RUNTIME) +@ConfigProperty.Type(propertyClass = PropPercentage.PropertyPercentage.class) +public @interface PropPercentage { + int upper() default 100; + + int lower() default 0; + + public static class PropertyPercentage extends PropertyBase + { + public PropertyPercentage(final Field field, final BinnieConfiguration file, final ConfigProperty configProperty, final PropPercentage annotedProperty) throws IllegalArgumentException, IllegalAccessException { + super(field, file, configProperty, annotedProperty); + } + + @Override + protected Integer getConfigValue() { + return this.property.getInt(this.defaultValue); + } + + @Override + protected void addComments() { + this.addComment("Default value is " + this.defaultValue + "%."); + this.addComment("Range is " + this.annotatedProperty.lower() + "-" + this.annotatedProperty.upper() + "%."); + } + + @Override + protected Property getProperty() { + return this.file.get(this.getCategory(), this.getKey(), this.defaultValue); + } + } +} diff --git a/src/main/java/binnie/core/mod/config/PropertyBase.java b/src/main/java/binnie/core/mod/config/PropertyBase.java new file mode 100644 index 00000000..5e2b0015 --- /dev/null +++ b/src/main/java/binnie/core/mod/config/PropertyBase.java @@ -0,0 +1,69 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.mod.config; + +import java.util.ArrayList; +import java.lang.reflect.Field; +import java.util.List; +import net.minecraftforge.common.config.Property; +import net.minecraftforge.common.config.Configuration; +import java.lang.annotation.Annotation; + +abstract class PropertyBase +{ + Configuration file; + Property property; + ValueType defaultValue; + private ConfigProperty configProperty; + AnnotationType annotatedProperty; + private List comments; + private Field field; + + protected PropertyBase(final Field field, final BinnieConfiguration file, final ConfigProperty configProperty, final AnnotationType annotedProperty) throws IllegalArgumentException, IllegalAccessException { + this.comments = new ArrayList(); + this.field = field; + this.file = file; + this.configProperty = configProperty; + this.annotatedProperty = annotedProperty; + this.defaultValue = this.getDefaultValue(field); + this.property = this.getProperty(); + for (final String comment : configProperty.comment()) { + this.addComment(comment); + } + this.addComments(); + this.property.comment = this.getComment(); + field.set(null, this.getConfigValue()); + } + + protected abstract Property getProperty(); + + protected abstract ValueType getConfigValue(); + + protected abstract void addComments(); + + protected String getCategory() { + return this.configProperty.category().equals("") ? this.annotatedProperty.annotationType().getAnnotation(ConfigProperty.Type.class).category() : this.configProperty.category(); + } + + protected String getKey() { + return this.configProperty.key(); + } + + protected ValueType getDefaultValue(final Field field) throws IllegalArgumentException, IllegalAccessException { + return (ValueType) field.get(null); + } + + protected void addComment(final String comment) { + this.comments.add(comment); + } + + protected String getComment() { + String comment = ""; + for (final String com : this.comments) { + comment = comment + com + " "; + } + return comment; + } +} diff --git a/src/main/java/binnie/core/mod/parser/FieldParser.java b/src/main/java/binnie/core/mod/parser/FieldParser.java new file mode 100644 index 00000000..540bc636 --- /dev/null +++ b/src/main/java/binnie/core/mod/parser/FieldParser.java @@ -0,0 +1,54 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.mod.parser; + +import java.util.ArrayList; +import binnie.core.AbstractMod; +import java.lang.reflect.Field; +import java.util.Collection; + +public abstract class FieldParser +{ + public static Collection parsers; + + public abstract boolean isHandled(final Field p0, final AbstractMod p1); + + public void preInit(final Field field, final AbstractMod mod) throws IllegalArgumentException, IllegalAccessException { + } + + public void init(final Field field, final AbstractMod mod) throws IllegalArgumentException, IllegalAccessException { + } + + public void postInit(final Field field, final AbstractMod mod) throws IllegalArgumentException, IllegalAccessException { + } + + public static void preInitParse(final Field field, final AbstractMod mod) throws IllegalArgumentException, IllegalAccessException { + for (final FieldParser parser : FieldParser.parsers) { + if (parser.isHandled(field, mod)) { + parser.preInit(field, mod); + } + } + } + + public static void initParse(final Field field, final AbstractMod mod) throws IllegalArgumentException, IllegalAccessException { + for (final FieldParser parser : FieldParser.parsers) { + if (parser.isHandled(field, mod)) { + parser.init(field, mod); + } + } + } + + public static void postInitParse(final Field field, final AbstractMod mod) throws IllegalArgumentException, IllegalAccessException { + for (final FieldParser parser : FieldParser.parsers) { + if (parser.isHandled(field, mod)) { + parser.postInit(field, mod); + } + } + } + + static { + FieldParser.parsers = new ArrayList(); + } +} diff --git a/src/main/java/binnie/core/mod/parser/ItemParser.java b/src/main/java/binnie/core/mod/parser/ItemParser.java new file mode 100644 index 00000000..da1ecebd --- /dev/null +++ b/src/main/java/binnie/core/mod/parser/ItemParser.java @@ -0,0 +1,26 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.mod.parser; + +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.item.Item; +import binnie.core.AbstractMod; +import java.lang.reflect.Field; + +public class ItemParser extends FieldParser +{ + @Override + public boolean isHandled(final Field field, final AbstractMod mod) { + return Item.class.isAssignableFrom(field.getType()); + } + + @Override + public void preInit(final Field field, final AbstractMod mod) throws IllegalArgumentException, IllegalAccessException { + final Item item = (Item) field.get(null); + if (item != null) { + GameRegistry.registerItem(item, item.getUnlocalizedName().substring(5)); + } + } +} diff --git a/src/main/java/binnie/core/multiblock/BlockMultiblockMachine.java b/src/main/java/binnie/core/multiblock/BlockMultiblockMachine.java new file mode 100644 index 00000000..d76dd876 --- /dev/null +++ b/src/main/java/binnie/core/multiblock/BlockMultiblockMachine.java @@ -0,0 +1,29 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.multiblock; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraft.block.material.Material; +import net.minecraft.block.BlockContainer; + +public class BlockMultiblockMachine extends BlockContainer +{ + public BlockMultiblockMachine(final String blockName) { + super(Material.iron); + this.setHardness(1.5f); + this.setBlockName(blockName); + } + + @Override + public TileEntity createTileEntity(final World world, final int metadata) { + return new TileEntityMultiblockMachine(); + } + + @Override + public TileEntity createNewTileEntity(final World var1, final int i) { + return new TileEntityMultiblockMachine(); + } +} diff --git a/src/main/java/binnie/core/multiblock/TileEntityMultiblockMachine.java b/src/main/java/binnie/core/multiblock/TileEntityMultiblockMachine.java new file mode 100644 index 00000000..3e1afbf5 --- /dev/null +++ b/src/main/java/binnie/core/multiblock/TileEntityMultiblockMachine.java @@ -0,0 +1,36 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.multiblock; + +import binnie.core.machines.TileEntityMachine; +import binnie.core.machines.Machine; +import net.minecraft.tileentity.TileEntity; + +class TileEntityMultiblockMachine extends TileEntity +{ + private boolean inStructure; + private int tileX; + private int tileY; + private int tileZ; + + boolean inStructure() { + return this.inStructure; + } + + public Machine getMachine() { + return this.getMasterMachine(); + } + + private Machine getMasterMachine() { + if (!this.inStructure) { + return null; + } + final TileEntity tile = this.worldObj.getTileEntity(this.xCoord + this.tileX, this.yCoord + this.tileY, this.zCoord + this.tileZ); + if (tile instanceof TileEntityMachine) { + return ((TileEntityMachine) tile).getMachine(); + } + return null; + } +} diff --git a/src/main/java/binnie/core/network/BinnieCorePacketID.java b/src/main/java/binnie/core/network/BinnieCorePacketID.java new file mode 100644 index 00000000..2f96bc98 --- /dev/null +++ b/src/main/java/binnie/core/network/BinnieCorePacketID.java @@ -0,0 +1,72 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.network; + +import binnie.core.machines.IMachine; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import binnie.core.machines.network.INetwork; +import binnie.core.machines.Machine; +import binnie.core.network.packet.MessageTileNBT; +import net.minecraft.network.NetHandlerPlayServer; +import binnie.craftgui.minecraft.ContainerCraftGUI; +import binnie.core.network.packet.MessageCraftGUI; +import cpw.mods.fml.relauncher.Side; +import binnie.core.block.TileEntityMetadata; +import binnie.core.network.packet.MessageMetadata; +import binnie.core.BinnieCore; +import binnie.core.network.packet.MessageUpdate; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import binnie.core.network.packet.MessageBinnie; + +public enum BinnieCorePacketID implements IPacketID +{ + NetworkEntityUpdate, + TileMetadata, + CraftGUIAction, + TileDescriptionSync; + + @Override + public void onMessage(final MessageBinnie message, final MessageContext context) { + if (this == BinnieCorePacketID.NetworkEntityUpdate) { + final MessageUpdate packet = new MessageUpdate(message); + final TileEntity tile = packet.getTileEntity(BinnieCore.proxy.getWorld()); + if (tile instanceof INetworkedEntity) { + ((INetworkedEntity) tile).readFromPacket(packet.payload); + } + } + else if (this == BinnieCorePacketID.TileMetadata) { + final MessageMetadata packet2 = new MessageMetadata(message); + final TileEntity tile = packet2.getTileEntity(BinnieCore.proxy.getWorld()); + if (tile instanceof TileEntityMetadata) { + ((TileEntityMetadata) tile).setTileMetadata(packet2.meta, true); + } + } + else if (this == BinnieCorePacketID.CraftGUIAction && context.side == Side.CLIENT) { + final MessageCraftGUI packet3 = new MessageCraftGUI(message); + final EntityPlayer player = BinnieCore.proxy.getPlayer(); + if (player.openContainer instanceof ContainerCraftGUI && packet3.getTagCompound() != null) { + ((ContainerCraftGUI) player.openContainer).recieveNBT(Side.CLIENT, player, packet3.getTagCompound()); + } + } + else if (this == BinnieCorePacketID.CraftGUIAction && context.side == Side.SERVER && context.netHandler instanceof NetHandlerPlayServer) { + final MessageCraftGUI packet3 = new MessageCraftGUI(message); + final EntityPlayer player = ((NetHandlerPlayServer) context.netHandler).playerEntity; + if (player.openContainer instanceof ContainerCraftGUI && packet3.getTagCompound() != null) { + ((ContainerCraftGUI) player.openContainer).recieveNBT(Side.SERVER, player, packet3.getTagCompound()); + } + } + else if (this == BinnieCorePacketID.TileDescriptionSync && context.side == Side.CLIENT) { + final MessageTileNBT packet4 = new MessageTileNBT(message); + final TileEntity tile = packet4.getTarget(BinnieCore.proxy.getWorld()); + if (tile != null && packet4.getTagCompound() != null) { + final IMachine machine = Machine.getMachine(tile); + if (machine != null && machine instanceof INetwork.TilePacketSync) { + ((INetwork.TilePacketSync) machine).syncFromNBT(packet4.getTagCompound()); + } + } + } + } +} diff --git a/src/main/java/binnie/core/network/BinniePacketHandler.java b/src/main/java/binnie/core/network/BinniePacketHandler.java new file mode 100644 index 00000000..3714b9c1 --- /dev/null +++ b/src/main/java/binnie/core/network/BinniePacketHandler.java @@ -0,0 +1,40 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.network; + +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import binnie.core.AbstractMod; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import binnie.core.network.packet.MessageBinnie; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; + +public abstract class BinniePacketHandler implements IMessageHandler +{ + private IPacketProvider provider; + + public BinniePacketHandler(final AbstractMod mod) { + this.setProvider(mod); + } + + public void setProvider(final IPacketProvider provider) { + this.provider = provider; + } + + @Override + public IMessage onMessage(final MessageBinnie message, final MessageContext ctx) { + try { + final int packetId = message.id; + for (final IPacketID id : this.provider.getPacketIDs()) { + if (id.ordinal() == packetId) { + id.onMessage(message, ctx); + return null; + } + } + } catch (Exception ex) { + throw new RuntimeException(ex); + } + return null; + } +} diff --git a/src/main/java/binnie/core/network/INetworkedEntity.java b/src/main/java/binnie/core/network/INetworkedEntity.java new file mode 100644 index 00000000..dfb1aacd --- /dev/null +++ b/src/main/java/binnie/core/network/INetworkedEntity.java @@ -0,0 +1,14 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.network; + +import binnie.core.network.packet.PacketPayload; + +public interface INetworkedEntity +{ + void writeToPacket(final PacketPayload p0); + + void readFromPacket(final PacketPayload p0); +} diff --git a/src/main/java/binnie/core/network/IOrdinaled.java b/src/main/java/binnie/core/network/IOrdinaled.java new file mode 100644 index 00000000..86c994e8 --- /dev/null +++ b/src/main/java/binnie/core/network/IOrdinaled.java @@ -0,0 +1,10 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.network; + +public interface IOrdinaled +{ + int ordinal(); +} diff --git a/src/main/java/binnie/core/network/IPacketID.java b/src/main/java/binnie/core/network/IPacketID.java new file mode 100644 index 00000000..88b004cb --- /dev/null +++ b/src/main/java/binnie/core/network/IPacketID.java @@ -0,0 +1,13 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.network; + +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import binnie.core.network.packet.MessageBinnie; + +public interface IPacketID extends IOrdinaled +{ + void onMessage(final MessageBinnie p0, final MessageContext p1); +} diff --git a/src/main/java/binnie/core/network/IPacketProvider.java b/src/main/java/binnie/core/network/IPacketProvider.java new file mode 100644 index 00000000..25ce565a --- /dev/null +++ b/src/main/java/binnie/core/network/IPacketProvider.java @@ -0,0 +1,12 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.network; + +public interface IPacketProvider +{ + String getChannel(); + + IPacketID[] getPacketIDs(); +} diff --git a/src/main/java/binnie/core/network/packet/IPacket.java b/src/main/java/binnie/core/network/packet/IPacket.java new file mode 100644 index 00000000..87b07b54 --- /dev/null +++ b/src/main/java/binnie/core/network/packet/IPacket.java @@ -0,0 +1,12 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.network.packet; + +import net.minecraft.network.Packet; + +public interface IPacket +{ + Packet getPacket(); +} diff --git a/src/main/java/binnie/core/network/packet/IPacketLocation.java b/src/main/java/binnie/core/network/packet/IPacketLocation.java new file mode 100644 index 00000000..cbf74dc3 --- /dev/null +++ b/src/main/java/binnie/core/network/packet/IPacketLocation.java @@ -0,0 +1,19 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.network.packet; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +interface IPacketLocation +{ + TileEntity getTarget(final World p0); + + int getX(); + + int getY(); + + int getZ(); +} diff --git a/src/main/java/binnie/core/network/packet/IndexInPayload.java b/src/main/java/binnie/core/network/packet/IndexInPayload.java new file mode 100644 index 00000000..dd53b47d --- /dev/null +++ b/src/main/java/binnie/core/network/packet/IndexInPayload.java @@ -0,0 +1,21 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.network.packet; + +public class IndexInPayload +{ + public int intIndex; + public int floatIndex; + public int stringIndex; + + public IndexInPayload(final int intIndex, final int floatIndex, final int stringIndex) { + this.intIndex = 0; + this.floatIndex = 0; + this.stringIndex = 0; + this.intIndex = intIndex; + this.floatIndex = floatIndex; + this.stringIndex = stringIndex; + } +} diff --git a/src/main/java/binnie/core/network/packet/MachinePayload.java b/src/main/java/binnie/core/network/packet/MachinePayload.java new file mode 100644 index 00000000..72d55d59 --- /dev/null +++ b/src/main/java/binnie/core/network/packet/MachinePayload.java @@ -0,0 +1,79 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.network.packet; + +import java.util.ArrayList; +import java.util.List; + +public class MachinePayload +{ + private List intPayload; + private List floatPayload; + private List stringPayload; + private int id; + + public MachinePayload(final int id) { + this.intPayload = new ArrayList(); + this.floatPayload = new ArrayList(); + this.stringPayload = new ArrayList(); + this.id = 0; + this.id = id; + this.intPayload.clear(); + this.floatPayload.clear(); + this.stringPayload.clear(); + } + + public MachinePayload() { + this.intPayload = new ArrayList(); + this.floatPayload = new ArrayList(); + this.stringPayload = new ArrayList(); + this.id = 0; + } + + public void addInteger(final int a) { + this.intPayload.add(a); + } + + public void addFloat(final float a) { + this.floatPayload.add(a); + } + + public void addString(final String a) { + this.stringPayload.add(a); + } + + public int getInteger() { + return this.intPayload.remove(0); + } + + public float getFloat() { + return this.floatPayload.remove(0); + } + + public String getString() { + return this.stringPayload.remove(0); + } + + public void append(final MachinePayload other) { + if (other == null) { + return; + } + this.intPayload.addAll(other.intPayload); + this.floatPayload.addAll(other.floatPayload); + this.stringPayload.addAll(other.stringPayload); + } + + public boolean isEmpty() { + return this.intPayload.isEmpty() && this.floatPayload.isEmpty() && this.stringPayload.isEmpty(); + } + + public int getID() { + return this.id; + } + + public void setID(final int readInt) { + this.id = readInt; + } +} diff --git a/src/main/java/binnie/core/network/packet/MessageBase.java b/src/main/java/binnie/core/network/packet/MessageBase.java new file mode 100644 index 00000000..1d83fe54 --- /dev/null +++ b/src/main/java/binnie/core/network/packet/MessageBase.java @@ -0,0 +1,60 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.network.packet; + +import java.io.InputStream; +import net.minecraft.nbt.CompressedStreamTools; +import java.io.ByteArrayInputStream; +import net.minecraft.nbt.NBTTagCompound; +import io.netty.buffer.ByteBuf; +import java.io.IOException; + +public class MessageBase +{ + private int id; + + public MessageBase(final int id) { + this.id = id; + } + + public MessageBase(final MessageBinnie message) { + try { + this.readData(message.data); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public MessageBinnie GetMessage() { + return new MessageBinnie(this.id, this); + } + + protected NBTTagCompound readNBTTagCompound(final ByteBuf data) throws IOException { + final short length = data.readShort(); + if (length < 0) { + return null; + } + final byte[] compressed = new byte[length]; + data.readBytes(compressed); + return CompressedStreamTools.readCompressed(new ByteArrayInputStream(compressed)); + } + + protected void writeNBTTagCompound(final NBTTagCompound nbttagcompound, final ByteBuf data) throws IOException { + if (nbttagcompound == null) { + data.writeShort(-1); + } + else { + final byte[] compressed = CompressedStreamTools.compress(nbttagcompound); + data.writeShort((short) compressed.length); + data.writeBytes(compressed); + } + } + + public void writeData(final ByteBuf data) throws IOException { + } + + public void readData(final ByteBuf data) throws IOException { + } +} diff --git a/src/main/java/binnie/core/network/packet/MessageBinnie.java b/src/main/java/binnie/core/network/packet/MessageBinnie.java new file mode 100644 index 00000000..bda404ea --- /dev/null +++ b/src/main/java/binnie/core/network/packet/MessageBinnie.java @@ -0,0 +1,40 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.network.packet; + +import java.io.IOException; +import io.netty.buffer.ByteBuf; +import cpw.mods.fml.common.network.simpleimpl.IMessage; + +public final class MessageBinnie implements IMessage +{ + public int id; + private MessageBase message; + ByteBuf data; + + public MessageBinnie() { + } + + public MessageBinnie(final int id, final MessageBase base) { + this.id = id; + this.message = base; + } + + @Override + public void toBytes(final ByteBuf buf) { + buf.writeByte(this.id); + try { + this.message.writeData(buf); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void fromBytes(final ByteBuf buf) { + this.id = buf.readByte(); + this.data = buf; + } +} diff --git a/src/main/java/binnie/core/network/packet/MessageContainerUpdate.java b/src/main/java/binnie/core/network/packet/MessageContainerUpdate.java new file mode 100644 index 00000000..0db41268 --- /dev/null +++ b/src/main/java/binnie/core/network/packet/MessageContainerUpdate.java @@ -0,0 +1,18 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.network.packet; + +import net.minecraft.nbt.NBTTagCompound; + +public class MessageContainerUpdate extends MessageCraftGUI +{ + public MessageContainerUpdate(final NBTTagCompound nbt) { + super(nbt); + } + + public MessageContainerUpdate(final MessageBinnie message) { + super(message); + } +} diff --git a/src/main/java/binnie/core/network/packet/MessageCoordinates.java b/src/main/java/binnie/core/network/packet/MessageCoordinates.java new file mode 100644 index 00000000..76154002 --- /dev/null +++ b/src/main/java/binnie/core/network/packet/MessageCoordinates.java @@ -0,0 +1,55 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.network.packet; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import java.io.IOException; +import io.netty.buffer.ByteBuf; +import net.minecraft.util.ChunkCoordinates; + +public class MessageCoordinates extends MessageBase +{ + public int posX; + public int posY; + public int posZ; + + public MessageCoordinates(final MessageBinnie message) { + super(message); + } + + public MessageCoordinates(final int id, final ChunkCoordinates coordinates) { + this(id, coordinates.posX, coordinates.posY, coordinates.posZ); + } + + public MessageCoordinates(final int id, final int posX, final int posY, final int posZ) { + super(id); + this.posX = posX; + this.posY = posY; + this.posZ = posZ; + } + + @Override + public void writeData(final ByteBuf data) throws IOException { + data.writeInt(this.posX); + data.writeInt(this.posY); + data.writeInt(this.posZ); + } + + @Override + public void readData(final ByteBuf data) throws IOException { + this.posX = data.readInt(); + this.posY = data.readInt(); + this.posZ = data.readInt(); + } + + public ChunkCoordinates getCoordinates() { + return new ChunkCoordinates(this.posX, this.posY, this.posZ); + } + + public TileEntity getTileEntity(final World world) { + return world.getTileEntity(this.posX, this.posY, this.posZ); + } +} diff --git a/src/main/java/binnie/core/network/packet/MessageCraftGUI.java b/src/main/java/binnie/core/network/packet/MessageCraftGUI.java new file mode 100644 index 00000000..6401d80c --- /dev/null +++ b/src/main/java/binnie/core/network/packet/MessageCraftGUI.java @@ -0,0 +1,19 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.network.packet; + +import binnie.core.network.BinnieCorePacketID; +import net.minecraft.nbt.NBTTagCompound; + +public class MessageCraftGUI extends MessageNBT +{ + public MessageCraftGUI(final MessageBinnie message) { + super(message); + } + + public MessageCraftGUI(final NBTTagCompound action) { + super(BinnieCorePacketID.CraftGUIAction.ordinal(), action); + } +} diff --git a/src/main/java/binnie/core/network/packet/MessageMetadata.java b/src/main/java/binnie/core/network/packet/MessageMetadata.java new file mode 100644 index 00000000..762f5d87 --- /dev/null +++ b/src/main/java/binnie/core/network/packet/MessageMetadata.java @@ -0,0 +1,35 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.network.packet; + +import java.io.IOException; +import io.netty.buffer.ByteBuf; +import binnie.core.network.BinnieCorePacketID; + +public class MessageMetadata extends MessageCoordinates +{ + public int meta; + + public MessageMetadata(final int posX, final int posY, final int posZ, final int meta) { + super(BinnieCorePacketID.TileMetadata.ordinal(), posX, posY, posZ); + this.meta = meta; + } + + public MessageMetadata(final MessageBinnie message) { + super(message); + } + + @Override + public void writeData(final ByteBuf data) throws IOException { + super.writeData(data); + data.writeInt(this.meta); + } + + @Override + public void readData(final ByteBuf data) throws IOException { + super.readData(data); + this.meta = data.readInt(); + } +} diff --git a/src/main/java/binnie/core/network/packet/MessageNBT.java b/src/main/java/binnie/core/network/packet/MessageNBT.java new file mode 100644 index 00000000..f61f3f8c --- /dev/null +++ b/src/main/java/binnie/core/network/packet/MessageNBT.java @@ -0,0 +1,45 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.network.packet; + +import java.io.IOException; +import io.netty.buffer.ByteBuf; +import net.minecraft.nbt.NBTTagCompound; + +public class MessageNBT extends MessageBase +{ + NBTTagCompound nbt; + + public NBTTagCompound getTagCompound() { + return this.nbt; + } + + void setTagCompound(final NBTTagCompound nbt) { + this.nbt = nbt; + } + + public MessageNBT(final int id) { + super(id); + } + + public MessageNBT(final int id, final NBTTagCompound nbt) { + this(id); + this.setTagCompound(nbt); + } + + public MessageNBT(final MessageBinnie message) { + super(message); + } + + @Override + public void writeData(final ByteBuf data) throws IOException { + this.writeNBTTagCompound(this.nbt, data); + } + + @Override + public void readData(final ByteBuf data) throws IOException { + this.nbt = this.readNBTTagCompound(data); + } +} diff --git a/src/main/java/binnie/core/network/packet/MessageTileNBT.java b/src/main/java/binnie/core/network/packet/MessageTileNBT.java new file mode 100644 index 00000000..88e1b836 --- /dev/null +++ b/src/main/java/binnie/core/network/packet/MessageTileNBT.java @@ -0,0 +1,76 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.network.packet; + +import net.minecraft.world.World; +import java.io.IOException; +import io.netty.buffer.ByteBuf; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; + +public class MessageTileNBT extends MessageNBT implements IPacketLocation +{ + private int posX; + private int posY; + private int posZ; + + public MessageTileNBT(final MessageBinnie message) { + super(message); + } + + public MessageTileNBT(final int id, final TileEntity tile, final NBTTagCompound nbt) { + super(id); + this.posX = tile.xCoord; + this.posY = tile.yCoord; + this.posZ = tile.zCoord; + this.nbt = nbt; + } + + @Override + public void writeData(final ByteBuf data) throws IOException { + data.writeInt(this.posX); + data.writeInt(this.posY); + data.writeInt(this.posZ); + super.writeData(data); + } + + @Override + public void readData(final ByteBuf data) throws IOException { + this.posX = data.readInt(); + this.posY = data.readInt(); + this.posZ = data.readInt(); + super.readData(data); + } + + @Override + public TileEntity getTarget(final World world) { + return world.getTileEntity(this.posX, this.posY, this.posZ); + } + + @Override + public int getX() { + return this.posX; + } + + @Override + public int getY() { + return this.posY; + } + + @Override + public int getZ() { + return this.posZ; + } + + @Override + public NBTTagCompound getTagCompound() { + return this.nbt; + } + + @Override + void setTagCompound(final NBTTagCompound nbt) { + this.nbt = nbt; + } +} diff --git a/src/main/java/binnie/core/network/packet/MessageUpdate.java b/src/main/java/binnie/core/network/packet/MessageUpdate.java new file mode 100644 index 00000000..0c4f9e03 --- /dev/null +++ b/src/main/java/binnie/core/network/packet/MessageUpdate.java @@ -0,0 +1,77 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.network.packet; + +import net.minecraft.world.World; +import java.io.IOException; +import io.netty.buffer.ByteBuf; +import net.minecraft.tileentity.TileEntity; +import binnie.core.network.INetworkedEntity; + +public class MessageUpdate extends MessageCoordinates +{ + public PacketPayload payload; + + public MessageUpdate(final MessageBinnie message) { + super(message); + } + + public MessageUpdate(final int id, final INetworkedEntity tile) { + super(id, ((TileEntity) tile).xCoord, ((TileEntity) tile).yCoord, ((TileEntity) tile).zCoord); + tile.writeToPacket(this.payload = new PacketPayload()); + } + + @Override + public void writeData(final ByteBuf data) throws IOException { + super.writeData(data); + if (this.payload == null) { + data.writeInt(0); + data.writeInt(0); + data.writeInt(0); + return; + } + data.writeInt(this.payload.intPayload.size()); + data.writeInt(this.payload.floatPayload.size()); + data.writeInt(this.payload.stringPayload.size()); + for (final int intData : this.payload.intPayload) { + data.writeInt(intData); + } + for (final float floatData : this.payload.floatPayload) { + data.writeFloat(floatData); + } + for (final String stringData : this.payload.stringPayload) { + final byte[] bytes = stringData.getBytes("UTF-8"); + data.writeShort(bytes.length); + data.writeBytes(bytes); + } + } + + @Override + public void readData(final ByteBuf data) throws IOException { + super.readData(data); + this.payload = new PacketPayload(); + final int intLength = data.readInt(); + final int floatLength = data.readInt(); + final int stringLength = data.readInt(); + this.payload.intPayload.clear(); + this.payload.floatPayload.clear(); + this.payload.stringPayload.clear(); + for (int i = 0; i < intLength; ++i) { + this.payload.addInteger(data.readInt()); + } + for (int i = 0; i < floatLength; ++i) { + this.payload.addFloat(data.readFloat()); + } + for (int i = 0; i < stringLength; ++i) { + final int length = data.readShort(); + final byte[] string = data.readBytes(length).array(); + this.payload.addString(new String(string, "UTF-8")); + } + } + + public TileEntity getTarget(final World world) { + return world.getTileEntity(this.posX, this.posY, this.posZ); + } +} diff --git a/src/main/java/binnie/core/network/packet/PacketPayload.java b/src/main/java/binnie/core/network/packet/PacketPayload.java new file mode 100644 index 00000000..a36f2eca --- /dev/null +++ b/src/main/java/binnie/core/network/packet/PacketPayload.java @@ -0,0 +1,67 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.network.packet; + +import binnie.core.network.INetworkedEntity; +import java.util.ArrayList; +import java.util.List; + +public class PacketPayload +{ + public List intPayload; + public List floatPayload; + public List stringPayload; + + public PacketPayload() { + this.intPayload = new ArrayList(); + this.floatPayload = new ArrayList(); + this.stringPayload = new ArrayList(); + this.intPayload.clear(); + this.floatPayload.clear(); + this.stringPayload.clear(); + } + + public PacketPayload(final INetworkedEntity tile) { + this(); + tile.writeToPacket(this); + } + + public void addInteger(final int a) { + this.intPayload.add(a); + } + + public void addFloat(final float a) { + this.floatPayload.add(a); + } + + public void addString(final String a) { + this.stringPayload.add(a); + } + + public int getInteger() { + return this.intPayload.remove(0); + } + + public float getFloat() { + return this.floatPayload.remove(0); + } + + public String getString() { + return this.stringPayload.remove(0); + } + + public void append(final PacketPayload other) { + if (other == null) { + return; + } + this.intPayload.addAll(other.intPayload); + this.floatPayload.addAll(other.floatPayload); + this.stringPayload.addAll(other.stringPayload); + } + + public boolean isEmpty() { + return this.intPayload.isEmpty() && this.floatPayload.isEmpty() && this.stringPayload.isEmpty(); + } +} diff --git a/src/main/java/binnie/core/proxy/BinnieModProxy.java b/src/main/java/binnie/core/proxy/BinnieModProxy.java new file mode 100644 index 00000000..e7e51ceb --- /dev/null +++ b/src/main/java/binnie/core/proxy/BinnieModProxy.java @@ -0,0 +1,72 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.proxy; + +import binnie.Binnie; +import net.minecraft.util.IIcon; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayerMP; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import binnie.core.network.packet.MessageBase; +import binnie.core.BinnieCore; +import net.minecraft.entity.player.EntityPlayer; +import binnie.core.gui.IBinnieGUID; +import binnie.core.AbstractMod; + +public class BinnieModProxy implements IBinnieModProxy +{ + private AbstractMod mod; + + public BinnieModProxy(final AbstractMod mod) { + this.mod = mod; + } + + @Override + public void openGui(final IBinnieGUID ID, final EntityPlayer player, final int x, final int y, final int z) { + BinnieCore.proxy.openGui(this.mod, ID.ordinal(), player, x, y, z); + } + + @Override + public void sendToAll(final MessageBase packet) { + this.mod.getNetworkWrapper().sendToAll(packet.GetMessage()); + } + + @Override + public void sendToPlayer(final MessageBase packet, final EntityPlayer entityplayer) { + if (entityplayer instanceof EntityPlayerMP) { + this.mod.getNetworkWrapper().sendTo((IMessage) packet.GetMessage(), (EntityPlayerMP) entityplayer); + } + } + + @Override + public void sendToServer(final MessageBase packet) { + this.mod.getNetworkWrapper().sendToServer(packet.GetMessage()); + } + + @Override + public IIcon getIcon(final IIconRegister register, final String string) { + return BinnieCore.proxy.getIcon(register, this.mod.getModID(), string); + } + + @Override + public void preInit() { + } + + @Override + public void init() { + } + + @Override + public void postInit() { + } + + public String localise(final String string) { + return Binnie.Language.localise(this.mod, string); + } + + public String localiseOrBlank(final String string) { + return Binnie.Language.localiseOrBlank(this.mod, string); + } +} diff --git a/src/main/java/binnie/core/proxy/BinnieProxy.java b/src/main/java/binnie/core/proxy/BinnieProxy.java new file mode 100644 index 00000000..61bc3233 --- /dev/null +++ b/src/main/java/binnie/core/proxy/BinnieProxy.java @@ -0,0 +1,170 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.proxy; + +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.IIcon; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.core.network.packet.MessageUpdate; +import binnie.core.network.BinnieCorePacketID; +import binnie.core.network.INetworkedEntity; +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.tileentity.TileEntity; +import java.io.File; +import net.minecraft.client.Minecraft; +import cpw.mods.fml.common.FMLCommonHandler; +import net.minecraftforge.client.IItemRenderer; +import net.minecraft.item.Item; +import net.minecraft.world.World; +import net.minecraft.entity.player.EntityPlayer; +import cpw.mods.fml.client.registry.RenderingRegistry; +import binnie.core.resource.BinnieResource; +import binnie.core.AbstractMod; +import binnie.core.BinnieCore; + +public class BinnieProxy extends BinnieModProxy implements IBinnieProxy +{ + private short uniqueTextureUID; + + public BinnieProxy() { + super(BinnieCore.instance); + this.uniqueTextureUID = 1200; + } + + @Override + public void preInit() { + } + + @Override + public void init() { + } + + @Override + public void postInit() { + } + + @Override + public void bindTexture(final BinnieResource texture) { + } + + public boolean checkTexture(final BinnieResource location) { + return false; + } + + @Override + public int getUniqueRenderID() { + return RenderingRegistry.getNextAvailableRenderId(); + } + + @Override + public void openGui(final AbstractMod mod, final int id, final EntityPlayer player, final int x, final int y, final int z) { + player.openGui(mod, id, player.worldObj, x, y, z); + } + + @Override + public boolean isSimulating(final World world) { + return true; + } + + @Override + public void registerCustomItemRenderer(final Item item, final IItemRenderer itemRenderer) { + } + + @Override + public boolean needsTagCompoundSynched(final Item item) { + return item.getShareTag(); + } + + @Override + public World getWorld() { + return null; + } + + public void throwException(final String message, final Throwable e) { + FMLCommonHandler.instance().raiseException(e, message, true); + } + + @Override + public Minecraft getMinecraftInstance() { + return null; + } + + @Override + public boolean isClient() { + return false; + } + + @Override + public boolean isServer() { + return true; + } + + @Override + public File getDirectory() { + return new File("./"); + } + + @Override + public void registerTileEntity(final Class tile, final String id, final Object renderer) { + GameRegistry.registerTileEntity(tile, id); + } + + @Override + public void createPipe(final Item pipe) { + } + + @Override + public boolean isDebug() { + return System.getenv().containsKey("BINNIE_DEBUG"); + } + + @Override + public void registerBlockRenderer(final Object renderer) { + } + + @Override + public Object createObject(final String renderer) { + return null; + } + + public void sendNetworkEntityPacket(final INetworkedEntity entity) { + final MessageUpdate packet = new MessageUpdate(BinnieCorePacketID.NetworkEntityUpdate.ordinal(), entity); + this.sendToAll(packet); + } + + @Override + public IIcon getIcon(final IIconRegister register, final String mod, final String name) { + return null; + } + + public void handleTextureRefresh(final IIconRegister register, final int type) { + } + + public void handlePostTextureRefresh(final IIconRegister register, final int type) { + } + + public short getUniqueTextureUID() { + final short uniqueTextureUID = this.uniqueTextureUID; + this.uniqueTextureUID = (short) (uniqueTextureUID + 1); + return uniqueTextureUID; + } + + @Override + public void bindTexture(final ResourceLocation location) { + } + + public boolean isShiftDown() { + return false; + } + + public EntityPlayer getPlayer() { + return null; + } + + public MinecraftServer getServer() { + return MinecraftServer.getServer(); + } +} diff --git a/src/main/java/binnie/core/proxy/BinnieProxyClient.java b/src/main/java/binnie/core/proxy/BinnieProxyClient.java new file mode 100644 index 00000000..9b9f7ccb --- /dev/null +++ b/src/main/java/binnie/core/proxy/BinnieProxyClient.java @@ -0,0 +1,157 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.proxy; + +import net.minecraft.client.renderer.texture.ITextureObject; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.resources.IResourceManagerReloadListener; +import binnie.craftgui.resource.minecraft.CraftGUIResourceManager; +import net.minecraft.client.resources.IReloadableResourceManager; +import binnie.Binnie; +import net.minecraft.entity.player.EntityPlayer; +import org.lwjgl.input.Keyboard; +import net.minecraft.util.IIcon; +import net.minecraft.client.renderer.texture.IIconRegister; +import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.client.registry.ClientRegistry; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; +import java.io.File; +import cpw.mods.fml.client.FMLClientHandler; +import net.minecraft.client.Minecraft; +import net.minecraftforge.client.MinecraftForgeClient; +import net.minecraftforge.client.IItemRenderer; +import net.minecraft.item.Item; +import net.minecraft.world.World; +import java.io.IOException; +import net.minecraft.client.renderer.texture.SimpleTexture; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; +import binnie.core.resource.BinnieResource; + +public final class BinnieProxyClient extends BinnieProxy implements IBinnieProxy +{ + @Override + public void bindTexture(final BinnieResource texture) { + GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + this.bindTexture(texture.getResourceLocation()); + } + + @Override + public void bindTexture(final ResourceLocation location) { + this.getMinecraftInstance().getTextureManager().bindTexture(location); + } + + @Override + public boolean checkTexture(final BinnieResource location) { + final SimpleTexture texture = new SimpleTexture(location.getResourceLocation()); + try { + ((ITextureObject) texture).loadTexture(this.getMinecraftInstance().getResourceManager()); + } catch (IOException e) { + return false; + } + return true; + } + + @Override + public boolean isSimulating(final World world) { + return !world.isRemote; + } + + @Override + public void registerCustomItemRenderer(final Item item, final IItemRenderer itemRenderer) { + MinecraftForgeClient.registerItemRenderer(item, itemRenderer); + } + + @Override + public World getWorld() { + return this.getMinecraftInstance().theWorld; + } + + @Override + public Minecraft getMinecraftInstance() { + return FMLClientHandler.instance().getClient(); + } + + @Override + public boolean isClient() { + return true; + } + + @Override + public boolean isServer() { + return false; + } + + @Override + public File getDirectory() { + return new File("."); + } + + @Override + public void registerTileEntity(final Class tile, final String id, final Object renderer) { + if (renderer != null && renderer instanceof TileEntitySpecialRenderer) { + ClientRegistry.registerTileEntity((Class) tile, id, (TileEntitySpecialRenderer) renderer); + } + else { + GameRegistry.registerTileEntity(tile, id); + } + } + + @Override + public void registerBlockRenderer(final Object renderer) { + if (renderer != null && renderer instanceof ISimpleBlockRenderingHandler) { + RenderingRegistry.registerBlockHandler((ISimpleBlockRenderingHandler) renderer); + } + } + + @Override + public void createPipe(final Item pipe) { + } + + @Override + public Object createObject(final String renderer) { + Object object = null; + try { + final Class rendererClass = Class.forName(renderer); + if (rendererClass != null) { + object = rendererClass.newInstance(); + } + } catch (Exception ex) { + } + return object; + } + + @Override + public IIcon getIcon(final IIconRegister register, final String mod, final String name) { + return register.registerIcon(mod + ":" + name); + } + + @Override + public boolean isShiftDown() { + return Keyboard.isKeyDown(42) || Keyboard.isKeyDown(54); + } + + @Override + public EntityPlayer getPlayer() { + return Minecraft.getMinecraft().thePlayer; + } + + public void handlePreTextureRefresh(final IIconRegister register, final int type) { + if (type == 0) { + Binnie.Liquid.reloadIcons(register); + } + } + + @Override + public void preInit() { + final IResourceManager manager = Minecraft.getMinecraft().getResourceManager(); + if (manager instanceof IReloadableResourceManager) { + ((IReloadableResourceManager) manager).registerReloadListener(new CraftGUIResourceManager()); + } + } +} diff --git a/src/main/java/binnie/core/proxy/BinnieProxyServer.java b/src/main/java/binnie/core/proxy/BinnieProxyServer.java new file mode 100644 index 00000000..33c53f15 --- /dev/null +++ b/src/main/java/binnie/core/proxy/BinnieProxyServer.java @@ -0,0 +1,9 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.proxy; + +public class BinnieProxyServer extends BinnieProxy implements IBinnieProxy +{ +} diff --git a/src/main/java/binnie/core/proxy/IBinnieModProxy.java b/src/main/java/binnie/core/proxy/IBinnieModProxy.java new file mode 100644 index 00000000..7fb71fe8 --- /dev/null +++ b/src/main/java/binnie/core/proxy/IBinnieModProxy.java @@ -0,0 +1,24 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.proxy; + +import net.minecraft.util.IIcon; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.core.network.packet.MessageBase; +import net.minecraft.entity.player.EntityPlayer; +import binnie.core.gui.IBinnieGUID; + +interface IBinnieModProxy extends IProxyCore +{ + void openGui(final IBinnieGUID p0, final EntityPlayer p1, final int p2, final int p3, final int p4); + + void sendToAll(final MessageBase p0); + + void sendToPlayer(final MessageBase p0, final EntityPlayer p1); + + void sendToServer(final MessageBase p0); + + IIcon getIcon(final IIconRegister p0, final String p1); +} diff --git a/src/main/java/binnie/core/proxy/IBinnieProxy.java b/src/main/java/binnie/core/proxy/IBinnieProxy.java new file mode 100644 index 00000000..92f40e24 --- /dev/null +++ b/src/main/java/binnie/core/proxy/IBinnieProxy.java @@ -0,0 +1,57 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.proxy; + +import net.minecraft.util.IIcon; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.client.Minecraft; +import net.minecraft.world.World; +import net.minecraft.entity.player.EntityPlayer; +import binnie.core.AbstractMod; +import net.minecraftforge.client.IItemRenderer; +import net.minecraft.item.Item; +import net.minecraft.util.ResourceLocation; +import binnie.core.resource.BinnieResource; +import java.io.File; + +public interface IBinnieProxy extends IProxyCore +{ + boolean isClient(); + + boolean isServer(); + + File getDirectory(); + + void bindTexture(final BinnieResource p0); + + void bindTexture(final ResourceLocation p0); + + int getUniqueRenderID(); + + void registerCustomItemRenderer(final Item p0, final IItemRenderer p1); + + void openGui(final AbstractMod p0, final int p1, final EntityPlayer p2, final int p3, final int p4, final int p5); + + boolean isSimulating(final World p0); + + World getWorld(); + + Minecraft getMinecraftInstance(); + + boolean needsTagCompoundSynched(final Item p0); + + Object createObject(final String p0); + + void registerTileEntity(final Class p0, final String p1, final Object p2); + + void createPipe(final Item p0); + + boolean isDebug(); + + void registerBlockRenderer(final Object p0); + + IIcon getIcon(final IIconRegister p0, final String p1, final String p2); +} diff --git a/src/main/java/binnie/core/proxy/IProxyCore.java b/src/main/java/binnie/core/proxy/IProxyCore.java new file mode 100644 index 00000000..df9d9d9a --- /dev/null +++ b/src/main/java/binnie/core/proxy/IProxyCore.java @@ -0,0 +1,11 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.proxy; + +import binnie.core.IInitializable; + +public interface IProxyCore extends IInitializable +{ +} diff --git a/src/main/java/binnie/core/resource/BinnieIcon.java b/src/main/java/binnie/core/resource/BinnieIcon.java new file mode 100644 index 00000000..a54591fe --- /dev/null +++ b/src/main/java/binnie/core/resource/BinnieIcon.java @@ -0,0 +1,46 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.resource; + +import binnie.core.BinnieCore; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.Binnie; +import binnie.core.AbstractMod; +import net.minecraft.util.IIcon; + +public class BinnieIcon extends BinnieResource +{ + private int textureSheet; + private IIcon icon; + + public BinnieIcon(final AbstractMod mod, final ResourceType type, final String path) { + super(mod, type, path); + this.textureSheet = 0; + this.icon = null; + this.textureSheet = ((type != ResourceType.Block) ? 1 : 0); + Binnie.Resource.registerIcon(this); + } + + public IIcon getIcon() { + return this.icon; + } + + @SideOnly(Side.CLIENT) + public IIcon getIcon(final IIconRegister register) { + this.registerIcon(register); + return this.icon; + } + + @SideOnly(Side.CLIENT) + public void registerIcon(final IIconRegister register) { + this.icon = BinnieCore.proxy.getIcon(register, this.mod, this.path); + } + + public int getTextureSheet() { + return this.textureSheet; + } +} diff --git a/src/main/java/binnie/core/resource/BinnieResource.java b/src/main/java/binnie/core/resource/BinnieResource.java new file mode 100644 index 00000000..8975a6e0 --- /dev/null +++ b/src/main/java/binnie/core/resource/BinnieResource.java @@ -0,0 +1,37 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.resource; + +import net.minecraft.util.ResourceLocation; +import binnie.core.AbstractMod; + +public class BinnieResource +{ + String mod; + private ResourceType type; + String path; + + public BinnieResource(final AbstractMod mod, final ResourceType type, final String path) { + this(mod.getModID(), type, path); + } + + public BinnieResource(final String modid, final ResourceType type, final String path) { + this.mod = modid; + this.type = type; + this.path = path; + } + + public String getFullPath() { + return "/assets/" + this.mod + "/textures/" + this.type.toString() + "/" + this.path; + } + + public ResourceLocation getResourceLocation() { + return new ResourceLocation(this.mod, "textures/" + this.type.toString() + "/" + this.path); + } + + public String getShortPath() { + return "textures/" + this.type.toString() + "/" + this.path; + } +} diff --git a/src/main/java/binnie/core/resource/IBinnieTexture.java b/src/main/java/binnie/core/resource/IBinnieTexture.java new file mode 100644 index 00000000..7f3eeddd --- /dev/null +++ b/src/main/java/binnie/core/resource/IBinnieTexture.java @@ -0,0 +1,10 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.resource; + +public interface IBinnieTexture +{ + BinnieResource getTexture(); +} diff --git a/src/main/java/binnie/core/resource/ManagerResource.java b/src/main/java/binnie/core/resource/ManagerResource.java new file mode 100644 index 00000000..135732ed --- /dev/null +++ b/src/main/java/binnie/core/resource/ManagerResource.java @@ -0,0 +1,50 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.resource; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.core.AbstractMod; +import java.util.ArrayList; +import java.util.List; + +public class ManagerResource +{ + private List icons; + + public ManagerResource() { + this.icons = new ArrayList(); + } + + public BinnieResource getPNG(final AbstractMod mod, final ResourceType type, final String path) { + return this.getFile(mod, type, path + ".png"); + } + + public BinnieResource getFile(final AbstractMod mod, final ResourceType type, final String path) { + return new BinnieResource(mod, type, path); + } + + public void registerIcon(final BinnieIcon binnieIcon) { + this.icons.add(binnieIcon); + } + + public BinnieIcon getItemIcon(final AbstractMod mod, final String iconFile) { + return new BinnieIcon(mod, ResourceType.Item, iconFile); + } + + public BinnieIcon getBlockIcon(final AbstractMod mod, final String iconFile) { + return new BinnieIcon(mod, ResourceType.Block, iconFile); + } + + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register, final int type) { + for (final BinnieIcon icon : this.icons) { + if (icon.getTextureSheet() == type) { + icon.registerIcon(register); + } + } + } +} diff --git a/src/main/java/binnie/core/resource/ResourceType.java b/src/main/java/binnie/core/resource/ResourceType.java new file mode 100644 index 00000000..2a9ed1a2 --- /dev/null +++ b/src/main/java/binnie/core/resource/ResourceType.java @@ -0,0 +1,26 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.resource; + +public enum ResourceType +{ + Item("items"), + Block("blocks"), + Tile("tile"), + GUI("gui"), + FX("fx"), + Entity("entities"); + + String name; + + private ResourceType(final String name) { + this.name = name; + } + + @Override + public String toString() { + return this.name; + } +} diff --git a/src/main/java/binnie/core/texture/BinnieCoreTexture.java b/src/main/java/binnie/core/texture/BinnieCoreTexture.java new file mode 100644 index 00000000..5a108221 --- /dev/null +++ b/src/main/java/binnie/core/texture/BinnieCoreTexture.java @@ -0,0 +1,36 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.texture; + +import binnie.core.BinnieCore; +import binnie.Binnie; +import binnie.core.resource.BinnieResource; +import binnie.core.resource.ResourceType; +import binnie.core.resource.IBinnieTexture; + +public enum BinnieCoreTexture implements IBinnieTexture +{ + Compartment(ResourceType.Tile, "Compartment"), + CompartmentIron(ResourceType.Tile, "CompartmentIron"), + CompartmentDiamond(ResourceType.Tile, "CompartmentDiamond"), + CompartmentCopper(ResourceType.Tile, "CompartmentCopper"), + CompartmentGold(ResourceType.Tile, "CompartmentGold"), + CompartmentBronze(ResourceType.Tile, "CompartmentBronze"), + GUIBreeding(ResourceType.GUI, "breeding"), + GUIAnalyst(ResourceType.GUI, "guianalyst"); + + String texture; + ResourceType type; + + private BinnieCoreTexture(final ResourceType base, final String texture) { + this.texture = texture; + this.type = base; + } + + @Override + public BinnieResource getTexture() { + return Binnie.Resource.getPNG(BinnieCore.instance, this.type, this.texture); + } +} diff --git a/src/main/java/binnie/core/texture/TextureManager.java b/src/main/java/binnie/core/texture/TextureManager.java new file mode 100644 index 00000000..4fff7037 --- /dev/null +++ b/src/main/java/binnie/core/texture/TextureManager.java @@ -0,0 +1,24 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.texture; + +import java.util.ArrayList; +import javax.swing.Icon; +import java.util.List; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TextureManager +{ + static List textures; + + public static void init() { + } + + static { + TextureManager.textures = new ArrayList(); + } +} diff --git a/src/main/java/binnie/core/triggers/ActionProvider.java b/src/main/java/binnie/core/triggers/ActionProvider.java new file mode 100644 index 00000000..78e5a0ce --- /dev/null +++ b/src/main/java/binnie/core/triggers/ActionProvider.java @@ -0,0 +1,41 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.triggers; + +import binnie.core.machines.component.IBuildcraft; +import java.util.LinkedList; +import buildcraft.api.statements.IActionExternal; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; +import cpw.mods.fml.common.Optional; +import buildcraft.api.statements.IActionInternal; +import java.util.Collection; +import buildcraft.api.statements.IStatementContainer; +import buildcraft.api.statements.IActionProvider; + +class ActionProvider implements IActionProvider +{ + @Override + @Optional.Method(modid = "BuildCraft|Silicon") + public Collection getInternalActions(final IStatementContainer container) { + return null; + } + + @Override + @Optional.Method(modid = "BuildCraft|Silicon") + public Collection getExternalActions(final ForgeDirection side, final TileEntity tile) { + final LinkedList list = new LinkedList(); + if (tile instanceof IBuildcraft.ActionProvider) { + ((IBuildcraft.ActionProvider) tile).getActions(list); + } + final LinkedList list2 = new LinkedList(); + for (final IActionExternal action : list2) { + if (action != null && action.getUniqueTag() != null) { + list.add(action); + } + } + return list2; + } +} diff --git a/src/main/java/binnie/core/triggers/BinnieAction.java b/src/main/java/binnie/core/triggers/BinnieAction.java new file mode 100644 index 00000000..7fa6945c --- /dev/null +++ b/src/main/java/binnie/core/triggers/BinnieAction.java @@ -0,0 +1,95 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.triggers; + +import buildcraft.api.statements.IStatementContainer; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraft.tileentity.TileEntity; +import buildcraft.api.statements.IStatementParameter; +import net.minecraft.client.renderer.texture.IIconRegister; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.IIcon; +import binnie.Binnie; +import buildcraft.api.statements.IStatement; +import buildcraft.api.statements.StatementManager; +import binnie.core.AbstractMod; +import binnie.core.BinnieCore; +import binnie.core.resource.BinnieIcon; +import buildcraft.api.statements.IActionExternal; + +class BinnieAction implements IActionExternal +{ + private static int incrementalID; + public static BinnieAction actionPauseProcess; + public static BinnieAction actionCancelTask; + private String desc; + private BinnieIcon icon; + private String tag; + private int id; + + BinnieAction(final String desc, final String tag, final String iconFile) { + this(desc, tag, BinnieCore.instance, iconFile); + } + + private BinnieAction(final String desc, final String tag, final AbstractMod mod, final String iconFile) { + this.id = 0; + this.id = BinnieAction.incrementalID++; + this.tag = tag; + StatementManager.registerStatement(this); + this.icon = Binnie.Resource.getItemIcon(mod, iconFile); + this.desc = desc; + } + + @Override + public String getDescription() { + return this.desc; + } + + @Override + public String getUniqueTag() { + return this.tag; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon() { + return this.icon.getIcon(); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister iconRegister) { + this.icon.registerIcon(iconRegister); + } + + @Override + public int maxParameters() { + return 0; + } + + @Override + public int minParameters() { + return 0; + } + + @Override + public IStatementParameter createParameter(final int index) { + return null; + } + + @Override + public IStatement rotateLeft() { + return this; + } + + @Override + public void actionActivate(final TileEntity target, final ForgeDirection side, final IStatementContainer source, final IStatementParameter[] parameters) { + } + + static { + BinnieAction.incrementalID = 800; + } +} diff --git a/src/main/java/binnie/core/triggers/BinnieTrigger.java b/src/main/java/binnie/core/triggers/BinnieTrigger.java new file mode 100644 index 00000000..d229cab0 --- /dev/null +++ b/src/main/java/binnie/core/triggers/BinnieTrigger.java @@ -0,0 +1,119 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.triggers; + +import buildcraft.api.statements.IStatementContainer; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraft.tileentity.TileEntity; +import buildcraft.api.statements.IStatementParameter; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.IIcon; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.Binnie; +import buildcraft.api.statements.IStatement; +import buildcraft.api.statements.StatementManager; +import binnie.core.AbstractMod; +import binnie.core.BinnieCore; +import binnie.core.resource.BinnieIcon; +import buildcraft.api.statements.ITriggerExternal; + +final class BinnieTrigger implements ITriggerExternal +{ + private static int incrementalID; + protected static BinnieTrigger triggerNoBlankTemplate; + protected static BinnieTrigger triggerNoTemplate; + protected static BinnieTrigger triggerIsWorking; + protected static BinnieTrigger triggerIsNotWorking; + protected static BinnieTrigger triggerCanWork; + protected static BinnieTrigger triggerCannotWork; + protected static BinnieTrigger triggerPowerNone; + protected static BinnieTrigger triggerPowerLow; + protected static BinnieTrigger triggerPowerMedium; + protected static BinnieTrigger triggerPowerHigh; + protected static BinnieTrigger triggerPowerFull; + protected static BinnieTrigger triggerSerumFull; + protected static BinnieTrigger triggerSerumPure; + protected static BinnieTrigger triggerSerumEmpty; + protected static BinnieTrigger triggerAcclimatiserNone; + protected static BinnieTrigger triggerAcclimatiserHot; + protected static BinnieTrigger triggerAcclimatiserCold; + protected static BinnieTrigger triggerAcclimatiserWet; + protected static BinnieTrigger triggerAcclimatiserDry; + private String desc; + private String tag; + private BinnieIcon icon; + private int id; + + public BinnieTrigger(final String desc, final String tag, final String iconFile) { + this(desc, tag, BinnieCore.instance, iconFile); + } + + public BinnieTrigger(final String desc, final String tag, final AbstractMod mod, final String iconFile) { + this.id = 0; + this.id = BinnieTrigger.incrementalID++; + this.tag = tag; + StatementManager.registerStatement(this); + TriggerProvider.triggers.add(this); + this.icon = Binnie.Resource.getItemIcon(mod, iconFile); + this.desc = desc; + } + + @Override + public String getDescription() { + return this.desc; + } + + @SideOnly(Side.CLIENT) + public IIcon getIcon(final IIconRegister register) { + return this.icon.getIcon(register); + } + + @Override + public String getUniqueTag() { + return this.tag; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon() { + return this.icon.getIcon(); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister iconRegister) { + this.icon.registerIcon(iconRegister); + } + + @Override + public int maxParameters() { + return 0; + } + + @Override + public int minParameters() { + return 0; + } + + @Override + public IStatementParameter createParameter(final int index) { + return null; + } + + @Override + public IStatement rotateLeft() { + return null; + } + + @Override + public boolean isTriggerActive(final TileEntity target, final ForgeDirection side, final IStatementContainer source, final IStatementParameter[] parameters) { + return false; + } + + static { + BinnieTrigger.incrementalID = 800; + } +} diff --git a/src/main/java/binnie/core/triggers/ModuleTrigger.java b/src/main/java/binnie/core/triggers/ModuleTrigger.java new file mode 100644 index 00000000..68347115 --- /dev/null +++ b/src/main/java/binnie/core/triggers/ModuleTrigger.java @@ -0,0 +1,44 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.triggers; + +import buildcraft.api.statements.ITriggerProvider; +import binnie.extrabees.ExtraBees; +import buildcraft.api.statements.IActionProvider; +import buildcraft.api.statements.StatementManager; +import binnie.core.IInitializable; + +public class ModuleTrigger implements IInitializable +{ + @Override + public void preInit() { + } + + @Override + public void init() { + BinnieAction.actionPauseProcess = new BinnieAction("Pause Process", "binnie.action.pauseProcess", "actions/PauseProcess"); + BinnieAction.actionCancelTask = new BinnieAction("Cancel Task", "binnie.action.cancelTask", "actions/CancelTask"); + StatementManager.registerActionProvider(new ActionProvider()); + BinnieTrigger.triggerNoBlankTemplate = new BinnieTrigger("No Blank Template", "binnie.trigger.noBlankTemplate", ExtraBees.instance, "triggers/NoBlankTemplate"); + BinnieTrigger.triggerNoTemplate = new BinnieTrigger("No Template", "binnie.trigger.noTemplate", ExtraBees.instance, "triggers/NoTemplate"); + BinnieTrigger.triggerIsWorking = new BinnieTrigger("Is Working", "binnie.trigger.isWorking", "triggers/IsWorking"); + BinnieTrigger.triggerIsNotWorking = new BinnieTrigger("Is Not Working", "binnie.trigger.isNotWorking", "triggers/IsNotWorking"); + BinnieTrigger.triggerCanWork = new BinnieTrigger("Can Work", "binnie.trigger.canWork", "triggers/CanWork"); + BinnieTrigger.triggerCannotWork = new BinnieTrigger("Cannot Work", "binnie.trigger.cannotWork", "triggers/CannotWork"); + BinnieTrigger.triggerPowerNone = new BinnieTrigger("Power None", "binnie.trigger.powerNone", "triggers/PowerNone"); + BinnieTrigger.triggerPowerLow = new BinnieTrigger("Power Low", "binnie.trigger.powerLow", "triggers/PowerLow"); + BinnieTrigger.triggerPowerMedium = new BinnieTrigger("Power Medium", "binnie.trigger.powerMedium", "triggers/PowerMedium"); + BinnieTrigger.triggerPowerHigh = new BinnieTrigger("Power High", "binnie.trigger.powerHigh", "triggers/PowerHigh"); + BinnieTrigger.triggerPowerFull = new BinnieTrigger("Power Full", "binnie.trigger.powerFull", "triggers/PowerFull"); + BinnieTrigger.triggerSerumFull = new BinnieTrigger("Serum Full", "binnie.trigger.serumFull", ExtraBees.instance, "triggers/SerumFull"); + BinnieTrigger.triggerSerumPure = new BinnieTrigger("Serum Pure", "binnie.trigger.serumPure", ExtraBees.instance, "triggers/SerumPure"); + BinnieTrigger.triggerSerumEmpty = new BinnieTrigger("Serum Pure", "binnie.trigger.serumEmpty", ExtraBees.instance, "triggers/SerumEmpty"); + StatementManager.registerTriggerProvider(new TriggerProvider()); + } + + @Override + public void postInit() { + } +} diff --git a/src/main/java/binnie/core/triggers/TriggerData.java b/src/main/java/binnie/core/triggers/TriggerData.java new file mode 100644 index 00000000..04c66062 --- /dev/null +++ b/src/main/java/binnie/core/triggers/TriggerData.java @@ -0,0 +1,39 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.triggers; + +import buildcraft.api.statements.ITriggerExternal; +import java.util.Map; + +public class TriggerData implements Map.Entry +{ + private final ITriggerExternal key; + private Boolean value; + + public TriggerData(final ITriggerExternal key, final Boolean value) { + if (key == null) { + throw new NullPointerException(); + } + this.key = key; + this.value = value; + } + + @Override + public ITriggerExternal getKey() { + return this.key; + } + + @Override + public Boolean getValue() { + return this.value; + } + + @Override + public Boolean setValue(final Boolean value) { + final Boolean old = this.value; + this.value = value; + return old; + } +} diff --git a/src/main/java/binnie/core/triggers/TriggerInventory.java b/src/main/java/binnie/core/triggers/TriggerInventory.java new file mode 100644 index 00000000..bc6e9ac0 --- /dev/null +++ b/src/main/java/binnie/core/triggers/TriggerInventory.java @@ -0,0 +1,14 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.triggers; + +import net.minecraft.inventory.IInventory; + +public class TriggerInventory +{ + private static Boolean isSlotEmpty(final IInventory inventory, final int slot) { + return inventory.getStackInSlot(slot) != null; + } +} diff --git a/src/main/java/binnie/core/triggers/TriggerPower.java b/src/main/java/binnie/core/triggers/TriggerPower.java new file mode 100644 index 00000000..7b5ddcb6 --- /dev/null +++ b/src/main/java/binnie/core/triggers/TriggerPower.java @@ -0,0 +1,44 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.triggers; + +import binnie.core.machines.Machine; +import binnie.core.machines.power.IPoweredMachine; +import buildcraft.api.statements.ITriggerExternal; + +public class TriggerPower +{ + public static TriggerData powerNone(final Object tile) { + return new TriggerData(BinnieTrigger.triggerPowerNone, getPercentage(tile) < 0.05000000074505806); + } + + public static TriggerData powerLow(final Object tile) { + return new TriggerData(BinnieTrigger.triggerPowerLow, getPercentage(tile) < 0.3499999940395355); + } + + public static TriggerData powerMedium(final Object tile) { + final double p = getPercentage(tile); + return new TriggerData(BinnieTrigger.triggerPowerMedium, p >= 0.3499999940395355 && p <= 0.6499999761581421); + } + + public static TriggerData powerHigh(final Object tile) { + final double p = getPercentage(tile); + return new TriggerData(BinnieTrigger.triggerPowerHigh, getPercentage(tile) > 0.6499999761581421); + } + + public static TriggerData powerFull(final Object tile) { + final double p = getPercentage(tile); + return new TriggerData(BinnieTrigger.triggerPowerFull, getPercentage(tile) > 0.949999988079071); + } + + private static double getPercentage(final Object tile) { + final IPoweredMachine process = Machine.getInterface(IPoweredMachine.class, tile); + if (process != null) { + final double percentage = process.getInterface().getEnergy() / process.getInterface().getCapacity(); + return percentage; + } + return 0.0; + } +} diff --git a/src/main/java/binnie/core/triggers/TriggerProvider.java b/src/main/java/binnie/core/triggers/TriggerProvider.java new file mode 100644 index 00000000..2dfd8ab2 --- /dev/null +++ b/src/main/java/binnie/core/triggers/TriggerProvider.java @@ -0,0 +1,62 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.triggers; + +import java.util.ArrayList; +import buildcraft.api.statements.ITriggerInternal; +import buildcraft.api.statements.IStatementContainer; +import binnie.core.machines.component.IBuildcraft; +import java.util.LinkedList; +import buildcraft.api.statements.ITriggerExternal; +import java.util.Collection; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; +import java.util.List; +import buildcraft.api.statements.ITriggerProvider; + +class TriggerProvider implements ITriggerProvider +{ + static TriggerProvider instance; + public static List triggers; + + @Override + public Collection getExternalTriggers(final ForgeDirection side, final TileEntity tile) { + final LinkedList list = new LinkedList(); + final LinkedList triggerData = new LinkedList(); + if (tile instanceof IBuildcraft.TriggerProvider) { + ((IBuildcraft.TriggerProvider) tile).getTriggers(list); + } + for (final TriggerData data : list) { + if (data.getKey() != null && data.getKey().getUniqueTag() != null) { + triggerData.add(data.getKey()); + } + } + return triggerData; + } + + public static boolean isTriggerActive(final ITriggerExternal trigger, final TileEntity tile) { + final LinkedList list = new LinkedList(); + final LinkedList triggerData = new LinkedList(); + if (tile instanceof IBuildcraft.TriggerProvider) { + ((IBuildcraft.TriggerProvider) tile).getTriggers(list); + } + for (final TriggerData data : list) { + if (data.getKey() == trigger) { + return data.getValue(); + } + } + return false; + } + + @Override + public Collection getInternalTriggers(final IStatementContainer container) { + return new ArrayList(); + } + + static { + TriggerProvider.instance = new TriggerProvider(); + TriggerProvider.triggers = new ArrayList(); + } +} diff --git a/src/main/java/binnie/core/triggers/TriggerWorking.java b/src/main/java/binnie/core/triggers/TriggerWorking.java new file mode 100644 index 00000000..78e1fbc8 --- /dev/null +++ b/src/main/java/binnie/core/triggers/TriggerWorking.java @@ -0,0 +1,48 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.triggers; + +import buildcraft.api.statements.ITriggerExternal; +import binnie.core.machines.Machine; +import binnie.core.machines.power.IProcess; + +public class TriggerWorking +{ + public static TriggerData isNotWorking(final Object inventory) { + final IProcess process = Machine.getInterface(IProcess.class, inventory); + boolean b = false; + if (process != null) { + b = (process.canWork() != null && process.canProgress() != null); + } + return new TriggerData(BinnieTrigger.triggerIsNotWorking, b); + } + + public static TriggerData isWorking(final Object inventory) { + final IProcess process = Machine.getInterface(IProcess.class, inventory); + boolean b = false; + if (process != null) { + b = (process.canWork() == null && process.canProgress() == null); + } + return new TriggerData(BinnieTrigger.triggerIsWorking, b); + } + + public static TriggerData canWork(final Object inventory) { + final IProcess process = Machine.getInterface(IProcess.class, inventory); + boolean b = false; + if (process != null) { + b = (process.canWork() == null); + } + return new TriggerData(BinnieTrigger.triggerCanWork, b); + } + + public static TriggerData cannotWork(final Object inventory) { + final IProcess process = Machine.getInterface(IProcess.class, inventory); + boolean b = false; + if (process != null) { + b = (process.canWork() != null); + } + return new TriggerData(BinnieTrigger.triggerCannotWork, b); + } +} diff --git a/src/main/java/binnie/core/util/FluidStackSet.java b/src/main/java/binnie/core/util/FluidStackSet.java new file mode 100644 index 00000000..8e08ac7a --- /dev/null +++ b/src/main/java/binnie/core/util/FluidStackSet.java @@ -0,0 +1,131 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.util; + +import java.util.Collection; +import java.util.Iterator; +import java.util.ArrayList; +import java.util.List; +import net.minecraftforge.fluids.FluidStack; +import java.util.Set; + +class FluidStackSet implements Set +{ + List itemStacks; + + FluidStackSet() { + this.itemStacks = new ArrayList(); + } + + @Override + public String toString() { + return this.itemStacks.toString(); + } + + protected FluidStack getExisting(final FluidStack stack) { + for (final FluidStack stack2 : this.itemStacks) { + if (stack2.isFluidEqual(stack)) { + return stack2; + } + } + return null; + } + + @Override + public boolean add(final FluidStack e) { + if (e != null) { + if (this.getExisting(e) == null) { + return this.itemStacks.add(e.copy()); + } + final FluidStack existing = this.getExisting(e); + existing.amount += e.amount; + } + return false; + } + + @Override + public boolean addAll(final Collection c) { + boolean addedAll = true; + for (final FluidStack stack : c) { + addedAll = (this.add(stack) && addedAll); + } + return addedAll; + } + + @Override + public void clear() { + this.itemStacks.clear(); + } + + @Override + public boolean contains(final Object o) { + return o instanceof FluidStack && this.getExisting((FluidStack) o) != null; + } + + @Override + public boolean containsAll(final Collection c) { + boolean addedAll = true; + for (final Object o : c) { + addedAll = (addedAll && this.contains(o)); + } + return false; + } + + @Override + public boolean isEmpty() { + return this.itemStacks.isEmpty(); + } + + @Override + public Iterator iterator() { + return this.itemStacks.iterator(); + } + + @Override + public boolean remove(final Object o) { + if (this.contains(o)) { + final FluidStack r = (FluidStack) o; + final FluidStack existing = this.getExisting(r); + if (existing.amount > r.amount) { + final FluidStack fluidStack = existing; + fluidStack.amount -= r.amount; + } + else { + this.itemStacks.remove(existing); + } + } + return false; + } + + @Override + public boolean removeAll(final Collection c) { + boolean addedAll = true; + for (final Object o : c) { + final boolean removed = this.remove(o); + addedAll = (removed && addedAll); + } + return false; + } + + @Override + public boolean retainAll(final Collection c) { + return this.itemStacks.retainAll(c); + } + + @Override + public int size() { + return this.itemStacks.size(); + } + + @Override + public Object[] toArray() { + return this.itemStacks.toArray(); + } + + @Override + public T[] toArray(final T[] a) { + return this.itemStacks.toArray(a); + } +} diff --git a/src/main/java/binnie/core/util/IValidator.java b/src/main/java/binnie/core/util/IValidator.java new file mode 100644 index 00000000..369300ee --- /dev/null +++ b/src/main/java/binnie/core/util/IValidator.java @@ -0,0 +1,10 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.util; + +public interface IValidator +{ + boolean isValid(final T p0); +} diff --git a/src/main/java/binnie/core/util/ItemStackSet.java b/src/main/java/binnie/core/util/ItemStackSet.java new file mode 100644 index 00000000..7a84a7b3 --- /dev/null +++ b/src/main/java/binnie/core/util/ItemStackSet.java @@ -0,0 +1,131 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.util; + +import java.util.Collection; +import java.util.Iterator; +import java.util.ArrayList; +import java.util.List; +import net.minecraft.item.ItemStack; +import java.util.Set; + +public class ItemStackSet implements Set +{ + List itemStacks; + + public ItemStackSet() { + this.itemStacks = new ArrayList(); + } + + @Override + public String toString() { + return this.itemStacks.toString(); + } + + protected ItemStack getExisting(final ItemStack stack) { + for (final ItemStack stack2 : this.itemStacks) { + if (stack2.isItemEqual(stack)) { + return stack2; + } + } + return null; + } + + @Override + public boolean add(final ItemStack e) { + if (e != null) { + if (this.getExisting(e) == null) { + return this.itemStacks.add(e.copy()); + } + final ItemStack existing = this.getExisting(e); + existing.stackSize += e.stackSize; + } + return false; + } + + @Override + public boolean addAll(final Collection c) { + boolean addedAll = true; + for (final ItemStack stack : c) { + addedAll = (this.add(stack) && addedAll); + } + return addedAll; + } + + @Override + public void clear() { + this.itemStacks.clear(); + } + + @Override + public boolean contains(final Object o) { + return o instanceof ItemStack && this.getExisting((ItemStack) o) != null; + } + + @Override + public boolean containsAll(final Collection c) { + boolean addedAll = true; + for (final Object o : c) { + addedAll = (addedAll && this.contains(o)); + } + return false; + } + + @Override + public boolean isEmpty() { + return this.itemStacks.isEmpty(); + } + + @Override + public Iterator iterator() { + return this.itemStacks.iterator(); + } + + @Override + public boolean remove(final Object o) { + if (this.contains(o)) { + final ItemStack r = (ItemStack) o; + final ItemStack existing = this.getExisting(r); + if (existing.stackSize > r.stackSize) { + final ItemStack itemStack = existing; + itemStack.stackSize -= r.stackSize; + } + else { + this.itemStacks.remove(existing); + } + } + return false; + } + + @Override + public boolean removeAll(final Collection c) { + boolean addedAll = true; + for (final Object o : c) { + final boolean removed = this.remove(o); + addedAll = (removed && addedAll); + } + return false; + } + + @Override + public boolean retainAll(final Collection c) { + return this.itemStacks.retainAll(c); + } + + @Override + public int size() { + return this.itemStacks.size(); + } + + @Override + public Object[] toArray() { + return this.itemStacks.toArray(); + } + + @Override + public T[] toArray(final T[] a) { + return this.itemStacks.toArray(a); + } +} diff --git a/src/main/java/binnie/core/util/UniqueFluidStackSet.java b/src/main/java/binnie/core/util/UniqueFluidStackSet.java new file mode 100644 index 00000000..7f6becc8 --- /dev/null +++ b/src/main/java/binnie/core/util/UniqueFluidStackSet.java @@ -0,0 +1,25 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.util; + +import net.minecraftforge.fluids.FluidStack; + +public class UniqueFluidStackSet extends FluidStackSet +{ + @Override + public boolean add(final FluidStack e) { + return e != null && this.getExisting(e) == null && this.itemStacks.add(e.copy()); + } + + @Override + public boolean remove(final Object o) { + if (this.contains(o)) { + final FluidStack r = (FluidStack) o; + final FluidStack existing = this.getExisting(r); + this.itemStacks.remove(existing); + } + return false; + } +} diff --git a/src/main/java/binnie/core/util/UniqueItemStackSet.java b/src/main/java/binnie/core/util/UniqueItemStackSet.java new file mode 100644 index 00000000..3b58419e --- /dev/null +++ b/src/main/java/binnie/core/util/UniqueItemStackSet.java @@ -0,0 +1,25 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.core.util; + +import net.minecraft.item.ItemStack; + +public class UniqueItemStackSet extends ItemStackSet +{ + @Override + public boolean add(final ItemStack e) { + return e != null && this.getExisting(e) == null && this.itemStacks.add(e.copy()); + } + + @Override + public boolean remove(final Object o) { + if (this.contains(o)) { + final ItemStack r = (ItemStack) o; + final ItemStack existing = this.getExisting(r); + this.itemStacks.remove(existing); + } + return false; + } +} diff --git a/src/main/java/binnie/craftgui/binniecore/WindowFieldKit.java b/src/main/java/binnie/craftgui/binniecore/WindowFieldKit.java new file mode 100644 index 00000000..7b303e74 --- /dev/null +++ b/src/main/java/binnie/craftgui/binniecore/WindowFieldKit.java @@ -0,0 +1,298 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.binniecore; + +import binnie.extrabees.gui.punnett.ExtraBeeGUITexture; +import binnie.craftgui.resource.minecraft.PaddedTexture; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.resource.StyleSheet; +import binnie.genetics.machine.Analyser; +import net.minecraft.entity.player.EntityPlayerMP; +import java.util.List; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.ISpeciesRoot; +import forestry.api.genetics.IIndividual; +import java.util.ArrayList; +import net.minecraft.nbt.NBTTagCompound; +import binnie.craftgui.events.EventHandler; +import binnie.craftgui.events.EventValueChanged; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.minecraft.InventoryType; +import binnie.craftgui.minecraft.control.ControlSlot; +import binnie.craftgui.minecraft.control.ControlImage; +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.extrabees.core.ExtraBeeTexture; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.craftgui.core.CraftGUI; +import net.minecraft.init.Items; +import binnie.Binnie; +import forestry.api.genetics.AlleleManager; +import binnie.core.machines.inventory.SlotValidator; +import binnie.core.BinnieCore; +import binnie.core.AbstractMod; +import java.util.HashMap; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import forestry.api.genetics.IChromosomeType; +import java.util.Map; +import binnie.craftgui.controls.ControlText; +import binnie.genetics.gui.ControlChromosome; +import binnie.craftgui.controls.core.Control; +import java.util.Random; +import binnie.craftgui.minecraft.Window; + +public class WindowFieldKit extends Window +{ + private float glassOffsetX; + private float glassOffsetY; + private float glassVX; + private float glassVY; + private Random glassRand; + private Control GlassControl; + private ControlChromosome chromo; + private ControlText text; + private float analyseProgress; + private boolean isAnalysing; + private Map info; + private ItemStack prev; + + public WindowFieldKit(final EntityPlayer player, final IInventory inventory, final Side side) { + super(280.0f, 230.0f, player, inventory, side); + this.glassOffsetX = 0.0f; + this.glassOffsetY = 0.0f; + this.glassVX = 0.0f; + this.glassVY = 0.0f; + this.glassRand = new Random(); + this.analyseProgress = 1.0f; + this.isAnalysing = false; + this.info = new HashMap(); + this.prev = null; + } + + @Override + protected AbstractMod getMod() { + return BinnieCore.instance; + } + + @Override + protected String getName() { + return "Field Kit"; + } + + private void setupValidators() { + this.getWindowInventory().setValidator(0, new SlotValidator(null) { + @Override + public boolean isValid(final ItemStack object) { + return AlleleManager.alleleRegistry.isIndividual(object) || Binnie.Genetics.getConversion(object) != null; + } + + @Override + public String getTooltip() { + return "Individual"; + } + }); + this.getWindowInventory().setValidator(1, new SlotValidator(null) { + @Override + public boolean isValid(final ItemStack object) { + return object.getItem() == Items.paper; + } + + @Override + public String getTooltip() { + return "Paper"; + } + }); + this.getWindowInventory().disableAutoDispense(1); + } + + @Override + public void initialiseClient() { + this.setTitle("Field Kit"); + CraftGUI.Render.stylesheet(new StyleSheetPunnett()); + this.getWindowInventory().createSlot(0); + this.getWindowInventory().createSlot(1); + this.setupValidators(); + new ControlPlayerInventory(this); + final IPoint handGlass = new IPoint(16.0f, 32.0f); + this.GlassControl = new ControlImage(this, handGlass.x(), handGlass.y(), new StandardTexture(0, 160, 96, 96, ExtraBeeTexture.GUIPunnett)); + new ControlSlot(this, handGlass.x() + 54.0f, handGlass.y() + 26.0f).assign(InventoryType.Window, 0); + new ControlSlot(this, 208.0f, 8.0f).assign(InventoryType.Window, 1); + (this.text = new ControlText(this, new IPoint(232.0f, 13.0f), "Paper")).setColour(2236962); + (this.text = new ControlText(this, new IArea(0.0f, 120.0f, this.w(), 24.0f), "", TextJustification.MiddleCenter)).setColour(2236962); + this.chromo = new ControlChromosome(this, 150.0f, 24.0f); + this.addEventHandler(new EventValueChanged.Handler() { + @Override + public void onEvent(final EventValueChanged event) { + final IChromosomeType type = (IChromosomeType) event.getValue(); + if (type != null && WindowFieldKit.this.info.containsKey(type)) { + final String t = WindowFieldKit.this.info.get(type); + WindowFieldKit.this.text.setValue(t); + } + else { + WindowFieldKit.this.text.setValue(""); + } + } + }.setOrigin(EventHandler.Origin.DirectChild, this.chromo)); + } + + @Override + public void initialiseServer() { + final ItemStack kit = this.getPlayer().getHeldItem(); + final int sheets = 64 - kit.getItemDamage(); + if (sheets != 0) { + this.getWindowInventory().setInventorySlotContents(1, new ItemStack(Items.paper, sheets)); + } + this.setupValidators(); + } + + @Override + public void onUpdateClient() { + super.onUpdateClient(); + if (this.isAnalysing) { + this.analyseProgress += 0.01f; + if (this.analyseProgress >= 1.0f) { + this.isAnalysing = false; + this.analyseProgress = 1.0f; + final ItemStack stack = this.getWindowInventory().getStackInSlot(0); + if (stack != null) { + this.sendClientAction("analyse", new NBTTagCompound()); + } + this.refreshSpecies(); + } + } + this.glassVX += this.glassRand.nextFloat() - 0.5f - this.glassOffsetX * 0.2f; + this.glassVY += this.glassRand.nextFloat() - 0.5f - this.glassOffsetY * 0.2f; + this.glassOffsetX += this.glassVX; + this.glassOffsetX *= 1.0f - this.analyseProgress; + this.glassOffsetY += this.glassVY; + this.glassOffsetY *= 1.0f - this.analyseProgress; + this.GlassControl.setOffset(new IPoint(this.glassOffsetX, this.glassOffsetY)); + } + + private void refreshSpecies() { + final ItemStack item = this.getWindowInventory().getStackInSlot(0); + if (item == null || !AlleleManager.alleleRegistry.isIndividual(item)) { + return; + } + final IIndividual ind = AlleleManager.alleleRegistry.getIndividual(item); + if (ind == null) { + return; + } + final ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(item); + this.chromo.setRoot(root); + final Random rand = new Random(); + this.info.clear(); + for (final IChromosomeType type : root.getKaryotype()) { + if (!Binnie.Genetics.isInvalidChromosome(type)) { + final IAllele allele = ind.getGenome().getActiveAllele(type); + final List infos = new ArrayList(); + int i = 0; + for (String pref = root.getUID() + ".fieldkit." + type.getName().toLowerCase() + "."; Binnie.Language.canLocalise(pref + i); ++i) { + infos.add(Binnie.Language.localise(pref + i)); + } + String text = Binnie.Genetics.getSystem(root).getAlleleName(type, allele); + if (!infos.isEmpty()) { + text = infos.get(rand.nextInt(infos.size())); + } + this.info.put(type, text); + this.chromo.setRoot(root); + } + } + } + + @Override + public void onWindowInventoryChanged() { + super.onWindowInventoryChanged(); + if (this.isServer()) { + final ItemStack kit = this.getPlayer().getHeldItem(); + final int sheets = 64 - kit.getItemDamage(); + final int size = (this.getWindowInventory().getStackInSlot(1) == null) ? 0 : this.getWindowInventory().getStackInSlot(1).stackSize; + if (sheets != size) { + kit.setItemDamage(64 - size); + } + ((EntityPlayerMP) this.getPlayer()).updateHeldItem(); + } + if (this.isClient()) { + final ItemStack item = this.getWindowInventory().getStackInSlot(0); + this.prev = item; + this.text.setValue(""); + if (item != null && !Analyser.isAnalysed(item)) { + if (this.getWindowInventory().getStackInSlot(1) == null) { + this.text.setValue("No Paper!"); + this.isAnalysing = false; + this.analyseProgress = 1.0f; + } + else { + this.startAnalysing(); + this.chromo.setRoot(null); + if (this.damageKit()) { + return; + } + } + } + else if (item != null) { + this.isAnalysing = false; + this.analyseProgress = 1.0f; + this.refreshSpecies(); + if (this.damageKit()) { + return; + } + } + else { + this.isAnalysing = false; + this.analyseProgress = 1.0f; + this.chromo.setRoot(null); + } + } + } + + private boolean damageKit() { + return false; + } + + private void startAnalysing() { + this.glassVX = 0.0f; + this.glassVY = 0.0f; + this.glassOffsetX = 0.0f; + this.glassOffsetY = 0.0f; + this.isAnalysing = true; + this.analyseProgress = 0.0f; + } + + @Override + public boolean showHelpButton() { + return true; + } + + @Override + public String showInfoButton() { + return "The Field Kit analyses bees, trees, flowers and butterflies. All that is required is a piece of paper to jot notes"; + } + + @Override + public void recieveGuiNBT(final Side side, final EntityPlayer player, final String name, final NBTTagCompound action) { + super.recieveGuiNBT(side, player, name, action); + if (side == Side.SERVER && name.equals("analyse")) { + this.getWindowInventory().setInventorySlotContents(0, Analyser.analyse(this.getWindowInventory().getStackInSlot(0))); + this.getWindowInventory().decrStackSize(1, 1); + } + } + + static class StyleSheetPunnett extends StyleSheet + { + public StyleSheetPunnett() { + this.textures.put(CraftGUITexture.Window, new PaddedTexture(0, 0, 160, 160, 0, ExtraBeeTexture.GUIPunnett, 32, 32, 32, 32)); + this.textures.put(CraftGUITexture.Slot, new StandardTexture(160, 0, 18, 18, 0, ExtraBeeTexture.GUIPunnett)); + this.textures.put(ExtraBeeGUITexture.Chromosome, new StandardTexture(160, 36, 16, 16, 0, ExtraBeeTexture.GUIPunnett)); + this.textures.put(ExtraBeeGUITexture.Chromosome2, new StandardTexture(160, 52, 16, 16, 0, ExtraBeeTexture.GUIPunnett)); + this.textures.put(CraftGUITexture.HelpButton, new StandardTexture(178, 0, 16, 16, 0, ExtraBeeTexture.GUIPunnett)); + this.textures.put(CraftGUITexture.InfoButton, new StandardTexture(178, 16, 16, 16, 0, ExtraBeeTexture.GUIPunnett)); + } + } +} diff --git a/src/main/java/binnie/craftgui/binniecore/WindowGenesis.java b/src/main/java/binnie/craftgui/binniecore/WindowGenesis.java new file mode 100644 index 00000000..d1b40de4 --- /dev/null +++ b/src/main/java/binnie/craftgui/binniecore/WindowGenesis.java @@ -0,0 +1,227 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.binniecore; + +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import binnie.craftgui.events.EventMouse; +import binnie.craftgui.minecraft.control.ControlItemDisplay; +import java.util.Map; +import java.util.List; +import java.util.ArrayList; +import binnie.craftgui.events.EventHandler; +import forestry.api.genetics.IChromosomeType; +import binnie.craftgui.events.EventValueChanged; +import binnie.craftgui.controls.listbox.ControlTextOption; +import binnie.genetics.gui.ControlGenesisOption; +import binnie.craftgui.minecraft.MinecraftGUI; +import binnie.craftgui.core.geometry.IArea; +import binnie.Binnie; +import forestry.api.genetics.IIndividual; +import net.minecraft.item.ItemStack; +import binnie.craftgui.minecraft.control.ControlTabIcon; +import binnie.craftgui.controls.tab.ControlTab; +import binnie.core.genetics.BreedingSystem; +import binnie.craftgui.controls.tab.ControlTabBar; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.core.BinnieCore; +import binnie.core.AbstractMod; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.window.Panel; +import binnie.core.genetics.Gene; +import binnie.craftgui.controls.listbox.ControlListBox; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.ISpeciesRoot; +import binnie.craftgui.minecraft.Window; + +public class WindowGenesis extends Window +{ + private ISpeciesRoot root; + private IAllele[] template; + private ControlListBox geneList; + private ControlListBox geneOptions; + private Panel panelPickup; + + public WindowGenesis(final EntityPlayer player, final IInventory inventory, final Side side) { + super(342.0f, 228.0f, player, inventory, side); + } + + @Override + protected AbstractMod getMod() { + return BinnieCore.instance; + } + + @Override + protected String getName() { + return "Genesis"; + } + + @Override + public void initialiseClient() { + new ControlPlayerInventory(this); + this.setTitle("Genesis"); + final ControlTabBar tabSystems = new ControlTabBar(this, 8.0f, 28.0f, 23.0f, 100.0f, Position.Left) { + @Override + public ControlTab createTab(final float x, final float y, final float w, final float h, final BreedingSystem value) { + return new ControlTabIcon(this, x, y, w, h, value) { + @Override + public ItemStack getItemStack() { + final int type = this.value.getDefaultType(); + final IIndividual ind = this.value.getDefaultIndividual(); + return this.value.getSpeciesRoot().getMemberStack(ind, type); + } + + @Override + public String getName() { + return this.value.getName(); + } + + @Override + public int getOutlineColour() { + return this.value.getColour(); + } + + @Override + public boolean hasOutline() { + return true; + } + }; + } + }; + tabSystems.setValues(Binnie.Genetics.getActiveSystems()); + this.root = Binnie.Genetics.getActiveSystems().iterator().next().getSpeciesRoot(); + this.template = this.root.getDefaultTemplate(); + final IArea one = new IArea(32.0f, 28.0f, 170.0f, 100.0f); + final IArea two = new IArea(214.0f, 28.0f, 100.0f, 100.0f); + new Panel(this, one.outset(1), MinecraftGUI.PanelType.Black); + new Panel(this, two.outset(1), MinecraftGUI.PanelType.Black); + this.geneList = new ControlListBox(this, one.x(), one.y(), one.w(), one.h(), 10.0f) { + @Override + public IWidget createOption(final Gene value, final int y) { + return new ControlGenesisOption(this.getContent(), value, y); + } + }; + this.geneOptions = new ControlListBox(this, two.x(), two.y(), two.w(), two.h(), 10.0f) { + @Override + public IWidget createOption(final Gene value, final int y) { + return new ControlTextOption(this.getContent(), value, y); + } + }; + tabSystems.addEventHandler(new EventValueChanged.Handler() { + @Override + public void onEvent(final EventValueChanged event) { + WindowGenesis.this.root = ((BreedingSystem) event.getValue()).getSpeciesRoot(); + WindowGenesis.this.template = WindowGenesis.this.root.getDefaultTemplate(); + WindowGenesis.this.refreshTemplate(null); + } + }.setOrigin(EventHandler.Origin.Self, tabSystems)); + this.geneList.addEventHandler(new EventValueChanged.Handler() { + @Override + public void onEvent(final EventValueChanged event) { + final Map> map = Binnie.Genetics.getChromosomeMap(WindowGenesis.this.root); + final List opts = new ArrayList(); + final IChromosomeType chromo = ((Gene) event.value) != null ? ((Gene) event.value).getChromosome() : null; + if (chromo != null)// fix NPE + for (final IAllele allele : map.get(chromo)) { + opts.add(new Gene(allele, chromo, WindowGenesis.this.root)); + } + WindowGenesis.this.geneOptions.setOptions(opts); + } + }.setOrigin(EventHandler.Origin.Self, this.geneList)); + this.geneOptions.addEventHandler(new EventValueChanged.Handler() { + @Override + public void onEvent(final EventValueChanged event) { + if (event.value == null) { + return; + } + final IChromosomeType chromo = ((Gene) event.value).getChromosome(); + WindowGenesis.this.template[chromo.ordinal()] = ((Gene) event.value).getAllele(); + if (chromo == ((Gene) event.value).getSpeciesRoot().getKaryotypeKey()) { + WindowGenesis.this.template = ((Gene) event.value).getSpeciesRoot().getTemplate(((Gene) event.value).getAllele().getUID()); + } + WindowGenesis.this.refreshTemplate(chromo); + } + }.setOrigin(EventHandler.Origin.Self, this.geneOptions)); + this.panelPickup = new Panel(this, 16.0f, 140.0f, 60.0f, 42.0f, MinecraftGUI.PanelType.Black); + this.refreshTemplate(null); + } + + private void refreshTemplate(final IChromosomeType selection) { + final List genes = new ArrayList(); + final IChromosomeType[] arr$; + final IChromosomeType[] chromos = arr$ = Binnie.Genetics.getChromosomeMap(this.root).keySet().toArray(new IChromosomeType[0]); + for (final IChromosomeType type : arr$) { + final IAllele allele = this.template[type.ordinal()]; + if (allele == null) { + throw new NullPointerException("Allele missing for Chromosome " + type.getName()); + } + genes.add(new Gene(allele, type, this.root)); + } + final Map> map = Binnie.Genetics.getChromosomeMap(this.root); + this.geneList.setOptions(genes); + if (selection != null) { + this.geneList.setValue(new Gene(this.template[selection.ordinal()], selection, this.root)); + } + else { + this.geneOptions.setOptions(new ArrayList()); + } + this.refreshPickup(); + } + + private void refreshPickup() { + this.panelPickup.deleteAllChildren(); + int i = 0; + for (final int type : Binnie.Genetics.getSystem(this.root).getActiveTypes()) { + final IIndividual ind = this.root.templateAsIndividual(this.template); + ind.analyze(); + final ItemStack stack = this.root.getMemberStack(ind, type); + final ControlItemDisplay display = new ControlItemDisplay(this.panelPickup, 4 + i % 3 * 18, 4 + i / 3 * 18); + display.setItemStack(stack); + display.setTooltip(); + display.addEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + final NBTTagCompound nbt = new NBTTagCompound(); + stack.writeToNBT(nbt); + Window.get(event.getOrigin()).sendClientAction("genesis", nbt); + } + }.setOrigin(EventHandler.Origin.Self, display)); + ++i; + } + } + + @Override + public void recieveGuiNBT(final Side side, final EntityPlayer player, final String name, final NBTTagCompound action) { + super.recieveGuiNBT(side, player, name, action); + if (side == Side.SERVER && name.equals("genesis")) { + final ItemStack stack = ItemStack.loadItemStackFromNBT(action); + final InventoryPlayer playerInv = player.inventory; + if (stack == null) { + return; + } + if (playerInv.getItemStack() == null) { + playerInv.setItemStack(stack); + } + else if (playerInv.getItemStack().isItemEqual(stack) && ItemStack.areItemStackTagsEqual(playerInv.getItemStack(), stack)) { + final int fit = stack.getMaxStackSize() - (stack.stackSize + playerInv.getItemStack().stackSize); + if (fit >= 0) { + final ItemStack itemStack; + final ItemStack rec = itemStack = stack; + itemStack.stackSize += playerInv.getItemStack().stackSize; + playerInv.setItemStack(rec); + } + } + player.openContainer.detectAndSendChanges(); + if (player instanceof EntityPlayerMP) { + ((EntityPlayerMP) player).updateHeldItem(); + } + } + } +} diff --git a/src/main/java/binnie/craftgui/botany/ControlColourDisplay.java b/src/main/java/binnie/craftgui/botany/ControlColourDisplay.java new file mode 100644 index 00000000..fb17c136 --- /dev/null +++ b/src/main/java/binnie/craftgui/botany/ControlColourDisplay.java @@ -0,0 +1,46 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.botany; + +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.ITooltip; +import binnie.botany.api.IFlowerColour; +import binnie.craftgui.controls.core.IControlValue; +import binnie.craftgui.controls.core.Control; + +public class ControlColourDisplay extends Control implements IControlValue, ITooltip +{ + IFlowerColour value; + + public ControlColourDisplay(final IWidget parent, final float x, final float y) { + super(parent, x, y, 16.0f, 16.0f); + this.addAttribute(Attribute.MouseOver); + } + + @Override + public IFlowerColour getValue() { + return this.value; + } + + @Override + public void setValue(final IFlowerColour value) { + this.value = value; + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.solid(this.getArea(), -1); + CraftGUI.Render.solid(this.getArea().inset(1), -16777216 + this.getValue().getColor(false)); + } + + @Override + public void getTooltip(final Tooltip tooltip) { + super.getTooltip(tooltip); + tooltip.add(this.value.getName()); + } +} diff --git a/src/main/java/binnie/craftgui/botany/ControlColourMixBox.java b/src/main/java/binnie/craftgui/botany/ControlColourMixBox.java new file mode 100644 index 00000000..3daa6d8d --- /dev/null +++ b/src/main/java/binnie/craftgui/botany/ControlColourMixBox.java @@ -0,0 +1,33 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.botany; + +import binnie.craftgui.controls.scroll.ControlScrollableContent; +import binnie.craftgui.controls.listbox.ControlList; +import binnie.craftgui.core.IWidget; +import binnie.botany.api.IColourMix; +import binnie.craftgui.controls.listbox.ControlListBox; + +public class ControlColourMixBox extends ControlListBox +{ + private int index; + private Type type; + + @Override + public IWidget createOption(final IColourMix value, final int y) { + return new ControlColourMixItem(((ControlScrollableContent>) this).getContent(), value, y); + } + + public ControlColourMixBox(final IWidget parent, final int x, final int y, final int width, final int height, final Type type) { + super(parent, x, y, width, height, 12.0f); + this.type = type; + } + + enum Type + { + Resultant, + Further; + } +} diff --git a/src/main/java/binnie/craftgui/botany/ControlColourMixItem.java b/src/main/java/binnie/craftgui/botany/ControlColourMixItem.java new file mode 100644 index 00000000..b0823ab4 --- /dev/null +++ b/src/main/java/binnie/craftgui/botany/ControlColourMixItem.java @@ -0,0 +1,37 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.botany; + +import binnie.core.genetics.BreedingSystem; +import binnie.craftgui.mod.database.WindowAbstractDatabase; +import binnie.craftgui.controls.listbox.ControlList; +import binnie.botany.api.IColourMix; +import binnie.craftgui.controls.listbox.ControlOption; + +public class ControlColourMixItem extends ControlOption +{ + ControlColourDisplay itemWidget1; + ControlColourDisplay itemWidget2; + ControlColourDisplay itemWidget3; + ControlColourMixSymbol addSymbol; + ControlColourMixSymbol arrowSymbol; + + public ControlColourMixItem(final ControlList controlList, final IColourMix option, final int y) { + super(controlList, option, y); + this.itemWidget1 = new ControlColourDisplay(this, 4.0f, 4.0f); + this.itemWidget2 = new ControlColourDisplay(this, 44.0f, 4.0f); + this.itemWidget3 = new ControlColourDisplay(this, 104.0f, 4.0f); + this.addSymbol = new ControlColourMixSymbol(this, 24, 4, 0); + this.arrowSymbol = new ControlColourMixSymbol(this, 64, 4, 1); + final BreedingSystem system = ((WindowAbstractDatabase) this.getSuperParent()).getBreedingSystem(); + if (this.getValue() != null) { + this.itemWidget1.setValue(this.getValue().getColour1()); + this.itemWidget2.setValue(this.getValue().getColour2()); + this.itemWidget3.setValue(this.getValue().getResult()); + this.addSymbol.setValue(this.getValue()); + this.arrowSymbol.setValue(this.getValue()); + } + } +} diff --git a/src/main/java/binnie/craftgui/botany/ControlColourMixSymbol.java b/src/main/java/binnie/craftgui/botany/ControlColourMixSymbol.java new file mode 100644 index 00000000..6596633a --- /dev/null +++ b/src/main/java/binnie/craftgui/botany/ControlColourMixSymbol.java @@ -0,0 +1,61 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.botany; + +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.craftgui.resource.minecraft.CraftGUITextureSheet; +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import binnie.botany.api.IColourMix; +import binnie.craftgui.resource.Texture; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +public class ControlColourMixSymbol extends Control implements ITooltip +{ + static Texture MutationPlus; + static Texture MutationArrow; + IColourMix value; + int type; + + @Override + public void onRenderBackground() { + super.onRenderBackground(); + if (this.type == 0) { + CraftGUI.Render.texture(ControlColourMixSymbol.MutationPlus, IPoint.ZERO); + } + else { + CraftGUI.Render.texture(ControlColourMixSymbol.MutationArrow, IPoint.ZERO); + } + } + + protected ControlColourMixSymbol(final IWidget parent, final int x, final int y, final int type) { + super(parent, x, y, 16 + type * 16, 16.0f); + this.value = null; + this.type = type; + this.addAttribute(Attribute.MouseOver); + } + + public void setValue(final IColourMix value) { + this.value = value; + this.setColour(16777215); + } + + @Override + public void getTooltip(final Tooltip tooltip) { + if (this.type == 1) { + final float chance = this.value.getChance(); + tooltip.add("Current Chance - " + chance + "%"); + } + } + + static { + ControlColourMixSymbol.MutationPlus = new StandardTexture(2, 94, 16, 16, CraftGUITextureSheet.Controls2); + ControlColourMixSymbol.MutationArrow = new StandardTexture(20, 94, 32, 16, CraftGUITextureSheet.Controls2); + } +} diff --git a/src/main/java/binnie/craftgui/botany/ControlColourOption.java b/src/main/java/binnie/craftgui/botany/ControlColourOption.java new file mode 100644 index 00000000..8e56ef6d --- /dev/null +++ b/src/main/java/binnie/craftgui/botany/ControlColourOption.java @@ -0,0 +1,33 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.botany; + +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.geometry.CraftGUIUtil; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.controls.listbox.ControlList; +import binnie.craftgui.core.geometry.IPoint; +import binnie.botany.api.IFlowerColour; +import binnie.craftgui.controls.listbox.ControlTextOption; + +public class ControlColourOption extends ControlTextOption +{ + ControlColourDisplay controlBee; + IPoint boxPosition; + + public ControlColourOption(final ControlList controlList, final IFlowerColour option, final int y) { + super(controlList, option, option.getName(), y); + this.setSize(new IPoint(this.getSize().x(), 20.0f)); + (this.controlBee = new ControlColourDisplay(this, 2.0f, 2.0f)).setValue(option); + this.addAttribute(Attribute.MouseOver); + CraftGUIUtil.moveWidget(this.textWidget, new IPoint(22.0f, 0.0f)); + this.textWidget.setSize(this.textWidget.getSize().sub(new IPoint(24.0f, 0.0f))); + final int th = (int) CraftGUI.Render.textHeight(this.textWidget.getValue(), this.textWidget.getSize().x()); + final int height = Math.max(20, th + 6); + this.setSize(new IPoint(this.size().x(), height)); + this.textWidget.setSize(new IPoint(this.textWidget.getSize().x(), height)); + this.boxPosition = new IPoint(2.0f, (height - 18) / 2); + } +} diff --git a/src/main/java/binnie/craftgui/botany/PageColourMix.java b/src/main/java/binnie/craftgui/botany/PageColourMix.java new file mode 100644 index 00000000..cf7a0046 --- /dev/null +++ b/src/main/java/binnie/craftgui/botany/PageColourMix.java @@ -0,0 +1,39 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.botany; + +import java.util.List; +import binnie.botany.core.BotanyCore; +import binnie.botany.api.IColourMix; +import java.util.ArrayList; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.mod.database.DatabaseTab; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.ControlText; +import binnie.botany.api.IFlowerColour; +import binnie.craftgui.mod.database.PageAbstract; + +public class PageColourMix extends PageAbstract +{ + ControlText pageSpeciesFurther_Title; + ControlColourMixBox pageSpeciesFurther_List; + + public PageColourMix(final IWidget parent, final DatabaseTab tab) { + super(parent, tab); + this.pageSpeciesFurther_Title = new ControlTextCentered(this, 8.0f, "Further Mixes"); + this.pageSpeciesFurther_List = new ControlColourMixBox(this, 4, 20, 136, 152, ControlColourMixBox.Type.Further); + } + + @Override + public void onValueChanged(final IFlowerColour colour) { + final List mixes = new ArrayList(); + for (final IColourMix mix : BotanyCore.getFlowerRoot().getColourMixes(false)) { + if (mix.getColour1() == colour || mix.getColour2() == colour) { + mixes.add(mix); + } + } + this.pageSpeciesFurther_List.setOptions(mixes); + } +} diff --git a/src/main/java/binnie/craftgui/botany/PageColourMixResultant.java b/src/main/java/binnie/craftgui/botany/PageColourMixResultant.java new file mode 100644 index 00000000..03fe4001 --- /dev/null +++ b/src/main/java/binnie/craftgui/botany/PageColourMixResultant.java @@ -0,0 +1,39 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.botany; + +import java.util.List; +import binnie.botany.core.BotanyCore; +import binnie.botany.api.IColourMix; +import java.util.ArrayList; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.mod.database.DatabaseTab; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.ControlText; +import binnie.botany.api.IFlowerColour; +import binnie.craftgui.mod.database.PageAbstract; + +public class PageColourMixResultant extends PageAbstract +{ + ControlText pageSpeciesFurther_Title; + ControlColourMixBox pageSpeciesFurther_List; + + public PageColourMixResultant(final IWidget parent, final DatabaseTab tab) { + super(parent, tab); + this.pageSpeciesFurther_Title = new ControlTextCentered(this, 8.0f, "Resultant Mixes"); + this.pageSpeciesFurther_List = new ControlColourMixBox(this, 4, 20, 136, 152, ControlColourMixBox.Type.Resultant); + } + + @Override + public void onValueChanged(final IFlowerColour colour) { + final List mixes = new ArrayList(); + for (final IColourMix mix : BotanyCore.getFlowerRoot().getColourMixes(false)) { + if (mix.getResult() == colour) { + mixes.add(mix); + } + } + this.pageSpeciesFurther_List.setOptions(mixes); + } +} diff --git a/src/main/java/binnie/craftgui/botany/PageSpeciesFlowerGenome.java b/src/main/java/binnie/craftgui/botany/PageSpeciesFlowerGenome.java new file mode 100644 index 00000000..2afa3a23 --- /dev/null +++ b/src/main/java/binnie/craftgui/botany/PageSpeciesFlowerGenome.java @@ -0,0 +1,107 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.botany; + +import net.minecraft.item.ItemStack; +import binnie.botany.api.IAlleleFlowerSpecies; +import binnie.botany.api.IFlowerGenome; +import forestry.api.genetics.IAllele; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.minecraft.control.ControlItemDisplay; +import binnie.botany.api.EnumFlowerStage; +import binnie.botany.api.IFlower; +import forestry.api.genetics.IIndividual; +import binnie.botany.core.BotanyCore; +import forestry.api.genetics.IChromosomeType; +import binnie.botany.api.EnumFlowerChromosome; +import binnie.craftgui.controls.core.Control; +import binnie.craftgui.controls.scroll.ControlScrollableContent; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.controls.ControlText; +import binnie.Binnie; +import forestry.api.genetics.IAlleleSpecies; +import binnie.craftgui.mod.database.DatabaseTab; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.mod.database.PageSpecies; + +public class PageSpeciesFlowerGenome extends PageSpecies +{ + public PageSpeciesFlowerGenome(final IWidget parent, final DatabaseTab tab) { + super(parent, tab); + } + + @Override + public void onValueChanged(final IAlleleSpecies species) { + this.deleteAllChildren(); + final IAllele[] template = Binnie.Genetics.getFlowerRoot().getTemplate(species.getUID()); + if (template == null) { + return; + } + final IFlower tree = Binnie.Genetics.getFlowerRoot().templateAsIndividual(template); + if (tree == null) { + return; + } + final IFlowerGenome genome = tree.getGenome(); + final IAlleleFlowerSpecies treeSpecies = genome.getPrimary(); + final int w = 144; + final int h = 176; + new ControlText(this, new IArea(0.0f, 4.0f, w, 16.0f), "Genome", TextJustification.MiddleCenter); + final ControlScrollableContent scrollable = new ControlScrollableContent(this, 4.0f, 20.0f, w - 8, h - 8 - 16, 12.0f); + final Control contents = new Control(scrollable, 0.0f, 0.0f, w - 8 - 12, h - 8 - 16); + final int tw = w - 8 - 12; + final int w2 = 55; + final int w3 = tw - 50; + int y = 0; + final int th = 14; + final int th2 = 18; + new ControlText(contents, new IArea(0.0f, y, w2, th), "Temp. : ", TextJustification.MiddleRight); + new ControlText(contents, new IArea(w2, y, w3, th), treeSpecies.getTemperature().getName(), TextJustification.MiddleLeft); + y += th; + new ControlText(contents, new IArea(0.0f, y, w2, th), "Moist. : ", TextJustification.MiddleRight); + new ControlText(contents, new IArea(w2, y, w3, th), Binnie.Language.localise(treeSpecies.getMoisture()), TextJustification.MiddleLeft); + y += th; + new ControlText(contents, new IArea(0.0f, y, w2, th), "pH. : ", TextJustification.MiddleRight); + new ControlText(contents, new IArea(w2, y, w3, th), Binnie.Language.localise(treeSpecies.getPH()), TextJustification.MiddleLeft); + y += th; + new ControlText(contents, new IArea(0.0f, y, w2, th), "Fertility : ", TextJustification.MiddleRight); + new ControlText(contents, new IArea(w2, y, w3, th), genome.getFertility() + "x", TextJustification.MiddleLeft); + y += th; + final float lifespan = genome.getLifespan() * 68.27f / genome.getAgeChance() / 24000.0f; + new ControlText(contents, new IArea(0.0f, y, w2, th), "Lifespan : ", TextJustification.MiddleRight); + new ControlText(contents, new IArea(w2, y, w3, th), "" + String.format("%.2f", lifespan) + " days", TextJustification.MiddleLeft); + y += th; + new ControlText(contents, new IArea(0.0f, y, w2, th), "Nectar : ", TextJustification.MiddleRight); + new ControlText(contents, new IArea(w2, y, w3, th), genome.getActiveAllele(EnumFlowerChromosome.SAPPINESS).getName(), TextJustification.MiddleLeft); + y += th; + int x = w2; + int tot = 0; + for (final IIndividual vid : BotanyCore.getFlowerRoot().getIndividualTemplates()) { + if (vid.getGenome().getPrimary() == treeSpecies) { + if (tot > 0 && tot % 3 == 0) { + x -= 54; + y += 18; + } + final ItemStack stack = BotanyCore.getFlowerRoot().getMemberStack(vid, EnumFlowerStage.FLOWER.ordinal()); + final ControlItemDisplay display = new ControlItemDisplay(contents, x, y); + display.setItemStack(stack); + ++tot; + x += 18; + } + } + final int numOfLines = 1 + (tot - 1) / 3; + new ControlText(contents, new IArea(0.0f, y - (numOfLines - 1) * 18, w2, 4 + 18 * numOfLines), "Varieties : ", TextJustification.MiddleRight); + y += th; + contents.setSize(new IPoint(contents.size().x(), y)); + scrollable.setScrollableContent(contents); + } + + public static String tolerated(final boolean t) { + if (t) { + return "Tolerated"; + } + return "Not Tolerated"; + } +} diff --git a/src/main/java/binnie/craftgui/botany/WindowBotanistDatabase.java b/src/main/java/binnie/craftgui/botany/WindowBotanistDatabase.java new file mode 100644 index 00000000..d9724de6 --- /dev/null +++ b/src/main/java/binnie/craftgui/botany/WindowBotanistDatabase.java @@ -0,0 +1,94 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.botany; + +import binnie.craftgui.controls.scroll.ControlScrollableContent; +import binnie.craftgui.mod.database.PageBreeder; +import java.util.List; +import java.util.ArrayList; +import binnie.craftgui.controls.listbox.ControlList; +import binnie.botany.api.IFlowerColour; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.mod.database.PageBranchSpecies; +import binnie.craftgui.mod.database.PageBranchOverview; +import binnie.craftgui.mod.database.PageSpeciesMutations; +import binnie.craftgui.mod.database.PageSpeciesResultant; +import binnie.craftgui.mod.database.PageSpeciesClassification; +import binnie.craftgui.core.IWidget; +import binnie.core.AbstractMod; +import binnie.craftgui.mod.database.DatabaseTab; +import binnie.botany.Botany; +import binnie.craftgui.mod.database.IDatabaseMode; +import binnie.craftgui.mod.database.PageSpeciesOverview; +import binnie.craftgui.minecraft.Window; +import binnie.Binnie; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.entity.player.EntityPlayer; +import binnie.botany.genetics.EnumFlowerColor; +import binnie.craftgui.controls.listbox.ControlListBox; +import binnie.craftgui.mod.database.WindowAbstractDatabase; + +public class WindowBotanistDatabase extends WindowAbstractDatabase +{ + ControlListBox selectionBoxColors; + + public WindowBotanistDatabase(final EntityPlayer player, final Side side, final boolean nei) { + super(player, side, nei, Binnie.Genetics.flowerBreedingSystem, 130.0f); + } + + public static Window create(final EntityPlayer player, final Side side, final boolean nei) { + return new WindowBotanistDatabase(player, side, nei); + } + + @Override + protected void addTabs() { + new PageSpeciesOverview(this.getInfoPages(Mode.Species), new DatabaseTab(Botany.instance, "species.overview", 0)); + new PageSpeciesFlowerGenome(this.getInfoPages(Mode.Species), new DatabaseTab(Botany.instance, "species.genome", 0)); + new PageSpeciesClassification(this.getInfoPages(Mode.Species), new DatabaseTab(Botany.instance, "species.classification", 0)); + new PageSpeciesResultant(this.getInfoPages(Mode.Species), new DatabaseTab(Botany.instance, "species.resultant", 0)); + new PageSpeciesMutations(this.getInfoPages(Mode.Species), new DatabaseTab(Botany.instance, "species.further", 0)); + new PageBranchOverview(this.getInfoPages(Mode.Branches), new DatabaseTab(Botany.instance, "branches.overview", 0)); + new PageBranchSpecies(this.getInfoPages(Mode.Branches), new DatabaseTab(Botany.instance, "branches.species", 0)); + this.createMode(FlowerMode.Colour, new ModeWidgets(FlowerMode.Colour, this) { + @Override + public void createListBox(final IArea area) { + this.listBox = new ControlListBox(this.modePage, area.x(), area.y(), area.w(), area.h(), 12.0f) { + @Override + public IWidget createOption(final IFlowerColour value, final int y) { + return new ControlColourOption(((ControlScrollableContent>) this).getContent(), value, y); + } + }; + final List colors = new ArrayList(); + for (final IFlowerColour c : EnumFlowerColor.values()) { + colors.add(c); + } + this.listBox.setOptions(colors); + } + }); + new PageColourMixResultant(this.getInfoPages(FlowerMode.Colour), new DatabaseTab(Botany.instance, "colour.resultant", 0)); + new PageColourMix(this.getInfoPages(FlowerMode.Colour), new DatabaseTab(Botany.instance, "colour.further", 0)); + new PageBreeder(this.getInfoPages(Mode.Breeder), this.getUsername(), new DatabaseTab(Botany.instance, "breeder", 0)); + } + + @Override + protected AbstractMod getMod() { + return Botany.instance; + } + + @Override + protected String getName() { + return "FlowerDatabase"; + } + + enum FlowerMode implements IDatabaseMode + { + Colour; + + @Override + public String getName() { + return Botany.proxy.localise("gui.database.mode." + this.name().toLowerCase()); + } + } +} diff --git a/src/main/java/binnie/craftgui/controls/ControlCheckbox.java b/src/main/java/binnie/craftgui/controls/ControlCheckbox.java new file mode 100644 index 00000000..23bbbdbe --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/ControlCheckbox.java @@ -0,0 +1,72 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls; + +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.events.EventValueChanged; +import binnie.craftgui.events.EventHandler; +import binnie.craftgui.events.EventMouse; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.core.IControlValue; +import binnie.craftgui.controls.core.Control; + +public class ControlCheckbox extends Control implements IControlValue +{ + boolean value; + String text; + + public ControlCheckbox(final IWidget parent, final float x, final float y, final boolean bool) { + this(parent, x, y, 0.0f, "", bool); + } + + public ControlCheckbox(final IWidget parent, final float x, final float y, final float w, final String text, final boolean bool) { + super(parent, x, y, (w > 16.0f) ? w : 16.0f, 16.0f); + this.text = text; + this.value = bool; + if (w > 16.0f) { + new ControlText(this, new IArea(16.0f, 1.0f, w - 16.0f, 16.0f), text, TextJustification.MiddleCenter).setColour(4473924); + } + this.addAttribute(Attribute.MouseOver); + this.addEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + ControlCheckbox.this.toggleValue(); + } + }.setOrigin(EventHandler.Origin.Self, this)); + } + + protected void onValueChanged(final boolean value) { + } + + @Override + public Boolean getValue() { + return this.value; + } + + @Override + public void setValue(final Boolean value) { + this.value = value; + this.onValueChanged(value); + this.callEvent(new EventValueChanged(this, value)); + } + + public void toggleValue() { + this.setValue(Boolean.valueOf(!this.getValue())); + } + + @Override + public void onRenderBackground() { + Object texture = this.getValue() ? CraftGUITexture.CheckboxChecked : CraftGUITexture.Checkbox; + if (this.isMouseOver()) { + texture = (this.getValue() ? CraftGUITexture.CheckboxCheckedHighlighted : CraftGUITexture.CheckboxHighlighted); + } + CraftGUI.Render.texture(texture, IPoint.ZERO); + } +} diff --git a/src/main/java/binnie/craftgui/controls/ControlText.java b/src/main/java/binnie/craftgui/controls/ControlText.java new file mode 100644 index 00000000..ced9a17c --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/ControlText.java @@ -0,0 +1,48 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls; + +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.controls.core.IControlValue; +import binnie.craftgui.controls.core.Control; + +public class ControlText extends Control implements IControlValue +{ + private String text; + private TextJustification align; + + public ControlText(final IWidget parent, final IPoint pos, final String text) { + this(parent, new IArea(pos, new IPoint(500.0f, 0.0f)), text, TextJustification.TopLeft); + } + + public ControlText(final IWidget parent, final String text, final TextJustification align) { + this(parent, parent.getArea(), text, align); + } + + public ControlText(final IWidget parent, final IArea area, final String text, final TextJustification align) { + super(parent, area.pos().x(), area.pos().y(), area.size().x(), area.size().y()); + this.setValue(text); + this.align = align; + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.text(this.getArea(), this.align, this.text, this.getColour()); + } + + @Override + public void setValue(final String text) { + this.text = text; + } + + @Override + public String getValue() { + return this.text; + } +} diff --git a/src/main/java/binnie/craftgui/controls/ControlTextCentered.java b/src/main/java/binnie/craftgui/controls/ControlTextCentered.java new file mode 100644 index 00000000..f0366165 --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/ControlTextCentered.java @@ -0,0 +1,17 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls; + +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.IWidget; + +public class ControlTextCentered extends ControlText +{ + public ControlTextCentered(final IWidget parent, final float y, final String text) { + super(parent, new IArea(new IPoint(0.0f, y), new IPoint(parent.size().x(), 0.0f)), text, TextJustification.TopCenter); + } +} diff --git a/src/main/java/binnie/craftgui/controls/ControlTextEdit.java b/src/main/java/binnie/craftgui/controls/ControlTextEdit.java new file mode 100644 index 00000000..4876c499 --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/ControlTextEdit.java @@ -0,0 +1,97 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls; + +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.events.EventWidget; +import binnie.craftgui.events.EventMouse; +import binnie.craftgui.events.EventHandler; +import binnie.craftgui.events.EventTextEdit; +import binnie.craftgui.events.EventKey; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.IWidget; +import net.minecraft.client.gui.GuiTextField; +import binnie.craftgui.controls.core.IControlValue; +import binnie.craftgui.controls.core.Control; + +public class ControlTextEdit extends Control implements IControlValue +{ + GuiTextField field; + private String cachedValue; + + public ControlTextEdit(final IWidget parent, final float x, final float y, final float width, final float height) { + super(parent, x, y, width, height); + this.cachedValue = ""; + this.field = new GuiTextField(this.getWindow().getGui().getFontRenderer(), 0, 0, 10, 10); + this.addAttribute(Attribute.CanFocus); + this.addAttribute(Attribute.MouseOver); + this.field.setEnableBackgroundDrawing(false); + this.addEventHandler(new EventKey.Down.Handler() { + @Override + public void onEvent(final EventKey.Down event) { + ControlTextEdit.this.field.textboxKeyTyped(event.getCharacter(), event.getKey()); + final String text = ControlTextEdit.this.getValue(); + if (!text.equals(ControlTextEdit.this.cachedValue)) { + ControlTextEdit.this.cachedValue = text; + ControlTextEdit.this.callEvent(new EventTextEdit(ControlTextEdit.this, ControlTextEdit.this.cachedValue)); + ControlTextEdit.this.onTextEdit(ControlTextEdit.this.cachedValue); + } + } + }.setOrigin(EventHandler.Origin.Self, this)); + this.addEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + ControlTextEdit.this.field.mouseClicked((int) ControlTextEdit.this.getRelativeMousePosition().x(), (int) ControlTextEdit.this.getRelativeMousePosition().y(), event.getButton()); + } + }.setOrigin(EventHandler.Origin.Self, this)); + this.addEventHandler(new EventWidget.GainFocus.Handler() { + @Override + public void onEvent(final EventWidget.GainFocus event) { + ControlTextEdit.this.field.setFocused(true); + } + }.setOrigin(EventHandler.Origin.Self, this)); + this.addEventHandler(new EventWidget.LoseFocus.Handler() { + @Override + public void onEvent(final EventWidget.LoseFocus event) { + ControlTextEdit.this.field.setFocused(false); + } + }.setOrigin(EventHandler.Origin.Self, this)); + } + + @Override + public String getValue() { + return (this.field.getText() == null) ? "" : this.field.getText(); + } + + @Override + public void setValue(final String value) { + if (!this.getValue().equals(value)) { + this.field.setText(value); + this.field.setCursorPosition(0); + } + } + + @Override + public void onUpdateClient() { + } + + protected void onTextEdit(final String value) { + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.texture(CraftGUITexture.Slot, this.getArea()); + this.renderTextField(); + } + + protected void renderTextField() { + this.field.width = (int) this.w(); + this.field.height = (int) this.h(); + this.field.xPosition = (int) ((this.h() - 8.0f) / 2.0f); + this.field.yPosition = (int) ((this.h() - 8.0f) / 2.0f); + this.field.drawTextBox(); + } +} diff --git a/src/main/java/binnie/craftgui/controls/IControlSelection.java b/src/main/java/binnie/craftgui/controls/IControlSelection.java new file mode 100644 index 00000000..c801b68d --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/IControlSelection.java @@ -0,0 +1,14 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls; + +public interface IControlSelection +{ + T getSelectedValue(); + + void setSelectedValue(final T p0); + + boolean isSelected(final IControlSelectionOption p0); +} diff --git a/src/main/java/binnie/craftgui/controls/IControlSelectionOption.java b/src/main/java/binnie/craftgui/controls/IControlSelectionOption.java new file mode 100644 index 00000000..30a5ac89 --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/IControlSelectionOption.java @@ -0,0 +1,10 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls; + +public interface IControlSelectionOption +{ + T getValue(); +} diff --git a/src/main/java/binnie/craftgui/controls/button/ControlButton.java b/src/main/java/binnie/craftgui/controls/button/ControlButton.java new file mode 100644 index 00000000..527744bd --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/button/ControlButton.java @@ -0,0 +1,66 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls.button; + +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.events.EventHandler; +import binnie.craftgui.events.EventButtonClicked; +import binnie.craftgui.events.EventMouse; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.controls.core.Control; + +public class ControlButton extends Control +{ + private ControlText textWidget; + private String text; + + public ControlButton(final IWidget parent, final float x, final float y, final float width, final float height) { + super(parent, x, y, width, height); + this.addAttribute(Attribute.MouseOver); + this.addEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + ControlButton.this.callEvent(new EventButtonClicked(ControlButton.this.getWidget())); + ControlButton.this.onMouseClick(event); + } + }.setOrigin(EventHandler.Origin.Self, this)); + } + + protected void onMouseClick(final EventMouse.Down event) { + } + + public ControlButton(final IWidget parent, final float x, final float y, final float width, final float height, final String text) { + this(parent, x, y, width, height); + this.text = text; + this.textWidget = new ControlText(this, this.getArea(), text, TextJustification.MiddleCenter); + } + + @Override + public void onUpdateClient() { + if (this.textWidget != null) { + this.textWidget.setValue(this.getText()); + } + } + + public String getText() { + return this.text; + } + + @Override + public void onRenderBackground() { + Object texture = CraftGUITexture.ButtonDisabled; + if (this.isMouseOver()) { + texture = CraftGUITexture.ButtonHighlighted; + } + else if (this.isEnabled()) { + texture = CraftGUITexture.Button; + } + CraftGUI.Render.texture(texture, this.getArea()); + } +} diff --git a/src/main/java/binnie/craftgui/controls/button/ControlEnumButton.java b/src/main/java/binnie/craftgui/controls/button/ControlEnumButton.java new file mode 100644 index 00000000..6ecec0c7 --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/button/ControlEnumButton.java @@ -0,0 +1,61 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls.button; + +import java.util.ArrayList; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.events.EventValueChanged; +import binnie.craftgui.events.EventMouse; +import java.util.List; +import binnie.craftgui.controls.core.IControlValue; + +public class ControlEnumButton extends ControlButton implements IControlValue +{ + public static final String eventEnumChanged = "eventEnumButtonChanged"; + private T currentSelection; + private List enumConstants; + + @Override + public String getText() { + return this.currentSelection.toString(); + } + + @Override + public void onMouseClick(final EventMouse.Down event) { + int index = this.enumConstants.indexOf(this.currentSelection); + if (index < this.enumConstants.size() - 1) { + ++index; + } + else { + index = 0; + } + final T newEnum = this.enumConstants.get(index); + this.setValue(newEnum); + } + + @Override + public void setValue(final T selection) { + if (this.currentSelection != selection) { + this.currentSelection = selection; + this.callEvent(new EventValueChanged(this, this.getValue())); + } + } + + public ControlEnumButton(final IWidget parent, final float x, final float y, final float width, final float height, final T[] values) { + super(parent, x, y, width, height, ""); + this.enumConstants = new ArrayList(); + for (final T value : values) { + this.enumConstants.add(value); + } + if (values.length > 0) { + this.currentSelection = values[0]; + } + } + + @Override + public T getValue() { + return this.currentSelection; + } +} diff --git a/src/main/java/binnie/craftgui/controls/button/ControlToggleButton.java b/src/main/java/binnie/craftgui/controls/button/ControlToggleButton.java new file mode 100644 index 00000000..a0422a03 --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/button/ControlToggleButton.java @@ -0,0 +1,23 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls.button; + +import binnie.craftgui.core.IWidget; +import binnie.craftgui.events.EventToggleButtonClicked; +import binnie.craftgui.events.EventMouse; + +public class ControlToggleButton extends ControlButton +{ + boolean toggled; + + @Override + public void onMouseClick(final EventMouse.Down event) { + this.callEvent(new EventToggleButtonClicked(this, this.toggled)); + } + + public ControlToggleButton(final IWidget parent, final int x, final int y, final int width, final int height) { + super(parent, x, y, width, height); + } +} diff --git a/src/main/java/binnie/craftgui/controls/core/Control.java b/src/main/java/binnie/craftgui/controls/core/Control.java new file mode 100644 index 00000000..454e555f --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/core/Control.java @@ -0,0 +1,85 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls.core; + +import binnie.craftgui.minecraft.Window; +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.geometry.IPoint; +import java.util.ArrayList; +import binnie.craftgui.core.IWidget; +import java.util.List; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.core.ITooltipHelp; +import binnie.craftgui.core.Widget; + +public class Control extends Widget implements ITooltipHelp, ITooltip +{ + List helpStrings; + List tooltipStrings; + public int extraLevel; + + public Control(final IWidget parent, final float x, final float y, final float w, final float h) { + super(parent); + this.helpStrings = new ArrayList(); + this.tooltipStrings = new ArrayList(); + this.extraLevel = 0; + this.setPosition(new IPoint(x, y)); + this.setSize(new IPoint(w, h)); + this.initialise(); + } + + public Control(final IWidget parent, final IArea area) { + this(parent, area.x(), area.y(), area.w(), area.h()); + } + + protected void initialise() { + } + + @Override + public void onUpdateClient() { + } + + public void addHelp(final String string) { + this.helpStrings.add(string); + } + + public void addHelp(final String[] strings) { + for (final String string : strings) { + this.addHelp(string); + } + } + + public void addTooltip(final String string) { + this.addAttribute(Attribute.MouseOver); + this.tooltipStrings.add(string); + } + + public void addTooltip(final String[] strings) { + for (final String string : strings) { + this.addTooltip(string); + } + } + + @Override + public int getLevel() { + return this.extraLevel + super.getLevel(); + } + + @Override + public void getHelpTooltip(final Tooltip tooltip) { + tooltip.add(this.helpStrings); + } + + @Override + public void getTooltip(final Tooltip tooltip) { + tooltip.add(this.tooltipStrings); + } + + public Window getWindow() { + return (Window) this.getSuperParent(); + } +} diff --git a/src/main/java/binnie/craftgui/controls/core/IControlIndexed.java b/src/main/java/binnie/craftgui/controls/core/IControlIndexed.java new file mode 100644 index 00000000..9e7cdff7 --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/core/IControlIndexed.java @@ -0,0 +1,12 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls.core; + +public interface IControlIndexed +{ + int getIndex(); + + void setIndex(final int p0); +} diff --git a/src/main/java/binnie/craftgui/controls/core/IControlValue.java b/src/main/java/binnie/craftgui/controls/core/IControlValue.java new file mode 100644 index 00000000..bab21fb0 --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/core/IControlValue.java @@ -0,0 +1,14 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls.core; + +import binnie.craftgui.core.IWidget; + +public interface IControlValue extends IWidget +{ + T getValue(); + + void setValue(final T p0); +} diff --git a/src/main/java/binnie/craftgui/controls/core/IControlValues.java b/src/main/java/binnie/craftgui/controls/core/IControlValues.java new file mode 100644 index 00000000..61d64ae4 --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/core/IControlValues.java @@ -0,0 +1,14 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls.core; + +import java.util.Collection; + +public interface IControlValues extends IControlValue +{ + Collection getValues(); + + void setValues(final Collection p0); +} diff --git a/src/main/java/binnie/craftgui/controls/listbox/ControlList.java b/src/main/java/binnie/craftgui/controls/listbox/ControlList.java new file mode 100644 index 00000000..6ec40591 --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/listbox/ControlList.java @@ -0,0 +1,131 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls.listbox; + +import binnie.craftgui.core.geometry.IPoint; +import java.util.Collection; +import binnie.craftgui.events.EventValueChanged; +import java.util.LinkedHashMap; +import binnie.core.util.IValidator; +import binnie.craftgui.core.IWidget; +import java.util.Map; +import binnie.craftgui.controls.core.IControlValue; +import binnie.craftgui.controls.core.Control; + +public class ControlList extends Control implements IControlValue +{ + ControlListBox parent; + T value; + Map allOptions; + Map optionWidgets; + boolean creating; + IValidator validator; + + protected ControlList(final ControlListBox parent, final float x, final float y, final float w, final float h) { + super(parent, x, y, w, h); + this.value = null; + this.allOptions = new LinkedHashMap(); + this.optionWidgets = new LinkedHashMap(); + this.creating = false; + this.parent = parent; + } + + @Override + public T getValue() { + return this.value; + } + + @Override + public void setValue(final T value) { + if (value == this.value) { + return; + } + this.value = value; + if (value != null && this.optionWidgets.containsKey(value)) { + final IWidget child = this.optionWidgets.get(value); + this.parent.ensureVisible(child.y(), child.y() + child.h(), this.h()); + } + this.getParent().callEvent(new EventValueChanged(this.getParent(), value)); + } + + public void setOptions(final Collection options) { + this.deleteAllChildren(); + this.allOptions.clear(); + int i = 0; + for (final T option : options) { + final IWidget optionWidget = ((ControlListBox) this.getParent()).createOption(option, 0); + if (optionWidget != null) { + this.allOptions.put(option, optionWidget); + } + ++i; + } + this.filterOptions(); + } + + public void filterOptions() { + int height = 0; + this.optionWidgets.clear(); + for (final Map.Entry entry : this.allOptions.entrySet()) { + if (this.isValidOption(entry.getValue())) { + entry.getValue().show(); + this.optionWidgets.put(entry.getKey(), entry.getValue()); + entry.getValue().setPosition(new IPoint(0.0f, height)); + height += (int) entry.getValue().getSize().y(); + } + else { + entry.getValue().hide(); + } + } + this.creating = true; + this.setValue(this.getValue()); + this.setSize(new IPoint(this.getSize().x(), height)); + } + + public Collection getOptions() { + return this.optionWidgets.keySet(); + } + + public Collection getAllOptions() { + return this.allOptions.keySet(); + } + + public int getIndexOf(final T value) { + int index = 0; + for (final T option : this.getOptions()) { + if (option.equals(value)) { + return index; + } + ++index; + } + return -1; + } + + public int getCurrentIndex() { + return this.getIndexOf(this.getValue()); + } + + public void setIndex(final int currentIndex) { + int index = 0; + for (final T option : this.getOptions()) { + if (index == currentIndex) { + this.setValue(option); + return; + } + ++index; + } + this.setValue(null); + } + + private boolean isValidOption(final IWidget widget) { + return this.validator == null || this.validator.isValid(widget); + } + + public void setValidator(final IValidator validator) { + if (this.validator != validator) { + this.validator = validator; + this.filterOptions(); + } + } +} diff --git a/src/main/java/binnie/craftgui/controls/listbox/ControlListBox.java b/src/main/java/binnie/craftgui/controls/listbox/ControlListBox.java new file mode 100644 index 00000000..5c8d0bee --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/listbox/ControlListBox.java @@ -0,0 +1,63 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls.listbox; + +import binnie.core.util.IValidator; +import java.util.Collection; +import binnie.craftgui.events.EventKey; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.core.IControlValue; +import binnie.craftgui.controls.scroll.ControlScrollableContent; + +public class ControlListBox extends ControlScrollableContent> implements IControlValue +{ + public ControlListBox(final IWidget parent, final float x, final float y, final float w, final float h, final float scrollBarSize) { + super(parent, x, y, w, h, scrollBarSize); + } + + @Override + public void initialise() { + this.setScrollableContent(new ControlList(this, 1.0f, 1.0f, this.w() - 2.0f - this.scrollBarSize, this.h() - 2.0f)); + this.addEventHandler(new EventKey.Down.Handler() { + @Override + public void onEvent(final EventKey.Down event) { + if (ControlListBox.this.calculateIsMouseOver()) { + int currentIndex = ControlListBox.this.getContent().getCurrentIndex(); + if (event.getKey() == 208) { + if (++currentIndex >= ControlListBox.this.getContent().getOptions().size()) { + currentIndex = 0; + } + } + else if (event.getKey() == 200 && --currentIndex < 0) { + currentIndex = ControlListBox.this.getContent().getOptions().size() - 1; + } + ControlListBox.this.getContent().setIndex(currentIndex); + } + } + }); + } + + @Override + public final T getValue() { + return this.getContent().getValue(); + } + + @Override + public final void setValue(final T value) { + this.getContent().setValue(value); + } + + public void setOptions(final Collection options) { + this.getContent().setOptions(options); + } + + public IWidget createOption(final T value, final int y) { + return new ControlOption(this.getContent(), value, y); + } + + public void setValidator(final IValidator validator) { + this.getContent().setValidator(validator); + } +} diff --git a/src/main/java/binnie/craftgui/controls/listbox/ControlOption.java b/src/main/java/binnie/craftgui/controls/listbox/ControlOption.java new file mode 100644 index 00000000..8113a921 --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/listbox/ControlOption.java @@ -0,0 +1,68 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls.listbox; + +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.events.EventMouse; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.controls.core.IControlValue; +import binnie.craftgui.controls.core.Control; + +public class ControlOption extends Control implements IControlValue +{ + T value; + + @Override + public void onUpdateClient() { + if (this.getValue() == null) { + return; + } + int colour = 10526880; + if (this.isCurrentSelection()) { + colour = 16777215; + } + this.setColour(colour); + } + + public ControlOption(final ControlList controlList, final T option) { + this(controlList, option, 16); + } + + public ControlOption(final ControlList controlList, final T option, final int height) { + super(controlList, 0.0f, height, controlList.getSize().x(), 20.0f); + this.value = option; + if (this.value != null) { + this.addAttribute(Attribute.MouseOver); + } + this.addSelfEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + ((IControlValue) ControlOption.this.getParent()).setValue(ControlOption.this.getValue()); + } + }); + } + + @Override + public T getValue() { + return this.value; + } + + @Override + public void setValue(final T value) { + this.value = value; + } + + public boolean isCurrentSelection() { + return this.getValue() != null && this.getValue().equals(((IControlValue) this.getParent()).getValue()); + } + + @Override + public void onRenderForeground() { + if (this.isCurrentSelection()) { + CraftGUI.Render.texture(CraftGUITexture.Outline, this.getArea()); + } + } +} diff --git a/src/main/java/binnie/craftgui/controls/listbox/ControlTextOption.java b/src/main/java/binnie/craftgui/controls/listbox/ControlTextOption.java new file mode 100644 index 00000000..446a8ef9 --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/listbox/ControlTextOption.java @@ -0,0 +1,35 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls.listbox; + +import binnie.craftgui.events.EventHandler; +import binnie.craftgui.events.EventWidget; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.controls.ControlText; + +public class ControlTextOption extends ControlOption +{ + protected ControlText textWidget; + + public ControlTextOption(final ControlList controlList, final T option, final String optionName, final int y) { + super(controlList, option, y); + this.textWidget = null; + this.textWidget = new ControlText(this, this.getArea(), optionName, TextJustification.MiddleCenter); + this.addEventHandler(new EventWidget.ChangeColour.Handler() { + @Override + public void onEvent(final EventWidget.ChangeColour event) { + ControlTextOption.this.textWidget.setColour(ControlTextOption.this.getColour()); + } + }.setOrigin(EventHandler.Origin.Self, this)); + } + + public ControlTextOption(final ControlList controlList, final T option, final int y) { + this(controlList, option, option.toString(), y); + } + + public String getText() { + return this.textWidget.getValue(); + } +} diff --git a/src/main/java/binnie/craftgui/controls/page/ControlPage.java b/src/main/java/binnie/craftgui/controls/page/ControlPage.java new file mode 100644 index 00000000..28b294fb --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/page/ControlPage.java @@ -0,0 +1,36 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls.page; + +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.core.IControlValue; +import binnie.craftgui.controls.core.Control; + +public class ControlPage extends Control implements IControlValue +{ + T value; + + public ControlPage(final IWidget parent, final T value) { + this(parent, 0.0f, 0.0f, parent.w(), parent.h(), value); + } + + public ControlPage(final IWidget parent, final float x, final float y, final float w, final float h, final T value) { + super(parent, x, y, w, h); + this.setValue(value); + if (parent instanceof IControlValue && ((IControlValue) parent).getValue() == null) { + ((IControlValue) parent).setValue(value); + } + } + + @Override + public T getValue() { + return this.value; + } + + @Override + public void setValue(final T value) { + this.value = value; + } +} diff --git a/src/main/java/binnie/craftgui/controls/page/ControlPages.java b/src/main/java/binnie/craftgui/controls/page/ControlPages.java new file mode 100644 index 00000000..2c5d1b90 --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/page/ControlPages.java @@ -0,0 +1,59 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls.page; + +import java.util.List; +import java.util.ArrayList; +import java.util.Collection; +import binnie.craftgui.events.EventValueChanged; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.core.IControlValue; +import binnie.craftgui.controls.core.IControlValues; +import binnie.craftgui.controls.core.Control; + +public class ControlPages extends Control implements IControlValues, IControlValue +{ + T value; + + @Override + public boolean isChildVisible(final IWidget child) { + return child != null && this.value == ((IControlValue) child).getValue(); + } + + public ControlPages(final IWidget parent, final float x, final float y, final float w, final float h) { + super(parent, x, y, w, h); + this.value = null; + } + + @Override + public void onAddChild(final IWidget widget) { + } + + @Override + public T getValue() { + return this.value; + } + + @Override + public void setValue(final T value) { + if (this.value != value) { + this.value = value; + this.callEvent(new EventValueChanged(this, value)); + } + } + + @Override + public Collection getValues() { + final List list = new ArrayList(); + for (final IWidget child : this.getWidgets()) { + list.add((T) ((IControlValue) child).getValue()); + } + return list; + } + + @Override + public void setValues(final Collection values) { + } +} diff --git a/src/main/java/binnie/craftgui/controls/scroll/ControlScroll.java b/src/main/java/binnie/craftgui/controls/scroll/ControlScroll.java new file mode 100644 index 00000000..d92c094a --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/scroll/ControlScroll.java @@ -0,0 +1,23 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls.scroll; + +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.core.Control; + +public class ControlScroll extends Control +{ + private IControlScrollable scrollWidget; + + public ControlScroll(final IWidget parent, final float x, final float y, final float width, final float height, final IControlScrollable scrollWidget) { + super(parent, x, y, width, height); + this.scrollWidget = scrollWidget; + new ControlScrollBar(this); + } + + public IControlScrollable getScrollableWidget() { + return this.scrollWidget; + } +} diff --git a/src/main/java/binnie/craftgui/controls/scroll/ControlScrollBar.java b/src/main/java/binnie/craftgui/controls/scroll/ControlScrollBar.java new file mode 100644 index 00000000..f8d0f2f6 --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/scroll/ControlScrollBar.java @@ -0,0 +1,86 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls.scroll; + +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.events.EventMouse; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.core.Control; + +public class ControlScrollBar extends Control +{ + protected final IControlScrollable scrollable; + + public ControlScrollBar(final ControlScroll parent) { + this(parent, 0.0f, 0.0f, parent.getSize().x(), parent.getSize().y(), parent.getScrollableWidget()); + } + + public ControlScrollBar(final IWidget parent, final float x, final float y, final float w, final float h, final IControlScrollable scrollable2) { + super(parent, x, y, w, h); + this.scrollable = scrollable2; + this.addAttribute(Attribute.MouseOver); + this.addSelfEventHandler(new EventMouse.Drag.Handler() { + @Override + public void onEvent(final EventMouse.Drag event) { + ControlScrollBar.this.scrollable.movePercentage(event.getDy() / (ControlScrollBar.this.h() - ControlScrollBar.this.getBarHeight())); + } + }); + this.addSelfEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + final float shownPercentage = ControlScrollBar.this.scrollable.getPercentageShown(); + final float percentageIndex = ControlScrollBar.this.scrollable.getPercentageIndex(); + final float minPercent = (1.0f - shownPercentage) * percentageIndex; + final float maxPercent = minPercent + shownPercentage; + float clickedPercentage = ControlScrollBar.this.getRelativeMousePosition().y() / (ControlScrollBar.this.h() - 2.0f); + clickedPercentage = Math.max(Math.min(clickedPercentage, 1.0f), 0.0f); + if (clickedPercentage > maxPercent) { + ControlScrollBar.this.scrollable.setPercentageIndex((clickedPercentage - shownPercentage) / (1.0f - shownPercentage)); + } + if (clickedPercentage < minPercent) { + ControlScrollBar.this.scrollable.setPercentageIndex(clickedPercentage / (1.0f - shownPercentage)); + } + } + }); + } + + @Override + public void onUpdateClient() { + } + + @Override + public boolean isEnabled() { + return this.scrollable.getPercentageShown() < 0.99f; + } + + public float getBarHeight() { + return this.h() * this.scrollable.getPercentageShown(); + } + + protected IArea getRenderArea() { + float height = this.getBarHeight(); + if (height < 6.0f) { + height = 6.0f; + } + final float yOffset = ((int) this.h() - (int) this.getBarHeight()) * this.scrollable.getPercentageIndex(); + return new IArea(0.0f, yOffset, this.getSize().x(), height); + } + + @Override + public void onRenderBackground() { + final IArea renderArea = this.getRenderArea(); + Object texture = CraftGUITexture.ScrollDisabled; + if (this.isMouseOver()) { + texture = CraftGUITexture.ScrollHighlighted; + } + else if (this.isEnabled()) { + texture = CraftGUITexture.Scroll; + } + CraftGUI.Render.texture(texture, renderArea); + } +} diff --git a/src/main/java/binnie/craftgui/controls/scroll/ControlScrollableContent.java b/src/main/java/binnie/craftgui/controls/scroll/ControlScrollableContent.java new file mode 100644 index 00000000..3b7c49c4 --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/scroll/ControlScrollableContent.java @@ -0,0 +1,129 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls.scroll; + +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.events.EventWidget; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.events.EventMouse; +import binnie.craftgui.controls.core.Control; +import binnie.craftgui.core.IWidget; + +public class ControlScrollableContent extends Control implements IControlScrollable +{ + protected T controlChild; + protected float scrollBarSize; + float percentageIndex; + + public ControlScrollableContent(final IWidget parent, final float x, final float y, final float w, final float h, final float scrollBarSize) { + super(parent, x, y, w, h); + this.percentageIndex = 0.0f; + if (scrollBarSize != 0.0f) { + new ControlScroll(this, this.getSize().x() - scrollBarSize, 0.0f, scrollBarSize, this.getSize().y(), this); + } + this.addEventHandler(new EventMouse.Wheel.Handler() { + @Override + public void onEvent(final EventMouse.Wheel event) { + if (ControlScrollableContent.this.getRelativeMousePosition().x() > 0.0f && ControlScrollableContent.this.getRelativeMousePosition().y() > 0.0f && ControlScrollableContent.this.getRelativeMousePosition().x() < ControlScrollableContent.this.getSize().x() && ControlScrollableContent.this.getRelativeMousePosition().y() < ControlScrollableContent.this.getSize().y()) { + if (ControlScrollableContent.this.getMovementRange() == 0.0f) { + return; + } + final float percentageMove = 0.8f / ControlScrollableContent.this.getMovementRange(); + ControlScrollableContent.this.movePercentage(percentageMove * -event.getDWheel()); + } + } + }); + this.scrollBarSize = scrollBarSize; + } + + public void setScrollableContent(final T child) { + this.controlChild = child; + if (child == null) { + return; + } + + child.setCroppedZone(this, new IArea(1.0F, 1.0F, getSize().x() - 2.0F - this.scrollBarSize, getSize().y() - 2.0F)); + + child.addSelfEventHandler(new EventWidget.ChangeSize.Handler() { + @Override + public void onEvent(final EventWidget.ChangeSize event) { + ControlScrollableContent.this.controlChild.setOffset(new IPoint(0.0f, -ControlScrollableContent.this.percentageIndex * ControlScrollableContent.this.getMovementRange())); + if (ControlScrollableContent.this.getMovementRange() == 0.0f) { + ControlScrollableContent.this.percentageIndex = 0.0f; + } + } + }); + } + + public T getContent() { + return this.controlChild; + } + + @Override + public float getPercentageShown() { + if (this.controlChild == null || this.controlChild.getSize().y() == 0.0f) { + return 1.0f; + } + final float shown = this.getSize().y() / this.controlChild.getSize().y(); + return Math.min(shown, 1.0f); + } + + @Override + public float getPercentageIndex() { + return this.percentageIndex; + } + + @Override + public void movePercentage(final float percentage) { + if (this.controlChild == null) { + return; + } + this.percentageIndex += percentage; + if (this.percentageIndex > 1.0f) { + this.percentageIndex = 1.0f; + } + else if (this.percentageIndex < 0.0f) { + this.percentageIndex = 0.0f; + } + if (this.getMovementRange() == 0.0f) { + this.percentageIndex = 0.0f; + } + this.controlChild.setOffset(new IPoint(0.0f, -this.percentageIndex * this.getMovementRange())); + } + + @Override + public void setPercentageIndex(final float index) { + this.movePercentage(index - this.percentageIndex); + } + + @Override + public float getMovementRange() { + if (this.controlChild == null) { + return 0.0f; + } + final float range = this.controlChild.getSize().y() - this.getSize().y(); + return Math.max(range, 0.0f); + } + + @Override + public void onUpdateClient() { + this.setPercentageIndex(this.getPercentageIndex()); + } + + public void ensureVisible(float minY, float maxY, final float totalY) { + minY /= totalY; + maxY /= totalY; + final float shownPercentage = this.getPercentageShown(); + final float percentageIndex = this.getPercentageIndex(); + final float minPercent = (1.0f - shownPercentage) * percentageIndex; + final float maxPercent = minPercent + shownPercentage; + if (maxY > maxPercent) { + this.setPercentageIndex((maxY - shownPercentage) / (1.0f - shownPercentage)); + } + if (minY < minPercent) { + this.setPercentageIndex(minY / (1.0f - shownPercentage)); + } + } +} diff --git a/src/main/java/binnie/craftgui/controls/scroll/IControlScrollable.java b/src/main/java/binnie/craftgui/controls/scroll/IControlScrollable.java new file mode 100644 index 00000000..db543e7d --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/scroll/IControlScrollable.java @@ -0,0 +1,20 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls.scroll; + +import binnie.craftgui.core.IWidget; + +public interface IControlScrollable extends IWidget +{ + float getPercentageShown(); + + float getPercentageIndex(); + + void movePercentage(final float p0); + + void setPercentageIndex(final float p0); + + float getMovementRange(); +} diff --git a/src/main/java/binnie/craftgui/controls/tab/ControlTab.java b/src/main/java/binnie/craftgui/controls/tab/ControlTab.java new file mode 100644 index 00000000..8afac843 --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/tab/ControlTab.java @@ -0,0 +1,114 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls.tab; + +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.resource.Texture; +import binnie.craftgui.minecraft.control.ControlItemDisplay; +import binnie.craftgui.minecraft.control.ControlTabIcon; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.events.EventValueChanged; +import binnie.craftgui.events.EventMouse; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.controls.core.IControlValue; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +public class ControlTab extends Control implements ITooltip, IControlValue +{ + private ControlTabBar tabBar; + protected T value; + + public ControlTab(final ControlTabBar parent, final float x, final float y, final float w, final float h, final T value) { + super(parent, x, y, w, h); + this.setValue(value); + this.tabBar = parent; + this.addAttribute(Attribute.MouseOver); + this.addSelfEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + ControlTab.this.callEvent(new EventValueChanged(ControlTab.this.getWidget(), ControlTab.this.getValue())); + } + }); + } + + @Override + public void getTooltip(final Tooltip tooltip) { + final String name = this.getName(); + if (name != null && !name.isEmpty()) { + tooltip.add(this.getName()); + } + if (this.value instanceof ITooltip) { + ((ITooltip) this.value).getTooltip(tooltip); + } + } + + @Override + public T getValue() { + return this.value; + } + + @Override + public void setValue(final T value) { + this.value = value; + } + + public boolean isCurrentSelection() { + return this.getValue() != null && this.getValue().equals(this.tabBar.getValue()); + } + + public Position getTabPosition() { + return this.tabBar.position; + } + + public String getName() { + return this.value.toString(); + } + + @Override + public void onRenderBackground() { + Object texture = CraftGUITexture.TabDisabled; + if (this.isMouseOver()) { + texture = CraftGUITexture.TabHighlighted; + } + else if (this.isCurrentSelection()) { + texture = CraftGUITexture.Tab; + } + final Texture lTexture = CraftGUI.Render.getTexture(texture); + final Position position = this.getTabPosition(); + Texture iTexture = lTexture.crop(position, 8.0f); + final IArea area = this.getArea(); + if (texture == CraftGUITexture.TabDisabled) { + if (position == Position.Top || position == Position.Left) { + area.setPosition(area.getPosition().sub(new IPoint(4 * position.x(), 4 * position.y()))); + area.setSize(area.getSize().add(new IPoint(4 * position.x(), 4 * position.y()))); + } + else { + area.setSize(area.getSize().sub(new IPoint(4 * position.x(), 4 * position.y()))); + } + } + CraftGUI.Render.texture(iTexture, area); + if (this instanceof ControlTabIcon) { + final ControlTabIcon icon = (ControlTabIcon) this; + final ControlItemDisplay item = (ControlItemDisplay) this.getWidgets().get(0); + if (texture == CraftGUITexture.TabDisabled) { + item.setColour(-1431655766); + } + else { + item.setColour(-1); + } + if (icon.hasOutline()) { + iTexture = CraftGUI.Render.getTexture(CraftGUITexture.TabOutline); + iTexture = iTexture.crop(position, 8.0f); + CraftGUI.Render.colour(icon.getOutlineColour()); + CraftGUI.Render.texture(iTexture, area.inset(2)); + } + } + } +} diff --git a/src/main/java/binnie/craftgui/controls/tab/ControlTabBar.java b/src/main/java/binnie/craftgui/controls/tab/ControlTabBar.java new file mode 100644 index 00000000..c7f15b8e --- /dev/null +++ b/src/main/java/binnie/craftgui/controls/tab/ControlTabBar.java @@ -0,0 +1,77 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.controls.tab; + +import java.util.Collection; +import binnie.craftgui.events.EventHandler; +import binnie.craftgui.events.EventValueChanged; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.controls.core.IControlValue; +import binnie.craftgui.controls.core.Control; + +public class ControlTabBar extends Control implements IControlValue +{ + T value; + Position position; + + public ControlTabBar(final IWidget parent, final float x, final float y, final float width, final float height, final Position position) { + super(parent, x, y, width, height); + this.position = position; + this.addEventHandler(new EventValueChanged.Handler() { + @Override + public void onEvent(final EventValueChanged event) { + ControlTabBar.this.setValue((T) event.getValue()); + } + }.setOrigin(EventHandler.Origin.DirectChild, this)); + } + + public void setValues(final Collection values) { + final int i = 0; + while (i < this.getWidgets().size()) { + this.deleteChild(this.getWidgets().get(0)); + } + final float length = values.size(); + int tabDimension = (int) (this.getSize().y() / length); + if (this.position == Position.Top || this.position == Position.Bottom) { + tabDimension = (int) (this.getSize().x() / length); + } + int j = 0; + for (final T value : values) { + if (this.position == Position.Top || this.position == Position.Bottom) { + final IWidget tab = this.createTab(j * tabDimension, 0.0f, tabDimension, this.getSize().y(), value); + } + else { + final IWidget tab = this.createTab(0.0f, j * tabDimension, this.getSize().x(), tabDimension, value); + } + ++j; + } + if (this.value == null && !values.isEmpty()) { + this.setValue(values.iterator().next()); + } + } + + public ControlTab createTab(final float x, final float y, final float w, final float h, final T value) { + return new ControlTab(this, x, y, w, h, value); + } + + @Override + public T getValue() { + return this.value; + } + + @Override + public void setValue(final T value) { + final boolean change = this.value != value; + this.value = value; + if (change) { + this.callEvent(new EventValueChanged(this, value)); + } + } + + public Position getDirection() { + return this.position; + } +} diff --git a/src/main/java/binnie/craftgui/core/Attribute.java b/src/main/java/binnie/craftgui/core/Attribute.java new file mode 100644 index 00000000..90f48e37 --- /dev/null +++ b/src/main/java/binnie/craftgui/core/Attribute.java @@ -0,0 +1,14 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.core; + +public enum Attribute implements IWidgetAttribute +{ + MouseOver, + CanFocus, + NeedsDeletion, + AlwaysOnTop, + BlockTooltip; +} diff --git a/src/main/java/binnie/craftgui/core/CraftGUI.java b/src/main/java/binnie/craftgui/core/CraftGUI.java new file mode 100644 index 00000000..c0f86cc3 --- /dev/null +++ b/src/main/java/binnie/craftgui/core/CraftGUI.java @@ -0,0 +1,14 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.core; + +import binnie.craftgui.core.renderer.Renderer; +import binnie.craftgui.resource.minecraft.CraftGUIResourceManager; + +public class CraftGUI +{ + public static CraftGUIResourceManager ResourceManager; + public static Renderer Render; +} diff --git a/src/main/java/binnie/craftgui/core/ITooltip.java b/src/main/java/binnie/craftgui/core/ITooltip.java new file mode 100644 index 00000000..e34efe7a --- /dev/null +++ b/src/main/java/binnie/craftgui/core/ITooltip.java @@ -0,0 +1,10 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.core; + +public interface ITooltip +{ + void getTooltip(final Tooltip p0); +} diff --git a/src/main/java/binnie/craftgui/core/ITooltipHelp.java b/src/main/java/binnie/craftgui/core/ITooltipHelp.java new file mode 100644 index 00000000..5cc24b63 --- /dev/null +++ b/src/main/java/binnie/craftgui/core/ITooltipHelp.java @@ -0,0 +1,10 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.core; + +public interface ITooltipHelp +{ + void getHelpTooltip(final Tooltip p0); +} diff --git a/src/main/java/binnie/craftgui/core/ITopLevelWidget.java b/src/main/java/binnie/craftgui/core/ITopLevelWidget.java new file mode 100644 index 00000000..cc7f3266 --- /dev/null +++ b/src/main/java/binnie/craftgui/core/ITopLevelWidget.java @@ -0,0 +1,32 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.core; + +import binnie.craftgui.core.geometry.IPoint; + +public interface ITopLevelWidget extends IWidget +{ + void setMousePosition(final int p0, final int p1); + + IPoint getAbsoluteMousePosition(); + + IWidget getFocusedWidget(); + + IWidget getMousedOverWidget(); + + IWidget getDraggedWidget(); + + boolean isFocused(final IWidget p0); + + boolean isMouseOver(final IWidget p0); + + boolean isDragged(final IWidget p0); + + void updateTopLevel(); + + void widgetDeleted(final IWidget p0); + + IPoint getDragDistance(); +} diff --git a/src/main/java/binnie/craftgui/core/IWidget.java b/src/main/java/binnie/craftgui/core/IWidget.java new file mode 100644 index 00000000..943ef8ec --- /dev/null +++ b/src/main/java/binnie/craftgui/core/IWidget.java @@ -0,0 +1,142 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.core; + +import binnie.craftgui.events.EventHandler; +import binnie.craftgui.events.Event; +import java.util.List; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.geometry.IPoint; + +public interface IWidget +{ + IWidget getParent(); + + void deleteChild(final IWidget p0); + + void deleteAllChildren(); + + ITopLevelWidget getSuperParent(); + + boolean isTopLevel(); + + IPoint getPosition(); + + IPoint pos(); + + void setPosition(final IPoint p0); + + IPoint getSize(); + + IPoint size(); + + void setSize(final IPoint p0); + + IPoint getOriginalPosition(); + + IPoint getAbsolutePosition(); + + IPoint getOriginalAbsolutePosition(); + + IPoint getOffset(); + + IArea getArea(); + + IArea area(); + + void setOffset(final IPoint p0); + + IPoint getMousePosition(); + + IPoint getRelativeMousePosition(); + + void setColour(final int p0); + + int getColour(); + + void render(); + + void updateClient(); + + void enable(); + + void disable(); + + void show(); + + void hide(); + + boolean calculateIsMouseOver(); + + boolean isEnabled(); + + boolean isVisible(); + + boolean isFocused(); + + boolean isMouseOver(); + + boolean isDragged(); + + boolean isChildVisible(final IWidget p0); + + boolean isChildEnabled(final IWidget p0); + + boolean canMouseOver(); + + boolean canFocus(); + + IWidget addWidget(final IWidget p0); + + List getWidgets(); + + void callEvent(final Event p0); + + void recieveEvent(final Event p0); + + void onUpdateClient(); + + void delete(); + + void onDelete(); + + T getWidget(final Class p0); + + IArea getCroppedZone(); + + void setCroppedZone(final IWidget p0, final IArea p1); + + boolean isCroppedWidet(); + + IWidget getCropWidget(); + + boolean isMouseOverWidget(final IPoint p0); + + int getLevel(); + + boolean isDescendant(final IWidget p0); + + List getAttributes(); + + boolean hasAttribute(final IWidgetAttribute p0); + + boolean addAttribute(final IWidgetAttribute p0); + + void addEventHandler(final EventHandler p0); + + void addSelfEventHandler(final EventHandler p0); + + boolean contains(final IPoint p0); + + float x(); + + float y(); + + float w(); + + float h(); + + void onRender(final RenderStage p0); +} diff --git a/src/main/java/binnie/craftgui/core/IWidgetAttribute.java b/src/main/java/binnie/craftgui/core/IWidgetAttribute.java new file mode 100644 index 00000000..e2f04660 --- /dev/null +++ b/src/main/java/binnie/craftgui/core/IWidgetAttribute.java @@ -0,0 +1,9 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.core; + +public interface IWidgetAttribute +{ +} diff --git a/src/main/java/binnie/craftgui/core/RenderStage.java b/src/main/java/binnie/craftgui/core/RenderStage.java new file mode 100644 index 00000000..d5dd7c60 --- /dev/null +++ b/src/main/java/binnie/craftgui/core/RenderStage.java @@ -0,0 +1,12 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.core; + +public enum RenderStage +{ + PreChildren, + PostChildren, + PostSiblings; +} diff --git a/src/main/java/binnie/craftgui/core/Tooltip.java b/src/main/java/binnie/craftgui/core/Tooltip.java new file mode 100644 index 00000000..736b2523 --- /dev/null +++ b/src/main/java/binnie/craftgui/core/Tooltip.java @@ -0,0 +1,86 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.core; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.item.ItemStack; +import java.util.ArrayList; +import java.util.List; + +public class Tooltip +{ + List tooltip; + ITooltipType type; + public int maxWidth; + + public Tooltip() { + this.tooltip = new ArrayList(); + this.type = Type.Standard; + this.maxWidth = 256; + } + + public void add(final String string) { + this.tooltip.add(string); + } + + public String getLine(final int index) { + final String string = this.getList().get(index); + return string; + } + + public void add(final List list) { + for (final Object obj : list) { + this.tooltip.add((String) obj); + } + } + + public List getList() { + return this.tooltip; + } + + public boolean exists() { + return this.tooltip.size() > 0; + } + + public void setType(final ITooltipType type) { + this.type = type; + } + + public void setMaxWidth(final int w) { + this.maxWidth = w; + } + + public ITooltipType getType() { + return this.type; + } + + public void add(final ItemStack item, final String string) { + final NBTTagCompound nbt = new NBTTagCompound(); + item.writeToNBT(nbt); + nbt.setByte("nbt-type", (byte) 105); + this.add("~~~" + nbt.toString() + "~~~" + string); + } + + public void add(final FluidStack item, final String string) { + final NBTTagCompound nbt = new NBTTagCompound(); + item.writeToNBT(nbt); + nbt.setByte("nbt-type", (byte) 102); + this.add("~~~" + nbt.toString() + "~~~" + string); + } + + public enum Type implements ITooltipType + { + Standard, + Help, + Information, + User, + Power; + } + + public interface ITooltipType + { + } +} diff --git a/src/main/java/binnie/craftgui/core/TopLevelWidget.java b/src/main/java/binnie/craftgui/core/TopLevelWidget.java new file mode 100644 index 00000000..9abf5590 --- /dev/null +++ b/src/main/java/binnie/craftgui/core/TopLevelWidget.java @@ -0,0 +1,228 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.core; + +import java.util.ListIterator; +import java.util.List; +import java.util.ArrayList; +import java.util.Collection; +import java.util.ArrayDeque; +import java.util.Deque; +import org.lwjgl.input.Mouse; +import binnie.craftgui.events.EventWidget; +import binnie.craftgui.events.EventMouse; +import binnie.craftgui.core.geometry.IPoint; + +public abstract class TopLevelWidget extends Widget implements ITopLevelWidget +{ + IWidget mousedOverWidget; + IWidget draggedWidget; + IWidget focusedWidget; + protected IPoint mousePosition; + IPoint dragStart; + + public TopLevelWidget() { + super(null); + this.mousedOverWidget = null; + this.draggedWidget = null; + this.focusedWidget = null; + this.mousePosition = new IPoint(0.0f, 0.0f); + this.dragStart = IPoint.ZERO; + this.addEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + TopLevelWidget.this.setDraggedWidget(TopLevelWidget.this.mousedOverWidget, event.getButton()); + TopLevelWidget.this.setFocusedWidget(TopLevelWidget.this.mousedOverWidget); + } + }); + this.addEventHandler(new EventMouse.Up.Handler() { + @Override + public void onEvent(final EventMouse.Up event) { + TopLevelWidget.this.setDraggedWidget(null); + } + }); + this.addEventHandler(new EventWidget.StartDrag.Handler() { + @Override + public void onEvent(final EventWidget.StartDrag event) { + TopLevelWidget.this.dragStart = TopLevelWidget.this.getRelativeMousePosition(); + } + }); + } + + public void setMousedOverWidget(final IWidget widget) { + if (this.mousedOverWidget == widget) { + return; + } + if (this.mousedOverWidget != null) { + this.callEvent(new EventWidget.EndMouseOver(this.mousedOverWidget)); + } + this.mousedOverWidget = widget; + if (this.mousedOverWidget != null) { + this.callEvent(new EventWidget.StartMouseOver(this.mousedOverWidget)); + } + } + + public void setDraggedWidget(final IWidget widget) { + this.setDraggedWidget(widget, -1); + } + + public void setDraggedWidget(final IWidget widget, final int button) { + if (this.draggedWidget == widget) { + return; + } + if (this.draggedWidget != null) { + this.callEvent(new EventWidget.EndDrag(this.draggedWidget)); + } + this.draggedWidget = widget; + if (this.draggedWidget != null) { + this.callEvent(new EventWidget.StartDrag(this.draggedWidget, button)); + } + } + + public void setFocusedWidget(final IWidget widget) { + IWidget newWidget = widget; + if (this.focusedWidget == newWidget) { + return; + } + if (newWidget != null && !newWidget.canFocus()) { + newWidget = null; + } + if (this.focusedWidget != null) { + this.callEvent(new EventWidget.LoseFocus(this.focusedWidget)); + } + this.focusedWidget = newWidget; + if (this.focusedWidget != null) { + this.callEvent(new EventWidget.GainFocus(this.focusedWidget)); + } + } + + @Override + public IWidget getMousedOverWidget() { + return this.mousedOverWidget; + } + + @Override + public IWidget getDraggedWidget() { + return this.draggedWidget; + } + + @Override + public IWidget getFocusedWidget() { + return this.focusedWidget; + } + + @Override + public boolean isMouseOver(final IWidget widget) { + return this.getMousedOverWidget() == widget; + } + + @Override + public boolean isDragged(final IWidget widget) { + return this.getDraggedWidget() == widget; + } + + @Override + public boolean isFocused(final IWidget widget) { + return this.getFocusedWidget() == widget; + } + + @Override + public void updateTopLevel() { + this.setMousedOverWidget(this.calculateMousedOverWidget()); + if (this.getFocusedWidget() != null && (!this.getFocusedWidget().isVisible() || !this.getFocusedWidget().isEnabled())) { + this.setFocusedWidget(null); + } + if (!Mouse.isButtonDown(0)) { + if (this.draggedWidget != null) { + this.setDraggedWidget(null); + } + } + } + + private IWidget calculateMousedOverWidget() { + final Deque queue = this.calculateMousedOverWidgets(); + while (!queue.isEmpty()) { + final IWidget widget = queue.removeFirst(); + if (widget.isEnabled() && widget.isVisible()) { + if (!widget.canMouseOver()) { + continue; + } + if (widget.isEnabled() && widget.isVisible() && widget.canMouseOver() && widget.calculateIsMouseOver()) { + return widget; + } + continue; + } + } + return null; + } + + public Deque calculateMousedOverWidgets() { + final Deque list = new ArrayDeque(); + for (final IWidget widget : this.getQueuedWidgets(this)) { + if (widget.calculateIsMouseOver()) { + list.addLast(widget); + } + } + return list; + } + + private Collection getQueuedWidgets(final IWidget widget) { + final List widgets = new ArrayList(); + boolean addChildren = true; + if (widget.isCroppedWidet()) { + addChildren = widget.getCroppedZone().contains(widget.getCropWidget().getRelativeMousePosition()); + } + if (addChildren) { + final ListIterator li = widget.getWidgets().listIterator(widget.getWidgets().size()); + while (li.hasPrevious()) { + final IWidget child = li.previous(); + widgets.addAll(this.getQueuedWidgets(child)); + } + } + widgets.add(widget); + return widgets; + } + + @Override + public void setMousePosition(final int x, final int y) { + final float dx = x - this.mousePosition.x(); + final float dy = y - this.mousePosition.y(); + if (dx != 0.0f || dy != 0.0f) { + if (this.getDraggedWidget() != null) { + this.callEvent(new EventMouse.Drag(this.getDraggedWidget(), dx, dy)); + } + else { + this.callEvent(new EventMouse.Move(this, dx, dy)); + } + } + if (this.mousePosition.x() != x || this.mousePosition.y() != y) { + this.mousePosition = new IPoint(x, y); + this.setMousedOverWidget(this.calculateMousedOverWidget()); + } + } + + @Override + public IPoint getAbsoluteMousePosition() { + return this.mousePosition; + } + + @Override + public void widgetDeleted(final IWidget widget) { + if (this.isMouseOver(widget)) { + this.setMousedOverWidget(null); + } + if (this.isDragged(widget)) { + this.setDraggedWidget(null); + } + if (this.isFocused(widget)) { + this.setFocusedWidget(null); + } + } + + @Override + public IPoint getDragDistance() { + return this.getRelativeMousePosition().sub(this.dragStart); + } +} diff --git a/src/main/java/binnie/craftgui/core/Widget.java b/src/main/java/binnie/craftgui/core/Widget.java new file mode 100644 index 00000000..0d3dc8ee --- /dev/null +++ b/src/main/java/binnie/craftgui/core/Widget.java @@ -0,0 +1,517 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.core; + +import java.util.ConcurrentModificationException; + +import binnie.craftgui.events.Event; +import binnie.craftgui.events.EventWidget; + +import java.util.ArrayList; + +import binnie.craftgui.events.EventHandler; + +import java.util.Collection; + +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.geometry.IPoint; + +import java.util.List; + +public class Widget implements IWidget +{ + private IWidget parent; + private List subWidgets; + private List attributes; + private IPoint position; + private IPoint size; + private IPoint offset; + IArea cropArea; + IWidget cropWidget; + boolean cropped; + int colour; + private Collection globalEventHandlers; + private boolean enabled; + private boolean visible; + + public Widget(final IWidget parent) { + this.parent = null; + this.subWidgets = new ArrayList(); + this.attributes = new ArrayList(); + this.position = new IPoint(0.0f, 0.0f); + this.size = new IPoint(0.0f, 0.0f); + this.offset = new IPoint(0.0f, 0.0f); + this.cropped = false; + this.colour = 16777215; + this.globalEventHandlers = new ArrayList(); + this.enabled = true; + this.visible = true; + this.parent = parent; + if (parent != null) { + parent.addWidget(this); + } + } + + @Override + public List getAttributes() { + return this.attributes; + } + + @Override + public boolean hasAttribute(final IWidgetAttribute attribute) { + return this.attributes.contains(attribute); + } + + @Override + public boolean addAttribute(final IWidgetAttribute attribute) { + return this.attributes.add(attribute); + } + + @Override + public final void deleteChild(final IWidget child) { + if (child == null) { + return; + } + child.delete(); + this.subWidgets.remove(child); + } + + @Override + public final void deleteAllChildren() { + while (!this.subWidgets.isEmpty()) { + this.deleteChild(this.subWidgets.get(0)); + } + } + + @Override + public final IWidget getParent() { + return this.parent; + } + + @Override + public final ITopLevelWidget getSuperParent() { + return (ITopLevelWidget) (this.isTopLevel() ? this : this.parent.getSuperParent()); + } + + @Override + public final IWidget addWidget(final IWidget widget) { + if (this.subWidgets.size() != 0 && this.subWidgets.get(this.subWidgets.size() - 1).hasAttribute(Attribute.AlwaysOnTop)) { + this.subWidgets.add(this.subWidgets.size() - 1, widget); + } + else { + this.subWidgets.add(widget); + } + this.onAddChild(widget); + return widget; + } + + protected void onAddChild(final IWidget widget) { + } + + @Override + public final List getWidgets() { + return this.subWidgets; + } + + @Override + public final boolean isTopLevel() { + return this instanceof ITopLevelWidget; + } + + @Override + public final IPoint pos() { + return this.position.add(this.offset); + } + + @Override + public final IPoint size() { + return this.size; + } + + @Override + public final IArea area() { + return this.getArea(); + } + + @Override + public final IPoint getPosition() { + return this.pos(); + } + + @Override + public final IArea getArea() { + return new IArea(IPoint.ZERO, this.size()); + } + + @Override + public final IPoint getOriginalPosition() { + return this.position; + } + + @Override + public IArea getCroppedZone() { + return this.cropArea; + } + + @Override + public void setCroppedZone(final IWidget relative, final IArea area) { + this.cropArea = area; + this.cropped = true; + this.cropWidget = relative; + } + + @Override + public final IPoint getAbsolutePosition() { + return this.isTopLevel() ? this.getPosition() : this.getParent().getAbsolutePosition().add(this.getPosition()); + } + + @Override + public final IPoint getOriginalAbsolutePosition() { + return this.isTopLevel() ? this.getOriginalPosition() : this.getParent().getOriginalPosition().sub(this.getOriginalPosition()); + } + + @Override + public final IPoint getSize() { + return this.size(); + } + + @Override + public final IPoint getOffset() { + return this.offset; + } + + @Override + public final void setPosition(final IPoint vector) { + if (!vector.equals(this.position)) { + this.position = new IPoint(vector); + this.callEvent(new EventWidget.ChangePosition(this)); + } + } + + @Override + public final void setSize(final IPoint vector) { + if (!vector.equals(this.size)) { + this.size = new IPoint(vector); + this.callEvent(new EventWidget.ChangeSize(this)); + } + } + + @Override + public final void setOffset(final IPoint vector) { + if (vector != this.offset) { + this.offset = new IPoint(vector); + this.callEvent(new EventWidget.ChangeOffset(this)); + } + } + + @Override + public final void setColour(final int colour) { + if (this.colour != colour) { + this.colour = colour; + this.callEvent(new EventWidget.ChangeColour(this)); + } + } + + @Override + public final int getColour() { + return this.colour; + } + + @Override + public boolean canMouseOver() { + return this.hasAttribute(Attribute.MouseOver); + } + + @Override + public boolean canFocus() { + return this.hasAttribute(Attribute.CanFocus); + } + + @Override + public void addEventHandler(final EventHandler handler) { + this.globalEventHandlers.add(handler); + } + + @Override + public void addSelfEventHandler(final EventHandler handler) { + this.addEventHandler(handler.setOrigin(EventHandler.Origin.Self, this)); + } + + @Override + public final void callEvent(final Event event) { + this.getSuperParent().recieveEvent(event); + } + + @Override + public final void recieveEvent(final Event event) { + for (final EventHandler handler : this.globalEventHandlers) { + if (handler.handles(event)) { + handler.onEvent(event); + } + } + try { + for (final IWidget child : this.getWidgets()) { + child.recieveEvent(event); + } + } catch (ConcurrentModificationException e) { + } + } + + @Override + public final IPoint getMousePosition() { + return this.getSuperParent().getAbsoluteMousePosition(); + } + + @Override + public final IPoint getRelativeMousePosition() { + return this.isTopLevel() ? this.getMousePosition() : this.getParent().getRelativeMousePosition().sub(this.getPosition()); + } + + @Override + public boolean isCroppedWidet() { + return this.cropped; + } + + @Override + public final IWidget getCropWidget() { + return (this.cropWidget == null) ? this : this.cropWidget; + } + + @Override + public final void render() { + if (this.isVisible()) { + CraftGUI.Render.preRender(this); + this.onRender(RenderStage.PreChildren); + for (final IWidget widget : this.getWidgets()) { + widget.render(); + } + for (final IWidget widget : this.getWidgets()) { + CraftGUI.Render.preRender(widget); + widget.onRender(RenderStage.PostSiblings); + CraftGUI.Render.postRender(widget); + } + this.onRender(RenderStage.PostChildren); + CraftGUI.Render.postRender(this); + } + } + + @Override + public final void updateClient() { + if (!this.isVisible()) { + return; + } + if (this.getSuperParent() == this) { + ((ITopLevelWidget) this).updateTopLevel(); + } + this.onUpdateClient(); + final List deletedWidgets = new ArrayList(); + for (final IWidget widget : this.getWidgets()) { + if (widget.hasAttribute(Attribute.NeedsDeletion)) { + deletedWidgets.add(widget); + } + else { + widget.updateClient(); + } + } + for (final IWidget widget : deletedWidgets) { + this.deleteChild(widget); + } + } + + @Override + public final boolean calculateIsMouseOver() { + final IPoint mouse = this.getRelativeMousePosition(); + if (!this.cropped) { + return this.isMouseOverWidget(mouse); + } + final IWidget cropRelative = (this.cropWidget != null) ? this.cropWidget : this; + final IPoint pos = IPoint.sub(cropRelative.getAbsolutePosition(), this.getAbsolutePosition()); + final IPoint size = new IPoint(this.cropArea.size().x(), this.cropArea.size().y()); + final boolean inCrop = mouse.x() > pos.x() && mouse.y() > pos.y() && mouse.x() < pos.x() + size.x() && mouse.y() < pos.y() + size.y(); + return inCrop && this.isMouseOverWidget(mouse); + } + + @Override + public boolean isMouseOverWidget(final IPoint relativeMouse) { + return this.getArea().contains(relativeMouse); + } + + @Override + public final void enable() { + this.enabled = true; + this.callEvent(new EventWidget.Enable(this)); + } + + @Override + public final void disable() { + this.enabled = false; + this.callEvent(new EventWidget.Disable(this)); + } + + @Override + public final void show() { + this.visible = true; + this.callEvent(new EventWidget.Show(this)); + } + + @Override + public final void hide() { + this.visible = false; + this.callEvent(new EventWidget.Hide(this)); + } + + @Override + public boolean isEnabled() { + if (this.enabled) { + if (!this.isTopLevel()) { + if (!this.getParent().isEnabled() || !this.getParent().isChildEnabled(this)) { + return false; + } + } + return true; + } + return false; + } + + @Override + public final boolean isVisible() { + if (this.visible) { + if (!this.isTopLevel()) { + if (!this.getParent().isVisible() || !this.getParent().isChildVisible(this)) { + return false; + } + } + return true; + } + return false; + } + + @Override + public final boolean isFocused() { + return this.getSuperParent().isFocused(this); + } + + @Override + public final boolean isDragged() { + return this.getSuperParent().isDragged(this); + } + + @Override + public final boolean isMouseOver() { + return this.getSuperParent().isMouseOver(this); + } + + @Override + public boolean isChildVisible(final IWidget child) { + return true; + } + + @Override + public boolean isChildEnabled(final IWidget child) { + return true; + } + + @Override + public void onRender(final RenderStage stage) { + if (stage == RenderStage.PreChildren) { + this.onRenderBackground(); + } + if (stage == RenderStage.PostChildren) { + this.onRenderForeground(); + } + if (stage == RenderStage.PostSiblings) { + this.onRenderOverlay(); + } + } + + public void onRenderBackground() { + } + + public void onRenderForeground() { + } + + public void onRenderOverlay() { + } + + @Override + public void onUpdateClient() { + } + + @Override + public final void delete() { + this.getSuperParent().widgetDeleted(this); + this.onDelete(); + } + + @Override + public void onDelete() { + } + + @Override + public T getWidget(final Class x) { + for (final IWidget child : this.getWidgets()) { + if (x.isInstance(child)) { + return (T) child; + } + final T found = child.getWidget(x); + if (found != null) { + return found; + } + } + return null; + } + + @Override + public final boolean contains(final IPoint position) { + return this.getArea().contains(position); + } + + public void scheduleDeletion() { + this.addAttribute(Attribute.NeedsDeletion); + } + + @Override + public int getLevel() { + final int level = (this.getParent() == null) ? 0 : this.getParent().getLevel(); + final int index = (this.getParent() == null) ? 0 : this.getParent().getWidgets().indexOf(this); + return level + index; + } + + @Override + public boolean isDescendant(final IWidget widget) { + IWidget clss = this; + while (clss != widget) { + clss = clss.getParent(); + if (clss == null) { + return false; + } + } + return true; + } + + @Override + public float x() { + return this.pos().x(); + } + + @Override + public float y() { + return this.pos().y(); + } + + @Override + public float w() { + return this.size().x(); + } + + @Override + public float h() { + return this.size().y(); + } + + public IWidget getWidget() { + return this; + } +} diff --git a/src/main/java/binnie/craftgui/core/geometry/CraftGUIUtil.java b/src/main/java/binnie/craftgui/core/geometry/CraftGUIUtil.java new file mode 100644 index 00000000..61642551 --- /dev/null +++ b/src/main/java/binnie/craftgui/core/geometry/CraftGUIUtil.java @@ -0,0 +1,69 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.core.geometry; + +import binnie.craftgui.events.EventValueChanged; +import binnie.craftgui.controls.core.IControlValue; +import binnie.craftgui.core.IWidget; + +public class CraftGUIUtil +{ + public static void alignToWidget(final IWidget target, final IWidget relativeTo) { + final IPoint startPos = target.getAbsolutePosition(); + final IPoint endPos = relativeTo.getAbsolutePosition(); + moveWidget(target, endPos.sub(startPos)); + } + + public static void moveWidget(final IWidget target, final IPoint movement) { + target.setPosition(target.getPosition().add(movement)); + } + + public static void horizontalGrid(final float px, final float py, final IWidget... widgets) { + horizontalGrid(px, py, TextJustification.MiddleCenter, 0.0f, widgets); + } + + public static void horizontalGrid(final float px, final float py, final TextJustification just, final float spacing, final IWidget... widgets) { + float x = 0.0f; + float h = 0.0f; + for (final IWidget widget : widgets) { + h = Math.max(h, widget.getSize().y()); + } + for (final IWidget widget : widgets) { + widget.setPosition(new IPoint(px + x, py + (h - widget.getSize().y()) * just.yOffset)); + x += widget.getSize().x() + spacing; + } + } + + public static void verticalGrid(final float px, final float py, final IWidget... widgets) { + horizontalGrid(px, py, TextJustification.MiddleCenter, 0.0f, widgets); + } + + public static void verticalGrid(final float px, final float py, final TextJustification just, final float spacing, final IWidget... widgets) { + float y = 0.0f; + float w = 0.0f; + for (final IWidget widget : widgets) { + w = Math.max(w, widget.getSize().x()); + } + for (final IWidget widget : widgets) { + widget.setPosition(new IPoint(px + (w - widget.getSize().x()) * just.xOffset, py + y)); + y += widget.getSize().y() + spacing; + } + } + + public static void linkWidgets(final IControlValue tab, final IControlValue target) { + tab.addSelfEventHandler(new EventValueChanged.Handler() { + @Override + public void onEvent(final EventValueChanged event) { + target.setValue((T) event.getValue()); + } + }); + target.addSelfEventHandler(new EventValueChanged.Handler() { + @Override + public void onEvent(final EventValueChanged event) { + tab.setValue((T) event.getValue()); + } + }); + } +} diff --git a/src/main/java/binnie/craftgui/core/geometry/IArea.java b/src/main/java/binnie/craftgui/core/geometry/IArea.java new file mode 100644 index 00000000..bf47a22d --- /dev/null +++ b/src/main/java/binnie/craftgui/core/geometry/IArea.java @@ -0,0 +1,121 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.core.geometry; + +public class IArea +{ + private IPoint pos; + private IPoint size; + + public IArea(final IArea area) { + this(area.pos().x(), area.pos().y(), area.size().x(), area.size().y()); + } + + public IArea(final IPoint pos, final IPoint size) { + this(pos.x(), pos.y(), size.x(), size.y()); + } + + public IArea(final float xywh) { + this(xywh, xywh, xywh, xywh); + } + + public IArea(final float xy, final float wh) { + this(xy, xy, wh, wh); + } + + public IArea(final float x, final float y, final float wh) { + this(x, y, wh, wh); + } + + public IArea(final float x, final float y, final float w, final float h) { + this.setPosition(new IPoint(x, y)); + this.setSize(new IPoint(w, h)); + } + + public IPoint pos() { + return this.pos; + } + + public IPoint getPosition() { + return this.pos; + } + + public void setPosition(final IPoint position) { + this.pos = position.copy(); + } + + public IPoint size() { + return this.size; + } + + public IPoint getSize() { + return this.size; + } + + public void setSize(final IPoint size) { + this.size = size.copy(); + } + + public boolean contains(final IPoint position) { + return position.x() >= this.pos().x() && position.y() >= this.pos.y() && position.x() <= this.pos().x() + this.size().x() && position.y() <= this.pos().y() + this.size().y(); + } + + public float x() { + return this.pos().x(); + } + + public float y() { + return this.pos().y(); + } + + public float w() { + return this.size().x(); + } + + public float h() { + return this.size().y(); + } + + public float x(final float n) { + return this.pos.x(n); + } + + public float y(final float n) { + return this.pos.y(n); + } + + public float w(final float n) { + return this.size.x(n); + } + + public float h(final float n) { + return this.size.y(n); + } + + public IArea inset(final IBorder border) { + return new IArea(this.x() + border.l(), this.y() + border.t(), this.w() - border.l() - border.r(), this.h() - border.t() - border.b()); + } + + public IArea outset(final int outset) { + return this.outset(new IBorder(outset)); + } + + public IArea outset(final IBorder border) { + return new IArea(this.x() - border.l(), this.y() - border.t(), this.w() + border.l() + border.r(), this.h() + border.t() + border.b()); + } + + public IArea inset(final int inset) { + return this.inset(new IBorder(inset)); + } + + @Override + public String toString() { + return this.w() + "x" + this.h() + "@" + this.x() + "," + this.y(); + } + + public IArea shift(final float dx, final float f) { + return new IArea(this.x() + dx, this.y() + f, this.w(), this.h()); + } +} diff --git a/src/main/java/binnie/craftgui/core/geometry/IBorder.java b/src/main/java/binnie/craftgui/core/geometry/IBorder.java new file mode 100644 index 00000000..20265dda --- /dev/null +++ b/src/main/java/binnie/craftgui/core/geometry/IBorder.java @@ -0,0 +1,110 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.core.geometry; + +public class IBorder +{ + public static final IBorder ZERO; + float t; + float b; + float l; + float r; + + public IBorder(final float pad) { + this(pad, pad, pad, pad); + } + + public IBorder(final float tb, final float rl) { + this(tb, rl, tb, rl); + } + + public IBorder(final float t, final float rl, final float b) { + this(t, rl, b, rl); + } + + public IBorder(final float t, final float r, final float b, final float l) { + this.t = t; + this.b = b; + this.l = l; + this.r = r; + } + + public IBorder(final Position edge, final float n) { + this((edge == Position.Top) ? n : 0.0f, (edge == Position.Right) ? n : 0.0f, (edge == Position.Bottom) ? n : 0.0f, (edge == Position.Left) ? n : 0.0f); + } + + public IBorder(final IBorder padding) { + this(padding.t(), padding.r(), padding.b(), padding.l()); + } + + public float t() { + return this.t; + } + + public float b() { + return this.b; + } + + public float l() { + return this.l; + } + + public float r() { + return this.r; + } + + public float t(final float n) { + return this.t = n; + } + + public float b(final float n) { + return this.b = n; + } + + public float l(final float n) { + return this.l = n; + } + + public float r(final float n) { + return this.r = n; + } + + public boolean isNonZero() { + return this.t != 0.0f || this.r != 0.0f || this.l != 0.0f || this.r != 0.0f; + } + + @Deprecated + public IPoint tl() { + return new IPoint(this.l(), this.t()); + } + + @Deprecated + public IPoint tr() { + return new IPoint(this.r(), this.t()); + } + + @Deprecated + public IPoint bl() { + return new IPoint(this.l(), this.b()); + } + + @Deprecated + public IPoint br() { + return new IPoint(this.r(), this.b()); + } + + public IBorder add(final IBorder o) { + return new IBorder(this.t() + o.t(), this.r() + o.r(), this.b() + o.b(), this.l() + o.l()); + } + + @Override + public String toString() { + return this.t() + "-" + this.r() + "-" + this.b() + "-" + this.l(); + } + + static { + ZERO = new IBorder(0.0f); + } +} diff --git a/src/main/java/binnie/craftgui/core/geometry/IPoint.java b/src/main/java/binnie/craftgui/core/geometry/IPoint.java new file mode 100644 index 00000000..d7d1501d --- /dev/null +++ b/src/main/java/binnie/craftgui/core/geometry/IPoint.java @@ -0,0 +1,79 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.core.geometry; + +public class IPoint +{ + public static final IPoint ZERO; + float x; + float y; + + public IPoint(final float x, final float y) { + this.x = 0.0f; + this.y = 0.0f; + this.x = x; + this.y = y; + } + + public IPoint(final IPoint o) { + this.x = 0.0f; + this.y = 0.0f; + this.x = o.x(); + this.y = o.y(); + } + + public static IPoint add(final IPoint a, final IPoint b) { + return new IPoint(a.x() + b.x(), a.y() + b.y()); + } + + public static IPoint sub(final IPoint a, final IPoint b) { + return new IPoint(a.x() - b.x(), a.y() - b.y()); + } + + public IPoint sub(final IPoint a) { + return sub(this, a); + } + + public IPoint add(final IPoint other) { + return add(this, other); + } + + public IPoint add(final float dx, final float dy) { + return add(this, new IPoint(dx, dy)); + } + + public IPoint copy() { + return new IPoint(this); + } + + public float x() { + return this.x; + } + + public float y() { + return this.y; + } + + public void xy(final float x, final float y) { + this.x(x); + this.y(y); + } + + public float x(final float x) { + return this.x = x; + } + + public float y(final float y) { + return this.y = y; + } + + public boolean equals(final IPoint other) { + return this.x() == other.x() && this.y() == other.y(); + } + + static { + ZERO = new IPoint(0.0f, 0.0f); + } +} diff --git a/src/main/java/binnie/craftgui/core/geometry/Position.java b/src/main/java/binnie/craftgui/core/geometry/Position.java new file mode 100644 index 00000000..43d4ce9d --- /dev/null +++ b/src/main/java/binnie/craftgui/core/geometry/Position.java @@ -0,0 +1,49 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.core.geometry; + +public enum Position +{ + Top(0, -1), + Bottom(0, 1), + Left(-1, 0), + Right(1, 0); + + int x; + int y; + + private Position(final int x, final int y) { + this.x = x; + this.y = y; + } + + public int x() { + return this.x; + } + + public int y() { + return this.y; + } + + public Position opposite() { + switch (this) { + case Bottom: { + return Position.Top; + } + case Left: { + return Position.Right; + } + case Right: { + return Position.Left; + } + case Top: { + return Position.Bottom; + } + default: { + return null; + } + } + } +} diff --git a/src/main/java/binnie/craftgui/core/geometry/TextJustification.java b/src/main/java/binnie/craftgui/core/geometry/TextJustification.java new file mode 100644 index 00000000..04dce27c --- /dev/null +++ b/src/main/java/binnie/craftgui/core/geometry/TextJustification.java @@ -0,0 +1,34 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.core.geometry; + +public enum TextJustification +{ + TopLeft(0.0f, 0.0f), + TopCenter(0.5f, 0.0f), + TopRight(1.0f, 0.0f), + MiddleLeft(0.0f, 0.5f), + MiddleCenter(0.5f, 0.5f), + MiddleRight(1.0f, 0.5f), + BottomLeft(0.0f, 1.0f), + BottomCenter(0.5f, 1.0f), + BottomRight(1.0f, 1.0f); + + float xOffset; + float yOffset; + + private TextJustification(final float xOffset, final float yOffset) { + this.xOffset = xOffset; + this.yOffset = yOffset; + } + + public float getXOffset() { + return this.xOffset; + } + + public float getYOffset() { + return this.yOffset; + } +} diff --git a/src/main/java/binnie/craftgui/core/renderer/Renderer.java b/src/main/java/binnie/craftgui/core/renderer/Renderer.java new file mode 100644 index 00000000..81745699 --- /dev/null +++ b/src/main/java/binnie/craftgui/core/renderer/Renderer.java @@ -0,0 +1,228 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.core.renderer; + +import binnie.craftgui.core.geometry.Position; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.util.IIcon; +import net.minecraft.item.ItemStack; +import java.util.List; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.core.BinnieCore; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.geometry.IArea; +import org.lwjgl.opengl.GL11; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.resource.IStyleSheet; +import binnie.craftgui.resource.Texture; +import binnie.craftgui.minecraft.GuiCraftGUI; + +public class Renderer +{ + GuiCraftGUI gui; + int currentColour; + Texture currentTexture; + IStyleSheet stylesheet; + + public Renderer(final GuiCraftGUI gui) { + this.currentColour = 16777215; + this.gui = gui; + } + + public final void preRender(final IWidget widget) { + GL11.glPushMatrix(); + GL11.glTranslatef(widget.getPosition().x(), widget.getPosition().y(), 0.0f); + this.colour(widget.getColour()); + if (widget.isCroppedWidet()) { + final IWidget cropRelative = (widget.getCropWidget() != null) ? widget.getCropWidget() : widget; + final IPoint pos = cropRelative.getAbsolutePosition(); + final IArea cropZone = widget.getCroppedZone(); + GL11.glEnable(3089); + this.limitArea(new IArea(pos.add(cropZone.pos()), cropZone.size())); + + } + GL11.glDisable(2929); + } + + public final void postRender(final IWidget widget) { + if (widget.isCroppedWidet()) { + GL11.glDisable(3089); + } + GL11.glEnable(2929); + GL11.glPopMatrix(); + } + + public void colour(final int hex) { + this.currentColour = hex; + int a = (hex & 0xFF000000) >> 24; + final int r = (hex & 0xFF0000) >> 16; + final int g = (hex & 0xFF00) >> 8; + final int b = hex & 0xFF; + if (a < 0) { + a += 256; + } + if (a > 0 && a != 255) { + GL11.glColor4f(r / 255.0f, g / 255.0f, b / 255.0f, a / 255.0f); + GL11.glEnable(3042); + } + else { + GL11.glColor3f(r / 255.0f, g / 255.0f, b / 255.0f); + } + } + + public Texture getTexture(final Object key) { + if (key instanceof Texture) { + return (Texture) key; + } + return this.stylesheet.getTexture(key); + } + + public void setTexture(final Texture texture) { + if (texture != this.currentTexture && texture != null) { + BinnieCore.proxy.bindTexture(texture.getFilename()); + } + this.colour(this.currentColour); + } + + public void texture(final Object texture, final IPoint position) { + this.texture(this.getTexture(texture), position); + } + + public void texture(final Texture texture, final IPoint position) { + if (texture == null) { + return; + } + this.setTexture(texture); + final IPoint point = position.sub(new IPoint(texture.getBorder().l(), texture.getBorder().t())); + final IArea textureArea = texture.getArea().outset(texture.getBorder()); + this.gui.renderTexture(point, textureArea); + } + + public void texture(final Object window, final IArea area) { + this.texture(this.getTexture(window), area); + } + + public void texture(final Texture texture, final IArea area) { + if (texture == null) { + return; + } + this.setTexture(texture); + final IArea textureArea = texture.getArea().outset(texture.getBorder()); + final IArea targetArea = area.outset(texture.getBorder()); + if (textureArea.w() == targetArea.w() && textureArea.h() == targetArea.h()) { + this.gui.renderTexture(targetArea.pos(), textureArea); + } + else { + this.gui.renderTexturePadded(targetArea, textureArea, texture.getTotalPadding()); + } + } + + public void stylesheet(final IStyleSheet sheet) { + this.stylesheet = sheet; + } + + public int textWidth(final String text) { + return this.gui.getFontRenderer().getStringWidth(text); + } + + public int textHeight() { + return (this.gui.getFontRenderer() == null) ? 0 : this.gui.getFontRenderer().FONT_HEIGHT; + } + + public void text(final IPoint pos, final String text, final int colour) { + this.text(new IArea(pos, new IPoint(500.0f, 500.0f)), TextJustification.TopLeft, text, colour); + } + + public void text(final IArea area, final TextJustification justification, final String text, final int colour) { + final IPoint pos = area.pos(); + if (area.size().x() <= 0.0f) { + return; + } + final List wrappedStrings = this.gui.getFontRenderer().listFormattedStringToWidth(text, (int) area.size().x()); + final float totalHeight = wrappedStrings.size() * this.textHeight(); + float posY = area.pos().y(); + if (area.size().y() > totalHeight) { + posY += (area.size().y() - totalHeight) * justification.getYOffset(); + } + for (final String string : wrappedStrings) { + final float stringWidth = this.textWidth(string); + float posX = area.size().x() - stringWidth; + posX *= justification.getXOffset(); + GL11.glDisable(2929); + this.gui.getFontRenderer().drawString(string, (int) (pos.x() + posX), (int) posY, colour); + posY += this.textHeight(); + } + GL11.glColor3f(1.0f, 1.0f, 1.0f); + } + + public void solid(final IArea area, final int colour) { + this.gui.drawRect(area.pos().x(), area.pos().y(), area.pos().x() + area.size().x(), area.pos().y() + area.size().y(), 0xFF000000 | colour); + } + + public void solidAlpha(final IArea area, final int c1) { + this.gui.drawGradientArea(area.pos().x(), area.pos().y(), area.pos().x() + area.size().x(), area.pos().y() + area.size().y(), c1, c1); + } + + public void gradientRect(final IArea area, final int c1, final int c2) { + this.gui.drawGradientArea(area.pos().x(), area.pos().y(), area.pos().x() + area.size().x(), area.pos().y() + area.size().y(), c1, c2); + } + + public void item(final IPoint pos, final ItemStack item) { + this.gui.renderItem(pos, item, false); + } + + public void item(final IPoint pos, final ItemStack item, final boolean rotating) { + this.gui.renderItem(pos, item, rotating); + } + + public void iconBlock(final IPoint pos, final IIcon icon) { + this.gui.renderIcon(pos, icon, TextureMap.locationBlocksTexture); + } + + public void iconItem(final IPoint pos, final IIcon icon) { + this.gui.renderIcon(pos, icon, TextureMap.locationItemsTexture); + } + + public void limitArea(final IArea area) { + this.gui.limitArea(area); + } + + public float textHeight(final String text, final float width) { + return this.gui.getFontRenderer().listFormattedStringToWidth(text, (int) width).size() * this.textHeight(); + } + + public void texturePercentage(final Texture texture, final IArea area, final Position direction, final float percentage) { + final float dist = (direction == Position.Top || direction == Position.Bottom) ? (percentage * texture.h()) : (percentage * texture.w()); + final float dim = (direction == Position.Top || direction == Position.Bottom) ? texture.h() : texture.w(); + float x = area.pos().x(); + float y = area.pos().y(); + float w = area.size().x(); + float h = area.size().y(); + switch (direction) { + case Top: { + h *= percentage; + break; + } + case Right: { + x += (1.0f - percentage) * w; + w *= percentage; + break; + } + case Left: { + w *= percentage; + break; + } + case Bottom: { + y += h - (int) (percentage * h); + h *= percentage; + break; + } + } + this.texture(texture.crop(direction, dim - dist), new IArea(x, y, w, h)); + } + + public void test(final IWidget widget) { + } +} diff --git a/src/main/java/binnie/craftgui/core/renderer/TextureType.java b/src/main/java/binnie/craftgui/core/renderer/TextureType.java new file mode 100644 index 00000000..72d3a5ab --- /dev/null +++ b/src/main/java/binnie/craftgui/core/renderer/TextureType.java @@ -0,0 +1,11 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.core.renderer; + +public enum TextureType +{ + Stretched, + Tiled; +} diff --git a/src/main/java/binnie/craftgui/events/Event.java b/src/main/java/binnie/craftgui/events/Event.java new file mode 100644 index 00000000..d7f52f76 --- /dev/null +++ b/src/main/java/binnie/craftgui/events/Event.java @@ -0,0 +1,24 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.events; + +import binnie.craftgui.core.IWidget; + +public class Event +{ + IWidget origin; + + public Event(final IWidget origin) { + this.origin = origin; + } + + public IWidget getOrigin() { + return this.origin; + } + + public boolean isOrigin(final IWidget widget) { + return this.origin == widget; + } +} diff --git a/src/main/java/binnie/craftgui/events/EventButtonClicked.java b/src/main/java/binnie/craftgui/events/EventButtonClicked.java new file mode 100644 index 00000000..9287348f --- /dev/null +++ b/src/main/java/binnie/craftgui/events/EventButtonClicked.java @@ -0,0 +1,21 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.events; + +import binnie.craftgui.core.IWidget; + +public class EventButtonClicked extends Event +{ + public EventButtonClicked(final IWidget origin) { + super(origin); + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(EventButtonClicked.class); + } + } +} diff --git a/src/main/java/binnie/craftgui/events/EventCycleChanged.java b/src/main/java/binnie/craftgui/events/EventCycleChanged.java new file mode 100644 index 00000000..148aa3e8 --- /dev/null +++ b/src/main/java/binnie/craftgui/events/EventCycleChanged.java @@ -0,0 +1,21 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.events; + +import binnie.craftgui.core.IWidget; + +public class EventCycleChanged extends Event +{ + public int value; + + public EventCycleChanged(final IWidget origin, final int value) { + super(origin); + this.value = value; + } + + public int getValue() { + return this.value; + } +} diff --git a/src/main/java/binnie/craftgui/events/EventHandler.java b/src/main/java/binnie/craftgui/events/EventHandler.java new file mode 100644 index 00000000..a6ec6219 --- /dev/null +++ b/src/main/java/binnie/craftgui/events/EventHandler.java @@ -0,0 +1,60 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.events; + +import binnie.craftgui.core.IWidget; + +public abstract class EventHandler +{ + Class eventClass; + Origin origin; + IWidget relative; + + public EventHandler(final Class eventClass) { + this.origin = Origin.Any; + this.relative = null; + this.eventClass = eventClass; + } + + public EventHandler setOrigin(final Origin origin, final IWidget relative) { + this.origin = origin; + this.relative = relative; + return this; + } + + public abstract void onEvent(final E p0); + + public final boolean handles(final Event e) { + return this.eventClass.isInstance(e) && this.origin.isOrigin(e.getOrigin(), this.relative); + } + + public enum Origin + { + Any, + Self, + Parent, + DirectChild; + + public boolean isOrigin(final IWidget origin, final IWidget test) { + switch (this) { + case Any: { + return true; + } + case DirectChild: { + return test.getWidgets().contains(origin); + } + case Parent: { + return test.getParent() == origin; + } + case Self: { + return test == origin; + } + default: { + return false; + } + } + } + } +} diff --git a/src/main/java/binnie/craftgui/events/EventKey.java b/src/main/java/binnie/craftgui/events/EventKey.java new file mode 100644 index 00000000..262fe9fa --- /dev/null +++ b/src/main/java/binnie/craftgui/events/EventKey.java @@ -0,0 +1,55 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.events; + +import binnie.craftgui.core.IWidget; + +public abstract class EventKey extends Event +{ + char character; + int key; + + public EventKey(final IWidget origin, final char character, final int key) { + super(origin); + this.character = character; + this.key = key; + } + + public char getCharacter() { + return this.character; + } + + public int getKey() { + return this.key; + } + + public static class Down extends EventKey + { + public Down(final IWidget origin, final char character, final int key) { + super(origin, character, key); + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(Down.class); + } + } + } + + public static class Up extends EventKey + { + public Up(final IWidget origin, final char character, final int key) { + super(origin, character, key); + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(Up.class); + } + } + } +} diff --git a/src/main/java/binnie/craftgui/events/EventMouse.java b/src/main/java/binnie/craftgui/events/EventMouse.java new file mode 100644 index 00000000..c26def19 --- /dev/null +++ b/src/main/java/binnie/craftgui/events/EventMouse.java @@ -0,0 +1,131 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.events; + +import binnie.craftgui.core.IWidget; + +public abstract class EventMouse extends Event +{ + public EventMouse(final IWidget origin) { + super(origin); + } + + public static class Button extends EventMouse + { + int x; + int y; + int button; + + public int getX() { + return this.x; + } + + public int getY() { + return this.y; + } + + public int getButton() { + return this.button; + } + + public Button(final IWidget currentMousedOverWidget, final int x, final int y, final int button) { + super(currentMousedOverWidget); + this.x = x; + this.y = y; + this.button = button; + } + } + + public static class Down extends Button + { + public Down(final IWidget currentMousedOverWidget, final int x, final int y, final int button) { + super(currentMousedOverWidget, x, y, button); + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(Down.class); + } + } + } + + public static class Up extends Button + { + public Up(final IWidget currentMousedOverWidget, final int x, final int y, final int button) { + super(currentMousedOverWidget, x, y, button); + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(Up.class); + } + } + } + + public static class Move extends EventMouse + { + float dx; + float dy; + + public float getDx() { + return this.dx; + } + + public float getDy() { + return this.dy; + } + + public Move(final IWidget origin, final float dx, final float dy) { + super(origin); + this.dx = dx; + this.dy = dy; + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(Move.class); + } + } + } + + public static class Drag extends Move + { + public Drag(final IWidget draggedWidget, final float dx, final float dy) { + super(draggedWidget, dx, dy); + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(Drag.class); + } + } + } + + public static class Wheel extends EventMouse + { + int dWheel; + + public Wheel(final IWidget origin, final int dWheel) { + super(origin); + this.dWheel = 0; + this.dWheel = dWheel / 28; + } + + public int getDWheel() { + return this.dWheel; + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(Wheel.class); + } + } + } +} diff --git a/src/main/java/binnie/craftgui/events/EventTextEdit.java b/src/main/java/binnie/craftgui/events/EventTextEdit.java new file mode 100644 index 00000000..cb2b83e1 --- /dev/null +++ b/src/main/java/binnie/craftgui/events/EventTextEdit.java @@ -0,0 +1,21 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.events; + +import binnie.craftgui.core.IWidget; + +public class EventTextEdit extends EventValueChanged +{ + public EventTextEdit(final IWidget origin, final String text) { + super(origin, text); + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(EventTextEdit.class); + } + } +} diff --git a/src/main/java/binnie/craftgui/events/EventToggleButtonClicked.java b/src/main/java/binnie/craftgui/events/EventToggleButtonClicked.java new file mode 100644 index 00000000..6af86785 --- /dev/null +++ b/src/main/java/binnie/craftgui/events/EventToggleButtonClicked.java @@ -0,0 +1,21 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.events; + +import binnie.craftgui.core.IWidget; + +public class EventToggleButtonClicked extends Event +{ + boolean toggled; + + public EventToggleButtonClicked(final IWidget origin, final boolean toggled) { + super(origin); + this.toggled = toggled; + } + + public boolean isActive() { + return this.toggled; + } +} diff --git a/src/main/java/binnie/craftgui/events/EventValueChanged.java b/src/main/java/binnie/craftgui/events/EventValueChanged.java new file mode 100644 index 00000000..8ed382dd --- /dev/null +++ b/src/main/java/binnie/craftgui/events/EventValueChanged.java @@ -0,0 +1,28 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.events; + +import binnie.craftgui.core.IWidget; + +public class EventValueChanged extends Event +{ + public T value; + + public EventValueChanged(final IWidget origin, final T value) { + super(origin); + this.value = value; + } + + public T getValue() { + return this.value; + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(EventValueChanged.class); + } + } +} diff --git a/src/main/java/binnie/craftgui/events/EventValuesChanged.java b/src/main/java/binnie/craftgui/events/EventValuesChanged.java new file mode 100644 index 00000000..62817686 --- /dev/null +++ b/src/main/java/binnie/craftgui/events/EventValuesChanged.java @@ -0,0 +1,21 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.events; + +import binnie.craftgui.core.IWidget; + +public class EventValuesChanged extends Event +{ + public T[] values; + + public EventValuesChanged(final IWidget origin, final T[] values) { + super(origin); + this.values = values; + } + + public T[] getValues() { + return this.values; + } +} diff --git a/src/main/java/binnie/craftgui/events/EventWidget.java b/src/main/java/binnie/craftgui/events/EventWidget.java new file mode 100644 index 00000000..0bf56670 --- /dev/null +++ b/src/main/java/binnie/craftgui/events/EventWidget.java @@ -0,0 +1,217 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.events; + +import binnie.craftgui.core.IWidget; + +public class EventWidget extends Event +{ + public EventWidget(final IWidget origin) { + super(origin); + } + + public static class Enable extends EventWidget + { + public Enable(final IWidget origin) { + super(origin); + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(Enable.class); + } + } + } + + public static class Disable extends EventWidget + { + public Disable(final IWidget origin) { + super(origin); + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(Disable.class); + } + } + } + + public static class Show extends EventWidget + { + public Show(final IWidget origin) { + super(origin); + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(Show.class); + } + } + } + + public static class Hide extends EventWidget + { + public Hide(final IWidget origin) { + super(origin); + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(Hide.class); + } + } + } + + public static class ChangePosition extends EventWidget + { + public ChangePosition(final IWidget origin) { + super(origin); + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(ChangePosition.class); + } + } + } + + public static class ChangeSize extends EventWidget + { + public ChangeSize(final IWidget origin) { + super(origin); + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(ChangeSize.class); + } + } + } + + public static class ChangeOffset extends EventWidget + { + public ChangeOffset(final IWidget origin) { + super(origin); + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(ChangeOffset.class); + } + } + } + + public static class ChangeColour extends EventWidget + { + public ChangeColour(final IWidget origin) { + super(origin); + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(ChangeColour.class); + } + } + } + + public static class StartMouseOver extends EventWidget + { + public StartMouseOver(final IWidget origin) { + super(origin); + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(StartMouseOver.class); + } + } + } + + public static class EndMouseOver extends EventWidget + { + public EndMouseOver(final IWidget origin) { + super(origin); + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(EndMouseOver.class); + } + } + } + + public static class StartDrag extends EventWidget + { + int button; + + public StartDrag(final IWidget origin, final int button) { + super(origin); + this.button = button; + } + + public int getButton() { + return this.button; + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(StartDrag.class); + } + } + } + + public static class EndDrag extends EventWidget + { + public EndDrag(final IWidget origin) { + super(origin); + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(EndDrag.class); + } + } + } + + public static class GainFocus extends EventWidget + { + public GainFocus(final IWidget origin) { + super(origin); + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(GainFocus.class); + } + } + } + + public static class LoseFocus extends EventWidget + { + public LoseFocus(final IWidget origin) { + super(origin); + } + + public abstract static class Handler extends EventHandler + { + public Handler() { + super(LoseFocus.class); + } + } + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/ControlBlockIconDisplay.java b/src/main/java/binnie/craftgui/extratrees/dictionary/ControlBlockIconDisplay.java new file mode 100644 index 00000000..7a2cb001 --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/ControlBlockIconDisplay.java @@ -0,0 +1,26 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.IWidget; +import net.minecraft.util.IIcon; +import binnie.craftgui.controls.core.Control; + +public class ControlBlockIconDisplay extends Control +{ + IIcon icon; + + public ControlBlockIconDisplay(final IWidget parent, final float x, final float y, final IIcon icon) { + super(parent, x, y, 18.0f, 18.0f); + this.icon = icon; + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.iconBlock(IPoint.ZERO, this.icon); + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/ControlBreweryProgress.java b/src/main/java/binnie/craftgui/extratrees/dictionary/ControlBreweryProgress.java new file mode 100644 index 00000000..771ebd30 --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/ControlBreweryProgress.java @@ -0,0 +1,98 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.extratrees.core.ExtraTreeTexture; +import net.minecraft.util.IIcon; +import net.minecraftforge.fluids.FluidStack; +import binnie.craftgui.core.Attribute; +import net.minecraft.item.ItemStack; +import binnie.core.util.ItemStackSet; +import org.lwjgl.opengl.GL11; +import binnie.craftgui.core.geometry.IArea; +import binnie.core.machines.Machine; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.minecraft.Window; +import binnie.extratrees.machines.Brewery; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.resource.Texture; +import binnie.craftgui.minecraft.control.ControlProgressBase; + +public class ControlBreweryProgress extends ControlProgressBase +{ + static Texture Brewery; + static Texture BreweryOverlay; + + @Override + public void onRenderBackground() { + CraftGUI.Render.texture(ControlBreweryProgress.Brewery, new IPoint(0.0f, 0.0f)); + final Brewery.ComponentBreweryLogic logic = Machine.getInterface(Brewery.ComponentBreweryLogic.class, Window.get(this).getInventory()); + if (logic.currentCrafting == null) { + return; + } + if (logic.currentCrafting.currentInput == null) { + return; + } + final int fermentedHeight = (int) (32.0f * logic.getProgress() / 100.0f); + CraftGUI.Render.limitArea(new IArea(new IPoint(1.0f, 6.0f).add(this.getAbsolutePosition()), new IPoint(32.0f, 32 - fermentedHeight))); + GL11.glEnable(3089); + this.renderFluid(logic.currentCrafting.currentInput, new IPoint(1.0f, 6.0f)); + this.renderFluid(logic.currentCrafting.currentInput, new IPoint(17.0f, 6.0f)); + this.renderFluid(logic.currentCrafting.currentInput, new IPoint(1.0f, 22.0f)); + this.renderFluid(logic.currentCrafting.currentInput, new IPoint(17.0f, 22.0f)); + GL11.glDisable(3089); + CraftGUI.Render.limitArea(new IArea(new IPoint(1.0f, 38 - fermentedHeight).add(this.getAbsolutePosition()), new IPoint(32.0f, fermentedHeight))); + GL11.glEnable(3089); + this.renderFluid(binnie.extratrees.machines.Brewery.getOutput(logic.currentCrafting), new IPoint(1.0f, 6.0f)); + this.renderFluid(binnie.extratrees.machines.Brewery.getOutput(logic.currentCrafting), new IPoint(17.0f, 6.0f)); + this.renderFluid(binnie.extratrees.machines.Brewery.getOutput(logic.currentCrafting), new IPoint(1.0f, 22.0f)); + this.renderFluid(binnie.extratrees.machines.Brewery.getOutput(logic.currentCrafting), new IPoint(17.0f, 22.0f)); + GL11.glDisable(3089); + final ItemStackSet stacks = new ItemStackSet(); + for (final ItemStack stack : logic.currentCrafting.inputs) { + stacks.add(stack); + } + stacks.add(logic.currentCrafting.ingr); + int x = 1; + int y = 6; + for (final ItemStack stack : stacks) { + CraftGUI.Render.item(new IPoint(x, y), stack); + x += 16; + if (x > 18) { + x = 1; + y += 16; + } + } + } + + @Override + public void onRenderForeground() { + } + + protected ControlBreweryProgress(final IWidget parent, final float x, final float y) { + super(parent, x, y, 34.0f, 39.0f); + this.addAttribute(Attribute.MouseOver); + } + + public void renderFluid(final FluidStack fluid, final IPoint pos) { + final int hex = fluid.getFluid().getColor(fluid); + final int r = (hex & 0xFF0000) >> 16; + final int g = (hex & 0xFF00) >> 8; + final int b = hex & 0xFF; + final IIcon icon = fluid.getFluid().getIcon(); + GL11.glColor4f(r / 255.0f, g / 255.0f, b / 255.0f, 1.0f); + GL11.glEnable(3042); + GL11.glBlendFunc(770, 771); + CraftGUI.Render.iconBlock(pos, fluid.getFluid().getIcon()); + GL11.glDisable(3042); + } + + static { + ControlBreweryProgress.Brewery = new StandardTexture(0, 69, 34, 39, ExtraTreeTexture.Gui); + ControlBreweryProgress.BreweryOverlay = new StandardTexture(34, 69, 34, 39, ExtraTreeTexture.Gui); + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/ControlDistilleryProgress.java b/src/main/java/binnie/craftgui/extratrees/dictionary/ControlDistilleryProgress.java new file mode 100644 index 00000000..58df68c0 --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/ControlDistilleryProgress.java @@ -0,0 +1,98 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.extratrees.core.ExtraTreeTexture; +import net.minecraft.util.IIcon; +import org.lwjgl.opengl.GL11; +import net.minecraft.nbt.NBTTagCompound; +import binnie.craftgui.events.EventMouse; +import net.minecraftforge.fluids.FluidStack; +import binnie.core.machines.Machine; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.minecraft.Window; +import binnie.extratrees.machines.Distillery; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.resource.Texture; +import binnie.craftgui.minecraft.control.ControlProgressBase; + +public class ControlDistilleryProgress extends ControlProgressBase +{ + static Texture DistilleryBase; + static Texture DistilleryOverlay; + static Texture LiquidFlow; + static Texture Output; + + @Override + public void onRenderBackground() { + CraftGUI.Render.texture(ControlDistilleryProgress.DistilleryBase, new IPoint(0.0f, 0.0f)); + CraftGUI.Render.texturePercentage(ControlDistilleryProgress.LiquidFlow, new IArea(18.0f, 0.0f, 38.0f, 66.0f), Position.Left, this.progress); + final Distillery.ComponentDistilleryLogic component = Machine.getInterface(Distillery.ComponentDistilleryLogic.class, Window.get(this).getInventory()); + FluidStack stack = null; + if (component != null) { + stack = component.currentFluid; + } + if (stack != null) { + for (int y = 0; y < 4; ++y) { + this.renderFluid(stack, new IPoint(1.0f, 1 + y * 16)); + } + } + } + + @Override + public void onRenderForeground() { + final int level = Machine.getInterface(Distillery.ComponentDistilleryLogic.class, Window.get(this).getInventory()).level; + CraftGUI.Render.texture(ControlDistilleryProgress.Output, new IPoint(47.0f, 14 + level * 15)); + CraftGUI.Render.texture(ControlDistilleryProgress.DistilleryOverlay, new IPoint(0.0f, 0.0f)); + } + + protected ControlDistilleryProgress(final IWidget parent, final float x, final float y) { + super(parent, x, y, 58.0f, 66.0f); + this.addSelfEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + int distillationLevel = -1; + if (new IArea(45.0f, 8.0f, 19.0f, 11.0f).contains(ControlDistilleryProgress.this.getRelativeMousePosition())) { + distillationLevel = 0; + } + else if (new IArea(45.0f, 23.0f, 19.0f, 11.0f).contains(ControlDistilleryProgress.this.getRelativeMousePosition())) { + distillationLevel = 1; + } + else if (new IArea(45.0f, 38.0f, 19.0f, 11.0f).contains(ControlDistilleryProgress.this.getRelativeMousePosition())) { + distillationLevel = 2; + } + if (distillationLevel >= 0) { + final NBTTagCompound nbt = new NBTTagCompound(); + nbt.setByte("i", (byte) distillationLevel); + Window.get(ControlDistilleryProgress.this.getWidget()).sendClientAction("still-level", nbt); + } + } + }); + } + + public void renderFluid(final FluidStack fluid, final IPoint pos) { + final int hex = fluid.getFluid().getColor(fluid); + final int r = (hex & 0xFF0000) >> 16; + final int g = (hex & 0xFF00) >> 8; + final int b = hex & 0xFF; + final IIcon icon = fluid.getFluid().getIcon(); + GL11.glColor4f(r / 255.0f, g / 255.0f, b / 255.0f, 1.0f); + GL11.glEnable(3042); + GL11.glBlendFunc(770, 771); + CraftGUI.Render.iconBlock(pos, fluid.getFluid().getIcon()); + GL11.glDisable(3042); + } + + static { + ControlDistilleryProgress.DistilleryBase = new StandardTexture(43, 0, 58, 66, ExtraTreeTexture.Gui); + ControlDistilleryProgress.DistilleryOverlay = new StandardTexture(139, 0, 18, 66, ExtraTreeTexture.Gui); + ControlDistilleryProgress.LiquidFlow = new StandardTexture(101, 0, 38, 66, ExtraTreeTexture.Gui); + ControlDistilleryProgress.Output = new StandardTexture(68, 66, 17, 7, ExtraTreeTexture.Gui); + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/ControlFruitPressProgress.java b/src/main/java/binnie/craftgui/extratrees/dictionary/ControlFruitPressProgress.java new file mode 100644 index 00000000..ced30336 --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/ControlFruitPressProgress.java @@ -0,0 +1,78 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.extratrees.core.ExtraTreeTexture; +import net.minecraft.nbt.NBTTagCompound; +import binnie.craftgui.events.EventMouse; +import binnie.craftgui.core.Attribute; +import net.minecraft.util.IIcon; +import net.minecraftforge.fluids.Fluid; +import net.minecraft.item.ItemStack; +import org.lwjgl.opengl.GL11; +import binnie.extratrees.machines.Press; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.minecraft.Window; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.resource.Texture; +import binnie.craftgui.minecraft.control.ControlProgressBase; + +public class ControlFruitPressProgress extends ControlProgressBase +{ + static Texture PressTexture; + static Texture PressSlot; + + @Override + public void onRenderBackground() { + CraftGUI.Render.texture(ControlFruitPressProgress.PressSlot, new IPoint(3.0f, 52.0f)); + final ItemStack input = Window.get(this).getContainer().getSlotFromInventory(Window.get(this).getInventory(), Press.slotCurrent).getStack(); + if (input == null || Press.getOutput(input) == null) { + return; + } + final Fluid fluid = Press.getOutput(input).getFluid(); + final int hex = fluid.getColor(Press.getOutput(input)); + final int r = (hex & 0xFF0000) >> 16; + final int g = (hex & 0xFF00) >> 8; + final int b = hex & 0xFF; + IIcon icon = fluid.getIcon(); + GL11.glColor4f(r / 255.0f, g / 255.0f, b / 255.0f, 1.0f); + GL11.glEnable(3042); + GL11.glBlendFunc(770, 771); + CraftGUI.Render.iconBlock(new IPoint(4.0f, 52.0f), fluid.getIcon()); + GL11.glDisable(3042); + icon = input.getIconIndex(); + CraftGUI.Render.iconItem(new IPoint(4.0f, 52.0f), icon); + } + + @Override + public void onRenderForeground() { + CraftGUI.Render.texture(ControlFruitPressProgress.PressTexture, new IPoint(0.0f, 16.0f * this.progress)); + } + + protected ControlFruitPressProgress(final IWidget parent, final float x, final float y) { + super(parent, x, y, 37.0f, 69.0f); + this.addAttribute(Attribute.MouseOver); + this.addSelfEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + if (event.getButton() == 0) { + final NBTTagCompound action = new NBTTagCompound(); + Window.get(ControlFruitPressProgress.this.getWidget()).sendClientAction("fruitpress-click", action); + } + else if (event.getButton() == 1) { + final NBTTagCompound action = new NBTTagCompound(); + Window.get(ControlFruitPressProgress.this.getWidget()).sendClientAction("clear-fruit", action); + } + } + }); + } + + static { + ControlFruitPressProgress.PressTexture = new StandardTexture(6, 0, 24, 52, ExtraTreeTexture.Gui); + ControlFruitPressProgress.PressSlot = new StandardTexture(9, 52, 34, 17, ExtraTreeTexture.Gui); + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/ControlLumbermillProgress.java b/src/main/java/binnie/craftgui/extratrees/dictionary/ControlLumbermillProgress.java new file mode 100644 index 00000000..5d3a125a --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/ControlLumbermillProgress.java @@ -0,0 +1,96 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.extratrees.core.ExtraTreeTexture; +import binnie.craftgui.minecraft.MinecraftGUI; +import binnie.craftgui.window.Panel; +import net.minecraft.util.IIcon; +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import binnie.craftgui.core.geometry.IArea; +import net.minecraft.item.ItemBlock; +import binnie.extratrees.machines.Lumbermill; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.minecraft.Window; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import org.lwjgl.opengl.GL11; +import binnie.craftgui.resource.Texture; +import binnie.craftgui.minecraft.control.ControlProgressBase; + +public class ControlLumbermillProgress extends ControlProgressBase +{ + float oldProgress; + float animation; + static Texture Saw; + static Texture Saw2; + + @Override + public void onUpdateClient() { + super.onUpdateClient(); + if (this.oldProgress != this.progress) { + this.oldProgress = this.progress; + this.animation += 5.0f; + } + } + + @Override + public void onRenderForeground() { + GL11.glDisable(2896); + final int sawX = (int) (63.0f * this.progress); + CraftGUI.Render.texture(ControlLumbermillProgress.Saw, new IPoint(sawX, -8.0f + 6.0f * (float) Math.sin(this.animation))); + final ItemStack item = Window.get(this).getInventory().getStackInSlot(Lumbermill.slotWood); + if (item == null) { + return; + } + GL11.glDisable(2896); + Block block = null; + if (item.getItem() instanceof ItemBlock) { + block = ((ItemBlock) item.getItem()).field_150939_a; + } + if (block == null) { + return; + } + final IIcon icon = block.getIcon(2, item.getItemDamage()); + for (int i = 0; i < 4; ++i) { + CraftGUI.Render.iconBlock(new IPoint(1 + i * 16, 1.0f), icon); + } + final ItemStack result = Lumbermill.getPlankProduct(item); + if (result == null) { + return; + } + Block block2 = null; + if (item.getItem() instanceof ItemBlock) { + block2 = ((ItemBlock) result.getItem()).field_150939_a; + } + if (block2 == null) { + return; + } + final IIcon icon2 = block2.getIcon(2, result.getItemDamage()); + final IPoint size = this.getSize(); + final IPoint pos = this.getAbsolutePosition(); + CraftGUI.Render.limitArea(new IArea(pos.add(new IPoint(0.0f, 0.0f)), new IPoint(this.progress * 64.0f + 2.0f, 18.0f))); + GL11.glEnable(3089); + for (int j = 0; j < 4; ++j) { + CraftGUI.Render.iconBlock(new IPoint(1 + j * 16, 1.0f), icon2); + } + GL11.glDisable(3089); + CraftGUI.Render.texture(ControlLumbermillProgress.Saw2, new IPoint(sawX + 2, -8.0f + 6.0f * (float) Math.sin(this.animation))); + } + + protected ControlLumbermillProgress(final IWidget parent, final float x, final float y) { + super(parent, x, y, 66.0f, 18.0f); + this.oldProgress = 0.0f; + this.animation = 0.0f; + new Panel(this, 0.0f, 0.0f, 66.0f, 18.0f, MinecraftGUI.PanelType.Black); + } + + static { + ControlLumbermillProgress.Saw = new StandardTexture(0, 0, 6, 32, ExtraTreeTexture.Gui); + ControlLumbermillProgress.Saw2 = new StandardTexture(2, 0, 4, 32, ExtraTreeTexture.Gui); + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/ControlRecipeSlot.java b/src/main/java/binnie/craftgui/extratrees/dictionary/ControlRecipeSlot.java new file mode 100644 index 00000000..fb110796 --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/ControlRecipeSlot.java @@ -0,0 +1,41 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import binnie.core.machines.Machine; +import binnie.core.machines.component.IComponentRecipe; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import binnie.core.machines.TileEntityMachine; +import binnie.craftgui.minecraft.Window; +import net.minecraft.tileentity.TileEntity; +import binnie.craftgui.events.EventMouse; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.minecraft.control.ControlSlotBase; + +public class ControlRecipeSlot extends ControlSlotBase +{ + public ControlRecipeSlot(final IWidget parent, final int x, final int y) { + super(parent, x, y, 50); + this.addSelfEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + final TileEntity tile = (TileEntity) Window.get(ControlRecipeSlot.this.getWidget()).getInventory(); + if (tile == null || !(tile instanceof TileEntityMachine)) { + return; + } + final NBTTagCompound nbt = new NBTTagCompound(); + Window.get(ControlRecipeSlot.this.getWidget()).sendClientAction("recipe", nbt); + } + }); + this.setRotating(); + } + + @Override + public ItemStack getItemStack() { + final IComponentRecipe recipe = Machine.getInterface(IComponentRecipe.class, Window.get(this).getInventory()); + return recipe.isRecipe() ? recipe.getProduct() : null; + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/ControlTileSelect.java b/src/main/java/binnie/craftgui/extratrees/dictionary/ControlTileSelect.java new file mode 100644 index 00000000..125b6c9c --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/ControlTileSelect.java @@ -0,0 +1,182 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import net.minecraft.item.ItemStack; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.CraftGUI; +import binnie.core.BinnieCore; +import binnie.Binnie; +import binnie.craftgui.core.Tooltip; +import net.minecraft.nbt.NBTTagCompound; +import binnie.craftgui.events.EventMouse; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.ITooltip; +import java.util.Map; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.controls.ControlText; +import java.util.ArrayList; +import java.util.List; +import binnie.extratrees.api.IDesignCategory; +import java.util.HashMap; +import binnie.extratrees.machines.Designer; +import binnie.craftgui.minecraft.Window; +import binnie.core.machines.TileEntityMachine; +import binnie.extratrees.carpentry.EnumDesign; +import binnie.extratrees.api.CarpentryManager; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.scroll.IControlScrollable; +import binnie.extratrees.api.IDesign; +import binnie.craftgui.controls.core.IControlValue; +import binnie.craftgui.controls.core.Control; + +public class ControlTileSelect extends Control implements IControlValue, IControlScrollable +{ + IDesign value; + float shownHeight; + + protected ControlTileSelect(final IWidget parent, final float x, final float y) { + super(parent, x, y, 102.0f, 20 * (CarpentryManager.carpentryInterface.getSortedDesigns().size() / 4) + 22); + this.value = EnumDesign.Blank; + this.shownHeight = 92.0f; + this.refresh(""); + } + + @Override + public float getPercentageIndex() { + return 0.0f; + } + + @Override + public float getPercentageShown() { + return 0.0f; + } + + @Override + public IDesign getValue() { + return this.value; + } + + @Override + public void movePercentage(final float percentage) { + } + + @Override + public void onUpdateClient() { + super.onUpdateClient(); + final TileEntityMachine tile = (TileEntityMachine) Window.get(this).getInventory(); + if (tile == null) { + return; + } + final Designer.ComponentWoodworkerRecipe recipe = tile.getMachine().getComponent(Designer.ComponentWoodworkerRecipe.class); + this.setValue(recipe.getDesign()); + } + + public void refresh(final String filterText) { + this.deleteAllChildren(); + int cx = 2; + int cy = 2; + final Map> designs = new HashMap>(); + for (final IDesignCategory category : CarpentryManager.carpentryInterface.getAllDesignCategories()) { + designs.put(category, new ArrayList()); + for (final IDesign tile : category.getDesigns()) { + if (filterText == "" || tile.getName().toLowerCase().contains(filterText)) { + designs.get(category).add(tile); + } + } + if (designs.get(category).isEmpty()) { + designs.remove(category); + } + } + for (final IDesignCategory category : designs.keySet()) { + cx = 2; + new ControlText(this, new IPoint(cx, cy + 3), category.getName()); + cy += 16; + for (final IDesign tile : designs.get(category)) { + if (cx > 90) { + cx = 2; + cy += 20; + } + new ControlTile(this, cx, cy, tile); + cx += 20; + } + cy += 20; + } + final int height = cy; + this.setSize(new IPoint(this.getSize().x(), height)); + } + + @Override + public void setPercentageIndex(final float index) { + } + + @Override + public void setValue(final IDesign value) { + this.value = value; + } + + @Override + public float getMovementRange() { + return 0.0f; + } + + public static class ControlTile extends Control implements IControlValue, ITooltip + { + IDesign value; + + protected ControlTile(final IWidget parent, final float x, final float y, final IDesign value) { + super(parent, x, y, 18.0f, 18.0f); + this.setValue(value); + this.addAttribute(Attribute.MouseOver); + this.addSelfEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + final TileEntityMachine tile = (TileEntityMachine) Window.get(ControlTile.this.getWidget()).getInventory(); + if (tile == null) { + return; + } + final Designer.ComponentWoodworkerRecipe recipe = tile.getMachine().getComponent(Designer.ComponentWoodworkerRecipe.class); + final NBTTagCompound nbt = new NBTTagCompound(); + nbt.setShort("d", (short) CarpentryManager.carpentryInterface.getDesignIndex(ControlTile.this.getValue())); + Window.get(ControlTile.this.getWidget()).sendClientAction("design", nbt); + } + }); + } + + @Override + public void getTooltip(final Tooltip tooltip) { + tooltip.add(Binnie.Language.localise(BinnieCore.instance, "gui.designer.pattern", this.getValue().getName())); + } + + @Override + public IDesign getValue() { + return this.value; + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.texture(CraftGUITexture.Slot, IPoint.ZERO); + } + + @Override + public void onRenderForeground() { + final ItemStack image = ((WindowWoodworker) this.getSuperParent()).getDesignerType().getDisplayStack(this.getValue()); + CraftGUI.Render.item(new IPoint(1.0f, 1.0f), image); + if (((IControlValue) this.getParent()).getValue() != this.getValue()) { + if (Window.get(this).getMousedOverWidget() == this) { + CraftGUI.Render.gradientRect(this.getArea().inset(1), 1157627903, 1157627903); + } + else { + CraftGUI.Render.gradientRect(this.getArea().inset(1), -1433892728, -1433892728); + } + } + } + + @Override + public void setValue(final IDesign value) { + this.value = value; + } + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/DialogBreweryRecipe.java b/src/main/java/binnie/craftgui/extratrees/dictionary/DialogBreweryRecipe.java new file mode 100644 index 00000000..ff630040 --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/DialogBreweryRecipe.java @@ -0,0 +1,23 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import binnie.craftgui.core.IWidget; +import binnie.craftgui.minecraft.Dialog; + +public class DialogBreweryRecipe extends Dialog +{ + public DialogBreweryRecipe(final IWidget parent, final float w, final float h) { + super(parent, w, h); + } + + @Override + public void initialise() { + } + + @Override + public void onClose() { + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/PageFruit.java b/src/main/java/binnie/craftgui/extratrees/dictionary/PageFruit.java new file mode 100644 index 00000000..c4138ef6 --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/PageFruit.java @@ -0,0 +1,39 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import forestry.api.genetics.IAlleleSpecies; +import java.util.Collection; +import binnie.craftgui.mod.database.ControlSpeciesBox; +import binnie.core.genetics.TreeBreedingSystem; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.extratrees.ExtraTrees; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.minecraft.Window; +import binnie.craftgui.mod.database.WindowAbstractDatabase; +import binnie.craftgui.mod.database.DatabaseTab; +import binnie.craftgui.core.IWidget; +import net.minecraft.item.ItemStack; +import binnie.craftgui.mod.database.PageAbstract; + +public class PageFruit extends PageAbstract +{ + boolean treesThatBearFruit; + + public PageFruit(final IWidget parent, final DatabaseTab tab, final boolean treesThatBearFruit) { + super(parent, tab); + this.treesThatBearFruit = treesThatBearFruit; + } + + @Override + public void onValueChanged(final ItemStack species) { + this.deleteAllChildren(); + final WindowAbstractDatabase database = Window.get(this); + new ControlText(this, new IArea(0.0f, 0.0f, this.size().x(), 24.0f), ExtraTrees.proxy.localise("gui.database.tab.fruit." + (this.treesThatBearFruit ? "natural" : "potential")), TextJustification.MiddleCenter); + final Collection trees = this.treesThatBearFruit ? ((TreeBreedingSystem) database.getBreedingSystem()).getTreesThatBearFruit(species, database.isNEI(), database.getWorld(), database.getUsername()) : ((TreeBreedingSystem) database.getBreedingSystem()).getTreesThatCanBearFruit(species, database.isNEI(), database.getWorld(), database.getUsername()); + new ControlSpeciesBox(this, 4.0f, 24.0f, this.size().x() - 8.0f, this.size().y() - 4.0f - 24.0f).setOptions(trees); + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/PagePlanksOverview.java b/src/main/java/binnie/craftgui/extratrees/dictionary/PagePlanksOverview.java new file mode 100644 index 00000000..21e88cfb --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/PagePlanksOverview.java @@ -0,0 +1,83 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import binnie.extratrees.block.IPlankType; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import binnie.core.BinnieCore; +import binnie.craftgui.minecraft.control.ControlItemDisplay; +import binnie.extratrees.block.DoorType; +import binnie.extratrees.block.decor.FenceType; +import binnie.extratrees.block.WoodManager; +import binnie.extratrees.ExtraTrees; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.minecraft.Window; +import binnie.craftgui.mod.database.WindowAbstractDatabase; +import binnie.craftgui.mod.database.DatabaseTab; +import binnie.craftgui.core.IWidget; +import net.minecraft.item.ItemStack; +import binnie.craftgui.mod.database.PageAbstract; + +public class PagePlanksOverview extends PageAbstract +{ + public PagePlanksOverview(final IWidget parent, final DatabaseTab tab) { + super(parent, tab); + } + + @Override + public void onValueChanged(final ItemStack species) { + this.deleteAllChildren(); + final WindowAbstractDatabase database = Window.get(this); + new ControlText(this, new IArea(0.0f, 0.0f, this.size().x(), 24.0f), species.getDisplayName(), TextJustification.MiddleCenter); + new ControlText(this, new IArea(12.0f, 24.0f, this.size().x() - 24.0f, 24.0f), ExtraTrees.proxy.localise("gui.database.planks.use"), TextJustification.MiddleLeft); + final IPlankType type = WoodManager.get(species); + int x = 12; + if (type != null) { + final ItemStack fence = WoodManager.getFence(type, new FenceType(0), 1); + final ItemStack gate = WoodManager.getGate(type); + final ItemStack door = WoodManager.getDoor(type, DoorType.Standard); + if (fence != null) { + new ControlItemDisplay(this, x, 48.0f).setItemStack(fence); + x += 22; + } + if (gate != null) { + new ControlItemDisplay(this, x, 48.0f).setItemStack(gate); + x += 22; + } + if (door != null) { + new ControlItemDisplay(this, x, 48.0f).setItemStack(door); + x += 22; + } + } + final ControlText controlDescription = new ControlText(this, new IArea(8.0f, 84.0f, this.getSize().x() - 16.0f, 0.0f), "", TextJustification.MiddleCenter); + final ControlText controlSignature = new ControlText(this, new IArea(8.0f, 84.0f, this.getSize().x() - 16.0f, 0.0f), "", TextJustification.BottomRight); + String desc = ""; + if (type != null) { + desc = type.getDescription(); + } + String descBody = "§o"; + String descSig = ""; + if (desc == null || desc.length() == 0) { + descBody += BinnieCore.proxy.localise("gui.database.nodescription"); + } + else { + final String[] descStrings = desc.split("\\|"); + descBody += descStrings[0]; + for (int i = 1; i < descStrings.length - 1; ++i) { + descBody = descBody + " " + descStrings[i]; + } + if (descStrings.length > 1) { + descSig += descStrings[descStrings.length - 1]; + } + } + controlDescription.setValue(descBody + "§r"); + controlSignature.setValue(descSig + "§r"); + final float descHeight = CraftGUI.Render.textHeight(controlDescription.getValue(), controlDescription.getSize().x()); + controlSignature.setPosition(new IPoint(controlSignature.pos().x(), controlDescription.getPosition().y() + descHeight + 10.0f)); + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/PagePlanksTrees.java b/src/main/java/binnie/craftgui/extratrees/dictionary/PagePlanksTrees.java new file mode 100644 index 00000000..87e3ba84 --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/PagePlanksTrees.java @@ -0,0 +1,35 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import forestry.api.genetics.IAlleleSpecies; +import java.util.Collection; +import binnie.craftgui.mod.database.ControlSpeciesBox; +import binnie.core.genetics.TreeBreedingSystem; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.minecraft.Window; +import binnie.craftgui.mod.database.WindowAbstractDatabase; +import binnie.craftgui.mod.database.DatabaseTab; +import binnie.craftgui.core.IWidget; +import net.minecraft.item.ItemStack; +import binnie.craftgui.mod.database.PageAbstract; + +public class PagePlanksTrees extends PageAbstract +{ + public PagePlanksTrees(final IWidget parent, final DatabaseTab tab) { + super(parent, tab); + } + + @Override + public void onValueChanged(final ItemStack species) { + this.deleteAllChildren(); + final WindowAbstractDatabase database = Window.get(this); + new ControlText(this, new IArea(0.0f, 0.0f, this.size().x(), 24.0f), species.getDisplayName(), TextJustification.MiddleCenter); + final Collection trees = ((TreeBreedingSystem) database.getBreedingSystem()).getTreesThatMakePlanks(species, database.isNEI(), database.getWorld(), database.getUsername()); + new ControlSpeciesBox(this, 4.0f, 24.0f, this.size().x() - 8.0f, this.size().y() - 4.0f - 24.0f).setOptions(trees); + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/PageSpeciesImage.java b/src/main/java/binnie/craftgui/extratrees/dictionary/PageSpeciesImage.java new file mode 100644 index 00000000..340553bb --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/PageSpeciesImage.java @@ -0,0 +1,33 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import binnie.craftgui.mod.database.EnumDiscoveryState; +import forestry.api.genetics.IAlleleSpecies; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.minecraft.MinecraftGUI; +import binnie.craftgui.window.Panel; +import binnie.craftgui.mod.database.DatabaseTab; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.mod.database.ControlDatabaseIndividualDisplay; +import binnie.craftgui.mod.database.PageSpecies; + +public class PageSpeciesImage extends PageSpecies +{ + ControlDatabaseIndividualDisplay display; + + public PageSpeciesImage(final IWidget parent, final DatabaseTab tab) { + super(parent, tab); + new Panel(this, 7.0f, 25.0f, 130.0f, 120.0f, MinecraftGUI.PanelType.Gray); + this.display = new ControlDatabaseIndividualDisplay(this, 12.0f, 25.0f, 120.0f); + this.display.hastooltip = false; + new ControlTextCentered(this, 8.0f, this.getValue().toString()); + } + + @Override + public void onValueChanged(final IAlleleSpecies species) { + this.display.setSpecies(species, EnumDiscoveryState.Show); + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/PageSpeciesTreeGenome.java b/src/main/java/binnie/craftgui/extratrees/dictionary/PageSpeciesTreeGenome.java new file mode 100644 index 00000000..48bf7494 --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/PageSpeciesTreeGenome.java @@ -0,0 +1,162 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import java.util.List; + +import net.minecraft.util.IIcon; + +import binnie.core.genetics.BreedingSystem; +import forestry.api.arboriculture.IAlleleTreeSpecies; +import forestry.api.arboriculture.ITreeGenome; +import forestry.api.arboriculture.ITree; +import forestry.api.genetics.IAllele; +import binnie.craftgui.core.geometry.IPoint; + +import net.minecraft.item.ItemStack; + +import java.util.ArrayList; + +import binnie.craftgui.minecraft.control.ControlItemDisplay; +import binnie.extratrees.ExtraTrees; +import binnie.extratrees.FakeWorld; + +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; + +import forestry.api.core.ForestryAPI; +import binnie.core.BinnieCore; +import forestry.api.genetics.IChromosomeType; +import forestry.api.arboriculture.EnumTreeChromosome; +import binnie.craftgui.controls.core.Control; +import binnie.craftgui.controls.scroll.ControlScrollableContent; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.controls.ControlText; +import binnie.Binnie; +import forestry.api.genetics.IAlleleSpecies; +import binnie.craftgui.mod.database.DatabaseTab; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.mod.database.PageSpecies; + +public class PageSpeciesTreeGenome extends PageSpecies +{ + public PageSpeciesTreeGenome(final IWidget parent, final DatabaseTab tab) { + super(parent, tab); + } + + @Override + public void onValueChanged(final IAlleleSpecies species) { + this.deleteAllChildren(); + final IAllele[] template = Binnie.Genetics.getTreeRoot().getTemplate(species.getUID()); + if (template == null) { + return; + } + final ITree tree = Binnie.Genetics.getTreeRoot().templateAsIndividual(template); + if (tree == null) { + return; + } + + ItemStack log = null; + try { + FakeWorld world = FakeWorld.instance; + tree.getGenome().getPrimary().getGenerator().setLogBlock(tree.getGenome(), world, 0, 0, 0, ForgeDirection.UP);// getGenome().getPrimary().getGenerator().getWorldGenerator(tree); + log = world.getWooLog(); + + } catch (Exception e) { + e.printStackTrace(); + } + + final ITreeGenome genome = tree.getGenome(); + final IAlleleTreeSpecies treeSpecies = genome.getPrimary(); + final int w = 144; + final int h = 176; + new ControlText(this, new IArea(0.0f, 4.0f, w, 16.0f), this.getValue().toString(), TextJustification.MiddleCenter); + final ControlScrollableContent scrollable = new ControlScrollableContent(this, 4.0f, 20.0f, w - 8, h - 8 - 16, 12.0f); + final Control contents = new Control(scrollable, 0.0f, 0.0f, w - 8 - 12, h - 8 - 16); + final int tw = w - 8 - 12; + final int w2 = 65; + final int w3 = tw - 50; + int y = 0; + final int th = 14; + final int th2 = 18; + final BreedingSystem syst = Binnie.Genetics.treeBreedingSystem; + new ControlText(contents, new IArea(0.0f, y, w2, th), syst.getChromosomeShortName(EnumTreeChromosome.PLANT) + " : ", TextJustification.MiddleRight); + new ControlText(contents, new IArea(w2, y, w3, th), treeSpecies.getPlantType().toString(), TextJustification.MiddleLeft); + y += th; + new ControlText(contents, new IArea(0.0f, y, w2, th), BinnieCore.proxy.localise("gui.temperature.short") + " : ", TextJustification.MiddleRight); + new ControlText(contents, new IArea(w2, y, w3, th), treeSpecies.getTemperature().getName(), TextJustification.MiddleLeft); + y += th; + final IIcon leaf = treeSpecies.getLeafIcon(false, false); + IIcon fruit = null; + int fruitColour = 16777215; + try { + fruit = ForestryAPI.textureManager.getIcon(genome.getFruitProvider().getIconIndex(genome, (IBlockAccess) null, 0, 0, 0, 100, false)); + fruitColour = genome.getFruitProvider().getColour(genome, (IBlockAccess) null, 0, 0, 0, 100); + } catch (Exception ex) { + ex.printStackTrace(); + } + if (leaf != null) { + new ControlText(contents, new IArea(0.0f, y, w2, th2), ExtraTrees.proxy.localise("gui.database.leaves") + " : ", TextJustification.MiddleRight); + new ControlBlockIconDisplay(contents, w2, y, leaf).setColour(treeSpecies.getLeafColour(false)); + if (fruit != null && !treeSpecies.getUID().equals("forestry.treeOak")) { + new ControlBlockIconDisplay(contents, w2, y, fruit).setColour(fruitColour); + } + y += th2; + } + // final ItemStack log = (genome.getFruitProvider().getProducts().length + // > 0) ? genome.getFruitProvider().getProducts()[0] : null; + if (log != null) { + new ControlText(contents, new IArea(0.0f, y, w2, th2), ExtraTrees.proxy.localise("gui.database.log") + " : ", TextJustification.MiddleRight); + final ControlItemDisplay display = new ControlItemDisplay(contents, w2, y); + display.setItemStack(log); + display.setTooltip(); + y += th2; + } + new ControlText(contents, new IArea(0.0f, y, w2, th), syst.getChromosomeShortName(EnumTreeChromosome.GROWTH) + " : ", TextJustification.MiddleRight); + new ControlText(contents, new IArea(w2, y, w3, th), genome.getGrowthProvider().getDescription(), TextJustification.MiddleLeft); + y += th; + new ControlText(contents, new IArea(0.0f, y, w2, th), syst.getChromosomeShortName(EnumTreeChromosome.HEIGHT) + " : ", TextJustification.MiddleRight); + new ControlText(contents, new IArea(w2, y, w3, th), genome.getHeight() + "x", TextJustification.MiddleLeft); + y += th; + new ControlText(contents, new IArea(0.0f, y, w2, th), syst.getChromosomeShortName(EnumTreeChromosome.FERTILITY) + " : ", TextJustification.MiddleRight); + new ControlText(contents, new IArea(w2, y, w3, th), genome.getFertility() + "x", TextJustification.MiddleLeft); + y += th; + final List fruits = new ArrayList(); + for (final ItemStack stack : genome.getFruitProvider().getProducts()) { + fruits.add(stack); + } + if (!fruits.isEmpty()) { + new ControlText(contents, new IArea(0.0f, y, w2, th2), syst.getChromosomeShortName(EnumTreeChromosome.FRUITS) + " : ", TextJustification.MiddleRight); + for (final ItemStack fruitw : fruits) { + final ControlItemDisplay display2 = new ControlItemDisplay(contents, w2, y); + display2.setItemStack(fruitw); + display2.setTooltip(); + y += th2; + } + } + new ControlText(contents, new IArea(0.0f, y, w2, th), syst.getChromosomeShortName(EnumTreeChromosome.YIELD) + " : ", TextJustification.MiddleRight); + new ControlText(contents, new IArea(w2, y, w3, th), genome.getYield() + "x", TextJustification.MiddleLeft); + y += th; + new ControlText(contents, new IArea(0.0f, y, w2, th), syst.getChromosomeShortName(EnumTreeChromosome.SAPPINESS) + " : ", TextJustification.MiddleRight); + new ControlText(contents, new IArea(w2, y, w3, th), genome.getSappiness() + "x", TextJustification.MiddleLeft); + y += th; + new ControlText(contents, new IArea(0.0f, y, w2, th), syst.getChromosomeShortName(EnumTreeChromosome.MATURATION) + " : ", TextJustification.MiddleRight); + new ControlText(contents, new IArea(w2, y, w3, th), genome.getMaturationTime() + "x", TextJustification.MiddleLeft); + y += th; + new ControlText(contents, new IArea(0.0f, y, w2, th), syst.getChromosomeShortName(EnumTreeChromosome.GIRTH) + " : ", TextJustification.MiddleRight); + new ControlText(contents, new IArea(w2, y, w3, th), genome.getGirth() + "x" + genome.getGirth(), TextJustification.MiddleLeft); + y += th; + contents.setSize(new IPoint(contents.size().x(), y)); + scrollable.setScrollableContent(contents); + } + + public static String tolerated(final boolean t) { + if (t) { + return BinnieCore.proxy.localise("gui.tolerated"); + } + return BinnieCore.proxy.localise("gui.nottolerated"); + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/PageWood.java b/src/main/java/binnie/craftgui/extratrees/dictionary/PageWood.java new file mode 100644 index 00000000..133ec8b9 --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/PageWood.java @@ -0,0 +1,35 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import forestry.api.genetics.IAlleleSpecies; +import java.util.Collection; +import binnie.craftgui.mod.database.ControlSpeciesBox; +import binnie.core.genetics.TreeBreedingSystem; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.minecraft.Window; +import binnie.craftgui.mod.database.WindowAbstractDatabase; +import binnie.craftgui.mod.database.DatabaseTab; +import binnie.craftgui.core.IWidget; +import net.minecraft.item.ItemStack; +import binnie.craftgui.mod.database.PageAbstract; + +public class PageWood extends PageAbstract +{ + public PageWood(final IWidget parent, final DatabaseTab tab) { + super(parent, tab); + } + + @Override + public void onValueChanged(final ItemStack species) { + this.deleteAllChildren(); + final WindowAbstractDatabase database = Window.get(this); + new ControlText(this, new IArea(0.0f, 0.0f, this.size().x(), 24.0f), this.getValue().toString(), TextJustification.MiddleCenter); + final Collection trees = ((TreeBreedingSystem) database.getBreedingSystem()).getTreesThatHaveWood(species, database.isNEI(), database.getWorld(), database.getUsername()); + new ControlSpeciesBox(this, 4.0f, 24.0f, this.size().x() - 8.0f, this.size().y() - 4.0f - 24.0f).setOptions(trees); + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/WindowArboristDatabase.java b/src/main/java/binnie/craftgui/extratrees/dictionary/WindowArboristDatabase.java new file mode 100644 index 00000000..5ca75980 --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/WindowArboristDatabase.java @@ -0,0 +1,117 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import binnie.craftgui.controls.scroll.ControlScrollableContent; +import binnie.core.genetics.TreeBreedingSystem; +import binnie.craftgui.mod.database.ControlItemStackOption; +import binnie.craftgui.controls.listbox.ControlList; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.mod.database.PageBreeder; +import binnie.craftgui.mod.database.PageBranchSpecies; +import binnie.craftgui.mod.database.PageBranchOverview; +import binnie.craftgui.mod.database.PageSpeciesMutations; +import binnie.craftgui.mod.database.PageSpeciesResultant; +import binnie.craftgui.mod.database.PageSpeciesClassification; +import binnie.craftgui.core.IWidget; +import binnie.core.AbstractMod; +import binnie.craftgui.mod.database.DatabaseTab; +import binnie.extratrees.ExtraTrees; +import binnie.craftgui.mod.database.IDatabaseMode; +import binnie.craftgui.mod.database.PageSpeciesOverview; +import binnie.craftgui.minecraft.Window; +import binnie.Binnie; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import binnie.craftgui.controls.listbox.ControlListBox; +import binnie.craftgui.mod.database.WindowAbstractDatabase; + +public class WindowArboristDatabase extends WindowAbstractDatabase +{ + ControlListBox selectionBoxFruit; + ControlListBox selectionBoxWood; + ControlListBox selectionBoxPlanks; + + public WindowArboristDatabase(final EntityPlayer player, final Side side, final boolean nei) { + super(player, side, nei, Binnie.Genetics.treeBreedingSystem, 120.0f); + } + + public static Window create(final EntityPlayer player, final Side side, final boolean nei) { + return new WindowArboristDatabase(player, side, nei); + } + + @Override + protected void addTabs() { + new PageSpeciesOverview(this.getInfoPages(Mode.Species), new DatabaseTab(ExtraTrees.instance, "species.overview", 0)); + new PageSpeciesTreeGenome(this.getInfoPages(Mode.Species), new DatabaseTab(ExtraTrees.instance, "species.genome", 0)); + new PageSpeciesClassification(this.getInfoPages(Mode.Species), new DatabaseTab(ExtraTrees.instance, "species.classification", 0)); + new PageSpeciesResultant(this.getInfoPages(Mode.Species), new DatabaseTab(ExtraTrees.instance, "species.resultant", 0)); + new PageSpeciesMutations(this.getInfoPages(Mode.Species), new DatabaseTab(ExtraTrees.instance, "species.further", 0)); + new PageBranchOverview(this.getInfoPages(Mode.Branches), new DatabaseTab(ExtraTrees.instance, "branches.overview", 0)); + new PageBranchSpecies(this.getInfoPages(Mode.Branches), new DatabaseTab(ExtraTrees.instance, "branches.species", 0)); + new PageBreeder(this.getInfoPages(Mode.Breeder), this.getUsername(), new DatabaseTab(ExtraTrees.instance, "breeder", 0)); + this.createMode(TreeMode.Fruit, new ModeWidgets(TreeMode.Fruit, this) { + @Override + public void createListBox(final IArea area) { + (this.listBox = new ControlListBox(this.modePage, area.x(), area.y(), area.w(), area.h(), 12.0f) { + @Override + public IWidget createOption(final ItemStack value, final int y) { + return new ControlItemStackOption(((ControlScrollableContent>) this).getContent(), value, y); + } + }).setOptions(((TreeBreedingSystem) WindowArboristDatabase.this.getBreedingSystem()).allFruits); + } + }); + this.createMode(TreeMode.Wood, new ModeWidgets(TreeMode.Wood, this) { + @Override + public void createListBox(final IArea area) { + (this.listBox = new ControlListBox(this.modePage, area.x(), area.y(), area.w(), area.h(), 12.0f) { + @Override + public IWidget createOption(final ItemStack value, final int y) { + return new ControlItemStackOption(((ControlScrollableContent>) this).getContent(), value, y); + } + }).setOptions(((TreeBreedingSystem) WindowArboristDatabase.this.getBreedingSystem()).allWoods); + } + }); + this.createMode(TreeMode.Planks, new ModeWidgets(TreeMode.Planks, this) { + @Override + public void createListBox(final IArea area) { + this.listBox = new ControlListBox(this.modePage, area.x(), area.y(), area.w(), area.h(), 12.0f) { + @Override + public IWidget createOption(final ItemStack value, final int y) { + return new ControlItemStackOption(((ControlScrollableContent>) this).getContent(), value, y); + } + }; + } + }); + new PageFruit(this.getInfoPages(TreeMode.Fruit), new DatabaseTab(ExtraTrees.instance, "fruit.natural", 0), true); + new PageFruit(this.getInfoPages(TreeMode.Fruit), new DatabaseTab(ExtraTrees.instance, "fruit.potential", 0), false); + new PageWood(this.getInfoPages(TreeMode.Wood), new DatabaseTab(ExtraTrees.instance, "wood.natural", 0)); + new PagePlanksOverview(this.getInfoPages(TreeMode.Planks), new DatabaseTab(ExtraTrees.instance, "planks.overview", 0)); + new PagePlanksTrees(this.getInfoPages(TreeMode.Planks), new DatabaseTab(ExtraTrees.instance, "planks.natural", 1)); + } + + @Override + protected AbstractMod getMod() { + return ExtraTrees.instance; + } + + @Override + protected String getName() { + return "TreeDatabase"; + } + + enum TreeMode implements IDatabaseMode + { + Fruit, + Wood, + Planks; + + @Override + public String getName() { + return ExtraTrees.proxy.localise("gui.database.mode." + this.name().toLowerCase()); + } + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/WindowBrewery.java b/src/main/java/binnie/craftgui/extratrees/dictionary/WindowBrewery.java new file mode 100644 index 00000000..452f9db4 --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/WindowBrewery.java @@ -0,0 +1,57 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import binnie.craftgui.minecraft.control.ControlErrorState; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.minecraft.control.ControlEnergyBar; +import binnie.craftgui.minecraft.control.ControlLiquidTank; +import binnie.craftgui.minecraft.control.ControlSlot; +import binnie.extratrees.machines.Brewery; +import binnie.craftgui.minecraft.control.ControlSlotArray; +import binnie.core.machines.Machine; +import binnie.extratrees.ExtraTrees; +import binnie.core.AbstractMod; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.minecraft.Window; + +public class WindowBrewery extends Window +{ + public WindowBrewery(final EntityPlayer player, final IInventory inventory, final Side side) { + super(228.0f, 218.0f, player, inventory, side); + } + + @Override + protected AbstractMod getMod() { + return ExtraTrees.instance; + } + + @Override + protected String getName() { + return "Brewery"; + } + + @Override + public void initialiseClient() { + this.setTitle(Machine.getMachine(this.getInventory()).getPackage().getDisplayName()); + new ControlSlotArray(this, 42, 32, 1, 3).create(Brewery.slotRecipeGrains); + new ControlSlot(this, 16.0f, 41.0f).assign(Brewery.slotRecipeInput); + new ControlSlot(this, 105.0f, 77.0f).assign(Brewery.slotRecipeYeast); + new ControlLiquidTank(this, 76, 32).setTankID(Brewery.tankInput); + new ControlLiquidTank(this, 162, 32).setTankID(Brewery.tankOutput); + new ControlEnergyBar(this, 196, 32, 16, 60, Position.Bottom); + new ControlBreweryProgress(this, 110.0f, 32.0f); + new ControlSlotArray(this, (int) (this.getSize().x() / 2.0f - 81.0f), 104, 9, 1).create(Brewery.slotInventory); + new ControlPlayerInventory(this); + new ControlErrorState(this, 133.0f, 79.0f); + } + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + return new WindowBrewery(player, inventory, side); + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/WindowDistillery.java b/src/main/java/binnie/craftgui/extratrees/dictionary/WindowDistillery.java new file mode 100644 index 00000000..534df63b --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/WindowDistillery.java @@ -0,0 +1,55 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import binnie.craftgui.minecraft.control.ControlErrorState; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.minecraft.control.ControlEnergyBar; +import binnie.extratrees.machines.Distillery; +import binnie.craftgui.minecraft.control.ControlLiquidTank; +import binnie.core.machines.Machine; +import binnie.extratrees.ExtraTrees; +import binnie.core.AbstractMod; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.minecraft.Window; + +public class WindowDistillery extends Window +{ + public WindowDistillery(final EntityPlayer player, final IInventory inventory, final Side side) { + super(224.0f, 192.0f, player, inventory, side); + } + + @Override + protected AbstractMod getMod() { + return ExtraTrees.instance; + } + + @Override + protected String getName() { + return "Distillery"; + } + + @Override + public void initialiseClient() { + this.setTitle(Machine.getMachine(this.getInventory()).getPackage().getDisplayName()); + int x = 16; + new ControlLiquidTank(this, x, 35).setTankID(Distillery.tankInput); + x += 34; + new ControlDistilleryProgress(this, x, 32.0f); + x += 64; + new ControlLiquidTank(this, x, 35).setTankID(Distillery.tankOutput); + x += 34; + new ControlEnergyBar(this, x, 36, 60, 16, Position.Left); + new ControlPlayerInventory(this); + new ControlErrorState(this, x + 21, 62.0f); + } + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + return new WindowDistillery(player, inventory, side); + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/WindowLepidopteristDatabase.java b/src/main/java/binnie/craftgui/extratrees/dictionary/WindowLepidopteristDatabase.java new file mode 100644 index 00000000..5c99227f --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/WindowLepidopteristDatabase.java @@ -0,0 +1,54 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import binnie.craftgui.mod.database.PageBreeder; +import binnie.craftgui.mod.database.PageBranchSpecies; +import binnie.craftgui.mod.database.PageBranchOverview; +import binnie.craftgui.mod.database.PageSpeciesMutations; +import binnie.craftgui.mod.database.PageSpeciesResultant; +import binnie.craftgui.mod.database.PageSpeciesClassification; +import binnie.core.AbstractMod; +import binnie.craftgui.mod.database.DatabaseTab; +import binnie.extratrees.ExtraTrees; +import binnie.craftgui.mod.database.PageSpeciesOverview; +import binnie.craftgui.minecraft.Window; +import binnie.Binnie; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.mod.database.WindowAbstractDatabase; + +public class WindowLepidopteristDatabase extends WindowAbstractDatabase +{ + public WindowLepidopteristDatabase(final EntityPlayer player, final Side side, final boolean nei) { + super(player, side, nei, Binnie.Genetics.mothBreedingSystem, 160.0f); + } + + public static Window create(final EntityPlayer player, final Side side, final boolean nei) { + return new WindowLepidopteristDatabase(player, side, nei); + } + + @Override + protected void addTabs() { + new PageSpeciesOverview(this.getInfoPages(Mode.Species), new DatabaseTab(ExtraTrees.instance, "butterfly.species.overview", 0)); + new PageSpeciesClassification(this.getInfoPages(Mode.Species), new DatabaseTab(ExtraTrees.instance, "butterfly.species.classification", 0)); + new PageSpeciesImage(this.getInfoPages(Mode.Species), new DatabaseTab(ExtraTrees.instance, "butterfly.species.specimen", 0)); + new PageSpeciesResultant(this.getInfoPages(Mode.Species), new DatabaseTab(ExtraTrees.instance, "butterfly.species.resultant", 0)); + new PageSpeciesMutations(this.getInfoPages(Mode.Species), new DatabaseTab(ExtraTrees.instance, "butterfly.species.further", 0)); + new PageBranchOverview(this.getInfoPages(Mode.Branches), new DatabaseTab(ExtraTrees.instance, "butterfly.branches.overview", 0)); + new PageBranchSpecies(this.getInfoPages(Mode.Branches), new DatabaseTab(ExtraTrees.instance, "butterfly.branches.species", 0)); + new PageBreeder(this.getInfoPages(Mode.Breeder), this.getUsername(), new DatabaseTab(ExtraTrees.instance, "butterfly.breeder", 0)); + } + + @Override + protected AbstractMod getMod() { + return ExtraTrees.instance; + } + + @Override + protected String getName() { + return "MothDatabase"; + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/WindowLumbermill.java b/src/main/java/binnie/craftgui/extratrees/dictionary/WindowLumbermill.java new file mode 100644 index 00000000..8dd9931a --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/WindowLumbermill.java @@ -0,0 +1,55 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import binnie.craftgui.minecraft.control.ControlErrorState; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.minecraft.control.ControlEnergyBar; +import binnie.craftgui.minecraft.control.ControlLiquidTank; +import binnie.extratrees.machines.Lumbermill; +import binnie.craftgui.minecraft.control.ControlSlot; +import binnie.core.machines.Machine; +import binnie.extratrees.ExtraTrees; +import binnie.core.AbstractMod; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.minecraft.Window; + +public class WindowLumbermill extends Window +{ + public WindowLumbermill(final EntityPlayer player, final IInventory inventory, final Side side) { + super(220.0f, 192.0f, player, inventory, side); + } + + @Override + protected AbstractMod getMod() { + return ExtraTrees.instance; + } + + @Override + protected String getName() { + return "Lumbermill"; + } + + @Override + public void initialiseClient() { + this.setTitle(Machine.getMachine(this.getInventory()).getPackage().getDisplayName()); + new ControlSlot(this, 42.0f, 43.0f).assign(Lumbermill.slotWood); + new ControlSlot(this, 148.0f, 43.0f).assign(Lumbermill.slotPlanks); + new ControlSlot(this, 172.0f, 28.0f).assign(Lumbermill.slotBark); + new ControlSlot(this, 172.0f, 58.0f).assign(Lumbermill.slotSawdust); + new ControlLumbermillProgress(this, 70.0f, 43.0f); + new ControlLiquidTank(this, 16, 32); + new ControlEnergyBar(this, 8, 112, 16, 60, Position.Bottom); + new ControlPlayerInventory(this); + new ControlErrorState(this, 95.0f, 73.0f); + } + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + return new WindowLumbermill(player, inventory, side); + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/WindowPress.java b/src/main/java/binnie/craftgui/extratrees/dictionary/WindowPress.java new file mode 100644 index 00000000..6e09f713 --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/WindowPress.java @@ -0,0 +1,72 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import net.minecraft.item.ItemStack; +import binnie.core.machines.power.ErrorState; +import net.minecraft.nbt.NBTTagCompound; +import binnie.craftgui.minecraft.InventoryType; +import binnie.craftgui.minecraft.control.ControlErrorState; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.minecraft.control.ControlEnergyBar; +import binnie.craftgui.minecraft.control.ControlLiquidTank; +import binnie.extratrees.machines.Press; +import binnie.craftgui.minecraft.control.ControlSlot; +import binnie.core.machines.Machine; +import binnie.extratrees.ExtraTrees; +import binnie.core.AbstractMod; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.minecraft.Window; + +public class WindowPress extends Window +{ + public WindowPress(final EntityPlayer player, final IInventory inventory, final Side side) { + super(194.0f, 192.0f, player, inventory, side); + } + + @Override + protected AbstractMod getMod() { + return ExtraTrees.instance; + } + + @Override + protected String getName() { + return "Press"; + } + + @Override + public void initialiseClient() { + this.setTitle(Machine.getMachine(this.getInventory()).getPackage().getDisplayName()); + new ControlSlot(this, 24.0f, 52.0f).assign(Press.slotFruit); + new ControlLiquidTank(this, 99, 32).setTankID(Press.tankWater); + new ControlEnergyBar(this, 154, 32, 16, 60, Position.Bottom); + new ControlPlayerInventory(this); + new ControlErrorState(this, 128.0f, 54.0f); + new ControlFruitPressProgress(this, 62.0f, 24.0f); + ((Window) this.getSuperParent()).getContainer().getOrCreateSlot(InventoryType.Machine, Press.slotCurrent); + } + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + return new WindowPress(player, inventory, side); + } + + @Override + public void recieveGuiNBT(final Side side, final EntityPlayer player, final String name, final NBTTagCompound action) { + final Press.ComponentFruitPressLogic logic = Machine.getInterface(Press.ComponentFruitPressLogic.class, this.getInventory()); + super.recieveGuiNBT(side, player, name, action); + if (side == Side.SERVER && name.equals("fruitpress-click")) { + if (logic.canWork() == null && (logic.canProgress() == null || logic.canProgress() instanceof ErrorState.InsufficientPower)) { + logic.alterProgress(2.0f); + } + else if (side == Side.SERVER && name.equals("clear-fruit")) { + logic.setProgress(0.0f); + this.getInventory().setInventorySlotContents(Press.slotCurrent, (ItemStack) null); + } + } + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/WindowSetSquare.java b/src/main/java/binnie/craftgui/extratrees/dictionary/WindowSetSquare.java new file mode 100644 index 00000000..40339320 --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/WindowSetSquare.java @@ -0,0 +1,38 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import net.minecraft.world.World; +import binnie.extratrees.ExtraTrees; +import binnie.core.AbstractMod; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.minecraft.Window; + +public class WindowSetSquare extends Window +{ + public WindowSetSquare(final EntityPlayer player, final IInventory inventory, final Side side) { + super(150.0f, 150.0f, player, inventory, side); + } + + @Override + protected AbstractMod getMod() { + return ExtraTrees.instance; + } + + @Override + protected String getName() { + return null; + } + + @Override + public void initialiseClient() { + } + + public static Window create(final EntityPlayer player, final World world, final int x, final int y, final int z, final Side side) { + return new WindowSetSquare(player, null, side); + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/dictionary/WindowWoodworker.java b/src/main/java/binnie/craftgui/extratrees/dictionary/WindowWoodworker.java new file mode 100644 index 00000000..54e8c9ac --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/dictionary/WindowWoodworker.java @@ -0,0 +1,84 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.dictionary; + +import binnie.extratrees.machines.DesignerType; +import binnie.extratrees.ExtraTrees; +import binnie.core.AbstractMod; +import binnie.craftgui.events.EventHandler; +import binnie.craftgui.events.EventTextEdit; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.extratrees.machines.Designer; +import binnie.craftgui.minecraft.control.ControlSlot; +import binnie.craftgui.minecraft.control.ControlErrorState; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.craftgui.controls.scroll.ControlScrollableContent; +import binnie.craftgui.minecraft.MinecraftGUI; +import binnie.craftgui.window.Panel; +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.core.BinnieCore; +import binnie.craftgui.core.geometry.IArea; +import binnie.core.machines.Machine; +import binnie.craftgui.controls.ControlTextEdit; +import binnie.craftgui.minecraft.Window; + +public class WindowWoodworker extends Window +{ + ControlTextEdit textEdit; + ControlTileSelect tileSelect; + + @Override + public void initialiseClient() { + this.setTitle(Machine.getMachine(this.getInventory()).getPackage().getDisplayName()); + new ControlText(this, new IArea(190.0f, 36.0f, 114.0f, 10.0f), BinnieCore.proxy.localise("gui.design"), TextJustification.TopCenter).setColour(4473924); + new Panel(this, 188.0f, 48.0f, 118.0f, 126.0f, MinecraftGUI.PanelType.Gray); + this.textEdit = new ControlTextEdit(this, 188.0f, 178.0f, 118.0f, 12.0f); + final ControlScrollableContent scroll = new ControlScrollableContent(this, 190.0f, 50.0f, 114.0f, 122.0f, 12.0f); + scroll.setScrollableContent(this.tileSelect = new ControlTileSelect(scroll, 0.0f, 0.0f)); + new ControlPlayerInventory(this).setPosition(new IPoint(14.0f, 96.0f)); + new ControlErrorState(this, 76.0f, 65.0f); + if (this.getInventory() != null) { + final ControlSlot slotWood1 = new ControlSlot(this, 22.0f, 34.0f); + slotWood1.assign(Designer.design1Slot); + final ControlSlot slotWood2 = new ControlSlot(this, 62.0f, 34.0f); + slotWood2.assign(Designer.design2Slot); + final ControlSlot slotBeeswax = new ControlSlot(this, 42.0f, 64.0f); + slotBeeswax.assign(Designer.beeswaxSlot); + final ControlRecipeSlot slotFinished = new ControlRecipeSlot(this, 112, 34); + } + } + + public WindowWoodworker(final EntityPlayer player, final IInventory inventory, final Side side) { + super(320.0f, 216.0f, player, inventory, side); + this.addEventHandler(new EventTextEdit.Handler() { + @Override + public void onEvent(final EventTextEdit event) { + WindowWoodworker.this.tileSelect.refresh(event.getValue()); + } + }.setOrigin(EventHandler.Origin.DirectChild, this)); + } + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + return new WindowWoodworker(player, inventory, side); + } + + @Override + protected AbstractMod getMod() { + return ExtraTrees.instance; + } + + @Override + protected String getName() { + return "Woodworker"; + } + + public DesignerType getDesignerType() { + return Machine.getInterface(Designer.ComponentWoodworkerRecipe.class, this.getInventory()).getDesignerType(); + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/kitchen/ControlDropDownMenu.java b/src/main/java/binnie/craftgui/extratrees/kitchen/ControlDropDownMenu.java new file mode 100644 index 00000000..5d051fcb --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/kitchen/ControlDropDownMenu.java @@ -0,0 +1,21 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.kitchen; + +import binnie.craftgui.core.Attribute; +import binnie.craftgui.minecraft.MinecraftGUI; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.window.Panel; + +public class ControlDropDownMenu extends Panel +{ + public boolean stayOpenOnChildClick; + + public ControlDropDownMenu(final IWidget parent, final float x, final float y, final float width, final float height) { + super(parent, x, y, width, 2.0f, MinecraftGUI.PanelType.Gray); + this.stayOpenOnChildClick = false; + this.addAttribute(Attribute.CanFocus); + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/kitchen/ControlDropdownButton.java b/src/main/java/binnie/craftgui/extratrees/kitchen/ControlDropdownButton.java new file mode 100644 index 00000000..544e7eb1 --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/kitchen/ControlDropdownButton.java @@ -0,0 +1,33 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.kitchen; + +import binnie.craftgui.minecraft.Window; +import binnie.craftgui.events.EventMouse; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.button.ControlButton; + +public abstract class ControlDropdownButton extends ControlButton +{ + public ControlDropdownButton(final IWidget parent, final float x, final float y, final float width, final float height, final String text) { + super(parent, x, y, width, height, text); + this.addSelfEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + ControlDropDownMenu menu = ControlDropdownButton.this.getWidget(ControlDropDownMenu.class); + ControlDropdownButton.this.deleteChild(ControlDropdownButton.this.getWidget(ControlDropDownMenu.class)); + if (ControlDropdownButton.this.getWidget(ControlDropDownMenu.class) == null) { + menu = ControlDropdownButton.this.createDropDownMenu(); + Window.get(ControlDropdownButton.this.getWidget()).setFocusedWidget(menu); + } + else { + ControlDropdownButton.this.deleteChild(ControlDropdownButton.this.getWidget(ControlDropDownMenu.class)); + } + } + }); + } + + public abstract ControlDropDownMenu createDropDownMenu(); +} diff --git a/src/main/java/binnie/craftgui/extratrees/kitchen/ControlFluidDisplay.java b/src/main/java/binnie/craftgui/extratrees/kitchen/ControlFluidDisplay.java new file mode 100644 index 00000000..40958f78 --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/kitchen/ControlFluidDisplay.java @@ -0,0 +1,91 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.kitchen; + +import binnie.craftgui.core.Tooltip; +import net.minecraft.util.IIcon; +import net.minecraftforge.fluids.Fluid; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import org.lwjgl.opengl.GL11; +import binnie.craftgui.minecraft.Window; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.Attribute; +import net.minecraftforge.fluids.FluidStack; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +public class ControlFluidDisplay extends Control implements ITooltip +{ + FluidStack itemStack; + public boolean hastooltip; + + public void setTooltip() { + this.hastooltip = true; + this.addAttribute(Attribute.MouseOver); + } + + public ControlFluidDisplay(final IWidget parent, final float f, final float y) { + this(parent, f, y, 16.0f); + } + + public ControlFluidDisplay(final IWidget parent, final float f, final float y, final FluidStack stack, final boolean tooltip) { + this(parent, f, y, 16.0f); + this.setItemStack(stack); + if (tooltip) { + this.setTooltip(); + } + } + + public ControlFluidDisplay(final IWidget parent, final float x, final float y, final float size) { + super(parent, x, y, size, size); + this.itemStack = null; + this.hastooltip = false; + } + + @Override + public void onRenderForeground() { + if (this.itemStack == null) { + return; + } + final IPoint relativeToWindow = this.getAbsolutePosition().sub(this.getSuperParent().getPosition()); + if (relativeToWindow.x() > Window.get(this).getSize().x() + 100.0f || relativeToWindow.y() > Window.get(this).getSize().y() + 100.0f) { + return; + } + if (this.itemStack != null) { + final Fluid fluid = this.itemStack.getFluid(); + final int hex = fluid.getColor(this.itemStack); + final int r = (hex & 0xFF0000) >> 16; + final int g = (hex & 0xFF00) >> 8; + final int b = hex & 0xFF; + final IIcon icon = this.itemStack.getFluid().getIcon(this.itemStack); + GL11.glColor4f(r / 255.0f, g / 255.0f, b / 255.0f, 1.0f); + GL11.glEnable(3042); + GL11.glBlendFunc(770, 771); + if (this.getSize().x() != 16.0f) { + GL11.glPushMatrix(); + final float scale = this.getSize().x() / 16.0f; + GL11.glScalef(scale, scale, 1.0f); + CraftGUI.Render.iconBlock(IPoint.ZERO, this.itemStack.getFluid().getIcon(this.itemStack)); + GL11.glPopMatrix(); + } + else { + CraftGUI.Render.iconBlock(IPoint.ZERO, this.itemStack.getFluid().getIcon(this.itemStack)); + } + GL11.glDisable(3042); + } + } + + public void setItemStack(final FluidStack itemStack) { + this.itemStack = itemStack; + } + + @Override + public void getTooltip(final Tooltip tooltip) { + if (this.hastooltip && this.itemStack != null) { + tooltip.add(this.itemStack.getLocalizedName()); + } + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/kitchen/ControlSlotFluid.java b/src/main/java/binnie/craftgui/extratrees/kitchen/ControlSlotFluid.java new file mode 100644 index 00000000..90a09a41 --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/kitchen/ControlSlotFluid.java @@ -0,0 +1,70 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.kitchen; + +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.events.EventWidget; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.IWidget; +import net.minecraftforge.fluids.FluidStack; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +public class ControlSlotFluid extends Control implements ITooltip +{ + ControlFluidDisplay itemDisplay; + FluidStack fluidStack; + + public ControlSlotFluid(final IWidget parent, final int x, final int y, final FluidStack fluid) { + this(parent, x, y, 18, fluid); + } + + public ControlSlotFluid(final IWidget parent, final int x, final int y, final int size, final FluidStack fluid) { + super(parent, x, y, size, size); + this.addAttribute(Attribute.MouseOver); + this.itemDisplay = new ControlFluidDisplay(this, 1.0f, 1.0f, size - 2); + this.fluidStack = fluid; + this.addSelfEventHandler(new EventWidget.ChangeSize.Handler() { + @Override + public void onEvent(final EventWidget.ChangeSize event) { + if (ControlSlotFluid.this.itemDisplay != null) { + ControlSlotFluid.this.itemDisplay.setSize(ControlSlotFluid.this.getSize().sub(new IPoint(2.0f, 2.0f))); + } + } + }); + } + + @Override + public void onRenderBackground() { + final int size = (int) this.getSize().x(); + CraftGUI.Render.texture(CraftGUITexture.Slot, this.getArea()); + if (this.getSuperParent().getMousedOverWidget() == this) { + CraftGUI.Render.gradientRect(new IArea(new IPoint(1.0f, 1.0f), this.getArea().size().sub(new IPoint(2.0f, 2.0f))), -2130706433, -2130706433); + } + } + + @Override + public void onUpdateClient() { + super.onUpdateClient(); + this.itemDisplay.setItemStack(this.getFluidStack()); + } + + @Override + public void getTooltip(final Tooltip tooltip) { + final FluidStack item = this.getFluidStack(); + if (item == null) { + return; + } + tooltip.add(item.getFluid().getLocalizedName()); + } + + public FluidStack getFluidStack() { + return this.fluidStack; + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/kitchen/ControlSlotGlassware.java b/src/main/java/binnie/craftgui/extratrees/kitchen/ControlSlotGlassware.java new file mode 100644 index 00000000..764eca77 --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/kitchen/ControlSlotGlassware.java @@ -0,0 +1,36 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.kitchen; + +import net.minecraft.item.ItemStack; +import binnie.craftgui.core.IWidget; +import binnie.extratrees.alcohol.Glassware; +import binnie.craftgui.controls.core.IControlValue; +import binnie.craftgui.minecraft.control.ControlSlotBase; + +public class ControlSlotGlassware extends ControlSlotBase implements IControlValue +{ + Glassware glassware; + + public ControlSlotGlassware(final IWidget parent, final int x, final int y, final Glassware glassware) { + super(parent, x, y); + this.glassware = glassware; + } + + @Override + public Glassware getValue() { + return this.glassware; + } + + @Override + public void setValue(final Glassware value) { + this.glassware = value; + } + + @Override + public ItemStack getItemStack() { + return this.glassware.get(1); + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/kitchen/ControlTankSlot.java b/src/main/java/binnie/craftgui/extratrees/kitchen/ControlTankSlot.java new file mode 100644 index 00000000..18d04626 --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/kitchen/ControlTankSlot.java @@ -0,0 +1,45 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.kitchen; + +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.minecraft.Window; +import net.minecraft.nbt.NBTTagCompound; +import binnie.craftgui.events.EventMouse; +import binnie.craftgui.core.IWidget; + +public class ControlTankSlot extends ControlSlotFluid +{ + int tankID; + + public ControlTankSlot(final IWidget parent, final int x, final int y, final int i) { + super(parent, x, y, null); + this.tankID = 0; + this.tankID = i; + this.addSelfEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + if (event.getButton() == 0) { + final NBTTagCompound nbt = new NBTTagCompound(); + nbt.setByte("id", (byte) ControlTankSlot.this.tankID); + Window.get(ControlTankSlot.this.getWidget()).sendClientAction("tank-click", nbt); + } + } + }); + } + + @Override + public void onUpdateClient() { + this.fluidStack = Window.get(this).getContainer().getTankInfo(this.tankID).liquid; + final int height = (int) (16.0f * (((this.fluidStack == null) ? 0 : this.fluidStack.amount) / 1000.0f)); + this.itemDisplay.setCroppedZone(this.itemDisplay, new IArea(0.0f, 16 - height, 16.0f, 16.0f)); + super.onUpdateClient(); + } + + @Override + public void onRenderBackground() { + super.onRenderBackground(); + } +} diff --git a/src/main/java/binnie/craftgui/extratrees/kitchen/WindowBottleRack.java b/src/main/java/binnie/craftgui/extratrees/kitchen/WindowBottleRack.java new file mode 100644 index 00000000..819c7756 --- /dev/null +++ b/src/main/java/binnie/craftgui/extratrees/kitchen/WindowBottleRack.java @@ -0,0 +1,46 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.extratrees.kitchen; + +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.core.machines.Machine; +import binnie.extratrees.ExtraTrees; +import binnie.core.AbstractMod; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.minecraft.Window; + +public class WindowBottleRack extends Window +{ + public WindowBottleRack(final EntityPlayer player, final IInventory inventory, final Side side) { + super(248.0f, 180.0f, player, inventory, side); + } + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + return new WindowBottleRack(player, inventory, side); + } + + @Override + protected AbstractMod getMod() { + return ExtraTrees.instance; + } + + @Override + protected String getName() { + return "BottleBank"; + } + + @Override + public void initialiseClient() { + this.setTitle(Machine.getMachine(this.getInventory()).getPackage().getDisplayName()); + for (int i = 0; i < 36; ++i) { + final int x = i % 12; + final int y = i / 12; + new ControlTankSlot(this, 16 + x * 18, 32 + y * 18, i); + } + new ControlPlayerInventory(this); + } +} diff --git a/src/main/java/binnie/craftgui/genetics/machine/ControlGene.java b/src/main/java/binnie/craftgui/genetics/machine/ControlGene.java new file mode 100644 index 00000000..40fd6edf --- /dev/null +++ b/src/main/java/binnie/craftgui/genetics/machine/ControlGene.java @@ -0,0 +1,88 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.genetics.machine; + +import binnie.genetics.core.GeneticsTexture; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import binnie.craftgui.events.EventMouse; +import binnie.craftgui.core.Attribute; +import net.minecraft.item.ItemStack; +import binnie.genetics.genetics.Engineering; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.minecraft.Window; +import binnie.Binnie; +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.core.ITooltip; +import binnie.genetics.api.IGene; +import binnie.craftgui.controls.core.IControlValue; +import binnie.craftgui.controls.core.Control; + +public class ControlGene extends Control implements IControlValue, ITooltip +{ + IGene gene; + + @Override + public void getTooltip(final Tooltip tooltip) { + final String cName = Binnie.Genetics.getSystem(this.gene.getSpeciesRoot()).getChromosomeName(this.gene.getChromosome()); + tooltip.add(cName + ": " + this.gene.getName()); + if (this.isMouseOver() && this.canFill(Window.get(this).getHeldItemStack())) { + tooltip.add("Left click to assign gene"); + final IGene existingGene = Engineering.getGene(Window.get(this).getHeldItemStack(), this.gene.getChromosome().ordinal()); + if (existingGene == null) { + return; + } + final String dName = Binnie.Genetics.getSystem(this.gene.getSpeciesRoot()).getChromosomeName(this.gene.getChromosome()); + tooltip.add("Will replace " + dName + ": " + existingGene.getName()); + } + } + + private boolean canFill(final ItemStack stack) { + return stack != null && stack.stackSize == 1 && Engineering.isGeneAcceptor(stack) && Engineering.canAcceptGene(stack, this.getValue()); + } + + protected ControlGene(final IWidget parent, final float x, final float y) { + super(parent, x, y, 16.0f, 16.0f); + this.addAttribute(Attribute.MouseOver); + this.addSelfEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + if (ControlGene.this.canFill(Window.get(ControlGene.this.getWidget()).getHeldItemStack())) { + final NBTTagCompound action = new NBTTagCompound(); + final NBTTagCompound geneNBT = new NBTTagCompound(); + ControlGene.this.getValue().writeToNBT(geneNBT); + action.setTag("gene", geneNBT); + Window.get(ControlGene.this.getWidget()).sendClientAction("gene-select", action); + } + } + }); + } + + @Override + public IGene getValue() { + return this.gene; + } + + @Override + public void setValue(final IGene value) { + this.gene = value; + } + + @Override + public void onRenderForeground() { + } + + @Override + public void onRenderBackground() { + if (this.isMouseOver() && this.canFill(Window.get(this).getHeldItemStack())) { + CraftGUI.Render.solid(this.getArea(), -1); + CraftGUI.Render.solid(this.getArea().inset(1), -12303292); + } + CraftGUI.Render.colour(-1); + CraftGUI.Render.iconItem(IPoint.ZERO, GeneticsTexture.dnaIcon.getIcon()); + } +} diff --git a/src/main/java/binnie/craftgui/genetics/machine/ControlGeneScroll.java b/src/main/java/binnie/craftgui/genetics/machine/ControlGeneScroll.java new file mode 100644 index 00000000..20129a53 --- /dev/null +++ b/src/main/java/binnie/craftgui/genetics/machine/ControlGeneScroll.java @@ -0,0 +1,87 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.genetics.machine; + +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.controls.ControlText; +import binnie.core.genetics.Gene; +import java.util.ArrayList; +import forestry.api.genetics.IAllele; +import java.util.List; +import forestry.api.genetics.IChromosomeType; +import java.util.Map; +import binnie.Binnie; +import binnie.genetics.genetics.GeneTracker; +import binnie.craftgui.minecraft.Window; +import binnie.craftgui.core.IWidget; +import binnie.core.genetics.BreedingSystem; +import binnie.craftgui.controls.core.IControlValue; +import binnie.craftgui.controls.core.Control; + +public class ControlGeneScroll extends Control implements IControlValue +{ + private String filter; + private BreedingSystem system; + + protected ControlGeneScroll(final IWidget parent, final float x, final float y, final float w, final float h) { + super(parent, x, y, w, h); + this.filter = ""; + this.system = null; + } + + public void setFilter(final String filter) { + this.filter = filter.toLowerCase(); + this.refresh(); + } + + public void setGenes(final BreedingSystem system) { + this.system = system; + this.refresh(); + } + + public void refresh() { + this.deleteAllChildren(); + final GeneTracker tracker = GeneTracker.getTracker(Window.get(this).getWorld(), Window.get(this).getUsername()); + final Map> genes = Binnie.Genetics.getChromosomeMap(this.system.getSpeciesRoot()); + int x = 0; + int y = 0; + final boolean isNEI = ((WindowGeneBank) Window.get(this)).isNei; + for (final Map.Entry> entry : genes.entrySet()) { + final List discovered = new ArrayList(); + for (final IAllele allele : entry.getValue()) { + final Gene gene = new Gene(allele, entry.getKey(), this.system.getSpeciesRoot()); + if ((isNEI || tracker.isSequenced(new Gene(allele, entry.getKey(), this.system.getSpeciesRoot()))) && gene.getName().toLowerCase().contains(this.filter)) { + discovered.add(allele); + } + } + if (discovered.size() == 0) { + continue; + } + x = 0; + new ControlText(this, new IPoint(x, y), this.system.getChromosomeName(entry.getKey())); + y += 12; + for (final IAllele allele : discovered) { + if (x + 18 > this.getSize().x()) { + y += 20; + x = 0; + } + new ControlGene(this, x, y).setValue(new Gene(allele, entry.getKey(), this.system.getSpeciesRoot())); + x += 18; + } + y += 24; + } + this.setSize(new IPoint(this.getSize().x(), y)); + } + + @Override + public void setValue(final BreedingSystem system) { + this.setGenes(system); + } + + @Override + public BreedingSystem getValue() { + return this.system; + } +} diff --git a/src/main/java/binnie/craftgui/genetics/machine/ControlProcessTemporary.java b/src/main/java/binnie/craftgui/genetics/machine/ControlProcessTemporary.java new file mode 100644 index 00000000..78fa4c28 --- /dev/null +++ b/src/main/java/binnie/craftgui/genetics/machine/ControlProcessTemporary.java @@ -0,0 +1,26 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.genetics.machine; + +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.minecraft.control.ControlMachineProgress; + +public class ControlProcessTemporary extends ControlMachineProgress +{ + public ControlProcessTemporary(final IWidget parent, final int x, final int y, final int width, final int height) { + super(parent, x, y, null, null, null); + this.setSize(new IPoint(width, height)); + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.solid(this.getArea(), -4868683); + final float w = this.getSize().y() * this.progress / 100.0f; + CraftGUI.Render.solid(new IArea(this.getArea().x(), this.getArea().y(), w, this.getArea().h()), -65536); + } +} diff --git a/src/main/java/binnie/craftgui/genetics/machine/ControlSequencerProgress.java b/src/main/java/binnie/craftgui/genetics/machine/ControlSequencerProgress.java new file mode 100644 index 00000000..efd129c2 --- /dev/null +++ b/src/main/java/binnie/craftgui/genetics/machine/ControlSequencerProgress.java @@ -0,0 +1,55 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.genetics.machine; + +import net.minecraft.item.ItemStack; +import java.util.Random; +import binnie.core.machines.Machine; +import binnie.craftgui.minecraft.Window; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.window.Panel; +import binnie.craftgui.minecraft.MinecraftGUI; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.minecraft.control.ControlProgressBase; + +public class ControlSequencerProgress extends ControlProgressBase +{ + ControlText textControl; + + public ControlSequencerProgress(final IWidget parent, final int x, final int y) { + super(parent, x, y, 100.0f, 52.0f); + final Panel panel = new Panel(this, 0.0f, 0.0f, 100.0f, 52.0f, MinecraftGUI.PanelType.Gray); + this.textControl = new ControlText(panel, new IArea(4.0f, 4.0f, 92.0f, 44.0f), "", TextJustification.MiddleCenter); + } + + @Override + public void onUpdateClient() { + super.onUpdateClient(); + final ItemStack stack = Machine.getMachine(Window.get(this).getInventory()).getMachineUtil().getStack(5); + if (stack == null) { + this.textControl.setValue(""); + } + else { + final Random rand = new Random(stack.getDisplayName().length()); + String text = ""; + final String[] codes = { "A", "T", "G", "C" }; + final String[] colors = { "a", "d", "b", "c" }; + for (int i = 0; i < 65; ++i) { + final int k = rand.nextInt(4); + final String code = codes[k]; + if (rand.nextFloat() < this.progress) { + final String col = "§" + colors[k]; + text = text + "§r" + col + "§l" + code; + } + else { + text = text + "§r§7§k§l" + code; + } + } + this.textControl.setValue(text); + } + } +} diff --git a/src/main/java/binnie/craftgui/genetics/machine/ControlSplicerProgress.java b/src/main/java/binnie/craftgui/genetics/machine/ControlSplicerProgress.java new file mode 100644 index 00000000..600364b0 --- /dev/null +++ b/src/main/java/binnie/craftgui/genetics/machine/ControlSplicerProgress.java @@ -0,0 +1,55 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.genetics.machine; + +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.minecraft.control.ControlProgressBase; + +public class ControlSplicerProgress extends ControlProgressBase +{ + float strength; + + public ControlSplicerProgress(final IWidget parent, final float x, final float y, final float w, final float h) { + super(parent, x, y, w, h); + this.strength = 0.0f; + this.strength = 0.0f; + } + + @Override + public void onRenderBackground() { + final float progress = this.getProcess().getCurrentProgress() / 100.0f; + final float n = this.getProcess().getProcessTime() / 12.0f; + final float spacing = 10.0f; + final float range = this.w(); + final float h = 8.0f; + final float ooy = -((n - 1.0f) * spacing) - range / 2.0f; + final float ddy = (n - 1.0f) * spacing + range; + final float oy = ooy + ddy * progress; + for (int i = 0; i < n; ++i) { + final int seed = 432523; + final int[] colours = { 10027008, 30464, 255, 10057472 }; + int c1 = colours[(int) Math.abs(13.0 * Math.sin(i) + 48.0 * Math.cos(i) + 25.0 * Math.sin(7 * i)) % 4]; + int c2 = colours[(int) Math.abs(23.0 * Math.sin(i) + 28.0 * Math.cos(i) + 15.0 * Math.sin(7 * i)) % 4]; + int c3 = colours[(int) Math.abs(43.0 * Math.sin(i) + 38.0 * Math.cos(i) + 55.0 * Math.sin(7 * i)) % 4]; + int c4 = colours[(int) Math.abs(3.0 * Math.sin(i) + 18.0 * Math.cos(i) + 35.0 * Math.sin(7 * i)) % 4]; + final float y = oy + i * spacing; + if (y > -range / 2.0f && y < range / 2.0f) { + final float percentView = (float) Math.sqrt(1.0f - Math.abs(2.0f * y / range)); + final float offMovement = (this.h() - 2.0f * h) / 2.0f; + final int alpha = 16777216 * (int) (255.0f * percentView); + c1 += alpha; + c2 += alpha; + c3 += alpha; + c4 += alpha; + CraftGUI.Render.solidAlpha(new IArea(this.w() / 2.0f + y, offMovement * percentView, 4.0f, h / 2.0f), c1); + CraftGUI.Render.solidAlpha(new IArea(this.w() / 2.0f + y, offMovement * percentView + 4.0f, 4.0f, h / 2.0f), (y < 0.0f) ? c2 : c3); + CraftGUI.Render.solidAlpha(new IArea(this.w() / 2.0f + y, this.h() - offMovement * percentView - 8.0f, 4.0f, h / 2.0f), (y < 0.0f) ? c3 : c2); + CraftGUI.Render.solidAlpha(new IArea(this.w() / 2.0f + y, this.h() - offMovement * percentView - 4.0f, 4.0f, h / 2.0f), c4); + } + } + } +} diff --git a/src/main/java/binnie/craftgui/genetics/machine/WindowAcclimatiser.java b/src/main/java/binnie/craftgui/genetics/machine/WindowAcclimatiser.java new file mode 100644 index 00000000..091f33ce --- /dev/null +++ b/src/main/java/binnie/craftgui/genetics/machine/WindowAcclimatiser.java @@ -0,0 +1,79 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.genetics.machine; + +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.extrabees.core.ExtraBeeTexture; +import binnie.genetics.Genetics; +import binnie.core.AbstractMod; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.craftgui.minecraft.control.ControlErrorState; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.minecraft.control.ControlEnergyBar; +import binnie.craftgui.minecraft.control.ControlSlot; +import binnie.genetics.machine.Acclimatiser; +import binnie.craftgui.minecraft.control.ControlSlotArray; +import binnie.craftgui.minecraft.Window; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.resource.Texture; + +public class WindowAcclimatiser extends WindowMachine +{ + static Texture ProgressBase; + static Texture Progress; + public static final int[] slotReserve; + public static final int slotTarget = 4; + public static final int[] slotAcclimatiser; + public static final int[] slotDone; + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + return new WindowAcclimatiser(player, inventory, side); + } + + public WindowAcclimatiser(final EntityPlayer player, final IInventory inventory, final Side side) { + super(280, 198, player, inventory, side); + } + + @Override + public void initialiseClient() { + this.setTitle("Acclimatiser"); + int x = 16; + final int y = 32; + new ControlSlotArray(this, x, y, 2, 2).create(Acclimatiser.slotReserve); + x += 54; + new ControlSlot(this, x + 18, y).assign(4); + new ControlSlotArray(this, x, y + 18 + 18, 3, 1).create(Acclimatiser.slotAcclimatiser); + x += 72; + new ControlSlotArray(this, x, y, 2, 2).create(Acclimatiser.slotDone); + new ControlEnergyBar(this, 21, 115, 16, 60, Position.Bottom); + new ControlErrorState(this, 181.0f, 83.0f); + new ControlPlayerInventory(this); + } + + @Override + public String getTitle() { + return "Acclimatiser"; + } + + @Override + protected AbstractMod getMod() { + return Genetics.instance; + } + + @Override + protected String getName() { + return "Acclimatiser"; + } + + static { + WindowAcclimatiser.ProgressBase = new StandardTexture(64, 0, 130, 21, ExtraBeeTexture.GUIProgress.getTexture()); + WindowAcclimatiser.Progress = new StandardTexture(64, 21, 130, 21, ExtraBeeTexture.GUIProgress.getTexture()); + slotReserve = new int[] { 0, 1, 2, 3 }; + slotAcclimatiser = new int[] { 5, 6, 7 }; + slotDone = new int[] { 8, 9, 10, 11 }; + } +} diff --git a/src/main/java/binnie/craftgui/genetics/machine/WindowAnalyser.java b/src/main/java/binnie/craftgui/genetics/machine/WindowAnalyser.java new file mode 100644 index 00000000..1c9bd62c --- /dev/null +++ b/src/main/java/binnie/craftgui/genetics/machine/WindowAnalyser.java @@ -0,0 +1,89 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.genetics.machine; + +import binnie.extrabees.core.ExtraBeeTexture; +import binnie.genetics.Genetics; +import binnie.core.AbstractMod; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.craftgui.minecraft.control.ControlProgress; +import binnie.craftgui.minecraft.MinecraftGUI; +import binnie.craftgui.window.Panel; +import binnie.craftgui.minecraft.GUIIcon; +import binnie.craftgui.minecraft.control.ControlIconDisplay; +import binnie.craftgui.minecraft.control.ControlErrorState; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.minecraft.control.ControlEnergyBar; +import binnie.craftgui.minecraft.control.ControlSlotCharge; +import binnie.craftgui.minecraft.control.ControlSlot; +import binnie.genetics.machine.Analyser; +import binnie.craftgui.minecraft.control.ControlSlotArray; +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.genetics.core.GeneticsTexture; +import binnie.craftgui.minecraft.Window; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.resource.Texture; + +public class WindowAnalyser extends WindowMachine +{ + static Texture ProgressBase; + static Texture Progress; + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + return new WindowAnalyser(player, inventory, side); + } + + public WindowAnalyser(final EntityPlayer player, final IInventory inventory, final Side side) { + super(220, 210, player, inventory, side); + } + + @Override + public void initialiseClient() { + WindowAnalyser.ProgressBase = new StandardTexture(0, 51, 66, 40, GeneticsTexture.GUIProcess.getTexture()); + WindowAnalyser.Progress = new StandardTexture(66, 51, 66, 40, GeneticsTexture.GUIProcess.getTexture()); + int x = 16; + final int y = 32; + new ControlSlotArray(this, x, y, 2, 3).create(Analyser.slotReserve); + x += 28; + new ControlSlot(this, x, y + 54 + 8).assign(13); + new ControlSlotCharge(this, x + 20, y + 54 + 8, 13).setColour(10040319); + new ControlEnergyBar(this, x + 24 + 16, y + 54 + 8 + 1, 60, 16, Position.Left); + new ControlErrorState(this, x + 24 + 16 + 60 + 16, y + 54 + 8 + 1); + x -= 28; + new ControlIconDisplay(this, x + 36 + 2, y + 18, GUIIcon.ArrowRight.getIcon()); + x += 56; + new Panel(this, x, y, 76.0f, 50.0f, MinecraftGUI.PanelType.Tinted); + new ControlProgress(this, x + 5, y + 5, WindowAnalyser.ProgressBase, WindowAnalyser.Progress, Position.Left); + new ControlSlot(this, x + 38 - 9, y + 25 - 9).assign(6); + new ControlIconDisplay(this, x + 76 + 2, y + 18, GUIIcon.ArrowRight.getIcon()); + x += 96; + new ControlSlotArray(this, x, y, 2, 3).create(Analyser.slotFinished); + x += 52; + this.setTitle("Analyser"); + new ControlPlayerInventory(this); + } + + @Override + public String getTitle() { + return "Analyser"; + } + + @Override + protected AbstractMod getMod() { + return Genetics.instance; + } + + @Override + protected String getName() { + return "Analyser"; + } + + static { + WindowAnalyser.ProgressBase = new StandardTexture(0, 218, 142, 17, ExtraBeeTexture.GUIProgress.getTexture()); + WindowAnalyser.Progress = new StandardTexture(0, 201, 142, 17, ExtraBeeTexture.GUIProgress.getTexture()); + } +} diff --git a/src/main/java/binnie/craftgui/genetics/machine/WindowGeneBank.java b/src/main/java/binnie/craftgui/genetics/machine/WindowGeneBank.java new file mode 100644 index 00000000..75b00058 --- /dev/null +++ b/src/main/java/binnie/craftgui/genetics/machine/WindowGeneBank.java @@ -0,0 +1,194 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.genetics.machine; + +import binnie.genetics.Genetics; +import binnie.core.AbstractMod; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.controls.ControlText; +import java.util.Arrays; +import forestry.api.genetics.IAllele; +import java.util.List; +import forestry.api.genetics.IChromosomeType; +import java.util.Map; +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.minecraft.control.ControlTabIcon; +import binnie.craftgui.controls.tab.ControlTab; +import binnie.craftgui.controls.tab.ControlTabBar; +import binnie.craftgui.core.geometry.Position; +import binnie.Binnie; +import binnie.craftgui.events.EventTextEdit; +import binnie.craftgui.controls.ControlTextEdit; +import binnie.craftgui.controls.scroll.ControlScrollableContent; +import binnie.craftgui.minecraft.MinecraftGUI; +import binnie.craftgui.window.Panel; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.craftgui.events.EventHandler; +import binnie.core.genetics.BreedingSystem; +import binnie.craftgui.events.EventValueChanged; +import binnie.genetics.genetics.GeneTracker; +import binnie.craftgui.minecraft.Window; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.entity.player.EntityPlayerMP; +import binnie.genetics.genetics.Engineering; +import binnie.core.genetics.Gene; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.entity.player.EntityPlayer; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.util.IIcon; + +public class WindowGeneBank extends WindowMachine +{ + public static IIcon[] iconsDNA; + public boolean isNei; + ControlGeneScroll genes; + + @Override + public void recieveGuiNBT(final Side side, final EntityPlayer player, final String name, final NBTTagCompound action) { + super.recieveGuiNBT(side, player, name, action); + if (side == Side.SERVER && name.equals("gene-select")) { + final Gene gene = new Gene(action.getCompoundTag("gene")); + if (gene != null && !gene.isCorrupted()) { + final ItemStack held = this.getHeldItemStack(); + final ItemStack converted = Engineering.addGene(held, gene); + this.getPlayer().inventory.setItemStack(converted); + this.getPlayer().inventory.markDirty(); + if (this.getPlayer() instanceof EntityPlayerMP) { + ((EntityPlayerMP) this.getPlayer()).sendContainerToPlayer(player.inventoryContainer); + } + } + } + } + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + return new WindowGeneBank(player, inventory, side, false); + } + + public WindowGeneBank(final EntityPlayer player, final IInventory inventory, final Side side, final boolean isNEI) { + super(320, 224, player, inventory, side); + this.isNei = isNEI; + } + + @Override + public void initialiseServer() { + final GeneTracker tracker = GeneTracker.getTracker(this.getWorld(), this.getUsername()); + if (tracker != null) { + tracker.synchToPlayer(this.getPlayer()); + } + } + + @Override + public void initialiseClient() { + this.setTitle("Gene Bank"); + this.addEventHandler(new EventValueChanged.Handler() { + @Override + public void onEvent(final EventValueChanged event) { + if (event.value instanceof BreedingSystem) { + WindowGeneBank.this.genes.setValue((BreedingSystem) event.value); + } + } + }); + int boxX = 100; + int x = 16; + final int y = 32; + new ControlPlayerInventory(this, x, y); + x += 124; + boxX = x; + final int geneBoxWidth = 120; + new Panel(this, boxX + 24, 32.0f, geneBoxWidth, 120.0f, MinecraftGUI.PanelType.Black); + new Panel(this, boxX + 24 + geneBoxWidth, 32.0f, 14.0f, 120.0f, MinecraftGUI.PanelType.Gray); + final ControlScrollableContent scroll = new ControlScrollableContent(this, boxX + 24 + 2, 34.0f, geneBoxWidth + 10, 116.0f, 12.0f); + final ControlTextEdit edit = new ControlTextEdit(this, boxX + 27 + geneBoxWidth - 70, 18.0f, 80.0f, 12.0f); + this.addEventHandler(new EventTextEdit.Handler() { + @Override + public void onEvent(final EventTextEdit event) { + WindowGeneBank.this.genes.setFilter(event.getValue()); + } + }.setOrigin(EventHandler.Origin.Self, edit)); + scroll.setScrollableContent(this.genes = new ControlGeneScroll(scroll, 1.0f, 1.0f, geneBoxWidth, 116.0f)); + this.genes.setGenes(Binnie.Genetics.beeBreedingSystem); + final ControlTabBar tabBar = new ControlTabBar(this, boxX, 32.0f, 24.0f, 120.0f, Position.Left) { + @Override + public ControlTab createTab(final float x, final float y, final float w, final float h, final BreedingSystem value) { + return new ControlTabIcon(this, x, y, w, h, value) { + @Override + public void getTooltip(final Tooltip tooltip) { + tooltip.add(this.getValue().toString()); + int totalGenes = 0; + int seqGenes = 0; + final GeneTracker tracker = GeneTracker.getTracker(WindowGeneBank.this.getWorld(), WindowGeneBank.this.getUsername()); + final Map> genes = Binnie.Genetics.getChromosomeMap(this.getValue().getSpeciesRoot()); + for (final Map.Entry> entry : genes.entrySet()) { + totalGenes += entry.getValue().size(); + for (final IAllele allele : entry.getValue()) { + final Gene gene = new Gene(allele, entry.getKey(), this.getValue().getSpeciesRoot()); + if (tracker.isSequenced(gene)) { + ++seqGenes; + } + } + } + tooltip.add("" + seqGenes + "/" + totalGenes + " Genes"); + } + }; + } + }; + tabBar.setValues(Binnie.Genetics.getActiveSystems()); + tabBar.setValue(Binnie.Genetics.beeBreedingSystem); + boxX -= 8; + final ControlTabBar infoTabs = new ControlTabBar(this, boxX + 8, 160.0f, 16.0f, 50.0f, Position.Left); + infoTabs.setValues(Arrays.asList("Stats", "Ranking")); + infoTabs.setValue("Info"); + final Panel panelProject = new Panel(this, boxX + 24, 160.0f, geneBoxWidth + 20, 50.0f, MinecraftGUI.PanelType.Black); + int totalGenes = 0; + int seqGenes = 0; + for (final BreedingSystem system : Binnie.Genetics.getActiveSystems()) { + final GeneTracker tracker = GeneTracker.getTracker(this.getWorld(), this.getUsername()); + final Map> genes = Binnie.Genetics.getChromosomeMap(system.getSpeciesRoot()); + for (final Map.Entry> entry : genes.entrySet()) { + totalGenes += entry.getValue().size(); + for (final IAllele allele : entry.getValue()) { + final Gene gene = new Gene(allele, entry.getKey(), system.getSpeciesRoot()); + if (tracker.isSequenced(gene)) { + ++seqGenes; + } + } + } + } + new ControlText(panelProject, new IPoint(4.0f, 4.0f), "§nFull Genome Project"); + new ControlText(panelProject, new IPoint(4.0f, 18.0f), "§oSequenced §r" + seqGenes + "/" + totalGenes + " §oGenes"); + } + + @Override + public String getTitle() { + return "Gene Bank"; + } + + @Override + protected AbstractMod getMod() { + return Genetics.instance; + } + + @Override + protected String getName() { + return "GeneBank"; + } + + public static class ChromosomeType + { + IChromosomeType chromosome; + BreedingSystem system; + + public ChromosomeType(final IChromosomeType chromosome, final BreedingSystem system) { + this.chromosome = chromosome; + this.system = system; + } + + @Override + public String toString() { + return this.system.getChromosomeName(this.chromosome); + } + } +} diff --git a/src/main/java/binnie/craftgui/genetics/machine/WindowGeneBankNEI.java b/src/main/java/binnie/craftgui/genetics/machine/WindowGeneBankNEI.java new file mode 100644 index 00000000..cb3ac572 --- /dev/null +++ b/src/main/java/binnie/craftgui/genetics/machine/WindowGeneBankNEI.java @@ -0,0 +1,17 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.genetics.machine; + +import binnie.craftgui.minecraft.Window; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; + +public class WindowGeneBankNEI +{ + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + return new WindowGeneBank(player, inventory, side, true); + } +} diff --git a/src/main/java/binnie/craftgui/genetics/machine/WindowGeneProject.java b/src/main/java/binnie/craftgui/genetics/machine/WindowGeneProject.java new file mode 100644 index 00000000..90e1f3f5 --- /dev/null +++ b/src/main/java/binnie/craftgui/genetics/machine/WindowGeneProject.java @@ -0,0 +1,34 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.genetics.machine; + +import binnie.genetics.Genetics; +import binnie.core.AbstractMod; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.minecraft.Window; + +public class WindowGeneProject extends Window +{ + public WindowGeneProject(final EntityPlayer player, final IInventory inventory, final Side side) { + super(100.0f, 100.0f, player, inventory, side); + } + + @Override + protected AbstractMod getMod() { + return Genetics.instance; + } + + @Override + protected String getName() { + return "GeneProjects"; + } + + @Override + public void initialiseClient() { + this.setTitle("Gene Projects"); + } +} diff --git a/src/main/java/binnie/craftgui/genetics/machine/WindowGenepool.java b/src/main/java/binnie/craftgui/genetics/machine/WindowGenepool.java new file mode 100644 index 00000000..c31393f6 --- /dev/null +++ b/src/main/java/binnie/craftgui/genetics/machine/WindowGenepool.java @@ -0,0 +1,84 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.genetics.machine; + +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.extrabees.core.ExtraBeeTexture; +import binnie.genetics.Genetics; +import binnie.core.AbstractMod; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.craftgui.minecraft.control.ControlErrorState; +import binnie.craftgui.minecraft.control.ControlSlotCharge; +import binnie.craftgui.minecraft.control.ControlEnergyBar; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.minecraft.control.ControlMachineProgress; +import binnie.craftgui.minecraft.control.ControlSlot; +import binnie.craftgui.minecraft.GUIIcon; +import binnie.craftgui.minecraft.control.ControlIconDisplay; +import binnie.genetics.machine.Genepool; +import binnie.craftgui.minecraft.control.ControlSlotArray; +import binnie.craftgui.minecraft.control.ControlLiquidTank; +import binnie.craftgui.minecraft.Window; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.resource.Texture; + +public class WindowGenepool extends WindowMachine +{ + static Texture ProgressBase; + static Texture Progress; + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + return new WindowGenepool(player, inventory, side); + } + + public WindowGenepool(final EntityPlayer player, final IInventory inventory, final Side side) { + super(280, 198, player, inventory, side); + } + + @Override + public void initialiseClient() { + this.setTitle("Genepool"); + int x = 16; + final int y = 32; + new ControlLiquidTank(this, x, y).setTankID(1); + x += 26; + new ControlSlotArray(this, x, y + 3, 2, 3).create(Genepool.slotReserve); + x += 38; + new ControlIconDisplay(this, x, y + 3 + 18 + 1, GUIIcon.ArrowRight.getIcon()); + x += 18; + new ControlSlot(this, x, y + 3 + 18).assign(0); + x += 18; + new ControlMachineProgress(this, x, y + 19, WindowGenepool.ProgressBase, WindowGenepool.Progress, Position.Left); + x += 130; + new ControlLiquidTank(this, x, y).setTankID(0); + new ControlEnergyBar(this, 21, 115, 16, 60, Position.Bottom); + new ControlSlot(this, 121.0f, 82.0f).assign(7); + new ControlSlotCharge(this, 143, 82, 7).setColour(15722671); + new ControlErrorState(this, 181.0f, 83.0f); + new ControlPlayerInventory(this); + } + + @Override + public String getTitle() { + return "Genepool"; + } + + @Override + protected AbstractMod getMod() { + return Genetics.instance; + } + + @Override + protected String getName() { + return "Genepool"; + } + + static { + WindowGenepool.ProgressBase = new StandardTexture(64, 0, 130, 21, ExtraBeeTexture.GUIProgress.getTexture()); + WindowGenepool.Progress = new StandardTexture(64, 21, 130, 21, ExtraBeeTexture.GUIProgress.getTexture()); + } +} diff --git a/src/main/java/binnie/craftgui/genetics/machine/WindowGenomeAssembler.java b/src/main/java/binnie/craftgui/genetics/machine/WindowGenomeAssembler.java new file mode 100644 index 00000000..9f2723c7 --- /dev/null +++ b/src/main/java/binnie/craftgui/genetics/machine/WindowGenomeAssembler.java @@ -0,0 +1,38 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.genetics.machine; + +import binnie.genetics.Genetics; +import binnie.core.AbstractMod; +import binnie.craftgui.minecraft.Window; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; + +public class WindowGenomeAssembler extends WindowMachine +{ + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + return new WindowGenomeAssembler(player, inventory, side); + } + + public WindowGenomeAssembler(final EntityPlayer player, final IInventory inventory, final Side side) { + super(320, 240, player, inventory, side); + } + + @Override + public String getTitle() { + return "Genome Assembler"; + } + + @Override + protected AbstractMod getMod() { + return Genetics.instance; + } + + @Override + protected String getName() { + return "GenomeAssembler"; + } +} diff --git a/src/main/java/binnie/craftgui/genetics/machine/WindowIncubator.java b/src/main/java/binnie/craftgui/genetics/machine/WindowIncubator.java new file mode 100644 index 00000000..33e0f1ba --- /dev/null +++ b/src/main/java/binnie/craftgui/genetics/machine/WindowIncubator.java @@ -0,0 +1,85 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.genetics.machine; + +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.genetics.core.GeneticsTexture; +import binnie.genetics.Genetics; +import binnie.core.AbstractMod; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.craftgui.minecraft.control.ControlErrorState; +import binnie.craftgui.minecraft.control.ControlEnergyBar; +import binnie.craftgui.minecraft.control.ControlSlot; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.minecraft.control.ControlMachineProgress; +import binnie.craftgui.minecraft.GUIIcon; +import binnie.craftgui.minecraft.control.ControlIconDisplay; +import binnie.genetics.machine.Incubator; +import binnie.craftgui.minecraft.control.ControlSlotArray; +import binnie.craftgui.minecraft.control.ControlLiquidTank; +import binnie.craftgui.minecraft.Window; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.resource.Texture; + +public class WindowIncubator extends WindowMachine +{ + static Texture ProgressBase; + static Texture Progress; + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + return new WindowIncubator(player, inventory, side); + } + + public WindowIncubator(final EntityPlayer player, final IInventory inventory, final Side side) { + super(228, 196, player, inventory, side); + } + + @Override + public void initialiseClient() { + this.setTitle("Incubator"); + int x = 16; + final int y = 32; + new ControlLiquidTank(this, x, y).setTankID(0); + x += 26; + new ControlSlotArray(this, x, y + 3, 1, 3).create(Incubator.slotQueue); + x += 20; + new ControlIconDisplay(this, x, y + 3 + 10, GUIIcon.ArrowRight.getIcon()); + x += 18; + new ControlMachineProgress(this, x, y + 6, WindowIncubator.ProgressBase, WindowIncubator.Progress, Position.Left); + new ControlSlot(this, x + 11, y + 3 + 10).assign(3); + x += 40; + new ControlIconDisplay(this, x, y + 3 + 10, GUIIcon.ArrowRight.getIcon()); + x += 18; + new ControlSlotArray(this, x, y + 3, 1, 3).create(Incubator.slotOutput); + x += 26; + new ControlLiquidTank(this, x, y).setTankID(1); + x += 34; + new ControlEnergyBar(this, x, y + 3, 16, 54, Position.Bottom); + new ControlErrorState(this, 91.0f, 82.0f); + new ControlPlayerInventory(this); + } + + @Override + public String getTitle() { + return "Incubator"; + } + + @Override + protected AbstractMod getMod() { + return Genetics.instance; + } + + @Override + protected String getName() { + return "Incubator"; + } + + static { + WindowIncubator.ProgressBase = new StandardTexture(0, 91, 38, 32, GeneticsTexture.GUIProcess); + WindowIncubator.Progress = new StandardTexture(38, 91, 38, 32, GeneticsTexture.GUIProcess); + } +} diff --git a/src/main/java/binnie/craftgui/genetics/machine/WindowInoculator.java b/src/main/java/binnie/craftgui/genetics/machine/WindowInoculator.java new file mode 100644 index 00000000..e0410c46 --- /dev/null +++ b/src/main/java/binnie/craftgui/genetics/machine/WindowInoculator.java @@ -0,0 +1,80 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.genetics.machine; + +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.genetics.core.GeneticsTexture; +import binnie.genetics.Genetics; +import binnie.core.AbstractMod; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.minecraft.control.ControlErrorState; +import binnie.craftgui.minecraft.control.ControlEnergyBar; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.minecraft.control.ControlMachineProgress; +import binnie.craftgui.core.geometry.CraftGUIUtil; +import binnie.craftgui.minecraft.control.ControlSlot; +import binnie.craftgui.minecraft.control.ControlIconDisplay; +import binnie.craftgui.minecraft.GUIIcon; +import binnie.genetics.machine.Inoculator; +import binnie.craftgui.minecraft.control.ControlSlotArray; +import binnie.craftgui.minecraft.control.ControlLiquidTank; +import binnie.craftgui.minecraft.Window; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.resource.Texture; + +public class WindowInoculator extends WindowMachine +{ + static Texture ProgressBase; + static Texture Progress; + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + return new WindowInoculator(player, inventory, side); + } + + public WindowInoculator(final EntityPlayer player, final IInventory inventory, final Side side) { + super(266, 240, player, inventory, side); + } + + @Override + public void initialiseClient() { + this.setTitle("Inoculator"); + int x = 16; + final int y = 32; + new ControlLiquidTank(this, x, y + 18 + 16).setTankID(0); + CraftGUIUtil.horizontalGrid(x, y, new ControlSlotArray(this, 0, 0, 2, 1).create(Inoculator.slotSerumReserve), new ControlIconDisplay(this, 0.0f, 0.0f, GUIIcon.ArrowRight.getIcon()), new ControlSlot(this, 0.0f, 0.0f).assign(0), new ControlIconDisplay(this, 0.0f, 0.0f, GUIIcon.ArrowRight.getIcon()), new ControlSlotArray(this, 0, 0, 2, 1).create(Inoculator.slotSerumExpended)); + x += 18; + new ControlMachineProgress(this, x, y + 24, WindowInoculator.ProgressBase, WindowInoculator.Progress, Position.Left); + new ControlEnergyBar(this, 91, 118, 60, 16, Position.Left); + new ControlErrorState(this, 161.0f, 118.0f); + x += 142; + CraftGUIUtil.verticalGrid(x, y, TextJustification.MiddleLeft, 8.0f, new ControlSlotArray(this, x, y, 4, 1).create(Inoculator.slotReserve), new ControlSlot(this, x, y + 18 + 8).assign(9), new ControlSlotArray(this, x, y + 18 + 8 + 18 + 8, 4, 1).create(Inoculator.slotFinished)); + new ControlIconDisplay(this, x + 18, y + 18 + 2, GUIIcon.ArrowUpLeft.getIcon()); + new ControlIconDisplay(this, x + 18, y + 18 + 18, GUIIcon.ArrowLeftDown.getIcon()); + new ControlPlayerInventory(this); + } + + @Override + public String getTitle() { + return "Inoculator"; + } + + @Override + protected AbstractMod getMod() { + return Genetics.instance; + } + + @Override + protected String getName() { + return "Inoculator"; + } + + static { + WindowInoculator.ProgressBase = new StandardTexture(0, 72, 142, 72, GeneticsTexture.GUIProcess2.getTexture()); + WindowInoculator.Progress = new StandardTexture(0, 0, 142, 72, GeneticsTexture.GUIProcess2.getTexture()); + } +} diff --git a/src/main/java/binnie/craftgui/genetics/machine/WindowIsolator.java b/src/main/java/binnie/craftgui/genetics/machine/WindowIsolator.java new file mode 100644 index 00000000..60cd09ff --- /dev/null +++ b/src/main/java/binnie/craftgui/genetics/machine/WindowIsolator.java @@ -0,0 +1,90 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.genetics.machine; + +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.extrabees.core.ExtraBeeTexture; +import binnie.genetics.Genetics; +import binnie.core.AbstractMod; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.craftgui.minecraft.control.ControlErrorState; +import binnie.craftgui.minecraft.control.ControlEnergyBar; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.minecraft.control.ControlProgress; +import binnie.craftgui.minecraft.control.ControlSlotCharge; +import binnie.craftgui.minecraft.control.ControlSlot; +import binnie.craftgui.minecraft.GUIIcon; +import binnie.craftgui.minecraft.control.ControlIconDisplay; +import binnie.genetics.machine.Isolator; +import binnie.craftgui.minecraft.control.ControlSlotArray; +import binnie.craftgui.minecraft.control.ControlLiquidTank; +import binnie.craftgui.minecraft.Window; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.resource.Texture; + +public class WindowIsolator extends WindowMachine +{ + static Texture ProgressBase; + static Texture Progress; + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + return new WindowIsolator(player, inventory, side); + } + + public WindowIsolator(final EntityPlayer player, final IInventory inventory, final Side side) { + super(330, 208, player, inventory, side); + } + + @Override + public void initialiseClient() { + this.setTitle("Isolator"); + int x = 16; + final int y = 32; + new ControlLiquidTank(this, x, y).setTankID(0); + x += 26; + new ControlSlotArray(this, x, y + 3, 1, 3).create(Isolator.slotReserve); + x += 20; + new ControlIconDisplay(this, x, y + 3 + 1, GUIIcon.ArrowRight.getIcon()); + x += 18; + new ControlSlot(this, x, y + 3).assign(5); + new ControlSlot(this, x, y + 36 + 3).assign(0); + new ControlSlotCharge(this, x + 18 + 2, y + 36 + 3, 0).setColour(15722671); + x += 18; + new ControlProgress(this, x, y + 3, WindowIsolator.ProgressBase, WindowIsolator.Progress, Position.Left); + x += 142; + new ControlSlot(this, x, y + 3).assign(6); + new ControlSlot(this, x, y + 3 + 36).assign(1); + new ControlIconDisplay(this, x + 1, y + 3 + 19, GUIIcon.ArrowUp.getIcon()); + x += 20; + new ControlIconDisplay(this, x, y + 3 + 1, GUIIcon.ArrowRight.getIcon()); + x += 18; + new ControlSlotArray(this, x, y + 3, 2, 3).create(Isolator.slotFinished); + new ControlEnergyBar(this, 260, 130, 16, 60, Position.Bottom); + new ControlErrorState(this, 153.0f, 81.0f); + new ControlPlayerInventory(this); + } + + @Override + public String getTitle() { + return "Incubator"; + } + + @Override + protected AbstractMod getMod() { + return Genetics.instance; + } + + @Override + protected String getName() { + return "Isolator"; + } + + static { + WindowIsolator.ProgressBase = new StandardTexture(0, 218, 142, 17, ExtraBeeTexture.GUIProgress.getTexture()); + WindowIsolator.Progress = new StandardTexture(0, 201, 142, 17, ExtraBeeTexture.GUIProgress.getTexture()); + } +} diff --git a/src/main/java/binnie/craftgui/genetics/machine/WindowMachine.java b/src/main/java/binnie/craftgui/genetics/machine/WindowMachine.java new file mode 100644 index 00000000..cf53ed9e --- /dev/null +++ b/src/main/java/binnie/craftgui/genetics/machine/WindowMachine.java @@ -0,0 +1,24 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.genetics.machine; + +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.minecraft.Window; + +public abstract class WindowMachine extends Window +{ + public WindowMachine(final int width, final int height, final EntityPlayer player, final IInventory inventory, final Side side) { + super(width, height, player, inventory, side); + } + + public abstract String getTitle(); + + @Override + public void initialiseClient() { + this.setTitle(this.getTitle()); + } +} diff --git a/src/main/java/binnie/craftgui/genetics/machine/WindowPolymeriser.java b/src/main/java/binnie/craftgui/genetics/machine/WindowPolymeriser.java new file mode 100644 index 00000000..2d107dba --- /dev/null +++ b/src/main/java/binnie/craftgui/genetics/machine/WindowPolymeriser.java @@ -0,0 +1,83 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.genetics.machine; + +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.genetics.core.GeneticsTexture; +import binnie.genetics.Genetics; +import binnie.core.AbstractMod; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.craftgui.minecraft.control.ControlErrorState; +import binnie.craftgui.minecraft.control.ControlSlotCharge; +import binnie.craftgui.minecraft.control.ControlEnergyBar; +import binnie.craftgui.minecraft.control.ControlLiquidTank; +import binnie.craftgui.minecraft.control.ControlSlot; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.minecraft.control.ControlMachineProgress; +import binnie.craftgui.minecraft.GUIIcon; +import binnie.craftgui.minecraft.control.ControlIconDisplay; +import binnie.genetics.machine.Polymeriser; +import binnie.craftgui.minecraft.control.ControlSlotArray; +import binnie.craftgui.minecraft.Window; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.resource.Texture; + +public class WindowPolymeriser extends WindowMachine +{ + static Texture ProgressBase; + static Texture Progress; + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + return new WindowPolymeriser(player, inventory, side); + } + + public WindowPolymeriser(final EntityPlayer player, final IInventory inventory, final Side side) { + super(278, 212, player, inventory, side); + } + + @Override + public void initialiseClient() { + super.initialiseClient(); + int x = 16; + final int y = 38; + new ControlSlotArray(this, x, y, 1, 4).create(Polymeriser.slotSerumReserve); + new ControlIconDisplay(this, x + 18, y + 1, GUIIcon.ArrowRight.getIcon()); + x += 34; + new ControlMachineProgress(this, x + 18, y - 6, WindowPolymeriser.ProgressBase, WindowPolymeriser.Progress, Position.Left); + new ControlSlot(this, x, y).assign(0); + new ControlLiquidTank(this, x, y + 18 + 16, true).setTankID(0); + new ControlLiquidTank(this, x, y + 18 + 16 + 18 + 8, true).setTankID(1); + new ControlEnergyBar(this, x + 120, 96, 64, 16, Position.Left); + x += 40; + new ControlSlot(this, x + 30, y + 18 + 8).assign(1); + new ControlSlotCharge(this, x + 30 + 20, y + 18 + 8, 1).setColour(16766976); + x += 138; + new ControlSlotArray(this, x, y + 9, 2, 2).create(Polymeriser.slotSerumFinished); + final ControlErrorState errorState = new ControlErrorState(this, 244.0f, 97.0f); + new ControlPlayerInventory(this); + } + + @Override + public String getTitle() { + return "Polymeriser"; + } + + @Override + protected AbstractMod getMod() { + return Genetics.instance; + } + + @Override + protected String getName() { + return "Polymeriser"; + } + + static { + WindowPolymeriser.ProgressBase = new StandardTexture(76, 170, 160, 79, GeneticsTexture.GUIProcess.getTexture()); + WindowPolymeriser.Progress = new StandardTexture(76, 91, 160, 79, GeneticsTexture.GUIProcess.getTexture()); + } +} diff --git a/src/main/java/binnie/craftgui/genetics/machine/WindowSequencer.java b/src/main/java/binnie/craftgui/genetics/machine/WindowSequencer.java new file mode 100644 index 00000000..93f987af --- /dev/null +++ b/src/main/java/binnie/craftgui/genetics/machine/WindowSequencer.java @@ -0,0 +1,96 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.genetics.machine; + +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.extrabees.core.ExtraBeeTexture; +import binnie.genetics.Genetics; +import binnie.core.AbstractMod; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.craftgui.minecraft.control.ControlErrorState; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.minecraft.control.ControlEnergyBar; +import binnie.craftgui.minecraft.control.ControlSlotCharge; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.geometry.CraftGUIUtil; +import binnie.craftgui.minecraft.control.ControlSlot; +import binnie.craftgui.minecraft.control.ControlIconDisplay; +import binnie.craftgui.minecraft.GUIIcon; +import binnie.genetics.machine.Sequencer; +import binnie.craftgui.minecraft.control.ControlSlotArray; +import binnie.craftgui.core.geometry.TextJustification; +import net.minecraft.nbt.NBTTagCompound; +import binnie.craftgui.minecraft.Window; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.resource.Texture; + +public class WindowSequencer extends WindowMachine +{ + static Texture ProgressBase; + static Texture Progress; + ControlText slotText; + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + return new WindowSequencer(player, inventory, side); + } + + public WindowSequencer(final EntityPlayer player, final IInventory inventory, final Side side) { + super(226, 224, player, inventory, side); + } + + @Override + public void recieveGuiNBT(final Side side, final EntityPlayer player, final String name, final NBTTagCompound action) { + if (side == Side.CLIENT && name.equals("username")) { + this.slotText.setValue("§8Genes will be sequenced by " + action.getString("username")); + } + super.recieveGuiNBT(side, player, name, action); + } + + @Override + public void initialiseClient() { + this.setTitle("Sequencer"); + int x = 16; + int y = 32; + CraftGUIUtil.horizontalGrid(x, y, TextJustification.MiddleCenter, 2.0f, new ControlSlotArray(this, 0, 0, 2, 2).create(Sequencer.slotReserve), new ControlIconDisplay(this, 0.0f, 0.0f, GUIIcon.ArrowRight.getIcon()), new ControlSequencerProgress(this, 0, 0), new ControlIconDisplay(this, 0.0f, 0.0f, GUIIcon.ArrowRight.getIcon()), new ControlSlot(this, 0.0f, 0.0f).assign(6)); + final ControlSlot slotTarget = new ControlSlot(this, x + 96, y + 16); + slotTarget.assign(5); + x = 34; + y = 92; + this.slotText = new ControlText(this, new IArea(0.0f, y, this.w(), 12.0f), "§8Userless. Will not save sequences", TextJustification.MiddleCenter); + y += 20; + final ControlSlot slotDye = new ControlSlot(this, x, y); + slotDye.assign(0); + x += 20; + new ControlSlotCharge(this, x, y, 0).setColour(16750848); + x += 32; + new ControlEnergyBar(this, x, y, 60, 16, Position.Left); + x += 92; + final ControlErrorState errorState = new ControlErrorState(this, x, y + 1); + new ControlPlayerInventory(this); + } + + @Override + public String getTitle() { + return "Incubator"; + } + + @Override + protected AbstractMod getMod() { + return Genetics.instance; + } + + @Override + protected String getName() { + return "Sequencer"; + } + + static { + WindowSequencer.ProgressBase = new StandardTexture(64, 114, 98, 9, ExtraBeeTexture.GUIProgress.getTexture()); + WindowSequencer.Progress = new StandardTexture(64, 123, 98, 9, ExtraBeeTexture.GUIProgress.getTexture()); + } +} diff --git a/src/main/java/binnie/craftgui/genetics/machine/WindowSplicer.java b/src/main/java/binnie/craftgui/genetics/machine/WindowSplicer.java new file mode 100644 index 00000000..8eada42d --- /dev/null +++ b/src/main/java/binnie/craftgui/genetics/machine/WindowSplicer.java @@ -0,0 +1,76 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.genetics.machine; + +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.genetics.core.GeneticsTexture; +import binnie.genetics.Genetics; +import binnie.core.AbstractMod; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.genetics.machine.Inoculator; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.minecraft.control.ControlErrorState; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.minecraft.control.ControlEnergyBar; +import binnie.craftgui.core.geometry.CraftGUIUtil; +import binnie.craftgui.minecraft.control.ControlSlot; +import binnie.craftgui.minecraft.control.ControlIconDisplay; +import binnie.craftgui.minecraft.GUIIcon; +import binnie.genetics.machine.Splicer; +import binnie.craftgui.minecraft.control.ControlSlotArray; +import binnie.craftgui.minecraft.Window; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.resource.Texture; + +public class WindowSplicer extends WindowMachine +{ + static Texture ProgressBase; + static Texture Progress; + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + return new WindowSplicer(player, inventory, side); + } + + public WindowSplicer(final EntityPlayer player, final IInventory inventory, final Side side) { + super(280, 240, player, inventory, side); + } + + @Override + public void initialiseClient() { + this.setTitle("Splicer"); + int x = 16; + new ControlSplicerProgress(this, 84.0f, 32.0f, this.w() - 172.0f, 102.0f); + CraftGUIUtil.horizontalGrid(x, 62.0f, new ControlSlotArray(this, 0, 0, 2, 1).create(Splicer.slotSerumReserve), new ControlIconDisplay(this, 0.0f, 0.0f, GUIIcon.ArrowRight.getIcon()), new ControlSlot(this, 0.0f, 0.0f).assign(0)); + new ControlSlotArray(this, x + 12, 84, 2, 1).create(Splicer.slotSerumExpended); + new ControlIconDisplay(this, x + 12 + 36 + 4, 86.0f, GUIIcon.ArrowUpLeft.getIcon()); + new ControlEnergyBar(this, 196, 64, 60, 16, Position.Left); + new ControlErrorState(this, 218.0f, 86.0f); + x += 142; + CraftGUIUtil.verticalGrid((this.w() - 72.0f) / 2.0f, 32.0f, TextJustification.MiddleCenter, 4.0f, new ControlSlotArray(this, 0, 0, 4, 1).create(Inoculator.slotReserve), new ControlIconDisplay(this, 0.0f, 0.0f, GUIIcon.ArrowDown.getIcon()), new ControlSlot(this, 0.0f, 0.0f).assign(9), new ControlIconDisplay(this, 0.0f, 0.0f, GUIIcon.ArrowDown.getIcon()), new ControlSlotArray(this, 0, 0, 4, 1).create(Inoculator.slotFinished)); + new ControlPlayerInventory(this); + } + + @Override + public String getTitle() { + return "Inoculator"; + } + + @Override + protected AbstractMod getMod() { + return Genetics.instance; + } + + @Override + protected String getName() { + return "Inoculator"; + } + + static { + WindowSplicer.ProgressBase = new StandardTexture(0, 72, 142, 72, GeneticsTexture.GUIProcess2.getTexture()); + WindowSplicer.Progress = new StandardTexture(0, 0, 142, 72, GeneticsTexture.GUIProcess2.getTexture()); + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/ContainerCraftGUI.java b/src/main/java/binnie/craftgui/minecraft/ContainerCraftGUI.java new file mode 100644 index 00000000..fd0638d2 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/ContainerCraftGUI.java @@ -0,0 +1,481 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft; + +import binnie.craftgui.minecraft.control.EnumHighlighting; +import binnie.craftgui.minecraft.control.ControlSlot; +import java.util.List; +import java.util.ArrayList; +import binnie.core.network.packet.MessageContainerUpdate; +import binnie.core.BinnieCore; +import binnie.core.machines.network.INetwork; +import binnie.core.machines.power.IProcess; +import binnie.core.machines.power.IErrorStateSource; +import binnie.core.machines.power.IPoweredMachine; +import binnie.core.machines.power.ITankMachine; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import binnie.core.machines.transfer.TransferRequest; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.inventory.Slot; +import com.mojang.authlib.GameProfile; +import binnie.core.machines.IMachine; +import cpw.mods.fml.relauncher.Side; +import binnie.core.machines.Machine; +import java.util.HashMap; +import binnie.core.machines.power.ErrorState; +import binnie.core.machines.power.ProcessInfo; +import binnie.core.machines.power.PowerInfo; +import binnie.core.machines.power.TankInfo; +import net.minecraft.nbt.NBTTagCompound; +import java.util.Map; +import net.minecraft.inventory.Container; + +public class ContainerCraftGUI extends Container +{ + private Window window; + private Map syncedNBT; + private Map sentNBT; + private Map syncedTanks; + private PowerInfo syncedPower; + private ProcessInfo syncedProcess; + private int errorType; + private ErrorState error; + private int mousedOverSlotNumber; + + public ContainerCraftGUI(final Window window) { + this.syncedNBT = new HashMap(); + this.sentNBT = new HashMap(); + this.syncedTanks = new HashMap(); + this.syncedPower = new PowerInfo(); + this.syncedProcess = new ProcessInfo(); + this.errorType = 0; + this.error = null; + this.mousedOverSlotNumber = -1; + this.window = window; + final IMachine machine = Machine.getMachine(window.getInventory()); + if (this.getSide() == Side.SERVER) { + this.inventoryItemStacks = new ListMap(); + this.inventorySlots = new ListMap(); + if (machine != null) { + final GameProfile user = machine.getOwner(); + if (user != null) { + final NBTTagCompound nbt = new NBTTagCompound(); + nbt.setString("username", user.getName()); + this.sendNBTToClient("username", nbt); + } + } + } + } + + @Override + protected Slot addSlotToContainer(final Slot slot) { + return super.addSlotToContainer(slot); + } + + private Side getSide() { + return this.window.isServer() ? Side.SERVER : Side.CLIENT; + } + + @Override + public Slot getSlot(final int par1) { + if (par1 < 0 || par1 >= this.inventorySlots.size()) { + return null; + } + return (Slot) this.inventorySlots.get(par1); + } + + @Override + public void putStackInSlot(final int par1, final ItemStack par2ItemStack) { + if (this.getSlot(par1) != null) { + this.getSlot(par1).putStack(par2ItemStack); + } + } + + @Override + public void putStacksInSlots(final ItemStack[] par1ArrayOfItemStack) { + for (int i = 0; i < par1ArrayOfItemStack.length; ++i) { + if (this.getSlot(i) != null) { + this.getSlot(i).putStack(par1ArrayOfItemStack[i]); + } + } + } + + @Override + public void onContainerClosed(final EntityPlayer par1EntityPlayer) { + super.onContainerClosed(par1EntityPlayer); + final WindowInventory inventory = this.window.getWindowInventory(); + for (int i = 0; i < inventory.getSizeInventory(); ++i) { + if (inventory.dispenseOnClose(i)) { + ItemStack stack = inventory.getStackInSlot(i); + if (stack != null) { + stack = new TransferRequest(stack, par1EntityPlayer.inventory).transfer(true); + if (stack != null) { + par1EntityPlayer.dropPlayerItemWithRandomChoice(stack, false); + } + } + } + } + } + + @Override + public ItemStack slotClick(final int slotNum, final int mouseButton, final int modifier, final EntityPlayer player) { + final Slot slot = this.getSlot(slotNum); + if (slot instanceof CustomSlot && ((CustomSlot) slot).handleClick()) { + ((CustomSlot) slot).onSlotClick(this, mouseButton, modifier, player); + return player.inventory.getItemStack(); + } + final ItemStack stack = super.slotClick(slotNum, mouseButton, modifier, player); + return stack; + } + + public void sendNBTToClient(final String key, final NBTTagCompound nbt) { + this.syncedNBT.put(key, nbt); + } + + @Override + public boolean canInteractWith(final EntityPlayer var1) { + return true; + } + + @Override + public final ItemStack transferStackInSlot(final EntityPlayer player, final int slotID) { + return this.shiftClick(player, slotID); + } + + private ItemStack shiftClick(final EntityPlayer player, final int slotnumber) { + final TransferRequest request = this.getShiftClickRequest(player, slotnumber); + if (request == null) { + return null; + } + final ItemStack itemstack = request.transfer(true); + final Slot shiftClickedSlot = (Slot) this.inventorySlots.get(slotnumber); + shiftClickedSlot.putStack(itemstack); + shiftClickedSlot.onSlotChanged(); + return null; + } + + private TransferRequest getShiftClickRequest(final EntityPlayer player, final int slotnumber) { + if (slotnumber < 0) { + return null; + } + final Slot shiftClickedSlot = (Slot) this.inventorySlots.get(slotnumber); + ItemStack itemstack = null; + if (shiftClickedSlot.getHasStack()) { + itemstack = shiftClickedSlot.getStack().copy(); + } + final IInventory playerInventory = player.inventory; + final IInventory containerInventory = this.window.getInventory(); + final IInventory windowInventory = this.window.getWindowInventory(); + final IInventory fromPlayer = (containerInventory == null) ? windowInventory : containerInventory; + final int[] target = new int[36]; + for (int i = 0; i < 36; ++i) { + target[i] = i; + } + TransferRequest request; + if (shiftClickedSlot.inventory == playerInventory) { + request = new TransferRequest(itemstack, fromPlayer).setOrigin(shiftClickedSlot.inventory); + } + else { + request = new TransferRequest(itemstack, playerInventory).setOrigin(shiftClickedSlot.inventory).setTargetSlots(target); + } + if (this.window instanceof IWindowAffectsShiftClick) { + ((IWindowAffectsShiftClick) this.window).alterRequest(request); + } + return request; + } + + public final ItemStack tankClick(final EntityPlayer player, final int slotID) { + if (player.inventory.getItemStack() == null) { + return null; + } + ItemStack heldItem = player.inventory.getItemStack().copy(); + heldItem = new TransferRequest(heldItem, this.window.getInventory()).setOrigin(player.inventory).setTargetSlots(new int[0]).setTargetTanks(new int[] { slotID }).transfer(true); + player.inventory.setItemStack(heldItem); + if (player instanceof EntityPlayerMP) { + ((EntityPlayerMP) player).updateHeldItem(); + } + return heldItem; + } + + public boolean handleNBT(final Side side, final EntityPlayer player, final String name, final NBTTagCompound action) { + if (side == Side.SERVER) { + if (name.equals("tank-click")) { + this.tankClick(player, action.getByte("id")); + } + if (name.equals("slot-reg")) { + final int type = action.getByte("t"); + final int index = action.getShort("i"); + final int slotNumber = action.getShort("n"); + this.getOrCreateSlot(InventoryType.values()[type % 4], index, slotNumber); + } + } + if (name.contains("tank-update")) { + this.onTankUpdate(action); + } + else if (name.equals("power-update")) { + this.onPowerUpdate(action); + } + else if (name.equals("process-update")) { + this.onProcessUpdate(action); + } + else if (name.equals("error-update")) { + this.onErrorUpdate(action); + } + else if (name.equals("mouse-over-slot")) { + this.onMouseOverSlot(player, action); + } + else if (name.equals("shift-click-info")) { + this.onRecieveShiftClickHighlights(player, action); + } + return false; + } + + @Override + public void detectAndSendChanges() { + super.detectAndSendChanges(); + final ITankMachine tanks = Machine.getInterface(ITankMachine.class, this.window.getInventory()); + final IPoweredMachine powered = Machine.getInterface(IPoweredMachine.class, this.window.getInventory()); + final IErrorStateSource error = Machine.getInterface(IErrorStateSource.class, this.window.getInventory()); + final IProcess process = Machine.getInterface(IProcess.class, this.window.getInventory()); + if (tanks != null && this.window.isServer()) { + for (int i = 0; i < tanks.getTankInfos().length; ++i) { + final TankInfo tank = tanks.getTankInfos()[i]; + if (!this.getTankInfo(i).equals(tank)) { + this.syncedNBT.put("tank-update-" + i, this.createTankNBT(i, tank)); + this.syncedTanks.put(i, tank); + } + } + } + if (powered != null && this.window.isServer()) { + this.syncedNBT.put("power-update", this.createPowerNBT(powered.getPowerInfo())); + } + if (process != null && this.window.isServer()) { + this.syncedNBT.put("process-update", this.createProcessNBT(process.getInfo())); + } + if (error != null && this.window.isServer()) { + this.syncedNBT.put("error-update", this.createErrorNBT(error)); + } + final INetwork.SendGuiNBT machineSync = Machine.getInterface(INetwork.SendGuiNBT.class, this.window.getInventory()); + if (machineSync != null) { + machineSync.sendGuiNBT(this.syncedNBT); + } + final Map sentThisTime = new HashMap(); + for (final Map.Entry nbt : this.syncedNBT.entrySet()) { + nbt.getValue().setString("type", nbt.getKey()); + boolean shouldSend = true; + final NBTTagCompound lastSent = this.sentNBT.get(nbt.getKey()); + if (lastSent != null) { + shouldSend = !lastSent.equals(nbt.getValue()); + } + if (shouldSend) { + for (int j = 0; j < this.crafters.size(); ++j) { + if (this.crafters.get(j) instanceof EntityPlayerMP) { + final EntityPlayerMP player = (EntityPlayerMP) this.crafters.get(j); + BinnieCore.proxy.sendToPlayer(new MessageContainerUpdate(nbt.getValue()), player); + } + } + sentThisTime.put(nbt.getKey(), nbt.getValue()); + } + } + this.sentNBT.putAll(sentThisTime); + this.syncedNBT.clear(); + } + + private NBTTagCompound createErrorNBT(final IErrorStateSource error) { + final NBTTagCompound nbt = new NBTTagCompound(); + ErrorState state = null; + if (error.canWork() != null) { + nbt.setByte("type", (byte) 0); + state = error.canWork(); + } + else if (error.canProgress() != null) { + nbt.setByte("type", (byte) 1); + state = error.canProgress(); + } + if (state != null) { + state.writeToNBT(nbt); + } + return nbt; + } + + public NBTTagCompound createPowerNBT(final PowerInfo powerInfo) { + final NBTTagCompound nbt = new NBTTagCompound(); + powerInfo.writeToNBT(nbt); + return nbt; + } + + public NBTTagCompound createProcessNBT(final ProcessInfo powerInfo) { + final NBTTagCompound nbt = new NBTTagCompound(); + powerInfo.writeToNBT(nbt); + return nbt; + } + + public NBTTagCompound createTankNBT(final int tank, final TankInfo tankInfo) { + final NBTTagCompound nbt = new NBTTagCompound(); + tankInfo.writeToNBT(nbt); + nbt.setByte("tank", (byte) tank); + return nbt; + } + + public void onTankUpdate(final NBTTagCompound nbt) { + final int tankID = nbt.getByte("tank"); + final TankInfo tank = new TankInfo(); + tank.readFromNBT(nbt); + this.syncedTanks.put(tankID, tank); + } + + public void onProcessUpdate(final NBTTagCompound nbt) { + (this.syncedProcess = new ProcessInfo()).readFromNBT(nbt); + } + + public void onPowerUpdate(final NBTTagCompound nbt) { + (this.syncedPower = new PowerInfo()).readFromNBT(nbt); + } + + public PowerInfo getPowerInfo() { + return this.syncedPower; + } + + public ProcessInfo getProcessInfo() { + return this.syncedProcess; + } + + public TankInfo getTankInfo(final int tank) { + return this.syncedTanks.containsKey(tank) ? this.syncedTanks.get(tank) : new TankInfo(); + } + + public void onErrorUpdate(final NBTTagCompound nbt) { + this.errorType = nbt.getByte("type"); + if (nbt.hasKey("name")) { + (this.error = new ErrorState("", "")).readFromNBT(nbt); + } + else { + this.error = null; + } + } + + public ErrorState getErrorState() { + return this.error; + } + + public int getErrorType() { + return this.errorType; + } + + public CustomSlot[] getCustomSlots() { + final List slots = new ArrayList(); + for (final Object object : this.inventorySlots) { + if (object instanceof CustomSlot) { + slots.add((CustomSlot) object); + } + } + return slots.toArray(new CustomSlot[0]); + } + + public void setMouseOverSlot(final Slot slot) { + if (slot.slotNumber != this.mousedOverSlotNumber) { + this.mousedOverSlotNumber = slot.slotNumber; + ControlSlot.highlighting.get(EnumHighlighting.ShiftClick).clear(); + final NBTTagCompound nbt = new NBTTagCompound(); + nbt.setShort("slot", (short) slot.slotNumber); + this.window.sendClientAction("mouse-over-slot", nbt); + } + } + + private void onMouseOverSlot(final EntityPlayer player, final NBTTagCompound data) { + final int slotnumber = data.getShort("slot"); + final TransferRequest request = this.getShiftClickRequest(player, slotnumber); + if (request == null) { + return; + } + request.transfer(false); + final NBTTagCompound nbt = new NBTTagCompound(); + final List slots = new ArrayList(); + for (final TransferRequest.TransferSlot tslot : request.getInsertedSlots()) { + final Slot slot = this.getSlot(tslot.inventory, tslot.id); + if (slot != null) { + slots.add(slot.slotNumber); + } + } + final int[] array = new int[slots.size()]; + for (int i = 0; i < slots.size(); ++i) { + array[i] = slots.get(i); + } + nbt.setIntArray("slots", array); + nbt.setShort("origin", (short) slotnumber); + this.syncedNBT.put("shift-click-info", nbt); + } + + private void onRecieveShiftClickHighlights(final EntityPlayer player, final NBTTagCompound data) { + ControlSlot.highlighting.get(EnumHighlighting.ShiftClick).clear(); + for (final int slotnumber : data.getIntArray("slots")) { + ControlSlot.highlighting.get(EnumHighlighting.ShiftClick).add(slotnumber); + } + } + + private CustomSlot getSlot(final IInventory inventory, final int id) { + for (final Object o : this.inventorySlots) { + final CustomSlot slot = (CustomSlot) o; + if (slot.inventory == inventory && slot.getSlotIndex() == id) { + return slot; + } + } + return null; + } + + public void recieveNBT(final Side side, final EntityPlayer player, final NBTTagCompound action) { + final String name = action.getString("type"); + if (this.handleNBT(side, player, name, action)) { + return; + } + this.window.recieveGuiNBT(this.getSide(), player, name, action); + final INetwork.RecieveGuiNBT machine = Machine.getInterface(INetwork.RecieveGuiNBT.class, this.window.getInventory()); + if (machine != null) { + machine.recieveGuiNBT(this.getSide(), player, name, action); + } + } + + public Slot getOrCreateSlot(final InventoryType type, final int index) { + final IInventory inventory = this.getInventory(type); + Slot slot = this.getSlot(inventory, index); + if (slot == null) { + slot = new CustomSlot(inventory, index); + this.addSlotToContainer(slot); + } + final NBTTagCompound nbt = new NBTTagCompound(); + nbt.setByte("t", (byte) type.ordinal()); + nbt.setShort("i", (short) index); + nbt.setShort("n", (short) slot.slotNumber); + this.window.sendClientAction("slot-reg", nbt); + return slot; + } + + protected IInventory getInventory(final InventoryType type) { + if (type == InventoryType.Machine) { + return this.window.getInventory(); + } + if (type == InventoryType.Player) { + return this.window.getPlayer().inventory; + } + if (type == InventoryType.Window) { + return this.window.getWindowInventory(); + } + return null; + } + + private Slot getOrCreateSlot(final InventoryType type, final int index, final int slotNumber) { + final IInventory inventory = this.getInventory(type); + if (this.inventorySlots.get(slotNumber) != null) { + return null; + } + final Slot slot = new CustomSlot(inventory, index); + slot.slotNumber = slotNumber; + this.inventorySlots.add(slotNumber, slot); + this.inventoryItemStacks.add(slotNumber, null); + return slot; + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/CustomSlot.java b/src/main/java/binnie/craftgui/minecraft/CustomSlot.java new file mode 100644 index 00000000..e2a99398 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/CustomSlot.java @@ -0,0 +1,50 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft; + +import net.minecraft.entity.player.EntityPlayer; +import binnie.core.machines.Machine; +import binnie.core.machines.inventory.IInventorySlots; +import binnie.core.machines.inventory.InventorySlot; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.inventory.Slot; + +public class CustomSlot extends Slot +{ + @Override + public boolean isItemValid(final ItemStack par1ItemStack) { + return this.inventory.isItemValidForSlot(this.getSlotIndex(), par1ItemStack); + } + + public CustomSlot(final IInventory inventory, final int index) { + super(inventory, index, 0, 0); + } + + public InventorySlot getInventorySlot() { + final IInventorySlots slots = Machine.getInterface(IInventorySlots.class, this.inventory); + if (slots != null) { + return slots.getSlot(this.getSlotIndex()); + } + return null; + } + + public boolean handleClick() { + final InventorySlot slot = this.getInventorySlot(); + return slot != null && slot.isRecipe(); + } + + public void onSlotClick(final ContainerCraftGUI container, final int mouseButton, final int modifier, final EntityPlayer player) { + ItemStack stack = player.inventory.getItemStack(); + if (stack == null || mouseButton == 2) { + this.putStack((ItemStack) null); + } + else { + stack = stack.copy(); + stack.stackSize = 1; + this.putStack(stack); + } + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/Dialog.java b/src/main/java/binnie/craftgui/minecraft/Dialog.java new file mode 100644 index 00000000..e561a384 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/Dialog.java @@ -0,0 +1,51 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft; + +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.events.EventHandler; +import binnie.craftgui.events.EventMouse; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.core.Control; + +public abstract class Dialog extends Control +{ + public Dialog(final IWidget parent, final float w, final float h) { + super(parent, (parent.w() - w) / 2.0f, (parent.h() - h) / 2.0f, w, h); + this.addAttribute(Attribute.MouseOver); + this.addAttribute(Attribute.AlwaysOnTop); + this.addAttribute(Attribute.BlockTooltip); + this.initialise(); + this.addEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + if (!Dialog.this.getArea().contains(Dialog.this.getRelativeMousePosition())) { + Dialog.this.onClose(); + Dialog.this.getParent().deleteChild(Dialog.this); + } + } + }.setOrigin(EventHandler.Origin.Any, this)); + } + + @Override + public abstract void initialise(); + + public abstract void onClose(); + + @Override + public void onRenderBackground() { + CraftGUI.Render.gradientRect(this.getArea().outset(400), -1442840576, -1442840576); + CraftGUI.Render.texture(CraftGUITexture.Window, this.getArea()); + CraftGUI.Render.texture(CraftGUITexture.TabOutline, this.getArea().inset(4)); + } + + @Override + public boolean isMouseOverWidget(final IPoint relativeMouse) { + return true; + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/EnumColor.java b/src/main/java/binnie/craftgui/minecraft/EnumColor.java new file mode 100644 index 00000000..d6993cc9 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/EnumColor.java @@ -0,0 +1,48 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft; + +public enum EnumColor +{ + Black("Black", 0, '0'), + DarkBlue("Dark Blue", 170, '1'), + DarkGreen("Dark Green", 43520, '2'), + DarkAqua("Dark Aqua", 43690, '3'), + DarkRed("Dark Red", 11141120, '4'), + Purple("Purple", 11141290, '5'), + Gold("Gold", 16755200, '6'), + Grey("Grey", 11184810, '7'), + DarkGrey("Dark Grey", 5592405, '8'), + Blue("Blue", 5592575, '9'), + Green("Green", 5635925, 'a'), + Aqua("Aqua", 5636095, 'b'), + Red("Red", 16733525, 'c'), + Pink("Pink", 16733695, 'd'), + Yellow("Yellow", 16777045, 'e'), + White("White", 16777215, 'f'); + + int colour; + String name; + char code; + + private EnumColor(final String name, final int colour, final char code) { + this.name = name; + this.colour = colour; + this.code = code; + } + + public int getColour() { + return this.colour; + } + + public String getCode() { + return "§" + this.code; + } + + @Override + public String toString() { + return this.name; + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/GUIIcon.java b/src/main/java/binnie/craftgui/minecraft/GUIIcon.java new file mode 100644 index 00000000..4902717e --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/GUIIcon.java @@ -0,0 +1,41 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft; + +import net.minecraft.util.IIcon; +import binnie.core.BinnieCore; +import binnie.Binnie; +import binnie.core.resource.BinnieIcon; + +public enum GUIIcon +{ + ArrowUp("arrow-up"), + ArrowDown("arrow-down"), + ArrowLeft("arrow-left"), + ArrowRight("arrow-right"), + ArrowUpLeft("arrow-upleft"), + ArrowUpRight("arrow-upright"), + ArrowRightUp("arrow-rightup"), + ArrowRightDown("arrow-rightdown"), + ArrowDownRight("arrow-downright"), + ArrowDownLeft("arrow-downleft"), + ArrowLeftDown("arrow-leftdown"), + ArrowLeftUp("arrow-leftup"); + + String path; + BinnieIcon icon; + + private GUIIcon(final String path) { + this.path = path; + } + + public void register() { + this.icon = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/" + this.path); + } + + public IIcon getIcon() { + return this.icon.getIcon(); + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/GuiCraftGUI.java b/src/main/java/binnie/craftgui/minecraft/GuiCraftGUI.java new file mode 100644 index 00000000..5865c7fa --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/GuiCraftGUI.java @@ -0,0 +1,506 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.IIcon; + +import binnie.craftgui.core.CraftGUI; +import binnie.core.BinnieCore; + +import net.minecraft.client.renderer.Tessellator; + +import binnie.craftgui.core.geometry.IBorder; +import binnie.craftgui.core.geometry.IArea; + +import org.lwjgl.input.Mouse; + +import binnie.craftgui.events.EventKey; + +import org.lwjgl.input.Keyboard; + +import binnie.craftgui.core.IWidget; +import binnie.craftgui.events.EventMouse; + +import java.util.List; + +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.nbt.NBTException; +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.nbt.NBTTagCompound; + +import java.util.ArrayList; + +import net.minecraft.entity.player.InventoryPlayer; + +import binnie.craftgui.core.Tooltip; + +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; + +import org.lwjgl.opengl.GL11; + +import net.minecraft.inventory.Container; +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; + +import binnie.craftgui.core.geometry.IPoint; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import net.minecraft.client.gui.inventory.GuiContainer; + +@SideOnly(Side.CLIENT) +public class GuiCraftGUI extends GuiContainer +{ + IPoint mousePos; + private Window window; + private ItemStack draggedItem; + + @Override + public void updateScreen() { + this.window.updateClient(); + } + + public Minecraft getMinecraft() { + return this.mc; + } + + public GuiCraftGUI(final Window window) { + super(window.getContainer()); + this.mousePos = new IPoint(0.0f, 0.0f); + this.window = window; + this.resize(window.getSize()); + } + + @Override + protected void drawGuiContainerBackgroundLayer(final float var1, final int var2, final int var3) { + } + + @Override + public void initGui() { + super.initGui(); + this.mc.thePlayer.openContainer = this.inventorySlots; + this.guiLeft = (this.width - this.xSize) / 2; + this.guiTop = (this.height - this.ySize) / 2; + this.window.setSize(new IPoint(this.xSize, this.ySize)); + this.window.setPosition(new IPoint(this.guiLeft, this.guiTop)); + this.window.initGui(); + } + + public ItemStack getDraggedItem() { + return this.draggedItem; + } + + @Override + public void drawScreen(final int mouseX, final int mouseY, final float par3) { + this.window.setMousePosition(mouseX - (int) this.window.getPosition().x(), mouseY - (int) this.window.getPosition().y()); + this.drawDefaultBackground(); + + GL11.glDisable(32826); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(2896); + GL11.glDisable(2929); + this.zLevel = 10.0f; + GuiScreen.itemRender.zLevel = this.zLevel; + + this.window.render(); + + RenderHelper.enableGUIStandardItemLighting(); + GL11.glPushMatrix(); + GL11.glEnable(32826); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.0f, 240.0f); + final InventoryPlayer playerInventory = this.mc.thePlayer.inventory; + this.draggedItem = playerInventory.getItemStack(); + if (this.draggedItem != null) { + this.renderItem(new IPoint(mouseX - 8, mouseY - 8), this.draggedItem, 200, false); + this.renderItem(new IPoint(mouseX - 8, mouseY - 8), this.draggedItem, 200, false); + } + GL11.glDisable(32826); + GL11.glPopMatrix(); + GL11.glDisable(2896); + GL11.glDisable(2929); + final MinecraftTooltip tooltip = new MinecraftTooltip(); + if (this.isHelpMode()) { + tooltip.setType(Tooltip.Type.Help); + this.window.getHelpTooltip(tooltip); + } + else { + tooltip.setType(Tooltip.Type.Standard); + this.window.getTooltip(tooltip); + } + if (tooltip.exists()) { + this.renderTooltip(new IPoint(mouseX, mouseY), tooltip); + } + this.zLevel = 0.0f; + GL11.glEnable(2896); + GL11.glEnable(2929); + } + + public void renderTooltip(final IPoint mousePosition, final MinecraftTooltip tooltip) { + final int mouseX = (int) mousePosition.x(); + final int mouseY = (int) mousePosition.y(); + final FontRenderer font = this.getFontRenderer(); + GL11.glDisable(32826); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(2896); + GL11.glDisable(2929); + int k = 0; + final List strings = new ArrayList(); + for (final String string : tooltip.getList()) { + if (string != null) { + if (!string.contains("~~~")) { + strings.addAll(font.listFormattedStringToWidth(string, tooltip.maxWidth)); + } + else { + strings.add(string); + } + } + } + for (final String s : strings) { + int l = font.getStringWidth(s); + if (s.contains("~~~")) { + l = 12 + font.getStringWidth(s.replaceAll("~~~(.*?)~~~", "")); + } + if (l > k) { + k = l; + } + } + int i1 = mouseX + 12; + int j1 = mouseY - 12; + int k2 = 8; + if (strings.size() > 1) { + k2 += 2 + (strings.size() - 1) * 10; + } + if (i1 + k > this.width) { + i1 -= 28 + k; + } + if (j1 + k2 + 6 > this.height) { + j1 = this.height - k2 - 6; + } + this.zLevel = 300.0f; + GuiScreen.itemRender.zLevel = 300.0f; + final int l2 = -267386864; + final int j2; + final int i2 = j2 = 1342177280 + MinecraftTooltip.getOutline(tooltip.getType()); + this.drawGradientRect(i1 - 3, j1 - 4, i1 + k + 3, j1 - 3, l2, l2); + this.drawGradientRect(i1 - 3, j1 + k2 + 3, i1 + k + 3, j1 + k2 + 4, l2, l2); + this.drawGradientRect(i1 - 3, j1 - 3, i1 + k + 3, j1 + k2 + 3, l2, l2); + this.drawGradientRect(i1 - 4, j1 - 3, i1 - 3, j1 + k2 + 3, l2, l2); + this.drawGradientRect(i1 + k + 3, j1 - 3, i1 + k + 4, j1 + k2 + 3, l2, l2); + this.drawGradientRect(i1 - 3, j1 - 3 + 1, i1 - 3 + 1, j1 + k2 + 3 - 1, i2, j2); + this.drawGradientRect(i1 + k + 2, j1 - 3 + 1, i1 + k + 3, j1 + k2 + 3 - 1, i2, j2); + this.drawGradientRect(i1 - 3, j1 - 3, i1 + k + 3, j1 - 3 + 1, i2, i2); + this.drawGradientRect(i1 - 3, j1 + k2 + 2, i1 + k + 3, j1 + k2 + 3, j2, j2); + for (int k3 = 0; k3 < strings.size(); ++k3) { + String s2 = strings.get(k3); + if (k3 == 0) { + s2 = MinecraftTooltip.getTitle(tooltip.getType()) + s2; + } + else { + s2 = MinecraftTooltip.getBody(tooltip.getType()) + s2; + } + if (s2.contains("~~~")) { + final String split = s2.split("~~~")[1]; + try { + final NBTTagCompound nbt = (NBTTagCompound) JsonToNBT.func_150315_a(split); + final ItemStack stack = ItemStack.loadItemStackFromNBT(nbt); + GL11.glPushMatrix(); + GL11.glTranslatef(i1, j1 - 1.5f, 0.0f); + GL11.glScalef(0.6f, 0.6f, 1.0f); + this.renderItem(new IPoint(0.0f, 0.0f), stack, false); + GL11.glPopMatrix(); + } catch (NBTException e) { + e.printStackTrace(); + } + s2 = " " + s2.replaceAll("~~~(.*?)~~~", ""); + } + font.drawStringWithShadow(s2, i1, j1, -1); + if (k3 == 0) { + j1 += 2; + } + j1 += 10; + } + this.zLevel = 0.0f; + GuiScreen.itemRender.zLevel = 0.0f; + GL11.glEnable(2896); + GL11.glEnable(2929); + RenderHelper.enableStandardItemLighting(); + GL11.glEnable(32826); + } + + @Override + protected void mouseClicked(final int x, final int y, final int button) { + IWidget origin = this.window; + if (this.window.getMousedOverWidget() != null) { + origin = this.window.getMousedOverWidget(); + } + this.window.callEvent(new EventMouse.Down(origin, x, y, button)); + } + + public boolean isShiftDown() { + return Keyboard.isKeyDown(this.mc.gameSettings.keyBindSneak.getKeyCode()); + } + + @Override + protected void keyTyped(final char c, final int key) { + if (key == 1 || (key == this.mc.gameSettings.keyBindInventory.getKeyCode() && this.window.getFocusedWidget() == null)) { + this.mc.thePlayer.closeScreen(); + } + final IWidget origin = (this.window.getFocusedWidget() == null) ? this.window : this.window.getFocusedWidget(); + this.window.callEvent(new EventKey.Down(origin, c, key)); + } + + @Override + protected void mouseMovedOrUp(final int x, final int y, final int button) { + final IWidget origin = (this.window.getMousedOverWidget() == null) ? this.window : this.window.getMousedOverWidget(); + if (button == -1) { + final float dx = Mouse.getEventDX() * this.width / (float)this.mc.displayWidth; + final float dy = -(Mouse.getEventDY() * this.height / (float)this.mc.displayHeight); + } + else { + this.window.callEvent(new EventMouse.Up(origin, x, y, button)); + } + } + + @Override + public void handleMouseInput() { + super.handleMouseInput(); + final int dWheel = Mouse.getDWheel(); + final IWidget origin = (this.window.getFocusedWidget() == null) ? this.window : this.window.getFocusedWidget(); + if (dWheel != 0) { + this.window.callEvent(new EventMouse.Wheel(this.window, dWheel)); + } + } + + @Override + public void onGuiClosed() { + this.window.onClose(); + } + + public void renderTexturedRect(final float x, final float y, final float u, final float v, final float w, final float h) { + this.drawTexturedModalRect((int) x, (int) y, (int) u, (int) v, (int) w, (int) h); + } + + public void renderTexture(final IPoint position, final IArea textureArea) { + this.drawTexturedModalRect((int) position.x(), (int) position.y(), (int) textureArea.pos().x(), (int) textureArea.pos().y(), (int) textureArea.size().x(), (int) textureArea.size().y()); + } + + private void renderTexturedRect(final IArea area, final IPoint uv) { + this.renderTexturedRect(area.pos().x(), area.pos().y(), uv.x(), uv.y(), area.size().x(), area.size().y()); + } + + public void renderTexturePadded(final IArea area, final IArea texture, final IBorder padding) { + int borderLeft = (int) padding.l(); + int borderRight = (int) padding.r(); + int borderTop = (int) padding.t(); + int borderBottom = (int) padding.b(); + final int posX = (int) area.pos().x(); + final int posY = (int) area.pos().y(); + final int width = (int) area.size().x(); + final int height = (int) area.size().y(); + final int textWidth = (int) texture.w(); + final int textHeight = (int) texture.h(); + final int u = (int) texture.x(); + final int v = (int) texture.y(); + if (borderTop + borderBottom > height) { + borderTop = height / 2; + borderBottom = height / 2; + } + if (borderLeft + borderRight > width) { + borderLeft = width / 2; + borderRight = width / 2; + } + final IPoint origin = area.pos(); + this.drawTexturedModalRect(posX, posY, u, v, borderLeft, borderTop); + this.drawTexturedModalRect(posX + width - borderRight, posY, u + textWidth - borderRight, v, borderRight, borderTop); + this.drawTexturedModalRect(posX, posY + height - borderBottom, u, v + textHeight - borderBottom, borderLeft, borderBottom); + this.drawTexturedModalRect(posX + width - borderRight, posY + height - borderBottom, u + textWidth - borderRight, v + textHeight - borderBottom, borderRight, borderBottom); + int texturingWidth; + for (int currentXPos = borderLeft; currentXPos < width - borderRight; currentXPos += texturingWidth) { + final int distanceXRemaining = width - borderRight - currentXPos; + texturingWidth = textWidth - borderLeft - borderRight; + if (texturingWidth > distanceXRemaining) { + texturingWidth = distanceXRemaining; + } + if (texturingWidth <= 0) { + break; + } + this.drawTexturedModalRect(posX + currentXPos, posY, u + borderLeft, v, texturingWidth, borderTop); + this.drawTexturedModalRect(posX + currentXPos, posY + height - borderBottom, u + borderLeft, v + textHeight - borderBottom, texturingWidth, borderBottom); + int texturingHeight; + for (int currentYPos = borderTop; currentYPos < height - borderBottom; currentYPos += texturingHeight) { + final int distanceYRemaining = height - borderBottom - currentYPos; + texturingHeight = textHeight - borderTop - borderBottom; + if (texturingHeight > distanceYRemaining) { + texturingHeight = distanceYRemaining; + } + if (texturingHeight <= 0) { + break; + } + this.drawTexturedModalRect(posX + currentXPos, posY + currentYPos, u + borderLeft, v + borderTop, texturingWidth, texturingHeight); + } + } + int texturingHeight2; + for (int currentYPos2 = borderTop; currentYPos2 < height - borderBottom; currentYPos2 += texturingHeight2) { + final int distanceYRemaining2 = height - borderBottom - currentYPos2; + texturingHeight2 = textHeight - borderTop - borderBottom; + if (texturingHeight2 > distanceYRemaining2) { + texturingHeight2 = distanceYRemaining2; + } + if (texturingHeight2 <= 0) { + break; + } + this.drawTexturedModalRect(posX, posY + currentYPos2, u, v + borderTop, borderLeft, texturingHeight2); + this.drawTexturedModalRect(posX + width - borderRight, posY + currentYPos2, u + textWidth - borderRight, v + borderTop, borderRight, texturingHeight2); + } + } + + public void drawGradientArea(final float p_73733_1_, final float p_73733_2_, final float p_73733_3_, final float p_73733_4_, final int p_73733_5_, final int p_73733_6_) { + final float f = (p_73733_5_ >> 24 & 0xFF) / 255.0f; + final float f2 = (p_73733_5_ >> 16 & 0xFF) / 255.0f; + final float f3 = (p_73733_5_ >> 8 & 0xFF) / 255.0f; + final float f4 = (p_73733_5_ & 0xFF) / 255.0f; + final float f5 = (p_73733_6_ >> 24 & 0xFF) / 255.0f; + final float f6 = (p_73733_6_ >> 16 & 0xFF) / 255.0f; + final float f7 = (p_73733_6_ >> 8 & 0xFF) / 255.0f; + final float f8 = (p_73733_6_ & 0xFF) / 255.0f; + GL11.glDisable(3553); + GL11.glEnable(3042); + GL11.glDisable(3008); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glShadeModel(7425); + final Tessellator tessellator = Tessellator.instance; + tessellator.startDrawingQuads(); + tessellator.setColorRGBA_F(f2, f3, f4, f); + tessellator.addVertex(p_73733_3_, p_73733_2_, this.zLevel); + tessellator.addVertex(p_73733_1_, p_73733_2_, this.zLevel); + tessellator.setColorRGBA_F(f6, f7, f8, f5); + tessellator.addVertex(p_73733_1_, p_73733_4_, this.zLevel); + tessellator.addVertex(p_73733_3_, p_73733_4_, this.zLevel); + tessellator.draw(); + GL11.glShadeModel(7424); + GL11.glDisable(3042); + GL11.glEnable(3008); + GL11.glEnable(3553); + } + + public void renderItem(final IPoint pos, final ItemStack item, final boolean rotating) { + this.renderItem(pos, item, (int) this.zLevel + 3, rotating); + } + + private void renderItem(final IPoint pos, final ItemStack item, final int zLevel, final boolean rotating) { + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.0f, 240.0f); + GL11.glPushMatrix(); + RenderHelper.enableGUIStandardItemLighting(); + GL11.glEnable(32826); + GL11.glEnable(2929); + FontRenderer font = item.getItem().getFontRenderer(item); + if (font == null) { + font = this.getFontRenderer(); + } + if (item != null) { + BinnieCore.proxy.getMinecraftInstance(); + final float phase = Minecraft.getSystemTime() / 20.0f; + GL11.glPushMatrix(); + if (rotating) { + GL11.glTranslatef(8.0f, 8.0f, 0.0f); + GL11.glRotatef(phase, 0.0f, -0.866f, 0.5f); + GL11.glTranslatef(-8.0f, -8.0f, -67.1f); + } + GuiScreen.itemRender.renderItemAndEffectIntoGUI(font, this.mc.renderEngine, item, (int) pos.x(), (int) pos.y()); + GL11.glPopMatrix(); + GuiScreen.itemRender.renderItemOverlayIntoGUI(font, this.mc.renderEngine, item, (int) pos.x(), (int) pos.y(), (String) null); + } + GL11.glClear(256); + GL11.glEnable(3042); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + RenderHelper.disableStandardItemLighting(); + CraftGUI.Render.colour(-1); + GL11.glEnable(32826); + GL11.glPopMatrix(); + } + + public void renderIcon(final IPoint pos, final IIcon icon, final ResourceLocation map) { + if (icon == null) { + return; + } + GL11.glPushMatrix(); + GL11.glEnable(32826); + BinnieCore.proxy.bindTexture(map); + GuiScreen.itemRender.zLevel = this.zLevel; + GuiScreen.itemRender.renderIcon((int) pos.x(), (int) pos.y(), icon, 16, 16); + GL11.glEnable(32826); + GL11.glPopMatrix(); + } + + public boolean isHelpMode() { + return Keyboard.isKeyDown(15); + } + + public FontRenderer getFontRenderer() { + return this.fontRendererObj; + } + + public void resize(final IPoint size) { + this.xSize = (int) size.x(); + this.ySize = (int) size.y(); + this.guiLeft = (this.width - this.xSize) / 2; + this.guiTop = (this.height - this.ySize) / 2; + this.window.setPosition(new IPoint(this.guiLeft, this.guiTop)); + } + + public void limitArea(final IArea area) { + float x = area.pos().x(); + float y = area.pos().y(); + float w = area.size().x(); + float h = area.size().y(); + y = this.height - (y + h); + final float k = this.xSize; + final float scaleX = this.width / (float) this.mc.displayWidth; + final float scaleY = this.height / (float) this.mc.displayHeight; + x += 0.0f; + y += 0.0f; + w += 0.0f; + h += 0.0f; + GL11.glScissor((int) (x / scaleX), (int) (y / scaleY), (int) (w / scaleX), (int) (h / scaleY)); + } + + public int getZLevel() { + return (int) this.zLevel; + } + + public void drawRect(float p_73734_0_, float p_73734_1_, float p_73734_2_, float p_73734_3_, final int p_73734_4_) { + if (p_73734_0_ < p_73734_2_) { + final float j1 = p_73734_0_; + p_73734_0_ = p_73734_2_; + p_73734_2_ = j1; + } + if (p_73734_1_ < p_73734_3_) { + final float j1 = p_73734_1_; + p_73734_1_ = p_73734_3_; + p_73734_3_ = j1; + } + final float f3 = (p_73734_4_ >> 24 & 0xFF) / 255.0f; + final float f4 = (p_73734_4_ >> 16 & 0xFF) / 255.0f; + final float f5 = (p_73734_4_ >> 8 & 0xFF) / 255.0f; + final float f6 = (p_73734_4_ & 0xFF) / 255.0f; + final Tessellator tessellator = Tessellator.instance; + GL11.glEnable(3042); + GL11.glDisable(3553); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glColor4f(f4, f5, f6, f3); + tessellator.startDrawingQuads(); + tessellator.addVertex(p_73734_0_, p_73734_3_, 0.0); + tessellator.addVertex(p_73734_2_, p_73734_3_, 0.0); + tessellator.addVertex(p_73734_2_, p_73734_1_, 0.0); + tessellator.addVertex(p_73734_0_, p_73734_1_, 0.0); + tessellator.draw(); + GL11.glEnable(3553); + GL11.glDisable(3042); + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/IMachineInformation.java b/src/main/java/binnie/craftgui/minecraft/IMachineInformation.java new file mode 100644 index 00000000..eb7ec4a7 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/IMachineInformation.java @@ -0,0 +1,10 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft; + +public interface IMachineInformation +{ + String getInformation(); +} diff --git a/src/main/java/binnie/craftgui/minecraft/IMinecraftTooltip.java b/src/main/java/binnie/craftgui/minecraft/IMinecraftTooltip.java new file mode 100644 index 00000000..f8d0e89b --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/IMinecraftTooltip.java @@ -0,0 +1,12 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft; + +import binnie.craftgui.core.ITooltip; + +public interface IMinecraftTooltip extends ITooltip +{ + void getTooltip(final MinecraftTooltip p0); +} diff --git a/src/main/java/binnie/craftgui/minecraft/IWindowAffectsShiftClick.java b/src/main/java/binnie/craftgui/minecraft/IWindowAffectsShiftClick.java new file mode 100644 index 00000000..0a25b7a4 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/IWindowAffectsShiftClick.java @@ -0,0 +1,12 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft; + +import binnie.core.machines.transfer.TransferRequest; + +public interface IWindowAffectsShiftClick +{ + void alterRequest(final TransferRequest p0); +} diff --git a/src/main/java/binnie/craftgui/minecraft/InventoryType.java b/src/main/java/binnie/craftgui/minecraft/InventoryType.java new file mode 100644 index 00000000..01cea2f0 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/InventoryType.java @@ -0,0 +1,13 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft; + +public enum InventoryType +{ + Player, + Machine, + Window, + Custom; +} diff --git a/src/main/java/binnie/craftgui/minecraft/ListMap.java b/src/main/java/binnie/craftgui/minecraft/ListMap.java new file mode 100644 index 00000000..8413b575 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/ListMap.java @@ -0,0 +1,152 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft; + +import java.util.ListIterator; +import java.util.Map; +import java.util.Collection; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; + +class ListMap implements List +{ + private LinkedHashMap map; + + ListMap() { + this.map = new LinkedHashMap(); + } + + @Override + public int size() { + int i = -1; + for (final int k : this.map.keySet()) { + if (k > i) { + i = k; + } + } + return i + 1; + } + + @Override + public boolean isEmpty() { + return this.map.isEmpty(); + } + + @Override + public boolean contains(final Object o) { + return this.map.containsValue(o); + } + + @Override + public Iterator iterator() { + return this.map.values().iterator(); + } + + @Override + public Object[] toArray() { + return this.map.values().toArray(); + } + + @Override + public

P[] toArray(final P[] a) { + return this.map.values().toArray(a); + } + + @Override + public boolean add(final T e) { + if (this.get(this.size()) == null) { + this.add(this.size(), e); + return true; + } + return false; + } + + @Override + public boolean remove(final Object o) { + return false; + } + + @Override + public boolean containsAll(final Collection c) { + return this.map.values().containsAll(c); + } + + @Override + public boolean addAll(final Collection c) { + return false; + } + + @Override + public boolean addAll(final int index, final Collection c) { + return false; + } + + @Override + public boolean removeAll(final Collection c) { + return false; + } + + @Override + public boolean retainAll(final Collection c) { + return false; + } + + @Override + public void clear() { + this.map.clear(); + } + + @Override + public T get(final int index) { + return this.map.get(index); + } + + @Override + public T set(final int index, final T element) { + this.map.put(index, element); + return element; + } + + @Override + public void add(final int index, final T element) { + this.map.put(index, element); + } + + @Override + public T remove(final int index) { + return null; + } + + @Override + public int indexOf(final Object o) { + for (final Map.Entry entry : this.map.entrySet()) { + if (entry.getValue() == o) { + return entry.getKey(); + } + } + return 0; + } + + @Override + public int lastIndexOf(final Object o) { + return this.indexOf(o); + } + + @Override + public ListIterator listIterator() { + return null; + } + + @Override + public ListIterator listIterator(final int index) { + return null; + } + + @Override + public List subList(final int fromIndex, final int toIndex) { + return null; + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/MinecraftGUI.java b/src/main/java/binnie/craftgui/minecraft/MinecraftGUI.java new file mode 100644 index 00000000..daf8e243 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/MinecraftGUI.java @@ -0,0 +1,20 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft; + +import binnie.craftgui.window.Panel; + +public class MinecraftGUI +{ + public enum PanelType implements Panel.IPanelType + { + Black, + Gray, + Tinted, + Coloured, + Outline, + TabOutline; + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/MinecraftTooltip.java b/src/main/java/binnie/craftgui/minecraft/MinecraftTooltip.java new file mode 100644 index 00000000..da7e536a --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/MinecraftTooltip.java @@ -0,0 +1,62 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft; + +import net.minecraft.util.EnumChatFormatting; +import binnie.craftgui.core.Tooltip; + +public class MinecraftTooltip extends Tooltip +{ + public static int getOutline(final ITooltipType type) { + return TypeColour.valueOf(type.toString()).getOutline(); + } + + public static String getTitle(final ITooltipType type) { + return TypeColour.valueOf(type.toString()).getTitle(); + } + + public static String getBody(final ITooltipType type) { + return TypeColour.valueOf(type.toString()).getBody(); + } + + public enum Type implements ITooltipType + { + Error, + Warning; + } + + private enum TypeColour + { + Standard(5243135, EnumChatFormatting.WHITE, EnumChatFormatting.GRAY), + Help(5046016, EnumChatFormatting.GREEN, EnumChatFormatting.DARK_GREEN), + Information(49151, EnumChatFormatting.AQUA, EnumChatFormatting.DARK_AQUA), + Error(16724224, EnumChatFormatting.RED, EnumChatFormatting.DARK_RED), + Warning(16752384, EnumChatFormatting.YELLOW, EnumChatFormatting.GOLD), + User(9839667, EnumChatFormatting.RED, EnumChatFormatting.DARK_RED), + Power(9006592, EnumChatFormatting.YELLOW, EnumChatFormatting.GOLD); + + int outline; + String mainText; + String bodyText; + + private TypeColour(final int outline, final EnumChatFormatting mainText, final EnumChatFormatting bodyText) { + this.outline = outline; + this.mainText = mainText.toString(); + this.bodyText = bodyText.toString(); + } + + public int getOutline() { + return this.outline; + } + + public String getTitle() { + return this.mainText; + } + + public String getBody() { + return this.bodyText; + } + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/ModuleCraftGUI.java b/src/main/java/binnie/craftgui/minecraft/ModuleCraftGUI.java new file mode 100644 index 00000000..6320f9a6 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/ModuleCraftGUI.java @@ -0,0 +1,25 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft; + +import binnie.core.IInitializable; + +public class ModuleCraftGUI implements IInitializable +{ + @Override + public void preInit() { + } + + @Override + public void init() { + } + + @Override + public void postInit() { + for (final GUIIcon icon : GUIIcon.values()) { + icon.register(); + } + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/Window.java b/src/main/java/binnie/craftgui/minecraft/Window.java new file mode 100644 index 00000000..dc1492f2 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/Window.java @@ -0,0 +1,314 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft; + +import binnie.craftgui.resource.Texture; +import binnie.craftgui.minecraft.control.ControlPowerSystem; +import binnie.core.machines.power.PowerSystem; +import binnie.craftgui.minecraft.control.ControlUser; +import binnie.core.network.packet.MessageCraftGUI; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraft.item.ItemStack; +import com.mojang.authlib.GameProfile; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.core.BinnieCore; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.events.EventWidget; +import binnie.craftgui.minecraft.control.ControlInfo; +import binnie.craftgui.minecraft.control.ControlHelp; +import binnie.craftgui.resource.StyleSheetManager; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.renderer.Renderer; +import java.util.ArrayList; +import binnie.craftgui.minecraft.control.ControlSlot; +import binnie.craftgui.minecraft.control.EnumHighlighting; +import binnie.craftgui.core.geometry.IPoint; +import binnie.core.machines.Machine; +import binnie.core.machines.inventory.IInventoryMachine; +import binnie.core.resource.ResourceType; +import binnie.Binnie; +import binnie.core.resource.BinnieResource; +import binnie.core.AbstractMod; +import binnie.craftgui.core.ITooltipHelp; +import java.util.Deque; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.Tooltip; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.craftgui.controls.ControlText; +import binnie.core.machines.network.INetwork; +import binnie.craftgui.core.TopLevelWidget; + +public abstract class Window extends TopLevelWidget implements INetwork.RecieveGuiNBT +{ + private GuiCraftGUI gui; + private ContainerCraftGUI container; + private WindowInventory windowInventory; + private ControlText title; + protected float titleButtonLeft; + protected float titleButtonRight; + private StandardTexture bgText1; + private StandardTexture bgText2; + private boolean hasBeenInitialised; + private EntityPlayer player; + private IInventory entityInventory; + private Side side; + + public void getTooltip(final Tooltip tooltip) { + final Deque queue = this.calculateMousedOverWidgets(); + while (!queue.isEmpty()) { + final IWidget widget = queue.removeFirst(); + if (widget.isEnabled() && widget.isVisible()) { + if (!widget.calculateIsMouseOver()) { + continue; + } + if (widget instanceof ITooltip) { + ((ITooltip) widget).getTooltip(tooltip); + if (tooltip.exists()) { + return; + } + } + if (widget.hasAttribute(Attribute.BlockTooltip)) { + return; + } + continue; + } + } + } + + public void getHelpTooltip(final MinecraftTooltip tooltip) { + final Deque queue = this.calculateMousedOverWidgets(); + while (!queue.isEmpty()) { + final IWidget widget = queue.removeFirst(); + if (widget.isEnabled() && widget.isVisible()) { + if (!widget.calculateIsMouseOver()) { + continue; + } + if (widget instanceof ITooltipHelp) { + ((ITooltipHelp) widget).getHelpTooltip(tooltip); + if (tooltip.exists()) { + return; + } + } + if (widget.hasAttribute(Attribute.BlockTooltip)) { + return; + } + continue; + } + } + } + + protected abstract AbstractMod getMod(); + + protected abstract String getName(); + + public BinnieResource getBackgroundTextureFile(final int i) { + return Binnie.Resource.getPNG(this.getMod(), ResourceType.GUI, this.getName() + ((i == 1) ? "" : i)); + } + + public boolean showHelpButton() { + return Machine.getInterface(IInventoryMachine.class, this.getInventory()) != null; + } + + public String showInfoButton() { + if (Machine.getInterface(IMachineInformation.class, this.getInventory()) != null) { + return Machine.getInterface(IMachineInformation.class, this.getInventory()).getInformation(); + } + return null; + } + + public Window(final float width, final float height, final EntityPlayer player, final IInventory inventory, final Side side) { + this.titleButtonLeft = 8.0f; + this.titleButtonRight = 8.0f; + this.bgText1 = null; + this.bgText2 = null; + this.hasBeenInitialised = false; + this.side = Side.CLIENT; + this.side = side; + this.setInventories(player, inventory); + this.container = new ContainerCraftGUI(this); + this.windowInventory = new WindowInventory(this); + if (side == Side.SERVER) { + return; + } + this.setSize(new IPoint(width, height)); + this.gui = new GuiCraftGUI(this); + for (final EnumHighlighting h : EnumHighlighting.values()) { + ControlSlot.highlighting.put(h, new ArrayList()); + } + (CraftGUI.Render = new Renderer(this.gui)).stylesheet(StyleSheetManager.getDefault()); + this.titleButtonLeft = -14.0f; + if (this.showHelpButton()) { + new ControlHelp(this, this.titleButtonLeft += 22.0f, 8.0f); + } + if (this.showInfoButton() != null) { + new ControlInfo(this, this.titleButtonLeft += 22.0f, 8.0f, this.showInfoButton()); + } + this.addSelfEventHandler(new EventWidget.ChangeSize.Handler() { + @Override + public void onEvent(final EventWidget.ChangeSize event) { + if (Window.this.isClient() && Window.this.getGui() != null) { + Window.this.getGui().resize(Window.this.getSize()); + if (Window.this.title != null) { + Window.this.title.setSize(new IPoint(Window.this.w(), Window.this.title.h())); + } + } + } + }); + } + + public void setTitle(final String title) { + (this.title = new ControlTextCentered(this, 12.0f, title)).setColour(4210752); + } + + @SideOnly(Side.CLIENT) + public final GuiCraftGUI getGui() { + return this.gui; + } + + public final ContainerCraftGUI getContainer() { + return this.container; + } + + public final WindowInventory getWindowInventory() { + return this.windowInventory; + } + + public final void initGui() { + if (this.hasBeenInitialised) { + return; + } + this.bgText1 = new StandardTexture(0, 0, 256, 256, this.getBackgroundTextureFile(1)); + if (this.getSize().x() > 256.0f) { + this.bgText2 = new StandardTexture(0, 0, 256, 256, this.getBackgroundTextureFile(2)); + } + if (!BinnieCore.proxy.checkTexture(this.bgText1.getTexture())) { + this.bgText1 = null; + this.bgText2 = null; + } + this.initialiseClient(); + this.hasBeenInitialised = true; + } + + public abstract void initialiseClient(); + + public void initialiseServer() { + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.colour(16777215); + if (this.getBackground1() != null) { + CraftGUI.Render.texture(this.getBackground1(), IPoint.ZERO); + } + if (this.getBackground2() != null) { + CraftGUI.Render.texture(this.getBackground2(), new IPoint(256.0f, 0.0f)); + } + CraftGUI.Render.colour(this.getColour()); + CraftGUI.Render.texture(CraftGUITexture.Window, this.getArea()); + } + + @Override + public void onUpdateClient() { + ControlSlot.highlighting.get(EnumHighlighting.Help).clear(); + ControlSlot.shiftClickActive = false; + } + + public EntityPlayer getPlayer() { + return this.player; + } + + public GameProfile getUsername() { + return this.getPlayer().getGameProfile(); + } + + public ItemStack getHeldItemStack() { + if (this.player != null) { + return this.player.inventory.getItemStack(); + } + return null; + } + + public IInventory getInventory() { + return this.entityInventory; + } + + public void setInventories(final EntityPlayer player2, final IInventory inventory) { + this.player = player2; + this.entityInventory = inventory; + } + + public void onClose() { + } + + public void setHeldItemStack(final ItemStack stack) { + if (this.player != null) { + this.player.inventory.setItemStack(stack); + } + } + + public boolean isServer() { + return !this.isClient(); + } + + public boolean isClient() { + return this.side == Side.CLIENT; + } + + public World getWorld() { + if (this.getPlayer() != null) { + return this.getPlayer().worldObj; + } + return BinnieCore.proxy.getWorld(); + } + + public void onInventoryUpdate() { + } + + public void sendClientAction(final String name, final NBTTagCompound action) { + action.setString("type", name); + final MessageCraftGUI packet = new MessageCraftGUI(action); + BinnieCore.proxy.sendToServer(packet); + } + + @Override + public void recieveGuiNBT(final Side side, final EntityPlayer player, final String name, final NBTTagCompound action) { + if (side == Side.CLIENT && name.equals("username")) { + final float w = this.w(); + final float titleButtonRight = this.titleButtonRight + 16.0f; + this.titleButtonRight = titleButtonRight; + final ControlUser controlUser = new ControlUser(this, w - titleButtonRight, 8.0f, action.getString("username")); + this.titleButtonRight += 6.0f; + } + if (side == Side.CLIENT && name.equals("power-system")) { + final float w2 = this.w(); + final float titleButtonRight2 = this.titleButtonRight + 16.0f; + this.titleButtonRight = titleButtonRight2; + final ControlPowerSystem controlPowerSystem = new ControlPowerSystem(this, w2 - titleButtonRight2, 8.0f, PowerSystem.get(action.getByte("system"))); + this.titleButtonRight += 6.0f; + } + } + + public void onWindowInventoryChanged() { + } + + public Texture getBackground1() { + return this.bgText1; + } + + public Texture getBackground2() { + return this.bgText2; + } + + public static T get(final IWidget widget) { + return (T) widget.getSuperParent(); + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/WindowInventory.java b/src/main/java/binnie/craftgui/minecraft/WindowInventory.java new file mode 100644 index 00000000..8f27d304 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/WindowInventory.java @@ -0,0 +1,140 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft; + +import net.minecraft.entity.player.EntityPlayer; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import binnie.core.machines.inventory.SlotValidator; +import net.minecraft.item.ItemStack; +import java.util.Map; +import net.minecraft.inventory.IInventory; + +public class WindowInventory implements IInventory +{ + private Window window; + private Map inventory; + private Map validators; + private List disabledAutoDispenses; + + public WindowInventory(final Window window) { + this.inventory = new HashMap(); + this.validators = new HashMap(); + this.disabledAutoDispenses = new ArrayList(); + this.window = window; + } + + @Override + public int getSizeInventory() { + if (this.inventory.size() == 0) { + return 0; + } + int max = 0; + for (final int i : this.inventory.keySet()) { + if (i > max) { + max = i; + } + } + return max + 1; + } + + @Override + public ItemStack getStackInSlot(final int var1) { + if (this.inventory.containsKey(var1)) { + return this.inventory.get(var1); + } + return null; + } + + @Override + public ItemStack decrStackSize(final int index, int amount) { + if (this.inventory.containsKey(index)) { + final ItemStack item = this.inventory.get(index); + final ItemStack output = item.copy(); + final int available = item.stackSize; + if (amount > available) { + amount = available; + } + final ItemStack itemStack = item; + itemStack.stackSize -= amount; + output.stackSize = amount; + if (item.stackSize == 0) { + this.setInventorySlotContents(index, null); + } + return output; + } + return null; + } + + @Override + public ItemStack getStackInSlotOnClosing(final int var1) { + return null; + } + + @Override + public void setInventorySlotContents(final int var1, final ItemStack var2) { + this.inventory.put(var1, var2); + this.markDirty(); + } + + @Override + public String getInventoryName() { + return "window.inventory"; + } + + @Override + public int getInventoryStackLimit() { + return 64; + } + + @Override + public void markDirty() { + this.window.onWindowInventoryChanged(); + } + + @Override + public boolean isUseableByPlayer(final EntityPlayer var1) { + return true; + } + + @Override + public void openInventory() { + } + + @Override + public void closeInventory() { + } + + @Override + public boolean hasCustomInventoryName() { + return false; + } + + @Override + public boolean isItemValidForSlot(final int i, final ItemStack itemstack) { + return !this.validators.containsKey(i) || this.validators.get(i).isValid(itemstack); + } + + public void createSlot(final int slot) { + this.inventory.put(slot, null); + } + + public void setValidator(final int slot, final SlotValidator validator) { + this.validators.put(slot, validator); + } + + public void disableAutoDispense(final int i) { + this.disabledAutoDispenses.add(i); + } + + public boolean dispenseOnClose(final int i) { + return !this.disabledAutoDispenses.contains(i); + } + + public SlotValidator getValidator(final int i) { + return this.validators.get(i); + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/control/ControlEnergyBar.java b/src/main/java/binnie/craftgui/minecraft/control/ControlEnergyBar.java new file mode 100644 index 00000000..2d228cdf --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/control/ControlEnergyBar.java @@ -0,0 +1,139 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.control; + +import binnie.craftgui.core.geometry.IArea; +import org.lwjgl.opengl.GL11; +import binnie.craftgui.minecraft.MinecraftTooltip; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.CraftGUI; +import binnie.core.machines.Machine; +import binnie.core.machines.power.IProcess; +import binnie.craftgui.core.Tooltip; +import net.minecraft.inventory.IInventory; +import binnie.core.machines.TileEntityMachine; +import binnie.craftgui.minecraft.Window; +import binnie.core.machines.power.IPoweredMachine; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +public class ControlEnergyBar extends Control implements ITooltip +{ + public static boolean isError; + private Position direction; + + public ControlEnergyBar(final IWidget parent, final int x, final int y, final int width, final int height, final Position direction) { + super(parent, x, y, width, height); + this.direction = direction; + this.addAttribute(Attribute.MouseOver); + } + + public IPoweredMachine getClientPower() { + final IInventory inventory = Window.get(this).getInventory(); + final TileEntityMachine machine = (inventory instanceof TileEntityMachine) ? (TileEntityMachine) inventory : null; + if (machine == null) { + return null; + } + final IPoweredMachine clientPower = machine.getMachine().getInterface(IPoweredMachine.class); + return clientPower; + } + + public float getPercentage() { + float percentage = 100.0f * this.getStoredEnergy() / this.getMaxEnergy(); + if (percentage > 100.0f) { + percentage = 100.0f; + } + return percentage; + } + + private float getStoredEnergy() { + return Window.get(this).getContainer().getPowerInfo().getStoredEnergy(); + } + + private float getMaxEnergy() { + return Window.get(this).getContainer().getPowerInfo().getMaxEnergy(); + } + + @Override + public void getTooltip(final Tooltip tooltip) { + tooltip.add((int) this.getPercentage() + "% charged"); + tooltip.add(this.getStoredEnergy() + "/" + this.getMaxEnergy() + " RF"); + } + + @Override + public void getHelpTooltip(final Tooltip tooltip) { + tooltip.add("Energy Bar"); + tooltip.add("Current: " + this.getStoredEnergy() + " RF (" + (int) this.getPercentage() + "%)"); + tooltip.add("Capacity: " + this.getMaxEnergy() + " RF"); + final IProcess process = Machine.getInterface(IProcess.class, Window.get(this).getInventory()); + if (process != null) { + tooltip.add("Usage: " + (int) process.getEnergyPerTick() + " RF"); + } + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.texture(CraftGUITexture.EnergyBarBack, this.getArea()); + final float percentage = this.getPercentage() / 100.0f; + CraftGUI.Render.colour(this.getColourFromPercentage(percentage)); + final IArea area = this.getArea(); + switch (this.direction) { + case Top: + case Bottom: { + final float height = area.size().y() * percentage; + area.setSize(new IPoint(area.size().x(), height)); + break; + } + case Left: + case Right: { + final float width = area.size().x() * percentage; + area.setSize(new IPoint(width, area.size().y())); + break; + } + } + if (this.isMouseOver() && Window.get(this).getGui().isHelpMode()) { + final int c = -1442840576 + MinecraftTooltip.getOutline(Tooltip.Type.Help); + CraftGUI.Render.gradientRect(this.getArea().inset(1), c, c); + } + else if (ControlEnergyBar.isError) { + final int c = -1442840576 + MinecraftTooltip.getOutline(MinecraftTooltip.Type.Error); + CraftGUI.Render.gradientRect(this.getArea().inset(1), c, c); + } + CraftGUI.Render.texture(CraftGUITexture.EnergyBarGlow, area); + GL11.glColor3d(1.0, 1.0, 1.0); + CraftGUI.Render.texture(CraftGUITexture.EnergyBarGlass, this.getArea()); + } + + @Override + public void onRenderForeground() { + if (this.isMouseOver() && Window.get(this).getGui().isHelpMode()) { + final IArea area = this.getArea(); + CraftGUI.Render.colour(MinecraftTooltip.getOutline(Tooltip.Type.Help)); + CraftGUI.Render.texture(CraftGUITexture.Outline, area.outset(1)); + } + else if (ControlEnergyBar.isError) { + final IArea area = this.getArea(); + CraftGUI.Render.colour(MinecraftTooltip.getOutline(MinecraftTooltip.Type.Error)); + CraftGUI.Render.texture(CraftGUITexture.Outline, area.outset(1)); + } + } + + public int getColourFromPercentage(final float percentage) { + int colour = 16777215; + if (percentage > 0.5) { + final int r = (int) ((1.0 - 2.0 * (percentage - 0.5)) * 255.0); + colour = (r << 16) + 65280; + } + else { + final int g = (int) (255.0f * (2.0f * percentage)); + colour = 16711680 + (g << 8); + } + return colour; + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/control/ControlErrorState.java b/src/main/java/binnie/craftgui/minecraft/control/ControlErrorState.java new file mode 100644 index 00000000..32234013 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/control/ControlErrorState.java @@ -0,0 +1,106 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.control; + +import binnie.craftgui.minecraft.MinecraftTooltip; +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.minecraft.CustomSlot; +import net.minecraft.entity.player.InventoryPlayer; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.minecraft.Window; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.core.machines.power.ErrorState; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +public class ControlErrorState extends Control implements ITooltip +{ + private ErrorState errorState; + private int type; + + @Override + public void onRenderBackground() { + Object texture = CraftGUITexture.StateWarning; + if (this.errorState == null) { + texture = CraftGUITexture.StateNone; + } + else if (this.type == 0) { + texture = CraftGUITexture.StateError; + } + CraftGUI.Render.texture(texture, IPoint.ZERO); + super.onRenderBackground(); + } + + public ErrorState getError() { + return Window.get(this).getContainer().getErrorState(); + } + + @Override + public final void onUpdateClient() { + this.errorState = this.getError(); + this.type = Window.get(this).getContainer().getErrorType(); + ControlSlot.highlighting.get(EnumHighlighting.Error).clear(); + ControlSlot.highlighting.get(EnumHighlighting.Warning).clear(); + ControlLiquidTank.tankError.clear(); + ControlEnergyBar.isError = false; + if (!this.isMouseOver() || this.errorState == null) { + return; + } + ControlEnergyBar.isError = this.errorState.isPowerError(); + if (this.errorState.isItemError()) { + for (final int slot : this.errorState.getData()) { + int id = -1; + for (final CustomSlot cslot : Window.get(this).getContainer().getCustomSlots()) { + if (!(cslot.inventory instanceof InventoryPlayer) && cslot.getSlotIndex() == slot) { + id = cslot.slotNumber; + } + } + if (id >= 0) { + if (this.type == 0) { + ControlSlot.highlighting.get(EnumHighlighting.Error).add(id); + } + else { + ControlSlot.highlighting.get(EnumHighlighting.Warning).add(id); + } + } + } + } + if (this.errorState.isTankError()) { + for (final int slot : this.errorState.getData()) { + ControlLiquidTank.tankError.add(slot); + } + } + } + + public ControlErrorState(final IWidget parent, final float x, final float y) { + super(parent, x, y, 16.0f, 16.0f); + this.type = 0; + this.addAttribute(Attribute.MouseOver); + } + + @Override + public void getTooltip(final Tooltip tooltipOrig) { + final MinecraftTooltip tooltip = (MinecraftTooltip) tooltipOrig; + if (this.errorState != null) { + if (this.type == 0) { + tooltip.setType(MinecraftTooltip.Type.Error); + } + else { + tooltip.setType(MinecraftTooltip.Type.Warning); + } + tooltip.add(this.errorState.toString()); + if (this.errorState.getTooltip().length() > 0) { + tooltip.add(this.errorState.getTooltip()); + } + } + } + + public ErrorState getErrorState() { + return this.errorState; + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/control/ControlHelp.java b/src/main/java/binnie/craftgui/minecraft/control/ControlHelp.java new file mode 100644 index 00000000..abc544e9 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/control/ControlHelp.java @@ -0,0 +1,40 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.control; + +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +public class ControlHelp extends Control implements ITooltip +{ + public ControlHelp(final IWidget parent, final float x, final float y) { + super(parent, x, y, 16.0f, 16.0f); + this.addAttribute(Attribute.MouseOver); + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.texture(CraftGUITexture.HelpButton, this.getArea()); + } + + @Override + public void getTooltip(final Tooltip tooltip) { + tooltip.setType(Tooltip.Type.Help); + tooltip.add("Help"); + tooltip.add("To activate help tooltips,"); + tooltip.add("hold down the tab key and"); + tooltip.add("mouse over controls."); + } + + @Override + public void getHelpTooltip(final Tooltip tooltip) { + this.getTooltip(tooltip); + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/control/ControlIconDisplay.java b/src/main/java/binnie/craftgui/minecraft/control/ControlIconDisplay.java new file mode 100644 index 00000000..9d3319e4 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/control/ControlIconDisplay.java @@ -0,0 +1,27 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.control; + +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.IWidget; +import net.minecraft.util.IIcon; +import binnie.craftgui.controls.core.Control; + +public class ControlIconDisplay extends Control +{ + private IIcon icon; + + public ControlIconDisplay(final IWidget parent, final float x, final float y, final IIcon icon) { + super(parent, x, y, 16.0f, 16.0f); + this.icon = null; + this.icon = icon; + } + + @Override + public void onRenderForeground() { + CraftGUI.Render.iconItem(IPoint.ZERO, this.icon); + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/control/ControlImage.java b/src/main/java/binnie/craftgui/minecraft/control/ControlImage.java new file mode 100644 index 00000000..7b7e4937 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/control/ControlImage.java @@ -0,0 +1,27 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.control; + +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.resource.Texture; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.core.Control; + +public class ControlImage extends Control +{ + private Object key; + + public ControlImage(final IWidget parent, final float x, final float y, final Texture text) { + super(parent, x, y, text.w(), text.h()); + this.key = null; + this.key = text; + } + + @Override + public void onRenderForeground() { + CraftGUI.Render.texture(this.key, IPoint.ZERO); + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/control/ControlInfo.java b/src/main/java/binnie/craftgui/minecraft/control/ControlInfo.java new file mode 100644 index 00000000..78a7fc43 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/control/ControlInfo.java @@ -0,0 +1,37 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.control; + +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +public class ControlInfo extends Control implements ITooltip +{ + private String info; + + public ControlInfo(final IWidget parent, final float x, final float y, final String info) { + super(parent, x, y, 16.0f, 16.0f); + this.addAttribute(Attribute.MouseOver); + this.info = info; + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.texture(CraftGUITexture.InfoButton, this.getArea()); + } + + @Override + public void getTooltip(final Tooltip tooltip) { + tooltip.setType(Tooltip.Type.Information); + tooltip.add("Info"); + tooltip.add(this.info); + tooltip.setMaxWidth(200); + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/control/ControlItemDisplay.java b/src/main/java/binnie/craftgui/minecraft/control/ControlItemDisplay.java new file mode 100644 index 00000000..33ebcf29 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/control/ControlItemDisplay.java @@ -0,0 +1,92 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.control; + +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import net.minecraft.client.Minecraft; +import binnie.core.BinnieCore; +import org.lwjgl.opengl.GL11; +import binnie.craftgui.minecraft.Window; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.Attribute; +import net.minecraft.item.ItemStack; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +public class ControlItemDisplay extends Control implements ITooltip +{ + private ItemStack itemStack; + public boolean hastooltip; + private boolean rotating; + + public void setTooltip() { + this.hastooltip = true; + this.addAttribute(Attribute.MouseOver); + } + + public ControlItemDisplay(final IWidget parent, final float x, final float y) { + this(parent, x, y, 16.0f); + } + + public ControlItemDisplay(final IWidget parent, final float f, final float y, final ItemStack stack, final boolean tooltip) { + this(parent, f, y, 16.0f); + this.setItemStack(stack); + if (tooltip) { + this.setTooltip(); + } + } + + public ControlItemDisplay(final IWidget parent, final float x, final float y, final float size) { + super(parent, x, y, size, size); + this.itemStack = null; + this.hastooltip = false; + this.rotating = false; + } + + @Override + public void onRenderBackground() { + final IPoint relativeToWindow = this.getAbsolutePosition().sub(this.getSuperParent().getPosition()); + if (relativeToWindow.x() > Window.get(this).getSize().x() + 100.0f || relativeToWindow.y() > Window.get(this).getSize().y() + 100.0f) { + return; + } + if (this.itemStack != null) { + + if (this.getSize().x() != 16.0f) { + GL11.glPushMatrix(); + final float scale = this.getSize().x() / 16.0f; + GL11.glScalef(scale, scale, 1.0f); + BinnieCore.proxy.getMinecraftInstance(); + final float phase = Minecraft.getSystemTime() / 20.0f; + CraftGUI.Render.item(IPoint.ZERO, this.itemStack, this.rotating); + GL11.glPopMatrix(); + } + else { + CraftGUI.Render.item(IPoint.ZERO, this.itemStack, this.rotating); + } + } + } + + public void setItemStack(final ItemStack itemStack) { + this.itemStack = itemStack; + } + + public ItemStack getItemStack() { + return this.itemStack; + } + + @Override + public void getTooltip(final Tooltip tooltip) { + if (this.hastooltip && this.itemStack != null) { + tooltip.add(this.itemStack.getTooltip(((Window) this.getSuperParent()).getPlayer(), false)); + } + super.getTooltip(tooltip); + } + + public void setRotating() { + this.rotating = true; + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/control/ControlLiquidTank.java b/src/main/java/binnie/craftgui/minecraft/control/ControlLiquidTank.java new file mode 100644 index 00000000..423d9dbc --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/control/ControlLiquidTank.java @@ -0,0 +1,179 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.control; + +import java.util.ArrayList; +import binnie.core.machines.Machine; +import binnie.core.machines.power.ITankMachine; +import binnie.core.machines.inventory.TankSlot; +import binnie.core.machines.inventory.MachineSide; +import net.minecraft.util.IIcon; +import net.minecraftforge.fluids.Fluid; +import net.minecraft.client.renderer.texture.TextureMap; +import binnie.core.BinnieCore; +import binnie.craftgui.core.geometry.IArea; +import org.lwjgl.opengl.GL11; +import binnie.craftgui.minecraft.MinecraftTooltip; +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.CraftGUI; +import binnie.core.machines.power.TankInfo; +import binnie.craftgui.minecraft.Window; +import net.minecraft.nbt.NBTTagCompound; +import binnie.craftgui.events.EventMouse; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.IWidget; +import java.util.List; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +public class ControlLiquidTank extends Control implements ITooltip +{ + public static List tankError; + private int tankID; + private boolean horizontal; + + public ControlLiquidTank(final IWidget parent, final int x, final int y) { + this(parent, x, y, false); + } + + public ControlLiquidTank(final IWidget parent, final int x, final int y, final boolean horizontal) { + super(parent, x, y, horizontal ? 60.0f : 18.0f, horizontal ? 18.0f : 60.0f); + this.tankID = 0; + this.horizontal = false; + this.horizontal = horizontal; + this.addAttribute(Attribute.MouseOver); + this.addSelfEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + if (event.getButton() == 0) { + final NBTTagCompound nbt = new NBTTagCompound(); + nbt.setByte("id", (byte) ControlLiquidTank.this.tankID); + Window.get(ControlLiquidTank.this.getWidget()).sendClientAction("tank-click", nbt); + } + } + }); + } + + public void setTankID(final int tank) { + this.tankID = tank; + } + + public TankInfo getTank() { + return Window.get(this).getContainer().getTankInfo(this.tankID); + } + + public boolean isTankValid() { + return !this.getTank().isEmpty(); + } + + public int getTankCapacity() { + return (int) this.getTank().getCapacity(); + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.texture(this.horizontal ? CraftGUITexture.HorizontalLiquidTank : CraftGUITexture.LiquidTank, IPoint.ZERO); + if (this.isMouseOver() && Window.get(this).getGui().isHelpMode()) { + final int c = -1442840576 + MinecraftTooltip.getOutline(Tooltip.Type.Help); + CraftGUI.Render.gradientRect(this.getArea().inset(1), c, c); + } + else if (ControlLiquidTank.tankError.contains(this.tankID)) { + final int c = -1442840576 + MinecraftTooltip.getOutline(MinecraftTooltip.Type.Error); + CraftGUI.Render.gradientRect(this.getArea().inset(1), c, c); + } + else if (this.getSuperParent().getMousedOverWidget() == this) { + if (Window.get(this).getGui().getDraggedItem() != null) { + CraftGUI.Render.gradientRect(this.getArea().inset(1), -1426089575, -1426089575); + } + else { + CraftGUI.Render.gradientRect(this.getArea().inset(1), -2130706433, -2130706433); + } + } + if (this.isTankValid()) { + final Object content = null; + final float height = this.horizontal ? 16.0f : 58.0f; + final int squaled = (int) (height * (this.getTank().getAmount() / this.getTank().getCapacity())); + final int yPos = (int) height + 1; + final Fluid fluid = this.getTank().liquid.getFluid(); + final int hex = fluid.getColor(this.getTank().liquid); + final int r = (hex & 0xFF0000) >> 16; + final int g = (hex & 0xFF00) >> 8; + final int b = hex & 0xFF; + GL11.glColor4f(r / 255.0f, g / 255.0f, b / 255.0f, 1.0f); + GL11.glEnable(3042); + GL11.glBlendFunc(770, 771); + final IPoint pos = this.getAbsolutePosition(); + final IPoint offset = new IPoint(0.0f, height - squaled); + final IArea limited = this.getArea().inset(1); + if (this.horizontal) { + limited.setSize(new IPoint(limited.w() - 1.0f, limited.h())); + } + CraftGUI.Render.limitArea(new IArea(limited.pos().add(pos).add(offset), limited.size().sub(offset))); + GL11.glEnable(3089); + BinnieCore.proxy.bindTexture(TextureMap.locationItemsTexture); + for (int y = 0; y < height; y += 16) { + for (int x = 0; x < (this.horizontal ? 58 : 16); x += 16) { + final IIcon icon = fluid.getIcon(); + CraftGUI.Render.iconBlock(new IPoint(1 + x, 1 + y), icon); + } + } + GL11.glDisable(3089); + GL11.glDisable(3042); + } + } + + @Override + public void onRenderForeground() { + CraftGUI.Render.texture(this.horizontal ? CraftGUITexture.HorizontalLiquidTankOverlay : CraftGUITexture.LiquidTankOverlay, IPoint.ZERO); + if (this.isMouseOver() && Window.get(this).getGui().isHelpMode()) { + final IArea area = this.getArea(); + CraftGUI.Render.colour(MinecraftTooltip.getOutline(Tooltip.Type.Help)); + CraftGUI.Render.texture(CraftGUITexture.Outline, area.outset(1)); + } + if (ControlLiquidTank.tankError.contains(this.tankID)) { + final IArea area = this.getArea(); + CraftGUI.Render.colour(MinecraftTooltip.getOutline(MinecraftTooltip.Type.Error)); + CraftGUI.Render.texture(CraftGUITexture.Outline, area.outset(1)); + } + } + + @Override + public void getHelpTooltip(final Tooltip tooltip) { + if (this.getTankSlot() != null) { + final TankSlot slot = this.getTankSlot(); + tooltip.add(slot.getName()); + tooltip.add("Capacity: " + this.getTankCapacity() + " mB"); + tooltip.add("Insert Side: " + MachineSide.asString(slot.getInputSides())); + tooltip.add("Extract Side: " + MachineSide.asString(slot.getOutputSides())); + if (slot.isReadOnly()) { + tooltip.add("Output Only Tank"); + } + tooltip.add("Accepts: " + ((slot.getValidator() == null) ? "Any Item" : slot.getValidator().getTooltip())); + } + } + + @Override + public void getTooltip(final Tooltip tooltip) { + if (this.isTankValid()) { + final int percentage = (int) (100.0 * this.getTank().getAmount() / this.getTankCapacity()); + tooltip.add(this.getTank().getName()); + tooltip.add(percentage + "% full"); + tooltip.add((int) this.getTank().getAmount() + " mB"); + return; + } + tooltip.add("Empty"); + } + + private TankSlot getTankSlot() { + final ITankMachine tank = Machine.getInterface(ITankMachine.class, Window.get(this).getInventory()); + return (tank != null) ? tank.getTankSlot(this.tankID) : null; + } + + static { + ControlLiquidTank.tankError = new ArrayList(); + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/control/ControlMachineProgress.java b/src/main/java/binnie/craftgui/minecraft/control/ControlMachineProgress.java new file mode 100644 index 00000000..cf1f21cf --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/control/ControlMachineProgress.java @@ -0,0 +1,16 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.control; + +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.resource.Texture; +import binnie.craftgui.core.IWidget; + +public class ControlMachineProgress extends ControlProgress +{ + public ControlMachineProgress(final IWidget parent, final int x, final int y, final Texture base, final Texture progress, final Position dir) { + super(parent, x, y, base, progress, dir); + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/control/ControlPlayerInventory.java b/src/main/java/binnie/craftgui/minecraft/control/ControlPlayerInventory.java new file mode 100644 index 00000000..096c7632 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/control/ControlPlayerInventory.java @@ -0,0 +1,99 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.control; + +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import binnie.craftgui.minecraft.InventoryType; +import java.util.ArrayList; +import binnie.craftgui.core.IWidget; +import java.util.List; +import binnie.craftgui.controls.core.Control; + +public class ControlPlayerInventory extends Control +{ + private List slots; + + public ControlPlayerInventory(final IWidget parent, final boolean wide) { + super(parent, (int) (parent.getSize().x() / 2.0f) - (wide ? 110 : 81), (int) parent.getSize().y() - (wide ? 54 : 76) - 12, wide ? 220 : 162, wide ? 54 : 76); + this.slots = new ArrayList(); + for (int row = 0; row < 3; ++row) { + for (int column = 0; column < 9; ++column) { + final ControlSlot slot = new ControlSlot(this, (wide ? 58 : 0) + column * 18, row * 18); + this.slots.add(slot); + } + } + if (wide) { + for (int i1 = 0; i1 < 9; ++i1) { + final ControlSlot slot2 = new ControlSlot(this, i1 % 3 * 18, i1 / 3 * 18); + this.slots.add(slot2); + } + } + else { + for (int i1 = 0; i1 < 9; ++i1) { + final ControlSlot slot2 = new ControlSlot(this, i1 * 18, 58.0f); + this.slots.add(slot2); + } + } + this.create(); + } + + public ControlPlayerInventory(final IWidget parent) { + this(parent, false); + } + + public ControlPlayerInventory(final IWidget parent, final int x, final int y) { + super(parent, x, y, 54.0f, 220.0f); + this.slots = new ArrayList(); + for (int row = 0; row < 6; ++row) { + for (int column = 0; column < 6; ++column) { + final ControlSlot slot = new ControlSlot(this, column * 18, row * 18); + this.slots.add(slot); + } + } + this.create(); + } + + public void create() { + for (int row = 0; row < 3; ++row) { + for (int column = 0; column < 9; ++column) { + final ControlSlot slot = this.slots.get(column + row * 9); + slot.assign(InventoryType.Player, 9 + column + row * 9); + } + } + for (int i1 = 0; i1 < 9; ++i1) { + final ControlSlot slot2 = this.slots.get(27 + i1); + slot2.assign(InventoryType.Player, i1); + } + } + + public void addItem(final ItemStack item) { + if (item == null) { + return; + } + for (final ControlSlot slot : this.slots) { + if (!slot.slot.getHasStack()) { + slot.slot.putStack(item); + } + } + } + + public void addInventory(final IInventory inventory) { + for (int i = 0; i < inventory.getSizeInventory(); ++i) { + this.addItem(inventory.getStackInSlot(i)); + } + } + + public ControlSlot getSlot(final int i) { + if (i < 0 || i >= this.slots.size()) { + return null; + } + return this.slots.get(i); + } + + @Override + public void onUpdateClient() { + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/control/ControlPowerSystem.java b/src/main/java/binnie/craftgui/minecraft/control/ControlPowerSystem.java new file mode 100644 index 00000000..bc29badb --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/control/ControlPowerSystem.java @@ -0,0 +1,38 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.control; + +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.IWidget; +import binnie.core.machines.power.PowerSystem; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +public class ControlPowerSystem extends Control implements ITooltip +{ + private PowerSystem system; + + public ControlPowerSystem(final IWidget parent, final float x, final float y, final PowerSystem system) { + super(parent, x, y, 16.0f, 16.0f); + this.addAttribute(Attribute.MouseOver); + this.system = system; + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.texture(CraftGUITexture.PowerButton, this.getArea()); + } + + @Override + public void getTooltip(final Tooltip tooltip) { + tooltip.setType(Tooltip.Type.Power); + tooltip.add("Power Supply"); + tooltip.add("Powered by " + this.system.getUnitName()); + tooltip.setMaxWidth(200); + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/control/ControlProgress.java b/src/main/java/binnie/craftgui/minecraft/control/ControlProgress.java new file mode 100644 index 00000000..96ba20ee --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/control/ControlProgress.java @@ -0,0 +1,31 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.control; + +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.resource.Texture; + +public class ControlProgress extends ControlProgressBase +{ + private Texture progressBlank; + private Texture progressBar; + private Position direction; + + public ControlProgress(final IWidget parent, final int x, final int y, final Texture progressBlank, final Texture progressBar, final Position dir) { + super(parent, x, y, (progressBlank == null) ? 0.0f : progressBlank.w(), (progressBlank == null) ? 0.0f : progressBlank.h()); + this.progressBlank = progressBlank; + this.progressBar = progressBar; + this.progress = 0.0f; + this.direction = dir; + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.texture(this.progressBlank, this.getArea()); + CraftGUI.Render.texturePercentage(this.progressBar, this.getArea(), this.direction, this.progress); + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/control/ControlProgressBase.java b/src/main/java/binnie/craftgui/minecraft/control/ControlProgressBase.java new file mode 100644 index 00000000..4b48a13f --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/control/ControlProgressBase.java @@ -0,0 +1,93 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.control; + +import binnie.core.machines.Machine; +import binnie.core.machines.power.IProcess; +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.minecraft.Window; +import binnie.core.machines.power.ProcessInfo; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.core.Control; + +public class ControlProgressBase extends Control +{ + protected float progress; + + public ControlProgressBase(final IWidget parent, final float x, final float y, final float w, final float h) { + super(parent, x, y, w, h); + this.progress = 0.0f; + this.addAttribute(Attribute.MouseOver); + } + + public void setProgress(final float progress) { + this.progress = progress; + if (this.progress < 0.0f) { + this.progress = 0.0f; + } + else if (this.progress > 1.0f) { + this.progress = 1.0f; + } + } + + protected ProcessInfo getProcess() { + return Window.get(this).getContainer().getProcessInfo(); + } + + @Override + public void onUpdateClient() { + final ProcessInfo process = this.getProcess(); + if (process != null) { + this.setProgress(process.getCurrentProgress() / 100.0f); + } + } + + @Override + public void getHelpTooltip(final Tooltip tooltip) { + final ProcessInfo process = this.getProcess(); + final IProcess machineProcess = Machine.getMachine(Window.get(this).getInventory()).getInterface(IProcess.class); + if (process != null) { + tooltip.add("Progress"); + if (this.progress == 0.0f) { + tooltip.add("Not in Progress"); + } + else if (process.getProcessTime() > 0) { + tooltip.add(machineProcess.getTooltip() + " (" + (int) process.getCurrentProgress() + "%)"); + } + else { + tooltip.add("In Progress"); + } + if (process.getProcessTime() > 0) { + tooltip.add("Time Left: " + convertTime((int) ((1.0f - this.progress) * process.getProcessTime()))); + tooltip.add("Total Time: " + convertTime(process.getProcessTime())); + tooltip.add("Energy Cost: " + process.getProcessEnergy() * 10 + " RF"); + } + else { + tooltip.add("Energy Cost: " + process.getEnergyPerTick() * 10.0f + " RF / tick"); + } + } + } + + public static String convertTime(final int time) { + int seconds = (int) (time / 20.0f); + int minutes = 0; + while (seconds >= 60) { + ++minutes; + seconds -= 60; + } + String ts = ""; + if (minutes > 0) { + ts = ts + minutes + " minute" + ((minutes == 1) ? "" : "s"); + } + if (seconds > 0) { + if (ts.length() > 0) { + ts += " "; + } + ts = ts + seconds + " second" + ((seconds == 1) ? "" : "s"); + } + return ts; + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/control/ControlSlide.java b/src/main/java/binnie/craftgui/minecraft/control/ControlSlide.java new file mode 100644 index 00000000..6aae9e9a --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/control/ControlSlide.java @@ -0,0 +1,105 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.control; + +import binnie.craftgui.resource.Texture; +import binnie.craftgui.core.geometry.TextJustification; +import org.lwjgl.opengl.GL11; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.geometry.IBorder; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.controls.core.Control; + +public class ControlSlide extends Control +{ + private IArea expanded; + private IArea shrunk; + private boolean slideActive; + private Position anchor; + private String label; + + public ControlSlide(final IWidget parent, final float x, final float y, final float w, final float h, final Position anchor2) { + super(parent, x, y, w, h); + this.slideActive = true; + this.label = null; + this.addAttribute(Attribute.MouseOver); + this.addAttribute(Attribute.BlockTooltip); + this.expanded = new IArea(this.getPosition(), this.getSize()); + this.anchor = anchor2.opposite(); + final float border = (this.anchor.x() != 0) ? (this.expanded.w() - 6.0f) : (this.expanded.h() - 6.0f); + this.shrunk = this.expanded.inset(new IBorder(this.anchor, border)); + this.slideActive = false; + } + + @Override + public void onRenderBackground() { + super.onRenderBackground(); + if (this.label != null) { + final float lw = CraftGUI.Render.textWidth(this.label) + 16; + final float lh = CraftGUI.Render.textHeight() + 16; + final boolean hor = this.anchor.x() != 0; + final IArea ar = this.isSlideActive() ? this.expanded : this.shrunk; + IArea tabArea = new IArea(hor ? (-lh / 2.0f) : (-lw / 2.0f), hor ? (-lw / 2.0f) : (-lh / 2.0f), hor ? lh : lw, hor ? lw : lh); + final IPoint shift = new IPoint(ar.w() * (1 - this.anchor.x()) / 2.0f, ar.h() * (1 - this.anchor.y()) / 2.0f); + tabArea = tabArea.shift(shift.x() - (-3.0f + lh / 2.0f) * this.anchor.x(), shift.y() - (-3.0f + lh / 2.0f) * this.anchor.y()); + Texture texture = CraftGUI.Render.getTexture(this.isSlideActive() ? CraftGUITexture.Tab : CraftGUITexture.TabDisabled).crop(this.anchor.opposite(), 8.0f); + CraftGUI.Render.texture(texture, tabArea); + texture = CraftGUI.Render.getTexture(CraftGUITexture.TabOutline).crop(this.anchor.opposite(), 8.0f); + CraftGUI.Render.texture(texture, tabArea.inset(2)); + final IArea labelArea = new IArea(-lw / 2.0f, 0.0f, lw, lh); + GL11.glPushMatrix(); + GL11.glTranslatef(shift.x() + this.anchor.x() * 2.0f, shift.y() + this.anchor.y() * 2.0f, 0.0f); + if (this.anchor.x() != 0) { + GL11.glRotatef(90.0f, 0.0f, 0.0f, this.anchor.x()); + } + if (this.anchor.y() > 0) { + GL11.glTranslatef(0.0f, -lh, 0.0f); + } + CraftGUI.Render.text(labelArea, TextJustification.MiddleCenter, this.label, 16777215); + GL11.glPopMatrix(); + } + CraftGUI.Render.texture(CraftGUITexture.Window, this.getArea()); + final Object slideTexture = (this.anchor == Position.Bottom) ? CraftGUITexture.SlideDown : ((this.anchor == Position.Top) ? CraftGUITexture.SlideUp : ((this.anchor == Position.Left) ? CraftGUITexture.SlideLeft : CraftGUITexture.SlideRight)); + CraftGUI.Render.texture(slideTexture, new IPoint((this.anchor.x() + 1.0f) * this.w() / 2.0f - 8.0f, (this.anchor.y() + 1.0f) * this.h() / 2.0f - 8.0f)); + } + + public boolean isSlideActive() { + return this.slideActive; + } + + @Override + public void onUpdateClient() { + final boolean mouseOver = this.isMouseOverWidget(this.getRelativeMousePosition()); + if (mouseOver != this.slideActive) { + this.setSlide(mouseOver); + } + } + + @Override + public boolean isMouseOverWidget(final IPoint relativeMouse) { + return this.getArea().outset(this.isSlideActive() ? 16 : 8).outset(new IBorder(this.anchor.opposite(), 16.0f)).contains(relativeMouse); + } + + @Override + public boolean isChildVisible(final IWidget child) { + return this.slideActive; + } + + public void setSlide(final boolean b) { + this.slideActive = b; + final IArea area = this.isSlideActive() ? this.expanded : this.shrunk; + this.setSize(area.size()); + this.setPosition(area.pos()); + } + + public void setLabel(final String l) { + this.label = l; + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/control/ControlSlot.java b/src/main/java/binnie/craftgui/minecraft/control/ControlSlot.java new file mode 100644 index 00000000..93ac00c7 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/control/ControlSlot.java @@ -0,0 +1,211 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.control; + +import java.util.HashMap; +import binnie.craftgui.minecraft.CustomSlot; +import binnie.core.machines.inventory.SlotValidator; +import net.minecraft.entity.player.InventoryPlayer; +import binnie.craftgui.minecraft.WindowInventory; +import binnie.core.machines.inventory.MachineSide; +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.minecraft.InventoryType; +import net.minecraft.item.ItemStack; +import java.util.ArrayList; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.util.IIcon; +import binnie.core.machines.inventory.InventorySlot; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.CraftGUI; +import net.minecraft.client.multiplayer.PlayerControllerMP; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.minecraft.GuiCraftGUI; +import binnie.craftgui.minecraft.Window; +import binnie.craftgui.events.EventMouse; +import binnie.craftgui.core.IWidget; +import net.minecraft.inventory.Slot; +import java.util.List; +import java.util.Map; + +public class ControlSlot extends ControlSlotBase +{ + public static Map> highlighting; + public static boolean shiftClickActive; + public Slot slot; + + public ControlSlot(final IWidget parent, final float x, final float y) { + super(parent, x, y); + this.slot = null; + this.addSelfEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + if (ControlSlot.this.slot != null) { + final PlayerControllerMP playerController = ((Window) ControlSlot.this.getSuperParent()).getGui().getMinecraft().playerController; + final int windowId = ((Window) ControlSlot.this.getSuperParent()).getContainer().windowId; + final int slotNumber = ControlSlot.this.slot.slotNumber; + final int button = event.getButton(); + Window.get(ControlSlot.this.getWidget()).getGui(); + playerController.windowClick(windowId, slotNumber, button, GuiScreen.isShiftKeyDown() ? 1 : 0, ((Window) ControlSlot.this.getSuperParent()).getGui().getMinecraft().thePlayer); + } + } + }); + } + + public ControlSlot(final IWidget parent, final int x, final int y, final Slot slot) { + super(parent, x, y); + this.slot = null; + this.slot = slot; + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.texture(CraftGUITexture.Slot, IPoint.ZERO); + if (this.slot == null) { + return; + } + final InventorySlot islot = this.getInventorySlot(); + if (islot != null && islot.getValidator() != null) { + final IIcon icon = islot.getValidator().getIcon(!islot.getInputSides().isEmpty()); + if (icon != null) { + CraftGUI.Render.iconItem(new IPoint(1.0f, 1.0f), icon); + } + } + boolean highlighted = false; + for (final Map.Entry> highlight : ControlSlot.highlighting.entrySet()) { + if (highlight.getKey() == EnumHighlighting.ShiftClick && !ControlSlot.shiftClickActive) { + continue; + } + if (highlighted || !highlight.getValue().contains(this.slot.slotNumber)) { + continue; + } + highlighted = true; + final int c = -1442840576 + Math.min(highlight.getKey().getColour(), 16777215); + CraftGUI.Render.gradientRect(new IArea(1.0f, 1.0f, 16.0f, 16.0f), c, c); + } + if (!highlighted && this.getSuperParent().getMousedOverWidget() == this) { + if (Window.get(this).getGui().getDraggedItem() != null && !this.slot.isItemValid(Window.get(this).getGui().getDraggedItem())) { + CraftGUI.Render.gradientRect(new IArea(1.0f, 1.0f, 16.0f, 16.0f), -1426089575, -1426089575); + } + else { + CraftGUI.Render.gradientRect(new IArea(1.0f, 1.0f, 16.0f, 16.0f), -2130706433, -2130706433); + } + } + } + + @Override + public void onRenderOverlay() { + if (this.slot == null) { + return; + } + boolean highlighted = false; + for (final Map.Entry> highlight : ControlSlot.highlighting.entrySet()) { + if (highlight.getKey() == EnumHighlighting.ShiftClick && !ControlSlot.shiftClickActive) { + continue; + } + if (highlighted || !highlight.getValue().contains(this.slot.slotNumber)) { + continue; + } + highlighted = true; + final int c = highlight.getKey().getColour(); + IArea area = this.getArea(); + if (this.getParent() instanceof ControlSlotArray || this.getParent() instanceof ControlPlayerInventory) { + area = this.getParent().getArea(); + area.setPosition(IPoint.ZERO.sub(this.getPosition())); + } + CraftGUI.Render.colour(c); + CraftGUI.Render.texture(CraftGUITexture.Outline, area.outset(1)); + } + } + + @Override + public void onUpdateClient() { + super.onUpdateClient(); + if (this.slot == null) { + return; + } + if (this.isMouseOver() && GuiScreen.isShiftKeyDown()) { + Window.get(this).getContainer().setMouseOverSlot(this.slot); + ControlSlot.shiftClickActive = true; + } + if (Window.get(this).getGui().isHelpMode() && this.isMouseOver()) { + for (final ControlSlot slot2 : this.getControlSlots()) { + if (slot2.slot != null) { + ControlSlot.highlighting.get(EnumHighlighting.Help).add(slot2.slot.slotNumber); + } + } + } + } + + private List getControlSlots() { + final List slots = new ArrayList(); + if (this.getParent() instanceof ControlSlotArray || this.getParent() instanceof ControlPlayerInventory) { + for (final IWidget child : this.getParent().getWidgets()) { + slots.add((ControlSlot) child); + } + } + else { + slots.add(this); + } + return slots; + } + + @Override + public ItemStack getItemStack() { + if (this.slot != null) { + return this.slot.getStack(); + } + return null; + } + + public ControlSlot assign(final int index) { + return this.assign(InventoryType.Machine, index); + } + + public ControlSlot assign(final InventoryType inventory, final int index) { + if (this.slot != null) { + return this; + } + this.slot = ((Window) this.getSuperParent()).getContainer().getOrCreateSlot(inventory, index); + return this; + } + + @Override + public void getHelpTooltip(final Tooltip tooltip) { + if (this.slot == null) { + return; + } + final InventorySlot slot = this.getInventorySlot(); + if (this.getInventorySlot() != null) { + tooltip.add(slot.getName()); + tooltip.add("Insert Side: " + MachineSide.asString(slot.getInputSides())); + tooltip.add("Extract Side: " + MachineSide.asString(slot.getOutputSides())); + if (slot.isReadOnly()) { + tooltip.add("Pickup Only Slot"); + } + tooltip.add("Accepts: " + ((slot.getValidator() == null) ? "Any Item" : slot.getValidator().getTooltip())); + } + else if (this.slot.inventory instanceof WindowInventory) { + final SlotValidator s = ((WindowInventory) this.slot.inventory).getValidator(this.slot.getSlotIndex()); + tooltip.add("Accepts: " + ((s == null) ? "Any Item" : s.getTooltip())); + } + else if (this.slot.inventory instanceof InventoryPlayer) { + tooltip.add("Player Inventory"); + } + } + + public InventorySlot getInventorySlot() { + return (this.slot instanceof CustomSlot) ? ((CustomSlot) this.slot).getInventorySlot() : null; + } + + static { + ControlSlot.highlighting = new HashMap>(); + ControlSlot.shiftClickActive = false; + for (final EnumHighlighting h : EnumHighlighting.values()) { + ControlSlot.highlighting.put(h, new ArrayList()); + } + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/control/ControlSlotArray.java b/src/main/java/binnie/craftgui/minecraft/control/ControlSlotArray.java new file mode 100644 index 00000000..5cd4419e --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/control/ControlSlotArray.java @@ -0,0 +1,71 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.control; + +import java.util.Iterator; +import binnie.craftgui.minecraft.InventoryType; +import net.minecraft.item.ItemStack; +import java.util.ArrayList; +import binnie.craftgui.core.IWidget; +import java.util.List; +import binnie.craftgui.controls.core.Control; + +public class ControlSlotArray extends Control implements Iterable +{ + private int rows; + private int columns; + private List slots; + + public ControlSlotArray(final IWidget parent, final int x, final int y, final int columns, final int rows) { + super(parent, x, y, columns * 18, rows * 18); + this.slots = new ArrayList(); + this.rows = rows; + this.columns = columns; + for (int row = 0; row < rows; ++row) { + for (int column = 0; column < columns; ++column) { + this.slots.add(this.createSlot(column * 18, row * 18)); + } + } + } + + public ControlSlot createSlot(final int x, final int y) { + return new ControlSlot(this, x, y); + } + + public void setItemStacks(final ItemStack[] array) { + int i = 0; + for (final ItemStack item : array) { + if (i >= this.slots.size()) { + return; + } + this.slots.get(i).slot.putStack(item); + ++i; + } + } + + public ControlSlot getControlSlot(final int i) { + if (i < 0 || i >= this.slots.size()) { + return null; + } + return this.slots.get(i); + } + + public ControlSlotArray create(final int[] index) { + return this.create(InventoryType.Machine, index); + } + + public ControlSlotArray create(final InventoryType type, final int[] index) { + int i = 0; + for (final ControlSlot slot : this.slots) { + slot.assign(type, index[i++]); + } + return this; + } + + @Override + public Iterator iterator() { + return this.slots.iterator(); + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/control/ControlSlotBase.java b/src/main/java/binnie/craftgui/minecraft/control/ControlSlotBase.java new file mode 100644 index 00000000..bc18d32e --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/control/ControlSlotBase.java @@ -0,0 +1,71 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.control; + +import net.minecraft.item.ItemStack; +import binnie.craftgui.minecraft.Window; +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.events.EventWidget; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +public abstract class ControlSlotBase extends Control implements ITooltip +{ + private ControlItemDisplay itemDisplay; + + public ControlSlotBase(final IWidget parent, final float x, final float y) { + this(parent, x, y, 18); + } + + public ControlSlotBase(final IWidget parent, final float x, final float y, final int size) { + super(parent, x, y, size, size); + this.addAttribute(Attribute.MouseOver); + this.itemDisplay = new ControlItemDisplay(this, 1.0f, 1.0f, size - 2); + this.addSelfEventHandler(new EventWidget.ChangeSize.Handler() { + @Override + public void onEvent(final EventWidget.ChangeSize event) { + if (ControlSlotBase.this.itemDisplay != null) { + ControlSlotBase.this.itemDisplay.setSize(ControlSlotBase.this.getSize().sub(new IPoint(2.0f, 2.0f))); + } + } + }); + } + + protected void setRotating() { + this.itemDisplay.setRotating(); + } + + @Override + public void onRenderBackground() { + final int size = (int) this.getSize().x(); + CraftGUI.Render.texture(CraftGUITexture.Slot, this.getArea()); + if (this.getSuperParent().getMousedOverWidget() == this) { + CraftGUI.Render.gradientRect(new IArea(new IPoint(1.0f, 1.0f), this.getArea().size().sub(new IPoint(2.0f, 2.0f))), -2130706433, -2130706433); + } + } + + @Override + public void onUpdateClient() { + super.onUpdateClient(); + this.itemDisplay.setItemStack(this.getItemStack()); + } + + @Override + public void getTooltip(final Tooltip tooltip) { + final ItemStack item = this.getItemStack(); + if (item == null) { + return; + } + tooltip.add(item.getTooltip(((Window) this.getSuperParent()).getPlayer(), false)); + } + + public abstract ItemStack getItemStack(); +} diff --git a/src/main/java/binnie/craftgui/minecraft/control/ControlSlotCharge.java b/src/main/java/binnie/craftgui/minecraft/control/ControlSlotCharge.java new file mode 100644 index 00000000..63682517 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/control/ControlSlotCharge.java @@ -0,0 +1,41 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.control; + +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.CraftGUI; +import binnie.core.machines.Machine; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.minecraft.Window; +import binnie.core.machines.inventory.IChargedSlots; +import binnie.craftgui.controls.core.Control; + +public class ControlSlotCharge extends Control +{ + private int slot; + + float getCharge() { + final IChargedSlots slots = Machine.getInterface(IChargedSlots.class, Window.get(this).getInventory()); + return (slots == null) ? 0.0f : slots.getCharge(this.slot); + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.texture(CraftGUITexture.PanelBlack, this.getArea()); + CraftGUI.Render.texturePercentage(CraftGUI.Render.getTexture(CraftGUITexture.SlotCharge), this.getArea().inset(1), Position.Bottom, this.getCharge()); + } + + public ControlSlotCharge(final IWidget parent, final int x, final int y, final int slot) { + super(parent, x, y, 4.0f, 18.0f); + this.slot = slot; + } + + @Override + public void getHelpTooltip(final Tooltip tooltip) { + tooltip.add("Charge Remaining: " + (int) (this.getCharge() * 100.0f) + "%"); + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/control/ControlTabIcon.java b/src/main/java/binnie/craftgui/minecraft/control/ControlTabIcon.java new file mode 100644 index 00000000..b5b1a494 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/control/ControlTabIcon.java @@ -0,0 +1,45 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.control; + +import binnie.craftgui.core.geometry.IPoint; +import binnie.core.genetics.IItemStackRepresentitive; +import net.minecraft.item.ItemStack; +import binnie.craftgui.controls.tab.ControlTabBar; +import binnie.craftgui.controls.tab.ControlTab; + +public class ControlTabIcon extends ControlTab +{ + private ControlItemDisplay item; + + public ControlTabIcon(final ControlTabBar parent, final float x, final float y, final float w, final float h, final T value) { + super(parent, x, y, w, h, value); + this.item = new ControlItemDisplay(this, -8.0f + w / 2.0f, -8.0f + h / 2.0f); + this.item.hastooltip = false; + } + + public ItemStack getItemStack() { + if (this.value instanceof IItemStackRepresentitive) { + return ((IItemStackRepresentitive) this.value).getItemStackRepresentitive(); + } + return null; + } + + @Override + public void onUpdateClient() { + super.onUpdateClient(); + this.item.setItemStack(this.getItemStack()); + final float x = ((ControlTabBar) this.getParent()).getDirection().x(); + this.item.setOffset(new IPoint((this.isCurrentSelection() || this.isMouseOver()) ? 0.0f : (-4.0f * x), 0.0f)); + } + + public boolean hasOutline() { + return false; + } + + public int getOutlineColour() { + return 16777215; + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/control/ControlUser.java b/src/main/java/binnie/craftgui/minecraft/control/ControlUser.java new file mode 100644 index 00000000..f5232844 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/control/ControlUser.java @@ -0,0 +1,42 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.control; + +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +public class ControlUser extends Control implements ITooltip +{ + private String username; + String team; + + public ControlUser(final IWidget parent, final float x, final float y, final String username) { + super(parent, x, y, 16.0f, 16.0f); + this.username = ""; + this.team = ""; + this.addAttribute(Attribute.MouseOver); + this.username = username; + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.texture(CraftGUITexture.UserButton, this.getArea()); + } + + @Override + public void getTooltip(final Tooltip tooltip) { + tooltip.setType(Tooltip.Type.User); + tooltip.add("Owner"); + if (this.username != "") { + tooltip.add(this.username); + } + tooltip.setMaxWidth(200); + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/control/EnumHighlighting.java b/src/main/java/binnie/craftgui/minecraft/control/EnumHighlighting.java new file mode 100644 index 00000000..005a3b0d --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/control/EnumHighlighting.java @@ -0,0 +1,36 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.control; + +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.minecraft.MinecraftTooltip; + +public enum EnumHighlighting +{ + Error, + Warning, + Help, + ShiftClick; + + int getColour() { + switch (this) { + case Error: { + return MinecraftTooltip.getOutline(MinecraftTooltip.Type.Error); + } + case Help: { + return MinecraftTooltip.getOutline(Tooltip.Type.Help); + } + case ShiftClick: { + return 16776960; + } + case Warning: { + return MinecraftTooltip.getOutline(MinecraftTooltip.Type.Warning); + } + default: { + return 0; + } + } + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/render/MinecraftTexture.java b/src/main/java/binnie/craftgui/minecraft/render/MinecraftTexture.java new file mode 100644 index 00000000..231c4d69 --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/render/MinecraftTexture.java @@ -0,0 +1,18 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.render; + +import binnie.core.resource.IBinnieTexture; +import binnie.craftgui.core.geometry.IArea; + +public class MinecraftTexture +{ + IArea textureArea; + IBinnieTexture texture; + + public MinecraftTexture() { + this.textureArea = new IArea(0.0f, 0.0f, 0.0f, 0.0f); + } +} diff --git a/src/main/java/binnie/craftgui/minecraft/render/RenderCommand.java b/src/main/java/binnie/craftgui/minecraft/render/RenderCommand.java new file mode 100644 index 00000000..0c9cb87c --- /dev/null +++ b/src/main/java/binnie/craftgui/minecraft/render/RenderCommand.java @@ -0,0 +1,19 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.minecraft.render; + +import binnie.craftgui.minecraft.GuiCraftGUI; +import binnie.craftgui.core.IWidget; + +public abstract class RenderCommand +{ + IWidget widget; + + public RenderCommand(final IWidget widget) { + this.widget = widget; + } + + public abstract void render(final GuiCraftGUI p0); +} diff --git a/src/main/java/binnie/craftgui/mod/database/ControlBranchBox.java b/src/main/java/binnie/craftgui/mod/database/ControlBranchBox.java new file mode 100644 index 00000000..d9871f6b --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/ControlBranchBox.java @@ -0,0 +1,23 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import binnie.craftgui.controls.scroll.ControlScrollableContent; +import binnie.craftgui.controls.listbox.ControlList; +import binnie.craftgui.core.IWidget; +import forestry.api.genetics.IClassification; +import binnie.craftgui.controls.listbox.ControlListBox; + +class ControlBranchBox extends ControlListBox +{ + @Override + public IWidget createOption(final IClassification value, final int y) { + return new ControlBranchBoxOption(((ControlScrollableContent>) this).getContent(), value, y); + } + + public ControlBranchBox(final IWidget parent, final float x, final float y, final float width, final float height) { + super(parent, x, y, width, height, 12.0f); + } +} diff --git a/src/main/java/binnie/craftgui/mod/database/ControlBranchBoxOption.java b/src/main/java/binnie/craftgui/mod/database/ControlBranchBoxOption.java new file mode 100644 index 00000000..70696991 --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/ControlBranchBoxOption.java @@ -0,0 +1,16 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import binnie.craftgui.controls.listbox.ControlList; +import forestry.api.genetics.IClassification; +import binnie.craftgui.controls.listbox.ControlTextOption; + +class ControlBranchBoxOption extends ControlTextOption +{ + public ControlBranchBoxOption(final ControlList controlList, final IClassification option, final int y) { + super(controlList, option, (option.getName() == null) ? option.getScientific() : (option.getName().contains(".") ? option.getScientific() : option.getName()), y); + } +} diff --git a/src/main/java/binnie/craftgui/mod/database/ControlBreedingProgress.java b/src/main/java/binnie/craftgui/mod/database/ControlBreedingProgress.java new file mode 100644 index 00000000..84149641 --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/ControlBreedingProgress.java @@ -0,0 +1,42 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.craftgui.resource.minecraft.CraftGUITextureSheet; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.CraftGUI; +import binnie.core.genetics.BreedingSystem; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.resource.Texture; +import binnie.craftgui.controls.core.Control; + +class ControlBreedingProgress extends Control +{ + private static Texture Progress; + private float percentage; + private int colour; + + public ControlBreedingProgress(final IWidget parent, final int x, final int y, final int width, final int height, final BreedingSystem system, final float percentage) { + super(parent, x, y, width, height); + this.percentage = percentage; + this.colour = system.getColour(); + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.texture(CraftGUITexture.PanelBlack, this.getArea()); + final IArea area = this.getArea().inset(1); + area.setSize(new IPoint(area.size().x() * this.percentage, area.size().y())); + CraftGUI.Render.colour(this.colour); + CraftGUI.Render.texture(ControlBreedingProgress.Progress, area); + } + + static { + ControlBreedingProgress.Progress = new StandardTexture(80, 22, 4, 4, CraftGUITextureSheet.Controls2); + } +} diff --git a/src/main/java/binnie/craftgui/mod/database/ControlDatabaseIndividualDisplay.java b/src/main/java/binnie/craftgui/mod/database/ControlDatabaseIndividualDisplay.java new file mode 100644 index 00000000..819c6aff --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/ControlDatabaseIndividualDisplay.java @@ -0,0 +1,113 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import binnie.craftgui.core.Tooltip; +import net.minecraft.util.IIcon; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.events.EventMouse; +import com.mojang.authlib.GameProfile; +import forestry.api.genetics.IIndividual; +import binnie.core.genetics.BreedingSystem; +import forestry.api.genetics.ISpeciesRoot; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.minecraft.Window; +import binnie.Binnie; +import forestry.api.genetics.IAlleleSpecies; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.minecraft.control.ControlItemDisplay; + +public class ControlDatabaseIndividualDisplay extends ControlItemDisplay implements ITooltip +{ + private IAlleleSpecies species; + EnumDiscoveryState discovered; + + public void setSpecies(final IAlleleSpecies species) { + this.setSpecies(species, EnumDiscoveryState.Show); + } + + public void setSpecies(final IAlleleSpecies species, EnumDiscoveryState state) { + final ISpeciesRoot speciesRoot = Binnie.Genetics.getSpeciesRoot(species); + final BreedingSystem system = Binnie.Genetics.getSystem(speciesRoot.getUID()); + final IIndividual ind = system.getSpeciesRoot().templateAsIndividual(system.getSpeciesRoot().getTemplate(species.getUID())); + super.setItemStack(system.getSpeciesRoot().getMemberStack(ind, system.getDefaultType())); + this.species = species; + final GameProfile username = Window.get(this).getUsername(); + if (state == EnumDiscoveryState.Undetermined) { + state = (system.isSpeciesDiscovered(species, Window.get(this).getWorld(), username) ? EnumDiscoveryState.Discovered : EnumDiscoveryState.Undiscovered); + } + if (Window.get(this) instanceof WindowAbstractDatabase && ((WindowAbstractDatabase) Window.get(this)).isNEI) { + state = EnumDiscoveryState.Show; + } + this.discovered = state; + this.addAttribute(Attribute.MouseOver); + } + + public ControlDatabaseIndividualDisplay(final IWidget parent, final float x, final float y) { + this(parent, x, y, 16.0f); + } + + public ControlDatabaseIndividualDisplay(final IWidget parent, final float x, final float y, final float size) { + super(parent, x, y, size); + this.species = null; + this.discovered = EnumDiscoveryState.Show; + this.addSelfEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + if (event.getButton() == 0 && ControlDatabaseIndividualDisplay.this.species != null && EnumDiscoveryState.Show == ControlDatabaseIndividualDisplay.this.discovered) { + ((WindowAbstractDatabase) ControlDatabaseIndividualDisplay.this.getSuperParent()).gotoSpeciesDelayed(ControlDatabaseIndividualDisplay.this.species); + } + } + }); + } + + @Override + public void onRenderForeground() { + IIcon icon = null; + if (this.species == null) { + return; + } + final BreedingSystem system = Binnie.Genetics.getSystem(this.species.getRoot()); + switch (this.discovered) { + case Show: { + super.onRenderForeground(); + return; + } + case Discovered: { + icon = system.getDiscoveredIcon(); + break; + } + case Undiscovered: { + icon = system.getUndiscoveredIcon(); + break; + } + } + if (icon != null) { + CraftGUI.Render.iconItem(IPoint.ZERO, icon); + } + } + + @Override + public void getTooltip(final Tooltip tooltip) { + if (this.species != null) { + switch (this.discovered) { + case Show: { + tooltip.add(this.species.getName()); + break; + } + case Discovered: { + tooltip.add("Discovered Species"); + break; + } + case Undiscovered: { + tooltip.add("Undiscovered Species"); + break; + } + } + } + } +} diff --git a/src/main/java/binnie/craftgui/mod/database/ControlItemStackOption.java b/src/main/java/binnie/craftgui/mod/database/ControlItemStackOption.java new file mode 100644 index 00000000..3ecd4e04 --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/ControlItemStackOption.java @@ -0,0 +1,33 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.geometry.CraftGUIUtil; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.controls.listbox.ControlList; +import binnie.craftgui.minecraft.control.ControlItemDisplay; +import net.minecraft.item.ItemStack; +import binnie.craftgui.controls.listbox.ControlTextOption; + +public class ControlItemStackOption extends ControlTextOption +{ + private ControlItemDisplay controlBee; + + public ControlItemStackOption(final ControlList controlList, final ItemStack option, final int y) { + super(controlList, option, option.getDisplayName(), y); + this.setSize(new IPoint(this.getSize().x(), 20.0f)); + (this.controlBee = new ControlItemDisplay(this, 2.0f, 2.0f)).setItemStack(option); + this.addAttribute(Attribute.MouseOver); + CraftGUIUtil.moveWidget(this.textWidget, new IPoint(22.0f, 0.0f)); + this.textWidget.setSize(this.textWidget.getSize().sub(new IPoint(24.0f, 0.0f))); + final int th = (int) CraftGUI.Render.textHeight(this.textWidget.getValue(), this.textWidget.getSize().x()); + final int height = Math.max(20, th + 6); + this.setSize(new IPoint(this.size().x(), height)); + this.textWidget.setSize(new IPoint(this.textWidget.getSize().x(), height)); + this.controlBee.setPosition(new IPoint(this.controlBee.pos().x(), (height - 18) / 2)); + } +} diff --git a/src/main/java/binnie/craftgui/mod/database/ControlMutationBox.java b/src/main/java/binnie/craftgui/mod/database/ControlMutationBox.java new file mode 100644 index 00000000..2c416b28 --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/ControlMutationBox.java @@ -0,0 +1,68 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import binnie.craftgui.controls.scroll.ControlScrollableContent; +import java.util.List; +import binnie.core.genetics.BreedingSystem; +import binnie.craftgui.minecraft.Window; +import binnie.craftgui.controls.listbox.ControlList; +import binnie.craftgui.core.IWidget; +import forestry.api.genetics.IAlleleSpecies; +import forestry.api.genetics.IMutation; +import binnie.craftgui.controls.listbox.ControlListBox; + +class ControlMutationBox extends ControlListBox +{ + private int index; + private Type type; + private IAlleleSpecies species; + + @Override + public IWidget createOption(final IMutation value, final int y) { + return new ControlMutationItem(((ControlScrollableContent>) this).getContent(), value, this.species, y); + } + + public ControlMutationBox(final IWidget parent, final int x, final int y, final int width, final int height, final Type type) { + super(parent, x, y, width, height, 12.0f); + this.species = null; + this.type = type; + } + + public void setSpecies(final IAlleleSpecies species) { + if (species != this.species) { + this.species = species; + this.index = 0; + this.movePercentage(-100.0f); + final BreedingSystem system = ((WindowAbstractDatabase) this.getSuperParent()).getBreedingSystem(); + final List discovered = system.getDiscoveredMutations(Window.get(this).getWorld(), Window.get(this).getUsername()); + if (species != null) { + if (this.type == Type.Resultant) { + this.setOptions(system.getResultantMutations(species)); + } + else { + final List mutations = system.getFurtherMutations(species); + int i = 0; + while (i < mutations.size()) { + final IMutation mutation = mutations.get(i); + if (!discovered.contains(mutations) && !((IAlleleSpecies) mutation.getTemplate()[0]).isCounted()) { + mutations.remove(i); + } + else { + ++i; + } + } + this.setOptions(mutations); + } + } + } + } + + enum Type + { + Resultant, + Further; + } +} diff --git a/src/main/java/binnie/craftgui/mod/database/ControlMutationItem.java b/src/main/java/binnie/craftgui/mod/database/ControlMutationItem.java new file mode 100644 index 00000000..8fa1bafd --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/ControlMutationItem.java @@ -0,0 +1,48 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import binnie.core.genetics.BreedingSystem; +import binnie.craftgui.minecraft.Window; +import forestry.api.genetics.IAlleleSpecies; +import binnie.craftgui.controls.listbox.ControlList; +import forestry.api.genetics.IMutation; +import binnie.craftgui.controls.listbox.ControlOption; + +class ControlMutationItem extends ControlOption +{ + private ControlDatabaseIndividualDisplay itemWidget1; + private ControlDatabaseIndividualDisplay itemWidget2; + private ControlDatabaseIndividualDisplay itemWidget3; + private ControlMutationSymbol addSymbol; + private ControlMutationSymbol arrowSymbol; + + public ControlMutationItem(final ControlList controlList, final IMutation option, final IAlleleSpecies species, final int y) { + super(controlList, option, y); + this.itemWidget1 = new ControlDatabaseIndividualDisplay(this, 4.0f, 4.0f); + this.itemWidget2 = new ControlDatabaseIndividualDisplay(this, 44.0f, 4.0f); + this.itemWidget3 = new ControlDatabaseIndividualDisplay(this, 104.0f, 4.0f); + this.addSymbol = new ControlMutationSymbol(this, 24, 4, 0); + this.arrowSymbol = new ControlMutationSymbol(this, 64, 4, 1); + final boolean isNEI = ((WindowAbstractDatabase) this.getSuperParent()).isNEI(); + final BreedingSystem system = ((WindowAbstractDatabase) this.getSuperParent()).getBreedingSystem(); + if (this.getValue() != null) { + final boolean isMutationDiscovered = system.isMutationDiscovered(this.getValue(), Window.get(this).getWorld(), Window.get(this).getUsername()); + IAlleleSpecies allele = null; + EnumDiscoveryState state = null; + allele = this.getValue().getAllele0(); + state = ((isNEI || isMutationDiscovered) ? EnumDiscoveryState.Show : ((species == allele) ? EnumDiscoveryState.Show : EnumDiscoveryState.Undetermined)); + this.itemWidget1.setSpecies(allele, state); + allele = this.getValue().getAllele1(); + state = ((isNEI || isMutationDiscovered) ? EnumDiscoveryState.Show : ((species == allele) ? EnumDiscoveryState.Show : EnumDiscoveryState.Undetermined)); + this.itemWidget2.setSpecies(allele, state); + allele = (IAlleleSpecies) this.getValue().getTemplate()[0]; + state = ((isNEI || isMutationDiscovered) ? EnumDiscoveryState.Show : ((species == allele) ? EnumDiscoveryState.Show : EnumDiscoveryState.Undetermined)); + this.itemWidget3.setSpecies(allele, state); + this.addSymbol.setValue(this.getValue()); + this.arrowSymbol.setValue(this.getValue()); + } + } +} diff --git a/src/main/java/binnie/craftgui/mod/database/ControlMutationSymbol.java b/src/main/java/binnie/craftgui/mod/database/ControlMutationSymbol.java new file mode 100644 index 00000000..fc91cc13 --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/ControlMutationSymbol.java @@ -0,0 +1,81 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.craftgui.resource.minecraft.CraftGUITextureSheet; +import forestry.api.genetics.IAllele; +import binnie.craftgui.core.Tooltip; +import binnie.core.genetics.BreedingSystem; +import binnie.craftgui.minecraft.Window; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import forestry.api.genetics.IMutation; +import binnie.craftgui.resource.Texture; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +class ControlMutationSymbol extends Control implements ITooltip +{ + private static Texture MutationPlus; + private static Texture MutationArrow; + private IMutation value; + private boolean discovered; + private int type; + + @Override + public void onRenderBackground() { + super.onRenderBackground(); + if (this.type == 0) { + CraftGUI.Render.texture(ControlMutationSymbol.MutationPlus, IPoint.ZERO); + } + else { + CraftGUI.Render.texture(ControlMutationSymbol.MutationArrow, IPoint.ZERO); + } + } + + protected ControlMutationSymbol(final IWidget parent, final int x, final int y, final int type) { + super(parent, x, y, 16 + type * 16, 16.0f); + this.value = null; + this.type = type; + this.addAttribute(Attribute.MouseOver); + } + + public void setValue(final IMutation value) { + this.value = value; + final boolean isNEI = ((WindowAbstractDatabase) this.getSuperParent()).isNEI(); + final BreedingSystem system = ((WindowAbstractDatabase) this.getSuperParent()).getBreedingSystem(); + this.discovered = (isNEI || system.isMutationDiscovered(value, Window.get(this).getWorld(), Window.get(this).getUsername())); + if (this.discovered) { + this.setColour(16777215); + } + else { + this.setColour(7829367); + } + } + + @Override + public void getTooltip(final Tooltip tooltip) { + if (this.type == 1 && this.discovered) { + final IAllele species1 = this.value.getAllele0(); + final IAllele species2 = this.value.getAllele1(); + final BreedingSystem system = ((WindowAbstractDatabase) this.getSuperParent()).getBreedingSystem(); + final float chance = system.getChance(this.value, Window.get(this).getPlayer(), species1, species2); + tooltip.add("Current Chance - " + chance + "%"); + if (this.value.getSpecialConditions() != null) { + for (final String string : this.value.getSpecialConditions()) { + tooltip.add(string); + } + } + } + } + + static { + ControlMutationSymbol.MutationPlus = new StandardTexture(2, 94, 16, 16, CraftGUITextureSheet.Controls2); + ControlMutationSymbol.MutationArrow = new StandardTexture(20, 94, 32, 16, CraftGUITextureSheet.Controls2); + } +} diff --git a/src/main/java/binnie/craftgui/mod/database/ControlSpeciesBox.java b/src/main/java/binnie/craftgui/mod/database/ControlSpeciesBox.java new file mode 100644 index 00000000..ca9c5880 --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/ControlSpeciesBox.java @@ -0,0 +1,54 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import binnie.craftgui.controls.scroll.ControlScrollableContent; +import com.mojang.authlib.GameProfile; +import net.minecraft.entity.player.EntityPlayer; +import java.util.List; +import binnie.craftgui.minecraft.Window; +import java.util.Collection; +import java.util.ArrayList; +import binnie.craftgui.controls.listbox.ControlList; +import binnie.craftgui.core.IWidget; +import forestry.api.genetics.IClassification; +import forestry.api.genetics.IAlleleSpecies; +import binnie.craftgui.controls.listbox.ControlListBox; + +public class ControlSpeciesBox extends ControlListBox +{ + private IClassification branch; + + @Override + public IWidget createOption(final IAlleleSpecies value, final int y) { + return new ControlSpeciexBoxOption(((ControlScrollableContent>) this).getContent(), value, y); + } + + public ControlSpeciesBox(final IWidget parent, final float x, final float y, final float width, final float height) { + super(parent, x, y, width, height, 12.0f); + this.branch = null; + } + + public void setBranch(final IClassification branch) { + if (branch != this.branch) { + this.branch = branch; + final List speciesList2 = new ArrayList(); + this.movePercentage(-100.0f); + this.setOptions(speciesList2); + final EntityPlayer player = Window.get(this).getPlayer(); + final GameProfile playerName = Window.get(this).getUsername(); + final WindowAbstractDatabase db = Window.get(this); + final Collection speciesList3 = db.isNEI ? db.getBreedingSystem().getAllSpecies() : db.getBreedingSystem().getDiscoveredSpecies(db.getWorld(), playerName); + if (branch != null) { + for (final IAlleleSpecies species : branch.getMemberSpecies()) { + if (speciesList3.contains(species)) { + speciesList2.add(species); + } + } + } + this.setOptions(speciesList2); + } + } +} diff --git a/src/main/java/binnie/craftgui/mod/database/ControlSpeciexBoxOption.java b/src/main/java/binnie/craftgui/mod/database/ControlSpeciexBoxOption.java new file mode 100644 index 00000000..3c687862 --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/ControlSpeciexBoxOption.java @@ -0,0 +1,38 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.geometry.CraftGUIUtil; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.controls.listbox.ControlList; +import forestry.api.genetics.IAlleleSpecies; +import binnie.craftgui.controls.listbox.ControlTextOption; + +class ControlSpeciexBoxOption extends ControlTextOption +{ + private ControlDatabaseIndividualDisplay controlBee; + + public ControlSpeciexBoxOption(final ControlList controlList, final IAlleleSpecies option, final int y) { + super(controlList, option, option.getName(), y); + this.setSize(new IPoint(this.getSize().x(), 20.0f)); + (this.controlBee = new ControlDatabaseIndividualDisplay(this, 2.0f, 2.0f)).setSpecies(this.getValue(), EnumDiscoveryState.Undetermined); + if (this.controlBee.discovered == EnumDiscoveryState.Discovered) { + this.controlBee.discovered = EnumDiscoveryState.Show; + } + this.textWidget.setValue((this.controlBee.discovered == EnumDiscoveryState.Show) ? option.getName() : "Undiscovered"); + if (this.controlBee.discovered == EnumDiscoveryState.Show) { + this.addAttribute(Attribute.MouseOver); + } + CraftGUIUtil.moveWidget(this.textWidget, new IPoint(22.0f, 0.0f)); + this.textWidget.setSize(this.textWidget.getSize().sub(new IPoint(24.0f, 0.0f))); + final int th = (int) CraftGUI.Render.textHeight(this.textWidget.getValue(), this.textWidget.getSize().x()); + final int height = Math.max(20, th + 6); + this.setSize(new IPoint(this.size().x(), height)); + this.textWidget.setSize(new IPoint(this.textWidget.getSize().x(), height)); + this.controlBee.setPosition(new IPoint(this.controlBee.pos().x(), (height - 18) / 2)); + } +} diff --git a/src/main/java/binnie/craftgui/mod/database/DatabaseTab.java b/src/main/java/binnie/craftgui/mod/database/DatabaseTab.java new file mode 100644 index 00000000..54a3f21e --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/DatabaseTab.java @@ -0,0 +1,33 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import binnie.craftgui.core.Tooltip; +import binnie.Binnie; +import binnie.core.AbstractMod; +import binnie.craftgui.core.ITooltipHelp; + +public class DatabaseTab implements ITooltipHelp +{ + private AbstractMod mod; + private String unloc; + private int colour; + + public DatabaseTab(final AbstractMod mod, final String unloc, final int colour) { + this.mod = mod; + this.unloc = unloc; + this.colour = colour; + } + + @Override + public String toString() { + return Binnie.Language.localise(this.mod, "gui.database.tab." + this.unloc); + } + + @Override + public void getHelpTooltip(final Tooltip tooltip) { + tooltip.add(Binnie.Language.localiseOrBlank(this.mod, "gui.database.tab." + this.unloc + ".help")); + } +} diff --git a/src/main/java/binnie/craftgui/mod/database/EnumDiscoveryState.java b/src/main/java/binnie/craftgui/mod/database/EnumDiscoveryState.java new file mode 100644 index 00000000..53c05667 --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/EnumDiscoveryState.java @@ -0,0 +1,13 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +public enum EnumDiscoveryState +{ + Show, + Undetermined, + Discovered, + Undiscovered; +} diff --git a/src/main/java/binnie/craftgui/mod/database/IDatabaseMode.java b/src/main/java/binnie/craftgui/mod/database/IDatabaseMode.java new file mode 100644 index 00000000..f6edc069 --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/IDatabaseMode.java @@ -0,0 +1,10 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +public interface IDatabaseMode +{ + String getName(); +} diff --git a/src/main/java/binnie/craftgui/mod/database/PageAbstract.java b/src/main/java/binnie/craftgui/mod/database/PageAbstract.java new file mode 100644 index 00000000..ab0c1643 --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/PageAbstract.java @@ -0,0 +1,17 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.page.ControlPage; + +public abstract class PageAbstract extends ControlPage +{ + public PageAbstract(final IWidget parent, final DatabaseTab tab) { + super(parent, 0.0f, 0.0f, parent.getSize().x(), parent.getSize().y(), tab); + } + + public abstract void onValueChanged(final T p0); +} diff --git a/src/main/java/binnie/craftgui/mod/database/PageBranch.java b/src/main/java/binnie/craftgui/mod/database/PageBranch.java new file mode 100644 index 00000000..c586b15a --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/PageBranch.java @@ -0,0 +1,15 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import binnie.craftgui.core.IWidget; +import forestry.api.genetics.IClassification; + +abstract class PageBranch extends PageAbstract +{ + public PageBranch(final IWidget parent, final DatabaseTab tab) { + super(parent, tab); + } +} diff --git a/src/main/java/binnie/craftgui/mod/database/PageBranchOverview.java b/src/main/java/binnie/craftgui/mod/database/PageBranchOverview.java new file mode 100644 index 00000000..123d786b --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/PageBranchOverview.java @@ -0,0 +1,58 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import binnie.craftgui.core.CraftGUI; +import forestry.api.genetics.IClassification; +import binnie.craftgui.controls.ControlTextCentered; +import java.util.ArrayList; +import binnie.craftgui.core.IWidget; +import java.util.List; +import binnie.craftgui.controls.ControlText; + +public class PageBranchOverview extends PageBranch +{ + private ControlText pageBranchOverview_branchName; + private ControlText pageBranchOverview_branchScientific; + private ControlText pageBranchOverview_branchAuthority; + private List pageBranchOverview_branchDescription; + + public PageBranchOverview(final IWidget parent, final DatabaseTab tab) { + super(parent, tab); + this.pageBranchOverview_branchDescription = new ArrayList(); + this.pageBranchOverview_branchName = new ControlTextCentered(this, 8.0f, ""); + this.pageBranchOverview_branchScientific = new ControlTextCentered(this, 32.0f, ""); + this.pageBranchOverview_branchAuthority = new ControlTextCentered(this, 44.0f, ""); + } + + @Override + public void onValueChanged(final IClassification branch) { + this.pageBranchOverview_branchName.setValue("§n" + branch.getName() + " Branch§r"); + this.pageBranchOverview_branchScientific.setValue("§oApidae " + branch.getScientific() + "§r"); + this.pageBranchOverview_branchAuthority.setValue("Discovered by §l" + branch.getMemberSpecies()[0].getAuthority() + "§r"); + for (final IWidget widget : this.pageBranchOverview_branchDescription) { + this.deleteChild(widget); + } + this.pageBranchOverview_branchDescription.clear(); + String desc = branch.getDescription(); + if (desc == null || desc == "") { + desc = "No Description Provided."; + } + String line = ""; + final List descLines = new ArrayList(); + for (final String str : desc.split(" ")) { + if (CraftGUI.Render.textWidth(line + " " + str) > 134) { + descLines.add("§o" + line + "§r"); + line = ""; + } + line = line + " " + str; + } + descLines.add(line); + int i = 0; + for (final String dLine : descLines) { + this.pageBranchOverview_branchDescription.add(new ControlTextCentered(this, 84 + 12 * i++, dLine)); + } + } +} diff --git a/src/main/java/binnie/craftgui/mod/database/PageBranchSpecies.java b/src/main/java/binnie/craftgui/mod/database/PageBranchSpecies.java new file mode 100644 index 00000000..869d2b83 --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/PageBranchSpecies.java @@ -0,0 +1,42 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import forestry.api.genetics.IClassification; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.core.IWidget; +import cpw.mods.fml.common.Mod; +import forestry.api.genetics.IAlleleSpecies; +import binnie.craftgui.events.EventValueChanged; +import binnie.craftgui.controls.ControlText; + +public class PageBranchSpecies extends PageBranch +{ + private ControlText pageBranchSpecies_title; + private ControlSpeciesBox pageBranchSpecies_speciesList; + + @Mod.EventHandler + public void onHandleEvent(final EventValueChanged event) { + } + + public PageBranchSpecies(final IWidget parent, final DatabaseTab tab) { + super(parent, tab); + this.pageBranchSpecies_title = new ControlTextCentered(this, 8.0f, "Species"); + this.addEventHandler(new EventValueChanged.Handler() { + @Override + public void onEvent(final EventValueChanged event) { + if (event.isOrigin(PageBranchSpecies.this.pageBranchSpecies_speciesList)) { + ((WindowAbstractDatabase) PageBranchSpecies.this.getSuperParent()).gotoSpecies((IAlleleSpecies) event.getValue()); + } + } + }); + this.pageBranchSpecies_speciesList = new ControlSpeciesBox(this, 4.0f, 20.0f, 136.0f, 152.0f); + } + + @Override + public void onValueChanged(final IClassification branch) { + this.pageBranchSpecies_speciesList.setBranch(branch); + } +} diff --git a/src/main/java/binnie/craftgui/mod/database/PageBreeder.java b/src/main/java/binnie/craftgui/mod/database/PageBreeder.java new file mode 100644 index 00000000..899257a2 --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/PageBreeder.java @@ -0,0 +1,41 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import binnie.core.genetics.BreedingSystem; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.minecraft.Window; +import binnie.craftgui.core.IWidget; +import com.mojang.authlib.GameProfile; +import binnie.craftgui.controls.page.ControlPage; + +public class PageBreeder extends ControlPage +{ + private GameProfile player; + + public PageBreeder(final IWidget parent, final GameProfile player, final DatabaseTab tab) { + super(parent, 0.0f, 0.0f, parent.getSize().x(), parent.getSize().y(), tab); + this.player = player; + this.onPageRefresh(); + } + + public void onPageRefresh() { + while (this.getWidgets().size() > 0) { + this.deleteChild(this.getWidgets().get(0)); + } + final BreedingSystem system = ((WindowAbstractDatabase) Window.get(this)).getBreedingSystem(); + final String descriptor = system.getDescriptor(); + new ControlTextCentered(this, 8.0f, "§n" + system.getDescriptor() + " Profile§r"); + new ControlTextCentered(this, 75.0f, "" + system.discoveredSpeciesCount + "/" + system.totalSpeciesCount + " Species"); + new ControlBreedingProgress(this, 20, 87, 102, 14, system, system.discoveredSpeciesPercentage); + new ControlTextCentered(this, 115.0f, "" + system.discoveredBranchCount + "/" + system.totalBranchCount + " Branches"); + new ControlBreedingProgress(this, 20, 127, 102, 14, system, system.discoveredBranchPercentage); + if (system.discoveredSecretCount > 0) { + new ControlTextCentered(this, 155.0f, "" + system.discoveredSecretCount + "/" + system.totalSecretCount + " Secret Species"); + } + new ControlTextCentered(this, 32.0f, this.player.getName()); + new ControlTextCentered(this, 44.0f, "§o" + system.getEpitome() + "§r"); + } +} diff --git a/src/main/java/binnie/craftgui/mod/database/PageBreederStats.java b/src/main/java/binnie/craftgui/mod/database/PageBreederStats.java new file mode 100644 index 00000000..26ccb9c6 --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/PageBreederStats.java @@ -0,0 +1,23 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import binnie.core.genetics.BreedingSystem; +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.core.Control; + +public class PageBreederStats extends Control +{ + String player; + + public PageBreederStats(final IWidget parent, final int w, final int h, final String player) { + super(parent, 0.0f, 0.0f, w, h); + this.player = player; + final ControlText pageBranchOverview_branchName = new ControlTextCentered(this, 8.0f, "§nStats§r"); + final BreedingSystem system = ((WindowAbstractDatabase) this.getSuperParent()).getBreedingSystem(); + } +} diff --git a/src/main/java/binnie/craftgui/mod/database/PageSpecies.java b/src/main/java/binnie/craftgui/mod/database/PageSpecies.java new file mode 100644 index 00000000..7fd1669a --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/PageSpecies.java @@ -0,0 +1,15 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import binnie.craftgui.core.IWidget; +import forestry.api.genetics.IAlleleSpecies; + +public abstract class PageSpecies extends PageAbstract +{ + public PageSpecies(final IWidget parent, final DatabaseTab tab) { + super(parent, tab); + } +} diff --git a/src/main/java/binnie/craftgui/mod/database/PageSpeciesClassification.java b/src/main/java/binnie/craftgui/mod/database/PageSpeciesClassification.java new file mode 100644 index 00000000..f2e55444 --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/PageSpeciesClassification.java @@ -0,0 +1,49 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import forestry.api.genetics.IAlleleSpecies; +import binnie.craftgui.controls.ControlTextCentered; +import java.util.LinkedHashMap; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.ControlText; +import forestry.api.genetics.IClassification; +import java.util.Map; + +public class PageSpeciesClassification extends PageSpecies +{ + private Map levels; + private ControlText genus; + + public PageSpeciesClassification(final IWidget parent, final DatabaseTab tab) { + super(parent, tab); + this.levels = new LinkedHashMap(); + int y = 16; + for (final IClassification.EnumClassLevel level : IClassification.EnumClassLevel.values()) { + final ControlText text = new ControlTextCentered(this, y, ""); + text.setColour(level.getColour()); + this.levels.put(level, text); + y += 12; + } + (this.genus = new ControlTextCentered(this, y, "")).setColour(16759415); + } + + @Override + public void onValueChanged(final IAlleleSpecies species) { + if (species != null) { + for (final ControlText text : this.levels.values()) { + text.setValue("- - -"); + } + this.genus.setValue(species.getBinomial()); + for (IClassification classification = species.getBranch(); classification != null; classification = classification.getParent()) { + final IClassification.EnumClassLevel level = classification.getLevel(); + String text2 = ""; + final int n = level.ordinal(); + text2 += classification.getScientific(); + this.levels.get(level).setValue(text2); + } + } + } +} diff --git a/src/main/java/binnie/craftgui/mod/database/PageSpeciesMutations.java b/src/main/java/binnie/craftgui/mod/database/PageSpeciesMutations.java new file mode 100644 index 00000000..190a2408 --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/PageSpeciesMutations.java @@ -0,0 +1,27 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import forestry.api.genetics.IAlleleSpecies; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.ControlText; + +public class PageSpeciesMutations extends PageSpecies +{ + private ControlText pageSpeciesFurther_Title; + private ControlMutationBox pageSpeciesFurther_List; + + public PageSpeciesMutations(final IWidget parent, final DatabaseTab tab) { + super(parent, tab); + this.pageSpeciesFurther_Title = new ControlTextCentered(this, 8.0f, "Further Mutations"); + this.pageSpeciesFurther_List = new ControlMutationBox(this, 4, 20, 136, 152, ControlMutationBox.Type.Further); + } + + @Override + public void onValueChanged(final IAlleleSpecies species) { + this.pageSpeciesFurther_List.setSpecies(species); + } +} diff --git a/src/main/java/binnie/craftgui/mod/database/PageSpeciesOverview.java b/src/main/java/binnie/craftgui/mod/database/PageSpeciesOverview.java new file mode 100644 index 00000000..fe7d7ad6 --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/PageSpeciesOverview.java @@ -0,0 +1,70 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import forestry.api.genetics.IAlleleSpecies; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.ControlText; + +public class PageSpeciesOverview extends PageSpecies +{ + private ControlText controlName; + private ControlText controlScientific; + private ControlText controlAuthority; + private ControlText controlComplexity; + private ControlText controlDescription; + private ControlText controlSignature; + private ControlDatabaseIndividualDisplay controlInd1; + private ControlDatabaseIndividualDisplay controlInd2; + + public PageSpeciesOverview(final IWidget parent, final DatabaseTab tab) { + super(parent, tab); + this.controlInd1 = new ControlDatabaseIndividualDisplay(this, 5.0f, 5.0f); + this.controlInd2 = new ControlDatabaseIndividualDisplay(this, 123.0f, 5.0f); + this.controlName = new ControlTextCentered(this, 8.0f, ""); + this.controlScientific = new ControlTextCentered(this, 32.0f, ""); + this.controlAuthority = new ControlTextCentered(this, 44.0f, ""); + this.controlComplexity = new ControlTextCentered(this, 56.0f, ""); + this.controlDescription = new ControlText(this, new IArea(8.0f, 84.0f, this.getSize().x() - 16.0f, 0.0f), "", TextJustification.MiddleCenter); + this.controlSignature = new ControlText(this, new IArea(8.0f, 84.0f, this.getSize().x() - 16.0f, 0.0f), "", TextJustification.BottomRight); + } + + @Override + public void onValueChanged(final IAlleleSpecies species) { + this.controlInd1.setSpecies(species, EnumDiscoveryState.Show); + this.controlInd2.setSpecies(species, EnumDiscoveryState.Show); + final String branchBinomial = (species.getBranch() != null) ? species.getBranch().getScientific() : ""; + final String branchName = (species.getBranch() != null) ? species.getBranch().getName() : "Unknown"; + this.controlName.setValue("§n" + species.getName() + "§r"); + this.controlScientific.setValue("§o" + branchBinomial + " " + species.getBinomial() + "§r"); + this.controlAuthority.setValue("Discovered by §l" + species.getAuthority() + "§r"); + this.controlComplexity.setValue("Complexity: " + species.getComplexity()); + final String desc = species.getDescription(); + String descBody = "§o"; + String descSig = ""; + if (desc == null || desc == "") { + descBody += "No Description Provided."; + } + else { + final String[] descStrings = desc.split("\\|"); + descBody += descStrings[0]; + for (int i = 1; i < descStrings.length - 1; ++i) { + descBody = descBody + " " + descStrings[i]; + } + if (descStrings.length > 1) { + descSig += descStrings[descStrings.length - 1]; + } + } + this.controlDescription.setValue(descBody + "§r"); + this.controlSignature.setValue(descSig + "§r"); + final float descHeight = CraftGUI.Render.textHeight(this.controlDescription.getValue(), this.controlDescription.getSize().x()); + this.controlSignature.setPosition(new IPoint(this.controlSignature.pos().x(), this.controlDescription.getPosition().y() + descHeight + 10.0f)); + } +} diff --git a/src/main/java/binnie/craftgui/mod/database/PageSpeciesResultant.java b/src/main/java/binnie/craftgui/mod/database/PageSpeciesResultant.java new file mode 100644 index 00000000..e3732694 --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/PageSpeciesResultant.java @@ -0,0 +1,27 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import forestry.api.genetics.IAlleleSpecies; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.ControlText; + +public class PageSpeciesResultant extends PageSpecies +{ + private ControlText pageSpeciesResultant_Title; + private ControlMutationBox pageSpeciesResultant_List; + + public PageSpeciesResultant(final IWidget parent, final DatabaseTab tab) { + super(parent, tab); + this.pageSpeciesResultant_Title = new ControlTextCentered(this, 8.0f, "Resultant Mutations"); + this.pageSpeciesResultant_List = new ControlMutationBox(this, 4, 20, 136, 152, ControlMutationBox.Type.Resultant); + } + + @Override + public void onValueChanged(final IAlleleSpecies species) { + this.pageSpeciesResultant_List.setSpecies(species); + } +} diff --git a/src/main/java/binnie/craftgui/mod/database/WindowAbstractDatabase.java b/src/main/java/binnie/craftgui/mod/database/WindowAbstractDatabase.java new file mode 100644 index 00000000..e45eb10b --- /dev/null +++ b/src/main/java/binnie/craftgui/mod/database/WindowAbstractDatabase.java @@ -0,0 +1,248 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.mod.database; + +import binnie.core.BinnieCore; +import forestry.api.genetics.IBreedingTracker; +import binnie.craftgui.core.geometry.CraftGUIUtil; +import binnie.craftgui.controls.tab.ControlTab; +import binnie.craftgui.controls.tab.ControlTabBar; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.controls.listbox.ControlListBox; +import forestry.api.genetics.IClassification; +import java.util.Collection; +import com.mojang.authlib.GameProfile; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.controls.ControlTextEdit; +import binnie.craftgui.minecraft.MinecraftGUI; +import binnie.craftgui.minecraft.control.ControlHelp; +import binnie.craftgui.controls.listbox.ControlTextOption; +import binnie.core.util.IValidator; +import binnie.craftgui.events.EventTextEdit; +import binnie.craftgui.events.EventHandler; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.page.ControlPage; +import binnie.craftgui.events.EventValueChanged; +import binnie.craftgui.core.geometry.IPoint; +import java.util.HashMap; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.entity.player.EntityPlayer; +import forestry.api.genetics.IAlleleSpecies; +import binnie.craftgui.controls.page.ControlPages; +import binnie.craftgui.window.Panel; +import binnie.core.genetics.BreedingSystem; +import java.util.Map; +import binnie.craftgui.minecraft.Window; + +public abstract class WindowAbstractDatabase extends Window +{ + private float selectionBoxWidth; + private final float infoBoxWidth = 144.0f; + private final float infoBoxHeight = 176.0f; + private final float infoTabWidth = 16.0f; + private final float modeTabWidth = 22.0f; + private final float searchBoxHeight = 16.0f; + private Map modes; + boolean isNEI; + private BreedingSystem system; + private Panel panelInformation; + private Panel panelSearch; + private ControlPages modePages; + private IAlleleSpecies gotoSpecies; + + public void changeMode(final IDatabaseMode mode) { + this.modePages.setValue(mode); + } + + public WindowAbstractDatabase(final EntityPlayer player, final Side side, final boolean nei, final BreedingSystem system, final float wid) { + super(100.0f, 192.0f, player, null, side); + this.selectionBoxWidth = 95.0f; + this.modes = new HashMap(); + this.panelInformation = null; + this.panelSearch = null; + this.modePages = null; + this.gotoSpecies = null; + this.isNEI = nei; + this.system = system; + this.selectionBoxWidth = wid; + } + + public ControlPages getInfoPages(final IDatabaseMode mode) { + return this.modes.get(mode).infoPages; + } + + public boolean isNEI() { + return this.isNEI; + } + + public BreedingSystem getBreedingSystem() { + return this.system; + } + + public WindowAbstractDatabase(final EntityPlayer player, final Side side, final boolean nei, final BreedingSystem system) { + this(player, side, nei, system, 95.0f); + } + + protected ModeWidgets createMode(final IDatabaseMode mode, final ModeWidgets widgets) { + this.modes.put(mode, widgets); + return widgets; + } + + @Override + public void initialiseClient() { + this.setSize(new IPoint(176.0f + this.selectionBoxWidth + 22.0f + 8.0f, 208.0f)); + this.addEventHandler(new EventValueChanged.Handler() { + @Override + public void onEvent(final EventValueChanged event) { + if (event.getOrigin().getParent() instanceof ControlPage && !(event.getValue() instanceof DatabaseTab)) { + final ControlPage parent = (ControlPage) event.getOrigin().getParent(); + if (parent.getValue() instanceof IDatabaseMode) { + for (final IWidget widget : parent.getWidgets()) { + if (widget instanceof ControlPages) { + if (event.getValue() == null) { + widget.hide(); + } + else { + widget.show(); + for (final IWidget widget2 : widget.getWidgets()) { + if (widget2 instanceof PageAbstract) { + ((PageAbstract) widget2).onValueChanged(event.getValue()); + } + } + } + } + } + } + } + } + }); + this.addEventHandler(new EventTextEdit.Handler() { + @Override + public void onEvent(final EventTextEdit event) { + for (final ModeWidgets widgets : WindowAbstractDatabase.this.modes.values()) { + widgets.listBox.setValidator(new IValidator() { + @Override + public boolean isValid(final IWidget object) { + return event.getValue() == "" || ((ControlTextOption) object).getText().toLowerCase().contains(event.getValue().toLowerCase()); + } + }); + } + } + }.setOrigin(EventHandler.Origin.DirectChild, this)); + new ControlHelp(this, 4.0f, 4.0f); + (this.panelInformation = new Panel(this, 24.0f, 24.0f, 144.0f, 176.0f, MinecraftGUI.PanelType.Black)).setColour(860416); + (this.panelSearch = new Panel(this, 176.0f, 24.0f, this.selectionBoxWidth, 160.0f, MinecraftGUI.PanelType.Black)).setColour(860416); + this.modePages = new ControlPages(this, 0.0f, 0.0f, this.getSize().x(), this.getSize().y()); + new ControlTextEdit(this, 176.0f, 184.0f, this.selectionBoxWidth, 16.0f); + this.createMode(Mode.Species, new ModeWidgets(Mode.Species, this) { + @Override + public void createListBox(final IArea area) { + final GameProfile playerName = WindowAbstractDatabase.this.getUsername(); + final Collection speciesList = this.database.isNEI ? this.database.system.getAllSpecies() : this.database.system.getDiscoveredSpecies(this.database.getWorld(), playerName); + (this.listBox = new ControlSpeciesBox(this.modePage, area.x(), area.y(), area.w(), area.h())).setOptions(speciesList); + } + }); + this.createMode(Mode.Branches, new ModeWidgets(Mode.Branches, this) { + @Override + public void createListBox(final IArea area) { + final EntityPlayer player = this.database.getPlayer(); + final GameProfile playerName = WindowAbstractDatabase.this.getUsername(); + final Collection speciesList = this.database.isNEI ? this.database.system.getAllBranches() : this.database.system.getDiscoveredBranches(this.database.getWorld(), playerName); + (this.listBox = new ControlBranchBox(this.modePage, area.x(), area.y(), area.w(), area.h())).setOptions(speciesList); + } + }); + this.createMode(Mode.Breeder, new ModeWidgets(Mode.Breeder, this) { + @Override + public void createListBox(final IArea area) { + this.listBox = new ControlListBox(this.modePage, area.x(), area.y(), area.w(), area.h(), 12.0f); + } + }); + this.addTabs(); + final ControlTabBar tab = new ControlTabBar(this, 176.0f + this.selectionBoxWidth, 24.0f, 22.0f, 176.0f, Position.Right) { + @Override + public ControlTab createTab(final float x, final float y, final float w, final float h, final IDatabaseMode value) { + return new ControlTab(this, x, y, w, h, value) { + @Override + public String getName() { + return this.value.getName(); + } + }; + } + }; + tab.setValues(this.modePages.getValues()); + CraftGUIUtil.linkWidgets(tab, this.modePages); + this.changeMode(Mode.Species); + for (final IDatabaseMode mode : this.modes.keySet()) { + this.modes.get(mode).infoTabs = new ControlTabBar(this.modes.get(mode).modePage, 8.0f, 24.0f, 16.0f, 176.0f, Position.Left); + this.modes.get(mode).infoTabs.setValues(this.modes.get(mode).infoPages.getValues()); + CraftGUIUtil.linkWidgets(this.modes.get(mode).infoTabs, this.modes.get(mode).infoPages); + } + } + + @Override + public void initialiseServer() { + final IBreedingTracker tracker = this.system.getSpeciesRoot().getBreedingTracker(this.getWorld(), this.getUsername()); + if (tracker != null) { + tracker.synchToPlayer(this.getPlayer()); + } + } + + protected void addTabs() { + } + + public void gotoSpecies(final IAlleleSpecies value) { + if (value != null) { + this.modePages.setValue(Mode.Species); + this.changeMode(Mode.Species); + this.modes.get(this.modePages.getValue()).listBox.setValue(value); + } + } + + public void gotoSpeciesDelayed(final IAlleleSpecies species) { + this.gotoSpecies = species; + } + + @Override + public void onUpdateClient() { + super.onUpdateClient(); + if (this.gotoSpecies != null) { + ((WindowAbstractDatabase) this.getSuperParent()).gotoSpecies(this.gotoSpecies); + this.gotoSpecies = null; + } + } + + public enum Mode implements IDatabaseMode + { + Species, + Branches, + Breeder; + + @Override + public String getName() { + return BinnieCore.proxy.localise("gui.database.mode." + this.name().toLowerCase()); + } + } + + public abstract static class ModeWidgets + { + public WindowAbstractDatabase database; + public ControlPage modePage; + private ControlPages infoPages; + public ControlListBox listBox; + private ControlTabBar infoTabs; + + public ModeWidgets(final IDatabaseMode mode, final WindowAbstractDatabase database) { + this.database = database; + this.modePage = new ControlPage(database.modePages, 0.0f, 0.0f, database.getSize().x(), database.getSize().y(), mode); + final IArea listBoxArea = database.panelSearch.area().inset(2); + this.createListBox(listBoxArea); + CraftGUIUtil.alignToWidget(this.listBox, database.panelSearch); + CraftGUIUtil.moveWidget(this.listBox, new IPoint(2.0f, 2.0f)); + CraftGUIUtil.alignToWidget(this.infoPages = new ControlPages(this.modePage, 0.0f, 0.0f, 144.0f, 176.0f), database.panelInformation); + } + + public abstract void createListBox(final IArea p0); + } +} diff --git a/src/main/java/binnie/craftgui/resource/IStyleSheet.java b/src/main/java/binnie/craftgui/resource/IStyleSheet.java new file mode 100644 index 00000000..7857caa2 --- /dev/null +++ b/src/main/java/binnie/craftgui/resource/IStyleSheet.java @@ -0,0 +1,10 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.resource; + +public interface IStyleSheet +{ + Texture getTexture(final Object p0); +} diff --git a/src/main/java/binnie/craftgui/resource/StyleSheet.java b/src/main/java/binnie/craftgui/resource/StyleSheet.java new file mode 100644 index 00000000..64731c09 --- /dev/null +++ b/src/main/java/binnie/craftgui/resource/StyleSheet.java @@ -0,0 +1,25 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.resource; + +import java.util.HashMap; +import java.util.Map; + +public class StyleSheet implements IStyleSheet +{ + protected Map textures; + + public StyleSheet() { + this.textures = new HashMap(); + } + + @Override + public Texture getTexture(final Object key) { + if (!this.textures.containsKey(key)) { + return StyleSheetManager.getTexture(key); + } + return this.textures.get(key); + } +} diff --git a/src/main/java/binnie/craftgui/resource/StyleSheetManager.java b/src/main/java/binnie/craftgui/resource/StyleSheetManager.java new file mode 100644 index 00000000..bf5678b3 --- /dev/null +++ b/src/main/java/binnie/craftgui/resource/StyleSheetManager.java @@ -0,0 +1,32 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.resource; + +import binnie.craftgui.core.CraftGUI; + +public class StyleSheetManager +{ + static IStyleSheet defaultSS; + + public static Texture getTexture(final Object key) { + return StyleSheetManager.defaultSS.getTexture(key); + } + + public static IStyleSheet getDefault() { + return StyleSheetManager.defaultSS; + } + + static { + StyleSheetManager.defaultSS = new DefaultStyleSheet(); + } + + private static class DefaultStyleSheet implements IStyleSheet + { + @Override + public Texture getTexture(final Object key) { + return CraftGUI.ResourceManager.getTexture(key.toString()); + } + } +} diff --git a/src/main/java/binnie/craftgui/resource/Texture.java b/src/main/java/binnie/craftgui/resource/Texture.java new file mode 100644 index 00000000..0697a0b2 --- /dev/null +++ b/src/main/java/binnie/craftgui/resource/Texture.java @@ -0,0 +1,120 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.resource; + +import binnie.craftgui.core.geometry.Position; +import binnie.core.resource.BinnieResource; +import binnie.craftgui.core.geometry.IBorder; +import binnie.craftgui.core.geometry.IArea; + +public class Texture +{ + public static final Texture NULL; + IArea area; + IBorder padding; + IBorder border; + BinnieResource filename; + + public Texture(final IArea area, final BinnieResource filename) { + this(area, IBorder.ZERO, IBorder.ZERO, filename); + } + + public Texture(final IArea area, final IBorder padding, final BinnieResource filename) { + this(area, padding, IBorder.ZERO, filename); + } + + public Texture(final IArea area, final IBorder padding, final IBorder border, final BinnieResource filename) { + this.padding = IBorder.ZERO; + this.border = IBorder.ZERO; + this.area = new IArea(area); + this.padding = new IBorder(padding); + this.border = new IBorder(border); + this.filename = filename; + } + + public IArea getArea() { + return this.area; + } + + public IBorder getPadding() { + return this.padding; + } + + public IBorder getBorder() { + return this.border; + } + + public BinnieResource getFilename() { + return this.filename; + } + + public IBorder getTotalPadding() { + return this.padding.add(this.border); + } + + public float w() { + return this.getArea().w(); + } + + public float h() { + return this.getArea().h(); + } + + public float u() { + return this.getArea().x(); + } + + public float v() { + return this.getArea().y(); + } + + public Texture crop(final Position anchor, final float dist) { + return this.crop(new IBorder(anchor.opposite(), dist)); + } + + public Texture crop(final IBorder crop) { + final Texture copy = new Texture(this.area, this.padding, this.border, this.filename); + if (crop.b() > 0.0f) { + copy.border.b(0.0f); + copy.padding.b(copy.padding.b() - Math.min(crop.b(), copy.padding.b())); + copy.area.h(copy.area.h() - crop.b()); + } + if (crop.t() > 0.0f) { + copy.border.t(0.0f); + copy.padding.t(copy.padding.t() - Math.min(crop.t(), copy.padding.t())); + copy.area.h(copy.area.h() - crop.t()); + copy.area.y(copy.area.y() + crop.t()); + } + if (crop.r() > 0.0f) { + copy.border.r(0.0f); + copy.padding.r(copy.padding.r() - Math.min(crop.r(), copy.padding.r())); + copy.area.w(copy.area.w() - crop.r()); + } + if (crop.l() > 0.0f) { + copy.border.l(0.0f); + copy.padding.l(copy.padding.l() - Math.min(crop.l(), copy.padding.l())); + copy.area.w(copy.area.w() - crop.l()); + copy.area.x(copy.area.x() + crop.l()); + } + return copy; + } + + @Override + public String toString() { + String out = "Texture["; + out += this.area.toString(); + if (!this.padding.isNonZero()) { + out = out + " padding:" + this.padding.toString(); + } + if (!this.border.isNonZero()) { + out = out + " border:" + this.border.toString(); + } + return out + "]"; + } + + static { + NULL = null; + } +} diff --git a/src/main/java/binnie/craftgui/resource/minecraft/CraftGUIResourceManager.java b/src/main/java/binnie/craftgui/resource/minecraft/CraftGUIResourceManager.java new file mode 100644 index 00000000..e3356387 --- /dev/null +++ b/src/main/java/binnie/craftgui/resource/minecraft/CraftGUIResourceManager.java @@ -0,0 +1,146 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.resource.minecraft; + +import java.util.List; +import java.util.ArrayList; +import binnie.craftgui.core.geometry.IArea; +import binnie.core.resource.IBinnieTexture; +import net.minecraft.client.resources.IResource; +import java.io.IOException; +import org.apache.commons.io.IOUtils; +import com.google.gson.JsonParseException; +import binnie.craftgui.core.geometry.IBorder; +import com.google.gson.JsonObject; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import java.io.Reader; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import com.google.common.base.Charsets; +import net.minecraft.util.ResourceLocation; +import net.minecraft.client.resources.IResourceManager; +import binnie.craftgui.core.CraftGUI; +import java.util.HashMap; +import binnie.craftgui.resource.Texture; +import java.util.Map; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.resources.IResourceManagerReloadListener; + +@SideOnly(Side.CLIENT) +public class CraftGUIResourceManager implements IResourceManagerReloadListener +{ + private Map textureSheets; + private Map textures; + + public CraftGUIResourceManager() { + this.textureSheets = new HashMap(); + this.textures = new HashMap(); + CraftGUI.ResourceManager = this; + } + + @Override + public void onResourceManagerReload(final IResourceManager manager) { + this.textureSheets.clear(); + try { + final IResource res = manager.getResource(new ResourceLocation("binniecore", "gui/stylesheet.json")); + JsonObject jsonobject = null; + BufferedReader bufferedreader = null; + try { + bufferedreader = new BufferedReader(new InputStreamReader(res.getInputStream(), Charsets.UTF_8)); + jsonobject = new JsonParser().parse(bufferedreader).getAsJsonObject(); + for (final JsonElement el : jsonobject.get("texture-sheets").getAsJsonArray()) { + if (el instanceof JsonObject) { + final JsonObject sheet = (JsonObject) el; + final String name = sheet.get("name").getAsString(); + final String modid = sheet.get("modid").getAsString(); + final String path = sheet.get("path").getAsString(); + this.textureSheets.put(name, new ParsedTextureSheet(name, modid, path)); + } + } + for (final JsonElement el : jsonobject.get("textures").getAsJsonArray()) { + if (el instanceof JsonObject) { + final JsonObject sheet = (JsonObject) el; + final String name = sheet.get("name").getAsString(); + final IBinnieTexture textureSheet = this.getTextureSheet(sheet.get("sheet").getAsString()); + final IArea uv = this.getArea(sheet.get("uv").getAsString()); + IBorder border = IBorder.ZERO; + IBorder padding = IBorder.ZERO; + if (sheet.has("border")) { + border = this.getBorder(sheet.get("border").getAsString()); + } + if (sheet.has("padding")) { + padding = this.getBorder(sheet.get("padding").getAsString()); + } + this.textures.put(name, new Texture(uv, padding, border, textureSheet.getTexture())); + } + } + } catch (RuntimeException runtimeexception) { + throw new JsonParseException("Failed to parse stylesheet for Binnie's Mods", runtimeexception); + } finally { + IOUtils.closeQuietly(bufferedreader); + } + } catch (IOException e) { + throw new RuntimeException("Failed to load default stylesheet for Binnie's Mods.", e); + } + } + + public IArea getArea(final String name) { + final String[] split = name.split(" "); + if (split.length < 1 || split.length > 4) { + throw new RuntimeException("Parameter must have between one and four numbers"); + } + final List f = new ArrayList(); + for (final String string : split) { + f.add(Float.parseFloat(string)); + } + if (f.size() == 1) { + return new IArea(f.get(0)); + } + if (f.size() == 2) { + return new IArea(f.get(0), f.get(1)); + } + if (f.size() == 3) { + return new IArea(f.get(0), f.get(1), f.get(2)); + } + return new IArea(f.get(0), f.get(1), f.get(2), f.get(3)); + } + + public IBorder getBorder(final String name) { + final String[] split = name.split(" "); + if (split.length < 1 || split.length > 4) { + throw new RuntimeException("Parameter must have between one and four numbers"); + } + final List f = new ArrayList(); + for (final String string : split) { + f.add(Float.parseFloat(string)); + } + if (f.size() == 1) { + return new IBorder(f.get(0)); + } + if (f.size() == 2) { + return new IBorder(f.get(0), f.get(1)); + } + if (f.size() == 3) { + return new IBorder(f.get(0), f.get(1), f.get(2)); + } + return new IBorder(f.get(0), f.get(1), f.get(2), f.get(3)); + } + + public IBinnieTexture getTextureSheet(final String name) { + if (!this.textureSheets.containsKey(name)) { + throw new RuntimeException("Missing GUI texture sheet for Binnie Mods: " + name); + } + return this.textureSheets.get(name); + } + + public Texture getTexture(final String name) { + if (!this.textures.containsKey(name)) { + throw new RuntimeException("Missing GUI texture Binnie Mods: " + name); + } + return this.textures.get(name); + } +} diff --git a/src/main/java/binnie/craftgui/resource/minecraft/CraftGUITexture.java b/src/main/java/binnie/craftgui/resource/minecraft/CraftGUITexture.java new file mode 100644 index 00000000..8718846d --- /dev/null +++ b/src/main/java/binnie/craftgui/resource/minecraft/CraftGUITexture.java @@ -0,0 +1,62 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.resource.minecraft; + +public enum CraftGUITexture +{ + Window("window"), + PanelGray("panel.gray"), + PanelBlack("panel.black"), + PanelTinted("panel.tinted"), + ButtonDisabled("button.disabled"), + Button("button"), + ButtonHighlighted("button.highlighted"), + Slot("slot"), + SlotBorder("slot.border"), + SlotOverlay("slot.overlay"), + SlotCharge("slot.charge"), + LiquidTank("liquidtank"), + LiquidTankOverlay("liquidtank.overlay"), + StateError("errorstate.error"), + StateWarning("errorstate.warning"), + StateNone("errorstate.none"), + EnergyBarBack("energybar.back"), + EnergyBarGlow("energybar.glow"), + EnergyBarGlass("energybar.glass"), + TabDisabled("tab.disabled"), + Tab("tab"), + TabHighlighted("tab.highlighted"), + TabOutline("tab.outline"), + TabSolid("tab.solid"), + ScrollDisabled("scroll.disabled"), + Scroll("scroll"), + ScrollHighlighted("scroll.highlighted"), + Outline("outline"), + HelpButton("button.help"), + InfoButton("button.info"), + UserButton("button.user"), + PowerButton("button.power"), + HorizontalLiquidTank("horizontalliquidtank"), + HorizontalLiquidTankOverlay("horizontalliquidtank.overlay"), + SlideUp("slide.up"), + SlideDown("slide.down"), + SlideLeft("slide.left"), + SlideRight("slide.right"), + Checkbox("checkbox"), + CheckboxHighlighted("checkbox.highlighted"), + CheckboxChecked("checkbox.checked"), + CheckboxCheckedHighlighted("checkbox.checked.highlighted"); + + String name; + + private CraftGUITexture(final String name) { + this.name = name; + } + + @Override + public String toString() { + return this.name; + } +} diff --git a/src/main/java/binnie/craftgui/resource/minecraft/CraftGUITextureSheet.java b/src/main/java/binnie/craftgui/resource/minecraft/CraftGUITextureSheet.java new file mode 100644 index 00000000..dfc1ce93 --- /dev/null +++ b/src/main/java/binnie/craftgui/resource/minecraft/CraftGUITextureSheet.java @@ -0,0 +1,36 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.resource.minecraft; + +import binnie.craftgui.core.CraftGUI; +import binnie.core.BinnieCore; +import binnie.core.resource.BinnieResource; +import binnie.core.resource.IBinnieTexture; + +public enum CraftGUITextureSheet implements IBinnieTexture +{ + Controls2("controls"), + Panel2("panels"), + Slots("slots"); + + String name; + + private CraftGUITextureSheet(final String name) { + this.name = name; + } + + @Override + public String toString() { + return this.name; + } + + @Override + public BinnieResource getTexture() { + if (BinnieCore.proxy.isServer()) { + return null; + } + return CraftGUI.ResourceManager.getTextureSheet(this.name).getTexture(); + } +} diff --git a/src/main/java/binnie/craftgui/resource/minecraft/PaddedTexture.java b/src/main/java/binnie/craftgui/resource/minecraft/PaddedTexture.java new file mode 100644 index 00000000..f8dd6900 --- /dev/null +++ b/src/main/java/binnie/craftgui/resource/minecraft/PaddedTexture.java @@ -0,0 +1,22 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.resource.minecraft; + +import binnie.craftgui.core.geometry.IBorder; +import binnie.craftgui.core.geometry.IArea; +import binnie.core.resource.BinnieResource; +import binnie.core.resource.IBinnieTexture; +import binnie.craftgui.resource.Texture; + +public class PaddedTexture extends Texture +{ + public PaddedTexture(final int u, final int v, final int w, final int h, final int offset, final IBinnieTexture textureFile, final int leftPadding, final int rightPadding, final int topPadding, final int bottomPadding) { + this(u, v, w, h, offset, textureFile.getTexture(), leftPadding, rightPadding, topPadding, bottomPadding); + } + + public PaddedTexture(final int u, final int v, final int w, final int h, final int offset, final BinnieResource textureFile, final int leftPadding, final int rightPadding, final int topPadding, final int bottomPadding) { + super(new IArea(u, v, w, h), new IBorder(topPadding, rightPadding, bottomPadding, leftPadding), new IBorder(offset), textureFile); + } +} diff --git a/src/main/java/binnie/craftgui/resource/minecraft/ParsedTextureSheet.java b/src/main/java/binnie/craftgui/resource/minecraft/ParsedTextureSheet.java new file mode 100644 index 00000000..480056fe --- /dev/null +++ b/src/main/java/binnie/craftgui/resource/minecraft/ParsedTextureSheet.java @@ -0,0 +1,27 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.resource.minecraft; + +import binnie.core.resource.ResourceType; +import binnie.core.resource.BinnieResource; +import binnie.core.resource.IBinnieTexture; + +class ParsedTextureSheet implements IBinnieTexture +{ + private String name; + private String modid; + private String path; + + public ParsedTextureSheet(final String name, final String modid, final String path) { + this.name = name; + this.modid = modid; + this.path = path; + } + + @Override + public BinnieResource getTexture() { + return new BinnieResource(this.modid, ResourceType.GUI, this.path); + } +} diff --git a/src/main/java/binnie/craftgui/resource/minecraft/StandardTexture.java b/src/main/java/binnie/craftgui/resource/minecraft/StandardTexture.java new file mode 100644 index 00000000..05a3fc26 --- /dev/null +++ b/src/main/java/binnie/craftgui/resource/minecraft/StandardTexture.java @@ -0,0 +1,34 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.resource.minecraft; + +import binnie.craftgui.core.geometry.IBorder; +import binnie.craftgui.core.geometry.IArea; +import binnie.core.resource.BinnieResource; +import binnie.core.resource.IBinnieTexture; +import binnie.craftgui.resource.Texture; + +public class StandardTexture extends Texture +{ + public StandardTexture(final int u, final int v, final int w, final int h, final IBinnieTexture textureFile) { + this(u, v, w, h, 0, textureFile.getTexture()); + } + + public StandardTexture(final int u, final int v, final int w, final int h, final int offset, final IBinnieTexture textureFile) { + this(u, v, w, h, offset, textureFile.getTexture()); + } + + public StandardTexture(final int u, final int v, final int w, final int h, final BinnieResource textureFile) { + this(u, v, w, h, 0, textureFile); + } + + public StandardTexture(final int u, final int v, final int w, final int h, final int padding, final BinnieResource textureFile) { + super(new IArea(u, v, w, h), IBorder.ZERO, new IBorder(padding), textureFile); + } + + public BinnieResource getTexture() { + return this.getFilename(); + } +} diff --git a/src/main/java/binnie/craftgui/window/Panel.java b/src/main/java/binnie/craftgui/window/Panel.java new file mode 100644 index 00000000..5f8535d2 --- /dev/null +++ b/src/main/java/binnie/craftgui/window/Panel.java @@ -0,0 +1,63 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.craftgui.window; + +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.minecraft.MinecraftGUI; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.core.Control; + +public class Panel extends Control +{ + IPanelType type; + + public Panel(final IWidget parent, final float x, final float y, final float width, final float height, final IPanelType type) { + super(parent, x, y, width, height); + this.type = type; + } + + public Panel(final IWidget parent, final IArea area, final IPanelType type) { + this(parent, area.x(), area.y(), area.w(), area.h(), type); + } + + public IPanelType getType() { + return this.type; + } + + @Override + public void onRenderBackground() { + final IPanelType panelType = this.getType(); + if (panelType instanceof MinecraftGUI.PanelType) { + switch ((MinecraftGUI.PanelType) panelType) { + case Black: { + CraftGUI.Render.texture(CraftGUITexture.PanelBlack, this.getArea()); + break; + } + case Gray: { + CraftGUI.Render.texture(CraftGUITexture.PanelGray, this.getArea()); + break; + } + case Tinted: { + CraftGUI.Render.texture(CraftGUITexture.PanelTinted, this.getArea()); + break; + } + case Outline: { + CraftGUI.Render.texture(CraftGUITexture.Outline, this.getArea()); + break; + } + case TabOutline: { + CraftGUI.Render.texture(CraftGUITexture.TabOutline, this.getArea()); + break; + } + } + } + } + + public interface IPanelType + { + } +} diff --git a/src/main/java/binnie/extrabees/ExtraBees.java b/src/main/java/binnie/extrabees/ExtraBees.java new file mode 100644 index 00000000..37856d85 --- /dev/null +++ b/src/main/java/binnie/extrabees/ExtraBees.java @@ -0,0 +1,125 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees; + +import binnie.core.BinnieCore; +import binnie.core.network.BinniePacketHandler; +import binnie.core.proxy.IProxyCore; +import binnie.extrabees.config.ConfigurationMachines; +import binnie.extrabees.config.ConfigurationMain; +import binnie.extrabees.core.ExtraBeeGUID; +import binnie.core.gui.IBinnieGUID; + +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLInitializationEvent; + +import binnie.extrabees.apiary.ModuleApiary; +import binnie.extrabees.liquids.ModuleLiquids; +import binnie.extrabees.worldgen.ModuleGeneration; +import binnie.extrabees.genetics.ModuleGenetics; +import binnie.extrabees.products.ModuleProducts; +import binnie.extrabees.core.ModuleCore; + +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import net.minecraft.item.Item; +import net.minecraft.block.material.Material; +import net.minecraft.block.Block; + +import cpw.mods.fml.common.SidedProxy; + +import binnie.extrabees.proxy.ExtraBeesProxy; + +import cpw.mods.fml.common.Mod; + +import binnie.core.AbstractMod; + +@Mod(modid = "ExtraBees", name = "Extra Bees", useMetadata = true, dependencies = "after:BinnieCore") +public class ExtraBees extends AbstractMod +{ + @Mod.Instance("ExtraBees") + public static ExtraBees instance; + @SidedProxy(clientSide = "binnie.extrabees.proxy.ExtraBeesProxyClient", serverSide = "binnie.extrabees.proxy.ExtraBeesProxyServer") + public static ExtraBeesProxy proxy; + public static Block hive; + public static Material materialBeehive; + public static Block ectoplasm; + public static Block apiaristMachine; + public static Block geneticMachine; + public static Block advGeneticMachine; + public static Item comb; + public static Item propolis; + public static Item honeyDrop; + public static Item honeyCrystal; + public static Item honeyCrystalEmpty; + public static Item dictionary; + public static Item itemMisc; + + @Mod.EventHandler + public void preInit(final FMLPreInitializationEvent evt) { + this.addModule(new ModuleCore()); + this.addModule(new ModuleProducts()); + this.addModule(new ModuleGenetics()); + this.addModule(new ModuleGeneration()); + this.addModule(new ModuleLiquids()); + this.addModule(new ModuleApiary()); + this.preInit(); + } + + @Mod.EventHandler + public void init(final FMLInitializationEvent evt) { + this.init(); + } + + @Mod.EventHandler + public void postInit(final FMLPostInitializationEvent evt) { + this.postInit(); + } + + public ExtraBees() { + ExtraBees.instance = this; + } + + @Override + public IBinnieGUID[] getGUIDs() { + return ExtraBeeGUID.values(); + } + + @Override + public Class[] getConfigs() { + return new Class[] { ConfigurationMain.class, ConfigurationMachines.class }; + } + + @Override + public IProxyCore getProxy() { + return ExtraBees.proxy; + } + + @Override + public String getChannel() { + return "EB"; + } + + @Override + public String getModID() { + return "extrabees"; + } + + @Override + protected Class getPacketHandler() { + return PacketHandler.class; + } + + @Override + public boolean isActive() { + return BinnieCore.isExtraBeesActive(); + } + + public static class PacketHandler extends BinniePacketHandler + { + public PacketHandler() { + super(ExtraBees.instance); + } + } +} diff --git a/src/main/java/binnie/extrabees/apiary/ComponentBeeModifier.java b/src/main/java/binnie/extrabees/apiary/ComponentBeeModifier.java new file mode 100644 index 00000000..8e0476e6 --- /dev/null +++ b/src/main/java/binnie/extrabees/apiary/ComponentBeeModifier.java @@ -0,0 +1,95 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.apiary; + +import forestry.api.genetics.IIndividual; +import forestry.api.apiculture.IBee; +import net.minecraft.item.ItemStack; +import forestry.api.apiculture.IBeeGenome; +import binnie.core.machines.Machine; +import forestry.api.apiculture.IBeeListener; +import forestry.api.apiculture.IBeeModifier; +import binnie.core.machines.MachineComponent; + +public class ComponentBeeModifier extends MachineComponent implements IBeeModifier, IBeeListener +{ + public ComponentBeeModifier(final Machine machine) { + super(machine); + } + + @Override + public float getTerritoryModifier(final IBeeGenome genome, final float currentModifier) { + return 1.0f; + } + + @Override + public float getMutationModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return 1.0f; + } + + @Override + public float getLifespanModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return 1.0f; + } + + @Override + public float getProductionModifier(final IBeeGenome genome, final float currentModifier) { + return 1.0f; + } + + @Override + public float getFloweringModifier(final IBeeGenome genome, final float currentModifier) { + return 1.0f; + } + + @Override + public boolean isSealed() { + return false; + } + + @Override + public boolean isSelfLighted() { + return false; + } + + @Override + public boolean isSunlightSimulated() { + return false; + } + + @Override + public boolean isHellish() { + return false; + } + + public void onQueenChange(final ItemStack queen) { + } + + @Override + public void wearOutEquipment(final int amount) { + } + + public void onPostQueenDeath(final IBee queen) { + } + + public boolean onEggLaid(final IBee queen) { + return false; + } + + @Override + public float getGeneticDecay(final IBeeGenome genome, final float currentModifier) { + return 1.0f; + } + + @Override + public boolean onPollenRetrieved(IIndividual individual) { + return false; + } + + @Override + public void onQueenDeath() { + + } +} diff --git a/src/main/java/binnie/extrabees/apiary/ComponentExtraBeeGUI.java b/src/main/java/binnie/extrabees/apiary/ComponentExtraBeeGUI.java new file mode 100644 index 00000000..dc22bdfb --- /dev/null +++ b/src/main/java/binnie/extrabees/apiary/ComponentExtraBeeGUI.java @@ -0,0 +1,28 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.apiary; + +import binnie.extrabees.ExtraBees; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import binnie.core.machines.Machine; +import binnie.extrabees.core.ExtraBeeGUID; +import binnie.core.machines.component.IInteraction; +import binnie.core.machines.MachineComponent; + +public class ComponentExtraBeeGUI extends MachineComponent implements IInteraction.RightClick +{ + ExtraBeeGUID id; + + public ComponentExtraBeeGUI(final Machine machine, final ExtraBeeGUID id) { + super(machine); + this.id = id; + } + + @Override + public void onRightClick(final World world, final EntityPlayer player, final int x, final int y, final int z) { + ExtraBees.proxy.openGui(this.id, player, x, y, z); + } +} diff --git a/src/main/java/binnie/extrabees/apiary/EnumHiveFrame.java b/src/main/java/binnie/extrabees/apiary/EnumHiveFrame.java new file mode 100644 index 00000000..5ef41c9b --- /dev/null +++ b/src/main/java/binnie/extrabees/apiary/EnumHiveFrame.java @@ -0,0 +1,143 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.apiary; + +import binnie.extrabees.ExtraBees; +import binnie.core.genetics.EnumBeeBooleanModifier; +import forestry.api.apiculture.IBeeGenome; +import forestry.api.apiculture.IBee; +import forestry.api.apiculture.IBeeHousing; +import forestry.api.apiculture.IBeeModifier; + +import net.minecraft.init.Blocks; + +import cpw.mods.fml.common.registry.GameRegistry; + +import net.minecraft.init.Items; + +import binnie.core.Mods; + +import net.minecraft.item.ItemStack; + +import binnie.core.genetics.EnumBeeModifier; +import binnie.core.genetics.BeeModifierLogic; + +import net.minecraft.item.Item; + +import forestry.api.apiculture.IHiveFrame; + +public enum EnumHiveFrame implements IHiveFrame, IBeeModifier +{ + Cocoa, + Cage, + Soul, + Clay, + Debug; + + Item item; + int maxDamage; + BeeModifierLogic logic; + + public static void init() { + EnumHiveFrame.Cocoa.logic.setModifier(EnumBeeModifier.Lifespan, 0.75f, 0.25f); + EnumHiveFrame.Cocoa.logic.setModifier(EnumBeeModifier.Production, 1.5f, 5.0f); + EnumHiveFrame.Cage.logic.setModifier(EnumBeeModifier.Territory, 0.5f, 0.1f); + EnumHiveFrame.Cage.logic.setModifier(EnumBeeModifier.Lifespan, 0.75f, 0.5f); + EnumHiveFrame.Cage.logic.setModifier(EnumBeeModifier.Production, 0.75f, 0.5f); + EnumHiveFrame.Soul.logic.setModifier(EnumBeeModifier.Mutation, 1.5f, 5.0f); + EnumHiveFrame.Soul.logic.setModifier(EnumBeeModifier.Lifespan, 0.75f, 0.5f); + EnumHiveFrame.Soul.logic.setModifier(EnumBeeModifier.Production, 0.25f, 0.1f); + EnumHiveFrame.Soul.setMaxDamage(80); + EnumHiveFrame.Clay.logic.setModifier(EnumBeeModifier.Lifespan, 1.5f, 5.0f); + EnumHiveFrame.Clay.logic.setModifier(EnumBeeModifier.Mutation, 0.5f, 0.2f); + EnumHiveFrame.Clay.logic.setModifier(EnumBeeModifier.Production, 0.75f, 0.2f); + EnumHiveFrame.Debug.logic.setModifier(EnumBeeModifier.Lifespan, 1.0E-4f, 1.0E-4f); + GameRegistry.addRecipe(new ItemStack(EnumHiveFrame.Cocoa.item), new Object[] { " c ", "cFc", " c ", 'F', Mods.Forestry.stack("frameImpregnated"), 'c', new ItemStack(Items.dye, 1, 3) }); + GameRegistry.addShapelessRecipe(new ItemStack(EnumHiveFrame.Cage.item), new Object[] { Mods.Forestry.stack("frameImpregnated"), Blocks.iron_bars }); + GameRegistry.addShapelessRecipe(new ItemStack(EnumHiveFrame.Soul.item), new Object[] { Mods.Forestry.stack("frameImpregnated"), Blocks.soul_sand }); + GameRegistry.addRecipe(new ItemStack(EnumHiveFrame.Clay.item), new Object[] { " c ", "cFc", " c ", 'F', Mods.Forestry.stack("frameImpregnated"), 'c', Items.clay_ball }); + } + + public int getIconIndex() { + return 55 + this.ordinal(); + } + + public void setMaxDamage(final int damage) { + this.maxDamage = damage; + } + + private EnumHiveFrame() { + this.maxDamage = 240; + this.logic = new BeeModifierLogic(); + } + + @Override + public ItemStack frameUsed(final IBeeHousing house, final ItemStack frame, final IBee queen, final int wear) { + frame.setItemDamage(frame.getItemDamage() + wear); + if (frame.getItemDamage() >= frame.getMaxDamage()) { + return null; + } + return frame; + } + + @Override + public float getTerritoryModifier(final IBeeGenome genome, final float currentModifier) { + return this.logic.getModifier(EnumBeeModifier.Territory, currentModifier); + } + + @Override + public float getMutationModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return this.logic.getModifier(EnumBeeModifier.Mutation, currentModifier); + } + + @Override + public float getLifespanModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return this.logic.getModifier(EnumBeeModifier.Lifespan, currentModifier); + } + + @Override + public float getProductionModifier(final IBeeGenome genome, final float currentModifier) { + return this.logic.getModifier(EnumBeeModifier.Production, currentModifier); + } + + @Override + public float getFloweringModifier(final IBeeGenome genome, final float currentModifier) { + return this.logic.getModifier(EnumBeeModifier.Flowering, currentModifier); + } + + @Override + public float getGeneticDecay(final IBeeGenome genome, final float currentModifier) { + return this.logic.getModifier(EnumBeeModifier.GeneticDecay, currentModifier); + } + + @Override + public boolean isSealed() { + return this.logic.getModifier(EnumBeeBooleanModifier.Sealed); + } + + @Override + public boolean isSelfLighted() { + return this.logic.getModifier(EnumBeeBooleanModifier.SelfLighted); + } + + @Override + public boolean isSunlightSimulated() { + return this.logic.getModifier(EnumBeeBooleanModifier.SunlightStimulated); + } + + @Override + public boolean isHellish() { + return this.logic.getModifier(EnumBeeBooleanModifier.Hellish); + } + + public String getName() { + return ExtraBees.proxy.localise("item.frame." + this.toString().toLowerCase()); + } + + @Override + public IBeeModifier getBeeModifier() { + return this; + } +} diff --git a/src/main/java/binnie/extrabees/apiary/IndustrialFrame.java b/src/main/java/binnie/extrabees/apiary/IndustrialFrame.java new file mode 100644 index 00000000..4d0c315e --- /dev/null +++ b/src/main/java/binnie/extrabees/apiary/IndustrialFrame.java @@ -0,0 +1,146 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.apiary; + +import forestry.api.apiculture.IBeeGenome; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Item; +import forestry.api.apiculture.IBeeModifier; + +public enum IndustrialFrame implements IBeeModifier +{ + Empty("Empty", 5, 0), + Light("Glowstone Lighting", 2, 4), + Rain("Rain Shielding", 2, 4), + Sunlight("Sunlight Simulator", 4, 8), + Soul("Low Grade Mutagen", 5, 15), + Uranium("High Grade Mutagen", 10, 50), + Cage("Meshed Restrainer", 3, 12), + Freedom("Territory Extension", 3, 16), + Honey("Honey Amplifier", 4, 12), + Jelly("Gelatin Amplifier", 8, 36), + Leaf("Pollinator MK I", 3, 15), + Pollen("Pollinator MK II", 7, 25), + Clay("Lifespan Extensor", 2, 10), + Emerald("Eon Simulator", 7, 20), + NetherStar("Immortality Gate", 12, 50), + Poison("Mortality Inhibitor", 8, 18); + + String name; + float territoryMod; + float mutationMod; + float lifespanMod; + float productionMod; + float floweringMod; + boolean lighted; + boolean sunlight; + boolean rain; + int wearMod; + int power; + + private IndustrialFrame(final String name, final int wear, final int power) { + this.territoryMod = 1.0f; + this.mutationMod = 1.0f; + this.lifespanMod = 1.0f; + this.productionMod = 1.0f; + this.floweringMod = 1.0f; + this.lighted = false; + this.sunlight = false; + this.rain = false; + this.name = name; + this.wearMod = wear; + this.power = power; + } + + public static ItemStack getItemStack(final Item item, final IndustrialFrame frame) { + final ItemStack stack = new ItemStack(item); + final NBTTagCompound nbt = new NBTTagCompound(); + nbt.setInteger("frame", frame.ordinal()); + stack.setTagCompound(nbt); + return stack; + } + + @Override + public float getTerritoryModifier(final IBeeGenome genome, final float currentModifier) { + return this.territoryMod; + } + + @Override + public float getMutationModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return this.mutationMod; + } + + @Override + public float getLifespanModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return this.lifespanMod; + } + + @Override + public float getProductionModifier(final IBeeGenome genome, final float currentModifier) { + return this.productionMod; + } + + @Override + public float getFloweringModifier(final IBeeGenome genome, final float currentModifier) { + return this.floweringMod; + } + + @Override + public boolean isSealed() { + return this.rain; + } + + @Override + public boolean isSelfLighted() { + return this.lighted; + } + + @Override + public boolean isSunlightSimulated() { + return this.sunlight; + } + + @Override + public boolean isHellish() { + return false; + } + + public Object getName() { + return this.name; + } + + public int getWearModifier() { + return this.wearMod; + } + + public int getPowerUsage() { + return this.power; + } + + @Override + public float getGeneticDecay(final IBeeGenome genome, final float currentModifier) { + return 1.0f; + } + + static { + IndustrialFrame.Light.lighted = true; + IndustrialFrame.Rain.rain = true; + IndustrialFrame.Sunlight.lighted = true; + IndustrialFrame.Sunlight.sunlight = true; + IndustrialFrame.Soul.mutationMod = 1.3f; + IndustrialFrame.Uranium.mutationMod = 2.0f; + IndustrialFrame.Cage.territoryMod = 0.4f; + IndustrialFrame.Freedom.territoryMod = 1.4f; + IndustrialFrame.Honey.productionMod = 1.4f; + IndustrialFrame.Jelly.productionMod = 1.8f; + IndustrialFrame.Leaf.floweringMod = 1.4f; + IndustrialFrame.Pollen.floweringMod = 2.0f; + IndustrialFrame.Clay.lifespanMod = 1.4f; + IndustrialFrame.Emerald.lifespanMod = 2.0f; + IndustrialFrame.NetherStar.lifespanMod = 20.0f; + IndustrialFrame.Poison.lifespanMod = 0.5f; + } +} diff --git a/src/main/java/binnie/extrabees/apiary/ItemHiveFrame.java b/src/main/java/binnie/extrabees/apiary/ItemHiveFrame.java new file mode 100644 index 00000000..81a21de4 --- /dev/null +++ b/src/main/java/binnie/extrabees/apiary/ItemHiveFrame.java @@ -0,0 +1,112 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.apiary; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import binnie.extrabees.ExtraBees; + +import net.minecraft.client.renderer.texture.IIconRegister; + +import forestry.api.apiculture.IBee; +import forestry.api.apiculture.IBeeHousing; +import forestry.api.apiculture.IBeeGenome; +import forestry.api.apiculture.IBeeModifier; +import forestry.api.core.Tabs; + +import net.minecraft.item.ItemStack; + +import forestry.api.apiculture.IHiveFrame; + +import net.minecraft.item.Item; + +public class ItemHiveFrame extends Item implements IHiveFrame, IBeeModifier +{ + EnumHiveFrame frame; + + @Override + public String getItemStackDisplayName(final ItemStack par1ItemStack) { + return this.frame.getName(); + } + + public ItemHiveFrame(final EnumHiveFrame frame) { + this.frame = frame; + this.setMaxDamage(frame.maxDamage); + this.setCreativeTab(Tabs.tabApiculture); + this.setMaxStackSize(1); + this.setUnlocalizedName("hiveFrame"); + } + + @Override + public float getTerritoryModifier(final IBeeGenome genome, final float currentModifier) { + return this.frame.getTerritoryModifier(genome, currentModifier); + } + + @Override + public float getMutationModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return this.frame.getMutationModifier(genome, mate, currentModifier); + } + + @Override + public float getLifespanModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return this.frame.getLifespanModifier(genome, mate, currentModifier); + } + + @Override + public float getProductionModifier(final IBeeGenome genome, final float currentModifier) { + return this.frame.getProductionModifier(genome, currentModifier); + } + + @Override + public ItemStack frameUsed(final IBeeHousing housing, final ItemStack frame, final IBee queen, final int wear) { + frame.setItemDamage(frame.getItemDamage() + wear); + if (frame.getItemDamage() >= frame.getMaxDamage()) { + return null; + } + return frame; + } + + @Override + public float getFloweringModifier(final IBeeGenome genome, final float currentModifier) { + return 1.0f; + } + + @Override + public boolean isSealed() { + return false; + } + + @Override + public boolean isSelfLighted() { + return false; + } + + @Override + public boolean isSunlightSimulated() { + return false; + } + + @Override + public boolean isHellish() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.itemIcon = ExtraBees.proxy.getIcon(register, "frame" + this.frame.toString()); + } + + @Override + public float getGeneticDecay(final IBeeGenome genome, final float currentModifier) { + return 1.0f; + } + + @Override + public IBeeModifier getBeeModifier() { + return this; + } +} diff --git a/src/main/java/binnie/extrabees/apiary/ItemIndustrialFrame.java b/src/main/java/binnie/extrabees/apiary/ItemIndustrialFrame.java new file mode 100644 index 00000000..b9ee9ec2 --- /dev/null +++ b/src/main/java/binnie/extrabees/apiary/ItemIndustrialFrame.java @@ -0,0 +1,67 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.apiary; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.item.ItemStack; +import java.util.List; +import net.minecraft.creativetab.CreativeTabs; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.item.Item; + +public class ItemIndustrialFrame extends Item +{ + @Override + @SideOnly(Side.CLIENT) + public boolean requiresMultipleRenderPasses() { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(final Item par1, final CreativeTabs par2CreativeTabs, final List par3List) { + for (final IndustrialFrame frame : IndustrialFrame.values()) { + final ItemStack stack = new ItemStack(this); + final NBTTagCompound nbt = new NBTTagCompound(); + nbt.setInteger("frame", frame.ordinal()); + stack.setTagCompound(nbt); + par3List.add(stack); + } + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(final ItemStack par1ItemStack, final EntityPlayer par2EntityPlayer, final List par3List, final boolean par4) { + super.addInformation(par1ItemStack, par2EntityPlayer, par3List, par4); + final IndustrialFrame frame = getFrame(par1ItemStack); + if (frame == null) { + par3List.add("Invalid Contents"); + } + else { + par3List.add(frame.getName()); + } + } + + @Override + public String getItemStackDisplayName(final ItemStack par1ItemStack) { + return "Industrial Frame"; + } + + public ItemIndustrialFrame() { + this.setCreativeTab(CreativeTabs.tabMisc); + this.setMaxDamage(400); + this.setMaxStackSize(1); + this.setUnlocalizedName("industrialFrame"); + } + + public static IndustrialFrame getFrame(final ItemStack stack) { + if (stack == null || !stack.hasTagCompound() || !stack.getTagCompound().hasKey("frame")) { + return null; + } + return IndustrialFrame.values()[stack.getTagCompound().getInteger("frame")]; + } +} diff --git a/src/main/java/binnie/extrabees/apiary/ModuleApiary.java b/src/main/java/binnie/extrabees/apiary/ModuleApiary.java new file mode 100644 index 00000000..09db8069 --- /dev/null +++ b/src/main/java/binnie/extrabees/apiary/ModuleApiary.java @@ -0,0 +1,71 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.apiary; + +import forestry.api.circuits.ICircuitLayout; +import binnie.extrabees.apiary.machine.AlvearyStimulator; +import net.minecraft.item.crafting.IRecipe; +import net.minecraftforge.oredict.ShapedOreRecipe; +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.init.Items; +import binnie.core.Mods; +import binnie.extrabees.apiary.machine.AlvearyMutator; +import net.minecraft.item.ItemStack; +import net.minecraft.init.Blocks; +import binnie.core.BinnieCore; +import forestry.api.core.Tabs; +import binnie.core.machines.MachineGroup; +import binnie.extrabees.apiary.machine.AlvearyMachine; +import binnie.extrabees.ExtraBees; +import binnie.core.circuits.BinnieCircuitLayout; +import net.minecraft.block.Block; +import binnie.core.IInitializable; + +public class ModuleApiary implements IInitializable +{ + public static Block blockComponent; + BinnieCircuitLayout stimulatorLayout; + + @Override + public void preInit() { + final MachineGroup machineGroup = new MachineGroup(ExtraBees.instance, "alveay", "alveary", AlvearyMachine.values()); + machineGroup.setCreativeTab(Tabs.tabApiculture); + BinnieCore.proxy.registerTileEntity(TileExtraBeeAlveary.class, "extrabees.tile.alveary", BinnieCore.proxy.createObject("binnie.core.machines.RendererMachine")); + ModuleApiary.blockComponent = machineGroup.getBlock(); + AlvearyMutator.addMutationItem(new ItemStack(Blocks.soul_sand), 1.5f); + AlvearyMutator.addMutationItem(Mods.IC2.stack("UranFuel"), 4.0f); + AlvearyMutator.addMutationItem(Mods.IC2.stack("MOXFuel"), 10.0f); + AlvearyMutator.addMutationItem(Mods.IC2.stack("Plutonium"), 8.0f); + AlvearyMutator.addMutationItem(Mods.IC2.stack("smallPlutonium"), 5.0f); + AlvearyMutator.addMutationItem(Mods.IC2.stack("Uran235"), 4.0f); + AlvearyMutator.addMutationItem(Mods.IC2.stack("smallUran235"), 2.5f); + AlvearyMutator.addMutationItem(Mods.IC2.stack("Uran238"), 2.0f); + AlvearyMutator.addMutationItem(new ItemStack(Items.ender_pearl), 2.0f); + AlvearyMutator.addMutationItem(new ItemStack(Items.ender_eye), 4.0f); + for (final EnumHiveFrame frame : EnumHiveFrame.values()) { + GameRegistry.registerItem(frame.item = new ItemHiveFrame(frame), "hiveFrame." + frame.name().toLowerCase()); + } + } + + @Override + public void postInit() { + EnumHiveFrame.init(); + GameRegistry.addRecipe(AlvearyMachine.Mutator.get(1), new Object[] { "g g", " a ", "t t", 'g', Items.gold_ingot, 'a', Mods.Forestry.block("alveary"), 't', new ItemStack(Mods.Forestry.item("thermionicTubes"), 1, 5) }); + GameRegistry.addRecipe(AlvearyMachine.Frame.get(1), new Object[] { "iii", "tat", " t ", 'i', Items.iron_ingot, 'a', Mods.Forestry.block("alveary"), 't', new ItemStack(Mods.Forestry.item("thermionicTubes"), 1, 4) }); + GameRegistry.addRecipe(AlvearyMachine.RainShield.get(1), new Object[] { " b ", "bab", "t t", 'b', Items.brick, 'a', Mods.Forestry.block("alveary"), 't', new ItemStack(Mods.Forestry.item("thermionicTubes"), 1, 4) }); + GameRegistry.addRecipe(AlvearyMachine.Lighting.get(1), new Object[] { "iii", "iai", " t ", 'i', Items.glowstone_dust, 'a', Mods.Forestry.block("alveary"), 't', new ItemStack(Mods.Forestry.item("thermionicTubes"), 1, 4) }); + GameRegistry.addRecipe(AlvearyMachine.Stimulator.get(1), new Object[] { "kik", "iai", " t ", 'i', Items.gold_nugget, 'a', Mods.Forestry.block("alveary"), 't', new ItemStack(Mods.Forestry.item("thermionicTubes"), 1, 4), 'k', new ItemStack(Mods.Forestry.item("chipsets"), 1, 2) }); + GameRegistry.addRecipe(AlvearyMachine.Hatchery.get(1), new Object[] { "i i", " a ", "iti", 'i', Blocks.glass_pane, 'a', Mods.Forestry.block("alveary"), 't', new ItemStack(Mods.Forestry.item("thermionicTubes"), 1, 5) }); + GameRegistry.addRecipe(new ShapedOreRecipe(AlvearyMachine.Transmission.get(1), new Object[] { " t ", "tat", " t ", 'a', Mods.Forestry.block("alveary"), 't', "gearTin" })); + for (final AlvearyStimulator.CircuitType type : AlvearyStimulator.CircuitType.values()) { + type.createCircuit(this.stimulatorLayout); + } + } + + @Override + public void init() { + this.stimulatorLayout = new BinnieCircuitLayout(ExtraBees.instance, "Stimulator"); + } +} diff --git a/src/main/java/binnie/extrabees/apiary/TileExtraBeeAlveary.java b/src/main/java/binnie/extrabees/apiary/TileExtraBeeAlveary.java new file mode 100644 index 00000000..bff01953 --- /dev/null +++ b/src/main/java/binnie/extrabees/apiary/TileExtraBeeAlveary.java @@ -0,0 +1,536 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.apiary; + +import forestry.api.genetics.IIndividual; +import forestry.api.multiblock.IAlvearyComponent; +import forestry.api.multiblock.IMultiblockComponent; +import forestry.api.multiblock.IMultiblockController; +import forestry.api.multiblock.IMultiblockLogicAlveary; +import forestry.api.multiblock.MultiblockManager; +import forestry.api.apiculture.IBeeGenome; +import java.util.LinkedList; +import binnie.extrabees.apiary.machine.AlvearyMachine; + +import net.minecraft.nbt.NBTTagCompound; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChunkCoordinates; +import java.util.List; + +import com.mojang.authlib.GameProfile; + +import forestry.api.apiculture.IBeeListener; +import forestry.api.apiculture.IBeeModifier; +import binnie.core.machines.TileEntityMachine; + +public class TileExtraBeeAlveary extends TileEntityMachine implements IAlvearyComponent.Active, IAlvearyComponent.BeeModifier, IAlvearyComponent.BeeListener, IBeeListener, IBeeModifier +{ + IMultiblockLogicAlveary structureLogic; + ChunkCoordinates min; + ChunkCoordinates max; + + public TileExtraBeeAlveary() { + this.structureLogic = MultiblockManager.logicFactory.createAlvearyLogic(); + } + + public TileExtraBeeAlveary(final AlvearyMachine.AlvearyPackage alvearyPackage) { + super(alvearyPackage); + this.structureLogic = MultiblockManager.logicFactory.createAlvearyLogic(); + } + + @Override + public ChunkCoordinates getCoordinates() { + return new ChunkCoordinates(xCoord, yCoord, zCoord); + } + + @Override + public GameProfile getOwner() { + return getMachine().getOwner(); + } + + public List getAlvearyBlocks() { + LinkedList tiles = new LinkedList(); + if (min != null && max != null) { + for (int x = min.posX; x <= max.posX; ++x) { + for (int z = min.posZ; z <= max.posZ; ++z) { + for (int y = min.posY; y <= max.posY; ++y) { + TileEntity tile = this.getWorldObj().getTileEntity(x, y, z); + if (tile instanceof IMultiblockComponent) { + tiles.add(tile); + } + } + } + } + } + return tiles; + } + + @Override + public void onMachineAssembled(IMultiblockController arg0, ChunkCoordinates min, ChunkCoordinates max) { + this.min = min; + this.max = max; + } + + @Override + public void onMachineBroken() { + this.min = null; + this.max = null; + + } + + @Override + public IMultiblockLogicAlveary getMultiblockLogic() { + return structureLogic; + } + + @Override + public boolean canUpdate() { + return false; + } + + @Override + public void updateClient(int arg0) { + super.updateEntity(); + + } + + @Override + public void updateServer(int arg0) { + super.updateEntity(); + + } + + @Override + public void invalidate() { + super.invalidate(); + structureLogic.invalidate(worldObj, this); + } + + @Override + public void onChunkUnload() { + super.onChunkUnload(); + structureLogic.onChunkUnload(worldObj, this); + } + + @Override + public void validate() { + structureLogic.validate(worldObj, this); + } + + @Override + public IBeeModifier getBeeModifier() { + return this.getMachine().getInterface(IBeeModifier.class); + } + + @Override + public IBeeListener getBeeListener() { + return this.getMachine().getInterface(IBeeListener.class); + } + + @Override + public float getTerritoryModifier(final IBeeGenome genome, final float currentModifier) { + return (this.getBeeModifier() == null) ? 1.0f : this.getBeeModifier().getTerritoryModifier(genome, currentModifier); + } + + @Override + public float getMutationModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return (this.getBeeModifier() == null) ? 1.0f : this.getBeeModifier().getMutationModifier(genome, mate, currentModifier); + } + + @Override + public float getLifespanModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return (this.getBeeModifier() == null) ? 1.0f : this.getBeeModifier().getLifespanModifier(genome, mate, currentModifier); + } + + @Override + public float getProductionModifier(final IBeeGenome genome, final float currentModifier) { + return (this.getBeeModifier() == null) ? 1.0f : this.getBeeModifier().getProductionModifier(genome, currentModifier); + } + + @Override + public float getFloweringModifier(final IBeeGenome genome, final float currentModifier) { + return (this.getBeeModifier() == null) ? 1.0f : this.getBeeModifier().getFloweringModifier(genome, currentModifier); + } + + @Override + public boolean isSealed() { + return this.getBeeModifier() != null && this.getBeeModifier().isSealed(); + } + + @Override + public boolean isSelfLighted() { + return this.getBeeModifier() != null && this.getBeeModifier().isSelfLighted(); + } + + @Override + public boolean isSunlightSimulated() { + return this.getBeeModifier() != null && this.getBeeModifier().isSunlightSimulated(); + } + + @Override + public boolean isHellish() { + return this.getBeeModifier() != null && this.getBeeModifier().isHellish(); + } + + @Override + public void wearOutEquipment(int amount) { + if (this.getBeeListener() != null) { + this.getBeeListener().wearOutEquipment(amount); + } + } + + @Override + public void onQueenDeath() { + if (this.getBeeListener() != null) { + this.getBeeListener().onQueenDeath(); + } + } + + @Override + public float getGeneticDecay(IBeeGenome genome, float currentModifier) { + return 1.0f; + } + + @Override + public boolean onPollenRetrieved(IIndividual arg0) { + return false; + } + + @Override + public void writeToNBT(NBTTagCompound nbtTagCompound) { + super.writeToNBT(nbtTagCompound); + NBTTagCompound tag = new NBTTagCompound(); + structureLogic.writeToNBT(tag); + nbtTagCompound.setTag("structureLogic", tag); + } + + @Override + public void readFromNBT(NBTTagCompound nbtTagCompound) { + super.readFromNBT(nbtTagCompound); + NBTTagCompound tag = nbtTagCompound.getCompoundTag("structureLogic"); + if (tag != null) { + structureLogic.readFromNBT(tag); + } + } + + // boolean init; + // //IStructureLogic structureLogic; + // private boolean isMaster; + // protected int masterX; + // protected int masterZ; + // protected int masterY; + // List tiles; + // + // @Override + // public void updateEntity() { + // super.updateEntity(); + // if (!BinnieCore.proxy.isSimulating(this.worldObj)) { + // return; + // } + // if (this.worldObj.getWorldTime() % 200L == 0L) { + // if (!this.isIntegratedIntoStructure() || this.isMaster()) { + // // this.validateStructure(); + // } + // // final IMultiblockComponent master = this.getCentralTE(); + // // if (master == null) { + // // return; + // // } + // // if (this.getBeeListener() != null) { + // // + // ((IAlvearyComponent)master).registerBeeListener(this.getBeeListener()); + // // } + // if (this.getBeeModifier() != null) { + // // + // ((IAlvearyComponent)master).registerBeeModifier(this.getBeeModifier()); + // } + // this.init = true; + // } + // } + // + // @Override + // public void readFromNBT(final NBTTagCompound nbttagcompound) { + // super.readFromNBT(nbttagcompound); + // this.isMaster = nbttagcompound.getBoolean("IsMaster"); + // this.masterX = nbttagcompound.getInteger("MasterX"); + // this.masterY = nbttagcompound.getInteger("MasterY"); + // this.masterZ = nbttagcompound.getInteger("MasterZ"); + // if (this.isMaster) { + // this.makeMaster(); + // } + // // this.structureLogic.readFromNBT(nbttagcompound); + // // this.updateAlvearyBlocks(); + // this.init = false; + // } + // + // @Override + // public void writeToNBT(final NBTTagCompound nbttagcompound) { + // super.writeToNBT(nbttagcompound); + // nbttagcompound.setBoolean("IsMaster", this.isMaster); + // nbttagcompound.setInteger("MasterX", this.masterX); + // nbttagcompound.setInteger("MasterY", this.masterY); + // nbttagcompound.setInteger("MasterZ", this.masterZ); + // //this.structureLogic.writeToNBT(nbttagcompound); + // } + // + // AlvearyMachine.AlvearyPackage getAlvearyPackage() { + // return (AlvearyMachine.AlvearyPackage)this.getMachine().getPackage(); + // } + // + // public TileExtraBeeAlveary() { + // this.init = false; + // this.masterY = -99; + // this.tiles = new ArrayList(); + // //this.structureLogic = + // Binnie.Genetics.getBeeRoot().createAlvearyStructureLogic((IAlvearyComponent)this); + // } + // + // public TileExtraBeeAlveary(final AlvearyMachine.AlvearyPackage + // alvearyPackage) { + // super(alvearyPackage); + // this.init = false; + // this.masterY = -99; + // this.tiles = new ArrayList(); + // // this.structureLogic = + // Binnie.Genetics.getBeeRoot().createAlvearyStructureLogic((IAlvearyComponent)this); + // } + // + // + // public void makeMaster() { + // } + // + // // public void onStructureReset() { + // // this.setCentralTE(null); + // // this.isMaster = false; + // // this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, + // this.zCoord); + // // this.updateAlvearyBlocks(); + // // } + // // + // // public IMultiblockComponent getCentralTE() { + // // if (this.worldObj == null || !this.isIntegratedIntoStructure()) { + // // return null; + // // } + // // if (this.isMaster()) { + // // return (IMultiblockComponent)this; + // // } + // // final TileEntity tile = this.worldObj.getTileEntity(this.masterX, + // this.masterY, this.masterZ); + // // if (!(tile instanceof IMultiblockComponent)) { + // // return null; + // // } + // // final IMultiblockComponent master = + // (IMultiblockComponent)this.worldObj.getTileEntity(this.masterX, + // this.masterY, this.masterZ); + // // if (master.isMaster()) { + // // return master; + // // } + // // return null; + // // } + // + // // public void validateStructure() { + // // this.structureLogic.validateStructure(); + // // this.updateAlvearyBlocks(); + // // } + // + // private boolean isSameTile(final TileEntity tile) { + // return tile.xCoord == this.xCoord && tile.yCoord == this.yCoord && + // tile.zCoord == this.zCoord; + // } + // + // // public void setCentralTE(final TileEntity tile) { + // // if (tile == null || tile == this || this.isSameTile(tile)) { + // // final boolean b = false; + // // this.masterZ = (b ? 1 : 0); + // // this.masterX = (b ? 1 : 0); + // // this.masterY = -99; + // // this.updateAlvearyBlocks(); + // // return; + // // } + // // this.isMaster = false; + // // this.masterX = tile.xCoord; + // // this.masterY = tile.yCoord; + // // this.masterZ = tile.zCoord; + // // this.markDirty(); + // // if (this.getBeeListener() != null) { + // // ((IAlvearyComponent)tile).registerBeeListener(this.getBeeListener()); + // // } + // // if (this.getBeeModifier() != null) { + // // ((IAlvearyComponent)tile).registerBeeModifier(this.getBeeModifier()); + // // } + // // this.updateAlvearyBlocks(); + // // } + // + // public boolean isMaster() { + // return this.isMaster; + // } + // + // protected boolean hasMaster() { + // return this.masterY >= 0; + // } + // + // public boolean isIntegratedIntoStructure() { + // return this.isMaster || this.masterY >= 0; + // } + // + // public void registerBeeModifier(final IBeeModifier modifier) { + // } + // + // public void removeBeeModifier(final IBeeModifier modifier) { + // } + // + // public void addTemperatureChange(final float change, final float + // boundaryDown, final float boundaryUp) { + // } + // + // public void addHumidityChange(final float change, final float + // boundaryDown, final float boundaryUp) { + // } + // + // public boolean hasFunction() { + // return true; + // } + // + // public IBeeModifier getBeeModifier() { + // return this.getMachine().getInterface(IBeeModifier.class); + // } + // + // public IBeeListener getBeeListener() { + // return this.getMachine().getInterface(IBeeListener.class); + // } + // + // public float getTerritoryModifier(final IBeeGenome genome, final float + // currentModifier) { + // return (this.getBeeModifier() == null) ? 1.0f : + // this.getBeeModifier().getTerritoryModifier(genome, currentModifier); + // } + // + // public float getMutationModifier(final IBeeGenome genome, final + // IBeeGenome mate, final float currentModifier) { + // return (this.getBeeModifier() == null) ? 1.0f : + // this.getBeeModifier().getMutationModifier(genome, mate, currentModifier); + // } + // + // public float getLifespanModifier(final IBeeGenome genome, final + // IBeeGenome mate, final float currentModifier) { + // return (this.getBeeModifier() == null) ? 1.0f : + // this.getBeeModifier().getLifespanModifier(genome, mate, currentModifier); + // } + // + // public float getProductionModifier(final IBeeGenome genome, final float + // currentModifier) { + // return (this.getBeeModifier() == null) ? 1.0f : + // this.getBeeModifier().getProductionModifier(genome, currentModifier); + // } + // + // public float getFloweringModifier(final IBeeGenome genome, final float + // currentModifier) { + // return (this.getBeeModifier() == null) ? 1.0f : + // this.getBeeModifier().getFloweringModifier(genome, currentModifier); + // } + // + // public boolean isSealed() { + // return this.getBeeModifier() != null && this.getBeeModifier().isSealed(); + // } + // + // public boolean isSelfLighted() { + // return this.getBeeModifier() != null && + // this.getBeeModifier().isSelfLighted(); + // } + // + // public boolean isSunlightSimulated() { + // return this.getBeeModifier() != null && + // this.getBeeModifier().isSunlightSimulated(); + // } + // + // public boolean isHellish() { + // return this.getBeeModifier() != null && + // this.getBeeModifier().isHellish(); + // } + // + // public void registerBeeListener(final IBeeListener event) { + // } + // + // public void removeBeeListener(final IBeeListener event) { + // } + // + // // public void onQueenChange(final ItemStack queen) { + // // if (this.getBeeListener() != null) { + // // this.getBeeListener().onQueenChange(queen); + // // } + // // } + // // + // public void wearOutEquipment(final int amount) { + // if (this.getBeeListener() != null) { + // this.getBeeListener().wearOutEquipment(amount); + // } + // } + // + // // public void onQueenDeath(final IBee queen) { + // // if (this.getBeeListener() != null) { + // // this.getBeeListener().onQueenDeath(queen); + // // } + // // } + // // + // // public void onPostQueenDeath(final IBee queen) { + // // if (this.getBeeListener() != null) { + // // this.getBeeListener().onPostQueenDeath(queen); + // // } + // // } + // + // public boolean onPollenRetrieved(final IBee queen, final IIndividual + // pollen, final boolean isHandled) { + // return false; + // } + // + // public boolean onEggLaid(final IBee queen) { + // return false; + // } + // + // public float getGeneticDecay(final IBeeGenome genome, final float + // currentModifier) { + // return 1.0f; + // } + // + // // public IBeeHousing getBeeHousing() { + // // return (this.getCentralTE() == null) ? null : + // ((IBeeHousing)this.getCentralTE()); + // // } + // + // // public List getAlvearyBlocks() { + // // this.updateAlvearyBlocks(); + // // return this.tiles; + // // } + // + // // private void updateAlvearyBlocks() { + // // this.tiles.clear(); + // // if (this.getCentralTE() != null) { + // // final IMultiblockComponent struct = this.getCentralTE(); + // // if (!struct.isIntegratedIntoStructure()) { + // // return; + // // } + // // final TileEntity central = (TileEntity)struct; + // // for (int x = -2; x <= 2; ++x) { + // // for (int z = -2; z <= 2; ++z) { + // // for (int y = -2; y <= 2; ++y) { + // // final TileEntity tile = this.getWorldObj().getTileEntity(this.xCoord + + // x, this.yCoord + y, this.zCoord + z); + // // if (tile != null && tile instanceof IMultiblockComponent && + // ((IMultiblockComponent)tile).getMultiblockLogic().getCentralTE() == + // struct) { + // // this.tiles.add(tile); + // // } + // // } + // // } + // // } + // // } + // // } + // + // public ISidedInventory getStructureInventory() { + // return this.getMachine().getInterface(ISidedInventory.class); + // } + // + +} diff --git a/src/main/java/binnie/extrabees/apiary/machine/AlvearyFrame.java b/src/main/java/binnie/extrabees/apiary/machine/AlvearyFrame.java new file mode 100644 index 00000000..91cfd710 --- /dev/null +++ b/src/main/java/binnie/extrabees/apiary/machine/AlvearyFrame.java @@ -0,0 +1,115 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.apiary.machine; + +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import forestry.api.apiculture.IBee; +import forestry.api.apiculture.IBeeGenome; +import forestry.api.apiculture.IBeeListener; +import forestry.api.apiculture.IBeeModifier; +import forestry.api.apiculture.IHiveFrame; +import binnie.Binnie; +import binnie.core.machines.Machine; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.core.machines.inventory.SlotValidator; +import binnie.craftgui.minecraft.IMachineInformation; +import binnie.extrabees.apiary.ComponentBeeModifier; +import binnie.extrabees.apiary.ComponentExtraBeeGUI; +import binnie.extrabees.apiary.TileExtraBeeAlveary; +import binnie.extrabees.core.ExtraBeeGUID; +import binnie.extrabees.core.ExtraBeeTexture; + +public class AlvearyFrame +{ + public static int slotFrame; + + static { + AlvearyFrame.slotFrame = 0; + } + + public static class PackageAlvearyFrame extends AlvearyMachine.AlvearyPackage implements IMachineInformation + { + public PackageAlvearyFrame() { + super("frame", ExtraBeeTexture.AlvearyFrame.getTexture(), false); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentExtraBeeGUI(machine, ExtraBeeGUID.AlvearyFrame); + final ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + inventory.addSlot(AlvearyFrame.slotFrame, "frame"); + inventory.getSlot(AlvearyFrame.slotFrame).setValidator(new SlotValidatorFrame()); + new ComponentFrameModifier(machine); + } + } + + public static class SlotValidatorFrame extends SlotValidator + { + public SlotValidatorFrame() { + super(SlotValidator.IconFrame); + } + + @Override + public boolean isValid(final ItemStack itemStack) { + return itemStack != null && itemStack.getItem() instanceof IHiveFrame; + } + + @Override + public String getTooltip() { + return "Hive Frames"; + } + } + + public static class ComponentFrameModifier extends ComponentBeeModifier implements IBeeModifier, IBeeListener + { + public ComponentFrameModifier(final Machine machine) { + super(machine); + } + + @Override + public void wearOutEquipment(final int amount) { + if (this.getHiveFrame() == null) { + return; + } + final World world = this.getMachine().getTileEntity().getWorldObj(); + final int wear = Math.round(amount * 5 * Binnie.Genetics.getBeeRoot().getBeekeepingMode(world).getWearModifier()); + this.getInventory().setInventorySlotContents(AlvearyFrame.slotFrame, this.getHiveFrame().frameUsed(((TileExtraBeeAlveary) this.getMachine().getTileEntity()).getMultiblockLogic().getController(), this.getInventory().getStackInSlot(AlvearyFrame.slotFrame), (IBee) null, wear)); + } + + public IHiveFrame getHiveFrame() { + if (this.getInventory().getStackInSlot(AlvearyFrame.slotFrame) != null) { + return (IHiveFrame) this.getInventory().getStackInSlot(AlvearyFrame.slotFrame).getItem(); + } + return null; + } + + @Override + public float getTerritoryModifier(final IBeeGenome genome, final float currentModifier) { + return (this.getHiveFrame() == null) ? 1.0f : this.getHiveFrame().getBeeModifier().getTerritoryModifier(genome, currentModifier); + } + + @Override + public float getMutationModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return (this.getHiveFrame() == null) ? 1.0f : this.getHiveFrame().getBeeModifier().getMutationModifier(genome, mate, currentModifier); + } + + @Override + public float getLifespanModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return (this.getHiveFrame() == null) ? 1.0f : this.getHiveFrame().getBeeModifier().getLifespanModifier(genome, mate, currentModifier); + } + + @Override + public float getProductionModifier(final IBeeGenome genome, final float currentModifier) { + return (this.getHiveFrame() == null) ? 1.0f : this.getHiveFrame().getBeeModifier().getProductionModifier(genome, currentModifier); + } + + @Override + public float getFloweringModifier(final IBeeGenome genome, final float currentModifier) { + return (this.getHiveFrame() == null) ? 1.0f : this.getHiveFrame().getBeeModifier().getFloweringModifier(genome, currentModifier); + } + } +} diff --git a/src/main/java/binnie/extrabees/apiary/machine/AlvearyHatchery.java b/src/main/java/binnie/extrabees/apiary/machine/AlvearyHatchery.java new file mode 100644 index 00000000..e7c4c660 --- /dev/null +++ b/src/main/java/binnie/extrabees/apiary/machine/AlvearyHatchery.java @@ -0,0 +1,97 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.apiary.machine; + +import java.util.Random; + +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; + +import forestry.api.apiculture.EnumBeeType; +import forestry.api.apiculture.IBee; +import forestry.api.apiculture.IBeeHousing; +import forestry.api.apiculture.IBeeListener; +import forestry.api.apiculture.IBeeModifier; +import forestry.api.genetics.IIndividual; +import binnie.Binnie; +import binnie.core.machines.Machine; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.core.machines.inventory.InventorySlot; +import binnie.core.machines.inventory.SlotValidator; +import binnie.core.machines.transfer.TransferRequest; +import binnie.craftgui.minecraft.IMachineInformation; +import binnie.extrabees.apiary.ComponentBeeModifier; +import binnie.extrabees.apiary.ComponentExtraBeeGUI; +import binnie.extrabees.apiary.TileExtraBeeAlveary; +import binnie.extrabees.core.ExtraBeeGUID; +import binnie.extrabees.core.ExtraBeeTexture; + +public class AlvearyHatchery +{ + public static int[] slotLarvae; + + static { + AlvearyHatchery.slotLarvae = new int[] { 0, 1, 2, 3, 4 }; + } + + public static class PackageAlvearyHatchery extends AlvearyMachine.AlvearyPackage implements IMachineInformation + { + public PackageAlvearyHatchery() { + super("hatchery", ExtraBeeTexture.AlvearyHatchery.getTexture(), false); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentExtraBeeGUI(machine, ExtraBeeGUID.AlvearyHatchery); + final ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + for (final InventorySlot slot : inventory.addSlotArray(AlvearyHatchery.slotLarvae, "hatchery")) { + slot.setValidator(new SlotValidatorLarvae()); + } + new ComponentFrameModifier(machine); + } + } + + public static class SlotValidatorLarvae extends SlotValidator + { + public SlotValidatorLarvae() { + super(SlotValidator.IconBee); + } + + @Override + public boolean isValid(final ItemStack itemStack) { + return Binnie.Genetics.getBeeRoot().isMember(itemStack) && Binnie.Genetics.getBeeRoot().getType(itemStack) == EnumBeeType.LARVAE; + } + + @Override + public String getTooltip() { + return "Larvae"; + } + } + + public static class ComponentFrameModifier extends ComponentBeeModifier implements IBeeModifier, IBeeListener + { + public ComponentFrameModifier(final Machine machine) { + super(machine); + } + + @Override + public void onUpdate() { + if (new Random().nextInt(2400) == 0) { + final TileEntity tile = this.getMachine().getTileEntity(); + if (tile instanceof TileExtraBeeAlveary) { + final IBeeHousing house = ((TileExtraBeeAlveary) tile).getMultiblockLogic().getController(); + if (house != null && !house.getErrorLogic().hasErrors()) { + final ItemStack queenStack = house.getBeeInventory().getQueen(); + final IBee queen = (queenStack == null) ? null : Binnie.Genetics.getBeeRoot().getMember(queenStack); + if (queen != null) { + final ItemStack larvae = Binnie.Genetics.getBeeRoot().getMemberStack(Binnie.Genetics.getBeeRoot().getBee(this.getMachine().getWorld(), queen.getGenome()), EnumBeeType.LARVAE.ordinal()); + new TransferRequest(larvae, this.getInventory()).transfer(true); + } + } + } + } + } + } +} diff --git a/src/main/java/binnie/extrabees/apiary/machine/AlvearyLighting.java b/src/main/java/binnie/extrabees/apiary/machine/AlvearyLighting.java new file mode 100644 index 00000000..4b55459d --- /dev/null +++ b/src/main/java/binnie/extrabees/apiary/machine/AlvearyLighting.java @@ -0,0 +1,39 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.apiary.machine; + +import forestry.api.apiculture.IBeeListener; +import forestry.api.apiculture.IBeeModifier; +import binnie.extrabees.apiary.ComponentBeeModifier; +import binnie.core.machines.Machine; +import binnie.extrabees.core.ExtraBeeTexture; +import binnie.craftgui.minecraft.IMachineInformation; + +public class AlvearyLighting +{ + public static class PackageAlvearyLighting extends AlvearyMachine.AlvearyPackage implements IMachineInformation + { + public PackageAlvearyLighting() { + super("lighting", ExtraBeeTexture.AlvearyLighting.getTexture(), false); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentLighting(machine); + } + } + + public static class ComponentLighting extends ComponentBeeModifier implements IBeeModifier, IBeeListener + { + public ComponentLighting(final Machine machine) { + super(machine); + } + + @Override + public boolean isSelfLighted() { + return true; + } + } +} diff --git a/src/main/java/binnie/extrabees/apiary/machine/AlvearyMachine.java b/src/main/java/binnie/extrabees/apiary/machine/AlvearyMachine.java new file mode 100644 index 00000000..96667db1 --- /dev/null +++ b/src/main/java/binnie/extrabees/apiary/machine/AlvearyMachine.java @@ -0,0 +1,75 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.apiary.machine; + +import binnie.core.machines.MachineRendererBlock; +import net.minecraft.client.renderer.RenderBlocks; +import binnie.extrabees.apiary.TileExtraBeeAlveary; +import net.minecraft.tileentity.TileEntity; +import binnie.core.machines.Machine; +import binnie.core.resource.BinnieResource; +import binnie.extrabees.apiary.ModuleApiary; +import net.minecraft.item.ItemStack; +import binnie.core.machines.MachinePackage; +import binnie.core.machines.IMachineType; + +public enum AlvearyMachine implements IMachineType +{ + Mutator(AlvearyMutator.PackageAlvearyMutator.class), + Frame(AlvearyFrame.PackageAlvearyFrame.class), + RainShield(AlvearyRainShield.PackageAlvearyRainShield.class), + Lighting(AlvearyLighting.PackageAlvearyLighting.class), + Stimulator(AlvearyStimulator.PackageAlvearyStimulator.class), + Hatchery(AlvearyHatchery.PackageAlvearyHatchery.class), + Transmission(AlvearyTransmission.PackageAlvearyTransmission.class); + + Class clss; + + private AlvearyMachine(final Class clss) { + this.clss = clss; + } + + @Override + public Class getPackageClass() { + return this.clss; + } + + public ItemStack get(final int size) { + return new ItemStack(ModuleApiary.blockComponent, size, this.ordinal()); + } + + @Override + public boolean isActive() { + return true; + } + + public abstract static class AlvearyPackage extends MachinePackage + { + BinnieResource machineTexture; + + public AlvearyPackage(final String id, final BinnieResource machineTexture, final boolean powered) { + super(id, powered); + this.machineTexture = machineTexture; + } + + @Override + public void createMachine(final Machine machine) { + } + + @Override + public TileEntity createTileEntity() { + return new TileExtraBeeAlveary(this); + } + + @Override + public void register() { + } + + @Override + public void renderMachine(final Machine machine, final double x, final double y, final double z, final float var8, final RenderBlocks renderer) { + MachineRendererBlock.instance.renderMachine(this.machineTexture, x, y, z, var8); + } + } +} diff --git a/src/main/java/binnie/extrabees/apiary/machine/AlvearyMutator.java b/src/main/java/binnie/extrabees/apiary/machine/AlvearyMutator.java new file mode 100644 index 00000000..39f0c235 --- /dev/null +++ b/src/main/java/binnie/extrabees/apiary/machine/AlvearyMutator.java @@ -0,0 +1,118 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.apiary.machine; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import net.minecraft.item.ItemStack; + +import forestry.api.apiculture.IBee; +import forestry.api.apiculture.IBeeGenome; +import forestry.api.apiculture.IBeeListener; +import forestry.api.apiculture.IBeeModifier; +import binnie.core.machines.Machine; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.core.machines.inventory.SlotValidator; +import binnie.core.machines.inventory.ValidatorIcon; +import binnie.craftgui.minecraft.IMachineInformation; +import binnie.extrabees.ExtraBees; +import binnie.extrabees.apiary.ComponentBeeModifier; +import binnie.extrabees.apiary.ComponentExtraBeeGUI; +import binnie.extrabees.core.ExtraBeeGUID; +import binnie.extrabees.core.ExtraBeeTexture; + +public class AlvearyMutator +{ + public static int slotMutator; + static Map mutations; + + public static boolean isMutationItem(final ItemStack item) { + return getMutationMult(item) > 0.0f; + } + + public static float getMutationMult(final ItemStack item) { + if (item == null) { + return 1.0f; + } + for (final ItemStack comp : AlvearyMutator.mutations.keySet()) { + if (ItemStack.areItemStackTagsEqual(item, comp) && item.isItemEqual(comp)) { + return AlvearyMutator.mutations.get(comp); + } + } + return 1.0f; + } + + public static void addMutationItem(final ItemStack item, final float chance) { + if (item == null) { + return; + } + AlvearyMutator.mutations.put(item, chance); + } + + public static Collection getMutagens() { + return AlvearyMutator.mutations.keySet(); + } + + static { + AlvearyMutator.slotMutator = 0; + AlvearyMutator.mutations = new HashMap(); + } + + public static class PackageAlvearyMutator extends AlvearyMachine.AlvearyPackage implements IMachineInformation + { + public PackageAlvearyMutator() { + super("mutator", ExtraBeeTexture.AlvearyMutator.getTexture(), false); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentExtraBeeGUI(machine, ExtraBeeGUID.AlvearyMutator); + final ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + inventory.addSlot(AlvearyMutator.slotMutator, "mutator"); + inventory.getSlot(AlvearyMutator.slotMutator).setValidator(new SlotValidatorMutator()); + new ComponentMutatorModifier(machine); + } + } + + public static class SlotValidatorMutator extends SlotValidator + { + public SlotValidatorMutator() { + super(new ValidatorIcon(ExtraBees.instance, "validator/mutator.0", "validator/mutator.1")); + } + + @Override + public boolean isValid(final ItemStack itemStack) { + return AlvearyMutator.isMutationItem(itemStack); + } + + @Override + public String getTooltip() { + return "Mutagenic Agents"; + } + } + + public static class ComponentMutatorModifier extends ComponentBeeModifier implements IBeeModifier, IBeeListener + { + public ComponentMutatorModifier(final Machine machine) { + super(machine); + } + + @Override + public float getMutationModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + if (this.getUtil().isSlotEmpty(AlvearyMutator.slotMutator)) { + return 1.0f; + } + final float mult = AlvearyMutator.getMutationMult(this.getUtil().getStack(AlvearyMutator.slotMutator)); + return Math.min(mult, 15.0f / currentModifier); + } + + @Override + public void onPostQueenDeath(final IBee queen) { + this.getUtil().decreaseStack(AlvearyMutator.slotMutator, 1); + } + } +} diff --git a/src/main/java/binnie/extrabees/apiary/machine/AlvearyRainShield.java b/src/main/java/binnie/extrabees/apiary/machine/AlvearyRainShield.java new file mode 100644 index 00000000..251b2ceb --- /dev/null +++ b/src/main/java/binnie/extrabees/apiary/machine/AlvearyRainShield.java @@ -0,0 +1,39 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.apiary.machine; + +import forestry.api.apiculture.IBeeListener; +import forestry.api.apiculture.IBeeModifier; +import binnie.extrabees.apiary.ComponentBeeModifier; +import binnie.core.machines.Machine; +import binnie.extrabees.core.ExtraBeeTexture; +import binnie.craftgui.minecraft.IMachineInformation; + +public class AlvearyRainShield +{ + public static class PackageAlvearyRainShield extends AlvearyMachine.AlvearyPackage implements IMachineInformation + { + public PackageAlvearyRainShield() { + super("rainShield", ExtraBeeTexture.AlvearyRainShield.getTexture(), false); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentRainShield(machine); + } + } + + public static class ComponentRainShield extends ComponentBeeModifier implements IBeeModifier, IBeeListener + { + public ComponentRainShield(final Machine machine) { + super(machine); + } + + @Override + public boolean isSealed() { + return true; + } + } +} diff --git a/src/main/java/binnie/extrabees/apiary/machine/AlvearyStimulator.java b/src/main/java/binnie/extrabees/apiary/machine/AlvearyStimulator.java new file mode 100644 index 00000000..30a91042 --- /dev/null +++ b/src/main/java/binnie/extrabees/apiary/machine/AlvearyStimulator.java @@ -0,0 +1,421 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.apiary.machine; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.item.ItemStack; + +import forestry.api.apiculture.IBeeGenome; +import forestry.api.apiculture.IBeeListener; +import forestry.api.apiculture.IBeeModifier; +import forestry.api.circuits.ChipsetManager; +import forestry.api.circuits.ICircuit; +import forestry.api.circuits.ICircuitBoard; +import forestry.api.circuits.ICircuitLayout; +import binnie.core.Mods; +import binnie.core.circuits.BinnieCircuit; +import binnie.core.genetics.BeeModifierLogic; +import binnie.core.genetics.EnumBeeBooleanModifier; +import binnie.core.genetics.EnumBeeModifier; +import binnie.core.machines.Machine; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.core.machines.inventory.SlotValidator; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.craftgui.minecraft.IMachineInformation; +import binnie.extrabees.apiary.ComponentBeeModifier; +import binnie.extrabees.apiary.ComponentExtraBeeGUI; +import binnie.extrabees.core.ExtraBeeGUID; +import binnie.extrabees.core.ExtraBeeTexture; + +public class AlvearyStimulator +{ + public static int slotCircuit; + + static { + AlvearyStimulator.slotCircuit = 0; + } + + public static class PackageAlvearyStimulator extends AlvearyMachine.AlvearyPackage implements IMachineInformation + { + public PackageAlvearyStimulator() { + super("stimulator", ExtraBeeTexture.AlvearyStimulator.getTexture(), true); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentExtraBeeGUI(machine, ExtraBeeGUID.AlvearyStimulator); + final ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + inventory.addSlot(AlvearyStimulator.slotCircuit, "circuit"); + inventory.getSlot(AlvearyStimulator.slotCircuit).setValidator(new SlotValidatorCircuit()); + final ComponentPowerReceptor power = new ComponentPowerReceptor(machine); + new ComponentStimulatorModifier(machine); + } + } + + public static class SlotValidatorCircuit extends SlotValidator + { + public SlotValidatorCircuit() { + super(SlotValidator.IconCircuit); + } + + @Override + public boolean isValid(final ItemStack itemStack) { + return itemStack != null && ChipsetManager.circuitRegistry.isChipset(itemStack); + } + + @Override + public String getTooltip() { + return "Forestry Circuits"; + } + } + + public static class ComponentStimulatorModifier extends ComponentBeeModifier implements IBeeModifier, IBeeListener + { + float powerUsage; + boolean powered; + StimulatorCircuit[] modifiers; + + public ComponentStimulatorModifier(final Machine machine) { + super(machine); + this.powerUsage = 0.0f; + this.powered = false; + this.modifiers = new StimulatorCircuit[0]; + } + + @Override + public void onUpdate() { + super.onUpdate(); + this.modifiers = this.getCircuits(); + this.powerUsage = 0.0f; + for (final StimulatorCircuit beeMod : this.modifiers) { + this.powerUsage += beeMod.getPowerUsage(); + } + this.powered = this.getUtil().hasEnergyMJ(this.powerUsage); + } + + public ICircuitBoard getHiveFrame() { + if (!this.getUtil().isSlotEmpty(AlvearyStimulator.slotCircuit)) { + return ChipsetManager.circuitRegistry.getCircuitboard(this.getUtil().getStack(AlvearyStimulator.slotCircuit)); + } + return null; + } + + public StimulatorCircuit[] getCircuits() { + final ICircuitBoard board = this.getHiveFrame(); + if (board == null) { + return new StimulatorCircuit[0]; + } + final ICircuit[] circuits = board.getCircuits(); + final List mod = new ArrayList(); + for (final ICircuit circuit : circuits) { + if (circuit instanceof StimulatorCircuit) { + mod.add((IBeeModifier) circuit); + } + } + return mod.toArray(new StimulatorCircuit[0]); + } + + @Override + public float getTerritoryModifier(final IBeeGenome genome, final float currentModifier) { + float mod = 1.0f; + if (!this.powered) { + return mod; + } + for (final IBeeModifier beeMod : this.modifiers) { + mod *= beeMod.getTerritoryModifier(genome, mod); + } + return mod; + } + + @Override + public float getMutationModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + float mod = 1.0f; + if (!this.powered) { + return mod; + } + for (final IBeeModifier beeMod : this.modifiers) { + mod *= beeMod.getMutationModifier(genome, mate, mod); + } + return mod; + } + + @Override + public float getLifespanModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + float mod = 1.0f; + if (!this.powered) { + return mod; + } + for (final IBeeModifier beeMod : this.modifiers) { + mod *= beeMod.getLifespanModifier(genome, mate, mod); + } + return mod; + } + + @Override + public float getProductionModifier(final IBeeGenome genome, final float currentModifier) { + float mod = 1.0f; + if (!this.powered) { + return mod; + } + for (final IBeeModifier beeMod : this.modifiers) { + mod *= beeMod.getProductionModifier(genome, mod); + } + return mod; + } + + @Override + public float getFloweringModifier(final IBeeGenome genome, final float currentModifier) { + float mod = 1.0f; + if (!this.powered) { + return mod; + } + for (final IBeeModifier beeMod : this.modifiers) { + mod *= beeMod.getFloweringModifier(genome, mod); + } + return mod; + } + + @Override + public float getGeneticDecay(final IBeeGenome genome, final float currentModifier) { + float mod = 1.0f; + if (!this.powered) { + return mod; + } + for (final IBeeModifier beeMod : this.modifiers) { + mod *= beeMod.getGeneticDecay(genome, mod); + } + return mod; + } + + @Override + public boolean isSealed() { + if (!this.powered) { + return false; + } + for (final IBeeModifier beeMod : this.modifiers) { + if (beeMod.isSealed()) { + return true; + } + } + return false; + } + + @Override + public boolean isSelfLighted() { + if (!this.powered) { + return false; + } + for (final IBeeModifier beeMod : this.modifiers) { + if (beeMod.isSelfLighted()) { + return true; + } + } + return false; + } + + @Override + public boolean isSunlightSimulated() { + if (!this.powered) { + return false; + } + for (final IBeeModifier beeMod : this.modifiers) { + if (beeMod.isSunlightSimulated()) { + return true; + } + } + return false; + } + + @Override + public boolean isHellish() { + if (!this.powered) { + return false; + } + for (final IBeeModifier beeMod : this.modifiers) { + if (beeMod.isHellish()) { + return true; + } + } + return false; + } + + @Override + public void wearOutEquipment(final int amount) { + this.getUtil().useEnergyMJ(this.powerUsage); + } + } + + public static class StimulatorCircuit extends BinnieCircuit implements IBeeModifier + { + CircuitType type; + + public StimulatorCircuit(final CircuitType type, final ICircuitLayout layout) { + super("stimulator." + type.toString().toLowerCase(), 4, layout, Mods.Forestry.item("thermionicTubes"), type.recipe); + this.type = type; + } + + public int getPowerUsage() { + return this.type.power; + } + + @Override + public float getTerritoryModifier(final IBeeGenome genome, final float currentModifier) { + return this.type.getTerritoryModifier(genome, currentModifier); + } + + @Override + public float getMutationModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return this.type.getMutationModifier(genome, mate, currentModifier); + } + + @Override + public float getLifespanModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return this.type.getLifespanModifier(genome, mate, currentModifier); + } + + @Override + public float getProductionModifier(final IBeeGenome genome, final float currentModifier) { + return this.type.getProductionModifier(genome, currentModifier); + } + + @Override + public float getFloweringModifier(final IBeeGenome genome, final float currentModifier) { + return this.type.getFloweringModifier(genome, currentModifier); + } + + @Override + public boolean isSealed() { + return this.type.isSealed(); + } + + @Override + public boolean isSelfLighted() { + return this.type.isSelfLighted(); + } + + @Override + public boolean isSunlightSimulated() { + return this.type.isSunlightSimulated(); + } + + @Override + public boolean isHellish() { + return this.type.isHellish(); + } + + @Override + public float getGeneticDecay(final IBeeGenome genome, final float currentModifier) { + return this.type.getGeneticDecay(genome, currentModifier); + } + } + + public enum CircuitType implements IBeeModifier + { + LowVoltage(3, 10), + HighVoltage(5, 20), + Plant(10, 10), + Death(6, 10), + Life(11, 10), + Nether(7, 15), + Mutation(4, 15), + Inhibitor(1, 10), + Territory(2, 10); + + public int recipe; + public int power; + BeeModifierLogic logic; + + private CircuitType(final int recipe, final int power) { + this.logic = new BeeModifierLogic(); + this.recipe = recipe; + this.power = power; + } + + public void createCircuit(final ICircuitLayout layout) { + final StimulatorCircuit circuit = new StimulatorCircuit(this, layout); + for (final EnumBeeModifier modifier : EnumBeeModifier.values()) { + final float mod = this.logic.getModifier(modifier, 1.0f); + if (mod != 1.0f) { + if (mod > 1.0f) { + final int increase = (int) ((mod - 1.0f) * 100.0f); + circuit.addTooltipString("Increases " + modifier.getName() + " by " + increase + "%"); + } + else { + final int decrease = (int) ((1.0f - mod) * 100.0f); + circuit.addTooltipString("Decreases " + modifier.getName() + " by " + decrease + "%"); + } + } + } + } + + @Override + public float getTerritoryModifier(final IBeeGenome genome, final float currentModifier) { + return this.logic.getModifier(EnumBeeModifier.Territory, currentModifier); + } + + @Override + public float getMutationModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return this.logic.getModifier(EnumBeeModifier.Mutation, currentModifier); + } + + @Override + public float getLifespanModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return this.logic.getModifier(EnumBeeModifier.Lifespan, currentModifier); + } + + @Override + public float getProductionModifier(final IBeeGenome genome, final float currentModifier) { + return this.logic.getModifier(EnumBeeModifier.Production, currentModifier); + } + + @Override + public float getFloweringModifier(final IBeeGenome genome, final float currentModifier) { + return this.logic.getModifier(EnumBeeModifier.Flowering, currentModifier); + } + + @Override + public float getGeneticDecay(final IBeeGenome genome, final float currentModifier) { + return this.logic.getModifier(EnumBeeModifier.GeneticDecay, currentModifier); + } + + @Override + public boolean isSealed() { + return this.logic.getModifier(EnumBeeBooleanModifier.Sealed); + } + + @Override + public boolean isSelfLighted() { + return this.logic.getModifier(EnumBeeBooleanModifier.SelfLighted); + } + + @Override + public boolean isSunlightSimulated() { + return this.logic.getModifier(EnumBeeBooleanModifier.SunlightStimulated); + } + + @Override + public boolean isHellish() { + return this.logic.getModifier(EnumBeeBooleanModifier.Hellish); + } + + static { + CircuitType.LowVoltage.logic.setModifier(EnumBeeModifier.Production, 1.5f, 5.0f); + CircuitType.HighVoltage.logic.setModifier(EnumBeeModifier.Production, 2.5f, 10.0f); + CircuitType.Plant.logic.setModifier(EnumBeeModifier.Flowering, 1.5f, 5.0f); + CircuitType.Death.logic.setModifier(EnumBeeModifier.Lifespan, 0.8f, 0.2f); + CircuitType.Life.logic.setModifier(EnumBeeModifier.Lifespan, 1.5f, 5.0f); + CircuitType.Nether.logic.setModifier(EnumBeeBooleanModifier.Hellish); + CircuitType.Mutation.logic.setModifier(EnumBeeModifier.Mutation, 1.5f, 5.0f); + CircuitType.Inhibitor.logic.setModifier(EnumBeeModifier.Territory, 0.4f, 0.1f); + CircuitType.Inhibitor.logic.setModifier(EnumBeeModifier.Production, 0.9f, 0.5f); + CircuitType.Territory.logic.setModifier(EnumBeeModifier.Territory, 1.5f, 5.0f); + for (final CircuitType type : values()) { + type.logic.setModifier(EnumBeeModifier.GeneticDecay, 1.5f, 10.0f); + } + } + } +} diff --git a/src/main/java/binnie/extrabees/apiary/machine/AlvearyTransmission.java b/src/main/java/binnie/extrabees/apiary/machine/AlvearyTransmission.java new file mode 100644 index 00000000..5760526a --- /dev/null +++ b/src/main/java/binnie/extrabees/apiary/machine/AlvearyTransmission.java @@ -0,0 +1,81 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.apiary.machine; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.tileentity.TileEntity; + +import net.minecraftforge.common.util.ForgeDirection; + +import cofh.api.energy.IEnergyHandler; + +import forestry.api.apiculture.IBeeListener; +import forestry.api.apiculture.IBeeModifier; +import binnie.core.machines.Machine; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.craftgui.minecraft.IMachineInformation; +import binnie.extrabees.apiary.ComponentBeeModifier; +import binnie.extrabees.apiary.TileExtraBeeAlveary; +import binnie.extrabees.core.ExtraBeeTexture; + +public class AlvearyTransmission +{ + public static class PackageAlvearyTransmission extends AlvearyMachine.AlvearyPackage implements IMachineInformation + { + public PackageAlvearyTransmission() { + super("transmission", ExtraBeeTexture.AlvearyTransmission.getTexture(), false); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentPowerReceptor(machine, 1000); + new ComponentTransmission(machine); + } + } + + public static class ComponentTransmission extends ComponentBeeModifier implements IBeeModifier, IBeeListener + { + public ComponentTransmission(final Machine machine) { + super(machine); + } + + @Override + public void onUpdate() { + super.onUpdate(); + int energy = this.getUtil().getPoweredMachine().getEnergyStored(ForgeDirection.NORTH); + if (energy == 0) { + return; + } + final TileExtraBeeAlveary tile = (TileExtraBeeAlveary) this.getMachine().getTileEntity(); + final List handlers = new ArrayList(); + for (final TileEntity alvearyTile : tile.getAlvearyBlocks()) { + if (alvearyTile instanceof IEnergyHandler && alvearyTile != tile) { + handlers.add((IEnergyHandler) alvearyTile); + } + } + if (handlers.isEmpty()) { + return; + } + final int maxOutput = 500; + int output = energy / handlers.size(); + if (output > maxOutput) { + output = maxOutput; + } + if (output < 1) { + output = 1; + } + for (final IEnergyHandler handler : handlers) { + final int recieved = handler.receiveEnergy(ForgeDirection.NORTH, output, false); + this.getUtil().getPoweredMachine().receiveEnergy(ForgeDirection.NORTH, -recieved, false); + energy = this.getUtil().getPoweredMachine().getEnergyStored(ForgeDirection.NORTH); + if (energy <= 0) { + return; + } + } + } + } +} diff --git a/src/main/java/binnie/extrabees/config/ConfigurationMachines.java b/src/main/java/binnie/extrabees/config/ConfigurationMachines.java new file mode 100644 index 00000000..0d0c7958 --- /dev/null +++ b/src/main/java/binnie/extrabees/config/ConfigurationMachines.java @@ -0,0 +1,26 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.config; + +import binnie.core.mod.config.PropDouble; +import binnie.core.mod.config.PropPercentage; +import binnie.core.mod.config.ConfigProperty; +import binnie.core.mod.config.ConfigFile; + +@ConfigFile(filename = "/config/forestry/extrabees/machines.conf") +public class ConfigurationMachines +{ + @ConfigProperty(key = "isolatorConsumptionChance", comment = { "Percentage chance of Isolator consuming bee, in x%." }) + @PropPercentage + public static int isolatorConsumptionChance; + @ConfigProperty(key = "geneticErrorModifier", comment = { "Modifier that changes how severe splicer/inoculator erros are.", "0 would result in no errors, even for awful serums.", "2.0 would result in twice as severe errors" }) + @PropDouble + public static double geneticErrorModifier; + + static { + ConfigurationMachines.isolatorConsumptionChance = 30; + ConfigurationMachines.geneticErrorModifier = 1.0; + } +} diff --git a/src/main/java/binnie/extrabees/config/ConfigurationMain.java b/src/main/java/binnie/extrabees/config/ConfigurationMain.java new file mode 100644 index 00000000..9175be55 --- /dev/null +++ b/src/main/java/binnie/extrabees/config/ConfigurationMain.java @@ -0,0 +1,38 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.config; + +import binnie.core.mod.config.PropInteger; +import binnie.core.mod.config.PropBoolean; +import binnie.core.mod.config.ConfigProperty; +import binnie.core.mod.config.ConfigFile; + +@ConfigFile(filename = "/config/forestry/extrabees/main.conf") +public class ConfigurationMain +{ + @ConfigProperty(key = "canQuarryMineHives") + @PropBoolean + public static boolean canQuarryMineHives; + @ConfigProperty(key = "waterHiveRate") + @PropInteger + public static int waterHiveRate; + @ConfigProperty(key = "rockHiveRate") + @PropInteger + public static int rockHiveRate; + @ConfigProperty(key = "netherHiveRate") + @PropInteger + public static int netherHiveRate; + @ConfigProperty(key = "marbleHiveRate") + @PropInteger + public static int marbleHiveRate; + + static { + ConfigurationMain.canQuarryMineHives = true; + ConfigurationMain.waterHiveRate = 1; + ConfigurationMain.rockHiveRate = 2; + ConfigurationMain.netherHiveRate = 2; + ConfigurationMain.marbleHiveRate = 2; + } +} diff --git a/src/main/java/binnie/extrabees/core/ExtraBeeGUID.java b/src/main/java/binnie/extrabees/core/ExtraBeeGUID.java new file mode 100644 index 00000000..1d128ba5 --- /dev/null +++ b/src/main/java/binnie/extrabees/core/ExtraBeeGUID.java @@ -0,0 +1,63 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.core; + +import net.minecraft.tileentity.TileEntity; +import binnie.extrabees.gui.WindowAlvearyHatchery; +import binnie.extrabees.gui.WindowAlvearyStimulator; +import binnie.extrabees.gui.WindowAlvearyFrame; +import binnie.extrabees.gui.WindowAlvearyMutator; +import binnie.extrabees.gui.database.WindowApiaristDatabase; +import net.minecraft.inventory.IInventory; +import binnie.craftgui.minecraft.Window; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.world.World; +import net.minecraft.entity.player.EntityPlayer; +import binnie.core.gui.IBinnieGUID; + +public enum ExtraBeeGUID implements IBinnieGUID +{ + Database, + DatabaseNEI, + AlvearyMutator, + AlvearyFrame, + AlvearyStimulator, + PunnettSquare, + AlvearyHatchery; + + @Override + public Window getWindow(final EntityPlayer player, final World world, final int x, final int y, final int z, final Side side) { + Window window = null; + final TileEntity tileEntity = world.getTileEntity(x, y, z); + IInventory object = null; + if (tileEntity instanceof IInventory) { + object = (IInventory) tileEntity; + } + switch (this) { + case Database: + case DatabaseNEI: { + window = WindowApiaristDatabase.create(player, side, this != ExtraBeeGUID.Database); + break; + } + case AlvearyMutator: { + window = WindowAlvearyMutator.create(player, object, side); + break; + } + case AlvearyFrame: { + window = WindowAlvearyFrame.create(player, object, side); + break; + } + case AlvearyStimulator: { + window = WindowAlvearyStimulator.create(player, object, side); + break; + } + case AlvearyHatchery: { + window = WindowAlvearyHatchery.create(player, object, side); + break; + } + } + return window; + } +} diff --git a/src/main/java/binnie/extrabees/core/ExtraBeeItems.java b/src/main/java/binnie/extrabees/core/ExtraBeeItems.java new file mode 100644 index 00000000..075fc655 --- /dev/null +++ b/src/main/java/binnie/extrabees/core/ExtraBeeItems.java @@ -0,0 +1,189 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.core; + +import java.util.List; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.extrabees.ExtraBees; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.core.Mods; +import binnie.Binnie; +import forestry.api.recipes.RecipeManagers; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.item.ItemStack; +import net.minecraft.init.Items; +import net.minecraftforge.oredict.OreDictionary; +import net.minecraft.util.IIcon; +import binnie.core.item.IItemMisc; + +public enum ExtraBeeItems implements IItemMisc +{ + ScentedGear("Scented Gear", "scentedGear"), + DiamondShard("Diamond Fragment", "diamondShard"), + EmeraldShard("Emerald Fragment", "emeraldShard"), + RubyShard("Ruby Fragment", "rubyShard"), + SapphireShard("Sapphire Fragment", "sapphireShard"), + LapisShard("Lapis Fragment", "lapisShard"), + IronDust("Iron Grains", "ironDust"), + GoldDust("Gold Grains", "goldDust"), + SilverDust("Silver Grains", "silverDust"), + PlatinumDust("Platinum Grains", "platinumDust"), + CopperDust("Copper Grains", "copperDust"), + TinDust("Tin Grains", "tinDust"), + NickelDust("Nickel Grains", "nickelDust"), + LeadDust("Lead Grains", "leadDust"), + ZincDust("Zinc Grains", "zincDust"), + TitaniumDust("Titanium Grains", "titaniumDust"), + TungstenDust("Tungsten Grains", "tungstenDust"), + UraniumDust("Radioactive Fragments", "radioactiveDust"), + CoalDust("Coal Grains", "coalDust"), + RedDye("Red Dye", "dyeRed"), + YellowDye("Yellow Dye", "dyeYellow"), + BlueDye("Blue Dye", "dyeBlue"), + GreenDye("Green Dye", "dyeGreen"), + WhiteDye("White Dye", "dyeWhite"), + BlackDye("Black Dye", "dyeBlack"), + BrownDye("Brown Dye", "dyeBrown"), + ClayDust("Clay Dust", "clayDust"), + YelloriumDust("Yellorium Grains", "yelloriumDust"), + BlutoniumDust("Blutonium Grains", "blutoniumDust"), + CyaniteDust("Cyanite Grains", "cyaniteDust"); + + String name; + String iconPath; + IIcon icon; + String metalString; + String gemString; + + public static void init() { + OreDictionary.registerOre("dyeRed", ExtraBeeItems.RedDye.get(1)); + OreDictionary.registerOre("dyeYellow", ExtraBeeItems.YellowDye.get(1)); + OreDictionary.registerOre("dyeBlue", ExtraBeeItems.BlueDye.get(1)); + OreDictionary.registerOre("dyeGreen", ExtraBeeItems.GreenDye.get(1)); + OreDictionary.registerOre("dyeBlack", ExtraBeeItems.BlackDye.get(1)); + OreDictionary.registerOre("dyeWhite", ExtraBeeItems.WhiteDye.get(1)); + OreDictionary.registerOre("dyeBrown", ExtraBeeItems.BrownDye.get(1)); + } + + public static void postInit() { + final ItemStack lapisShard = ExtraBeeItems.LapisShard.get(1); + GameRegistry.addShapelessRecipe(new ItemStack(Items.dye, 1, 4), new Object[] { lapisShard, lapisShard, lapisShard, lapisShard }); + for (final ExtraBeeItems item : values()) { + if (item.metalString != null) { + ItemStack dust = null; + ItemStack ingot = null; + if (!OreDictionary.getOres("ingot" + item.metalString).isEmpty()) { + ingot = OreDictionary.getOres("ingot" + item.metalString).get(0).copy(); + } + if (!OreDictionary.getOres("dust" + item.metalString).isEmpty()) { + dust = OreDictionary.getOres("dust" + item.metalString).get(0).copy(); + } + final ItemStack input = item.get(1); + if (dust != null) { + GameRegistry.addShapelessRecipe(dust, new Object[] { input, input, input, input }); + } + else if (ingot != null) { + GameRegistry.addShapelessRecipe(ingot, new Object[] { input, input, input, input, input, input, input, input, input }); + } + else if (item == ExtraBeeItems.CoalDust) { + GameRegistry.addShapelessRecipe(new ItemStack(Items.coal), new Object[] { input, input, input, input }); + } + } + else if (item.gemString != null) { + ItemStack gem = null; + if (!OreDictionary.getOres("gem" + item.gemString).isEmpty()) { + gem = OreDictionary.getOres("gem" + item.gemString).get(0); + } + final ItemStack input2 = item.get(1); + if (gem != null) { + GameRegistry.addShapelessRecipe(gem.copy(), new Object[] { input2, input2, input2, input2, input2, input2, input2, input2, input2 }); + } + } + } + Item woodGear = null; + try { + woodGear = (Item) Class.forName("buildcraft.BuildCraftCore").getField("woodenGearItem").get(null); + } catch (Exception ex) { + } + ItemStack gear = new ItemStack(Blocks.planks, 1); + if (woodGear != null) { + gear = new ItemStack(woodGear, 1); + } + RecipeManagers.carpenterManager.addRecipe(100, Binnie.Liquid.getLiquidStack("for.honey", 500), (ItemStack) null, ExtraBeeItems.ScentedGear.get(1), new Object[] { " j ", "bgb", " p ", 'j', Mods.Forestry.item("royalJelly"), 'b', Mods.Forestry.item("beeswax"), 'p', Mods.Forestry.item("pollen"), 'g', gear }); + } + + private ExtraBeeItems(final String name, final String iconPath) { + this.metalString = null; + this.gemString = null; + this.name = name; + this.iconPath = iconPath; + } + + private void setGem(final String string) { + this.gemString = string; + } + + private void setMetal(final String string) { + this.metalString = string; + } + + @Override + public boolean isActive() { + if (this.metalString != null) { + return !OreDictionary.getOres("ingot" + this.metalString).isEmpty() || !OreDictionary.getOres("dust" + this.metalString).isEmpty() || this == ExtraBeeItems.CoalDust; + } + return this.gemString == null || !OreDictionary.getOres("gem" + this.gemString).isEmpty(); + } + + @Override + public IIcon getIcon(final ItemStack stack) { + return this.icon; + } + + @SideOnly(Side.CLIENT) + @Override + public void registerIcons(final IIconRegister register) { + this.icon = ExtraBees.proxy.getIcon(register, "misc/" + this.iconPath); + } + + @Override + public void addInformation(final List par3List) { + } + + @Override + public String getName(final ItemStack stack) { + return this.name; + } + + @Override + public ItemStack get(final int i) { + return new ItemStack(ExtraBees.itemMisc, i, this.ordinal()); + } + + static { + ExtraBeeItems.TinDust.setMetal("Tin"); + ExtraBeeItems.ZincDust.setMetal("Zinc"); + ExtraBeeItems.CopperDust.setMetal("Copper"); + ExtraBeeItems.IronDust.setMetal("Iron"); + ExtraBeeItems.NickelDust.setMetal("Nickel"); + ExtraBeeItems.LeadDust.setMetal("Lead"); + ExtraBeeItems.SilverDust.setMetal("Silver"); + ExtraBeeItems.GoldDust.setMetal("Gold"); + ExtraBeeItems.PlatinumDust.setMetal("Platinum"); + ExtraBeeItems.TungstenDust.setMetal("Tungsten"); + ExtraBeeItems.TitaniumDust.setMetal("Titanium"); + ExtraBeeItems.CoalDust.setMetal("Coal"); + ExtraBeeItems.YelloriumDust.setMetal("Yellorium"); + ExtraBeeItems.BlutoniumDust.setMetal("Blutonium"); + ExtraBeeItems.CyaniteDust.setMetal("Cyanite"); + ExtraBeeItems.DiamondShard.setGem("Diamond"); + ExtraBeeItems.EmeraldShard.setGem("Emerald"); + ExtraBeeItems.RubyShard.setGem("Ruby"); + ExtraBeeItems.SapphireShard.setGem("Sapphire"); + } +} diff --git a/src/main/java/binnie/extrabees/core/ExtraBeeTexture.java b/src/main/java/binnie/extrabees/core/ExtraBeeTexture.java new file mode 100644 index 00000000..2c79ba96 --- /dev/null +++ b/src/main/java/binnie/extrabees/core/ExtraBeeTexture.java @@ -0,0 +1,40 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.core; + +import binnie.extrabees.ExtraBees; +import binnie.Binnie; +import binnie.core.resource.BinnieResource; +import binnie.core.resource.ResourceType; +import binnie.core.resource.IBinnieTexture; + +public enum ExtraBeeTexture implements IBinnieTexture +{ + AlvearyMutator(ResourceType.Tile, "alveary/AlvearyMutator"), + AlvearyNovaBlock(ResourceType.Tile, "alveary/AlvearyNovaBlock"), + AlvearyFrame(ResourceType.Tile, "alveary/AlvearyFrame"), + AlvearyLighting(ResourceType.Tile, "alveary/AlvearyLighting"), + AlvearyRainShield(ResourceType.Tile, "alveary/AlvearyRainShield"), + AlvearyStimulator(ResourceType.Tile, "alveary/AlvearyStimulator"), + AlvearyHatchery(ResourceType.Tile, "alveary/AlvearyHatchery"), + FX(ResourceType.FX, "fx"), + GUIPunnett(ResourceType.GUI, "punnett"), + GUIProgress(ResourceType.GUI, "processes"), + GUIProgress2(ResourceType.GUI, "processes2"), + AlvearyTransmission(ResourceType.Tile, "alveary/AlvearyTransmission"); + + String texture; + ResourceType type; + + private ExtraBeeTexture(final ResourceType base, final String texture) { + this.texture = texture; + this.type = base; + } + + @Override + public BinnieResource getTexture() { + return Binnie.Resource.getPNG(ExtraBees.instance, this.type, this.texture); + } +} diff --git a/src/main/java/binnie/extrabees/core/ModuleCore.java b/src/main/java/binnie/extrabees/core/ModuleCore.java new file mode 100644 index 00000000..b3700b98 --- /dev/null +++ b/src/main/java/binnie/extrabees/core/ModuleCore.java @@ -0,0 +1,28 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.core; + +import binnie.extrabees.ExtraBees; +import forestry.api.core.Tabs; +import binnie.Binnie; +import binnie.core.IInitializable; + +public class ModuleCore implements IInitializable +{ + @Override + public void preInit() { + ExtraBees.itemMisc = Binnie.Item.registerMiscItems(ExtraBeeItems.values(), Tabs.tabApiculture); + } + + @Override + public void init() { + ExtraBeeItems.init(); + } + + @Override + public void postInit() { + ExtraBeeItems.postInit(); + } +} diff --git a/src/main/java/binnie/extrabees/genetics/ExtraBeeMutation.java b/src/main/java/binnie/extrabees/genetics/ExtraBeeMutation.java new file mode 100644 index 00000000..01eabdfb --- /dev/null +++ b/src/main/java/binnie/extrabees/genetics/ExtraBeeMutation.java @@ -0,0 +1,351 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.genetics; + +import forestry.api.genetics.IAlleleSpecies; +import forestry.api.apiculture.IBeeRoot; + +import java.util.ArrayList; +import java.util.Collection; + +import net.minecraft.world.biome.BiomeGenBase; +import net.minecraft.world.World; + +import forestry.api.genetics.IGenome; +import forestry.api.apiculture.BeeManager; +import forestry.api.apiculture.IBeeGenome; +import forestry.api.apiculture.IBeeHousing; + +import forestry.api.genetics.IMutation; +import binnie.Binnie; + +import net.minecraftforge.common.BiomeDictionary; + +import binnie.core.genetics.ForestryAllele; +import forestry.api.genetics.IAllele; +import forestry.api.apiculture.IAlleleBeeSpecies; + +import java.util.List; + +import forestry.api.apiculture.IBeeMutation; + +public class ExtraBeeMutation implements IBeeMutation +{ + public static List mutations; + MutationRequirement req; + IAlleleBeeSpecies species0; + IAlleleBeeSpecies species1; + IAllele[] template; + int chance; + + public static void doInit() { + final IAlleleBeeSpecies[] vanilla = new IAlleleBeeSpecies[0]; + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Meadows.getAllele(), ForestryAllele.BeeSpecies.Frugal.getAllele(), ExtraBeesSpecies.ARID, 10); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Forest.getAllele(), ForestryAllele.BeeSpecies.Frugal.getAllele(), ExtraBeesSpecies.ARID, 10); + new ExtraBeeMutation(ExtraBeesSpecies.ARID, ForestryAllele.BeeSpecies.Common.getAllele(), ExtraBeesSpecies.BARREN, 8); + new ExtraBeeMutation(ExtraBeesSpecies.ARID, ExtraBeesSpecies.BARREN, ExtraBeesSpecies.DESOLATE, 8); + new ExtraBeeMutation(ExtraBeesSpecies.BARREN, ForestryAllele.BeeSpecies.Forest.getAllele(), ExtraBeesSpecies.GNAWING, 15); + new ExtraBeeMutation(ExtraBeesSpecies.DESOLATE, ForestryAllele.BeeSpecies.Meadows.getAllele(), ExtraBeesSpecies.ROTTEN, 15); + new ExtraBeeMutation(ExtraBeesSpecies.DESOLATE, ForestryAllele.BeeSpecies.Forest.getAllele(), ExtraBeesSpecies.BONE, 15); + new ExtraBeeMutation(ExtraBeesSpecies.DESOLATE, ForestryAllele.BeeSpecies.Modest.getAllele(), ExtraBeesSpecies.CREEPER, 15); + new ExtraBeeMutation(ExtraBeesSpecies.BARREN, ForestryAllele.BeeSpecies.Marshy.getAllele(), ExtraBeesSpecies.DECOMPOSING, 15); + new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Diligent.getAllele(), ExtraBeesSpecies.STONE, 12); + new ExtraBeeMutation(ExtraBeesSpecies.STONE, ForestryAllele.BeeSpecies.Unweary.getAllele(), ExtraBeesSpecies.GRANITE, 10); + new ExtraBeeMutation(ExtraBeesSpecies.GRANITE, ForestryAllele.BeeSpecies.Industrious.getAllele(), ExtraBeesSpecies.MINERAL, 6); + new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Meadows.getAllele(), ExtraBeesSpecies.IRON, 5); + new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Forest.getAllele(), ExtraBeesSpecies.IRON, 5); + new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Wintry.getAllele(), ExtraBeesSpecies.COPPER, 5); + new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Modest.getAllele(), ExtraBeesSpecies.COPPER, 5); + new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Marshy.getAllele(), ExtraBeesSpecies.TIN, 5); + new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Tropical.getAllele(), ExtraBeesSpecies.TIN, 5); + new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Meadows.getAllele(), ExtraBeesSpecies.LEAD, 5); + new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Modest.getAllele(), ExtraBeesSpecies.LEAD, 5); + new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Wintry.getAllele(), ExtraBeesSpecies.ZINC, 5); + new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Tropical.getAllele(), ExtraBeesSpecies.ZINC, 5); + new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Forest.getAllele(), ExtraBeesSpecies.NICKEL, 5); + new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Marshy.getAllele(), ExtraBeesSpecies.NICKEL, 5); + new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Cultivated.getAllele(), ExtraBeesSpecies.TITANIUM, 3); + new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Common.getAllele(), ExtraBeesSpecies.TUNGSTATE, 3); + new ExtraBeeMutation(ExtraBeesSpecies.ZINC, ForestryAllele.BeeSpecies.Majestic.getAllele(), ExtraBeesSpecies.SILVER, 2); + new ExtraBeeMutation(ExtraBeesSpecies.TIN, ForestryAllele.BeeSpecies.Majestic.getAllele(), ExtraBeesSpecies.SILVER, 2); + new ExtraBeeMutation(ExtraBeesSpecies.LEAD, ForestryAllele.BeeSpecies.Majestic.getAllele(), ExtraBeesSpecies.SILVER, 2); + new ExtraBeeMutation(ExtraBeesSpecies.TITANIUM, ForestryAllele.BeeSpecies.Majestic.getAllele(), ExtraBeesSpecies.SILVER, 3); + new ExtraBeeMutation(ExtraBeesSpecies.IRON, ForestryAllele.BeeSpecies.Majestic.getAllele(), ExtraBeesSpecies.GOLD, 2); + new ExtraBeeMutation(ExtraBeesSpecies.COPPER, ForestryAllele.BeeSpecies.Majestic.getAllele(), ExtraBeesSpecies.GOLD, 2); + new ExtraBeeMutation(ExtraBeesSpecies.NICKEL, ForestryAllele.BeeSpecies.Majestic.getAllele(), ExtraBeesSpecies.GOLD, 2); + new ExtraBeeMutation(ExtraBeesSpecies.TUNGSTATE, ForestryAllele.BeeSpecies.Majestic.getAllele(), ExtraBeesSpecies.GOLD, 3); + new ExtraBeeMutation(ExtraBeesSpecies.GOLD, ExtraBeesSpecies.SILVER, ExtraBeesSpecies.PLATINUM, 2); + new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Imperial.getAllele(), ExtraBeesSpecies.LAPIS, 5); + new ExtraBeeMutation(ExtraBeesSpecies.LAPIS, ForestryAllele.BeeSpecies.Forest.getAllele(), ExtraBeesSpecies.EMERALD, 5); + new ExtraBeeMutation(ExtraBeesSpecies.LAPIS, ForestryAllele.BeeSpecies.Modest.getAllele(), ExtraBeesSpecies.RUBY, 5); + new ExtraBeeMutation(ExtraBeesSpecies.LAPIS, ExtraBeesSpecies.WATER, ExtraBeesSpecies.SAPPHIRE, 5); + new ExtraBeeMutation(ExtraBeesSpecies.LAPIS, ForestryAllele.BeeSpecies.Cultivated.getAllele(), ExtraBeesSpecies.DIAMOND, 5); + new ExtraBeeMutation(ExtraBeesSpecies.PREHISTORIC, ExtraBeesSpecies.MINERAL, ExtraBeesSpecies.UNSTABLE, 5); + new ExtraBeeMutation(ExtraBeesSpecies.UNSTABLE, ExtraBeesSpecies.IRON, ExtraBeesSpecies.NUCLEAR, 5); + new ExtraBeeMutation(ExtraBeesSpecies.UNSTABLE, ExtraBeesSpecies.COPPER, ExtraBeesSpecies.NUCLEAR, 5); + new ExtraBeeMutation(ExtraBeesSpecies.UNSTABLE, ExtraBeesSpecies.TIN, ExtraBeesSpecies.NUCLEAR, 5); + new ExtraBeeMutation(ExtraBeesSpecies.UNSTABLE, ExtraBeesSpecies.ZINC, ExtraBeesSpecies.NUCLEAR, 5); + new ExtraBeeMutation(ExtraBeesSpecies.UNSTABLE, ExtraBeesSpecies.NICKEL, ExtraBeesSpecies.NUCLEAR, 5); + new ExtraBeeMutation(ExtraBeesSpecies.UNSTABLE, ExtraBeesSpecies.LEAD, ExtraBeesSpecies.NUCLEAR, 5); + new ExtraBeeMutation(ExtraBeesSpecies.NUCLEAR, ExtraBeesSpecies.GOLD, ExtraBeesSpecies.RADIOACTIVE, 5); + new ExtraBeeMutation(ExtraBeesSpecies.NUCLEAR, ExtraBeesSpecies.SILVER, ExtraBeesSpecies.RADIOACTIVE, 5); + new ExtraBeeMutation(ExtraBeesSpecies.NUCLEAR, ForestryAllele.BeeSpecies.Frugal.getAllele(), ExtraBeesSpecies.YELLORIUM, 5); + new ExtraBeeMutation(ExtraBeesSpecies.NUCLEAR, ExtraBeesSpecies.YELLORIUM, ExtraBeesSpecies.CYANITE, 5); + new ExtraBeeMutation(ExtraBeesSpecies.YELLORIUM, ExtraBeesSpecies.CYANITE, ExtraBeesSpecies.BLUTONIUM, 5); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Noble.getAllele(), ForestryAllele.BeeSpecies.Diligent.getAllele(), ExtraBeesSpecies.ANCIENT, 10); + new ExtraBeeMutation(ExtraBeesSpecies.ANCIENT, ForestryAllele.BeeSpecies.Secluded.getAllele(), ExtraBeesSpecies.PRIMEVAL, 8); + new ExtraBeeMutation(ExtraBeesSpecies.PRIMEVAL, ExtraBeesSpecies.ANCIENT, ExtraBeesSpecies.PREHISTORIC, 8); + new ExtraBeeMutation(ExtraBeesSpecies.PREHISTORIC, ForestryAllele.BeeSpecies.Imperial.getAllele(), ExtraBeesSpecies.RELIC, 8); + new ExtraBeeMutation(ExtraBeesSpecies.PRIMEVAL, ExtraBeesSpecies.GROWING, ExtraBeesSpecies.COAL, 8); + new ExtraBeeMutation(ExtraBeesSpecies.PRIMEVAL, ForestryAllele.BeeSpecies.Rural.getAllele(), ExtraBeesSpecies.COAL, 8); + new ExtraBeeMutation(ExtraBeesSpecies.PRIMEVAL, ForestryAllele.BeeSpecies.Miry.getAllele(), ExtraBeesSpecies.RESIN, 8); + new ExtraBeeMutation(ExtraBeesSpecies.PRIMEVAL, ExtraBeesSpecies.OCEAN, ExtraBeesSpecies.OIL, 8); + new ExtraBeeMutation(ExtraBeesSpecies.PRIMEVAL, ForestryAllele.BeeSpecies.Frugal.getAllele(), ExtraBeesSpecies.OIL, 8); + new ExtraBeeMutation(ExtraBeesSpecies.OIL, ForestryAllele.BeeSpecies.Industrious.getAllele(), ExtraBeesSpecies.DISTILLED, 8); + new ExtraBeeMutation(ExtraBeesSpecies.DISTILLED, ExtraBeesSpecies.OIL, ExtraBeesSpecies.FUEL, 8); + new ExtraBeeMutation(ExtraBeesSpecies.DISTILLED, ExtraBeesSpecies.COAL, ExtraBeesSpecies.CREOSOTE, 8); + new ExtraBeeMutation(ExtraBeesSpecies.DISTILLED, ExtraBeesSpecies.RESIN, ExtraBeesSpecies.LATEX, 8); + new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Diligent.getAllele(), ExtraBeesSpecies.RIVER, 10, new RequirementBiomeType(BiomeDictionary.Type.RIVER)); + new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Diligent.getAllele(), ExtraBeesSpecies.OCEAN, 10, new RequirementBiomeType(BiomeDictionary.Type.OCEAN)); + new ExtraBeeMutation(ExtraBeesSpecies.BLACK, ExtraBeesSpecies.OCEAN, ExtraBeesSpecies.INK, 8); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Forest.getAllele(), ForestryAllele.BeeSpecies.Diligent.getAllele(), ExtraBeesSpecies.GROWING, 10); + new ExtraBeeMutation(ExtraBeesSpecies.GROWING, ForestryAllele.BeeSpecies.Unweary.getAllele(), ExtraBeesSpecies.THRIVING, 10); + new ExtraBeeMutation(ExtraBeesSpecies.THRIVING, ForestryAllele.BeeSpecies.Industrious.getAllele(), ExtraBeesSpecies.BLOOMING, 8); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Valiant.getAllele(), ForestryAllele.BeeSpecies.Diligent.getAllele(), ExtraBeesSpecies.SWEET, 15); + new ExtraBeeMutation(ExtraBeesSpecies.SWEET, ForestryAllele.BeeSpecies.Rural.getAllele(), ExtraBeesSpecies.SUGAR, 15); + new ExtraBeeMutation(ExtraBeesSpecies.SWEET, ExtraBeesSpecies.GROWING, ExtraBeesSpecies.RIPENING, 5); + new ExtraBeeMutation(ExtraBeesSpecies.SWEET, ExtraBeesSpecies.THRIVING, ExtraBeesSpecies.FRUIT, 5); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Farmerly.getAllele(), ForestryAllele.BeeSpecies.Meadows.getAllele(), ExtraBeesSpecies.ALCOHOL, 10); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Farmerly.getAllele(), ForestryAllele.BeeSpecies.Meadows.getAllele(), ExtraBeesSpecies.FARM, 10); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Farmerly.getAllele(), ExtraBeesSpecies.WATER, ExtraBeesSpecies.MILK, 10); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Farmerly.getAllele(), ForestryAllele.BeeSpecies.Tropical.getAllele(), ExtraBeesSpecies.COFFEE, 10); + new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Miry.getAllele(), ExtraBeesSpecies.SWAMP, 10); + new ExtraBeeMutation(ExtraBeesSpecies.SWAMP, ForestryAllele.BeeSpecies.Boggy.getAllele(), ExtraBeesSpecies.BOGGY, 8); + new ExtraBeeMutation(ExtraBeesSpecies.BOGGY, ExtraBeesSpecies.SWAMP, ExtraBeesSpecies.FUNGAL, 8); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Boggy.getAllele(), ForestryAllele.BeeSpecies.Miry.getAllele(), ExtraBeesSpecies.FUNGAL, 8); + new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Forest.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15); + new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Meadows.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15); + new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Modest.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15); + new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Tropical.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15); + new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Marshy.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15); + new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Wintry.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15); + new ExtraBeeMutation(ExtraBeesSpecies.WATER, ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Common.getTemplate(), 15); + new ExtraBeeMutation(ExtraBeesSpecies.WATER, ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Common.getTemplate(), 15); + new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Forest.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15); + new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Meadows.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15); + new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Modest.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15); + new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Tropical.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15); + new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Marshy.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15); + new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Wintry.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15); + new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Common.getTemplate(), 15); + new ExtraBeeMutation(ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Forest.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15); + new ExtraBeeMutation(ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Meadows.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15); + new ExtraBeeMutation(ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Modest.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15); + new ExtraBeeMutation(ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Tropical.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15); + new ExtraBeeMutation(ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Marshy.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15); + new ExtraBeeMutation(ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Wintry.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15); + new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Common.getAllele(), ForestryAllele.BeeSpecies.Cultivated.getTemplate(), 12); + new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Common.getAllele(), ForestryAllele.BeeSpecies.Cultivated.getTemplate(), 12); + new ExtraBeeMutation(ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Common.getAllele(), ForestryAllele.BeeSpecies.Cultivated.getTemplate(), 12); + new ExtraBeeMutation(ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Fiendish.getAllele(), ExtraBeesSpecies.TEMPERED, 30, new RequirementBiomeType(BiomeDictionary.Type.NETHER)); + new ExtraBeeMutation(ExtraBeesSpecies.TEMPERED, ForestryAllele.BeeSpecies.Demonic.getAllele(), ExtraBeesSpecies.VOLCANIC, 20, new RequirementBiomeType(BiomeDictionary.Type.NETHER)); + new ExtraBeeMutation(ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Cultivated.getAllele(), ForestryAllele.BeeSpecies.Sinister.getTemplate(), 60, new RequirementBiomeType(BiomeDictionary.Type.NETHER)); + new ExtraBeeMutation(ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Sinister.getAllele(), ForestryAllele.BeeSpecies.Fiendish.getTemplate(), 40, new RequirementBiomeType(BiomeDictionary.Type.NETHER)); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Sinister.getAllele(), ForestryAllele.BeeSpecies.Tropical.getAllele(), ExtraBeesSpecies.MALICIOUS, 10); + new ExtraBeeMutation(ExtraBeesSpecies.MALICIOUS, ForestryAllele.BeeSpecies.Tropical.getAllele(), ExtraBeesSpecies.INFECTIOUS, 8); + new ExtraBeeMutation(ExtraBeesSpecies.MALICIOUS, ExtraBeesSpecies.INFECTIOUS, ExtraBeesSpecies.VIRULENT, 8); + new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Exotic.getAllele(), ExtraBeesSpecies.VISCOUS, 10); + new ExtraBeeMutation(ExtraBeesSpecies.VISCOUS, ForestryAllele.BeeSpecies.Exotic.getAllele(), ExtraBeesSpecies.GLUTINOUS, 8); + new ExtraBeeMutation(ExtraBeesSpecies.VISCOUS, ExtraBeesSpecies.GLUTINOUS, ExtraBeesSpecies.STICKY, 8); + new ExtraBeeMutation(ExtraBeesSpecies.MALICIOUS, ExtraBeesSpecies.VISCOUS, ExtraBeesSpecies.CORROSIVE, 10); + new ExtraBeeMutation(ExtraBeesSpecies.CORROSIVE, ForestryAllele.BeeSpecies.Fiendish.getAllele(), ExtraBeesSpecies.CAUSTIC, 8); + new ExtraBeeMutation(ExtraBeesSpecies.CORROSIVE, ExtraBeesSpecies.CAUSTIC, ExtraBeesSpecies.ACIDIC, 4); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Cultivated.getAllele(), ForestryAllele.BeeSpecies.Valiant.getAllele(), ExtraBeesSpecies.EXCITED, 10); + new ExtraBeeMutation(ExtraBeesSpecies.EXCITED, ForestryAllele.BeeSpecies.Diligent.getAllele(), ExtraBeesSpecies.ENERGETIC, 8); + new ExtraBeeMutation(ExtraBeesSpecies.EXCITED, ExtraBeesSpecies.ENERGETIC, ExtraBeesSpecies.ECSTATIC, 8); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Wintry.getAllele(), ForestryAllele.BeeSpecies.Diligent.getAllele(), ExtraBeesSpecies.ARTIC, 10); + new ExtraBeeMutation(ExtraBeesSpecies.OCEAN, ExtraBeesSpecies.ARTIC, ExtraBeesSpecies.FREEZING, 10); + new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Sinister.getAllele(), ExtraBeesSpecies.SHADOW, 10); + new ExtraBeeMutation(ExtraBeesSpecies.SHADOW, ExtraBeesSpecies.ROCK, ExtraBeesSpecies.DARKENED, 8); + new ExtraBeeMutation(ExtraBeesSpecies.SHADOW, ExtraBeesSpecies.DARKENED, ExtraBeesSpecies.ABYSS, 8); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Forest.getAllele(), ForestryAllele.BeeSpecies.Valiant.getAllele(), ExtraBeesSpecies.RED, 5); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Meadows.getAllele(), ForestryAllele.BeeSpecies.Valiant.getAllele(), ExtraBeesSpecies.YELLOW, 5); + new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Valiant.getAllele(), ExtraBeesSpecies.BLUE, 5); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Tropical.getAllele(), ForestryAllele.BeeSpecies.Valiant.getAllele(), ExtraBeesSpecies.GREEN, 5); + new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Valiant.getAllele(), ExtraBeesSpecies.BLACK, 5); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Wintry.getAllele(), ForestryAllele.BeeSpecies.Valiant.getAllele(), ExtraBeesSpecies.WHITE, 5); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Marshy.getAllele(), ForestryAllele.BeeSpecies.Valiant.getAllele(), ExtraBeesSpecies.BROWN, 5); + new ExtraBeeMutation(ExtraBeesSpecies.RED, ExtraBeesSpecies.YELLOW, ExtraBeesSpecies.ORANGE, 5); + new ExtraBeeMutation(ExtraBeesSpecies.GREEN, ExtraBeesSpecies.BLUE, ExtraBeesSpecies.CYAN, 5); + new ExtraBeeMutation(ExtraBeesSpecies.RED, ExtraBeesSpecies.BLUE, ExtraBeesSpecies.PURPLE, 5); + new ExtraBeeMutation(ExtraBeesSpecies.BLACK, ExtraBeesSpecies.WHITE, ExtraBeesSpecies.GRAY, 5); + new ExtraBeeMutation(ExtraBeesSpecies.BLUE, ExtraBeesSpecies.WHITE, ExtraBeesSpecies.LIGHTBLUE, 5); + new ExtraBeeMutation(ExtraBeesSpecies.RED, ExtraBeesSpecies.WHITE, ExtraBeesSpecies.PINK, 5); + new ExtraBeeMutation(ExtraBeesSpecies.GREEN, ExtraBeesSpecies.WHITE, ExtraBeesSpecies.LIMEGREEN, 5); + new ExtraBeeMutation(ExtraBeesSpecies.PURPLE, ExtraBeesSpecies.PINK, ExtraBeesSpecies.MAGENTA, 5); + new ExtraBeeMutation(ExtraBeesSpecies.GRAY, ExtraBeesSpecies.WHITE, ExtraBeesSpecies.LIGHTGRAY, 5); + new ExtraBeeMutation(ExtraBeesSpecies.TEMPERED, ExtraBeesSpecies.EXCITED, ExtraBeesSpecies.GLOWSTONE, 5); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Austere.getAllele(), ExtraBeesSpecies.DESOLATE, ExtraBeesSpecies.HAZARDOUS, 5); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Ended.getAllele(), ExtraBeesSpecies.RELIC, ExtraBeesSpecies.JADED, 2, new RequirementPerson("jadedcat")); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Austere.getAllele(), ExtraBeesSpecies.EXCITED, ExtraBeesSpecies.CELEBRATORY, 5); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Secluded.getAllele(), ForestryAllele.BeeSpecies.Ended.getAllele(), ExtraBeesSpecies.UNUSUAL, 5); + new ExtraBeeMutation(ExtraBeesSpecies.UNUSUAL, ForestryAllele.BeeSpecies.Hermitic.getAllele(), ExtraBeesSpecies.SPATIAL, 5); + new ExtraBeeMutation(ExtraBeesSpecies.SPATIAL, ForestryAllele.BeeSpecies.Spectral.getAllele(), ExtraBeesSpecies.QUANTUM, 5); + new ExtraBeeMutation(ForestryAllele.BeeSpecies.Noble.getAllele(), ForestryAllele.BeeSpecies.Monastic.getAllele(), ExtraBeesSpecies.MYSTICAL, 5); + for (final IBeeMutation mutation : ExtraBeeMutation.mutations) { + Binnie.Genetics.getBeeRoot().registerMutation(mutation); + } + } + + public ExtraBeeMutation(final IAlleleBeeSpecies allele0, final IAlleleBeeSpecies allele1, final ExtraBeesSpecies mutation, final int chance) { + this(allele0, allele1, mutation.getTemplate(), chance, null); + } + + public ExtraBeeMutation(final IAlleleBeeSpecies allele0, final IAlleleBeeSpecies allele1, final ExtraBeesSpecies mutation, final int chance, final MutationRequirement req) { + this(allele0, allele1, mutation.getTemplate(), chance, req); + } + + public ExtraBeeMutation(final IAlleleBeeSpecies allele0, final IAlleleBeeSpecies allele1, final IAllele[] mutation, final int chance) { + this(allele0, allele1, mutation, chance, null); + } + + public ExtraBeeMutation(final IAlleleBeeSpecies allele0, final IAlleleBeeSpecies allele1, final IAllele[] mutation, final int chance, final MutationRequirement req) { + this.species0 = null; + this.species1 = null; + this.template = new IAllele[0]; + this.chance = 80; + this.chance = chance; + this.req = req; + this.species0 = allele0; + this.species1 = allele1; + this.template = mutation; + if (this.species0 != null && this.species1 != null && this.template != null) { + ExtraBeeMutation.mutations.add(this); + } + } + + @Override + public IAlleleSpecies getAllele0() { + return this.species0; + } + + @Override + public IAlleleSpecies getAllele1() { + return this.species1; + } + + @Override + public IAllele[] getTemplate() { + return this.template; + } + + @Override + public float getBaseChance() { + return this.chance; + } + + @Override + public boolean isPartner(final IAllele allele) { + return allele.getUID().equals(this.species0.getUID()) || allele.getUID().equals(this.species1.getUID()); + } + + @Override + public IAllele getPartner(final IAllele allele) { + return allele.getUID().equals(this.species0.getUID()) ? this.species1 : this.species0; + } + + @Override + public boolean isSecret() { + return false; + } + + @Override + public float getChance(final IBeeHousing housing, final IAlleleBeeSpecies allele0, final IAlleleBeeSpecies allele1, final IBeeGenome genome0, final IBeeGenome genome1) { + if (this.species0 == null || this.species1 == null || allele0 == null || allele1 == null) { + return 0.0f; + } + + final World world = housing.getWorld(); + final BiomeGenBase biome = housing.getBiome(); + if (this.req != null && !this.req.fufilled(housing, allele0, allele1, genome0, genome1)) { + return 0.0f; + } + + final int processedChance = Math.round(this.chance * BeeManager.beeRoot.createBeeHousingModifier(housing).getMutationModifier(genome0, genome1, 1.0f) + * Binnie.Genetics.getBeeRoot().getBeekeepingMode(world).getBeeModifier().getMutationModifier(genome0, genome1, 1.0f)); + if (this.species0.getUID().equals(allele0.getUID()) && this.species1.getUID().equals(allele1.getUID())) { + return processedChance; + } + if (this.species1.getUID().equals(allele0.getUID()) && this.species0.getUID().equals(allele1.getUID())) { + return processedChance; + } + return 0.0f; + } + + @Override + public Collection getSpecialConditions() { + final List conditions = new ArrayList(); + if (this.req != null) { + for (final String s : this.req.tooltip()) { + conditions.add(s); + } + } + return conditions; + } + + @Override + public IBeeRoot getRoot() { + return Binnie.Genetics.getBeeRoot(); + } + + static { + ExtraBeeMutation.mutations = new ArrayList(); + } + + abstract static class MutationRequirement + { + public abstract String[] tooltip(); + + public abstract boolean fufilled(final IBeeHousing p0, final IAllele p1, final IAllele p2, final IGenome p3, final IGenome p4); + } + + static class RequirementBiomeType extends MutationRequirement + { + BiomeDictionary.Type type; + + public RequirementBiomeType(final BiomeDictionary.Type type) { + this.type = type; + } + + @Override + public String[] tooltip() { + return new String[] { "Is restricted to " + this.type + "-like biomes." }; + } + + @Override + public boolean fufilled(final IBeeHousing housing, final IAllele allele0, final IAllele allele1, final IGenome genome0, final IGenome genome1) { + return BiomeDictionary.isBiomeOfType(housing.getBiome(), this.type); + } + } + + static class RequirementPerson extends MutationRequirement + { + String name; + + public RequirementPerson(final String name) { + this.name = name; + } + + @Override + public String[] tooltip() { + return new String[] { "Can only be bred by " + this.name }; + } + + @Override + public boolean fufilled(final IBeeHousing housing, final IAllele allele0, final IAllele allele1, final IGenome genome0, final IGenome genome1) { + return housing.getOwner().getName() != null && housing.getOwner().getName().equals(this.name); + } + } +} diff --git a/src/main/java/binnie/extrabees/genetics/ExtraBeesBranch.java b/src/main/java/binnie/extrabees/genetics/ExtraBeesBranch.java new file mode 100644 index 00000000..216d82f1 --- /dev/null +++ b/src/main/java/binnie/extrabees/genetics/ExtraBeesBranch.java @@ -0,0 +1,308 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.genetics; + +import forestry.api.genetics.IAlleleSpecies; +import forestry.api.genetics.AlleleManager; +import java.util.LinkedHashSet; +import binnie.extrabees.ExtraBees; +import forestry.api.apiculture.IAlleleBeeSpecies; +import java.util.Set; +import forestry.api.genetics.IClassification; + +public enum ExtraBeesBranch implements IClassification +{ + BARREN("Vacapis"), + HOSTILE("Infenapis"), + ROCKY("Monapis"), + METALLIC("Lamminapis"), + METALLIC2("Metalapis"), + ALLOY("Allapis"), + PRECIOUS("Pluriapis"), + MINERAL("Niphapis"), + GEMSTONE("Gemmapis"), + NUCLEAR("Levapis"), + HISTORIC("Priscapis"), + FOSSILIZED("Fosiapis"), + REFINED("Petrapis"), + AQUATIC("Aquapis"), + SACCHARINE("Sacchapis"), + CLASSICAL("Grecapis"), + VOLCANIC("Irrapis"), + VIRULENT("Virapis"), + VISCOUS("Viscapis"), + CAUSTIC("Morbapis"), + ENERGETIC("Incitapis"), + FARMING("Agriapis"), + SHADOW("Pullapis"), + PRIMARY("Primapis"), + SECONDARY("Secapis"), + TERTIARY("Tertiapis"), + FTB("Eftebeapis"), + QUANTUM("Quantapis"), + BOTANIA("Botaniapis"); + + private String uid; + private String scientific; + private Set speciesSet; + IClassification parent; + + @Override + public String getUID() { + return "extrabees.genus." + this.uid; + } + + @Override + public String getName() { + return ExtraBees.proxy.localise("branch." + this.toString().toLowerCase() + ".name"); + } + + @Override + public String getScientific() { + return this.scientific; + } + + @Override + public String getDescription() { + return ExtraBees.proxy.localiseOrBlank("branch." + this.toString().toLowerCase() + ".desc"); + } + + private ExtraBeesBranch(final String scientific) { + this.uid = ""; + this.scientific = ""; + this.speciesSet = new LinkedHashSet(); + this.scientific = scientific; + this.uid = this.toString().toLowerCase(); + } + + public void register() { + if (!this.speciesSet.isEmpty()) { + AlleleManager.alleleRegistry.registerClassification(this); + final IClassification parent = AlleleManager.alleleRegistry.getClassification("family.apidae"); + if (parent != null) { + parent.addMemberGroup(this); + this.setParent(parent); + } + } + } + + public static void doInit() { + final IClassification frozenBranch = AlleleManager.alleleRegistry.getClassification("genus.bees.frozen"); + if (frozenBranch != null) { + frozenBranch.addMemberSpecies(ExtraBeesSpecies.ARTIC); + ExtraBeesSpecies.ARTIC.setBranch(frozenBranch); + frozenBranch.addMemberSpecies(ExtraBeesSpecies.FREEZING); + ExtraBeesSpecies.FREEZING.setBranch(frozenBranch); + } + final IClassification agrarianBranch = AlleleManager.alleleRegistry.getClassification("genus.bees.agrarian"); + if (agrarianBranch != null) { + agrarianBranch.addMemberSpecies(ExtraBeesSpecies.FARM); + ExtraBeesSpecies.FARM.setBranch(agrarianBranch); + ExtraBeesSpecies.GROWING.setBranch(agrarianBranch); + ExtraBeesSpecies.THRIVING.setBranch(agrarianBranch); + ExtraBeesSpecies.BLOOMING.setBranch(agrarianBranch); + } + final IClassification boggyBranch = AlleleManager.alleleRegistry.getClassification("genus.bees.boggy"); + if (boggyBranch != null) { + boggyBranch.addMemberSpecies(ExtraBeesSpecies.SWAMP); + boggyBranch.addMemberSpecies(ExtraBeesSpecies.BOGGY); + boggyBranch.addMemberSpecies(ExtraBeesSpecies.FUNGAL); + ExtraBeesSpecies.SWAMP.setBranch(boggyBranch); + ExtraBeesSpecies.BOGGY.setBranch(boggyBranch); + ExtraBeesSpecies.FUNGAL.setBranch(boggyBranch); + } + final IClassification festiveBranch = AlleleManager.alleleRegistry.getClassification("genus.bees.festive"); + if (festiveBranch != null) { + festiveBranch.addMemberSpecies(ExtraBeesSpecies.CELEBRATORY); + ExtraBeesSpecies.CELEBRATORY.setBranch(festiveBranch); + } + final IClassification austereBranch = AlleleManager.alleleRegistry.getClassification("genus.bees.austere"); + if (austereBranch != null) { + austereBranch.addMemberSpecies(ExtraBeesSpecies.HAZARDOUS); + ExtraBeesSpecies.HAZARDOUS.setBranch(austereBranch); + } + ExtraBeesBranch.FARMING.addMemberSpecies(ExtraBeesSpecies.ALCOHOL); + ExtraBeesBranch.FARMING.addMemberSpecies(ExtraBeesSpecies.MILK); + ExtraBeesBranch.FARMING.addMemberSpecies(ExtraBeesSpecies.COFFEE); + ExtraBeesBranch.FARMING.addMemberSpecies(ExtraBeesSpecies.CITRUS); + ExtraBeesBranch.FARMING.addMemberSpecies(ExtraBeesSpecies.MINT); + ExtraBeesBranch.FARMING.register(); + ExtraBeesBranch.BARREN.addMemberSpecies(ExtraBeesSpecies.ARID); + ExtraBeesBranch.BARREN.addMemberSpecies(ExtraBeesSpecies.BARREN); + ExtraBeesBranch.BARREN.addMemberSpecies(ExtraBeesSpecies.DESOLATE); + ExtraBeesBranch.BARREN.addMemberSpecies(ExtraBeesSpecies.DECOMPOSING); + ExtraBeesBranch.BARREN.addMemberSpecies(ExtraBeesSpecies.GNAWING); + ExtraBeesBranch.BARREN.register(); + ExtraBeesBranch.HOSTILE.addMemberSpecies(ExtraBeesSpecies.ROTTEN); + ExtraBeesBranch.HOSTILE.addMemberSpecies(ExtraBeesSpecies.BONE); + ExtraBeesBranch.HOSTILE.addMemberSpecies(ExtraBeesSpecies.CREEPER); + ExtraBeesBranch.HOSTILE.register(); + ExtraBeesBranch.ROCKY.addMemberSpecies(ExtraBeesSpecies.ROCK); + ExtraBeesBranch.ROCKY.addMemberSpecies(ExtraBeesSpecies.STONE); + ExtraBeesBranch.ROCKY.addMemberSpecies(ExtraBeesSpecies.GRANITE); + ExtraBeesBranch.ROCKY.addMemberSpecies(ExtraBeesSpecies.MINERAL); + ExtraBeesBranch.ROCKY.register(); + ExtraBeesBranch.METALLIC.addMemberSpecies(ExtraBeesSpecies.IRON); + ExtraBeesBranch.METALLIC.addMemberSpecies(ExtraBeesSpecies.COPPER); + ExtraBeesBranch.METALLIC.addMemberSpecies(ExtraBeesSpecies.TIN); + ExtraBeesBranch.METALLIC.addMemberSpecies(ExtraBeesSpecies.LEAD); + ExtraBeesBranch.METALLIC.register(); + ExtraBeesBranch.METALLIC2.addMemberSpecies(ExtraBeesSpecies.NICKEL); + ExtraBeesBranch.METALLIC2.addMemberSpecies(ExtraBeesSpecies.ZINC); + ExtraBeesBranch.METALLIC2.addMemberSpecies(ExtraBeesSpecies.TUNGSTATE); + ExtraBeesBranch.METALLIC2.addMemberSpecies(ExtraBeesSpecies.TITANIUM); + ExtraBeesBranch.METALLIC2.register(); + ExtraBeesBranch.ALLOY.addMemberSpecies(ExtraBeesSpecies.BRONZE); + ExtraBeesBranch.ALLOY.addMemberSpecies(ExtraBeesSpecies.BRASS); + ExtraBeesBranch.ALLOY.addMemberSpecies(ExtraBeesSpecies.STEEL); + ExtraBeesBranch.ALLOY.addMemberSpecies(ExtraBeesSpecies.INVAR); + ExtraBeesBranch.ALLOY.register(); + ExtraBeesBranch.PRECIOUS.addMemberSpecies(ExtraBeesSpecies.SILVER); + ExtraBeesBranch.PRECIOUS.addMemberSpecies(ExtraBeesSpecies.GOLD); + ExtraBeesBranch.PRECIOUS.addMemberSpecies(ExtraBeesSpecies.ELECTRUM); + ExtraBeesBranch.PRECIOUS.addMemberSpecies(ExtraBeesSpecies.PLATINUM); + ExtraBeesBranch.PRECIOUS.register(); + ExtraBeesBranch.MINERAL.addMemberSpecies(ExtraBeesSpecies.LAPIS); + ExtraBeesBranch.MINERAL.addMemberSpecies(ExtraBeesSpecies.SODALITE); + ExtraBeesBranch.MINERAL.addMemberSpecies(ExtraBeesSpecies.PYRITE); + ExtraBeesBranch.MINERAL.addMemberSpecies(ExtraBeesSpecies.BAUXITE); + ExtraBeesBranch.MINERAL.addMemberSpecies(ExtraBeesSpecies.CINNABAR); + ExtraBeesBranch.MINERAL.addMemberSpecies(ExtraBeesSpecies.SPHALERITE); + ExtraBeesBranch.MINERAL.register(); + ExtraBeesBranch.GEMSTONE.addMemberSpecies(ExtraBeesSpecies.EMERALD); + ExtraBeesBranch.GEMSTONE.addMemberSpecies(ExtraBeesSpecies.RUBY); + ExtraBeesBranch.GEMSTONE.addMemberSpecies(ExtraBeesSpecies.SAPPHIRE); + ExtraBeesBranch.GEMSTONE.addMemberSpecies(ExtraBeesSpecies.OLIVINE); + ExtraBeesBranch.GEMSTONE.addMemberSpecies(ExtraBeesSpecies.DIAMOND); + ExtraBeesBranch.GEMSTONE.register(); + ExtraBeesBranch.NUCLEAR.addMemberSpecies(ExtraBeesSpecies.UNSTABLE); + ExtraBeesBranch.NUCLEAR.addMemberSpecies(ExtraBeesSpecies.NUCLEAR); + ExtraBeesBranch.NUCLEAR.addMemberSpecies(ExtraBeesSpecies.RADIOACTIVE); + ExtraBeesBranch.NUCLEAR.addMemberSpecies(ExtraBeesSpecies.YELLORIUM); + ExtraBeesBranch.NUCLEAR.addMemberSpecies(ExtraBeesSpecies.CYANITE); + ExtraBeesBranch.NUCLEAR.addMemberSpecies(ExtraBeesSpecies.BLUTONIUM); + ExtraBeesBranch.NUCLEAR.register(); + ExtraBeesBranch.HISTORIC.addMemberSpecies(ExtraBeesSpecies.ANCIENT); + ExtraBeesBranch.HISTORIC.addMemberSpecies(ExtraBeesSpecies.PRIMEVAL); + ExtraBeesBranch.HISTORIC.addMemberSpecies(ExtraBeesSpecies.PREHISTORIC); + ExtraBeesBranch.HISTORIC.addMemberSpecies(ExtraBeesSpecies.RELIC); + ExtraBeesBranch.HISTORIC.register(); + ExtraBeesBranch.FOSSILIZED.addMemberSpecies(ExtraBeesSpecies.COAL); + ExtraBeesBranch.FOSSILIZED.addMemberSpecies(ExtraBeesSpecies.RESIN); + ExtraBeesBranch.FOSSILIZED.addMemberSpecies(ExtraBeesSpecies.OIL); + ExtraBeesBranch.FOSSILIZED.addMemberSpecies(ExtraBeesSpecies.PEAT); + ExtraBeesBranch.FOSSILIZED.register(); + ExtraBeesBranch.REFINED.addMemberSpecies(ExtraBeesSpecies.DISTILLED); + ExtraBeesBranch.REFINED.addMemberSpecies(ExtraBeesSpecies.FUEL); + ExtraBeesBranch.REFINED.addMemberSpecies(ExtraBeesSpecies.CREOSOTE); + ExtraBeesBranch.REFINED.addMemberSpecies(ExtraBeesSpecies.LATEX); + ExtraBeesBranch.REFINED.register(); + ExtraBeesBranch.AQUATIC.addMemberSpecies(ExtraBeesSpecies.WATER); + ExtraBeesBranch.AQUATIC.addMemberSpecies(ExtraBeesSpecies.RIVER); + ExtraBeesBranch.AQUATIC.addMemberSpecies(ExtraBeesSpecies.OCEAN); + ExtraBeesBranch.AQUATIC.addMemberSpecies(ExtraBeesSpecies.INK); + ExtraBeesBranch.AQUATIC.register(); + ExtraBeesBranch.SACCHARINE.addMemberSpecies(ExtraBeesSpecies.SWEET); + ExtraBeesBranch.SACCHARINE.addMemberSpecies(ExtraBeesSpecies.SUGAR); + ExtraBeesBranch.SACCHARINE.addMemberSpecies(ExtraBeesSpecies.FRUIT); + ExtraBeesBranch.SACCHARINE.addMemberSpecies(ExtraBeesSpecies.RIPENING); + ExtraBeesBranch.SACCHARINE.register(); + ExtraBeesBranch.CLASSICAL.addMemberSpecies(ExtraBeesSpecies.MARBLE); + ExtraBeesBranch.CLASSICAL.addMemberSpecies(ExtraBeesSpecies.ROMAN); + ExtraBeesBranch.CLASSICAL.addMemberSpecies(ExtraBeesSpecies.GREEK); + ExtraBeesBranch.CLASSICAL.addMemberSpecies(ExtraBeesSpecies.CLASSICAL); + ExtraBeesBranch.CLASSICAL.register(); + ExtraBeesBranch.VOLCANIC.addMemberSpecies(ExtraBeesSpecies.BASALT); + ExtraBeesBranch.VOLCANIC.addMemberSpecies(ExtraBeesSpecies.TEMPERED); + ExtraBeesBranch.VOLCANIC.addMemberSpecies(ExtraBeesSpecies.ANGRY); + ExtraBeesBranch.VOLCANIC.addMemberSpecies(ExtraBeesSpecies.VOLCANIC); + ExtraBeesBranch.VOLCANIC.addMemberSpecies(ExtraBeesSpecies.GLOWSTONE); + ExtraBeesBranch.VOLCANIC.register(); + ExtraBeesBranch.VISCOUS.addMemberSpecies(ExtraBeesSpecies.VISCOUS); + ExtraBeesBranch.VISCOUS.addMemberSpecies(ExtraBeesSpecies.GLUTINOUS); + ExtraBeesBranch.VISCOUS.addMemberSpecies(ExtraBeesSpecies.STICKY); + ExtraBeesBranch.VISCOUS.register(); + ExtraBeesBranch.VIRULENT.addMemberSpecies(ExtraBeesSpecies.MALICIOUS); + ExtraBeesBranch.VIRULENT.addMemberSpecies(ExtraBeesSpecies.INFECTIOUS); + ExtraBeesBranch.VIRULENT.addMemberSpecies(ExtraBeesSpecies.VIRULENT); + ExtraBeesBranch.VIRULENT.register(); + ExtraBeesBranch.CAUSTIC.addMemberSpecies(ExtraBeesSpecies.CORROSIVE); + ExtraBeesBranch.CAUSTIC.addMemberSpecies(ExtraBeesSpecies.CAUSTIC); + ExtraBeesBranch.CAUSTIC.addMemberSpecies(ExtraBeesSpecies.ACIDIC); + ExtraBeesBranch.CAUSTIC.register(); + ExtraBeesBranch.ENERGETIC.addMemberSpecies(ExtraBeesSpecies.EXCITED); + ExtraBeesBranch.ENERGETIC.addMemberSpecies(ExtraBeesSpecies.ENERGETIC); + ExtraBeesBranch.ENERGETIC.addMemberSpecies(ExtraBeesSpecies.ECSTATIC); + ExtraBeesBranch.ENERGETIC.register(); + ExtraBeesBranch.SHADOW.addMemberSpecies(ExtraBeesSpecies.SHADOW); + ExtraBeesBranch.SHADOW.addMemberSpecies(ExtraBeesSpecies.DARKENED); + ExtraBeesBranch.SHADOW.addMemberSpecies(ExtraBeesSpecies.ABYSS); + ExtraBeesBranch.SHADOW.register(); + ExtraBeesBranch.PRIMARY.addMemberSpecies(ExtraBeesSpecies.RED); + ExtraBeesBranch.PRIMARY.addMemberSpecies(ExtraBeesSpecies.YELLOW); + ExtraBeesBranch.PRIMARY.addMemberSpecies(ExtraBeesSpecies.BLUE); + ExtraBeesBranch.PRIMARY.addMemberSpecies(ExtraBeesSpecies.GREEN); + ExtraBeesBranch.PRIMARY.addMemberSpecies(ExtraBeesSpecies.BLACK); + ExtraBeesBranch.PRIMARY.addMemberSpecies(ExtraBeesSpecies.WHITE); + ExtraBeesBranch.PRIMARY.addMemberSpecies(ExtraBeesSpecies.BROWN); + ExtraBeesBranch.PRIMARY.register(); + ExtraBeesBranch.SECONDARY.addMemberSpecies(ExtraBeesSpecies.ORANGE); + ExtraBeesBranch.SECONDARY.addMemberSpecies(ExtraBeesSpecies.CYAN); + ExtraBeesBranch.SECONDARY.addMemberSpecies(ExtraBeesSpecies.PURPLE); + ExtraBeesBranch.SECONDARY.addMemberSpecies(ExtraBeesSpecies.GRAY); + ExtraBeesBranch.SECONDARY.addMemberSpecies(ExtraBeesSpecies.LIGHTBLUE); + ExtraBeesBranch.SECONDARY.addMemberSpecies(ExtraBeesSpecies.PINK); + ExtraBeesBranch.SECONDARY.addMemberSpecies(ExtraBeesSpecies.LIMEGREEN); + ExtraBeesBranch.SECONDARY.register(); + ExtraBeesBranch.TERTIARY.addMemberSpecies(ExtraBeesSpecies.MAGENTA); + ExtraBeesBranch.TERTIARY.addMemberSpecies(ExtraBeesSpecies.LIGHTGRAY); + ExtraBeesBranch.TERTIARY.register(); + ExtraBeesBranch.FTB.addMemberSpecies(ExtraBeesSpecies.JADED); + ExtraBeesBranch.FTB.register(); + ExtraBeesBranch.QUANTUM.addMemberSpecies(ExtraBeesSpecies.UNUSUAL); + ExtraBeesBranch.QUANTUM.addMemberSpecies(ExtraBeesSpecies.SPATIAL); + ExtraBeesBranch.QUANTUM.addMemberSpecies(ExtraBeesSpecies.QUANTUM); + ExtraBeesBranch.QUANTUM.register(); + ExtraBeesBranch.BOTANIA.addMemberSpecies(ExtraBeesSpecies.MYSTICAL); + ExtraBeesBranch.BOTANIA.register(); + } + + @Override + public IClassification.EnumClassLevel getLevel() { + return IClassification.EnumClassLevel.GENUS; + } + + @Override + public IClassification[] getMemberGroups() { + return null; + } + + @Override + public void addMemberGroup(final IClassification group) { + } + + @Override + public IAlleleSpecies[] getMemberSpecies() { + return this.speciesSet.toArray(new IAlleleSpecies[0]); + } + + @Override + public void addMemberSpecies(final IAlleleSpecies species) { + this.speciesSet.add((IAlleleBeeSpecies) species); + if (species instanceof ExtraBeesSpecies) { + ((ExtraBeesSpecies) species).setBranch(this); + } + } + + @Override + public IClassification getParent() { + return this.parent; + } + + @Override + public void setParent(final IClassification parent) { + this.parent = parent; + } +} diff --git a/src/main/java/binnie/extrabees/genetics/ExtraBeesFlowers.java b/src/main/java/binnie/extrabees/genetics/ExtraBeesFlowers.java new file mode 100644 index 00000000..067acc0f --- /dev/null +++ b/src/main/java/binnie/extrabees/genetics/ExtraBeesFlowers.java @@ -0,0 +1,264 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.genetics; + +import forestry.api.apiculture.FlowerManager; +import forestry.api.genetics.IFlower; + +import net.minecraft.item.Item; + +import java.util.HashSet; +import java.util.List; +import java.util.ArrayList; +import java.util.Set; + +import binnie.core.Mods; +import forestry.api.genetics.IFruitBearer; + +import net.minecraft.world.IBlockAccess; +import net.minecraft.block.material.Material; + +import forestry.api.genetics.IIndividual; + +import java.util.EnumSet; + +import net.minecraftforge.common.EnumPlantType; + +import forestry.api.genetics.IPollinatable; + +import net.minecraft.world.World; +import net.minecraft.init.Items; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; + +import forestry.api.genetics.IAllele; +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.IChromosomeType; +import forestry.api.genetics.ISpeciesRoot; +import binnie.extrabees.ExtraBees; +import forestry.api.genetics.IAlleleFlowers; +import forestry.api.genetics.IFlowerProvider; + +public enum ExtraBeesFlowers implements IFlowerProvider, IAlleleFlowers, IChromosomeType +{ + WATER, + SUGAR, + ROCK, + BOOK, + DEAD, + REDSTONE, + WOOD, + LEAVES, + Sapling, + Fruit, + Mystical; + + boolean dominant; + + private ExtraBeesFlowers() { + this.dominant = true; + } + + @Override + public String getUID() { + return "extrabees.flower." + this.toString().toLowerCase(); + } + + @Override + public boolean isDominant() { + return this.dominant; + } + + @Override + public IFlowerProvider getProvider() { + return this; + } + + @Override + public String getDescription() { + return ExtraBees.proxy.localise("flowers." + this.name().toString().toLowerCase() + ".name"); + } + + public void register() { + // AlleleManager.alleleRegistry.registerAllele((IAllele)this); + + for (ItemStack stack : getItemStacks()) { + FlowerManager.flowerRegistry.registerAcceptableFlower(Block.getBlockFromItem(stack.getItem()), getUID()); + } + + AlleleManager.alleleRegistry.registerAllele(this, this); + } + + public static void doInit() { + for (final ExtraBeesFlowers effect : values()) { + effect.register(); + } + } + + public ItemStack[] getItemStacks() { + switch (this) { + case WATER: { + return new ItemStack[] { new ItemStack(Blocks.waterlily) }; + } + case SUGAR: { + return new ItemStack[] { new ItemStack(Blocks.reeds) }; + } + case ROCK: { + return new ItemStack[] { new ItemStack(Blocks.cobblestone) }; + } + case BOOK: { + return new ItemStack[] { new ItemStack(Blocks.bookshelf) }; + } + case REDSTONE: { + return new ItemStack[] { new ItemStack(Blocks.redstone_torch) }; + } + case DEAD: { + return new ItemStack[] { new ItemStack(Blocks.deadbush) }; + } + case Fruit: { + return new ItemStack[] { new ItemStack(Items.apple) }; + } + case LEAVES: { + return new ItemStack[] { new ItemStack(Blocks.leaves) }; + } + case Sapling: { + return new ItemStack[] { new ItemStack(Blocks.sapling) }; + } + case WOOD: { + return new ItemStack[] { new ItemStack(Blocks.log) }; + } + default: { + return new ItemStack[0]; + } + } + } + + @Override + public boolean isAcceptedPollinatable(final World world, final IPollinatable pollinatable) { + final EnumSet types = pollinatable.getPlantType(); + return types.size() > 1 || !types.contains(EnumPlantType.Nether); + } + + public boolean isAcceptedFlower(final World world, final IIndividual individual, final int x, final int y, final int z) { + final Block block = world.getBlock(x, y, z); + if (block == null) { + return false; + } + switch (this) { + case WATER: { + return block == Blocks.waterlily; + } + case ROCK: { + return block.getMaterial() == Material.rock; + } + case SUGAR: { + return block == Blocks.reeds; + } + case BOOK: { + return block == Blocks.bookshelf; + } + case REDSTONE: { + return block == Blocks.redstone_torch; + } + case DEAD: { + return block == Blocks.deadbush; + } + case WOOD: { + return block.isWood(world, x, y, z); + } + case Fruit: { + return world.getTileEntity(x, y, z) instanceof IFruitBearer; + } + case LEAVES: { + return block.isLeaves(world, x, y, z); + } + case Sapling: { + return block.getClass().getName().toLowerCase().contains("sapling"); + } + case Mystical: { + return block == Mods.Botania.block("flower"); + } + default: { + return false; + } + } + } + + @Override + public boolean growFlower(final World world, final IIndividual individual, final int x, final int y, final int z) { + switch (this) { + case WATER: { + return world.isAirBlock(x, y, z) && world.getBlock(x, y - 1, z) == Blocks.water && world.setBlock(x, y, z, Blocks.waterlily, 0, 2); + } + case SUGAR: { + return world.getBlock(x, y - 1, z) == Blocks.reeds && world.isAirBlock(x, y, z) && world.setBlock(x, y, z, Blocks.reeds, 0, 0); + } + default: { + return false; + } + } + } + + @Override + public ItemStack[] affectProducts(final World world, final IIndividual individual, final int x, final int y, final int z, final ItemStack[] products) { + if (this == ExtraBeesFlowers.Mystical) { + final List prods = new ArrayList(); + for (final ItemStack stack : products) { + prods.add(stack); + } + for (int k = 0; k < 50; ++k) { + final int tX = 7; + final int tY = 7; + final int tZ = 3; + final int x2 = x - tX + world.rand.nextInt(1 + 2 * tX); + final int y2 = y - tY + world.rand.nextInt(1 + 2 * tY); + final int z2 = z - tZ + world.rand.nextInt(1 + 2 * tZ); + final Block block = world.getBlock(x2, y2, z2); + if (block != null) { + if (block == Mods.Botania.block("flower")) { + final int meta = world.getBlockMetadata(x2, y2, z2); + final Item item = Mods.Botania.item("petal"); + if (item != null) { + prods.add(new ItemStack(item, 1, meta)); + } + } + } + } + return prods.toArray(new ItemStack[0]); + } + return products; + } + + @Override + public String getName() { + return this.getDescription(); + } + + @Override + public String getUnlocalizedName() { + return this.getUID(); + } + + @Override + public String getFlowerType() { + return this.getUID(); + } + + @Override + public Set getFlowers() { + return new HashSet(); + } + + @Override + public Class getAlleleClass() { + return getClass(); + } + + @Override + public ISpeciesRoot getSpeciesRoot() { + return AlleleManager.alleleRegistry.getSpeciesRoot(getUID()); + } +} diff --git a/src/main/java/binnie/extrabees/genetics/ExtraBeesSpecies.java b/src/main/java/binnie/extrabees/genetics/ExtraBeesSpecies.java new file mode 100644 index 00000000..bd9ddd95 --- /dev/null +++ b/src/main/java/binnie/extrabees/genetics/ExtraBeesSpecies.java @@ -0,0 +1,1116 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.genetics; + +import forestry.api.genetics.IChromosomeType; +import java.util.Collection; +import forestry.api.genetics.IMutation; +import java.util.ArrayList; +import forestry.api.genetics.IIndividual; +import com.mojang.authlib.GameProfile; +import forestry.api.apiculture.IAlleleBeeEffect; +import forestry.api.genetics.IAlleleFlowers; +import forestry.api.apiculture.IBeeRoot; +import java.util.Locale; +import binnie.core.BinnieCore; +import forestry.api.apiculture.EnumBeeType; +import net.minecraft.client.renderer.texture.IIconRegister; +import forestry.api.apiculture.IBeeHousing; +import forestry.api.apiculture.IBeeGenome; +import net.minecraft.world.World; +import java.util.Map; +import binnie.core.Mods; +import net.minecraft.init.Items; +import binnie.extrabees.products.ItemHoneyComb; +import binnie.extrabees.genetics.effect.ExtraBeesEffect; +import binnie.core.genetics.Tolerance; +import binnie.extrabees.products.EnumHoneyComb; +import forestry.api.genetics.IAlleleSpecies; +import binnie.core.genetics.ForestryAllele; +import forestry.api.apiculture.EnumBeeChromosome; +import binnie.core.item.IItemEnum; +import forestry.api.genetics.AlleleManager; +import binnie.Binnie; +import binnie.extrabees.ExtraBees; +import java.util.LinkedHashMap; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.IIcon; +import forestry.api.genetics.IAllele; +import net.minecraft.item.ItemStack; +import java.util.HashMap; +import net.minecraft.stats.Achievement; +import forestry.api.genetics.IClassification; +import forestry.api.core.EnumHumidity; +import forestry.api.core.EnumTemperature; +import forestry.api.core.IIconProvider; +import forestry.api.apiculture.IAlleleBeeSpecies; + +public enum ExtraBeesSpecies implements IAlleleBeeSpecies, IIconProvider +{ + ARID("aridus", 12511316), + BARREN("infelix", 14733923), + DESOLATE("desolo", 13744272), + GNAWING("apica", 15234224), + ROTTEN("caries", 12574902), + BONE("os", 15330792), + CREEPER("erepo", 2942485), + DECOMPOSING("aegrus", 5388049), + ROCK("saxum", 11053224), + STONE("lapis", 7697781), + GRANITE("granum", 6903125), + MINERAL("minerale", 7239037), + COPPER("cuprous", 13722376), + TIN("stannus", 12431805), + IRON("ferrous", 11038808), + LEAD("plumbous", 11373483), + ZINC("spelta", 15592447), + TITANIUM("titania", 11578083), + BRONZE, + BRASS, + STEEL, + TUNGSTATE("wolfram", 1249812), + GOLD("aureus", 15125515), + SILVER("argentus", 14408667), + ELECTRUM, + PLATINUM("platina", 14408667), + LAPIS("lazuli", 4009179), + SODALITE, + PYRITE, + BAUXITE, + CINNABAR, + SPHALERITE, + EMERALD("emerala", 1900291), + RUBY("ruba", 14024704), + SAPPHIRE("saphhira", 673791), + OLIVINE, + DIAMOND("diama", 8371706), + UNSTABLE("levis", 4099124), + NUCLEAR("nucleus", 4312111), + RADIOACTIVE("fervens", 2031360), + ANCIENT("antiquus", 15915919), + PRIMEVAL("priscus", 11773563), + PREHISTORIC("pristinus", 7232064), + RELIC("sapiens", 5062166), + COAL("carbo", 8025672), + RESIN("lacrima", 10908443), + OIL("lubricus", 5719920), + PEAT, + DISTILLED("distilli", 3498838), + FUEL("refina", 16760835), + CREOSOTE("creosota", 9936403), + LATEX("latex", 4803134), + WATER("aqua", 9741055), + RIVER("flumen", 8631252), + OCEAN("mare", 1912493), + INK("atramentum", 922695), + GROWING("tyrelli", 6024152), + THRIVING("thriva", 3466109), + BLOOMING("blooma", 704308), + SWEET("mellitus", 16536049), + SUGAR("dulcis", 15127520), + RIPENING("ripa", 11716445), + FRUIT("pomum", 14375030), + ALCOHOL("vinum", 15239777), + FARM("ager", 7723872), + MILK("lacteus", 14936296), + COFFEE("arabica", 9199152), + CITRUS, + MINT, + SWAMP("paludis", 3500339), + BOGGY("lama", 7887913), + FUNGAL("boletus", 13722112), + MARBLE, + ROMAN, + GREEK, + CLASSICAL, + BASALT("aceri", 9202025), + TEMPERED("iratus", 9062472), + ANGRY, + VOLCANIC("volcano", 5049356), + MALICIOUS("acerbus", 7875191), + INFECTIOUS("contagio", 12070581), + VIRULENT("morbus", 15733740), + VISCOUS("liquidus", 608014), + GLUTINOUS("glutina", 1936423), + STICKY("lentesco", 1565480), + CORROSIVE("corrumpo", 4873227), + CAUSTIC("torrens", 8691997), + ACIDIC("acidus", 12644374), + EXCITED("excita", 16729413), + ENERGETIC("energia", 15218119), + ECSTATIC("ecstatica", 11482600), + ARTIC("artica", 11395296), + FREEZING("glacia", 8119267), + SHADOW("shadowa", 5855577), + DARKENED("darka", 3354163), + ABYSS("abyssba", 2164769), + RED("rubra", 16711680), + YELLOW("fulvus", 16768256), + BLUE("caeruleus", 8959), + GREEN("prasinus", 39168), + BLACK("niger", 5723991), + WHITE("albus", 16777215), + BROWN("fuscus", 6042895), + ORANGE("flammeus", 16751872), + CYAN("cyana", 65509), + PURPLE("purpureus", 11403519), + GRAY("ravus", 12237498), + LIGHTBLUE("aqua", 40447), + PINK("rosaceus", 16744671), + LIMEGREEN("lima", 65288), + MAGENTA("fuchsia", 16711884), + LIGHTGRAY("canus", 13224393), + CELEBRATORY("celeba", 16386666), + JADED("jadeca", 16386666), + GLOWSTONE("glowia", 14730779), + HAZARDOUS("infensus", 11562024), + NICKEL("claro", 16768764), + INVAR, + QUANTUM("quanta", 3655131), + SPATIAL("spatia", 4987872), + UNUSUAL("daniella", 5874874), + YELLORIUM("yellori", 14019840), + CYANITE("cyanita", 34541), + BLUTONIUM("caruthus", 1769702), + MYSTICAL("mystica", 4630306); + + private int primaryColor; + private int secondaryColor; + private EnumTemperature temperature; + private EnumHumidity humidity; + private boolean hasEffect; + private boolean isSecret; + private boolean isCounted; + private String binomial; + private IClassification branch; + private String uid; + private Achievement achievement; + private boolean dominant; + private HashMap products; + private HashMap specialties; + public HashMap allProducts; + public HashMap allSpecialties; + private IAllele[] template; + public State state; + @SideOnly(Side.CLIENT) + private IIcon[][] icons; + boolean nocturnal; + + private ExtraBeesSpecies(final String binomial, final int colour) { + this.primaryColor = 16777215; + this.secondaryColor = 16768022; + this.temperature = EnumTemperature.NORMAL; + this.humidity = EnumHumidity.NORMAL; + this.hasEffect = false; + this.isSecret = true; + this.isCounted = true; + this.binomial = ""; + this.branch = null; + this.uid = ""; + this.achievement = null; + this.dominant = true; + this.products = new LinkedHashMap(); + this.specialties = new LinkedHashMap(); + this.allProducts = new LinkedHashMap(); + this.allSpecialties = new LinkedHashMap(); + this.state = State.Active; + this.nocturnal = false; + this.uid = this.toString().toLowerCase(); + this.binomial = binomial; + this.primaryColor = colour; + } + + private ExtraBeesSpecies() { + this.primaryColor = 16777215; + this.secondaryColor = 16768022; + this.temperature = EnumTemperature.NORMAL; + this.humidity = EnumHumidity.NORMAL; + this.hasEffect = false; + this.isSecret = true; + this.isCounted = true; + this.binomial = ""; + this.branch = null; + this.uid = ""; + this.achievement = null; + this.dominant = true; + this.products = new LinkedHashMap(); + this.specialties = new LinkedHashMap(); + this.allProducts = new LinkedHashMap(); + this.allSpecialties = new LinkedHashMap(); + this.state = State.Active; + this.nocturnal = false; + this.state = State.Deprecated; + } + + @Override + public String getName() { + return ExtraBees.proxy.localise("species." + this.name().toLowerCase() + ".name"); + } + + @Override + public String getDescription() { + return ExtraBees.proxy.localiseOrBlank("species." + this.name().toLowerCase() + ".desc"); + } + + @Override + public EnumTemperature getTemperature() { + return this.temperature; + } + + @Override + public EnumHumidity getHumidity() { + return this.humidity; + } + + @Override + public boolean hasEffect() { + return this.hasEffect; + } + + @Override + public boolean isSecret() { + return this.isSecret; + } + + @Override + public boolean isCounted() { + return this.isCounted; + } + + @Override + public String getBinomial() { + return this.binomial; + } + + @Override + public String getAuthority() { + return "Binnie"; + } + + @Override + public IClassification getBranch() { + return this.branch; + } + + @Override + public String getUID() { + return "extrabees.species." + this.uid; + } + + @Override + public boolean isDominant() { + return this.dominant; + } + + public HashMap getProducts() { + return this.products; + } + + public HashMap getSpecialty() { + return this.specialties; + } + + private void setState(final State state) { + this.state = state; + } + + public void registerTemplate() { + Binnie.Genetics.getBeeRoot().registerTemplate(this.getTemplate()); + if (this.state != State.Active) { + AlleleManager.alleleRegistry.blacklistAllele(this.getUID()); + } + } + + public void addProduct(final ItemStack product, final Float chance) { + if (product == null) { + this.setState(State.Inactive); + } + else { + this.products.put(product, chance); + this.allProducts.put(product, chance); + } + } + + public void addProduct(final IItemEnum product, final Float chance) { + if (product.isActive()) { + this.addProduct(product.get(1), chance); + } + else { + this.allProducts.put(product.get(1), chance); + this.setState(State.Inactive); + } + } + + public void addSpecialty(final ItemStack product, final Float chance) { + if (product == null) { + this.setState(State.Inactive); + } + else { + this.specialties.put(product, chance); + this.allSpecialties.put(product, chance); + } + } + + private void addSpecialty(final IItemEnum product, final Float chance) { + if (product.isActive()) { + this.addSpecialty(product.get(1), chance); + } + else { + this.setState(State.Inactive); + this.allSpecialties.put(product.get(1), chance); + } + } + + private void setHumidity(final EnumHumidity humidity) { + this.humidity = humidity; + } + + private void setTemperature(final EnumTemperature temperature) { + this.temperature = temperature; + } + + public static IAllele[] getDefaultTemplate() { + return Binnie.Genetics.getBeeRoot().getDefaultTemplate(); + } + + public IAllele[] getTemplate() { + this.template[EnumBeeChromosome.SPECIES.ordinal()] = this; + return this.template; + } + + public void importTemplate(final ForestryAllele.BeeSpecies species) { + this.importTemplate(species.getTemplate()); + } + + public void importTemplate(final ExtraBeesSpecies species) { + this.importTemplate(species.getTemplate()); + } + + public void importTemplate(final IAllele[] template) { + this.template = template.clone(); + this.setHumidity(((IAlleleSpecies) template[0]).getHumidity()); + this.setTemperature(((IAlleleSpecies) template[0]).getTemperature()); + this.setSecondaryColor(((IAlleleSpecies) template[0]).getIconColour(1)); + this.template[EnumBeeChromosome.SPECIES.ordinal()] = this; + } + + public void recessive() { + this.dominant = false; + } + + public void setIsSecret(final boolean secret) { + this.isSecret = secret; + } + + public void setHasEffect(final boolean effect) { + this.hasEffect = effect; + } + + public void setSecondaryColor(final int colour) { + this.secondaryColor = colour; + } + + public static void doInit() { + for (final ExtraBeesSpecies species : values()) { + species.template = getDefaultTemplate(); + } + final int aridBody = 13362036; + final int rockBody = 10066329; + final int endBody = 14278302; + ExtraBeesSpecies.ARID.importTemplate(ForestryAllele.BeeSpecies.Modest); + ExtraBeesSpecies.ARID.addProduct(EnumHoneyComb.BARREN, 0.30f); + ExtraBeesSpecies.ARID.setHumidity(EnumHumidity.ARID); + ExtraBeesSpecies.ARID.setFlowerProvider(ExtraBeesFlowers.DEAD.getUID()); + ExtraBeesSpecies.ARID.setTemperatureTolerance(Tolerance.Up1); + ExtraBeesSpecies.ARID.setSecondaryColor(aridBody); + ExtraBeesSpecies.BARREN.importTemplate(ExtraBeesSpecies.ARID); + ExtraBeesSpecies.BARREN.setFertility(ForestryAllele.Fertility.Low); + ExtraBeesSpecies.BARREN.addProduct(EnumHoneyComb.BARREN, 0.30f); + ExtraBeesSpecies.DESOLATE.addProduct(EnumHoneyComb.BARREN, 0.30f); + ExtraBeesSpecies.DESOLATE.importTemplate(ExtraBeesSpecies.BARREN); + ExtraBeesSpecies.DESOLATE.setEffect(ExtraBeesEffect.HUNGER.getUID()); + ExtraBeesSpecies.DESOLATE.recessive(); + ExtraBeesSpecies.DESOLATE.setNocturnal(); + ExtraBeesSpecies.DESOLATE.setHasEffect(true); + ExtraBeesSpecies.GNAWING.importTemplate(ExtraBeesSpecies.BARREN); + ExtraBeesSpecies.GNAWING.setFlowerProvider(ExtraBeesFlowers.WOOD.getUID()); + ExtraBeesSpecies.GNAWING.addProduct(EnumHoneyComb.BARREN, 0.25f); + ExtraBeesSpecies.GNAWING.addSpecialty(EnumHoneyComb.SAWDUST, 0.25f); + ExtraBeesSpecies.ROTTEN.importTemplate(ExtraBeesSpecies.DESOLATE); + ExtraBeesSpecies.ROTTEN.setNocturnal(); + ExtraBeesSpecies.ROTTEN.setCaveDwelling(); + ExtraBeesSpecies.ROTTEN.setTolerantFlyer(); + ExtraBeesSpecies.ROTTEN.setEffect(ExtraBeesEffect.SPAWN_ZOMBIE.getUID()); + ExtraBeesSpecies.ROTTEN.addProduct(EnumHoneyComb.BARREN, 0.30f); + ExtraBeesSpecies.ROTTEN.addSpecialty(EnumHoneyComb.ROTTEN, 0.10f); + ExtraBeesSpecies.BONE.importTemplate(ExtraBeesSpecies.ROTTEN); + ExtraBeesSpecies.BONE.addProduct(EnumHoneyComb.BARREN, 0.30f); + ExtraBeesSpecies.BONE.addSpecialty(EnumHoneyComb.BONE, 0.10f); + ExtraBeesSpecies.BONE.setEffect(ExtraBeesEffect.SPAWN_SKELETON.getUID()); + ExtraBeesSpecies.CREEPER.importTemplate(ExtraBeesSpecies.ROTTEN); + ExtraBeesSpecies.CREEPER.setAllDay(); + ExtraBeesSpecies.CREEPER.addProduct(EnumHoneyComb.BARREN, 0.30f); + ExtraBeesSpecies.CREEPER.addSpecialty(ItemHoneyComb.VanillaComb.POWDERY.get(), 0.08f); + ExtraBeesSpecies.CREEPER.setEffect(ExtraBeesEffect.SPAWN_CREEPER.getUID()); + ExtraBeesSpecies.DECOMPOSING.importTemplate(ExtraBeesSpecies.BARREN); + ExtraBeesSpecies.DECOMPOSING.addProduct(EnumHoneyComb.BARREN, 0.30f); + ExtraBeesSpecies.DECOMPOSING.addSpecialty(EnumHoneyComb.COMPOST, 0.08f); + ExtraBeesSpecies.ROCK.addProduct(EnumHoneyComb.STONE, 0.30f); + ExtraBeesSpecies.ROCK.setIsSecret(false); + ExtraBeesSpecies.ROCK.setAllDay(); + ExtraBeesSpecies.ROCK.setCaveDwelling(); + ExtraBeesSpecies.ROCK.setTolerantFlyer(); + ExtraBeesSpecies.ROCK.setTemperatureTolerance(Tolerance.Both1); + ExtraBeesSpecies.ROCK.setHumidityTolerance(Tolerance.Both1); + ExtraBeesSpecies.ROCK.setFlowerProvider(ExtraBeesFlowers.ROCK.getUID()); + ExtraBeesSpecies.ROCK.setFertility(ForestryAllele.Fertility.Low); + ExtraBeesSpecies.ROCK.setLifespan(ForestryAllele.Lifespan.Short); + ExtraBeesSpecies.ROCK.setSecondaryColor(rockBody); + ExtraBeesSpecies.STONE.addProduct(EnumHoneyComb.STONE, 0.30f); + ExtraBeesSpecies.STONE.importTemplate(ExtraBeesSpecies.ROCK); + ExtraBeesSpecies.STONE.recessive(); + ExtraBeesSpecies.STONE.setSecondaryColor(rockBody); + ExtraBeesSpecies.GRANITE.addProduct(EnumHoneyComb.STONE, 0.30f); + ExtraBeesSpecies.GRANITE.importTemplate(ExtraBeesSpecies.STONE); + ExtraBeesSpecies.GRANITE.setTemperatureTolerance(Tolerance.Both2); + ExtraBeesSpecies.GRANITE.setHumidityTolerance(Tolerance.Both2); + ExtraBeesSpecies.GRANITE.setSecondaryColor(rockBody); + ExtraBeesSpecies.MINERAL.addProduct(EnumHoneyComb.STONE, 0.30f); + ExtraBeesSpecies.MINERAL.importTemplate(ExtraBeesSpecies.GRANITE); + ExtraBeesSpecies.MINERAL.setSecondaryColor(rockBody); + ExtraBeesSpecies.COPPER.addProduct(EnumHoneyComb.STONE, 0.20f); + ExtraBeesSpecies.COPPER.addSpecialty(EnumHoneyComb.COPPER, 0.06f); + ExtraBeesSpecies.COPPER.importTemplate(ExtraBeesSpecies.MINERAL); + ExtraBeesSpecies.COPPER.setSecondaryColor(rockBody); + ExtraBeesSpecies.TIN.addProduct(EnumHoneyComb.STONE, 0.20f); + ExtraBeesSpecies.TIN.addSpecialty(EnumHoneyComb.TIN, 0.06f); + ExtraBeesSpecies.TIN.importTemplate(ExtraBeesSpecies.MINERAL); + ExtraBeesSpecies.TIN.setSecondaryColor(rockBody); + ExtraBeesSpecies.IRON.addProduct(EnumHoneyComb.STONE, 0.20f); + ExtraBeesSpecies.IRON.addSpecialty(EnumHoneyComb.IRON, 0.05f); + ExtraBeesSpecies.IRON.importTemplate(ExtraBeesSpecies.MINERAL); + ExtraBeesSpecies.IRON.recessive(); + ExtraBeesSpecies.IRON.setSecondaryColor(rockBody); + ExtraBeesSpecies.LEAD.addProduct(EnumHoneyComb.STONE, 0.20f); + ExtraBeesSpecies.LEAD.addSpecialty(EnumHoneyComb.LEAD, 0.50f); + ExtraBeesSpecies.LEAD.importTemplate(ExtraBeesSpecies.MINERAL); + ExtraBeesSpecies.LEAD.setSecondaryColor(rockBody); + ExtraBeesSpecies.NICKEL.addProduct(EnumHoneyComb.STONE, 0.20f); + ExtraBeesSpecies.NICKEL.addSpecialty(EnumHoneyComb.NICKEL, 0.05f); + ExtraBeesSpecies.NICKEL.importTemplate(ExtraBeesSpecies.MINERAL); + ExtraBeesSpecies.NICKEL.setSecondaryColor(rockBody); + ExtraBeesSpecies.ZINC.addProduct(EnumHoneyComb.STONE, 0.20f); + ExtraBeesSpecies.ZINC.addSpecialty(EnumHoneyComb.ZINC, 0.05f); + ExtraBeesSpecies.ZINC.importTemplate(ExtraBeesSpecies.MINERAL); + ExtraBeesSpecies.ZINC.setSecondaryColor(rockBody); + ExtraBeesSpecies.TITANIUM.addProduct(EnumHoneyComb.STONE, 0.20f); + ExtraBeesSpecies.TITANIUM.addSpecialty(EnumHoneyComb.TITANIUM, 0.02f); + ExtraBeesSpecies.TITANIUM.importTemplate(ExtraBeesSpecies.MINERAL); + ExtraBeesSpecies.TITANIUM.setSecondaryColor(rockBody); + ExtraBeesSpecies.TUNGSTATE.addProduct(EnumHoneyComb.STONE, 0.20f); + ExtraBeesSpecies.TUNGSTATE.addSpecialty(EnumHoneyComb.TUNGSTEN, 0.01f); + ExtraBeesSpecies.TUNGSTATE.importTemplate(ExtraBeesSpecies.MINERAL); + ExtraBeesSpecies.TUNGSTATE.setSecondaryColor(rockBody); + ExtraBeesSpecies.GOLD.addProduct(EnumHoneyComb.STONE, 0.20f); + ExtraBeesSpecies.GOLD.addSpecialty(EnumHoneyComb.GOLD, 0.02f); + ExtraBeesSpecies.GOLD.importTemplate(ExtraBeesSpecies.MINERAL); + ExtraBeesSpecies.GOLD.setSecondaryColor(rockBody); + ExtraBeesSpecies.SILVER.addProduct(EnumHoneyComb.STONE, 0.20f); + ExtraBeesSpecies.SILVER.addSpecialty(EnumHoneyComb.SILVER, 0.02f); + ExtraBeesSpecies.SILVER.importTemplate(ExtraBeesSpecies.MINERAL); + ExtraBeesSpecies.SILVER.recessive(); + ExtraBeesSpecies.SILVER.recessive(); + ExtraBeesSpecies.SILVER.setSecondaryColor(rockBody); + ExtraBeesSpecies.PLATINUM.addProduct(EnumHoneyComb.STONE, 0.20f); + ExtraBeesSpecies.PLATINUM.addSpecialty(EnumHoneyComb.PLATINUM, 0.01f); + ExtraBeesSpecies.PLATINUM.importTemplate(ExtraBeesSpecies.MINERAL); + ExtraBeesSpecies.PLATINUM.recessive(); + ExtraBeesSpecies.PLATINUM.setSecondaryColor(rockBody); + ExtraBeesSpecies.LAPIS.addProduct(EnumHoneyComb.STONE, 0.20f); + ExtraBeesSpecies.LAPIS.addSpecialty(EnumHoneyComb.LAPIS, 0.05f); + ExtraBeesSpecies.LAPIS.importTemplate(ExtraBeesSpecies.MINERAL); + ExtraBeesSpecies.LAPIS.setSecondaryColor(rockBody); + ExtraBeesSpecies.EMERALD.addProduct(EnumHoneyComb.STONE, 0.20f); + ExtraBeesSpecies.EMERALD.addSpecialty(EnumHoneyComb.EMERALD, 0.04f); + ExtraBeesSpecies.EMERALD.importTemplate(ExtraBeesSpecies.MINERAL); + ExtraBeesSpecies.EMERALD.setSecondaryColor(rockBody); + ExtraBeesSpecies.RUBY.addProduct(EnumHoneyComb.STONE, 0.20f); + ExtraBeesSpecies.RUBY.addSpecialty(EnumHoneyComb.RUBY, 0.03f); + ExtraBeesSpecies.RUBY.importTemplate(ExtraBeesSpecies.MINERAL); + ExtraBeesSpecies.RUBY.setSecondaryColor(rockBody); + ExtraBeesSpecies.SAPPHIRE.addProduct(EnumHoneyComb.STONE, 0.20f); + ExtraBeesSpecies.SAPPHIRE.addSpecialty(EnumHoneyComb.SAPPHIRE, 0.03f); + ExtraBeesSpecies.SAPPHIRE.importTemplate(ExtraBeesSpecies.MINERAL); + ExtraBeesSpecies.SAPPHIRE.setSecondaryColor(rockBody); + ExtraBeesSpecies.DIAMOND.addProduct(EnumHoneyComb.STONE, 0.20f); + ExtraBeesSpecies.DIAMOND.addSpecialty(EnumHoneyComb.DIAMOND, 0.01f); + ExtraBeesSpecies.DIAMOND.importTemplate(ExtraBeesSpecies.MINERAL); + ExtraBeesSpecies.DIAMOND.setSecondaryColor(rockBody); + ExtraBeesSpecies.UNSTABLE.importTemplate(ExtraBeesSpecies.MINERAL); + ExtraBeesSpecies.UNSTABLE.addProduct(EnumHoneyComb.BARREN, 0.20f); + ExtraBeesSpecies.UNSTABLE.setEffect(ExtraBeesEffect.RADIOACTIVE.getUID()); + ExtraBeesSpecies.UNSTABLE.setFertility(ForestryAllele.Fertility.Low); + ExtraBeesSpecies.UNSTABLE.setLifespan(ForestryAllele.Lifespan.Shortest); + ExtraBeesSpecies.UNSTABLE.recessive(); + ExtraBeesSpecies.NUCLEAR.importTemplate(ExtraBeesSpecies.UNSTABLE); + ExtraBeesSpecies.NUCLEAR.addProduct(EnumHoneyComb.BARREN, 0.20f); + ExtraBeesSpecies.NUCLEAR.recessive(); + ExtraBeesSpecies.RADIOACTIVE.importTemplate(ExtraBeesSpecies.NUCLEAR); + ExtraBeesSpecies.RADIOACTIVE.addProduct(EnumHoneyComb.BARREN, 0.20f); + ExtraBeesSpecies.RADIOACTIVE.addSpecialty(EnumHoneyComb.URANIUM, 0.02f); + ExtraBeesSpecies.RADIOACTIVE.setHasEffect(true); + ExtraBeesSpecies.RADIOACTIVE.recessive(); + ExtraBeesSpecies.ANCIENT.importTemplate(ForestryAllele.BeeSpecies.Noble); + ExtraBeesSpecies.ANCIENT.addProduct(EnumHoneyComb.OLD, 0.30f); + ExtraBeesSpecies.ANCIENT.setLifespan(ForestryAllele.Lifespan.Elongated); + ExtraBeesSpecies.PRIMEVAL.importTemplate(ExtraBeesSpecies.ANCIENT); + ExtraBeesSpecies.PRIMEVAL.addProduct(EnumHoneyComb.OLD, 0.30f); + ExtraBeesSpecies.PRIMEVAL.setLifespan(ForestryAllele.Lifespan.Long); + ExtraBeesSpecies.PREHISTORIC.importTemplate(ExtraBeesSpecies.ANCIENT); + ExtraBeesSpecies.PREHISTORIC.addProduct(EnumHoneyComb.OLD, 0.30f); + ExtraBeesSpecies.PREHISTORIC.setLifespan(ForestryAllele.Lifespan.Longer); + ExtraBeesSpecies.PREHISTORIC.setFertility(ForestryAllele.Fertility.Low); + ExtraBeesSpecies.PREHISTORIC.recessive(); + ExtraBeesSpecies.RELIC.importTemplate(ExtraBeesSpecies.ANCIENT); + ExtraBeesSpecies.RELIC.addProduct(EnumHoneyComb.OLD, 0.30f); + ExtraBeesSpecies.RELIC.setHasEffect(true); + ExtraBeesSpecies.RELIC.setLifespan(ForestryAllele.Lifespan.Longest); + ExtraBeesSpecies.COAL.importTemplate(ExtraBeesSpecies.ANCIENT); + ExtraBeesSpecies.COAL.setLifespan(ForestryAllele.Lifespan.Normal); + ExtraBeesSpecies.COAL.addProduct(EnumHoneyComb.OLD, 0.20f); + ExtraBeesSpecies.COAL.addSpecialty(EnumHoneyComb.COAL, 0.08f); + ExtraBeesSpecies.RESIN.importTemplate(ExtraBeesSpecies.COAL); + ExtraBeesSpecies.RESIN.addProduct(EnumHoneyComb.OLD, 0.20f); + ExtraBeesSpecies.RESIN.addSpecialty(EnumHoneyComb.RESIN, 0.05f); + ExtraBeesSpecies.RESIN.recessive(); + ExtraBeesSpecies.OIL.importTemplate(ExtraBeesSpecies.COAL); + ExtraBeesSpecies.OIL.addProduct(EnumHoneyComb.OLD, 0.20f); + ExtraBeesSpecies.OIL.addSpecialty(EnumHoneyComb.OIL, 0.05f); + ExtraBeesSpecies.DISTILLED.importTemplate(ExtraBeesSpecies.OIL); + ExtraBeesSpecies.DISTILLED.addProduct(EnumHoneyComb.OIL, 0.10f); + ExtraBeesSpecies.DISTILLED.recessive(); + ExtraBeesSpecies.FUEL.importTemplate(ExtraBeesSpecies.OIL); + ExtraBeesSpecies.FUEL.addProduct(EnumHoneyComb.OIL, 0.10f); + ExtraBeesSpecies.FUEL.addSpecialty(EnumHoneyComb.FUEL, 0.04f); + ExtraBeesSpecies.FUEL.setHasEffect(true); + ExtraBeesSpecies.CREOSOTE.importTemplate(ExtraBeesSpecies.COAL); + ExtraBeesSpecies.CREOSOTE.addProduct(EnumHoneyComb.COAL, 0.10f); + ExtraBeesSpecies.CREOSOTE.addSpecialty(EnumHoneyComb.CREOSOTE, 0.07f); + ExtraBeesSpecies.CREOSOTE.setHasEffect(true); + ExtraBeesSpecies.LATEX.importTemplate(ExtraBeesSpecies.RESIN); + ExtraBeesSpecies.LATEX.addProduct(EnumHoneyComb.RESIN, 0.10f); + ExtraBeesSpecies.LATEX.addSpecialty(EnumHoneyComb.LATEX, 0.05f); + ExtraBeesSpecies.LATEX.setHasEffect(true); + ExtraBeesSpecies.WATER.addProduct(EnumHoneyComb.WATER, 0.30f); + ExtraBeesSpecies.WATER.setIsSecret(false); + ExtraBeesSpecies.WATER.setTolerantFlyer(); + ExtraBeesSpecies.WATER.setHumidityTolerance(Tolerance.Both1); + ExtraBeesSpecies.WATER.setFlowerProvider(ExtraBeesFlowers.WATER.getUID()); + ExtraBeesSpecies.WATER.setFlowering(ForestryAllele.Flowering.Slow); + ExtraBeesSpecies.WATER.setEffect(ExtraBeesEffect.WATER.getUID()); + ExtraBeesSpecies.WATER.setHumidity(EnumHumidity.DAMP); + ExtraBeesSpecies.RIVER.importTemplate(ExtraBeesSpecies.WATER); + ExtraBeesSpecies.RIVER.addProduct(EnumHoneyComb.WATER, 0.30f); + ExtraBeesSpecies.RIVER.addSpecialty(EnumHoneyComb.CLAY, 0.20f); + ExtraBeesSpecies.RIVER.importTemplate(ExtraBeesSpecies.WATER); + ExtraBeesSpecies.OCEAN.importTemplate(ExtraBeesSpecies.WATER); + ExtraBeesSpecies.OCEAN.addProduct(EnumHoneyComb.WATER, 0.30f); + ExtraBeesSpecies.OCEAN.importTemplate(ExtraBeesSpecies.WATER); + ExtraBeesSpecies.OCEAN.recessive(); + ExtraBeesSpecies.INK.importTemplate(ExtraBeesSpecies.OCEAN); + ExtraBeesSpecies.INK.addProduct(EnumHoneyComb.WATER, 0.30f); + ExtraBeesSpecies.INK.addSpecialty(new ItemStack(Items.dye, 1, 0), 0.10f); + ExtraBeesSpecies.GROWING.importTemplate(ForestryAllele.BeeSpecies.Forest); + ExtraBeesSpecies.GROWING.addProduct(ItemHoneyComb.VanillaComb.HONEY.get(), 0.35f); + ExtraBeesSpecies.GROWING.setFlowering(ForestryAllele.Flowering.Average); + ExtraBeesSpecies.GROWING.setFlowerProvider(ExtraBeesFlowers.LEAVES.getUID()); + ExtraBeesSpecies.THRIVING.importTemplate(ExtraBeesSpecies.GROWING); + ExtraBeesSpecies.THRIVING.addProduct(ItemHoneyComb.VanillaComb.HONEY.get(), 0.35f); + ExtraBeesSpecies.THRIVING.setFlowering(ForestryAllele.Flowering.Fast); + ExtraBeesSpecies.BLOOMING.importTemplate(ExtraBeesSpecies.THRIVING); + ExtraBeesSpecies.BLOOMING.setFlowering(ForestryAllele.Flowering.Fastest); + ExtraBeesSpecies.BLOOMING.addProduct(ItemHoneyComb.VanillaComb.HONEY.get(), 0.35f); + ExtraBeesSpecies.BLOOMING.setFlowerProvider(ExtraBeesFlowers.Sapling.getUID()); + ExtraBeesSpecies.BLOOMING.setEffect(ExtraBeesEffect.BonemealSapling.getUID()); + ExtraBeesSpecies.SWEET.importTemplate(ForestryAllele.BeeSpecies.Rural); + ExtraBeesSpecies.SWEET.addProduct(ItemHoneyComb.VanillaComb.HONEY.get(), 0.40f); + ExtraBeesSpecies.SWEET.addProduct(new ItemStack(Items.sugar, 1, 0), 0.10f); + ExtraBeesSpecies.SWEET.setFlowerProvider(ExtraBeesFlowers.SUGAR.getUID()); + ExtraBeesSpecies.SUGAR.addProduct(ItemHoneyComb.VanillaComb.HONEY.get(), 0.40f); + ExtraBeesSpecies.SUGAR.addProduct(new ItemStack(Items.sugar, 1, 0), 0.20f); + ExtraBeesSpecies.SUGAR.importTemplate(ExtraBeesSpecies.SWEET); + ExtraBeesSpecies.RIPENING.addProduct(ItemHoneyComb.VanillaComb.HONEY.get(), 0.30f); + ExtraBeesSpecies.RIPENING.addProduct(new ItemStack(Items.sugar, 1, 0), 0.10f); + ExtraBeesSpecies.RIPENING.addSpecialty(EnumHoneyComb.FRUIT, 0.10f); + ExtraBeesSpecies.RIPENING.setFlowerProvider(ExtraBeesFlowers.Fruit.getUID()); + ExtraBeesSpecies.RIPENING.importTemplate(ExtraBeesSpecies.SUGAR); + ExtraBeesSpecies.FRUIT.importTemplate(ExtraBeesSpecies.RIPENING); + ExtraBeesSpecies.FRUIT.addProduct(ItemHoneyComb.VanillaComb.HONEY.get(), 0.30f); + ExtraBeesSpecies.FRUIT.addProduct(new ItemStack(Items.sugar, 1, 0), 0.15f); + ExtraBeesSpecies.FRUIT.addSpecialty(EnumHoneyComb.FRUIT, 0.20f); + ExtraBeesSpecies.FRUIT.setEffect(ExtraBeesEffect.BonemealFruit.getUID()); + ExtraBeesSpecies.FRUIT.setHasEffect(true); + ExtraBeesSpecies.ALCOHOL.importTemplate(ExtraBeesSpecies.SWEET); + ExtraBeesSpecies.ALCOHOL.addProduct(ItemHoneyComb.VanillaComb.WHEATEN.get(), 0.30f); + ExtraBeesSpecies.ALCOHOL.addSpecialty(EnumHoneyComb.ALCOHOL, 0.10f); + ExtraBeesSpecies.ALCOHOL.setEffect("forestry.effectDrunkard"); + ExtraBeesSpecies.ALCOHOL.recessive(); + ExtraBeesSpecies.FARM.addProduct(ItemHoneyComb.VanillaComb.WHEATEN.get(), 0.30f); + ExtraBeesSpecies.FARM.addSpecialty(EnumHoneyComb.SEED, 0.10f); + ExtraBeesSpecies.FARM.importTemplate(ForestryAllele.BeeSpecies.Rural); + ExtraBeesSpecies.MILK.addProduct(ItemHoneyComb.VanillaComb.WHEATEN.get(), 0.30f); + ExtraBeesSpecies.MILK.addSpecialty(EnumHoneyComb.MILK, 0.10f); + ExtraBeesSpecies.MILK.importTemplate(ForestryAllele.BeeSpecies.Rural); + ExtraBeesSpecies.COFFEE.addProduct(ItemHoneyComb.VanillaComb.WHEATEN.get(), 0.30f); + ExtraBeesSpecies.COFFEE.addSpecialty(EnumHoneyComb.COFFEE, 0.08f); + ExtraBeesSpecies.COFFEE.importTemplate(ForestryAllele.BeeSpecies.Rural); + ExtraBeesSpecies.SWAMP.addProduct(ItemHoneyComb.VanillaComb.MOSSY.get(), 0.30f); + ExtraBeesSpecies.SWAMP.importTemplate(ForestryAllele.BeeSpecies.Marshy); + ExtraBeesSpecies.SWAMP.setHumidity(EnumHumidity.DAMP); + ExtraBeesSpecies.SWAMP.setEffect(ExtraBeesEffect.SLOW.getUID()); + ExtraBeesSpecies.BOGGY.importTemplate(ExtraBeesSpecies.SWAMP); + ExtraBeesSpecies.BOGGY.addProduct(ItemHoneyComb.VanillaComb.MOSSY.get(), 0.30f); + ExtraBeesSpecies.BOGGY.importTemplate(ExtraBeesSpecies.SWAMP); + ExtraBeesSpecies.BOGGY.recessive(); + ExtraBeesSpecies.FUNGAL.importTemplate(ExtraBeesSpecies.BOGGY); + ExtraBeesSpecies.FUNGAL.addProduct(ItemHoneyComb.VanillaComb.MOSSY.get(), 0.30f); + ExtraBeesSpecies.FUNGAL.addSpecialty(EnumHoneyComb.FUNGAL, 0.15f); + ExtraBeesSpecies.FUNGAL.importTemplate(ExtraBeesSpecies.BOGGY); + ExtraBeesSpecies.FUNGAL.setEffect(ExtraBeesEffect.BonemealMushroom.getUID()); + ExtraBeesSpecies.FUNGAL.setHasEffect(true); + ExtraBeesSpecies.BASALT.addProduct(ItemHoneyComb.VanillaComb.SIMMERING.get(), 0.25f); + ExtraBeesSpecies.BASALT.importTemplate(ForestryAllele.BeeSpecies.Sinister); + ExtraBeesSpecies.BASALT.setEffect("forestry.effectAggressive"); + ExtraBeesSpecies.BASALT.setSecondaryColor(10101539); + ExtraBeesSpecies.BASALT.setHumidity(EnumHumidity.ARID); + ExtraBeesSpecies.BASALT.setTemperature(EnumTemperature.HELLISH); + ExtraBeesSpecies.TEMPERED.addProduct(ItemHoneyComb.VanillaComb.SIMMERING.get(), 0.25f); + ExtraBeesSpecies.TEMPERED.importTemplate(ExtraBeesSpecies.BASALT); + ExtraBeesSpecies.TEMPERED.setEffect(ExtraBeesEffect.METEOR.getUID()); + ExtraBeesSpecies.TEMPERED.recessive(); + ExtraBeesSpecies.TEMPERED.setSecondaryColor(10101539); + ExtraBeesSpecies.VOLCANIC.importTemplate(ExtraBeesSpecies.TEMPERED); + ExtraBeesSpecies.VOLCANIC.addProduct(ItemHoneyComb.VanillaComb.SIMMERING.get(), 0.25f); + ExtraBeesSpecies.VOLCANIC.addSpecialty(EnumHoneyComb.BLAZE, 0.10f); + ExtraBeesSpecies.VOLCANIC.setHasEffect(true); + ExtraBeesSpecies.VOLCANIC.setSecondaryColor(10101539); + ExtraBeesSpecies.MALICIOUS.importTemplate(ForestryAllele.BeeSpecies.Tropical); + ExtraBeesSpecies.MALICIOUS.addProduct(ItemHoneyComb.VanillaComb.SILKY.get(), 0.25f); + ExtraBeesSpecies.MALICIOUS.setSecondaryColor(431972); + ExtraBeesSpecies.MALICIOUS.setHumidity(EnumHumidity.DAMP); + ExtraBeesSpecies.MALICIOUS.setTemperature(EnumTemperature.WARM); + ExtraBeesSpecies.INFECTIOUS.importTemplate(ExtraBeesSpecies.MALICIOUS); + ExtraBeesSpecies.INFECTIOUS.addProduct(ItemHoneyComb.VanillaComb.SILKY.get(), 0.25f); + ExtraBeesSpecies.INFECTIOUS.setFlowering(ForestryAllele.Flowering.Slow); + ExtraBeesSpecies.INFECTIOUS.setSecondaryColor(431972); + ExtraBeesSpecies.VIRULENT.importTemplate(ExtraBeesSpecies.INFECTIOUS); + ExtraBeesSpecies.VIRULENT.addProduct(ItemHoneyComb.VanillaComb.SILKY.get(), 0.25f); + ExtraBeesSpecies.VIRULENT.addSpecialty(EnumHoneyComb.VENOMOUS, 0.12f); + ExtraBeesSpecies.VIRULENT.setFlowering(ForestryAllele.Flowering.Average); + ExtraBeesSpecies.VIRULENT.recessive(); + ExtraBeesSpecies.VIRULENT.setHasEffect(true); + ExtraBeesSpecies.VIRULENT.setSecondaryColor(431972); + ExtraBeesSpecies.VISCOUS.importTemplate(ForestryAllele.BeeSpecies.Tropical); + ExtraBeesSpecies.VISCOUS.setEffect(ExtraBeesEffect.ECTOPLASM.getUID()); + ExtraBeesSpecies.VISCOUS.addProduct(ItemHoneyComb.VanillaComb.SILKY.get(), 0.25f); + ExtraBeesSpecies.VISCOUS.setSecondaryColor(431972); + ExtraBeesSpecies.VISCOUS.setHumidity(EnumHumidity.DAMP); + ExtraBeesSpecies.VISCOUS.setSpeed(ForestryAllele.Speed.Slow); + ExtraBeesSpecies.VISCOUS.setTemperature(EnumTemperature.WARM); + ExtraBeesSpecies.GLUTINOUS.importTemplate(ExtraBeesSpecies.VISCOUS); + ExtraBeesSpecies.GLUTINOUS.addProduct(ItemHoneyComb.VanillaComb.SILKY.get(), 0.25f); + ExtraBeesSpecies.GLUTINOUS.setSpeed(ForestryAllele.Speed.Norm); + ExtraBeesSpecies.GLUTINOUS.setSecondaryColor(431972); + ExtraBeesSpecies.STICKY.importTemplate(ExtraBeesSpecies.GLUTINOUS); + ExtraBeesSpecies.STICKY.addProduct(ItemHoneyComb.VanillaComb.SILKY.get(), 0.25f); + ExtraBeesSpecies.STICKY.addSpecialty(EnumHoneyComb.SLIME, 0.12f); + ExtraBeesSpecies.STICKY.setSpeed(ForestryAllele.Speed.Fast); + ExtraBeesSpecies.STICKY.setHasEffect(true); + ExtraBeesSpecies.STICKY.setSecondaryColor(431972); + ExtraBeesSpecies.CORROSIVE.importTemplate(ExtraBeesSpecies.STICKY); + ExtraBeesSpecies.CORROSIVE.setHumidity(EnumHumidity.DAMP); + ExtraBeesSpecies.CORROSIVE.setTemperature(EnumTemperature.WARM); + ExtraBeesSpecies.CORROSIVE.setEffect(ExtraBeesEffect.ACID.getUID()); + ExtraBeesSpecies.CORROSIVE.setFlowering(ForestryAllele.Flowering.Average); + ExtraBeesSpecies.CORROSIVE.addProduct(ItemHoneyComb.VanillaComb.SILKY.get(), 20f); + ExtraBeesSpecies.CORROSIVE.recessive(); + ExtraBeesSpecies.CORROSIVE.setSecondaryColor(431972); + ExtraBeesSpecies.CAUSTIC.importTemplate(ExtraBeesSpecies.CORROSIVE); + ExtraBeesSpecies.CAUSTIC.addProduct(ItemHoneyComb.VanillaComb.SILKY.get(), 0.25f); + ExtraBeesSpecies.CAUSTIC.addSpecialty(EnumHoneyComb.ACIDIC, 0.03f); + ExtraBeesSpecies.CAUSTIC.setSecondaryColor(431972); + ExtraBeesSpecies.ACIDIC.importTemplate(ExtraBeesSpecies.CAUSTIC); + ExtraBeesSpecies.ACIDIC.addProduct(ItemHoneyComb.VanillaComb.SILKY.get(), 0.20f); + ExtraBeesSpecies.ACIDIC.addSpecialty(EnumHoneyComb.ACIDIC, 0.16f); + ExtraBeesSpecies.ACIDIC.setHasEffect(true); + ExtraBeesSpecies.ACIDIC.setSecondaryColor(431972); + ExtraBeesSpecies.EXCITED.setEffect(ExtraBeesEffect.LIGHTNING.getUID()); + ExtraBeesSpecies.EXCITED.addProduct(EnumHoneyComb.REDSTONE, 0.10f); + ExtraBeesSpecies.EXCITED.setCaveDwelling(); + ExtraBeesSpecies.EXCITED.setFlowerProvider(ExtraBeesFlowers.REDSTONE.getUID()); + ExtraBeesSpecies.ENERGETIC.importTemplate(ExtraBeesSpecies.EXCITED); + ExtraBeesSpecies.ENERGETIC.setEffect(ExtraBeesEffect.LIGHTNING.getUID()); + ExtraBeesSpecies.ENERGETIC.addProduct(EnumHoneyComb.REDSTONE, 0.12f); + ExtraBeesSpecies.ENERGETIC.recessive(); + ExtraBeesSpecies.ECSTATIC.importTemplate(ExtraBeesSpecies.ENERGETIC); + ExtraBeesSpecies.ECSTATIC.setEffect(ExtraBeesEffect.Power.getUID()); + ExtraBeesSpecies.ECSTATIC.addProduct(EnumHoneyComb.REDSTONE, 0.20f); + ExtraBeesSpecies.ECSTATIC.addSpecialty(EnumHoneyComb.IC2ENERGY, 0.08f); + ExtraBeesSpecies.ECSTATIC.setHasEffect(true); + ExtraBeesSpecies.ARTIC.importTemplate(ForestryAllele.BeeSpecies.Wintry); + ExtraBeesSpecies.ARTIC.addProduct(ItemHoneyComb.VanillaComb.FROZEN.get(), 0.25f); + ExtraBeesSpecies.ARTIC.setTemperature(EnumTemperature.ICY); + ExtraBeesSpecies.ARTIC.setSecondaryColor(14349811); + ExtraBeesSpecies.FREEZING.importTemplate(ExtraBeesSpecies.ARTIC); + ExtraBeesSpecies.FREEZING.addProduct(ItemHoneyComb.VanillaComb.FROZEN.get(), 0.20f); + ExtraBeesSpecies.FREEZING.addSpecialty(EnumHoneyComb.GLACIAL, 0.10f); + ExtraBeesSpecies.FREEZING.setSecondaryColor(14349811); + ExtraBeesSpecies.SHADOW.importTemplate(ExtraBeesSpecies.BASALT); + ExtraBeesSpecies.SHADOW.setNocturnal(); + ExtraBeesSpecies.SHADOW.addProduct(EnumHoneyComb.SHADOW, 0.05f); + ExtraBeesSpecies.SHADOW.setEffect(ExtraBeesEffect.BLINDNESS.getUID()); + ExtraBeesSpecies.SHADOW.setAllDay(false); + ExtraBeesSpecies.SHADOW.recessive(); + ExtraBeesSpecies.SHADOW.setSecondaryColor(3355443); + ExtraBeesSpecies.DARKENED.addProduct(EnumHoneyComb.SHADOW, 0.10f); + ExtraBeesSpecies.DARKENED.setNocturnal(); + ExtraBeesSpecies.DARKENED.importTemplate(ExtraBeesSpecies.SHADOW); + ExtraBeesSpecies.DARKENED.setSecondaryColor(3355443); + ExtraBeesSpecies.ABYSS.importTemplate(ExtraBeesSpecies.DARKENED); + ExtraBeesSpecies.ABYSS.setNocturnal(); + ExtraBeesSpecies.ABYSS.addProduct(EnumHoneyComb.SHADOW, 0.25f); + ExtraBeesSpecies.ABYSS.setEffect(ExtraBeesEffect.WITHER.getUID()); + ExtraBeesSpecies.ABYSS.setHasEffect(true); + ExtraBeesSpecies.ABYSS.setSecondaryColor(3355443); + ExtraBeesSpecies.CELEBRATORY.importTemplate(ForestryAllele.BeeSpecies.Merry); + ExtraBeesSpecies.CELEBRATORY.setEffect(ExtraBeesEffect.FIREWORKS.getUID()); + ExtraBeesSpecies.GLOWSTONE.importTemplate(ExtraBeesSpecies.BASALT); + ExtraBeesSpecies.GLOWSTONE.addProduct(EnumHoneyComb.GLOWSTONE, 0.15f); + ExtraBeesSpecies.GLOWSTONE.setSecondaryColor(10101539); + ExtraBeesSpecies.HAZARDOUS.importTemplate(ForestryAllele.BeeSpecies.Austere); + ExtraBeesSpecies.HAZARDOUS.addProduct(EnumHoneyComb.SALTPETER, 0.12f); + ExtraBeesSpecies.JADED.importTemplate(ForestryAllele.BeeSpecies.Imperial); + ExtraBeesSpecies.JADED.setFertility(ForestryAllele.Fertility.Maximum); + ExtraBeesSpecies.JADED.setFlowering(ForestryAllele.Flowering.Maximum); + ExtraBeesSpecies.JADED.setTerritory(ForestryAllele.Territory.Largest); + ExtraBeesSpecies.JADED.addProduct(ItemHoneyComb.VanillaComb.HONEY.get(), 0.30f); + ExtraBeesSpecies.JADED.addSpecialty(Mods.Forestry.stack("pollen"), 0.20f); + ExtraBeesSpecies.JADED.setHasEffect(true); + ExtraBeesSpecies.JADED.setSecondaryColor(14453483); + ExtraBeesSpecies.UNUSUAL.importTemplate(ForestryAllele.BeeSpecies.Ended); + ExtraBeesSpecies.UNUSUAL.setEffect(ExtraBeesEffect.GRAVITY.getUID()); + ExtraBeesSpecies.UNUSUAL.setSecondaryColor(12231403); + ExtraBeesSpecies.UNUSUAL.addProduct(ItemHoneyComb.VanillaComb.QUARTZ.get(), 0.25f); + ExtraBeesSpecies.SPATIAL.importTemplate(ExtraBeesSpecies.UNUSUAL); + ExtraBeesSpecies.SPATIAL.setEffect(ExtraBeesEffect.GRAVITY.getUID()); + ExtraBeesSpecies.SPATIAL.setSecondaryColor(10768076); + ExtraBeesSpecies.SPATIAL.addProduct(ItemHoneyComb.VanillaComb.QUARTZ.get(), 0.25f); + ExtraBeesSpecies.SPATIAL.addSpecialty(EnumHoneyComb.CERTUS, 0.05f); + ExtraBeesSpecies.QUANTUM.importTemplate(ExtraBeesSpecies.QUANTUM); + ExtraBeesSpecies.QUANTUM.setEffect(ExtraBeesEffect.TELEPORT.getUID()); + ExtraBeesSpecies.QUANTUM.setSecondaryColor(13963227); + ExtraBeesSpecies.QUANTUM.addProduct(ItemHoneyComb.VanillaComb.QUARTZ.get(), 0.25f); + ExtraBeesSpecies.QUANTUM.addSpecialty(EnumHoneyComb.CERTUS, 0.15f); + ExtraBeesSpecies.QUANTUM.addSpecialty(EnumHoneyComb.ENDERPEARL, 0.15f); + ExtraBeesSpecies.JADED.addSpecialty(EnumHoneyComb.PURPLE, 0.15f); + ExtraBeesSpecies.JADED.isCounted = false; + ExtraBeesSpecies.YELLORIUM.importTemplate(ExtraBeesSpecies.NUCLEAR); + ExtraBeesSpecies.YELLORIUM.addProduct(EnumHoneyComb.BARREN, 0.20f); + ExtraBeesSpecies.YELLORIUM.addSpecialty(EnumHoneyComb.YELLORIUM, 0.02f); + ExtraBeesSpecies.YELLORIUM.setEffect(ExtraBeesEffect.RADIOACTIVE.getUID()); + ExtraBeesSpecies.YELLORIUM.setFertility(ForestryAllele.Fertility.Low); + ExtraBeesSpecies.YELLORIUM.setLifespan(ForestryAllele.Lifespan.Shortest); + ExtraBeesSpecies.CYANITE.importTemplate(ExtraBeesSpecies.YELLORIUM); + ExtraBeesSpecies.CYANITE.addProduct(EnumHoneyComb.BARREN, 0.20f); + ExtraBeesSpecies.CYANITE.addSpecialty(EnumHoneyComb.CYANITE, 0.01f); + ExtraBeesSpecies.BLUTONIUM.importTemplate(ExtraBeesSpecies.CYANITE); + ExtraBeesSpecies.BLUTONIUM.addProduct(EnumHoneyComb.BARREN, 0.20f); + ExtraBeesSpecies.BLUTONIUM.addSpecialty(EnumHoneyComb.BLUTONIUM, 0.01f); + ExtraBeesSpecies.MYSTICAL.importTemplate(ForestryAllele.BeeSpecies.Noble); + for (final Map.Entry entry : ForestryAllele.BeeSpecies.Noble.getAllele().getProductChances().entrySet()) { + ExtraBeesSpecies.MYSTICAL.addProduct(entry.getKey(), entry.getValue()); + } + ExtraBeesSpecies.MYSTICAL.setFlowerProvider(ExtraBeesFlowers.Mystical.getUID()); + for (final ExtraBeesSpecies species2 : values()) { + if (species2.state != State.Active) { + AlleleManager.alleleRegistry.blacklistAllele(species2.getUID()); + } + for (final EnumBeeChromosome chromo : EnumBeeChromosome.values()) { + if (chromo != EnumBeeChromosome.HUMIDITY) { + final IAllele allele = species2.template[chromo.ordinal()]; + if (allele == null || !chromo.getAlleleClass().isInstance(allele)) { + throw new RuntimeException(species2.getName() + " has an invalid " + chromo.toString() + " chromosome!"); + } + } + } + } + for (int i = 0; i < 16; ++i) { + final ExtraBeesSpecies species3 = values()[ExtraBeesSpecies.RED.ordinal() + i]; + final EnumHoneyComb comb = EnumHoneyComb.values()[EnumHoneyComb.RED.ordinal() + i]; + species3.addProduct(ItemHoneyComb.VanillaComb.HONEY.get(), 0.75f); + species3.addSpecialty(comb, 0.25f); + species3.setSecondaryColor(9240320); + } + for (final ExtraBeesSpecies species2 : values()) { + species2.registerTemplate(); + } + } + + void setBranch(final IClassification branch) { + this.branch = branch; + } + + public boolean isJubilant(final World world, final int biomeid, final int x, final int y, final int z) { + return true; + } + + @Override + public boolean isJubilant(final IBeeGenome genome, final IBeeHousing housing) { + return true; + } + + @Override + public int getIconColour(final int renderPass) { + return (renderPass == 0) ? this.primaryColor : ((renderPass == 1) ? this.secondaryColor : 16777215); + } + + @Override + public IIconProvider getIconProvider() { + return this; + } + + @Override + public IIcon getIcon(final short texUID) { + return null; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + String iconType = "default"; + String mod = "forestry"; + if (this == ExtraBeesSpecies.JADED) { + iconType = "jaded"; + mod = "extrabees"; + } + this.icons = new IIcon[EnumBeeType.values().length][3]; + final IIcon body1 = BinnieCore.proxy.getIcon(register, mod, "bees/" + iconType + "/body1"); + for (int i = 0; i < EnumBeeType.values().length; ++i) { + if (EnumBeeType.values()[i] != EnumBeeType.NONE) { + this.icons[i][0] = BinnieCore.proxy.getIcon(register, mod, "bees/" + iconType + "/" + EnumBeeType.values()[i].toString().toLowerCase(Locale.ENGLISH) + ".outline"); + this.icons[i][1] = ((EnumBeeType.values()[i] != EnumBeeType.LARVAE) ? body1 : BinnieCore.proxy.getIcon(register, mod, "bees/" + iconType + "/" + EnumBeeType.values()[i].toString().toLowerCase(Locale.ENGLISH) + ".body")); + this.icons[i][2] = BinnieCore.proxy.getIcon(register, mod, "bees/" + iconType + "/" + EnumBeeType.values()[i].toString().toLowerCase(Locale.ENGLISH) + ".body2"); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final EnumBeeType type, final int renderPass) { + if (this.icons == null) { + return ExtraBeesSpecies.ARID.getIcon(type, renderPass); + } + return this.icons[type.ordinal()][renderPass]; + } + + @Override + public IBeeRoot getRoot() { + return Binnie.Genetics.getBeeRoot(); + } + + @Override + public boolean isNocturnal() { + return this.nocturnal; + } + + public void setNocturnal() { + this.nocturnal = true; + } + + public void setAllDay() { + this.setAllDay(true); + } + + public void setAllDay(final boolean allDay) { + if (allDay) { + this.template[EnumBeeChromosome.NOCTURNAL.ordinal()] = AlleleManager.alleleRegistry.getAllele("forestry.boolTrue"); + } + else { + this.template[EnumBeeChromosome.NOCTURNAL.ordinal()] = AlleleManager.alleleRegistry.getAllele("forestry.boolFalse"); + } + } + + public void setCaveDwelling() { + this.template[EnumBeeChromosome.CAVE_DWELLING.ordinal()] = AlleleManager.alleleRegistry.getAllele("forestry.boolTrue"); + } + + public void setTolerantFlyer() { + this.template[EnumBeeChromosome.TOLERANT_FLYER.ordinal()] = AlleleManager.alleleRegistry.getAllele("forestry.boolTrue"); + } + + public void setFlowerProvider(final String uid) { + final IAllele allele = AlleleManager.alleleRegistry.getAllele(uid); + if (allele instanceof IAlleleFlowers) { + this.template[EnumBeeChromosome.FLOWER_PROVIDER.ordinal()] = allele; + } + } + + public void setEffect(final String uid) { + final IAllele allele = AlleleManager.alleleRegistry.getAllele(uid); + if (allele instanceof IAlleleBeeEffect) { + this.template[EnumBeeChromosome.EFFECT.ordinal()] = AlleleManager.alleleRegistry.getAllele(uid); + } + } + + private void setFertility(final ForestryAllele.Fertility fert) { + this.template[EnumBeeChromosome.FERTILITY.ordinal()] = fert.getAllele(); + } + + private void setLifespan(final ForestryAllele.Lifespan fert) { + this.template[EnumBeeChromosome.LIFESPAN.ordinal()] = fert.getAllele(); + } + + private void setSpeed(final ForestryAllele.Speed fert) { + this.template[EnumBeeChromosome.SPEED.ordinal()] = fert.getAllele(); + } + + private void setTerritory(final ForestryAllele.Territory fert) { + this.template[EnumBeeChromosome.TERRITORY.ordinal()] = fert.getAllele(); + } + + private void setFlowering(final ForestryAllele.Flowering fert) { + this.template[EnumBeeChromosome.FLOWERING.ordinal()] = fert.getAllele(); + } + + private void setHumidityTolerance(final Tolerance fert) { + this.template[EnumBeeChromosome.HUMIDITY_TOLERANCE.ordinal()] = fert.getAllele(); + } + + private void setTemperatureTolerance(final Tolerance both1) { + this.template[EnumBeeChromosome.TEMPERATURE_TOLERANCE.ordinal()] = both1.getAllele(); + } + + @Override + public float getResearchSuitability(final ItemStack itemstack) { + if (itemstack == null) { + return 0.0f; + } + for (final ItemStack stack : this.products.keySet()) { + if (stack.isItemEqual(itemstack)) { + return 1.0f; + } + } + for (final ItemStack stack : this.specialties.keySet()) { + if (stack.isItemEqual(itemstack)) { + return 1.0f; + } + } + if (itemstack.getItem() == Items.glass_bottle) { + return 0.9f; + } + if (itemstack.getItem() == Mods.Forestry.item("honeyDrop")) { + return 0.5f; + } + if (itemstack.getItem() == Mods.Forestry.item("honeydew")) { + return 0.7f; + } + if (itemstack.getItem() == Mods.Forestry.item("beeComb")) { + return 0.4f; + } + if (AlleleManager.alleleRegistry.isIndividual(itemstack)) { + return 1.0f; + } + for (final Map.Entry entry : this.getRoot().getResearchCatalysts().entrySet()) { + if (entry.getKey().isItemEqual(itemstack)) { + return entry.getValue(); + } + } + return 0.0f; + } + + @Override + public ItemStack[] getResearchBounty(final World world, final GameProfile researcher, final IIndividual individual, final int bountyLevel) { + final ArrayList bounty = new ArrayList(); + ItemStack research = null; + if (world.rand.nextFloat() < 10.0f / bountyLevel) { + final Collection combinations = this.getRoot().getCombinations(this); + if (combinations.size() > 0) { + final IMutation[] candidates = combinations.toArray(new IMutation[0]); + research = AlleleManager.alleleRegistry.getMutationNoteStack(researcher, candidates[world.rand.nextInt(candidates.length)]); + } + } + if (research != null) { + bounty.add(research); + } + if (bountyLevel > 10) { + for (final ItemStack stack : this.specialties.keySet()) { + final ItemStack stack2 = stack.copy(); + stack2.stackSize = world.rand.nextInt((int) (bountyLevel / 2.0f)) + 1; + bounty.add(stack2); + } + } + for (final ItemStack stack : this.products.keySet()) { + final ItemStack stack2 = stack.copy(); + stack2.stackSize = world.rand.nextInt((int) (bountyLevel / 2.0f)) + 1; + bounty.add(stack2); + } + return bounty.toArray(new ItemStack[0]); + } + + @Override + public String getEntityTexture() { + return "/gfx/forestry/entities/bees/honeyBee.png"; + } + + @Override + public int getComplexity() { + return 1 + this.getGeneticAdvancement(this, new ArrayList()); + } + + private int getGeneticAdvancement(final IAllele species, final ArrayList exclude) { + final int own = 1; + int highest = 0; + exclude.add(species); + for (final IMutation mutation : this.getRoot().getPaths(species, EnumBeeChromosome.SPECIES)) { + if (!exclude.contains(mutation.getAllele0())) { + final int otherAdvance = this.getGeneticAdvancement(mutation.getAllele0(), exclude); + if (otherAdvance > highest) { + highest = otherAdvance; + } + } + if (!exclude.contains(mutation.getAllele1())) { + final int otherAdvance = this.getGeneticAdvancement(mutation.getAllele1(), exclude); + if (otherAdvance <= highest) { + continue; + } + highest = otherAdvance; + } + } + return own + ((highest < 0) ? 0 : highest); + } + + @Override + public String getUnlocalizedName() { + return this.getUID(); + } + + @Override + public Map getProductChances() { + return this.getProducts(); + } + + @Override + public Map getSpecialtyChances() { + return this.getSpecialty(); + } + + public enum State + { + Active, + Inactive, + Deprecated; + } +} diff --git a/src/main/java/binnie/extrabees/genetics/ModuleGenetics.java b/src/main/java/binnie/extrabees/genetics/ModuleGenetics.java new file mode 100644 index 00000000..097cac71 --- /dev/null +++ b/src/main/java/binnie/extrabees/genetics/ModuleGenetics.java @@ -0,0 +1,79 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.genetics; + +import net.minecraft.block.Block; +import forestry.api.apiculture.IBee; +import forestry.api.apiculture.IBeeGenome; +import forestry.api.genetics.IIndividual; +import forestry.api.apiculture.EnumBeeType; +import binnie.core.BinnieCore; +import forestry.api.genetics.IGenome; +import forestry.api.apiculture.IAlleleBeeSpecies; +import net.minecraft.init.Items; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import binnie.Binnie; +import forestry.api.recipes.RecipeManagers; +import binnie.extrabees.genetics.effect.ExtraBeesEffect; +import cpw.mods.fml.common.registry.GameRegistry; +import binnie.extrabees.genetics.effect.BlockEctoplasm; +import binnie.extrabees.ExtraBees; +import binnie.extrabees.genetics.items.ItemDictionary; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.AlleleManager; +import binnie.core.IInitializable; + +public class ModuleGenetics implements IInitializable +{ + @Override + public void preInit() { + for (final ExtraBeesSpecies species : ExtraBeesSpecies.values()) { + AlleleManager.alleleRegistry.registerAllele(species); + } + ExtraBees.dictionary = new ItemDictionary(); + GameRegistry.registerBlock(ExtraBees.ectoplasm = new BlockEctoplasm(), "ectoplasm"); + } + + @Override + public void init() { + ExtraBeesEffect.doInit(); + ExtraBeesFlowers.doInit(); + ExtraBeesSpecies.doInit(); + ExtraBeeMutation.doInit(); + ExtraBeesBranch.doInit(); + } + + @Override + public void postInit() { + int ebSpeciesCount = 0; + int ebTotalSpeciesCount = 0; + for (final ExtraBeesSpecies species : ExtraBeesSpecies.values()) { + ++ebTotalSpeciesCount; + if (!AlleleManager.alleleRegistry.isBlacklisted(species.getUID())) { + ++ebSpeciesCount; + } + } + RecipeManagers.carpenterManager.addRecipe(100, Binnie.Liquid.getLiquidStack("water", 2000), (ItemStack) null, new ItemStack(ExtraBees.dictionary), new Object[] { "X#X", "YEY", "RDR", '#', Blocks.glass_pane, 'X', Items.gold_ingot, 'Y', "ingotTin", 'R', Items.redstone, 'D', Items.diamond, 'E', Items.emerald }); + } + + public static IGenome getGenome(final IAlleleBeeSpecies allele0) { + return Binnie.Genetics.getBeeRoot().templateAsGenome(Binnie.Genetics.getBeeRoot().getTemplate(allele0.getUID())); + } + + public static ItemStack getBeeIcon(final IAlleleBeeSpecies species) { + if (species == null) { + return null; + } + final IAllele[] template = Binnie.Genetics.getBeeRoot().getTemplate(species.getUID()); + if (template == null) { + return null; + } + final IBeeGenome genome = Binnie.Genetics.getBeeRoot().templateAsGenome(template); + final IBee bee = Binnie.Genetics.getBeeRoot().getBee(BinnieCore.proxy.getWorld(), genome); + final ItemStack item = Binnie.Genetics.getBeeRoot().getMemberStack(bee, EnumBeeType.PRINCESS.ordinal()); + return item; + } +} diff --git a/src/main/java/binnie/extrabees/genetics/effect/BlockEctoplasm.java b/src/main/java/binnie/extrabees/genetics/effect/BlockEctoplasm.java new file mode 100644 index 00000000..5c780167 --- /dev/null +++ b/src/main/java/binnie/extrabees/genetics/effect/BlockEctoplasm.java @@ -0,0 +1,43 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.genetics.effect; + +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import java.util.Random; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.extrabees.ExtraBees; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.block.BlockWeb; + +public class BlockEctoplasm extends BlockWeb +{ + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister register) { + this.blockIcon = ExtraBees.proxy.getIcon(register, "ectoplasm"); + } + + public BlockEctoplasm() { + this.setLightOpacity(1); + this.setHardness(0.5f); + } + + @Override + public int quantityDropped(final Random rand) { + return (rand.nextInt(5) == 0) ? 1 : 0; + } + + @Override + public Item getItemDropped(final int p_149650_1_, final Random p_149650_2_, final int p_149650_3_) { + return Items.slime_ball; + } + + @Override + public String getUnlocalizedName() { + return "extrabees.block.ectoplasm"; + } +} diff --git a/src/main/java/binnie/extrabees/genetics/effect/EntityBeeLightning.java b/src/main/java/binnie/extrabees/genetics/effect/EntityBeeLightning.java new file mode 100644 index 00000000..52c1ec46 --- /dev/null +++ b/src/main/java/binnie/extrabees/genetics/effect/EntityBeeLightning.java @@ -0,0 +1,63 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.genetics.effect; + +import java.util.List; +import net.minecraft.entity.Entity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import net.minecraft.entity.effect.EntityLightningBolt; + +public class EntityBeeLightning extends EntityLightningBolt +{ + int lightningState; + int boltLivingTime; + + public EntityBeeLightning(final World par1World, final double par2, final double par4, final double par6) { + super(par1World, par2, par4, par6); + this.lightningState = 2; + this.boltLivingTime = this.rand.nextInt(3) + 1; + } + + @Override + public void onUpdate() { + this.onEntityUpdate(); + --this.lightningState; + if (this.lightningState < 0) { + if (this.boltLivingTime == 0) { + this.setDead(); + } + else if (this.lightningState < -this.rand.nextInt(10)) { + --this.boltLivingTime; + this.lightningState = 1; + this.boltVertex = this.rand.nextLong(); + if (!this.worldObj.isRemote && this.worldObj.doChunksNearChunkExist(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ), 10)) { + final int i = MathHelper.floor_double(this.posX); + final int j = MathHelper.floor_double(this.posY); + final int k = MathHelper.floor_double(this.posZ); + if (this.worldObj.getBlock(i, j, k) == null && Blocks.fire.canPlaceBlockAt(this.worldObj, i, j, k)) { + this.worldObj.setBlock(i, j, k, Blocks.fire); + } + } + } + } + if (this.lightningState >= 0) { + if (this.worldObj.isRemote) { + this.worldObj.lastLightningBolt = 2; + } + else { + final double d0 = 3.0; + final List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, AxisAlignedBB.getBoundingBox(this.posX - d0, this.posY - d0, this.posZ - d0, this.posX + d0, this.posY + 6.0 + d0, this.posZ + d0)); + for (int l = 0; l < list.size(); ++l) { + final Entity entity = (Entity) list.get(l); + entity.onStruckByLightning(this); + } + } + } + } +} diff --git a/src/main/java/binnie/extrabees/genetics/effect/ExtraBeesEffect.java b/src/main/java/binnie/extrabees/genetics/effect/ExtraBeesEffect.java new file mode 100644 index 00000000..0017c6b5 --- /dev/null +++ b/src/main/java/binnie/extrabees/genetics/effect/ExtraBeesEffect.java @@ -0,0 +1,589 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.genetics.effect; + +import java.util.Calendar; +import java.util.ArrayList; + +import forestry.api.apiculture.IArmorApiarist; +import net.minecraft.tileentity.TileEntity; + +import cofh.api.energy.IEnergyReceiver; + +import net.minecraft.item.ItemDye; +import net.minecraft.item.ItemStack; + +import binnie.extrabees.genetics.ExtraBeesFlowers; +import binnie.Binnie; + +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.IFluidHandler; + +import net.minecraft.entity.item.EntityFireworkRocket; +import net.minecraft.potion.PotionEffect; +import net.minecraft.potion.Potion; +import net.minecraft.util.DamageSource; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.projectile.EntitySmallFireball; +import net.minecraft.world.WorldServer; + +import forestry.api.apiculture.BeeManager; +import forestry.api.apiculture.IBeeHousing; +import forestry.api.apiculture.IBeeGenome; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.entity.Entity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLiving; +import net.minecraft.world.World; + +import binnie.extrabees.ExtraBees; +import forestry.api.genetics.IEffectData; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.AlleleManager; + +import java.util.List; + +import forestry.api.apiculture.IAlleleBeeEffect; +import forestry.core.proxy.Proxies; + +public enum ExtraBeesEffect implements IAlleleBeeEffect +{ + ECTOPLASM, + ACID, + SPAWN_ZOMBIE, + SPAWN_SKELETON, + SPAWN_CREEPER, + LIGHTNING, + RADIOACTIVE, + METEOR, + HUNGER, + FOOD, + BLINDNESS, + CONFUSION, + FIREWORKS, + FESTIVAL, + BIRTHDAY, + TELEPORT, + GRAVITY, + THIEF, + WITHER, + WATER, + SLOW, + BonemealSapling, + BonemealFruit, + BonemealMushroom, + Power; + + String fx; + public boolean combinable; + public boolean dominant; + public int id; + private String uid; + static List birthdays; + + private ExtraBeesEffect() { + this.fx = ""; + this.uid = this.toString().toLowerCase(); + this.combinable = false; + this.dominant = true; + } + + public static void doInit() { + ExtraBeesEffect.BLINDNESS.setFX("blindness"); + ExtraBeesEffect.FOOD.setFX("food"); + ExtraBeesEffect.GRAVITY.setFX("gravity"); + ExtraBeesEffect.THIEF.setFX("gravity"); + ExtraBeesEffect.TELEPORT.setFX("gravity"); + ExtraBeesEffect.LIGHTNING.setFX("lightning"); + ExtraBeesEffect.METEOR.setFX("meteor"); + ExtraBeesEffect.RADIOACTIVE.setFX("radioactive"); + ExtraBeesEffect.WATER.setFX("water"); + ExtraBeesEffect.WITHER.setFX("wither"); + for (final ExtraBeesEffect effect : values()) { + effect.register(); + } + } + + private void setFX(final String string) { + this.fx = "particles/" + string; + } + + public void register() { + AlleleManager.alleleRegistry.registerAllele(this); + } + + @Override + public boolean isCombinable() { + return this.combinable; + } + + @Override + public IEffectData validateStorage(final IEffectData storedData) { + return storedData; + } + + @Override + public String getName() { + return ExtraBees.proxy.localise("effect." + this.name().toString().toLowerCase() + ".name"); + } + + @Override + public boolean isDominant() { + return this.dominant; + } + + public void spawnMob(final World world, final int x, final int y, final int z, final String name) { + if (this.anyPlayerInRange(world, x, y, z, 16)) { + final double var1 = x + world.rand.nextFloat(); + final double var2 = y + world.rand.nextFloat(); + final double var3 = z + world.rand.nextFloat(); + world.spawnParticle("smoke", var1, var2, var3, 0.0, 0.0, 0.0); + world.spawnParticle("flame", var1, var2, var3, 0.0, 0.0, 0.0); + final EntityLiving var4 = (EntityLiving) EntityList.createEntityByName(name, world); + if (var4 == null) { + return; + } + final int var5 = world.getEntitiesWithinAABB(var4.getClass(), AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1).expand(8.0, 4.0, 8.0)).size(); + if (var5 >= 6) { + return; + } + if (var4 != null) { + final double var6 = x + (world.rand.nextDouble() - world.rand.nextDouble()) * 4.0; + final double var7 = y + world.rand.nextInt(3) - 1; + final double var8 = z + (world.rand.nextDouble() - world.rand.nextDouble()) * 4.0; + var4.setLocationAndAngles(var6, var7, var8, world.rand.nextFloat() * 360.0f, 0.0f); + if (var4.getCanSpawnHere()) { + world.spawnEntityInWorld(var4); + world.playAuxSFX(2004, x, y, z, 0); + var4.spawnExplosionParticle(); + } + } + } + } + + private boolean anyPlayerInRange(final World world, final int x, final int y, final int z, final int distance) { + return world.getClosestPlayer(x + 0.5, y + 0.5, z + 0.5, distance) != null; + } + + public static void doAcid(final World world, final int x, final int y, final int z) { + final Block block = world.getBlock(x, y, z); + if (block == Blocks.cobblestone || block == Blocks.stone) { + world.setBlock(x, y, z, Blocks.gravel, 0, 0); + } + else if (block == Blocks.dirt | block == Blocks.grass) { + world.setBlock(x, y, z, Blocks.sand, 0, 0); + } + } + + @Override + public String getUID() { + return "extrabees.effect." + this.uid; + } + + @Override + public IEffectData doEffect(final IBeeGenome genome, final IEffectData storedData, final IBeeHousing housing) { + final World world = housing.getWorld(); + final int xHouse = housing.getCoordinates().posX; + final int yHouse = housing.getCoordinates().posY; + final int zHouse = housing.getCoordinates().posZ; + final int[] area = this.getModifiedArea(genome, housing); + final int xd = 1 + area[0] / 2; + final int yd = 1 + area[1] / 2; + final int zd = 1 + area[2] / 2; + final int x1 = xHouse - xd + world.rand.nextInt(2 * xd + 1); + int y1 = yHouse - yd + world.rand.nextInt(2 * yd + 1); + final int z1 = zHouse - zd + world.rand.nextInt(2 * zd + 1); + switch (this) { + case ECTOPLASM: { + if (world.rand.nextInt(100) < 4) { + if (world.isAirBlock(x1, y1, z1) && (world.isBlockNormalCubeDefault(x1, y1 - 1, z1, false) || world.getBlock(x1, y1 - 1, z1) == ExtraBees.ectoplasm)) { + world.setBlock(x1, y1, z1, ExtraBees.ectoplasm, 0, 0); + } + return null; + } + break; + } + case ACID: { + if (world.rand.nextInt(100) < 6) { + doAcid(world, x1, y1, z1); + break; + } + break; + } + case SPAWN_ZOMBIE: { + if (world.rand.nextInt(200) < 2) { + this.spawnMob(world, x1, y1, z1, "Zombie"); + break; + } + break; + } + case SPAWN_SKELETON: { + if (world.rand.nextInt(200) < 2) { + this.spawnMob(world, x1, y1, z1, "Skeleton"); + break; + } + break; + } + case SPAWN_CREEPER: { + if (world.rand.nextInt(200) < 2) { + this.spawnMob(world, x1, y1, z1, "Creeper"); + break; + } + break; + } + case LIGHTNING: { + if (world.rand.nextInt(100) < 1 && world.canBlockSeeTheSky(x1, y1, z1) && world instanceof WorldServer) { + ((WorldServer) world).addWeatherEffect(new EntityBeeLightning(world, x1, y1, z1)); + break; + } + break; + } + case METEOR: { + if (world.rand.nextInt(100) < 1 && world.canBlockSeeTheSky(x1, y1, z1)) { + ((WorldServer) world).spawnEntityInWorld(new EntitySmallFireball(world, x1, y1 + 64, z1, 0.0, -0.6, 0.0)); + break; + } + break; + } + case RADIOACTIVE: { + for (final EntityLivingBase entity : this.getEntities(EntityLivingBase.class, genome, housing)) { + int damage = 4; + if (entity instanceof EntityPlayer) { + final int count = wearsItems((EntityPlayer) entity); + if (count > 3) { + continue; + } + if (count > 2) { + damage = 1; + } + else if (count > 1) { + damage = 2; + } + else if (count > 0) { + damage = 3; + } + } + entity.attackEntityFrom(DamageSource.generic, damage); + } + break; + } + case FOOD: { + for (final EntityLivingBase entity : this.getEntities(EntityLivingBase.class, genome, housing)) { + if (entity instanceof EntityPlayer) { + final EntityPlayer player = (EntityPlayer) entity; + player.getFoodStats().addStats(2, 0.2f); + } + } + break; + } + case HUNGER: { + for (final EntityLivingBase entity : this.getEntities(EntityLivingBase.class, genome, housing)) { + if (entity instanceof EntityPlayer) { + final EntityPlayer player = (EntityPlayer) entity; + if (world.rand.nextInt(4) < wearsItems(player)) { + continue; + } + player.getFoodStats().addExhaustion(4.0f); + player.addPotionEffect(new PotionEffect(Potion.hunger.id, 100)); + } + } + break; + } + case BLINDNESS: { + for (final EntityLivingBase entity : this.getEntities(EntityLivingBase.class, genome, housing)) { + if (entity instanceof EntityPlayer) { + final EntityPlayer player = (EntityPlayer) entity; + if (world.rand.nextInt(4) < wearsItems(player)) { + continue; + } + player.addPotionEffect(new PotionEffect(Potion.blindness.id, 200)); + } + } + break; + } + case SLOW: { + for (final EntityLivingBase entity : this.getEntities(EntityLivingBase.class, genome, housing)) { + if (entity instanceof EntityPlayer) { + final EntityPlayer player = (EntityPlayer) entity; + if (world.rand.nextInt(4) < wearsItems(player)) { + continue; + } + player.addPotionEffect(new PotionEffect(Potion.weakness.id, 200)); + } + } + break; + } + case CONFUSION: { + for (final EntityLivingBase entity : this.getEntities(EntityLivingBase.class, genome, housing)) { + if (entity instanceof EntityPlayer) { + final EntityPlayer player = (EntityPlayer) entity; + if (world.rand.nextInt(4) < wearsItems(player)) { + continue; + } + player.addPotionEffect(new PotionEffect(Potion.confusion.id, 200)); + } + } + break; + } + case BIRTHDAY: + case FESTIVAL: + case FIREWORKS: { + if (world.rand.nextInt((this == ExtraBeesEffect.FIREWORKS) ? 8 : 12) < 1) { + final FireworkCreator.Firework firework = new FireworkCreator.Firework(); + switch (this) { + case BIRTHDAY: { + firework.setShape(FireworkCreator.Shape.Star); + firework.addColor(16768256); + for (final Birthday birthday : ExtraBeesEffect.birthdays) { + if (birthday.isToday()) { + firework.addColor(16711680); + firework.addColor(65280); + firework.addColor(255); + firework.setTrail(); + break; + } + } + } + case FIREWORKS: { + firework.setShape(FireworkCreator.Shape.Ball); + firework.addColor(genome.getPrimary().getIconColour(0)); + firework.addColor(genome.getPrimary().getIconColour(0)); + firework.addColor(genome.getPrimary().getIconColour(1)); + firework.addColor(genome.getSecondary().getIconColour(0)); + firework.addColor(genome.getSecondary().getIconColour(0)); + firework.addColor(genome.getPrimary().getIconColour(1)); + firework.setTrail(); + break; + } + } + final EntityFireworkRocket var11 = new EntityFireworkRocket(world, x1, y1, z1, firework.getFirework()); + if (world.canBlockSeeTheSky(x1, y1, z1)) { + ((WorldServer) world).spawnEntityInWorld(var11); + } + break; + } + break; + } + case GRAVITY: { + final List entities2 = this.getEntities(Entity.class, genome, housing); + for (final Entity entity2 : entities2) { + float entityStrength = 1.0f; + if (entity2 instanceof EntityPlayer) { + entityStrength *= 100.0f; + } + final double dx = x1 - entity2.posX; + final double dy = y1 - entity2.posY; + final double dz = z1 - entity2.posZ; + if (dx * dx + dy * dy + dz * dz < 2.0) { + return null; + } + final double strength = 0.5 / (dx * dx + dy * dy + dz * dz) * entityStrength; + entity2.addVelocity(dx * strength, dy * strength, dz * strength); + } + break; + } + case THIEF: { + final List entities3 = this.getEntities(EntityPlayer.class, genome, housing); + for (final EntityPlayer entity3 : entities3) { + final double dx = x1 - entity3.posX; + final double dy = y1 - entity3.posY; + final double dz = z1 - entity3.posZ; + if (dx * dx + dy * dy + dz * dz < 2.0) { + return null; + } + final double strength = 0.5 / (dx * dx + dy * dy + dz * dz); + entity3.addVelocity(-dx * strength, -dy * strength, -dz * strength); + } + break; + } + case TELEPORT: { + if (world.rand.nextInt(80) > 1) { + return null; + } + final List entities4 = this.getEntities(Entity.class, genome, housing); + if (entities4.size() == 0) { + return null; + } + final Entity entity4 = entities4.get(world.rand.nextInt(entities4.size())); + if (!(entity4 instanceof EntityLiving)) { + return null; + } + final float jumpDist = 5.0f; + if (y1 < 4) { + y1 = 4; + } + if (!world.isAirBlock(x1, y1, z1) || !world.isAirBlock(x1, y1 + 1, z1)) { + return null; + } + ((EntityLiving) entity4).setPositionAndUpdate(x1, y1, z1); + ((EntityLiving) entity4).addPotionEffect(new PotionEffect(Potion.confusion.id, 160, 10)); + break; + } + case WATER: { + if (world.rand.nextInt(120) > 1) { + return null; + } + final TileEntity tile = world.getTileEntity(x1, y1, z1); + if (tile instanceof IFluidHandler) { + ((IFluidHandler) tile).fill(ForgeDirection.UP, Binnie.Liquid.getLiquidStack("water", 100), true); + break; + } + break; + } + case BonemealSapling: { + if (world.rand.nextInt(20) > 1) { + return null; + } + if (ExtraBeesFlowers.Sapling.isAcceptedFlower(world, null, x1, y1, z1)) { + ItemDye.applyBonemeal(new ItemStack(Blocks.dirt, 1), world, x1, y1, z1, (EntityPlayer) null); + break; + } + break; + } + case BonemealFruit: { + if (world.rand.nextInt(20) > 1) { + return null; + } + if (ExtraBeesFlowers.Fruit.isAcceptedFlower(world, null, x1, y1, z1)) { + ItemDye.applyBonemeal(new ItemStack(Blocks.dirt, 1), world, x1, y1, z1, (EntityPlayer) null); + break; + } + break; + } + case BonemealMushroom: { + if (world.rand.nextInt(20) > 1) { + return null; + } + if (world.getBlock(x1, y1, z1) == Blocks.brown_mushroom || world.getBlock(x1, y1, z1) == Blocks.red_mushroom) { + ItemDye.applyBonemeal(new ItemStack(Blocks.dirt, 1), world, x1, y1, z1, (EntityPlayer) null); + break; + } + break; + } + case Power: { + final TileEntity tile2 = world.getTileEntity(x1, y1, z1); + if (tile2 instanceof IEnergyReceiver) { + ((IEnergyReceiver) tile2).receiveEnergy(ForgeDirection.getOrientation(0), 5, true); + break; + } + break; + } + } + return null; + } + + protected int[] getModifiedArea(final IBeeGenome genome, final IBeeHousing housing) { + final int[] territory; + final int[] area = territory = genome.getTerritory(); + final int n = 0; + territory[n] *= (int) (BeeManager.beeRoot.createBeeHousingModifier(housing).getTerritoryModifier(genome, 1.0f) * 3.0f); + final int[] array = area; + final int n2 = 1; + array[n2] *= (int) (BeeManager.beeRoot.createBeeHousingModifier(housing).getTerritoryModifier(genome, 1.0f) * 3.0f); + final int[] array2 = area; + final int n3 = 2; + array2[n3] *= (int) (BeeManager.beeRoot.createBeeHousingModifier(housing).getTerritoryModifier(genome, 1.0f) * 3.0f); + if (area[0] < 1) { + area[0] = 1; + } + if (area[1] < 1) { + area[1] = 1; + } + if (area[2] < 1) { + area[2] = 1; + } + return area; + } + + @Override + public IEffectData doFX(final IBeeGenome genome, final IEffectData storedData, final IBeeHousing housing) { + Proxies.render.addBeeHiveFX("particles/swarm_bee", housing.getWorld(), housing.getBeeFXCoordinates().xCoord, housing.getBeeFXCoordinates().yCoord, housing.getBeeFXCoordinates().zCoord, genome.getPrimary().getIconColour(0)); + return storedData; + } + + public String getFX() { + return this.fx; + } + + public List getEntities(final Class eClass, final IBeeGenome genome, final IBeeHousing housing) { + final int[] area = genome.getTerritory(); + final int[] offset = { -Math.round(area[0] / 2), -Math.round(area[1] / 2), -Math.round(area[2] / 2) }; + final int[] min = { housing.getCoordinates().posX + offset[0], housing.getCoordinates().posY + offset[1], housing.getCoordinates().posZ + offset[2] }; + final int[] max = { housing.getCoordinates().posX + offset[0] + area[0], housing.getCoordinates().posY + offset[1] + area[1], housing.getCoordinates().posZ + offset[2] + area[2] }; + final AxisAlignedBB box = AxisAlignedBB.getBoundingBox(min[0], min[1], min[2], max[0], max[1], max[2]); + return housing.getWorld().getEntitiesWithinAABB(eClass, box); + } + + public static boolean wearsHelmet(final EntityPlayer player) { + final ItemStack armorItem = player.inventory.armorInventory[3]; + return armorItem != null && armorItem.getItem() instanceof IArmorApiarist; + } + + public static boolean wearsChest(final EntityPlayer player) { + final ItemStack armorItem = player.inventory.armorInventory[2]; + return armorItem != null && armorItem.getItem() instanceof IArmorApiarist; + } + + public static boolean wearsLegs(final EntityPlayer player) { + final ItemStack armorItem = player.inventory.armorInventory[1]; + return armorItem != null && armorItem.getItem() instanceof IArmorApiarist; + } + + public static boolean wearsBoots(final EntityPlayer player) { + final ItemStack armorItem = player.inventory.armorInventory[0]; + return armorItem != null && armorItem.getItem() instanceof IArmorApiarist; + } + + public static int wearsItems(final EntityPlayer player) { + int count = 0; + if (wearsHelmet(player)) { + ++count; + } + if (wearsChest(player)) { + ++count; + } + if (wearsLegs(player)) { + ++count; + } + if (wearsBoots(player)) { + ++count; + } + return count; + } + + @Override + public String getUnlocalizedName() { + return this.getUID(); + } + + static { + (ExtraBeesEffect.birthdays = new ArrayList()).add(new Birthday(3, 10, "Binnie")); + } + + public static class Birthday + { + int day; + int month; + String name; + + public boolean isToday() { + return Calendar.getInstance().get(5) == this.month && Calendar.getInstance().get(2) == this.day; + } + + public String getName() { + return this.name; + } + + private Birthday(final int day, final int month, final String name) { + this.day = day; + this.month = month + 1; + this.name = name; + } + } +} diff --git a/src/main/java/binnie/extrabees/genetics/effect/FireworkCreator.java b/src/main/java/binnie/extrabees/genetics/effect/FireworkCreator.java new file mode 100644 index 00000000..5ba3caa9 --- /dev/null +++ b/src/main/java/binnie/extrabees/genetics/effect/FireworkCreator.java @@ -0,0 +1,88 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.genetics.effect; + +import net.minecraft.init.Items; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import java.util.ArrayList; + +public class FireworkCreator +{ + public enum Shape + { + Ball, + LargeBall, + Star, + Creeper, + Burst; + } + + public static class Firework + { + boolean flicker; + boolean trail; + ArrayList colors; + byte shape; + + public Firework() { + this.flicker = false; + this.trail = false; + this.colors = new ArrayList(); + this.shape = 0; + } + + public void setFlicker() { + this.flicker = true; + } + + public void setTrail() { + this.trail = true; + } + + public void setShape(final Shape shape) { + this.shape = (byte) shape.ordinal(); + } + + public void addColor(final int color) { + this.colors.add(color); + } + + NBTTagCompound getNBT() { + final NBTTagCompound nbt = new NBTTagCompound(); + if (this.flicker) { + nbt.setBoolean("Flicker", true); + } + if (this.trail) { + nbt.setBoolean("Trail", true); + } + if (this.colors.size() == 0) { + this.addColor(16777215); + } + final int[] array = new int[this.colors.size()]; + for (int i = 0; i < this.colors.size(); ++i) { + array[i] = this.colors.get(i); + } + nbt.setIntArray("Colors", array); + nbt.setByte("Type", this.shape); + return nbt; + } + + public ItemStack getFirework() { + final NBTTagCompound var15 = new NBTTagCompound(); + final NBTTagCompound var16 = new NBTTagCompound(); + final NBTTagList var17 = new NBTTagList(); + var17.appendTag(this.getNBT()); + var16.setTag("Explosions", var17); + var16.setByte("Flight", (byte) 0); + var15.setTag("Fireworks", var16); + final ItemStack item = new ItemStack(Items.fireworks); + item.setTagCompound(var15); + return item; + } + } +} diff --git a/src/main/java/binnie/extrabees/genetics/items/ItemDictionary.java b/src/main/java/binnie/extrabees/genetics/items/ItemDictionary.java new file mode 100644 index 00000000..cea4295d --- /dev/null +++ b/src/main/java/binnie/extrabees/genetics/items/ItemDictionary.java @@ -0,0 +1,75 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.genetics.items; + +import binnie.extrabees.core.ExtraBeeGUID; +import net.minecraft.world.World; +import forestry.api.core.Tabs; +import net.minecraft.creativetab.CreativeTabs; +import java.util.List; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.extrabees.ExtraBees; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraft.item.Item; + +public class ItemDictionary extends Item +{ + IIcon iconMaster; + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.itemIcon = ExtraBees.proxy.getIcon(register, "apiaristDatabase"); + this.iconMaster = ExtraBees.proxy.getIcon(register, "masterApiaristDatabase"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(final int par1) { + return (par1 == 0) ? this.itemIcon : this.iconMaster; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(final ItemStack par1ItemStack, final EntityPlayer par2EntityPlayer, final List par3List, final boolean par4) { + super.addInformation(par1ItemStack, par2EntityPlayer, par3List, par4); + if (par1ItemStack.getItemDamage() > 0) { + par3List.add("Flora-in-a-box"); + } + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(final Item par1, final CreativeTabs par2CreativeTabs, final List par3List) { + super.getSubItems(par1, par2CreativeTabs, par3List); + par3List.add(new ItemStack(par1, 1, 1)); + } + + public ItemDictionary() { + this.setCreativeTab(Tabs.tabApiculture); + this.setUnlocalizedName("dictionary"); + this.setMaxStackSize(1); + } + + @Override + public ItemStack onItemRightClick(final ItemStack itemstack, final World world, final EntityPlayer player) { + if (itemstack.getItemDamage() == 0) { + ExtraBees.proxy.openGui(ExtraBeeGUID.Database, player, (int) player.posX, (int) player.posY, (int) player.posZ); + } + else { + ExtraBees.proxy.openGui(ExtraBeeGUID.DatabaseNEI, player, (int) player.posX, (int) player.posY, (int) player.posZ); + } + return itemstack; + } + + @Override + public String getItemStackDisplayName(final ItemStack i) { + return (i.getItemDamage() == 0) ? "Apiarist Database" : "Master Apiarist Database"; + } +} diff --git a/src/main/java/binnie/extrabees/genetics/items/ItemPunnettSquare.java b/src/main/java/binnie/extrabees/genetics/items/ItemPunnettSquare.java new file mode 100644 index 00000000..b9c0a7f9 --- /dev/null +++ b/src/main/java/binnie/extrabees/genetics/items/ItemPunnettSquare.java @@ -0,0 +1,41 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.genetics.items; + +import binnie.extrabees.core.ExtraBeeGUID; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import net.minecraft.item.ItemStack; +import net.minecraft.creativetab.CreativeTabs; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.extrabees.ExtraBees; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.Item; + +public class ItemPunnettSquare extends Item +{ + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.itemIcon = ExtraBees.proxy.getIcon(register, ""); + } + + public ItemPunnettSquare() { + this.setCreativeTab(CreativeTabs.tabTools); + this.setMaxStackSize(1); + } + + @Override + public String getItemStackDisplayName(final ItemStack itemstack) { + return "Punnett Square"; + } + + @Override + public ItemStack onItemRightClick(final ItemStack itemstack, final World world, final EntityPlayer player) { + ExtraBees.proxy.openGui(ExtraBeeGUID.PunnettSquare, player, (int) player.posX, (int) player.posY, (int) player.posZ); + return itemstack; + } +} diff --git a/src/main/java/binnie/extrabees/gui/WindowAlvearyFrame.java b/src/main/java/binnie/extrabees/gui/WindowAlvearyFrame.java new file mode 100644 index 00000000..058f9ea2 --- /dev/null +++ b/src/main/java/binnie/extrabees/gui/WindowAlvearyFrame.java @@ -0,0 +1,52 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.gui; + +import binnie.extrabees.ExtraBees; +import binnie.core.AbstractMod; +import binnie.craftgui.minecraft.control.ControlSlot; +import binnie.core.machines.TileEntityMachine; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.core.machines.Machine; +import binnie.craftgui.minecraft.Window; + +public class WindowAlvearyFrame extends Window +{ + Machine machine; + ControlPlayerInventory playerInventory; + + public WindowAlvearyFrame(final EntityPlayer player, final IInventory inventory, final Side side) { + super(176.0f, 144.0f, player, inventory, side); + this.machine = ((TileEntityMachine) inventory).getMachine(); + } + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + if (player == null || inventory == null) { + return null; + } + return new WindowAlvearyFrame(player, inventory, side); + } + + @Override + public void initialiseClient() { + this.setTitle("Frame Housing"); + this.playerInventory = new ControlPlayerInventory(this); + final ControlSlot slot = new ControlSlot(this, 79.0f, 30.0f); + slot.assign(0); + } + + @Override + public AbstractMod getMod() { + return ExtraBees.instance; + } + + @Override + public String getName() { + return "AlvearyFrame"; + } +} diff --git a/src/main/java/binnie/extrabees/gui/WindowAlvearyHatchery.java b/src/main/java/binnie/extrabees/gui/WindowAlvearyHatchery.java new file mode 100644 index 00000000..0bdb0fb9 --- /dev/null +++ b/src/main/java/binnie/extrabees/gui/WindowAlvearyHatchery.java @@ -0,0 +1,53 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.gui; + +import binnie.extrabees.ExtraBees; +import binnie.core.AbstractMod; +import binnie.extrabees.apiary.machine.AlvearyHatchery; +import binnie.craftgui.minecraft.control.ControlSlotArray; +import binnie.core.machines.TileEntityMachine; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.core.machines.Machine; +import binnie.craftgui.minecraft.Window; + +public class WindowAlvearyHatchery extends Window +{ + Machine machine; + ControlPlayerInventory playerInventory; + + public WindowAlvearyHatchery(final EntityPlayer player, final IInventory inventory, final Side side) { + super(176.0f, 144.0f, player, inventory, side); + this.machine = ((TileEntityMachine) inventory).getMachine(); + } + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + if (player == null || inventory == null) { + return null; + } + return new WindowAlvearyHatchery(player, inventory, side); + } + + @Override + public void initialiseClient() { + this.setTitle("Hatchery"); + this.playerInventory = new ControlPlayerInventory(this); + final ControlSlotArray slot = new ControlSlotArray(this, 43, 30, 5, 1); + slot.create(AlvearyHatchery.slotLarvae); + } + + @Override + public AbstractMod getMod() { + return ExtraBees.instance; + } + + @Override + public String getName() { + return "AlvearyHatchery"; + } +} diff --git a/src/main/java/binnie/extrabees/gui/WindowAlvearyIndustrialFrame.java b/src/main/java/binnie/extrabees/gui/WindowAlvearyIndustrialFrame.java new file mode 100644 index 00000000..284f81e9 --- /dev/null +++ b/src/main/java/binnie/extrabees/gui/WindowAlvearyIndustrialFrame.java @@ -0,0 +1,52 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.gui; + +import binnie.extrabees.ExtraBees; +import binnie.core.AbstractMod; +import binnie.craftgui.minecraft.control.ControlSlot; +import binnie.core.machines.TileEntityMachine; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.core.machines.Machine; +import binnie.craftgui.minecraft.Window; + +public class WindowAlvearyIndustrialFrame extends Window +{ + Machine machine; + ControlPlayerInventory playerInventory; + + public WindowAlvearyIndustrialFrame(final EntityPlayer player, final IInventory inventory, final Side side) { + super(176.0f, 144.0f, player, inventory, side); + this.machine = ((TileEntityMachine) inventory).getMachine(); + } + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + if (player == null || inventory == null) { + return null; + } + return new WindowAlvearyIndustrialFrame(player, inventory, side); + } + + @Override + public void initialiseClient() { + this.setTitle("Industrial Frame Housing"); + this.playerInventory = new ControlPlayerInventory(this); + final ControlSlot slot = new ControlSlot(this, 79.0f, 30.0f); + slot.assign(0); + } + + @Override + public AbstractMod getMod() { + return ExtraBees.instance; + } + + @Override + public String getName() { + return "AlvearyIndustrialFrame"; + } +} diff --git a/src/main/java/binnie/extrabees/gui/WindowAlvearyMutator.java b/src/main/java/binnie/extrabees/gui/WindowAlvearyMutator.java new file mode 100644 index 00000000..dd94264a --- /dev/null +++ b/src/main/java/binnie/extrabees/gui/WindowAlvearyMutator.java @@ -0,0 +1,70 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.gui; + +import binnie.extrabees.ExtraBees; +import binnie.core.AbstractMod; +import binnie.craftgui.minecraft.control.ControlItemDisplay; +import net.minecraft.item.ItemStack; +import binnie.extrabees.apiary.machine.AlvearyMutator; +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.minecraft.control.ControlSlot; +import binnie.core.machines.TileEntityMachine; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.core.machines.Machine; +import binnie.craftgui.minecraft.Window; + +public class WindowAlvearyMutator extends Window +{ + Machine machine; + ControlPlayerInventory playerInventory; + + public WindowAlvearyMutator(final EntityPlayer player, final IInventory inventory, final Side side) { + super(176.0f, 176.0f, player, inventory, side); + this.machine = ((TileEntityMachine) inventory).getMachine(); + } + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + if (player == null || inventory == null) { + return null; + } + return new WindowAlvearyMutator(player, inventory, side); + } + + @Override + public void initialiseClient() { + this.setTitle("Mutator"); + this.playerInventory = new ControlPlayerInventory(this); + final ControlSlot slot = new ControlSlot(this, 79.0f, 30.0f); + slot.assign(0); + new ControlText(this, new IArea(0.0f, 52.0f, this.w(), 16.0f), "Possible Mutagens:", TextJustification.MiddleCenter).setColour(5592405); + final int size = AlvearyMutator.getMutagens().size(); + final int w = size * 18; + if (size > 0) { + float x = (this.w() - w) / 2.0f; + for (final ItemStack stack : AlvearyMutator.getMutagens()) { + final ControlItemDisplay display = new ControlItemDisplay(this, x, 66.0f); + display.setItemStack(stack); + display.hastooltip = true; + x += 18.0f; + } + } + } + + @Override + public AbstractMod getMod() { + return ExtraBees.instance; + } + + @Override + public String getName() { + return "AlvearyMutator"; + } +} diff --git a/src/main/java/binnie/extrabees/gui/WindowAlvearyStimulator.java b/src/main/java/binnie/extrabees/gui/WindowAlvearyStimulator.java new file mode 100644 index 00000000..299182b4 --- /dev/null +++ b/src/main/java/binnie/extrabees/gui/WindowAlvearyStimulator.java @@ -0,0 +1,56 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.gui; + +import binnie.extrabees.ExtraBees; +import binnie.core.AbstractMod; +import binnie.extrabees.apiary.machine.AlvearyStimulator; +import binnie.craftgui.minecraft.control.ControlSlot; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.minecraft.control.ControlEnergyBar; +import binnie.core.machines.TileEntityMachine; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.core.machines.Machine; +import binnie.craftgui.minecraft.Window; + +public class WindowAlvearyStimulator extends Window +{ + Machine machine; + ControlPlayerInventory playerInventory; + + public WindowAlvearyStimulator(final EntityPlayer player, final IInventory inventory, final Side side) { + super(176.0f, 144.0f, player, inventory, side); + this.machine = ((TileEntityMachine) inventory).getMachine(); + } + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + if (player == null || inventory == null) { + return null; + } + return new WindowAlvearyStimulator(player, inventory, side); + } + + @Override + public void initialiseClient() { + this.setTitle("Stimulator"); + new ControlEnergyBar(this, 75, 29, 60, 16, Position.Left); + final ControlSlot slot = new ControlSlot(this, 41.0f, 28.0f); + slot.assign(AlvearyStimulator.slotCircuit); + this.playerInventory = new ControlPlayerInventory(this); + } + + @Override + public AbstractMod getMod() { + return ExtraBees.instance; + } + + @Override + public String getName() { + return "AlvearyStimulator"; + } +} diff --git a/src/main/java/binnie/extrabees/gui/database/ControlBiomes.java b/src/main/java/binnie/extrabees/gui/database/ControlBiomes.java new file mode 100644 index 00000000..18c18fcb --- /dev/null +++ b/src/main/java/binnie/extrabees/gui/database/ControlBiomes.java @@ -0,0 +1,67 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.gui.database; + +import forestry.api.apiculture.IBee; +import forestry.api.apiculture.IBeeGenome; +import binnie.core.BinnieCore; +import binnie.Binnie; +import forestry.api.apiculture.IAlleleBeeSpecies; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.CraftGUI; +import net.minecraft.world.biome.BiomeGenBase; +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.core.Attribute; +import java.util.ArrayList; +import binnie.craftgui.core.IWidget; +import java.util.List; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +public class ControlBiomes extends Control implements ITooltip +{ + List tolerated; + + public ControlBiomes(final IWidget parent, final int x, final int y, final int width, final int height) { + super(parent, x, y, width * 16, height * 16); + this.tolerated = new ArrayList(); + this.addAttribute(Attribute.MouseOver); + } + + @Override + public void getTooltip(final Tooltip list) { + if (this.tolerated.isEmpty()) { + return; + } + final int x = (int) (this.getRelativeMousePosition().x() / 16.0f); + final int y = (int) (this.getRelativeMousePosition().y() / 16.0f); + final int i = x + y * 8; + if (i < this.tolerated.size()) { + list.add(BiomeGenBase.getBiome(this.tolerated.get(i)).biomeName); + } + } + + @Override + public void onRenderForeground() { + for (int i = 0; i < this.tolerated.size(); ++i) { + final int x = i % 8 * 16; + final int y = i / 8 * 16; + if (BiomeGenBase.getBiome(i) != null) { + CraftGUI.Render.colour(BiomeGenBase.getBiome(i).color); + } + CraftGUI.Render.texture(CraftGUITexture.Button, new IArea(x, y, 16.0f, 16.0f)); + } + } + + public void setSpecies(final IAlleleBeeSpecies species) { + this.tolerated.clear(); + if (species == null) { + return; + } + final IBeeGenome genome = Binnie.Genetics.getBeeRoot().templateAsGenome(Binnie.Genetics.getBeeRoot().getTemplate(species.getUID())); + final IBee bee = Binnie.Genetics.getBeeRoot().getBee(BinnieCore.proxy.getWorld(), genome); + } +} diff --git a/src/main/java/binnie/extrabees/gui/database/ControlClimateBar.java b/src/main/java/binnie/extrabees/gui/database/ControlClimateBar.java new file mode 100644 index 00000000..d0dfdb70 --- /dev/null +++ b/src/main/java/binnie/extrabees/gui/database/ControlClimateBar.java @@ -0,0 +1,156 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.gui.database; + +import forestry.api.genetics.EnumTolerance; +import forestry.api.apiculture.IBeeGenome; +import binnie.Binnie; +import forestry.api.apiculture.IAlleleBeeSpecies; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.CraftGUI; +import forestry.api.core.EnumTemperature; +import forestry.api.core.EnumHumidity; +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.core.Attribute; +import java.util.ArrayList; +import binnie.craftgui.core.IWidget; +import java.util.List; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +public class ControlClimateBar extends Control implements ITooltip +{ + boolean isHumidity; + List tolerated; + int[] tempColours; + int[] humidColours; + + public ControlClimateBar(final IWidget parent, final int x, final int y, final int width, final int height) { + super(parent, x, y, width, height); + this.isHumidity = false; + this.tolerated = new ArrayList(); + this.tempColours = new int[] { 65531, 7912447, 5242672, 16776960, 16753152, 16711680 }; + this.humidColours = new int[] { 16770979, 1769216, 3177727 }; + this.addAttribute(Attribute.MouseOver); + } + + public ControlClimateBar(final IWidget parent, final int x, final int y, final int width, final int height, final boolean humidity) { + super(parent, x, y, width, height); + this.isHumidity = false; + this.tolerated = new ArrayList(); + this.tempColours = new int[] { 65531, 7912447, 5242672, 16776960, 16753152, 16711680 }; + this.humidColours = new int[] { 16770979, 1769216, 3177727 }; + this.addAttribute(Attribute.MouseOver); + this.isHumidity = true; + } + + @Override + public void getTooltip(final Tooltip list) { + if (this.tolerated.isEmpty()) { + return; + } + final int types = this.isHumidity ? 3 : 6; + final int type = (int) ((int) (this.getRelativeMousePosition().x() - 1.0f) / ((this.getSize().x() - 2.0f) / types)); + if (!this.tolerated.contains(type)) { + return; + } + if (type < types) { + if (this.isHumidity) { + list.add(EnumHumidity.values()[type].name); + } + else { + list.add(EnumTemperature.values()[type + 1].name); + } + } + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.texture(CraftGUITexture.EnergyBarBack, this.getArea()); + final int types = this.isHumidity ? 3 : 6; + final int w = (int) ((this.getSize().x() - 2.0f) / types); + for (int i = 0; i < types; ++i) { + final int x = i * w; + if (this.tolerated.contains(i)) { + int colour = 0; + if (this.isHumidity) { + colour = this.humidColours[i]; + } + else { + colour = this.tempColours[i]; + } + CraftGUI.Render.solid(new IArea(x + 1, 1.0f, w, this.getSize().y() - 2.0f), colour); + } + } + CraftGUI.Render.texture(CraftGUITexture.EnergyBarGlass, this.getArea()); + } + + public void setSpecies(final IAlleleBeeSpecies species) { + this.tolerated.clear(); + if (species == null) { + return; + } + int main; + EnumTolerance tolerance; + if (!this.isHumidity) { + main = species.getTemperature().ordinal() - 1; + final IBeeGenome genome = Binnie.Genetics.getBeeRoot().templateAsGenome(Binnie.Genetics.getBeeRoot().getTemplate(species.getUID())); + tolerance = genome.getToleranceTemp(); + } + else { + main = species.getHumidity().ordinal(); + final IBeeGenome genome = Binnie.Genetics.getBeeRoot().templateAsGenome(Binnie.Genetics.getBeeRoot().getTemplate(species.getUID())); + tolerance = genome.getToleranceHumid(); + } + this.tolerated.add(main); + switch (tolerance) { + case BOTH_5: + case UP_5: { + this.tolerated.add(main + 5); + } + case BOTH_4: + case UP_4: { + this.tolerated.add(main + 4); + } + case BOTH_3: + case UP_3: { + this.tolerated.add(main + 3); + } + case BOTH_2: + case UP_2: { + this.tolerated.add(main + 2); + } + case BOTH_1: + case UP_1: { + this.tolerated.add(main + 1); + break; + } + } + switch (tolerance) { + case BOTH_5: + case DOWN_5: { + this.tolerated.add(main - 5); + } + case BOTH_4: + case DOWN_4: { + this.tolerated.add(main - 4); + } + case BOTH_3: + case DOWN_3: { + this.tolerated.add(main - 3); + } + case BOTH_2: + case DOWN_2: { + this.tolerated.add(main - 2); + } + case BOTH_1: + case DOWN_1: { + this.tolerated.add(main - 1); + break; + } + } + } +} diff --git a/src/main/java/binnie/extrabees/gui/database/ControlProductsBox.java b/src/main/java/binnie/extrabees/gui/database/ControlProductsBox.java new file mode 100644 index 00000000..ddddb70c --- /dev/null +++ b/src/main/java/binnie/extrabees/gui/database/ControlProductsBox.java @@ -0,0 +1,76 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.gui.database; + +import java.util.List; +import forestry.api.apiculture.IBeeGenome; +import forestry.api.genetics.IAllele; +import net.minecraft.item.ItemStack; +import java.util.Map; +import java.util.ArrayList; +import binnie.core.BinnieCore; +import binnie.Binnie; +import binnie.craftgui.core.IWidget; +import forestry.api.apiculture.IAlleleBeeSpecies; +import binnie.craftgui.controls.listbox.ControlListBox; + +public class ControlProductsBox extends ControlListBox +{ + private int index; + private Type type; + IAlleleBeeSpecies species; + + @Override + public IWidget createOption(final Product value, final int y) { + return new ControlProductsItem(getContent(), value, y); + } + + public ControlProductsBox(final IWidget parent, final int x, final int y, final int width, final int height, final Type type) { + super(parent, x, y, width, height, 12.0f); + this.species = null; + this.type = type; + } + + public void setSpecies(final IAlleleBeeSpecies species) { + if (species != this.species && (this.species = species) != null) { + final IAllele[] template = Binnie.Genetics.getBeeRoot().getTemplate(species.getUID()); + if (template == null) { + return; + } + final IBeeGenome genome = Binnie.Genetics.getBeeRoot().templateAsGenome(template); + final float speed = genome.getSpeed(); + final float modeSpeed = Binnie.Genetics.getBeeRoot().getBeekeepingMode(BinnieCore.proxy.getWorld()).getBeeModifier().getProductionModifier(genome, 1.0f); + final List strings = new ArrayList(); + if (this.type == Type.Products) { + for (final Map.Entry entry : species.getProductChances().entrySet()) { + strings.add(new Product(entry.getKey(), speed * modeSpeed * entry.getValue())); + } + } + else { + for (final Map.Entry entry : species.getSpecialtyChances().entrySet()) { + strings.add(new Product(entry.getKey(), speed * modeSpeed * entry.getValue())); + } + } + this.setOptions(strings); + } + } + + enum Type + { + Products, + Specialties; + } + + class Product + { + ItemStack item; + float chance; + + public Product(final ItemStack item, final float chance) { + this.item = item; + this.chance = chance; + } + } +} diff --git a/src/main/java/binnie/extrabees/gui/database/ControlProductsItem.java b/src/main/java/binnie/extrabees/gui/database/ControlProductsItem.java new file mode 100644 index 00000000..cacd03a4 --- /dev/null +++ b/src/main/java/binnie/extrabees/gui/database/ControlProductsItem.java @@ -0,0 +1,43 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.gui.database; + +import binnie.craftgui.controls.ControlText; +import java.text.DecimalFormat; +import binnie.craftgui.core.geometry.CraftGUIUtil; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.controls.listbox.ControlList; +import binnie.craftgui.minecraft.control.ControlItemDisplay; +import binnie.craftgui.controls.listbox.ControlOption; + +public class ControlProductsItem extends ControlOption +{ + ControlItemDisplay item; + + public ControlProductsItem(final ControlList controlList, final ControlProductsBox.Product value, final int y) { + super(controlList, value, y); + (this.item = new ControlItemDisplay(this, 4.0f, 4.0f)).setTooltip(); + final ControlText textWidget = new ControlTextCentered(this, 2.0f, ""); + CraftGUIUtil.moveWidget(textWidget, new IPoint(12.0f, 0.0f)); + if (value != null) { + this.item.setItemStack(value.item); + final float time = (int) (55000.0 / value.chance); + final float seconds = time / 20.0f; + final float minutes = seconds / 60.0f; + final float hours = minutes / 60.0f; + final DecimalFormat df = new DecimalFormat("#.0"); + if (hours > 1.0f) { + textWidget.setValue("Every " + df.format(hours) + " hours"); + } + else if (minutes > 1.0f) { + textWidget.setValue("Every " + df.format(minutes) + " min."); + } + else { + textWidget.setValue("Every " + df.format(seconds) + " sec."); + } + } + } +} diff --git a/src/main/java/binnie/extrabees/gui/database/PageSpeciesClimate.java b/src/main/java/binnie/extrabees/gui/database/PageSpeciesClimate.java new file mode 100644 index 00000000..ef3932df --- /dev/null +++ b/src/main/java/binnie/extrabees/gui/database/PageSpeciesClimate.java @@ -0,0 +1,35 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.gui.database; + +import forestry.api.apiculture.IAlleleBeeSpecies; +import forestry.api.genetics.IAlleleSpecies; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.mod.database.DatabaseTab; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.mod.database.PageSpecies; + +public class PageSpeciesClimate extends PageSpecies +{ + ControlClimateBar tempBar; + ControlClimateBar humidBar; + ControlBiomes biomes; + + public PageSpeciesClimate(final IWidget parent, final DatabaseTab tab) { + super(parent, tab); + new ControlTextCentered(this, 8.0f, "Climate"); + this.tempBar = new ControlClimateBar(this, 8, 24, 128, 12); + this.humidBar = new ControlClimateBar(this, 8, 42, 128, 12, true); + new ControlTextCentered(this, 70.0f, "Biomes"); + this.biomes = new ControlBiomes(this, 8, 90, 8, 4); + } + + @Override + public void onValueChanged(final IAlleleSpecies species) { + this.tempBar.setSpecies((IAlleleBeeSpecies) species); + this.humidBar.setSpecies((IAlleleBeeSpecies) species); + this.biomes.setSpecies((IAlleleBeeSpecies) species); + } +} diff --git a/src/main/java/binnie/extrabees/gui/database/PageSpeciesGenome.java b/src/main/java/binnie/extrabees/gui/database/PageSpeciesGenome.java new file mode 100644 index 00000000..9d3ee2ce --- /dev/null +++ b/src/main/java/binnie/extrabees/gui/database/PageSpeciesGenome.java @@ -0,0 +1,179 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.gui.database; + +import forestry.api.apiculture.IBee; +import forestry.api.apiculture.IBeeGenome; +import forestry.api.genetics.IAllele; +import binnie.core.BinnieCore; +import binnie.Binnie; +import forestry.api.genetics.IAlleleSpecies; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.mod.database.DatabaseTab; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.mod.database.PageSpecies; + +public class PageSpeciesGenome extends PageSpecies +{ + ControlText pageSpeciesGenome_Title; + ControlText pageSpeciesGenome_SpeedText; + ControlText pageSpeciesGenome_LifespanText; + ControlText pageSpeciesGenome_FertilityText; + ControlText pageSpeciesGenome_FloweringText; + ControlText pageSpeciesGenome_TerritoryText; + ControlText pageSpeciesGenome_NocturnalText; + ControlText pageSpeciesGenome_CaveDwellingText; + ControlText pageSpeciesGenome_TolerantFlyerText; + ControlText pageSpeciesGenome_FlowerText; + ControlText pageSpeciesGenome_EffectText; + + public PageSpeciesGenome(final IWidget parent, final DatabaseTab tab) { + super(parent, tab); + this.pageSpeciesGenome_Title = new ControlTextCentered(this, 8.0f, "Genome"); + new ControlText(this, new IArea(0.0f, 32.0f, 68.0f, 30.0f), "Speed:", TextJustification.TopRight); + new ControlText(this, new IArea(0.0f, 44.0f, 68.0f, 30.0f), "Lifespan:", TextJustification.TopRight); + new ControlText(this, new IArea(0.0f, 56.0f, 68.0f, 30.0f), "Fertility:", TextJustification.TopRight); + new ControlText(this, new IArea(0.0f, 68.0f, 68.0f, 30.0f), "Flowering:", TextJustification.TopRight); + new ControlText(this, new IArea(0.0f, 80.0f, 68.0f, 30.0f), "Territory:", TextJustification.TopRight); + new ControlText(this, new IArea(0.0f, 97.0f, 68.0f, 30.0f), "Behavior:", TextJustification.TopRight); + new ControlText(this, new IArea(0.0f, 109.0f, 68.0f, 30.0f), "Sunlight:", TextJustification.TopRight); + new ControlText(this, new IArea(0.0f, 121.0f, 68.0f, 30.0f), "Rain:", TextJustification.TopRight); + new ControlText(this, new IArea(0.0f, 138.0f, 68.0f, 30.0f), "Flower:", TextJustification.TopRight); + new ControlText(this, new IArea(0.0f, 155.0f, 68.0f, 30.0f), "Effect:", TextJustification.TopRight); + final int x = 72; + this.pageSpeciesGenome_SpeedText = new ControlText(this, new IArea(x, 32.0f, 72.0f, 30.0f), "", TextJustification.TopLeft); + this.pageSpeciesGenome_LifespanText = new ControlText(this, new IArea(x, 44.0f, 72.0f, 30.0f), "", TextJustification.TopLeft); + this.pageSpeciesGenome_FertilityText = new ControlText(this, new IArea(x, 56.0f, 72.0f, 30.0f), "", TextJustification.TopLeft); + this.pageSpeciesGenome_FloweringText = new ControlText(this, new IArea(x, 68.0f, 72.0f, 30.0f), "", TextJustification.TopLeft); + this.pageSpeciesGenome_TerritoryText = new ControlText(this, new IArea(x, 80.0f, 72.0f, 30.0f), "", TextJustification.TopLeft); + this.pageSpeciesGenome_NocturnalText = new ControlText(this, new IArea(x, 97.0f, 72.0f, 30.0f), "", TextJustification.TopLeft); + this.pageSpeciesGenome_CaveDwellingText = new ControlText(this, new IArea(x, 109.0f, 72.0f, 30.0f), "", TextJustification.TopLeft); + this.pageSpeciesGenome_TolerantFlyerText = new ControlText(this, new IArea(x, 121.0f, 72.0f, 30.0f), "", TextJustification.TopLeft); + this.pageSpeciesGenome_FlowerText = new ControlText(this, new IArea(x, 138.0f, 72.0f, 30.0f), "", TextJustification.TopLeft); + this.pageSpeciesGenome_EffectText = new ControlText(this, new IArea(x, 155.0f, 72.0f, 30.0f), "", TextJustification.TopLeft); + } + + @Override + public void onValueChanged(final IAlleleSpecies species) { + final IAllele[] template = Binnie.Genetics.getBeeRoot().getTemplate(species.getUID()); + if (template != null) { + final IBeeGenome genome = Binnie.Genetics.getBeeRoot().templateAsGenome(template); + final IBee bee = Binnie.Genetics.getBeeRoot().getBee(BinnieCore.proxy.getWorld(), genome); + this.pageSpeciesGenome_SpeedText.setValue(rateSpeed(genome.getSpeed())); + this.pageSpeciesGenome_LifespanText.setValue(rateLifespan(genome.getLifespan())); + this.pageSpeciesGenome_FertilityText.setValue(genome.getFertility() + " children"); + this.pageSpeciesGenome_FloweringText.setValue(rateFlowering(genome.getFlowering())); + final int[] area = genome.getTerritory(); + this.pageSpeciesGenome_TerritoryText.setValue(area[0] + "x" + area[1] + "x" + area[2]); + String behavior = "Daytime"; + if (genome.getPrimary().isNocturnal()) { + behavior = "Nighttime"; + } + if (genome.getNocturnal()) { + behavior = "All Day"; + } + this.pageSpeciesGenome_NocturnalText.setValue(behavior); + if (genome.getCaveDwelling()) { + this.pageSpeciesGenome_CaveDwellingText.setValue("Not Needed"); + } + else { + this.pageSpeciesGenome_CaveDwellingText.setValue("Required"); + } + this.pageSpeciesGenome_TolerantFlyerText.setValue(tolerated(genome.getTolerantFlyer())); + if (genome.getFlowerProvider() != null) { + this.pageSpeciesGenome_FlowerText.setValue(genome.getFlowerProvider().getDescription()); + } + else { + this.pageSpeciesGenome_FlowerText.setValue("None"); + } + this.pageSpeciesGenome_EffectText.setValue(genome.getEffect().getName()); + } + } + + public static String rateFlowering(final int flowering) { + if (flowering >= 99) { + return "Maximum"; + } + if (flowering >= 35) { + return "Fastest"; + } + if (flowering >= 30) { + return "Faster"; + } + if (flowering >= 25) { + return "Fast"; + } + if (flowering >= 20) { + return "Normal"; + } + if (flowering >= 15) { + return "Slow"; + } + if (flowering >= 10) { + return "Slower"; + } + return "Slowest"; + } + + public static String rateSpeed(final float speed) { + if (speed >= 1.7f) { + return "Fastest"; + } + if (speed >= 1.4f) { + return "Faster"; + } + if (speed >= 1.2f) { + return "Fast"; + } + if (speed >= 1.0f) { + return "Normal"; + } + if (speed >= 0.8f) { + return "Slow"; + } + if (speed >= 0.6f) { + return "Slower"; + } + return "Slowest"; + } + + public static String rateLifespan(final int life) { + if (life >= 70) { + return "Longest"; + } + if (life >= 60) { + return "Longer"; + } + if (life >= 50) { + return "Long"; + } + if (life >= 45) { + return "Elongated"; + } + if (life >= 40) { + return "Normal"; + } + if (life >= 35) { + return "Shortened"; + } + if (life >= 30) { + return "Short"; + } + if (life >= 20) { + return "Shorter"; + } + return "Shortest"; + } + + public static String tolerated(final boolean t) { + if (t) { + return "Tolerated"; + } + return "Not Tolerated"; + } +} diff --git a/src/main/java/binnie/extrabees/gui/database/PageSpeciesProducts.java b/src/main/java/binnie/extrabees/gui/database/PageSpeciesProducts.java new file mode 100644 index 00000000..37720840 --- /dev/null +++ b/src/main/java/binnie/extrabees/gui/database/PageSpeciesProducts.java @@ -0,0 +1,35 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.gui.database; + +import forestry.api.apiculture.IAlleleBeeSpecies; +import forestry.api.genetics.IAlleleSpecies; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.mod.database.DatabaseTab; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.mod.database.PageSpecies; + +public class PageSpeciesProducts extends PageSpecies +{ + ControlText pageSpeciesProducts_Title; + ControlProductsBox pageSpeciesProducts_Products; + ControlText pageSpeciesProducts_Title2; + ControlProductsBox pageSpeciesProducts_Specialties; + + public PageSpeciesProducts(final IWidget parent, final DatabaseTab tab) { + super(parent, tab); + this.pageSpeciesProducts_Title = new ControlTextCentered(this, 8.0f, "Products"); + this.pageSpeciesProducts_Products = new ControlProductsBox(this, 4, 20, 136, 48, ControlProductsBox.Type.Products); + this.pageSpeciesProducts_Title2 = new ControlTextCentered(this, 68.0f, "Specialties"); + this.pageSpeciesProducts_Specialties = new ControlProductsBox(this, 4, 80, 136, 48, ControlProductsBox.Type.Specialties); + } + + @Override + public void onValueChanged(final IAlleleSpecies species) { + this.pageSpeciesProducts_Products.setSpecies((IAlleleBeeSpecies) species); + this.pageSpeciesProducts_Specialties.setSpecies((IAlleleBeeSpecies) species); + } +} diff --git a/src/main/java/binnie/extrabees/gui/database/WindowApiaristDatabase.java b/src/main/java/binnie/extrabees/gui/database/WindowApiaristDatabase.java new file mode 100644 index 00000000..0ca95669 --- /dev/null +++ b/src/main/java/binnie/extrabees/gui/database/WindowApiaristDatabase.java @@ -0,0 +1,84 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.gui.database; + +import binnie.craftgui.minecraft.Window; +import binnie.Binnie; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.mod.database.PageBreeder; +import binnie.craftgui.mod.database.PageBranchSpecies; +import binnie.craftgui.mod.database.PageBranchOverview; +import binnie.craftgui.mod.database.PageSpeciesMutations; +import binnie.craftgui.mod.database.PageSpeciesResultant; +import binnie.craftgui.mod.database.PageSpeciesClassification; +import binnie.core.AbstractMod; +import binnie.craftgui.mod.database.DatabaseTab; +import binnie.extrabees.ExtraBees; +import binnie.craftgui.mod.database.PageSpeciesOverview; +import binnie.craftgui.mod.database.WindowAbstractDatabase; + +public class WindowApiaristDatabase extends WindowAbstractDatabase +{ + @Override + protected void addTabs() { + new PageSpeciesOverview(this.getInfoPages(Mode.Species), new DatabaseTab(ExtraBees.instance, "species.overview", 0)); + new PageSpeciesClassification(this.getInfoPages(Mode.Species), new DatabaseTab(ExtraBees.instance, "species.classification", 0)); + new PageSpeciesGenome(this.getInfoPages(Mode.Species), new DatabaseTab(ExtraBees.instance, "species.genome", 0)); + new PageSpeciesProducts(this.getInfoPages(Mode.Species), new DatabaseTab(ExtraBees.instance, "species.products", 0)); + new PageSpeciesClimate(this.getInfoPages(Mode.Species), new DatabaseTab(ExtraBees.instance, "species.climate", 0)); + new PageSpeciesResultant(this.getInfoPages(Mode.Species), new DatabaseTab(ExtraBees.instance, "species.resultant", 0)); + new PageSpeciesMutations(this.getInfoPages(Mode.Species), new DatabaseTab(ExtraBees.instance, "species.further", 0)); + new PageBranchOverview(this.getInfoPages(Mode.Branches), new DatabaseTab(ExtraBees.instance, "branches.overview", 0)); + new PageBranchSpecies(this.getInfoPages(Mode.Branches), new DatabaseTab(ExtraBees.instance, "branches.species", 0)); + new PageBreeder(this.getInfoPages(Mode.Breeder), this.getUsername(), new DatabaseTab(ExtraBees.instance, "breeder", 0)); + } + + public WindowApiaristDatabase(final EntityPlayer player, final Side side, final boolean nei) { + super(player, side, nei, Binnie.Genetics.beeBreedingSystem, 110.0f); + } + + public static Window create(final EntityPlayer player, final Side side, final boolean nei) { + return new WindowApiaristDatabase(player, side, nei); + } + + @Override + public AbstractMod getMod() { + return ExtraBees.instance; + } + + @Override + public String getName() { + return "Database"; + } + + enum SpeciesTab + { + Overview(255), + Genome(16776960), + Productivity(65535), + Climate(16711680), + ResultantMutations(16711935), + FurtherMutations(65280); + + public int colour; + + private SpeciesTab(final int colour) { + this.colour = colour; + } + } + + enum BranchesTab + { + Overview(255), + Species(16711680); + + public int colour; + + private BranchesTab(final int colour) { + this.colour = colour; + } + } +} diff --git a/src/main/java/binnie/extrabees/gui/punnett/ControlChromosome.java b/src/main/java/binnie/extrabees/gui/punnett/ControlChromosome.java new file mode 100644 index 00000000..26f2798b --- /dev/null +++ b/src/main/java/binnie/extrabees/gui/punnett/ControlChromosome.java @@ -0,0 +1,49 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.gui.punnett; + +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.ITooltip; +import forestry.api.genetics.IChromosomeType; +import binnie.craftgui.controls.core.IControlValue; +import binnie.craftgui.controls.core.Control; + +public class ControlChromosome extends Control implements IControlValue, ITooltip +{ + IChromosomeType value; + + protected ControlChromosome(final IWidget parent, final float x, final float y, final IChromosomeType type) { + super(parent, x, y, 16.0f, 16.0f); + this.setValue(type); + this.addAttribute(Attribute.MouseOver); + } + + @Override + public IChromosomeType getValue() { + return this.value; + } + + @Override + public void setValue(final IChromosomeType value) { + this.value = value; + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.texture(ExtraBeeGUITexture.Chromosome, this.getArea()); + CraftGUI.Render.colour(16711680); + CraftGUI.Render.texture(ExtraBeeGUITexture.Chromosome2, this.getArea()); + } + + @Override + public void getTooltip(final Tooltip tooltip) { + if (this.value != null) { + tooltip.add(this.value.getName()); + } + } +} diff --git a/src/main/java/binnie/extrabees/gui/punnett/ControlPunnett.java b/src/main/java/binnie/extrabees/gui/punnett/ControlPunnett.java new file mode 100644 index 00000000..ed632116 --- /dev/null +++ b/src/main/java/binnie/extrabees/gui/punnett/ControlPunnett.java @@ -0,0 +1,83 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.gui.punnett; + +import java.util.List; +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.core.geometry.TextJustification; +import java.util.LinkedList; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.ISpeciesRoot; +import forestry.api.genetics.IIndividual; +import forestry.api.genetics.IChromosomeType; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.core.Control; + +public class ControlPunnett extends Control +{ + static int boxWidth; + static int boxHeight; + + protected ControlPunnett(final IWidget parent, final float x, final float y) { + super(parent, x, y, ControlPunnett.boxWidth * 3, ControlPunnett.boxWidth * 3); + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.solid(new IArea(0.0f, ControlPunnett.boxHeight, ControlPunnett.boxWidth * 3, 1.0f), 11184810); + CraftGUI.Render.solid(new IArea(ControlPunnett.boxWidth / 2.0f, ControlPunnett.boxHeight * 2, ControlPunnett.boxWidth * 2.5f, 1.0f), 11184810); + CraftGUI.Render.solid(new IArea(ControlPunnett.boxWidth, 0.0f, 1.0f, ControlPunnett.boxHeight * 3), 11184810); + CraftGUI.Render.solid(new IArea(ControlPunnett.boxWidth * 2, ControlPunnett.boxHeight / 2.0f, 1.0f, ControlPunnett.boxHeight * 2.5f), 11184810); + } + + public void setup(final IChromosomeType chromosome, final IIndividual ind1, final IIndividual ind2, final ISpeciesRoot root) { + this.deleteAllChildren(); + if (chromosome == null || ind1 == null || ind2 == null || root == null) { + return; + } + final IAllele primary1 = ind1.getGenome().getActiveAllele(chromosome); + final IAllele primary2 = ind2.getGenome().getActiveAllele(chromosome); + final IAllele secondary1 = ind1.getGenome().getInactiveAllele(chromosome); + final IAllele secondary2 = ind2.getGenome().getInactiveAllele(chromosome); + int x = 1; + int y = 1; + for (final IAllele allele1 : new IAllele[] { primary1, secondary1 }) { + y = 1; + for (final IAllele allele2 : new IAllele[] { primary2, secondary2 }) { + final List alleles = new LinkedList(); + if (allele1.isDominant() && !allele2.isDominant()) { + alleles.add(allele1); + } + else if (allele2.isDominant() && !allele1.isDominant()) { + alleles.add(allele2); + } + else { + alleles.add(allele1); + if (allele1 != allele2) { + alleles.add(allele2); + } + } + String text = ""; + for (final IAllele allele3 : alleles) { + text = text + allele3.getName() + ": " + 25.0f / alleles.size() + "%\n"; + } + new ControlText(this, new IArea(x * ControlPunnett.boxWidth, ControlPunnett.boxHeight * y, ControlPunnett.boxWidth, ControlPunnett.boxHeight), text, TextJustification.TopCenter).setColour(11184810); + ++y; + } + ++x; + } + new ControlText(this, new IArea(ControlPunnett.boxWidth, 0.0f, ControlPunnett.boxWidth, ControlPunnett.boxHeight), "\n" + primary1.getName(), TextJustification.TopCenter).setColour(11184810); + new ControlText(this, new IArea(ControlPunnett.boxWidth * 2, 0.0f, ControlPunnett.boxWidth, ControlPunnett.boxHeight), "\n" + secondary1.getName(), TextJustification.TopCenter).setColour(11184810); + new ControlText(this, new IArea(0.0f, ControlPunnett.boxHeight, ControlPunnett.boxWidth, ControlPunnett.boxHeight), primary2.getName(), TextJustification.TopCenter).setColour(11184810); + new ControlText(this, new IArea(0.0f, ControlPunnett.boxHeight * 2, ControlPunnett.boxWidth, ControlPunnett.boxHeight), primary2.getName(), TextJustification.TopCenter).setColour(11184810); + } + + static { + ControlPunnett.boxWidth = 80; + ControlPunnett.boxHeight = 28; + } +} diff --git a/src/main/java/binnie/extrabees/gui/punnett/ExtraBeeGUITexture.java b/src/main/java/binnie/extrabees/gui/punnett/ExtraBeeGUITexture.java new file mode 100644 index 00000000..c1513ade --- /dev/null +++ b/src/main/java/binnie/extrabees/gui/punnett/ExtraBeeGUITexture.java @@ -0,0 +1,11 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.gui.punnett; + +public enum ExtraBeeGUITexture +{ + Chromosome, + Chromosome2; +} diff --git a/src/main/java/binnie/extrabees/gui/punnett/WindowPunnettSquare.java b/src/main/java/binnie/extrabees/gui/punnett/WindowPunnettSquare.java new file mode 100644 index 00000000..6116d747 --- /dev/null +++ b/src/main/java/binnie/extrabees/gui/punnett/WindowPunnettSquare.java @@ -0,0 +1,63 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.gui.punnett; + +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.craftgui.resource.minecraft.PaddedTexture; +import binnie.extrabees.core.ExtraBeeTexture; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.resource.StyleSheet; +import binnie.craftgui.core.CraftGUI; +import binnie.extrabees.ExtraBees; +import binnie.core.AbstractMod; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import forestry.api.genetics.ISpeciesRoot; +import binnie.craftgui.minecraft.control.ControlSlot; +import binnie.craftgui.minecraft.Window; + +public class WindowPunnettSquare extends Window +{ + ControlSlot bee1; + ControlSlot bee2; + ControlPunnett punnett; + ISpeciesRoot root; + + public static Window create(final EntityPlayer player, final IInventory inventory, final Side side) { + return new WindowPunnettSquare(player, inventory, side); + } + + public WindowPunnettSquare(final EntityPlayer player, final IInventory inventory, final Side side) { + super(245.0f, 205.0f, player, inventory, side); + this.root = null; + } + + @Override + public AbstractMod getMod() { + return ExtraBees.instance; + } + + @Override + public String getName() { + return "Punnett"; + } + + @Override + public void initialiseClient() { + this.setTitle("Punnett Square"); + CraftGUI.Render.stylesheet(new StyleSheetPunnett()); + } + + static class StyleSheetPunnett extends StyleSheet + { + public StyleSheetPunnett() { + this.textures.put(CraftGUITexture.Window, new PaddedTexture(0, 0, 160, 160, 0, ExtraBeeTexture.GUIPunnett, 32, 32, 32, 32)); + this.textures.put(CraftGUITexture.Slot, new StandardTexture(160, 0, 18, 18, 0, ExtraBeeTexture.GUIPunnett)); + this.textures.put(ExtraBeeGUITexture.Chromosome, new StandardTexture(160, 36, 16, 16, 0, ExtraBeeTexture.GUIPunnett)); + this.textures.put(ExtraBeeGUITexture.Chromosome2, new StandardTexture(160, 52, 16, 16, 0, ExtraBeeTexture.GUIPunnett)); + } + } +} diff --git a/src/main/java/binnie/extrabees/liquids/ExtraBeeLiquid.java b/src/main/java/binnie/extrabees/liquids/ExtraBeeLiquid.java new file mode 100644 index 00000000..229801a2 --- /dev/null +++ b/src/main/java/binnie/extrabees/liquids/ExtraBeeLiquid.java @@ -0,0 +1,82 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.liquids; + +import binnie.core.liquid.FluidContainer; +import binnie.Binnie; +import net.minecraftforge.fluids.FluidStack; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.extrabees.ExtraBees; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import binnie.core.liquid.ILiquidType; + +public enum ExtraBeeLiquid implements ILiquidType +{ + ACID("acid", 11528985), + POISON("poison", 15406315), + GLACIAL("liquidnitrogen", 9881800); + + String ident; + IIcon icon; + int colour; + + private ExtraBeeLiquid(final String ident, final int colour) { + this.ident = ident; + this.colour = colour; + } + + @Override + public IIcon getIcon() { + return this.icon; + } + + @SideOnly(Side.CLIENT) + @Override + public void registerIcon(final IIconRegister register) { + this.icon = ExtraBees.proxy.getIcon(register, "liquids/" + this.getIdentifier()); + } + + @Override + public String getName() { + return ExtraBees.proxy.localise(this.toString().toLowerCase()); + } + + @Override + public String getIdentifier() { + return this.ident; + } + + @Override + public int getColour() { + return 16777215; + } + + @Override + public FluidStack get(final int amount) { + return Binnie.Liquid.getLiquidStack(this.ident, amount); + } + + @Override + public int getTransparency() { + return 255; + } + + @Override + public boolean canPlaceIn(final FluidContainer container) { + return true; + } + + @Override + public boolean showInCreative(final FluidContainer container) { + return container == FluidContainer.Bucket || container == FluidContainer.Can || container == FluidContainer.Capsule || container == FluidContainer.Refractory; + } + + @Override + public int getContainerColour() { + return this.colour; + } +} diff --git a/src/main/java/binnie/extrabees/liquids/ModuleLiquids.java b/src/main/java/binnie/extrabees/liquids/ModuleLiquids.java new file mode 100644 index 00000000..4ce7fce7 --- /dev/null +++ b/src/main/java/binnie/extrabees/liquids/ModuleLiquids.java @@ -0,0 +1,25 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.liquids; + +import binnie.core.liquid.ItemFluidContainer; +import binnie.Binnie; +import binnie.core.IInitializable; + +public class ModuleLiquids implements IInitializable +{ + @Override + public void preInit() { + Binnie.Liquid.createLiquids(ExtraBeeLiquid.values(), ItemFluidContainer.LiquidExtraBee); + } + + @Override + public void init() { + } + + @Override + public void postInit() { + } +} diff --git a/src/main/java/binnie/extrabees/products/EnumHoneyComb.java b/src/main/java/binnie/extrabees/products/EnumHoneyComb.java new file mode 100644 index 00000000..9e8ac13d --- /dev/null +++ b/src/main/java/binnie/extrabees/products/EnumHoneyComb.java @@ -0,0 +1,179 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.products; + +import net.minecraftforge.oredict.OreDictionary; +import binnie.extrabees.ExtraBees; +import forestry.api.recipes.RecipeManagers; +import java.util.LinkedHashMap; +import net.minecraft.item.ItemStack; +import java.util.Map; +import binnie.core.item.IItemEnum; + +public enum EnumHoneyComb implements IItemEnum +{ + BARREN(7564356, 12762791), + ROTTEN(4084257, 11652233), + BONE(12895407, 14606017), + OIL(394760, 2894646), + COAL(10392696, 3682590), + FUEL(10252096, 16761856), + WATER(2568911, 7973065), + MILK(14145991, 16777215), + FRUIT(8202548, 14372706), + SEED(3428147, 7457902), + ALCOHOL(4293921, 14604622), + STONE(9211025, 13027020), + REDSTONE(16422550, 15077392), + RESIN(16762703, 13208064), + IC2ENERGY(15332623, 2143177), + IRON(3552564, 11038808), + GOLD(3552564, 15125515), + COPPER(3552564, 13722376), + TIN(3552564, 12431805), + SILVER(3552564, 14408667), + BRONZE, + URANIUM(2031360, 4303667), + CLAY(7034426, 11583702), + OLD(4535060, 11769444), + FUNGAL(7234891, 2856003), + CREOSOTE(10256652, 12429911), + LATEX(5854529, 11051653), + ACIDIC(3441987, 1374014), + VENOMOUS(8198269, 16724991), + SLIME(3884860, 8442245), + BLAZE(16738816, 16763904), + COFFEE(5519389, 11763531), + GLACIAL(5146503, 13366002), + MINT, + CITRUS, + PEAT, + SHADOW(0, 3545141), + LEAD(3552564, 10125468), + BRASS, + ELECTRUM, + ZINC(3552564, 15592447), + TITANIUM(3552564, 11578083), + TUNGSTEN(3552564, 1249812), + STEEL, + IRIDIUM, + PLATINUM(3552564, 10125468), + LAPIS(3552564, 4009179), + SODALITE, + PYRITE, + BAUXITE, + CINNABAR, + SPHALERITE, + EMERALD(3552564, 1900291), + RUBY(3552564, 14024704), + SAPPHIRE(3552564, 673791), + OLIVINE, + DIAMOND(3552564, 8371706), + RED(13388876, 16711680), + YELLOW(15066419, 16768256), + BLUE(10072818, 8959), + GREEN(6717235, 39168), + BLACK(1644825, 5723991), + WHITE(14079702, 16777215), + BROWN(8349260, 6042895), + ORANGE(15905331, 16751872), + CYAN(5020082, 65509), + PURPLE(11691749, 11403519), + GRAY(5000268, 12237498), + LIGHTBLUE(10072818, 40447), + PINK(15905484, 16744671), + LIMEGREEN(8375321, 65288), + MAGENTA(15040472, 16711884), + LIGHTGRAY(10066329, 13224393), + NICKEL(3552564, 16768764), + INVAR, + GLOWSTONE(10919006, 14730249), + SALTPETER(10919006, 14730249), + PULP, + MULCH, + COMPOST(4338440, 7036475), + SAWDUST(12561009, 15913854), + CERTUS(13029631, 3755363), + ENDERPEARL(3446662, 206368), + YELLORIUM(2564173, 14019840), + CYANITE(2564173, 34541), + BLUTONIUM(2564173, 1769702); + + int[] colour; + public Map products; + boolean active; + public boolean deprecated; + + private EnumHoneyComb() { + this(16777215, 16777215); + this.active = false; + this.deprecated = true; + } + + private EnumHoneyComb(final int colour, final int colour2) { + this.colour = new int[0]; + this.products = new LinkedHashMap(); + this.active = true; + this.deprecated = false; + this.colour = new int[] { colour, colour2 }; + } + + public void addRecipe() { + RecipeManagers.centrifugeManager.addRecipe(20, this.get(1), this.products); + } + + @Override + public boolean isActive() { + return this.active; + } + + public static EnumHoneyComb get(final ItemStack itemStack) { + final int i = itemStack.getItemDamage(); + if (i >= 0 && i < values().length) { + return values()[i]; + } + return values()[0]; + } + + @Override + public ItemStack get(final int size) { + return new ItemStack(ExtraBees.comb, size, this.ordinal()); + } + + @Override + public String getName(final ItemStack stack) { + return ExtraBees.proxy.localise("item.comb." + this.name().toLowerCase()); + } + + public boolean addProduct(final ItemStack item, final Float chance) { + if (item == null) { + return false; + } + this.products.put(item.copy(), chance); + return true; + } + + public void tryAddProduct(final ItemStack item, final Float chance) { + this.active = this.addProduct(item, chance); + } + + public void tryAddProduct(final String oreDict, final Float chance) { + if (!OreDictionary.getOres(oreDict).isEmpty()) { + this.tryAddProduct(OreDictionary.getOres(oreDict).get(0), chance); + } + else { + this.active = false; + } + } + + public void tryAddProduct(final IItemEnum type, final Float chance) { + this.tryAddProduct(type.get(1), chance); + this.active = (this.active && type.isActive()); + } + + public void copyProducts(final EnumHoneyComb comb) { + this.products.putAll(comb.products); + } +} diff --git a/src/main/java/binnie/extrabees/products/EnumHoneyDrop.java b/src/main/java/binnie/extrabees/products/EnumHoneyDrop.java new file mode 100644 index 00000000..03f7a071 --- /dev/null +++ b/src/main/java/binnie/extrabees/products/EnumHoneyDrop.java @@ -0,0 +1,98 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.products; + +import binnie.extrabees.ExtraBees; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import forestry.api.recipes.RecipeManagers; +import binnie.Binnie; +import net.minecraft.item.ItemStack; +import binnie.core.item.IItemEnum; + +public enum EnumHoneyDrop implements IItemEnum +{ + ENERGY(10242418, 14905713, ""), + ACID(4961601, 4841020, "acid"), + POISON(13698745, 16712674, "poison"), + APPLE(13062738, 13183530, "juice"), + CITRUS, + ICE(11462882, 9895925, "liquidnitrogen"), + MILK(14737632, 16777215, "milk"), + SEED(8176242, 12762791, "seedoil"), + ALCOHOL(14411853, 10872909, "short.mead"), + FRUIT, + VEGETABLE, + PUMPKIN, + MELON, + RED(13388876, 16711680, "for.honey"), + YELLOW(15066419, 16768256, "for.honey"), + BLUE(10072818, 8959, "for.honey"), + GREEN(6717235, 39168, "for.honey"), + BLACK(1644825, 5723991, "for.honey"), + WHITE(14079702, 16777215, "for.honey"), + BROWN(8349260, 6042895, "for.honey"), + ORANGE(15905331, 16751872, "for.honey"), + CYAN(5020082, 65509, "for.honey"), + PURPLE(11691749, 11403519, "for.honey"), + GRAY(5000268, 12237498, "for.honey"), + LIGHTBLUE(10072818, 40447, "for.honey"), + PINK(15905484, 16744671, "for.honey"), + LIMEGREEN(8375321, 65288, "for.honey"), + MAGENTA(15040472, 16711884, "for.honey"), + LIGHTGRAY(10066329, 13224393, "for.honey"); + + int[] colour; + String liquidName; + ItemStack remenant; + public boolean deprecated; + + public void addRemenant(final ItemStack stack) { + this.remenant = stack; + this.deprecated = true; + } + + private EnumHoneyDrop() { + this(16777215, 16777215, ""); + } + + private EnumHoneyDrop(final int colour, final int colour2, final String liquid) { + this.liquidName = ""; + this.remenant = null; + this.deprecated = false; + this.colour = new int[] { colour, colour2 }; + this.liquidName = liquid; + } + + public void addRecipe() { + final FluidStack liquid = Binnie.Liquid.getLiquidStack(this.liquidName, 200); + if (liquid != null) { + RecipeManagers.squeezerManager.addRecipe(10, new ItemStack[] { this.get(1) }, liquid, this.remenant, 100); + } + } + + @Override + public boolean isActive() { + return !this.deprecated && (this.liquidName == null || FluidRegistry.isFluidRegistered(this.liquidName)); + } + + public static EnumHoneyDrop get(final ItemStack itemStack) { + final int i = itemStack.getItemDamage(); + if (i >= 0 && i < values().length) { + return values()[i]; + } + return values()[0]; + } + + @Override + public ItemStack get(final int size) { + return new ItemStack(ExtraBees.honeyDrop, size, this.ordinal()); + } + + @Override + public String getName(final ItemStack stack) { + return ExtraBees.proxy.localise("item.honeydrop." + this.name().toLowerCase()); + } +} diff --git a/src/main/java/binnie/extrabees/products/EnumPropolis.java b/src/main/java/binnie/extrabees/products/EnumPropolis.java new file mode 100644 index 00000000..f07a7bfe --- /dev/null +++ b/src/main/java/binnie/extrabees/products/EnumPropolis.java @@ -0,0 +1,72 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.products; + +import binnie.extrabees.ExtraBees; +import net.minecraftforge.fluids.FluidStack; +import net.minecraft.item.ItemStack; +import forestry.api.recipes.RecipeManagers; +import binnie.Binnie; +import binnie.core.item.IItemEnum; + +public enum EnumPropolis implements IItemEnum +{ + WATER(2405321, 12762791, "Water"), + OIL(1519411, 12762791, "oil"), + FUEL(10718482, 12762791, "fuel"), + MILK, + FRUIT, + SEED, + ALCOHOL, + CREOSOTE(8877313, 12428819, "creosote"), + GLACIAL, + PEAT; + + int[] colour; + String liquidName; + boolean active; + + private EnumPropolis() { + this(16777215, 16777215, ""); + this.active = false; + } + + private EnumPropolis(final int colour, final int colour2, final String liquid) { + this.colour = new int[0]; + this.active = true; + this.colour = new int[] { colour, colour2 }; + this.liquidName = liquid; + } + + public void addRecipe() { + final FluidStack liquid = Binnie.Liquid.getLiquidStack(this.liquidName, 500); + if (liquid != null) { + RecipeManagers.squeezerManager.addRecipe(20, new ItemStack[] { this.get(1) }, liquid, (ItemStack) null, 0); + } + } + + @Override + public boolean isActive() { + return this.active && Binnie.Liquid.getLiquidStack(this.liquidName, 100) != null; + } + + public static EnumPropolis get(final ItemStack itemStack) { + final int i = itemStack.getItemDamage(); + if (i >= 0 && i < values().length) { + return values()[i]; + } + return values()[0]; + } + + @Override + public ItemStack get(final int size) { + return new ItemStack(ExtraBees.propolis, size, this.ordinal()); + } + + @Override + public String getName(final ItemStack stack) { + return ExtraBees.proxy.localise("item.propolis." + this.name().toLowerCase()); + } +} diff --git a/src/main/java/binnie/extrabees/products/ItemHoneyComb.java b/src/main/java/binnie/extrabees/products/ItemHoneyComb.java new file mode 100644 index 00000000..2b6cd342 --- /dev/null +++ b/src/main/java/binnie/extrabees/products/ItemHoneyComb.java @@ -0,0 +1,296 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.products; + +import binnie.core.BinnieCore; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.extrabees.ExtraBees; +import net.minecraft.init.Blocks; +import binnie.extrabees.core.ExtraBeeItems; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; +import net.minecraft.init.Items; +import binnie.core.Mods; +import forestry.api.core.Tabs; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.IIcon; + +public class ItemHoneyComb extends ItemProduct +{ + IIcon icon1; + IIcon icon2; + + @Override + @SideOnly(Side.CLIENT) + public boolean requiresMultipleRenderPasses() { + return true; + } + + public ItemHoneyComb() { + super(EnumHoneyComb.values()); + this.setCreativeTab(Tabs.tabApiculture); + this.setUnlocalizedName("honeyComb"); + } + + public static void addSubtypes() { + final ItemStack beeswax = Mods.Forestry.stack("beeswax"); + final ItemStack honeyDrop = Mods.Forestry.stack("honeyDrop"); + OreDictionary.registerOre("ingotIron", Items.iron_ingot); + OreDictionary.registerOre("ingotGold", Items.gold_ingot); + OreDictionary.registerOre("gemDiamond", Items.diamond); + OreDictionary.registerOre("gemEmerald", Items.emerald); + OreDictionary.registerOre("gemLapis", new ItemStack(Items.dye, 1, 4)); + EnumHoneyComb.BARREN.addProduct(beeswax, 1.00f); + EnumHoneyComb.BARREN.addProduct(honeyDrop, 0.50f); + EnumHoneyComb.ROTTEN.addProduct(beeswax, 0.20f); + EnumHoneyComb.ROTTEN.addProduct(honeyDrop, 0.20f); + EnumHoneyComb.ROTTEN.addProduct(new ItemStack(Items.rotten_flesh, 1, 0), 0.80f); + EnumHoneyComb.BONE.addProduct(beeswax, 0.20f); + EnumHoneyComb.BONE.addProduct(honeyDrop, 0.20f); + EnumHoneyComb.BONE.addProduct(new ItemStack(Items.dye, 1, 15), 0.80f); + EnumHoneyComb.OIL.tryAddProduct(EnumPropolis.OIL, 0.60f); + EnumHoneyComb.OIL.addProduct(honeyDrop, 0.75f); + EnumHoneyComb.COAL.addProduct(beeswax, 0.80f); + EnumHoneyComb.COAL.addProduct(honeyDrop, 0.75f); + EnumHoneyComb.COAL.tryAddProduct(ExtraBeeItems.CoalDust, 1.00f); + EnumHoneyComb.WATER.tryAddProduct(EnumPropolis.WATER, 1.00f); + EnumHoneyComb.WATER.addProduct(honeyDrop, 0.90f); + EnumHoneyComb.STONE.addProduct(beeswax, 0.50f); + EnumHoneyComb.STONE.addProduct(honeyDrop, 0.25f); + EnumHoneyComb.MILK.tryAddProduct(EnumHoneyDrop.MILK, 1.00f); + EnumHoneyComb.MILK.addProduct(honeyDrop, 0.90f); + EnumHoneyComb.FRUIT.tryAddProduct(EnumHoneyDrop.APPLE, 1.00f); + EnumHoneyComb.FRUIT.addProduct(honeyDrop, 0.90f); + EnumHoneyComb.SEED.tryAddProduct(EnumHoneyDrop.SEED, 1.00f); + EnumHoneyComb.SEED.addProduct(honeyDrop, 0.90f); + EnumHoneyComb.ALCOHOL.tryAddProduct(EnumHoneyDrop.ALCOHOL, 1.00f); + EnumHoneyComb.ALCOHOL.addProduct(honeyDrop, 0.90f); + EnumHoneyComb.FUEL.tryAddProduct(EnumPropolis.FUEL, 0.60f); + EnumHoneyComb.FUEL.addProduct(honeyDrop, 0.50f); + EnumHoneyComb.CREOSOTE.tryAddProduct(EnumPropolis.CREOSOTE, 0.70f); + EnumHoneyComb.CREOSOTE.addProduct(honeyDrop, 0.50f); + EnumHoneyComb.LATEX.addProduct(honeyDrop, 0.50f); + EnumHoneyComb.LATEX.addProduct(beeswax, 0.85f); + if (!OreDictionary.getOres("itemRubber").isEmpty()) { + EnumHoneyComb.LATEX.tryAddProduct(OreDictionary.getOres("itemRubber").get(0), 1.00f); + } + else { + EnumHoneyComb.LATEX.active = false; + } + EnumHoneyComb.REDSTONE.addProduct(beeswax, 0.80f); + EnumHoneyComb.REDSTONE.addProduct(new ItemStack(Items.redstone, 1, 0), 1.00f); + EnumHoneyComb.REDSTONE.addProduct(honeyDrop, 0.50f); + EnumHoneyComb.RESIN.addProduct(beeswax, 1.00f); + EnumHoneyComb.RESIN.tryAddProduct(Mods.IC2.stack("itemHarz"), 1.00f); + EnumHoneyComb.RESIN.tryAddProduct(Mods.IC2.stack("itemHarz"), 0.50f); + EnumHoneyComb.IC2ENERGY.addProduct(beeswax, 0.80f); + EnumHoneyComb.IC2ENERGY.addProduct(new ItemStack(Items.redstone, 1, 0), 0.75f); + EnumHoneyComb.IC2ENERGY.tryAddProduct(EnumHoneyDrop.ENERGY, 1.00f); + EnumHoneyComb.IRON.copyProducts(EnumHoneyComb.STONE); + EnumHoneyComb.IRON.tryAddProduct(ExtraBeeItems.IronDust, 1.00f); + EnumHoneyComb.GOLD.copyProducts(EnumHoneyComb.STONE); + EnumHoneyComb.GOLD.tryAddProduct(ExtraBeeItems.GoldDust, 1.00f); + EnumHoneyComb.COPPER.copyProducts(EnumHoneyComb.STONE); + EnumHoneyComb.COPPER.tryAddProduct(ExtraBeeItems.CopperDust, 1.00f); + EnumHoneyComb.TIN.copyProducts(EnumHoneyComb.STONE); + EnumHoneyComb.TIN.tryAddProduct(ExtraBeeItems.TinDust, 1.00f); + EnumHoneyComb.NICKEL.copyProducts(EnumHoneyComb.STONE); + EnumHoneyComb.NICKEL.tryAddProduct(ExtraBeeItems.NickelDust, 1.00f); + EnumHoneyComb.SILVER.copyProducts(EnumHoneyComb.STONE); + EnumHoneyComb.SILVER.tryAddProduct(ExtraBeeItems.SilverDust, 1.00f); + EnumHoneyComb.URANIUM.copyProducts(EnumHoneyComb.STONE); + if (!OreDictionary.getOres("crushedUranium").isEmpty()) { + EnumHoneyComb.URANIUM.tryAddProduct(OreDictionary.getOres("crushedUranium").get(0), 0.50f); + } + EnumHoneyComb.CLAY.addProduct(beeswax, 0.25f); + EnumHoneyComb.CLAY.addProduct(honeyDrop, 0.80f); + EnumHoneyComb.CLAY.addProduct(new ItemStack(Items.clay_ball), 0.80f); + EnumHoneyComb.OLD.addProduct(beeswax, 1.00f); + EnumHoneyComb.OLD.addProduct(honeyDrop, 0.90f); + EnumHoneyComb.FUNGAL.addProduct(beeswax, 0.90f); + EnumHoneyComb.FUNGAL.addProduct(new ItemStack(Blocks.brown_mushroom_block, 1, 0), 1.00f); + EnumHoneyComb.FUNGAL.addProduct(new ItemStack(Blocks.red_mushroom_block, 1, 0), 0.75f); + EnumHoneyComb.ACIDIC.addProduct(beeswax, 0.80f); + EnumHoneyComb.ACIDIC.tryAddProduct(EnumHoneyDrop.ACID, 0.50f); + if (!OreDictionary.getOres("dustSulfur").isEmpty()) { + EnumHoneyComb.ACIDIC.addProduct(OreDictionary.getOres("dustSulfur").get(0), 0.75f); + } + EnumHoneyComb.VENOMOUS.addProduct(beeswax, 0.80f); + EnumHoneyComb.VENOMOUS.tryAddProduct(EnumHoneyDrop.POISON, 0.80f); + EnumHoneyComb.SLIME.addProduct(beeswax, 1.00f); + EnumHoneyComb.SLIME.addProduct(honeyDrop, 0.75f); + EnumHoneyComb.SLIME.addProduct(new ItemStack(Items.slime_ball, 1, 0), 0.75f); + EnumHoneyComb.BLAZE.addProduct(beeswax, 0.75f); + EnumHoneyComb.BLAZE.addProduct(new ItemStack(Items.blaze_powder, 1, 0), 1.00f); + EnumHoneyComb.COFFEE.addProduct(beeswax, 0.90f); + EnumHoneyComb.COFFEE.addProduct(honeyDrop, 0.75f); + EnumHoneyComb.COFFEE.tryAddProduct(Mods.IC2.stack("itemCofeePowder"), 0.75f); + EnumHoneyComb.GLACIAL.tryAddProduct(EnumHoneyDrop.ICE, 0.80f); + EnumHoneyComb.GLACIAL.addProduct(honeyDrop, 0.75f); + EnumHoneyComb.SHADOW.addProduct(honeyDrop, 0.50f); + if (!OreDictionary.getOres("dustObsidian").isEmpty()) { + EnumHoneyComb.SHADOW.tryAddProduct(OreDictionary.getOres("dustObsidian").get(0), 0.75f); + } + else { + EnumHoneyComb.SHADOW.active = false; + } + EnumHoneyComb.LEAD.copyProducts(EnumHoneyComb.STONE); + EnumHoneyComb.LEAD.tryAddProduct(ExtraBeeItems.LeadDust, 1.00f); + EnumHoneyComb.ZINC.copyProducts(EnumHoneyComb.STONE); + EnumHoneyComb.ZINC.tryAddProduct(ExtraBeeItems.ZincDust, 1.00f); + EnumHoneyComb.TITANIUM.copyProducts(EnumHoneyComb.STONE); + EnumHoneyComb.TITANIUM.tryAddProduct(ExtraBeeItems.TitaniumDust, 1.00f); + EnumHoneyComb.TUNGSTEN.copyProducts(EnumHoneyComb.STONE); + EnumHoneyComb.TUNGSTEN.tryAddProduct(ExtraBeeItems.TungstenDust, 1.00f); + EnumHoneyComb.PLATINUM.copyProducts(EnumHoneyComb.STONE); + EnumHoneyComb.PLATINUM.tryAddProduct(ExtraBeeItems.PlatinumDust, 1.00f); + EnumHoneyComb.LAPIS.copyProducts(EnumHoneyComb.STONE); + EnumHoneyComb.LAPIS.addProduct(new ItemStack(Items.dye, 6, 4), 1.00f); + EnumHoneyComb.EMERALD.copyProducts(EnumHoneyComb.STONE); + EnumHoneyComb.EMERALD.tryAddProduct(ExtraBeeItems.EmeraldShard, 1.00f); + EnumHoneyComb.RUBY.copyProducts(EnumHoneyComb.STONE); + EnumHoneyComb.RUBY.tryAddProduct(ExtraBeeItems.RubyShard, 1.00f); + EnumHoneyComb.SAPPHIRE.copyProducts(EnumHoneyComb.STONE); + EnumHoneyComb.SAPPHIRE.tryAddProduct(ExtraBeeItems.SapphireShard, 1.00f); + EnumHoneyComb.DIAMOND.copyProducts(EnumHoneyComb.STONE); + EnumHoneyComb.DIAMOND.tryAddProduct(ExtraBeeItems.DiamondShard, 1.00f); + EnumHoneyComb.RED.addProduct(honeyDrop, 0.80f); + EnumHoneyComb.RED.addProduct(beeswax, 0.80f); + EnumHoneyComb.GLOWSTONE.addProduct(honeyDrop, 0.25f); + EnumHoneyComb.GLOWSTONE.addProduct(new ItemStack(Items.glowstone_dust), 1.00f); + EnumHoneyComb.SALTPETER.addProduct(honeyDrop, 0.25f); + EnumHoneyComb.SALTPETER.tryAddProduct(getOreDictionary("dustSaltpeter"), 1.00f); + EnumHoneyComb.COMPOST.addProduct(honeyDrop, 0.25f); + EnumHoneyComb.COMPOST.tryAddProduct(Mods.Forestry.stack("fertilizerBio"), 1.00f); + EnumHoneyComb.SAWDUST.addProduct(honeyDrop, 0.25f); + if (!OreDictionary.getOres("dustSawdust").isEmpty()) { + EnumHoneyComb.SAWDUST.tryAddProduct(OreDictionary.getOres("dustSawdust").get(0), 1.00f); + } + else if (!OreDictionary.getOres("sawdust").isEmpty()) { + EnumHoneyComb.SAWDUST.tryAddProduct(OreDictionary.getOres("sawdust").get(0), 1.00f); + } + EnumHoneyComb.CERTUS.addProduct(honeyDrop, 0.25f); + EnumHoneyComb.CERTUS.addProduct(new ItemStack(Items.quartz), 0.25f); + if (!OreDictionary.getOres("dustCertusQuartz").isEmpty()) { + EnumHoneyComb.CERTUS.tryAddProduct(OreDictionary.getOres("dustCertusQuartz").get(0), 0.20f); + } + EnumHoneyComb.ENDERPEARL.addProduct(honeyDrop, 0.25f); + if (!OreDictionary.getOres("dustEnderPearl").isEmpty()) { + EnumHoneyComb.ENDERPEARL.tryAddProduct(OreDictionary.getOres("dustEnderPearl").get(0), 0.25f); + } + EnumHoneyComb.YELLORIUM.copyProducts(EnumHoneyComb.STONE); + EnumHoneyComb.CYANITE.copyProducts(EnumHoneyComb.STONE); + EnumHoneyComb.BLUTONIUM.copyProducts(EnumHoneyComb.STONE); + EnumHoneyComb.YELLORIUM.tryAddProduct(ExtraBeeItems.YelloriumDust, 0.25f); + EnumHoneyComb.CYANITE.tryAddProduct(ExtraBeeItems.CyaniteDust, 0.25f); + EnumHoneyComb.BLUTONIUM.tryAddProduct(ExtraBeeItems.BlutoniumDust, 0.25f); + OreDictionary.registerOre("beeComb", new ItemStack(ExtraBees.comb, 1, 32767)); + for (int i = 0; i < 16; ++i) { + final EnumHoneyComb type = EnumHoneyComb.values()[EnumHoneyComb.RED.ordinal() + i]; + if (type != EnumHoneyComb.RED) { + type.copyProducts(EnumHoneyComb.RED); + } + } + for (int i = 0; i < 16; ++i) { + final EnumHoneyComb type = EnumHoneyComb.values()[EnumHoneyComb.RED.ordinal() + i]; + final EnumHoneyDrop drop = EnumHoneyDrop.values()[EnumHoneyDrop.RED.ordinal() + i]; + final int[] dyeC = { 1, 11, 4, 2, 0, 15, 3, 14, 6, 5, 8, 12, 9, 10, 13, 7 }; + final int k = dyeC[i]; + ItemStack dye = new ItemStack(Items.dye, 1, k); + switch (k) { + case 0: { + dye = ExtraBeeItems.BlackDye.get(1); + break; + } + case 1: { + dye = ExtraBeeItems.RedDye.get(1); + break; + } + case 2: { + dye = ExtraBeeItems.GreenDye.get(1); + break; + } + case 3: { + dye = ExtraBeeItems.BrownDye.get(1); + break; + } + case 4: { + dye = ExtraBeeItems.BlueDye.get(1); + break; + } + case 11: { + dye = ExtraBeeItems.YellowDye.get(1); + break; + } + case 15: { + dye = ExtraBeeItems.WhiteDye.get(1); + break; + } + } + type.addProduct(drop.get(1), 1.00f); + drop.addRemenant(dye); + } + } + + private static ItemStack getOreDictionary(final String string) { + if (OreDictionary.getOres(string).size() > 0) { + return OreDictionary.getOres(string).get(0); + } + return null; + } + + @Override + public int getColorFromItemStack(final ItemStack itemStack, final int j) { + if (EnumHoneyComb.get(itemStack) == null) { + return 16777215; + } + if (j == 0) { + return EnumHoneyComb.get(itemStack).colour[0]; + } + return EnumHoneyComb.get(itemStack).colour[1]; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamageForRenderPass(final int i, final int j) { + if (j > 0) { + return this.icon1; + } + return this.icon2; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.icon1 = BinnieCore.proxy.getIcon(register, "forestry", "beeCombs.0"); + this.icon2 = BinnieCore.proxy.getIcon(register, "forestry", "beeCombs.1"); + } + + public enum VanillaComb + { + HONEY, + COCOA, + SIMMERING, + STRINGY, + FROZEN, + DRIPPING, + SILKY, + PARCHED, + MYSTERIOUS, + IRRADIATED, + POWDERY, + REDDENED, + DARKENED, + OMEGA, + WHEATEN, + MOSSY, + QUARTZ; + + public ItemStack get() { + return new ItemStack(Mods.Forestry.item("beeCombs"), 1, this.ordinal()); + } + } +} diff --git a/src/main/java/binnie/extrabees/products/ItemHoneyCrystal.java b/src/main/java/binnie/extrabees/products/ItemHoneyCrystal.java new file mode 100644 index 00000000..aded6e32 --- /dev/null +++ b/src/main/java/binnie/extrabees/products/ItemHoneyCrystal.java @@ -0,0 +1,51 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.products; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.item.ItemStack; +import forestry.api.core.Tabs; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.extrabees.ExtraBees; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.Item; + +public class ItemHoneyCrystal extends Item +{ + private int maxCharge; + private int transferLimit; + private int tier; + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.itemIcon = ExtraBees.proxy.getIcon(register, "honeyCrystal"); + } + + public ItemHoneyCrystal() { + this.maxCharge = 8000; + this.transferLimit = 500; + this.tier = 1; + this.setMaxDamage(27); + this.setMaxStackSize(1); + this.setCreativeTab(Tabs.tabApiculture); + this.setUnlocalizedName("honeyCrystal"); + } + + @Override + public String getItemStackDisplayName(final ItemStack i) { + return ExtraBees.proxy.localise("item.honeycrystal"); + } + + public static NBTTagCompound getOrCreateNbtData(final ItemStack itemStack) { + NBTTagCompound ret = itemStack.getTagCompound(); + if (ret == null) { + ret = new NBTTagCompound(); + itemStack.setTagCompound(ret); + } + return ret; + } +} diff --git a/src/main/java/binnie/extrabees/products/ItemHoneyCrystalEmpty.java b/src/main/java/binnie/extrabees/products/ItemHoneyCrystalEmpty.java new file mode 100644 index 00000000..3469bcaa --- /dev/null +++ b/src/main/java/binnie/extrabees/products/ItemHoneyCrystalEmpty.java @@ -0,0 +1,31 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.products; + +import net.minecraft.item.ItemStack; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.extrabees.ExtraBees; +import net.minecraft.client.renderer.texture.IIconRegister; + +public class ItemHoneyCrystalEmpty extends ItemHoneyCrystal +{ + public ItemHoneyCrystalEmpty() { + this.setMaxDamage(0); + this.setMaxStackSize(64); + this.setUnlocalizedName("honeyCrystalEmpty"); + } + + @SideOnly(Side.CLIENT) + @Override + public void registerIcons(final IIconRegister register) { + this.itemIcon = ExtraBees.proxy.getIcon(register, "honeyCrystalEmpty"); + } + + @Override + public String getItemStackDisplayName(final ItemStack i) { + return ExtraBees.proxy.localise("item.honeycrystal.empty"); + } +} diff --git a/src/main/java/binnie/extrabees/products/ItemHoneyDrop.java b/src/main/java/binnie/extrabees/products/ItemHoneyDrop.java new file mode 100644 index 00000000..4822712f --- /dev/null +++ b/src/main/java/binnie/extrabees/products/ItemHoneyDrop.java @@ -0,0 +1,56 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.products; + +import binnie.core.BinnieCore; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import forestry.api.core.Tabs; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.IIcon; + +public class ItemHoneyDrop extends ItemProduct +{ + IIcon icon1; + IIcon icon2; + + @Override + @SideOnly(Side.CLIENT) + public boolean requiresMultipleRenderPasses() { + return true; + } + + public ItemHoneyDrop() { + super(EnumHoneyDrop.values()); + this.setCreativeTab(Tabs.tabApiculture); + this.setUnlocalizedName("honeyDrop"); + } + + @Override + public int getColorFromItemStack(final ItemStack itemStack, final int j) { + final int i = itemStack.getItemDamage(); + if (j == 0) { + return EnumHoneyDrop.get(itemStack).colour[0]; + } + return EnumHoneyDrop.get(itemStack).colour[1]; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamageForRenderPass(final int i, final int j) { + if (j > 0) { + return this.icon1; + } + return this.icon2; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.icon1 = BinnieCore.proxy.getIcon(register, "forestry", "honeyDrop.0"); + this.icon2 = BinnieCore.proxy.getIcon(register, "forestry", "honeyDrop.1"); + } +} diff --git a/src/main/java/binnie/extrabees/products/ItemProduct.java b/src/main/java/binnie/extrabees/products/ItemProduct.java new file mode 100644 index 00000000..bbfa322a --- /dev/null +++ b/src/main/java/binnie/extrabees/products/ItemProduct.java @@ -0,0 +1,45 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.products; + +import java.util.List; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import binnie.core.item.IItemEnum; +import net.minecraft.item.Item; + +public class ItemProduct extends Item +{ + IItemEnum[] types; + + public ItemProduct(final IItemEnum[] types) { + this.setMaxStackSize(64); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.types = types; + } + + public IItemEnum get(final ItemStack stack) { + final int i = stack.getItemDamage(); + if (i >= 0 && i < this.types.length) { + return this.types[i]; + } + return this.types[0]; + } + + @Override + public String getItemStackDisplayName(final ItemStack itemstack) { + return this.get(itemstack).getName(itemstack); + } + + @Override + public void getSubItems(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + for (final IItemEnum type : this.types) { + if (type.isActive()) { + itemList.add(new ItemStack(this, 1, type.ordinal())); + } + } + } +} diff --git a/src/main/java/binnie/extrabees/products/ItemPropolis.java b/src/main/java/binnie/extrabees/products/ItemPropolis.java new file mode 100644 index 00000000..1a7a6b55 --- /dev/null +++ b/src/main/java/binnie/extrabees/products/ItemPropolis.java @@ -0,0 +1,36 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.products; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.core.BinnieCore; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import forestry.api.core.Tabs; + +public class ItemPropolis extends ItemProduct +{ + public ItemPropolis() { + super(EnumPropolis.values()); + this.setCreativeTab(Tabs.tabApiculture); + this.setUnlocalizedName("propolis"); + } + + @Override + public int getColorFromItemStack(final ItemStack itemStack, final int j) { + final int i = itemStack.getItemDamage(); + if (j == 0) { + return EnumPropolis.get(itemStack).colour[0]; + } + return EnumPropolis.get(itemStack).colour[1]; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.itemIcon = BinnieCore.proxy.getIcon(register, "forestry", "propolis.0"); + } +} diff --git a/src/main/java/binnie/extrabees/products/ModuleProducts.java b/src/main/java/binnie/extrabees/products/ModuleProducts.java new file mode 100644 index 00000000..62ec7fc2 --- /dev/null +++ b/src/main/java/binnie/extrabees/products/ModuleProducts.java @@ -0,0 +1,47 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.products; + +import cpw.mods.fml.common.registry.GameRegistry; +import binnie.core.Mods; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; +import net.minecraft.init.Items; +import binnie.extrabees.ExtraBees; +import binnie.core.IInitializable; + +public class ModuleProducts implements IInitializable +{ + @Override + public void preInit() { + ExtraBees.honeyCrystal = new ItemHoneyCrystal(); + ExtraBees.honeyCrystalEmpty = new ItemHoneyCrystalEmpty(); + ExtraBees.honeyDrop = new ItemHoneyDrop(); + ExtraBees.comb = new ItemHoneyComb(); + ExtraBees.propolis = new ItemPropolis(); + OreDictionary.registerOre("ingotIron", Items.iron_ingot); + OreDictionary.registerOre("ingotGold", Items.gold_ingot); + OreDictionary.registerOre("gemDiamond", Items.diamond); + } + + @Override + public void init() { + ItemHoneyComb.addSubtypes(); + } + + @Override + public void postInit() { + GameRegistry.addRecipe(new ItemStack(ExtraBees.honeyCrystalEmpty), new Object[] { "#@#", "@#@", "#@#", '@', Mods.Forestry.stack("honeyDrop"), '#', EnumHoneyDrop.ENERGY.get(1) }); + for (final EnumHoneyComb info : EnumHoneyComb.values()) { + info.addRecipe(); + } + for (final EnumHoneyDrop info2 : EnumHoneyDrop.values()) { + info2.addRecipe(); + } + for (final EnumPropolis info3 : EnumPropolis.values()) { + info3.addRecipe(); + } + } +} diff --git a/src/main/java/binnie/extrabees/proxy/ExtraBeesProxy.java b/src/main/java/binnie/extrabees/proxy/ExtraBeesProxy.java new file mode 100644 index 00000000..e4330b99 --- /dev/null +++ b/src/main/java/binnie/extrabees/proxy/ExtraBeesProxy.java @@ -0,0 +1,15 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.proxy; + +import binnie.extrabees.ExtraBees; +import binnie.core.proxy.BinnieModProxy; + +public class ExtraBeesProxy extends BinnieModProxy +{ + public ExtraBeesProxy() { + super(ExtraBees.instance); + } +} diff --git a/src/main/java/binnie/extrabees/proxy/ExtraBeesProxyClient.java b/src/main/java/binnie/extrabees/proxy/ExtraBeesProxyClient.java new file mode 100644 index 00000000..2b7bcb85 --- /dev/null +++ b/src/main/java/binnie/extrabees/proxy/ExtraBeesProxyClient.java @@ -0,0 +1,9 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.proxy; + +public class ExtraBeesProxyClient extends ExtraBeesProxy +{ +} diff --git a/src/main/java/binnie/extrabees/proxy/ExtraBeesProxyServer.java b/src/main/java/binnie/extrabees/proxy/ExtraBeesProxyServer.java new file mode 100644 index 00000000..1b1458e0 --- /dev/null +++ b/src/main/java/binnie/extrabees/proxy/ExtraBeesProxyServer.java @@ -0,0 +1,9 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.proxy; + +public class ExtraBeesProxyServer extends ExtraBeesProxy +{ +} diff --git a/src/main/java/binnie/extrabees/worldgen/BlockExtraBeeHive.java b/src/main/java/binnie/extrabees/worldgen/BlockExtraBeeHive.java new file mode 100644 index 00000000..6e73dea4 --- /dev/null +++ b/src/main/java/binnie/extrabees/worldgen/BlockExtraBeeHive.java @@ -0,0 +1,97 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.worldgen; + +import forestry.api.apiculture.IHiveDrop; +import java.util.Collections; +import java.util.ArrayList; +import net.minecraft.world.World; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; +import java.util.List; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import forestry.api.core.Tabs; +import binnie.extrabees.ExtraBees; +import net.minecraft.util.IIcon; +import net.minecraft.block.Block; + +public class BlockExtraBeeHive extends Block +{ + IIcon[][] icons; + + public BlockExtraBeeHive() { + super(ExtraBees.materialBeehive); + this.setLightLevel(0.2f); + this.setHardness(1.0f); + this.setTickRandomly(true); + this.setBlockName("hive"); + this.setCreativeTab(Tabs.tabApiculture); + } + + public String getUnlocalizedName(final ItemStack par1ItemStack) { + return "extrabees.block.hive." + par1ItemStack.getItemDamage(); + } + + @Override + public void getSubBlocks(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + for (int i = 0; i < 4; ++i) { + itemList.add(new ItemStack(this, 1, i)); + } + } + + @Override + public IIcon getIcon(final int side, final int metadata) { + if (metadata >= EnumHiveType.values().length) { + return null; + } + if (side < 2) { + return this.icons[metadata][1]; + } + return this.icons[metadata][0]; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister register) { + this.icons = new IIcon[EnumHiveType.values().length][2]; + for (final EnumHiveType hive : EnumHiveType.values()) { + this.icons[hive.ordinal()][0] = ExtraBees.proxy.getIcon(register, "hive/" + hive.toString().toLowerCase() + ".0"); + this.icons[hive.ordinal()][1] = ExtraBees.proxy.getIcon(register, "hive/" + hive.toString().toLowerCase() + ".1"); + } + } + + @Override + public ArrayList getDrops(final World world, final int x, final int y, final int z, final int metadata, final int fortune) { + final ArrayList ret = new ArrayList(); + final List dropList = EnumHiveType.values()[metadata].drops; + Collections.shuffle(dropList); + int tries = 0; + for (boolean hasPrincess = false; tries <= 10 && !hasPrincess; hasPrincess = true) { + ++tries; + for (final IHiveDrop drop : dropList) { + if (world.rand.nextInt(100) < drop.getChance(world, x, y, z)) { + ret.add(drop.getPrincess(world, x, y, z, fortune)); + break; + } + } + } + for (final IHiveDrop drop : dropList) { + if (world.rand.nextInt(100) < drop.getChance(world, x, y, z)) { + ret.addAll(drop.getDrones(world, x, y, z, fortune)); + break; + } + } + for (final IHiveDrop drop : dropList) { + if (world.rand.nextInt(100) < drop.getChance(world, x, y, z)) { + ret.addAll(drop.getAdditional(world, x, y, z, fortune)); + break; + } + } + return ret; + } +} diff --git a/src/main/java/binnie/extrabees/worldgen/EnumHiveType.java b/src/main/java/binnie/extrabees/worldgen/EnumHiveType.java new file mode 100644 index 00000000..c585e8f1 --- /dev/null +++ b/src/main/java/binnie/extrabees/worldgen/EnumHiveType.java @@ -0,0 +1,23 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.worldgen; + +import java.util.ArrayList; +import forestry.api.apiculture.IHiveDrop; +import java.util.List; + +public enum EnumHiveType +{ + Water, + Rock, + Nether, + Marble; + + public List drops; + + private EnumHiveType() { + this.drops = new ArrayList(); + } +} diff --git a/src/main/java/binnie/extrabees/worldgen/HiveDrop.java b/src/main/java/binnie/extrabees/worldgen/HiveDrop.java new file mode 100644 index 00000000..544a104c --- /dev/null +++ b/src/main/java/binnie/extrabees/worldgen/HiveDrop.java @@ -0,0 +1,64 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.worldgen; + +import forestry.api.genetics.IIndividual; +import forestry.api.apiculture.EnumBeeType; +import net.minecraft.world.World; +import binnie.Binnie; +import forestry.api.apiculture.IAlleleBeeSpecies; +import net.minecraft.item.ItemStack; +import java.util.ArrayList; +import forestry.api.genetics.IAllele; +import forestry.api.apiculture.IHiveDrop; + +public class HiveDrop implements IHiveDrop +{ + private IAllele[] template; + private ArrayList additional; + private int chance; + + public HiveDrop(final IAlleleBeeSpecies species, final int chance) { + this(Binnie.Genetics.getBeeRoot().getTemplate(species.getUID()), new ItemStack[0], chance); + } + + public HiveDrop(IAllele[] template, final ItemStack[] bonus, final int chance) { + this.additional = new ArrayList(); + if (template == null) { + template = Binnie.Genetics.getBeeRoot().getDefaultTemplate(); + } + this.template = template; + this.chance = chance; + for (final ItemStack stack : bonus) { + this.additional.add(stack); + } + } + + @Override + public ItemStack getPrincess(final World world, final int x, final int y, final int z, final int fortune) { + return Binnie.Genetics.getBeeRoot().getMemberStack(Binnie.Genetics.getBeeRoot().getBee(world, Binnie.Genetics.getBeeRoot().templateAsGenome(this.template)), EnumBeeType.PRINCESS.ordinal()); + } + + @Override + public ArrayList getDrones(final World world, final int x, final int y, final int z, final int fortune) { + final ArrayList ret = new ArrayList(); + ret.add(Binnie.Genetics.getBeeRoot().getMemberStack(Binnie.Genetics.getBeeRoot().templateAsIndividual(this.template), EnumBeeType.DRONE.ordinal())); + return ret; + } + + @Override + public ArrayList getAdditional(final World world, final int x, final int y, final int z, final int fortune) { + final ArrayList ret = new ArrayList(); + for (final ItemStack stack : this.additional) { + ret.add(stack.copy()); + } + return ret; + } + + @Override + public int getChance(final World world, final int x, final int y, final int z) { + return this.chance; + } +} diff --git a/src/main/java/binnie/extrabees/worldgen/ItemBeehive.java b/src/main/java/binnie/extrabees/worldgen/ItemBeehive.java new file mode 100644 index 00000000..9ffdb5de --- /dev/null +++ b/src/main/java/binnie/extrabees/worldgen/ItemBeehive.java @@ -0,0 +1,39 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.worldgen; + +import net.minecraft.item.ItemStack; +import java.util.List; +import net.minecraft.item.Item; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; + +public class ItemBeehive extends ItemBlock +{ + public ItemBeehive(final Block block) { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + @Override + public int getMetadata(final int i) { + return i; + } + + @Override + public void getSubItems(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + for (int i = 0; i < 4; ++i) { + itemList.add(new ItemStack(this, 1, i)); + } + } + + @Override + public String getItemStackDisplayName(final ItemStack itemStack) { + return EnumHiveType.values()[itemStack.getItemDamage()].toString() + " Hive"; + } +} diff --git a/src/main/java/binnie/extrabees/worldgen/MaterialBeehive.java b/src/main/java/binnie/extrabees/worldgen/MaterialBeehive.java new file mode 100644 index 00000000..d73e0100 --- /dev/null +++ b/src/main/java/binnie/extrabees/worldgen/MaterialBeehive.java @@ -0,0 +1,22 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.worldgen; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; + +public class MaterialBeehive extends Material +{ + public MaterialBeehive() { + super(MapColor.stoneColor); + this.setRequiresTool(); + this.setImmovableMobility(); + } + + @Override + public boolean isOpaque() { + return true; + } +} diff --git a/src/main/java/binnie/extrabees/worldgen/ModuleGeneration.java b/src/main/java/binnie/extrabees/worldgen/ModuleGeneration.java new file mode 100644 index 00000000..af0e8d73 --- /dev/null +++ b/src/main/java/binnie/extrabees/worldgen/ModuleGeneration.java @@ -0,0 +1,89 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.worldgen; + +import net.minecraft.world.chunk.IChunkProvider; +import net.minecraft.world.World; +import java.util.Random; +import binnie.core.genetics.ForestryAllele; +import forestry.api.apiculture.IHiveDrop; +import forestry.api.apiculture.IAlleleBeeSpecies; +import binnie.extrabees.genetics.ExtraBeesSpecies; +import buildcraft.api.core.BuildCraftAPI; +import binnie.extrabees.config.ConfigurationMain; +import cpw.mods.fml.common.registry.GameRegistry; +import binnie.extrabees.ExtraBees; +import binnie.core.IInitializable; +import cpw.mods.fml.common.IWorldGenerator; + +public class ModuleGeneration implements IWorldGenerator, IInitializable +{ + static int waterRate; + static int rockRate; + static int netherRate; + static int marbleRate; + + @Override + public void preInit() { + ExtraBees.materialBeehive = new MaterialBeehive(); + GameRegistry.registerBlock(ExtraBees.hive = new BlockExtraBeeHive(), ItemBeehive.class, "hive"); + } + + @Override + public void init() { + ModuleGeneration.waterRate = ConfigurationMain.waterHiveRate; + ModuleGeneration.rockRate = ConfigurationMain.rockHiveRate; + ModuleGeneration.netherRate = ConfigurationMain.netherHiveRate; + GameRegistry.registerWorldGenerator(new ModuleGeneration(), 0); + if (!ConfigurationMain.canQuarryMineHives) { + BuildCraftAPI.softBlocks.add(ExtraBees.hive); + } + } + + @Override + public void postInit() { + EnumHiveType.Water.drops.add(new HiveDrop(ExtraBeesSpecies.WATER, 80)); + EnumHiveType.Water.drops.add(new HiveDrop(ForestryAllele.BeeSpecies.Valiant.getAllele(), 3)); + EnumHiveType.Rock.drops.add(new HiveDrop(ExtraBeesSpecies.ROCK, 80)); + EnumHiveType.Rock.drops.add(new HiveDrop(ForestryAllele.BeeSpecies.Valiant.getAllele(), 3)); + EnumHiveType.Nether.drops.add(new HiveDrop(ExtraBeesSpecies.BASALT, 80)); + EnumHiveType.Nether.drops.add(new HiveDrop(ForestryAllele.BeeSpecies.Valiant.getAllele(), 3)); + ExtraBees.hive.setHarvestLevel("scoop", 0, 0); + ExtraBees.hive.setHarvestLevel("scoop", 0, 1); + ExtraBees.hive.setHarvestLevel("scoop", 0, 2); + ExtraBees.hive.setHarvestLevel("scoop", 0, 3); + } + + @Override + public void generate(final Random rand, int chunkX, int chunkZ, final World world, final IChunkProvider chunkGenerator, final IChunkProvider chunkProvider) { + chunkX <<= 4; + chunkZ <<= 4; + for (int i = 0; i < ModuleGeneration.waterRate; ++i) { + final int randPosX = chunkX + rand.nextInt(16); + final int randPosY = rand.nextInt(50) + 20; + final int randPosZ = chunkZ + rand.nextInt(16); + new WorldGenHiveWater().generate(world, rand, randPosX, randPosY, randPosZ); + } + for (int i = 0; i < ModuleGeneration.rockRate; ++i) { + final int randPosX = chunkX + rand.nextInt(16); + final int randPosY = rand.nextInt(50) + 20; + final int randPosZ = chunkZ + rand.nextInt(16); + new WorldGenHiveRock().generate(world, rand, randPosX, randPosY, randPosZ); + } + for (int i = 0; i < ModuleGeneration.netherRate; ++i) { + final int randPosX = chunkX + rand.nextInt(16); + final int randPosY = rand.nextInt(50) + 20; + final int randPosZ = chunkZ + rand.nextInt(16); + new WorldGenHiveNether().generate(world, rand, randPosX, randPosY, randPosZ); + } + } + + static { + ModuleGeneration.waterRate = 2; + ModuleGeneration.rockRate = 2; + ModuleGeneration.netherRate = 2; + ModuleGeneration.marbleRate = 2; + } +} diff --git a/src/main/java/binnie/extrabees/worldgen/WorldGenHiveNether.java b/src/main/java/binnie/extrabees/worldgen/WorldGenHiveNether.java new file mode 100644 index 00000000..af927965 --- /dev/null +++ b/src/main/java/binnie/extrabees/worldgen/WorldGenHiveNether.java @@ -0,0 +1,33 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.worldgen; + +import net.minecraft.block.Block; +import net.minecraft.world.biome.BiomeGenBase; +import binnie.extrabees.ExtraBees; +import net.minecraft.init.Blocks; +import net.minecraftforge.common.BiomeDictionary; +import java.util.Random; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenerator; + +public class WorldGenHiveNether extends WorldGenerator +{ + @Override + public boolean generate(final World world, final Random random, final int i, final int j, final int k) { + final BiomeGenBase biome = world.getWorldChunkManager().getBiomeGenAt(i, k); + if (!BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.NETHER)) { + return true; + } + if (this.embedInWall(world, Blocks.netherrack, i, j, k)) { + world.setBlock(i, j, k, ExtraBees.hive, 2, 0); + } + return true; + } + + public boolean embedInWall(final World world, final Block blockID, final int i, final int j, final int k) { + return world.getBlock(i, j, k) == blockID && world.getBlock(i, j + 1, k) == blockID && world.getBlock(i, j - 1, k) == blockID && (world.isAirBlock(i + 1, j, k) || world.isAirBlock(i - 1, j, k) || world.isAirBlock(i, j, k + 1) || world.isAirBlock(i, j, k - 1)); + } +} diff --git a/src/main/java/binnie/extrabees/worldgen/WorldGenHiveRock.java b/src/main/java/binnie/extrabees/worldgen/WorldGenHiveRock.java new file mode 100644 index 00000000..651e8a3b --- /dev/null +++ b/src/main/java/binnie/extrabees/worldgen/WorldGenHiveRock.java @@ -0,0 +1,29 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.worldgen; + +import net.minecraft.block.Block; +import net.minecraft.world.biome.BiomeGenBase; +import binnie.extrabees.ExtraBees; +import net.minecraft.init.Blocks; +import java.util.Random; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenerator; + +public class WorldGenHiveRock extends WorldGenerator +{ + @Override + public boolean generate(final World world, final Random random, final int i, final int j, final int k) { + final BiomeGenBase biome = world.getWorldChunkManager().getBiomeGenAt(i, k); + final Block block = world.getBlock(i, j, k); + if (block == null) { + return true; + } + if (block.isReplaceableOreGen(world, i, j, k, Blocks.stone)) { + world.setBlock(i, j, k, ExtraBees.hive, 1, 0); + } + return true; + } +} diff --git a/src/main/java/binnie/extrabees/worldgen/WorldGenHiveWater.java b/src/main/java/binnie/extrabees/worldgen/WorldGenHiveWater.java new file mode 100644 index 00000000..a515cbcd --- /dev/null +++ b/src/main/java/binnie/extrabees/worldgen/WorldGenHiveWater.java @@ -0,0 +1,31 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extrabees.worldgen; + +import net.minecraft.world.biome.BiomeGenBase; +import binnie.extrabees.ExtraBees; +import net.minecraft.block.material.Material; +import net.minecraft.init.Blocks; +import java.util.Random; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenerator; + +public class WorldGenHiveWater extends WorldGenerator +{ + @Override + public boolean generate(final World world, final Random random, final int i, final int j, final int k) { + final BiomeGenBase biome = world.getWorldChunkManager().getBiomeGenAt(i, k); + final int i2 = i + random.nextInt(8) - random.nextInt(8); + final int j2 = j + random.nextInt(4) - random.nextInt(4); + final int k2 = k + random.nextInt(8) - random.nextInt(8); + if (world.getBlock(i2, j2, k2) != Blocks.water && world.getBlock(i2, j2, k2) != Blocks.water) { + return false; + } + if (world.getBlock(i2, j2 - 1, k2).getMaterial() == Material.sand || world.getBlock(i2, j2 - 1, k2).getMaterial() == Material.clay || world.getBlock(i2, j2 - 1, k2).getMaterial() == Material.ground || world.getBlock(i2, j2 - 1, k2).getMaterial() == Material.rock) { + world.setBlock(i2, j2, k2, ExtraBees.hive, 0, 0); + } + return true; + } +} diff --git a/src/main/java/binnie/extratrees/ExtraTrees.java b/src/main/java/binnie/extratrees/ExtraTrees.java new file mode 100644 index 00000000..a3673ab0 --- /dev/null +++ b/src/main/java/binnie/extratrees/ExtraTrees.java @@ -0,0 +1,140 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees; + +import binnie.extrabees.ExtraBees; +import binnie.core.BinnieCore; +import binnie.core.network.BinniePacketHandler; +import binnie.core.proxy.IProxyCore; +import binnie.extratrees.config.ConfigurationMain; +import binnie.extratrees.core.ExtraTreesGUID; +import binnie.core.gui.IBinnieGUID; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import binnie.extratrees.core.ModuleCore; +import binnie.extratrees.machines.ModuleMachine; +import binnie.extratrees.carpentry.ModuleCarpentry; +import binnie.extratrees.genetics.ModuleGenetics; +import binnie.extratrees.alcohol.ModuleAlcohol; +import binnie.extratrees.item.ModuleItems; +import binnie.extratrees.block.ModuleBlocks; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import binnie.extratrees.carpentry.BlockStainedDesign; +import binnie.extratrees.block.decor.BlockHedge; +import binnie.extratrees.block.decor.BlockMultiFence; +import binnie.extratrees.alcohol.drink.ItemDrink; +import binnie.extratrees.carpentry.BlockCarpentry; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import cpw.mods.fml.common.SidedProxy; +import binnie.extratrees.proxy.Proxy; +import cpw.mods.fml.common.Mod; +import binnie.core.AbstractMod; + +@Mod(modid = "ExtraTrees", name = "Extra Trees", useMetadata = true, dependencies = "after:BinnieCore") +public class ExtraTrees extends AbstractMod +{ + @Mod.Instance("ExtraTrees") + public static ExtraTrees instance; + @SidedProxy(clientSide = "binnie.extratrees.proxy.ProxyClient", serverSide = "binnie.extratrees.proxy.ProxyServer") + public static Proxy proxy; + public static Item itemDictionary; + public static Item itemDictionaryLepi; + public static Item itemMisc; + public static Item itemFood; + public static Block blockStairs; + public static Block blockLog; + public static BlockCarpentry blockCarpentry; + public static Block blockPlanks; + public static Block blockMachine; + public static Block blockFence; + public static BlockCarpentry blockPanel; + public static Block blockKitchen; + public static Block blockSlab; + public static Block blockDoubleSlab; + public static Item itemHammer; + public static Item itemDurableHammer; + public static Block blockGate; + public static Block blockDoor; + public static Block blockBranch; + public static ItemDrink drink; + public static BlockMultiFence blockMultiFence; + public static Block blockDrink; + public static BlockHedge blockHedge; + public static BlockStainedDesign blockStained; + public static int fruitPodRenderId; + public static int doorRenderId; + public static int branchRenderId; + public static int fenceID; + public static int stairsID; + + @Mod.EventHandler + public void preInit(final FMLPreInitializationEvent evt) { + this.addModule(new ModuleBlocks()); + this.addModule(new ModuleItems()); + this.addModule(new ModuleAlcohol()); + this.addModule(new ModuleGenetics()); + this.addModule(new ModuleCarpentry()); + this.addModule(new ModuleMachine()); + this.addModule(new ModuleCore()); + this.preInit(); + } + + @Mod.EventHandler + public void init(final FMLInitializationEvent evt) { + this.init(); + } + + @Mod.EventHandler + public void postInit(final FMLPostInitializationEvent evt) { + this.postInit(); + } + + public ExtraTrees() { + ExtraTrees.instance = this; + } + + @Override + public IBinnieGUID[] getGUIDs() { + return ExtraTreesGUID.values(); + } + + @Override + public Class[] getConfigs() { + return new Class[] { ConfigurationMain.class }; + } + + @Override + public String getChannel() { + return "ET"; + } + + @Override + public IProxyCore getProxy() { + return ExtraTrees.proxy; + } + + @Override + public String getModID() { + return "extratrees"; + } + + @Override + protected Class getPacketHandler() { + return PacketHandler.class; + } + + @Override + public boolean isActive() { + return BinnieCore.isExtraTreesActive(); + } + + public static class PacketHandler extends BinniePacketHandler + { + public PacketHandler() { + super(ExtraBees.instance); + } + } +} diff --git a/src/main/java/binnie/extratrees/FakeWorld.java b/src/main/java/binnie/extratrees/FakeWorld.java new file mode 100644 index 00000000..c6fb8a97 --- /dev/null +++ b/src/main/java/binnie/extratrees/FakeWorld.java @@ -0,0 +1,105 @@ +package binnie.extratrees; + +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldSettings; +import net.minecraft.world.WorldType; +import net.minecraft.world.WorldSettings.GameType; +import net.minecraft.world.chunk.IChunkProvider; +import net.minecraft.world.storage.SaveHandler; + +import forestry.api.arboriculture.EnumWoodType; +import forestry.arboriculture.tiles.TileWood; +import binnie.core.block.TileEntityMetadata; + +public class FakeWorld extends World { + public static FakeWorld instance = new FakeWorld(); + Block block; + int metadata; + TileEntity te; + + public ItemStack getWooLog() { + if (te instanceof TileWood) { + return TileWood.getPickBlock(block, this, 0, 0, 0); + } else if (te instanceof TileEntityMetadata) { + return new ItemStack(block, 1, ((TileEntityMetadata) te).getTileMetadata()); + } + return null; + } + + public FakeWorld() { + super((SaveHandler) null, "", (WorldProvider) null, new WorldSettings(Long.MAX_VALUE, GameType.NOT_SET, false, false, WorldType.FLAT), null); + } + + @Override + public boolean setBlock(int p_147449_1_, int p_147449_2_, int p_147449_3_, Block block) { + this.block = block; + return true; + } + + @Override + public boolean setBlock(int p_147465_1_, int p_147465_2_, int p_147465_3_, Block block, int metadata, int update) { + this.block = block; + this.metadata = metadata; + if (block.hasTileEntity(metadata)) { + te = block.createTileEntity(this, metadata); + } else { + TileWood wood = new TileWood(); + wood.setWoodType(EnumWoodType.VALUES[metadata]); + te = wood; + } + return true; + } + + @Override + public boolean setBlockToAir(int p_147468_1_, int p_147468_2_, int p_147468_3_) { + return true; + } + + @Override + public TileEntity getTileEntity(int x, int y, int z) { + return te; + } + + @Override + public void setTileEntity(int p_147455_1_, int p_147455_2_, int p_147455_3_, TileEntity p_147455_4_) { + + } + + @Override + public Block getBlock(int x, int y, int z) { + return block != null ? block : Blocks.air; + } + + @Override + public int getBlockMetadata(int p_72805_1_, int p_72805_2_, int p_72805_3_) { + return metadata; + } + + @Override + public boolean setBlockMetadataWithNotify(int p_72921_1_, int p_72921_2_, int p_72921_3_, int metadata, int p_72921_5_) { + this.metadata = metadata; + return true; + } + + @Override + protected IChunkProvider createChunkProvider() { + return null; + } + + @Override + protected int func_152379_p() { + return 0; + } + + @Override + public Entity getEntityByID(int p_73045_1_) { + return null; + } + +} diff --git a/src/main/java/binnie/extratrees/alcohol/Alcohol.java b/src/main/java/binnie/extratrees/alcohol/Alcohol.java new file mode 100644 index 00000000..0c96ff29 --- /dev/null +++ b/src/main/java/binnie/extratrees/alcohol/Alcohol.java @@ -0,0 +1,160 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.alcohol; + +import binnie.core.liquid.FluidContainer; +import binnie.Binnie; +import net.minecraftforge.fluids.FluidStack; +import binnie.extratrees.ExtraTrees; +import net.minecraft.client.renderer.texture.IIconRegister; +import java.util.ArrayList; +import net.minecraft.util.IIcon; +import java.util.List; +import binnie.core.liquid.IFluidType; + +public enum Alcohol implements IFluidType, ICocktailLiquid +{ + Apple("ciderApple", 16432700, 0.3, 0.05), + Apricot("wineApricot", 15781686, 0.3, 0.1), + Banana("wineBanana", 14993485, 0.3, 0.1), + Cherry("wineCherry", 11207702, 0.3, 0.1), + Elderberry("wineElderberry", 9764865, 0.3, 0.1), + Peach("ciderPeach", 15361563, 0.3, 0.05), + Pear("ciderPear", 15061095, 0.3, 0.05), + Plum("winePlum", 12063752, 0.3, 0.1), + Carrot("wineCarrot", 16219394, 0.3, 0.1), + WhiteWine("wineWhite", 15587989, 0.1, 0.1), + RedWine("wineRed", 7670539, 0.2, 0.1), + SparklingWine("wineSparkling", 16709566, 0.1, 0.1), + Agave("wineAgave", 13938276, 0.2, 0.1), + Potato("fermentedPotatoes", 12028240, 0.8, 0.1), + Citrus("wineCitrus", 16776960, 0.2, 0.1), + Cranberry("wineCranberry", 11599874, 0.2, 0.1), + Pineapple("winePineapple", 14724150, 0.2, 0.1), + Tomato("wineTomato", 12458521, 0.2, 0.1), + Fruit("juice", 16432700, 0.2, 0.1), + Ale("beerAle", 12991009, 0.7, 0.05), + Lager("beerLager", 15301637, 0.7, 0.05), + WheatBeer("beerWheat", 14380552, 0.7, 0.05), + RyeBeer("beerRye", 10836007, 0.7, 0.05), + CornBeer("beerCorn", 13411364, 0.7, 0.05), + Stout("beerStout", 5843201, 0.8, 0.05), + Barley("mashGrain", 12991009, 0.9, 0.05), + Wheat("mashWheat", 12991009, 0.9, 0.05), + Rye("mashRye", 10836007, 0.9, 0.05), + Corn("mashCorn", 13411364, 0.9, 0.05); + + List fermentationLiquid; + String fermentationSolid; + String ident; + IIcon icon; + int colour; + float transparency; + float abv; + + private void setFementation(final Juice juice) { + this.fermentationLiquid.add(juice.getIdentifier()); + } + + private void setFementation(final String oreDict) { + this.fermentationSolid = oreDict; + } + + private Alcohol(final String ident, final int colour, final double transparency, final double abv) { + this.fermentationLiquid = new ArrayList(); + this.fermentationSolid = ""; + this.ident = ident; + this.colour = colour; + this.transparency = (float) transparency; + this.abv = (float) abv; + } + + @Override + public String toString() { + return this.getName(); + } + + @Override + public IIcon getIcon() { + return this.icon; + } + + @Override + public void registerIcon(final IIconRegister register) { + this.icon = ExtraTrees.proxy.getIcon(register, "liquids/liquid"); + } + + @Override + public String getName() { + return ExtraTrees.proxy.localise("fluid.alcohol." + this.name().toLowerCase()); + } + + @Override + public String getIdentifier() { + return "binnie." + this.ident; + } + + @Override + public int getColour() { + return this.colour; + } + + @Override + public FluidStack get(final int amount) { + return Binnie.Liquid.getLiquidStack(this.getIdentifier(), amount); + } + + @Override + public int getTransparency() { + return (int) (Math.min(1.0, this.transparency + 0.3) * 255.0); + } + + @Override + public String getTooltip(final int ratio) { + return ratio + " Part" + ((ratio > 1) ? "s " : " ") + this.getName(); + } + + @Override + public boolean canPlaceIn(final FluidContainer container) { + return true; + } + + @Override + public boolean showInCreative(final FluidContainer container) { + return container == FluidContainer.Glass; + } + + @Override + public int getContainerColour() { + return this.getColour(); + } + + @Override + public float getABV() { + return this.abv; + } + + static { + Alcohol.Apple.setFementation(Juice.Apple); + Alcohol.Apricot.setFementation(Juice.Apricot); + Alcohol.Banana.setFementation(Juice.Banana); + Alcohol.Cherry.setFementation(Juice.Cherry); + Alcohol.Elderberry.setFementation(Juice.Elderberry); + Alcohol.Peach.setFementation(Juice.Peach); + Alcohol.Pear.setFementation(Juice.Pear); + Alcohol.Plum.setFementation(Juice.Plum); + Alcohol.Carrot.setFementation(Juice.Carrot); + Alcohol.WhiteWine.setFementation(Juice.WhiteGrape); + Alcohol.RedWine.setFementation(Juice.RedGrape); + Alcohol.Citrus.setFementation(Juice.Lemon); + Alcohol.Citrus.setFementation(Juice.Lime); + Alcohol.Citrus.setFementation(Juice.Orange); + Alcohol.Citrus.setFementation(Juice.Grapefruit); + Alcohol.Tomato.setFementation(Juice.Tomato); + Alcohol.Cranberry.setFementation(Juice.Cranberry); + Alcohol.Pineapple.setFementation(Juice.Pineapple); + Alcohol.Potato.setFementation("cropPotato"); + } +} diff --git a/src/main/java/binnie/extratrees/alcohol/AlcoholEffect.java b/src/main/java/binnie/extratrees/alcohol/AlcoholEffect.java new file mode 100644 index 00000000..640264bd --- /dev/null +++ b/src/main/java/binnie/extratrees/alcohol/AlcoholEffect.java @@ -0,0 +1,34 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.alcohol; + +import net.minecraft.potion.PotionEffect; +import net.minecraft.potion.Potion; +import net.minecraft.entity.player.EntityPlayer; + +public class AlcoholEffect +{ + public static void makeDrunk(final EntityPlayer player, final float strength) { + final int existingStrength = player.isPotionActive(Potion.confusion) ? player.getActivePotionEffect(Potion.confusion).getAmplifier() : 0; + final int existingTime = player.isPotionActive(Potion.confusion) ? player.getActivePotionEffect(Potion.confusion).getDuration() : 0; + int time = (int) (100.0 * Math.sqrt(strength)) + existingTime; + final float intensity = 0.1f * strength + existingStrength + existingTime / 500; + if (time < 5) { + time = 5; + } + float slowIntense = (intensity - 10.0f) / 4.0f; + if (slowIntense < 0.0f) { + slowIntense = 0.0f; + } + float blindIntense = (intensity - 25.0f) / 2.0f; + if (blindIntense < 0.0f) { + blindIntense = 0.0f; + } + player.addPotionEffect(new PotionEffect(Potion.confusion.id, time, (int) intensity, false)); + if (slowIntense > 0.0f) { + player.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, time, (int) slowIntense, false)); + } + } +} diff --git a/src/main/java/binnie/extratrees/alcohol/Cocktail.java b/src/main/java/binnie/extratrees/alcohol/Cocktail.java new file mode 100644 index 00000000..8fc70f37 --- /dev/null +++ b/src/main/java/binnie/extratrees/alcohol/Cocktail.java @@ -0,0 +1,175 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.alcohol; + +import binnie.extratrees.alcohol.drink.DrinkManager; +import binnie.extratrees.alcohol.drink.DrinkLiquid; +import java.util.HashMap; +import java.util.Map; + +public enum Cocktail +{ + Bellini("Bellini", Glassware.Flute, 15974764), + BlackRussian("Black Russian", Glassware.OldFashioned, 3347992), + BloodyMary("Bloody Mary", Glassware.Highball, 12660480), + Cosmopolitan("Cosmopolitan", Glassware.Cocktail, 14811136), + CubaLibre("Cuba Libre", Glassware.Highball, 9044996), + FrenchConnection("French Connection", Glassware.OldFashioned, 16166183), + GodFather("God Father", Glassware.OldFashioned, 13134109), + GodMother("God Mother", Glassware.OldFashioned, 14644737), + Grasshopper("Grasshopper", Glassware.Cocktail, 4441194), + French75("French 75", Glassware.Flute, 15521949), + HarveyWallbanger("Harvey Wallbanger", Glassware.Highball, 16371968), + HemingwaySpecial("Hemingway Special", Glassware.Cocktail, 15201205), + HorsesNeck("Horse's Neck", Glassware.OldFashioned, 16692480), + IrishCoffee("Irish Coffee", Glassware.Wine, 4460034), + Kir("Kir", Glassware.Wine, 16004638), + Bramble("Bramble", Glassware.OldFashioned, 12804974), + B52("B-52", Glassware.Shot, 12934656), + DarkNStormy("Dark 'N' Stormy", Glassware.Highball, 12215848), + DirtyMartini("Dirty Martini", Glassware.Cocktail, 14332499), + ExpressoMartini("Expresso Martini", Glassware.Cocktail, 6498346), + FrenchMartini("French Martini", Glassware.Cocktail, 12660045), + Kamikaze("Kamikaze", Glassware.Cocktail, 14801069), + LemonDropMartini("Lemon Drop Martini", Glassware.Cocktail, 16375437), + PiscoSour("Pisco Sour", Glassware.OldFashioned, 15394463), + RussianSpringPunch("Russian Spring Punch", Glassware.Highball, 11805740), + SpritzVeneziano("Spritz Veneziano", Glassware.OldFashioned, 15355648), + TommysMargarita("Tommy's Margartita", Glassware.Cocktail, 14867592), + Vesper("Vesper", Glassware.Cocktail, 15658732), + SexOnTheBeach("Sex on the Beach", Glassware.Highball, 16677426); + + static final Map cocktailIngredients; + public String name; + public Glassware glassware; + public int colour; + public Map ingredients; + + private Cocktail(final String name, final Glassware glassware, final int colour) { + this.ingredients = new HashMap(); + this.name = name; + this.glassware = glassware; + this.colour = colour; + } + + private void add(final ICocktailIngredient ingredient, final int ratio) { + this.ingredients.put(ingredient, ratio); + } + + public static Cocktail get(final Map ingredients) { + for (final Cocktail cocktail : values()) { + boolean is = true; + for (final Map.Entry entry : ingredients.entrySet()) { + if (cocktail.ingredients.get(entry.getKey()) != entry.getValue()) { + is = false; + } + } + if (is) { + return cocktail; + } + } + return null; + } + + public static void registerIngredient(final ICocktailIngredient ingredient) { + Cocktail.cocktailIngredients.put(ingredient.getIdentifier().toLowerCase(), ingredient); + DrinkManager.registerDrinkLiquid(ingredient.getIdentifier().toLowerCase(), new DrinkLiquid(ingredient.getName(), ingredient.getColour(), ingredient.getTransparency(), ingredient.getABV())); + } + + public static ICocktailIngredient getIngredient(final String name2) { + return Cocktail.cocktailIngredients.get(name2.toLowerCase()); + } + + public static boolean isIngredient(final String name) { + return name != null && Cocktail.cocktailIngredients.containsKey(name.toLowerCase()); + } + + static { + cocktailIngredients = new HashMap(); + Cocktail.Bellini.add(Alcohol.SparklingWine, 2); + Cocktail.Bellini.add(Juice.Peach, 1); + Cocktail.BlackRussian.add(Spirit.Vodka, 5); + Cocktail.BlackRussian.add(Liqueur.Coffee, 2); + Cocktail.BloodyMary.add(Spirit.Vodka, 3); + Cocktail.BloodyMary.add(Juice.Tomato, 6); + Cocktail.BloodyMary.add(Juice.Lemon, 1); + Cocktail.Cosmopolitan.add(Spirit.Vodka, 3); + Cocktail.Cosmopolitan.add(Liqueur.Orange, 1); + Cocktail.Cosmopolitan.add(Juice.Lime, 1); + Cocktail.Cosmopolitan.add(Juice.Cranberry, 2); + Cocktail.CubaLibre.add(MiscFluid.CarbonatedWater, 12); + Cocktail.CubaLibre.add(Spirit.WhiteRum, 5); + Cocktail.CubaLibre.add(Juice.Lime, 1); + Cocktail.FrenchConnection.add(Spirit.Brandy, 1); + Cocktail.FrenchConnection.add(Liqueur.Almond, 1); + Cocktail.GodFather.add(Spirit.Whiskey, 1); + Cocktail.GodFather.add(Liqueur.Almond, 1); + Cocktail.GodMother.add(Spirit.Vodka, 1); + Cocktail.GodFather.add(Liqueur.Almond, 1); + Cocktail.Grasshopper.add(Liqueur.Mint, 1); + Cocktail.Grasshopper.add(Liqueur.Chocolate, 1); + Cocktail.Grasshopper.add(MiscFluid.Cream, 1); + Cocktail.French75.add(Spirit.Gin, 2); + Cocktail.French75.add(Juice.Lemon, 1); + Cocktail.French75.add(Alcohol.SparklingWine, 4); + Cocktail.HarveyWallbanger.add(Spirit.Vodka, 3); + Cocktail.HarveyWallbanger.add(Liqueur.Herbal, 1); + Cocktail.HarveyWallbanger.add(Juice.Orange, 6); + Cocktail.HemingwaySpecial.add(Spirit.WhiteRum, 4); + Cocktail.HemingwaySpecial.add(Juice.Grapefruit, 3); + Cocktail.HemingwaySpecial.add(Liqueur.Cherry, 1); + Cocktail.HemingwaySpecial.add(Juice.Lime, 1); + Cocktail.HorsesNeck.add(Spirit.Brandy, 1); + Cocktail.HorsesNeck.add(MiscFluid.GingerAle, 3); + Cocktail.IrishCoffee.add(Spirit.Whiskey, 2); + Cocktail.IrishCoffee.add(MiscFluid.Coffee, 4); + Cocktail.IrishCoffee.add(MiscFluid.Cream, 2); + Cocktail.Kir.add(Alcohol.WhiteWine, 9); + Cocktail.Kir.add(Liqueur.Blackcurrant, 1); + Cocktail.Bramble.add(Spirit.Gin, 4); + Cocktail.Bramble.add(Juice.Lemon, 2); + Cocktail.Bramble.add(MiscFluid.SugarSyrup, 1); + Cocktail.Bramble.add(Liqueur.Blackberry, 2); + Cocktail.B52.add(Liqueur.Coffee, 1); + Cocktail.B52.add(Liqueur.Orange, 1); + Cocktail.DarkNStormy.add(Spirit.DarkRum, 1); + Cocktail.DarkNStormy.add(MiscFluid.GingerAle, 3); + Cocktail.DirtyMartini.add(Spirit.Vodka, 6); + Cocktail.DirtyMartini.add(Spirit.FortifiedWine, 1); + Cocktail.DirtyMartini.add(Juice.Olive, 1); + Cocktail.ExpressoMartini.add(Spirit.Vodka, 5); + Cocktail.ExpressoMartini.add(Liqueur.Coffee, 1); + Cocktail.ExpressoMartini.add(MiscFluid.SugarSyrup, 1); + Cocktail.ExpressoMartini.add(MiscFluid.Coffee, 1); + Cocktail.FrenchMartini.add(Spirit.Vodka, 3); + Cocktail.FrenchMartini.add(Liqueur.Raspberry, 1); + Cocktail.FrenchMartini.add(Juice.Pineapple, 1); + Cocktail.Kamikaze.add(Spirit.Vodka, 1); + Cocktail.Kamikaze.add(Liqueur.Orange, 1); + Cocktail.Kamikaze.add(Juice.Lime, 1); + Cocktail.LemonDropMartini.add(Spirit.Vodka, 5); + Cocktail.LemonDropMartini.add(Liqueur.Orange, 4); + Cocktail.LemonDropMartini.add(Juice.Lemon, 3); + Cocktail.PiscoSour.add(Spirit.Brandy, 8); + Cocktail.PiscoSour.add(Juice.Lemon, 4); + Cocktail.PiscoSour.add(MiscFluid.SugarSyrup, 3); + Cocktail.RussianSpringPunch.add(Spirit.Vodka, 5); + Cocktail.RussianSpringPunch.add(Juice.Lemon, 5); + Cocktail.RussianSpringPunch.add(Liqueur.Blackcurrant, 3); + Cocktail.RussianSpringPunch.add(MiscFluid.SugarSyrup, 1); + Cocktail.SpritzVeneziano.add(Alcohol.SparklingWine, 6); + Cocktail.SpritzVeneziano.add(MiscFluid.CarbonatedWater, 1); + Cocktail.TommysMargarita.add(Spirit.Tequila, 6); + Cocktail.TommysMargarita.add(Juice.Lime, 2); + Cocktail.TommysMargarita.add(MiscFluid.AgaveNectar, 1); + Cocktail.Vesper.add(Spirit.Gin, 8); + Cocktail.Vesper.add(Spirit.Vodka, 2); + Cocktail.Vesper.add(Spirit.FortifiedWine, 1); + Cocktail.SexOnTheBeach.add(Spirit.Vodka, 2); + Cocktail.SexOnTheBeach.add(Liqueur.Peach, 1); + Cocktail.SexOnTheBeach.add(Juice.Orange, 2); + Cocktail.SexOnTheBeach.add(Juice.Cranberry, 2); + } +} diff --git a/src/main/java/binnie/extratrees/alcohol/Glassware.java b/src/main/java/binnie/extratrees/alcohol/Glassware.java new file mode 100644 index 00000000..d044ce09 --- /dev/null +++ b/src/main/java/binnie/extratrees/alcohol/Glassware.java @@ -0,0 +1,74 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.alcohol; + +import net.minecraft.item.ItemStack; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.Binnie; +import binnie.extratrees.ExtraTrees; +import net.minecraft.util.IIcon; + +public enum Glassware +{ + BeerMug(16, 10, 14), + Pint(20, 6, 20), + Snifter(17, 14, 11), + Flute(6, 13, 15), + Cocktail(8, 20, 8), + Cordial(2, 15, 7), + Collins(12, 8, 18), + Highball(8, 10, 14), + Hurricane(15, 10, 18), + Margarita(12, 18, 9), + OldFashioned(8, 13, 8), + Wine(8, 17, 10), + Shot(1, 13, 7), + Sherry(2, 17, 7), + Coupe(6, 19, 8); + + private int capacity; + float contentBottom; + float contentHeight; + public IIcon glass; + public IIcon contents; + + public String getName(final String liquid) { + if (liquid == null) { + return ExtraTrees.proxy.localise("item.glassware." + this.name().toLowerCase()); + } + return Binnie.Language.localise(ExtraTrees.instance, "item.glassware." + this.name().toLowerCase() + ".usage", liquid); + } + + public int getCapacity() { + return this.capacity; + } + + private Glassware(final int capacity, final int contentBottom, final int contentHeight) { + this.capacity = 30 * capacity; + this.contentBottom = contentBottom / 32.0f; + this.contentHeight = contentHeight / 32.0f; + } + + public void registerIcons(final IIconRegister par1IconRegister) { + this.glass = ExtraTrees.proxy.getIcon(par1IconRegister, "glassware/" + this.toString().toLowerCase() + ".glass"); + this.contents = ExtraTrees.proxy.getIcon(par1IconRegister, "glassware/" + this.toString().toLowerCase() + ".contents"); + } + + public ItemStack get(final int i) { + return ExtraTrees.drink.getStack(this, null); + } + + public float getContentBottom() { + return this.contentBottom; + } + + public float getContentHeight() { + return this.contentHeight; + } + + public int getVolume() { + return this.getCapacity(); + } +} diff --git a/src/main/java/binnie/extratrees/alcohol/ICocktailIngredient.java b/src/main/java/binnie/extratrees/alcohol/ICocktailIngredient.java new file mode 100644 index 00000000..4ac3ad75 --- /dev/null +++ b/src/main/java/binnie/extratrees/alcohol/ICocktailIngredient.java @@ -0,0 +1,20 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.alcohol; + +public interface ICocktailIngredient +{ + String getName(); + + String getIdentifier(); + + int getColour(); + + int getTransparency(); + + String getTooltip(final int p0); + + float getABV(); +} diff --git a/src/main/java/binnie/extratrees/alcohol/ICocktailLiquid.java b/src/main/java/binnie/extratrees/alcohol/ICocktailLiquid.java new file mode 100644 index 00000000..d7b4a69c --- /dev/null +++ b/src/main/java/binnie/extratrees/alcohol/ICocktailLiquid.java @@ -0,0 +1,12 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.alcohol; + +import net.minecraftforge.fluids.FluidStack; + +public interface ICocktailLiquid extends ICocktailIngredient +{ + FluidStack get(final int p0); +} diff --git a/src/main/java/binnie/extratrees/alcohol/Juice.java b/src/main/java/binnie/extratrees/alcohol/Juice.java new file mode 100644 index 00000000..93ea197d --- /dev/null +++ b/src/main/java/binnie/extratrees/alcohol/Juice.java @@ -0,0 +1,120 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.alcohol; + +import binnie.Binnie; +import net.minecraftforge.fluids.FluidStack; +import binnie.extratrees.ExtraTrees; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.core.liquid.FluidContainer; +import net.minecraft.util.IIcon; +import binnie.core.liquid.IFluidType; + +public enum Juice implements IFluidType, ICocktailLiquid +{ + Apple("Apple Juice", "juiceApple", 16763442, 0.7, "Apple"), + Apricot("Apricot Juice", "juiceApricot", 16758046, 0.6, "Apricot"), + Banana("Banana Juice", "juiceBanana", 15324291, 0.6, "Banana"), + Cherry("Cherry Juice", "juiceCherry", 13044511, 0.6, "Cherry"), + Elderberry("Elderberry Juice", "juiceElderberry", 4204073, 0.6, "Elderberry"), + Lemon("Lemon Juice", "juiceLemon", 14604882, 0.7, "Lemon"), + Lime("Lime Juice", "juiceLime", 12177007, 0.6, "Lime"), + Orange("Orange Juice", "juiceOrange", 16359983, 0.8, "Orange"), + Peach("Peach Juice", "juicePeach", 16434525, 0.7, "Peach"), + Plum("Plum Juice", "juicePlum", 10559249, 0.7, "Plum"), + Carrot("Carrot Juice", "juiceCarrot", 16485911, 0.7, "Carrot"), + Tomato("Tomato Juice", "juiceTomato", 12731438, 0.7, "Tomato"), + Cranberry("Cranberry Juice", "juiceCranberry", 12920629, 0.7, "Cranberry"), + Grapefruit("Grapefruit Juice", "juiceGrapefruit", 15897173, 0.6, "Grapefruit"), + Olive("Olive Oil", "juiceOlive", 16042240, 0.6, "Olive"), + Pineapple("Pineapple Juice", "juicePineapple", 15189319, 0.6, "Pineapple"), + Pear("Pear Juice", "juicePear", 14204773, 0.6, "Pear"), + WhiteGrape("White Grape Juice", "juiceWhiteGrape", 16507769, 0.6, "WhiteGrape"), + RedGrape("Red Grape Juice", "juiceRedGrape", 9775412, 0.6, "RedGrape"); + + String name; + String ident; + public String squeezing; + IIcon icon; + int colour; + float transparency; + + private void addSqueezing(final String oreDict) { + this.squeezing = oreDict; + } + + private Juice(final String name, final String ident, final int colour, final double transparency, final String squeezing) { + this.name = name; + this.ident = ident; + this.colour = colour; + this.transparency = (float) transparency; + this.addSqueezing("crop" + squeezing); + } + + @Override + public String toString() { + return this.name; + } + + @Override + public boolean canPlaceIn(final FluidContainer container) { + return true; + } + + @Override + public boolean showInCreative(final FluidContainer container) { + return container == FluidContainer.Glass; + } + + @Override + public IIcon getIcon() { + return this.icon; + } + + @Override + public void registerIcon(final IIconRegister register) { + this.icon = ExtraTrees.proxy.getIcon(register, "liquids/liquid"); + } + + @Override + public String getName() { + return this.name; + } + + @Override + public String getIdentifier() { + return "binnie." + this.ident; + } + + @Override + public int getColour() { + return this.colour; + } + + @Override + public FluidStack get(final int amount) { + return Binnie.Liquid.getLiquidStack(this.getIdentifier(), amount); + } + + @Override + public int getTransparency() { + return (int) (Math.min(1.0, this.transparency + 0.3) * 255.0); + } + + @Override + public String getTooltip(final int ratio) { + return ratio + " Part" + ((ratio > 1) ? "s " : " ") + this.getName(); + } + + @Override + public int getContainerColour() { + return this.getColour(); + } + + @Override + public float getABV() { + return 0.0f; + } +} diff --git a/src/main/java/binnie/extratrees/alcohol/Liqueur.java b/src/main/java/binnie/extratrees/alcohol/Liqueur.java new file mode 100644 index 00000000..5db82071 --- /dev/null +++ b/src/main/java/binnie/extratrees/alcohol/Liqueur.java @@ -0,0 +1,141 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.alcohol; + +import binnie.Binnie; +import net.minecraftforge.fluids.FluidStack; +import binnie.extratrees.ExtraTrees; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.core.liquid.FluidContainer; +import net.minecraft.util.IIcon; +import binnie.core.liquid.IFluidType; + +public enum Liqueur implements IFluidType, ICocktailLiquid +{ + Almond("Almond", 14966063, 0.3, 0.2), + Orange("Orange", 16353536, 0.4, 0.2), + Banana("Banana", 16302592, 0.5, 0.2), + Chocolate("Chocolate", 12667680, 0.3, 0.2), + Mint("Mint", 2737788, 0.4, 0.2), + Hazelnut("Hazelnut", 15570987, 0.3, 0.2), + Cinnamon("Cinnamon", 15028224, 0.3, 0.2), + Coffee("Coffee", 9847577, 0.4, 0.2), + Melon("Melon", 11584049, 0.4, 0.2), + Anise("Anise", 14344681, 0.3, 0.2), + Peach("Peach", 16684384, 0.4, 0.2), + Lemon("Lemon", 16311405, 0.4, 0.2), + Herbal("Herbal", 16700673, 0.3, 0.2), + Cherry("Cherry", 14096641, 0.5, 0.2), + Blackcurrant("Blackcurrant", 6962541, 0.5, 0.2), + Blackberry("Blackberry", 6837581, 0.5, 0.2), + Raspberry("Raspberry", 10158848, 0.5, 0.2); + + String name; + String ident; + IIcon icon; + int colour; + float transparency; + float abv; + + private void addFlavour(final String oreDict) { + } + + private Liqueur(final String name, final int colour, final double transparency, final double abv) { + this(name + " Liqueur", "liqueur" + name, colour, transparency, abv); + } + + private Liqueur(final String name, final String ident, final int colour, final double transparency, final double abv) { + this.name = name; + this.ident = ident; + this.colour = colour; + this.transparency = (float) transparency; + this.abv = (float) abv; + } + + @Override + public String toString() { + return this.name; + } + + @Override + public boolean canPlaceIn(final FluidContainer container) { + return true; + } + + @Override + public boolean showInCreative(final FluidContainer container) { + return container == FluidContainer.Glass; + } + + @Override + public IIcon getIcon() { + return this.icon; + } + + @Override + public void registerIcon(final IIconRegister register) { + this.icon = ExtraTrees.proxy.getIcon(register, "liquids/liquid"); + } + + @Override + public String getName() { + return this.name; + } + + @Override + public String getIdentifier() { + return "binnie." + this.ident; + } + + @Override + public int getColour() { + return this.colour; + } + + @Override + public FluidStack get(final int amount) { + return Binnie.Liquid.getLiquidStack(this.getIdentifier(), amount); + } + + @Override + public int getTransparency() { + return (int) (Math.min(1.0, this.transparency + 0.3) * 255.0); + } + + @Override + public String getTooltip(final int ratio) { + return ratio + " Part" + ((ratio > 1) ? "s " : " ") + this.getName(); + } + + @Override + public int getContainerColour() { + return this.getColour(); + } + + @Override + public float getABV() { + return this.abv; + } + + static { + Liqueur.Almond.addFlavour("cropAlmond"); + Liqueur.Orange.addFlavour("cropOrange"); + Liqueur.Banana.addFlavour("cropBanana"); + Liqueur.Chocolate.addFlavour("cropCocoa"); + Liqueur.Mint.addFlavour("cropMint"); + Liqueur.Hazelnut.addFlavour("cropHazelnut"); + Liqueur.Cinnamon.addFlavour("cropCinnamon"); + Liqueur.Coffee.addFlavour("cropCoffee"); + Liqueur.Melon.addFlavour("cropMelon"); + Liqueur.Anise.addFlavour("cropAnise"); + Liqueur.Peach.addFlavour("cropPeach"); + Liqueur.Lemon.addFlavour("cropLemon"); + Liqueur.Herbal.addFlavour("cropHerbal"); + Liqueur.Cherry.addFlavour("cropCherry"); + Liqueur.Blackcurrant.addFlavour("cropBlackcurrant"); + Liqueur.Blackberry.addFlavour("cropBlackberry"); + Liqueur.Raspberry.addFlavour("cropRaspberry"); + } +} diff --git a/src/main/java/binnie/extratrees/alcohol/MiscFluid.java b/src/main/java/binnie/extratrees/alcohol/MiscFluid.java new file mode 100644 index 00000000..1e7bee5e --- /dev/null +++ b/src/main/java/binnie/extratrees/alcohol/MiscFluid.java @@ -0,0 +1,103 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.alcohol; + +import binnie.Binnie; +import net.minecraftforge.fluids.FluidStack; +import binnie.extratrees.ExtraTrees; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.core.liquid.FluidContainer; +import net.minecraft.util.IIcon; +import binnie.core.liquid.IFluidType; + +public enum MiscFluid implements IFluidType, ICocktailLiquid +{ + CarbonatedWater("Carbonated Water", "water.carbonated", 13421823, 0.10000000149011612), + TonicWater("Tonic Water", "water.tonic", 13421823, 0.10000000149011612), + Cream("Carbonated Water", "cream", 15395550, 2.0), + GingerAle("Ginger Ale", "gingerAle", 16777215, 0.6000000238418579), + Coffee("Coffee", "coffee", 5910789, 0.30000001192092896), + SugarSyrup("Simple Syrup", "syrup.simple", 16120049, 0.10000000149011612), + AgaveNectar("Agave Nectar", "syrup.agave", 13598245, 0.699999988079071), + GrenadineSyrup("Grenadine Syrup", "syrup.grenadine", 16009573, 0.800000011920929); + + String name; + String ident; + IIcon icon; + int colour; + float transparency; + + private MiscFluid(final String name, final String ident, final int colour, final double transparency) { + this.name = name; + this.ident = ident; + this.colour = colour; + this.transparency = (float) transparency; + } + + @Override + public String toString() { + return this.name; + } + + @Override + public boolean canPlaceIn(final FluidContainer container) { + return true; + } + + @Override + public boolean showInCreative(final FluidContainer container) { + return container == FluidContainer.Glass; + } + + @Override + public IIcon getIcon() { + return this.icon; + } + + @Override + public void registerIcon(final IIconRegister register) { + this.icon = ExtraTrees.proxy.getIcon(register, "liquids/liquid"); + } + + @Override + public String getName() { + return this.name; + } + + @Override + public String getIdentifier() { + return "binnie." + this.ident; + } + + @Override + public int getColour() { + return this.colour; + } + + @Override + public FluidStack get(final int amount) { + return Binnie.Liquid.getLiquidStack(this.getIdentifier(), amount); + } + + @Override + public int getTransparency() { + return (int) (Math.min(1.0, this.transparency + 0.3) * 255.0); + } + + @Override + public String getTooltip(final int ratio) { + return ratio + " Part" + ((ratio > 1) ? "s " : " ") + this.getName(); + } + + @Override + public int getContainerColour() { + return this.getColour(); + } + + @Override + public float getABV() { + return 0.0f; + } +} diff --git a/src/main/java/binnie/extratrees/alcohol/ModuleAlcohol.java b/src/main/java/binnie/extratrees/alcohol/ModuleAlcohol.java new file mode 100644 index 00000000..974b5114 --- /dev/null +++ b/src/main/java/binnie/extratrees/alcohol/ModuleAlcohol.java @@ -0,0 +1,137 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.alcohol; + +import binnie.extratrees.machines.Distillery; +import java.util.List; +import binnie.extratrees.machines.Brewery; +import binnie.extratrees.machines.Press; +import net.minecraftforge.fluids.FluidStack; +import java.util.Map; +import forestry.api.recipes.RecipeManagers; +import binnie.extratrees.item.Food; +import net.minecraftforge.oredict.OreDictionary; +import net.minecraft.item.ItemStack; +import java.util.ArrayList; +import binnie.extratrees.alcohol.drink.DrinkManager; +import binnie.extratrees.alcohol.drink.DrinkLiquid; +import binnie.core.liquid.IFluidType; +import binnie.core.liquid.ItemFluidContainer; +import net.minecraftforge.client.IItemRenderer; +import net.minecraft.item.Item; +import binnie.extratrees.alcohol.drink.CocktailRenderer; +import binnie.extratrees.alcohol.drink.ItemDrink; +import binnie.core.BinnieCore; +import binnie.extratrees.ExtraTrees; +import binnie.Binnie; +import binnie.core.resource.BinnieIcon; +import binnie.core.IInitializable; + +public class ModuleAlcohol implements IInitializable +{ + public static int drinkRendererID; + public static BinnieIcon liquid; + + @Override + public void preInit() { + ModuleAlcohol.liquid = Binnie.Resource.getBlockIcon(ExtraTrees.instance, "liquids/liquid"); + ModuleAlcohol.drinkRendererID = BinnieCore.proxy.getUniqueRenderID(); + ExtraTrees.drink = new ItemDrink(); + BinnieCore.proxy.registerCustomItemRenderer(ExtraTrees.drink, new CocktailRenderer()); + Binnie.Liquid.createLiquids(Juice.values(), ItemFluidContainer.LiquidJuice); + Binnie.Liquid.createLiquids(Alcohol.values(), ItemFluidContainer.LiquidAlcohol); + Binnie.Liquid.createLiquids(Spirit.values(), ItemFluidContainer.LiquidSpirit); + Binnie.Liquid.createLiquids(Liqueur.values(), ItemFluidContainer.LiquidLiqueuer); + for (final Juice juice : Juice.values()) { + Cocktail.registerIngredient(juice); + } + for (final Alcohol juice2 : Alcohol.values()) { + Cocktail.registerIngredient(juice2); + } + for (final Spirit juice3 : Spirit.values()) { + Cocktail.registerIngredient(juice3); + } + for (final Liqueur juice4 : Liqueur.values()) { + Cocktail.registerIngredient(juice4); + } + DrinkManager.registerDrinkLiquid("water", new DrinkLiquid("Water", 13421823, 0.1f, 0.0f)); + } + + @Override + public void init() { + } + + @Override + public void postInit() { + for (final Juice juice : Juice.values()) { + final String oreDict = juice.squeezing; + final List ores = new ArrayList(); + ores.addAll(OreDictionary.getOres(oreDict)); + for (final Food food : Food.values()) { + if (food.getOres().contains(oreDict)) { + ores.add(food.get(1)); + } + } + for (final ItemStack stack : ores) { + for (final Map.Entry entry : RecipeManagers.squeezerManager.getRecipes().entrySet()) { + try { + final ItemStack input = (ItemStack) entry.getKey()[0]; + final FluidStack output = (FluidStack) entry.getValue()[1]; + if (!ItemStack.areItemStacksEqual(stack, input) && !OreDictionary.itemMatches(input, stack, true)) { + continue; + } + int amount = output.amount; + if (output.getFluid().getName() == "seedoil") { + amount *= 2; + } + Press.addRecipe(stack, juice.get(amount)); + } catch (Exception ex) { + } + } + } + } + for (final Alcohol alcohol : Alcohol.values()) { + for (final String fermentLiquid : alcohol.fermentationLiquid) { + final FluidStack fluid = Binnie.Liquid.getLiquidStack(fermentLiquid, 5); + if (fluid != null) { + Brewery.addRecipe(fluid, alcohol.get(5)); + } + } + } + Brewery.addBeerAndMashRecipes(); + this.addDistillery(Alcohol.Apple, Spirit.AppleBrandy, Spirit.AppleLiquor, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.Pear, Spirit.PearBrandy, Spirit.PearLiquor, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.Apricot, Spirit.ApricotBrandy, Spirit.ApricotLiquor, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.Banana, Spirit.FruitBrandy, Spirit.FruitLiquor, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.Cherry, Spirit.CherryBrandy, Spirit.CherryLiquor, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.Elderberry, Spirit.ElderberryBrandy, Spirit.ElderberryLiquor, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.Peach, Spirit.FruitBrandy, Spirit.FruitLiquor, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.Plum, Spirit.PlumBrandy, Spirit.FruitLiquor, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.Carrot, Spirit.FruitBrandy, Spirit.Vodka, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.WhiteWine, Spirit.Brandy, Spirit.Brandy, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.RedWine, Spirit.Brandy, Spirit.Brandy, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.SparklingWine, Spirit.Brandy, Spirit.Brandy, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.Agave, Spirit.Tequila, Spirit.Tequila, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.Potato, Spirit.FruitBrandy, Spirit.Vodka, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.Citrus, Spirit.CitrusBrandy, Spirit.FruitLiquor, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.Cranberry, Spirit.FruitBrandy, Spirit.FruitLiquor, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.Pineapple, Spirit.FruitBrandy, Spirit.FruitLiquor, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.Tomato, Spirit.FruitBrandy, Spirit.FruitLiquor, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.Fruit, Spirit.FruitBrandy, Spirit.FruitLiquor, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.Barley, Spirit.Whiskey, Spirit.Vodka, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.Wheat, Spirit.WheatWhiskey, Spirit.Vodka, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.Rye, Spirit.RyeWhiskey, Spirit.Vodka, Spirit.NeutralSpirit); + this.addDistillery(Alcohol.Corn, Spirit.CornWhiskey, Spirit.Vodka, Spirit.NeutralSpirit); + } + + private void addDistillery(final IFluidType source, final IFluidType a, final IFluidType b, final IFluidType c) { + Distillery.addRecipe(source.get(5), a.get(4), 0); + Distillery.addRecipe(source.get(5), b.get(2), 1); + Distillery.addRecipe(source.get(5), c.get(1), 2); + Distillery.addRecipe(a.get(5), b.get(2), 0); + Distillery.addRecipe(a.get(5), b.get(1), 1); + Distillery.addRecipe(b.get(5), c.get(2), 0); + } +} diff --git a/src/main/java/binnie/extratrees/alcohol/Spirit.java b/src/main/java/binnie/extratrees/alcohol/Spirit.java new file mode 100644 index 00000000..402b06c6 --- /dev/null +++ b/src/main/java/binnie/extratrees/alcohol/Spirit.java @@ -0,0 +1,124 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.alcohol; + +import binnie.Binnie; +import net.minecraftforge.fluids.FluidStack; +import binnie.extratrees.ExtraTrees; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.core.liquid.FluidContainer; +import net.minecraft.util.IIcon; +import binnie.core.liquid.IFluidType; + +public enum Spirit implements IFluidType, ICocktailLiquid +{ + NeutralSpirit("Neutral Spirit", "spiritNeutral", 16777215, 0.05, 0.8), + Vodka("Vodka", "vodka", 16053751, 0.05, 0.4), + WhiteRum("White Rum", "rumWhite", 15132132, 0.05, 0.4), + DarkRum("Dark Rum", "rumDark", 11018752, 0.4, 0.4), + Whiskey("Whiskey", "whiskey", 13594368, 0.2, 0.4), + CornWhiskey("Bourbon", "whiskeyCorn", 9835009, 0.2, 0.4), + RyeWhiskey("Rye Whiskey", "whiskeyRye", 16085800, 0.2, 0.4), + WheatWhiskey("Wheat Whiskey", "whiskeyWheat", 14976530, 0.2, 0.4), + FortifiedWine("Fortified Wine", "wineFortified", 15569439, 0.2, 0.2), + Tequila("Tequila", "tequila", 16116160, 0.05, 0.4), + Brandy("Brandy", "brandyGrape", 16228128, 0.2, 0.4), + AppleBrandy("Apple Brandy", "brandyApple", 14985790, 0.2, 0.4), + PearBrandy("Pear Brandy", "brandyPear", 16696883, 0.2, 0.4), + ApricotBrandy("Apricot Brandy", "brandyApricot", 13336387, 0.2, 0.4), + PlumBrandy("Plum Brandy", "brandyPlum", 9511697, 0.2, 0.4), + CherryBrandy("Cherry Brandy", "brandyCherry", 8588062, 0.2, 0.4), + ElderberryBrandy("Elderberry Brandy", "brandyElderberry", 12462919, 0.2, 0.4), + CitrusBrandy("Citrus Brandy", "brandyCitrus", 13336387, 0.2, 0.4), + FruitBrandy("Fruit Brandy", "brandyFruit", 14985790, 0.2, 0.4), + Cachaca("Cachaca", "spiritSugarcane", 15331535, 0.1, 0.4), + Gin("Gin", "spiritGin", 16185078, 0.05, 0.4), + AppleLiquor("Apple Liquor", "liquorApple", 13421772, 0.05, 0.4), + PearLiquor("Pear Liquor", "liquorPear", 13421772, 0.05, 0.4), + CherryLiquor("Cherry Liquor", "liquorCherry", 13421772, 0.05, 0.4), + ElderberryLiquor("Elderberry Liquor", "liquorElderberry", 13421772, 0.05, 0.4), + ApricotLiquor("Apricot Liquor", "liquorApricot", 13421772, 0.05, 0.4), + FruitLiquor("Fruit Liquor", "liquorFruit", 13421772, 0.05, 0.4); + + String name; + String ident; + IIcon icon; + int colour; + float transparency; + float abv; + + private Spirit(final String name, final String ident, final int colour, final double transparency, final double abv) { + this.name = name; + this.ident = ident; + this.colour = colour; + this.transparency = (float) transparency; + this.abv = (float) abv; + } + + @Override + public String toString() { + return this.name; + } + + @Override + public boolean canPlaceIn(final FluidContainer container) { + return true; + } + + @Override + public boolean showInCreative(final FluidContainer container) { + return container == FluidContainer.Glass; + } + + @Override + public IIcon getIcon() { + return this.icon; + } + + @Override + public void registerIcon(final IIconRegister register) { + this.icon = ExtraTrees.proxy.getIcon(register, "liquids/liquid"); + } + + @Override + public String getName() { + return this.name; + } + + @Override + public String getIdentifier() { + return "binnie." + this.ident; + } + + @Override + public int getColour() { + return this.colour; + } + + @Override + public FluidStack get(final int amount) { + return Binnie.Liquid.getLiquidStack(this.getIdentifier(), amount); + } + + @Override + public int getTransparency() { + return (int) (Math.min(1.0, this.transparency + 0.3) * 255.0); + } + + @Override + public String getTooltip(final int ratio) { + return ratio + " Part" + ((ratio > 1) ? "s " : " ") + this.getName(); + } + + @Override + public int getContainerColour() { + return this.getColour(); + } + + @Override + public float getABV() { + return this.abv; + } +} diff --git a/src/main/java/binnie/extratrees/alcohol/drink/BlockDrink.java b/src/main/java/binnie/extratrees/alcohol/drink/BlockDrink.java new file mode 100644 index 00000000..13eacb88 --- /dev/null +++ b/src/main/java/binnie/extratrees/alcohol/drink/BlockDrink.java @@ -0,0 +1,49 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.alcohol.drink; + +import binnie.extratrees.alcohol.ModuleAlcohol; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.block.material.Material; +import net.minecraft.block.BlockContainer; + +public class BlockDrink extends BlockContainer +{ + public BlockDrink() { + super(Material.glass); + this.setBlockName("drink"); + this.setCreativeTab(CreativeTabs.tabTools); + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderBlockPass() { + return 1; + } + + @Override + public TileEntity createNewTileEntity(final World p_149915_1_, final int p_149915_2_) { + return new TileEntityDrink(); + } + + @Override + public int getRenderType() { + return ModuleAlcohol.drinkRendererID; + } + + @Override + public boolean isNormalCube() { + return false; + } + + @Override + public boolean isOpaqueCube() { + return true; + } +} diff --git a/src/main/java/binnie/extratrees/alcohol/drink/BlockDrinkRenderer.java b/src/main/java/binnie/extratrees/alcohol/drink/BlockDrinkRenderer.java new file mode 100644 index 00000000..8e0b7454 --- /dev/null +++ b/src/main/java/binnie/extratrees/alcohol/drink/BlockDrinkRenderer.java @@ -0,0 +1,52 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.alcohol.drink; + +import binnie.extratrees.alcohol.ModuleAlcohol; +import net.minecraft.init.Blocks; +import net.minecraft.client.renderer.Tessellator; +import org.lwjgl.opengl.GL11; +import net.minecraft.world.IBlockAccess; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.block.Block; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; + +public class BlockDrinkRenderer implements ISimpleBlockRenderingHandler +{ + @Override + public void renderInventoryBlock(final Block block, final int metadata, final int modelId, final RenderBlocks renderer) { + } + + @Override + public boolean renderWorldBlock(final IBlockAccess world, final int x, final int y, final int z, final Block block, final int modelId, final RenderBlocks renderer) { + GL11.glPushMatrix(); + Tessellator.instance.setColorRGBA(255, 255, 255, 150); + final Tessellator tess = Tessellator.instance; + renderer.renderFaceYPos(block, x, y, z, Blocks.dirt.getIcon(0, 0)); + final float s = 0.0625f; + for (int h = 0; h < 16; ++h) { + final float d1 = 8.0f * s; + final float d2 = 8.0f * s; + final float h2 = h * s; + final float h3 = h * s; + tess.addVertexWithUV(x + 0.5f - d1, y + h2, z + 0.5f - d1, 0.0, 0.0); + tess.addVertexWithUV(x + 0.5f - d1, y + h3, z + 0.5f - d1, 0.0, 0.0); + tess.addVertexWithUV(x + 0.5f + d1, y + h3, z + 0.5f - d1, 0.0, 0.0); + tess.addVertexWithUV(x + 0.5f + d1, y + h2, z + 0.5f - d1, 0.0, 0.0); + } + GL11.glPopMatrix(); + return false; + } + + @Override + public boolean shouldRender3DInInventory(final int modelId) { + return false; + } + + @Override + public int getRenderId() { + return ModuleAlcohol.drinkRendererID; + } +} diff --git a/src/main/java/binnie/extratrees/alcohol/drink/CocktailRenderer.java b/src/main/java/binnie/extratrees/alcohol/drink/CocktailRenderer.java new file mode 100644 index 00000000..9eae382d --- /dev/null +++ b/src/main/java/binnie/extratrees/alcohol/drink/CocktailRenderer.java @@ -0,0 +1,231 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.alcohol.drink; + +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.texture.TextureUtil; +import binnie.core.BinnieCore; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraft.util.IIcon; +import net.minecraftforge.fluids.FluidStack; +import binnie.extratrees.alcohol.Glassware; +import net.minecraft.client.renderer.Tessellator; +import binnie.extratrees.ExtraTrees; +import org.lwjgl.opengl.GL11; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.item.ItemStack; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraftforge.client.IItemRenderer; + +public class CocktailRenderer implements IItemRenderer +{ + private void renderCocktail(final RenderBlocks renderBlocks, final ItemStack item, final float p, final float q, final float r) { + final RenderItem renderItem = new RenderItem(); + GL11.glEnable(3042); + GL11.glBlendFunc(770, 771); + final Glassware glass = ExtraTrees.drink.getGlassware(item); + final FluidStack fluid = ExtraTrees.drink.getFluid(item); + final IDrinkLiquid drink = (fluid == null) ? null : DrinkManager.getLiquid(fluid.getFluid()); + this.setColor(16777215, 0.8f); + renderItem.renderIcon(0, 0, glass.glass, 16, 16); + if (drink != null) { + this.setColor(drink.getColour(), 1.2f * drink.getTransparency() + 0.3f); + final IIcon icon = glass.contents; + final float amount = fluid.amount / glass.getVolume(); + final float level = glass.getContentHeight() * (1.0f - amount); + final float gapAtTop = 1.0f - (glass.getContentBottom() + glass.getContentHeight()); + final float x = 0.0f; + final float y = 16.0f * (gapAtTop + level); + final float w = 16.0f; + final float h = 16.0f - y; + final float minV = icon.getInterpolatedV(y); + final float maxV = icon.getInterpolatedV(16.0); + final Tessellator tessellator = Tessellator.instance; + tessellator.startDrawingQuads(); + tessellator.addVertexWithUV(x + 0.0f, y + h, renderItem.zLevel, icon.getMinU(), maxV); + tessellator.addVertexWithUV(x + w, y + h, renderItem.zLevel, icon.getMaxU(), maxV); + tessellator.addVertexWithUV(x + w, y + 0.0f, renderItem.zLevel, icon.getMaxU(), minV); + tessellator.addVertexWithUV(x + 0.0f, y + 0.0f, renderItem.zLevel, icon.getMinU(), minV); + tessellator.draw(); + } + GL11.glDisable(3042); + } + + private void setColor(final int i1, final float alpha) { + final float f = (i1 >> 16 & 0xFF) / 255.0f; + final float f2 = (i1 >> 8 & 0xFF) / 255.0f; + final float f3 = (i1 & 0xFF) / 255.0f; + GL11.glColor4f(f, f2, f3, (alpha > 1.0f) ? 1.0f : alpha); + } + + private void renderFace(final Tessellator tessellator, final ForgeDirection dir) { + switch (dir) { + case DOWN: { + tessellator.addVertex(0.0, 0.0, 0.0); + tessellator.addVertex(0.0, 0.0, 1.0); + tessellator.addVertex(1.0, 0.0, 1.0); + tessellator.addVertex(1.0, 0.0, 0.0); + break; + } + } + } + + @Override + public boolean handleRenderType(final ItemStack item, final IItemRenderer.ItemRenderType type) { + switch (type) { + case ENTITY: { + return true; + } + case EQUIPPED: { + return true; + } + case INVENTORY: { + return true; + } + case EQUIPPED_FIRST_PERSON: { + return true; + } + default: { + return false; + } + } + } + + @Override + public boolean shouldUseRenderHelper(final IItemRenderer.ItemRenderType type, final ItemStack item, final IItemRenderer.ItemRendererHelper helper) { + return helper == IItemRenderer.ItemRendererHelper.ENTITY_ROTATION || helper == IItemRenderer.ItemRendererHelper.ENTITY_BOBBING; + } + + @Override + public void renderItem(final IItemRenderer.ItemRenderType type, final ItemStack item, final Object... data) { + switch (type) { + case ENTITY: + case EQUIPPED: + case EQUIPPED_FIRST_PERSON: { + if (type == IItemRenderer.ItemRenderType.ENTITY) { + GL11.glTranslatef(-0.5f, -0.25f, -0.0f); + } + final TextureManager texturemanager = BinnieCore.proxy.getMinecraftInstance().getTextureManager(); + final Glassware glass = ExtraTrees.drink.getGlassware(item); + final FluidStack fluid = ExtraTrees.drink.getFluid(item); + IIcon iicon = glass.glass; + final float f = iicon.getMinU(); + final float f2 = iicon.getMaxU(); + final float f3 = iicon.getMinV(); + final float f4 = iicon.getMaxV(); + texturemanager.bindTexture(texturemanager.getResourceLocation(item.getItemSpriteNumber())); + TextureUtil.func_152777_a(false, false, 1.0f); + this.setColor(16777215, 0.8f); + final IDrinkLiquid drink = (fluid == null) ? null : DrinkManager.getLiquid(fluid.getFluid()); + this.setColor(16777215, 0.8f); + ItemRenderer.renderItemIn2D(Tessellator.instance, f2, f3, f, f4, iicon.getIconWidth(), iicon.getIconHeight(), 0.0625f); + if (drink != null) { + this.setColor(drink.getColour(), 1.2f * drink.getTransparency() + 0.3f); + iicon = glass.contents; + final IIcon icon = glass.contents; + final float amount = fluid.amount / glass.getVolume(); + final float level = glass.getContentHeight() * (1.0f - amount); + final float gapAtTop = 1.0f - (glass.getContentBottom() + glass.getContentHeight()); + final float x = 0.0f; + final float y = 1.0f * (gapAtTop + level); + final float w = 1.0f; + final float h = 1.0f - y; + final float minV = icon.getInterpolatedV(y * 16.0f); + final float maxV = icon.getInterpolatedV(16.0); + final float minU = icon.getMinU(); + final float maxU = icon.getMaxU(); + final Tessellator tessellator = Tessellator.instance; + tessellator.setNormal(0.0f, 0.0f, -1.0f); + tessellator.startDrawingQuads(); + tessellator.addVertexWithUV(0.0, 1.0 - y, -0.03125, maxU, minV); + tessellator.addVertexWithUV(1.0, 1.0 - y, -0.03125, minU, minV); + tessellator.addVertexWithUV(1.0, 0.0, -0.03125, minU, maxV); + tessellator.addVertexWithUV(0.0, 0.0, -0.03125, maxU, maxV); + tessellator.draw(); + tessellator.setNormal(0.0f, 0.0f, 1.0f); + tessellator.startDrawingQuads(); + tessellator.addVertexWithUV(0.0, 1.0 - y, -0.03125, maxU, minV); + tessellator.addVertexWithUV(0.0, 0.0, -0.03125, maxU, maxV); + tessellator.addVertexWithUV(1.0, 0.0, -0.03125, minU, maxV); + tessellator.addVertexWithUV(1.0, 1.0 - y, -0.03125, minU, minV); + tessellator.draw(); + break; + } + break; + } + case INVENTORY: { + this.renderCocktail((RenderBlocks) data[0], item, -0.5f, -0.5f, -0.5f); + break; + } + } + } + + public void renderItemIn2DPercentage(final Tessellator tesselator, final float maxU, final float minV, final float minU, float maxV, final int width, final int height, final float depth, final float percent) { + maxV = minV + (maxV - minV) * 1.0f; + tesselator.startDrawingQuads(); + tesselator.setNormal(0.0f, 0.0f, 1.0f); + tesselator.addVertexWithUV(0.0, 0.0, 0.0, maxU, maxV); + tesselator.addVertexWithUV(1.0, 0.0, 0.0, minU, maxV); + tesselator.addVertexWithUV(1.0, 1.0, 0.0, minU, minV); + tesselator.addVertexWithUV(0.0, 1.0, 0.0, maxU, minV); + tesselator.draw(); + tesselator.startDrawingQuads(); + tesselator.setNormal(0.0f, 0.0f, -1.0f); + tesselator.addVertexWithUV(0.0, percent, 0.0f - depth, maxU, minV); + tesselator.addVertexWithUV(1.0, percent, 0.0f - depth, minU, minV); + tesselator.addVertexWithUV(1.0, 0.0, 0.0f - depth, minU, maxV); + tesselator.addVertexWithUV(0.0, 0.0, 0.0f - depth, maxU, maxV); + tesselator.draw(); + final float f5 = 0.5f * (maxU - minU) / width; + final float f6 = 0.5f * (maxV - minV) / height; + tesselator.startDrawingQuads(); + tesselator.setNormal(-1.0f, 0.0f, 0.0f); + for (int k = 0; k < width; ++k) { + final float f7 = k / width; + final float f8 = maxU + (minU - maxU) * f7 - f5; + tesselator.addVertexWithUV(f7, 0.0, 0.0f - depth, f8, maxV); + tesselator.addVertexWithUV(f7, 0.0, 0.0, f8, maxV); + tesselator.addVertexWithUV(f7, 1.0, 0.0, f8, minV); + tesselator.addVertexWithUV(f7, 1.0, 0.0f - depth, f8, minV); + } + tesselator.draw(); + tesselator.startDrawingQuads(); + tesselator.setNormal(1.0f, 0.0f, 0.0f); + for (int k = 0; k < width; ++k) { + final float f7 = k / width; + final float f8 = maxU + (minU - maxU) * f7 - f5; + final float f9 = f7 + 1.0f / width; + tesselator.addVertexWithUV(f9, 1.0, 0.0f - depth, f8, minV); + tesselator.addVertexWithUV(f9, 1.0, 0.0, f8, minV); + tesselator.addVertexWithUV(f9, 0.0, 0.0, f8, maxV); + tesselator.addVertexWithUV(f9, 0.0, 0.0f - depth, f8, maxV); + } + tesselator.draw(); + tesselator.startDrawingQuads(); + tesselator.setNormal(0.0f, 1.0f, 0.0f); + for (int k = 0; k < height; ++k) { + final float f7 = k / height; + final float f8 = maxV + (minV - maxV) * f7 - f6; + final float f9 = f7 + 1.0f / height; + tesselator.addVertexWithUV(0.0, f9, 0.0, maxU, f8); + tesselator.addVertexWithUV(1.0, f9, 0.0, minU, f8); + tesselator.addVertexWithUV(1.0, f9, 0.0f - depth, minU, f8); + tesselator.addVertexWithUV(0.0, f9, 0.0f - depth, maxU, f8); + } + tesselator.draw(); + tesselator.startDrawingQuads(); + tesselator.setNormal(0.0f, -1.0f, 0.0f); + for (int k = 0; k < height; ++k) { + final float f7 = k / height; + final float f8 = maxV + (minV - maxV) * f7 - f6; + tesselator.addVertexWithUV(1.0, f7, 0.0, minU, f8); + tesselator.addVertexWithUV(0.0, f7, 0.0, maxU, f8); + tesselator.addVertexWithUV(0.0, f7, 0.0f - depth, maxU, f8); + tesselator.addVertexWithUV(1.0, f7, 0.0f - depth, minU, f8); + } + tesselator.draw(); + } +} diff --git a/src/main/java/binnie/extratrees/alcohol/drink/DrinkLiquid.java b/src/main/java/binnie/extratrees/alcohol/drink/DrinkLiquid.java new file mode 100644 index 00000000..b1f0ea80 --- /dev/null +++ b/src/main/java/binnie/extratrees/alcohol/drink/DrinkLiquid.java @@ -0,0 +1,64 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.alcohol.drink; + +import binnie.Binnie; +import net.minecraftforge.fluids.FluidStack; + +public class DrinkLiquid implements IDrinkLiquid +{ + String name; + int colour; + float transparency; + float abv; + public String ident; + + public DrinkLiquid(final String name, final int colour, final float transparency, final float abv) { + this.name = name; + this.colour = colour; + this.transparency = transparency; + this.abv = abv; + } + + @Override + public boolean isConsumable() { + return true; + } + + @Override + public int getColour() { + return this.colour; + } + + @Override + public String getName() { + return this.name; + } + + @Override + public float getTransparency() { + return this.transparency; + } + + @Override + public String getIdentifier() { + return this.ident; + } + + @Override + public void setIdent(final String lowerCase) { + this.ident = lowerCase; + } + + @Override + public float getABV() { + return this.abv; + } + + @Override + public FluidStack get(final int amount) { + return Binnie.Liquid.getLiquidStack(this.ident, amount); + } +} diff --git a/src/main/java/binnie/extratrees/alcohol/drink/DrinkManager.java b/src/main/java/binnie/extratrees/alcohol/drink/DrinkManager.java new file mode 100644 index 00000000..6dbb14ad --- /dev/null +++ b/src/main/java/binnie/extratrees/alcohol/drink/DrinkManager.java @@ -0,0 +1,36 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.alcohol.drink; + +import java.util.HashMap; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.Fluid; +import java.util.Map; + +public class DrinkManager +{ + static Map drinkLiquids; + + public static IDrinkLiquid getLiquid(final String id) { + return DrinkManager.drinkLiquids.get(id.toLowerCase()); + } + + public static void registerDrinkLiquid(final String id, final IDrinkLiquid liquid) { + liquid.setIdent(id.toLowerCase()); + DrinkManager.drinkLiquids.put(id.toLowerCase(), liquid); + } + + public static IDrinkLiquid getLiquid(final Fluid fluid) { + return getLiquid(fluid.getName()); + } + + public static IDrinkLiquid getLiquid(final FluidStack fluid) { + return (fluid != null) ? getLiquid(fluid.getFluid()) : null; + } + + static { + DrinkManager.drinkLiquids = new HashMap(); + } +} diff --git a/src/main/java/binnie/extratrees/alcohol/drink/IAlcoholic.java b/src/main/java/binnie/extratrees/alcohol/drink/IAlcoholic.java new file mode 100644 index 00000000..fd756735 --- /dev/null +++ b/src/main/java/binnie/extratrees/alcohol/drink/IAlcoholic.java @@ -0,0 +1,10 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.alcohol.drink; + +public interface IAlcoholic +{ + float getABV(); +} diff --git a/src/main/java/binnie/extratrees/alcohol/drink/IDrinkLiquid.java b/src/main/java/binnie/extratrees/alcohol/drink/IDrinkLiquid.java new file mode 100644 index 00000000..903a7027 --- /dev/null +++ b/src/main/java/binnie/extratrees/alcohol/drink/IDrinkLiquid.java @@ -0,0 +1,26 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.alcohol.drink; + +import net.minecraftforge.fluids.FluidStack; + +public interface IDrinkLiquid +{ + boolean isConsumable(); + + int getColour(); + + String getName(); + + float getTransparency(); + + String getIdentifier(); + + void setIdent(final String p0); + + float getABV(); + + FluidStack get(final int p0); +} diff --git a/src/main/java/binnie/extratrees/alcohol/drink/ItemDrink.java b/src/main/java/binnie/extratrees/alcohol/drink/ItemDrink.java new file mode 100644 index 00000000..db9c3e51 --- /dev/null +++ b/src/main/java/binnie/extratrees/alcohol/drink/ItemDrink.java @@ -0,0 +1,215 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.alcohol.drink; + +import net.minecraft.item.EnumAction; +import binnie.extratrees.alcohol.AlcoholEffect; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import net.minecraft.util.IIcon; +import net.minecraft.client.renderer.texture.IIconRegister; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.extratrees.alcohol.Alcohol; +import java.util.List; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.item.Item; +import net.minecraftforge.fluids.FluidStack; +import binnie.extratrees.alcohol.Glassware; +import net.minecraft.item.ItemStack; +import forestry.api.core.Tabs; +import net.minecraftforge.fluids.IFluidContainerItem; +import net.minecraft.item.ItemFood; + +public class ItemDrink extends ItemFood implements IFluidContainerItem +{ + public ItemDrink() { + super(0, 0.0f, false); + this.setCreativeTab(Tabs.tabArboriculture); + this.setUnlocalizedName("drink"); + this.setHasSubtypes(true); + this.setMaxStackSize(1); + this.setAlwaysEdible(); + } + + public Glassware getGlassware(final ItemStack container) { + if (!container.hasTagCompound() || !container.getTagCompound().hasKey("glassware")) { + return Glassware.BeerMug; + } + return Glassware.values()[container.getTagCompound().getShort("glassware")]; + } + + public ItemStack getStack(final Glassware glass, final FluidStack fluid) { + final ItemStack stack = new ItemStack(this); + this.saveGlassware(glass, stack); + this.saveFluid(fluid, stack); + return stack; + } + + public void saveGlassware(final Glassware container, final ItemStack stack) { + if (!stack.hasTagCompound()) { + stack.setTagCompound(new NBTTagCompound()); + } + stack.getTagCompound().setShort("glassware", (short) container.ordinal()); + } + + public void saveFluid(final FluidStack fluid, final ItemStack stack) { + if (!stack.hasTagCompound()) { + stack.setTagCompound(new NBTTagCompound()); + } + final NBTTagCompound nbt = stack.getTagCompound(); + if (fluid == null) { + nbt.removeTag("fluid"); + } + else { + final NBTTagCompound liq = new NBTTagCompound(); + fluid.writeToNBT(liq); + nbt.setTag("fluid", liq); + } + } + + @Override + public FluidStack getFluid(final ItemStack container) { + if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("fluid")) { + return null; + } + return FluidStack.loadFluidStackFromNBT(container.stackTagCompound.getCompoundTag("fluid")); + } + + @Override + public int getCapacity(final ItemStack container) { + return this.getGlassware(container).getCapacity(); + } + + @Override + public int fill(final ItemStack container, final FluidStack resource, final boolean doFill) { + if (resource == null || !container.hasTagCompound()) { + return 0; + } + if (DrinkManager.getLiquid(resource.getFluid()) == null) { + return 0; + } + final FluidStack existing = this.getFluid(container); + final int space = this.getGlassware(container).getCapacity() - ((existing == null) ? 0 : existing.amount); + final int added = Math.min(space, resource.amount); + if (space <= 0) { + return 0; + } + if (existing == null) { + if (doFill) { + final FluidStack fill = resource.copy(); + fill.amount = added; + this.saveFluid(fill, container); + } + return added; + } + if (!existing.isFluidEqual(resource)) { + return 0; + } + if (doFill) { + final FluidStack fill = existing.copy(); + fill.amount += added; + this.saveFluid(fill, container); + } + return added; + } + + @Override + public FluidStack drain(final ItemStack container, final int maxDrain, final boolean doDrain) { + if (!container.hasTagCompound()) { + return null; + } + final FluidStack content = this.getFluid(container); + if (content == null) { + return null; + } + final int toRemove = Math.min(maxDrain, content.amount); + FluidStack fill = content.copy(); + final FluidStack drain = content.copy(); + drain.amount = toRemove; + fill.amount -= toRemove; + if (fill.amount == 0) { + fill = null; + } + if (doDrain) { + this.saveFluid(fill, container); + } + return drain; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(final Item par1, final CreativeTabs par2CreativeTabs, final List par3List) { + for (final Glassware glassware : Glassware.values()) { + par3List.add(this.getStack(glassware, null)); + } + par3List.add(this.getStack(Glassware.Wine, Alcohol.RedWine.get(Glassware.Wine.getCapacity()))); + } + + @Override + public String getItemStackDisplayName(final ItemStack stack) { + final FluidStack fluid = this.getFluid(stack); + final IDrinkLiquid liquid = (fluid == null) ? null : DrinkManager.getLiquid(fluid.getFluid()); + return this.getGlassware(stack).getName((liquid == null) ? null : liquid.getName()); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister par1IconRegister) { + for (final Glassware glassware : Glassware.values()) { + glassware.registerIcons(par1IconRegister); + } + } + + @Override + public IIcon getIcon(final ItemStack stack, final int pass) { + final Glassware glass = this.getGlassware(stack); + return (pass == 0) ? glass.glass : ((this.getFluid(stack) == null) ? glass.glass : glass.contents); + } + + @Override + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(final ItemStack stack, final int pass) { + final FluidStack fluid = this.getFluid(stack); + final IDrinkLiquid drink = (fluid == null) ? null : DrinkManager.getLiquid(fluid.getFluid()); + return (pass == 0) ? 16777215 : ((drink == null) ? 16777215 : drink.getColour()); + } + + @Override + public int getRenderPasses(final int metadata) { + return 2; + } + + @Override + public ItemStack onEaten(final ItemStack p_77654_1_, final World p_77654_2_, final EntityPlayer p_77654_3_) { + this.drain(p_77654_1_, 30, true); + AlcoholEffect.makeDrunk(p_77654_3_, 2.1f); + return p_77654_1_; + } + + @Override + public EnumAction getItemUseAction(final ItemStack p_77661_1_) { + return (this.getFluid(p_77661_1_) == null) ? EnumAction.none : EnumAction.drink; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean requiresMultipleRenderPasses() { + return true; + } + + @Override + public int getMaxItemUseDuration(final ItemStack p_77626_1_) { + return 16; + } + + @Override + public ItemStack onItemRightClick(final ItemStack p_77659_1_, final World p_77659_2_, final EntityPlayer p_77659_3_) { + p_77659_3_.setItemInUse(p_77659_1_, this.getMaxItemUseDuration(p_77659_1_)); + return p_77659_1_; + } +} diff --git a/src/main/java/binnie/extratrees/alcohol/drink/TileEntityDrink.java b/src/main/java/binnie/extratrees/alcohol/drink/TileEntityDrink.java new file mode 100644 index 00000000..7ab3c207 --- /dev/null +++ b/src/main/java/binnie/extratrees/alcohol/drink/TileEntityDrink.java @@ -0,0 +1,11 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.alcohol.drink; + +import net.minecraft.tileentity.TileEntity; + +public class TileEntityDrink extends TileEntity +{ +} diff --git a/src/main/java/binnie/extratrees/api/CarpentryManager.java b/src/main/java/binnie/extratrees/api/CarpentryManager.java new file mode 100644 index 00000000..4922b618 --- /dev/null +++ b/src/main/java/binnie/extratrees/api/CarpentryManager.java @@ -0,0 +1,10 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.api; + +public class CarpentryManager +{ + public static ICarpentryInterface carpentryInterface; +} diff --git a/src/main/java/binnie/extratrees/api/ICarpentryInterface.java b/src/main/java/binnie/extratrees/api/ICarpentryInterface.java new file mode 100644 index 00000000..903b86e9 --- /dev/null +++ b/src/main/java/binnie/extratrees/api/ICarpentryInterface.java @@ -0,0 +1,36 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.api; + +import java.util.List; +import java.util.Collection; +import net.minecraft.item.ItemStack; + +public interface ICarpentryInterface +{ + boolean registerCarpentryWood(final int p0, final IDesignMaterial p1); + + int getCarpentryWoodIndex(final IDesignMaterial p0); + + IDesignMaterial getWoodMaterial(final int p0); + + boolean registerDesign(final int p0, final IDesign p1); + + int getDesignIndex(final IDesign p0); + + IDesign getDesign(final int p0); + + ILayout getLayout(final IPattern p0, final boolean p1); + + IDesignMaterial getWoodMaterial(final ItemStack p0); + + boolean registerDesignCategory(final IDesignCategory p0); + + IDesignCategory getDesignCategory(final String p0); + + Collection getAllDesignCategories(); + + List getSortedDesigns(); +} diff --git a/src/main/java/binnie/extratrees/api/IDesign.java b/src/main/java/binnie/extratrees/api/IDesign.java new file mode 100644 index 00000000..76f42eac --- /dev/null +++ b/src/main/java/binnie/extratrees/api/IDesign.java @@ -0,0 +1,22 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.api; + +public interface IDesign +{ + String getName(); + + ILayout getTopPattern(); + + ILayout getBottomPattern(); + + ILayout getNorthPattern(); + + ILayout getEastPattern(); + + ILayout getSouthPattern(); + + ILayout getWestPattern(); +} diff --git a/src/main/java/binnie/extratrees/api/IDesignCategory.java b/src/main/java/binnie/extratrees/api/IDesignCategory.java new file mode 100644 index 00000000..d20c14d7 --- /dev/null +++ b/src/main/java/binnie/extratrees/api/IDesignCategory.java @@ -0,0 +1,18 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.api; + +import java.util.List; + +public interface IDesignCategory +{ + String getName(); + + List getDesigns(); + + void addDesign(final IDesign p0); + + String getId(); +} diff --git a/src/main/java/binnie/extratrees/api/IDesignMaterial.java b/src/main/java/binnie/extratrees/api/IDesignMaterial.java new file mode 100644 index 00000000..dcfeabfc --- /dev/null +++ b/src/main/java/binnie/extratrees/api/IDesignMaterial.java @@ -0,0 +1,16 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.api; + +import net.minecraft.item.ItemStack; + +public interface IDesignMaterial +{ + ItemStack getStack(); + + String getName(); + + int getColour(); +} diff --git a/src/main/java/binnie/extratrees/api/IDesignSystem.java b/src/main/java/binnie/extratrees/api/IDesignSystem.java new file mode 100644 index 00000000..1a998456 --- /dev/null +++ b/src/main/java/binnie/extratrees/api/IDesignSystem.java @@ -0,0 +1,30 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.api; + +import net.minecraft.item.ItemStack; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; + +public interface IDesignSystem +{ + IIcon getPrimaryIcon(final IPattern p0); + + IIcon getSecondaryIcon(final IPattern p0); + + void registerIcons(final IIconRegister p0); + + IDesignMaterial getDefaultMaterial(); + + IDesignMaterial getMaterial(final int p0); + + int getMaterialIndex(final IDesignMaterial p0); + + IDesignMaterial getDefaultMaterial2(); + + ItemStack getAdhesive(); + + IDesignMaterial getMaterial(final ItemStack p0); +} diff --git a/src/main/java/binnie/extratrees/api/ILayout.java b/src/main/java/binnie/extratrees/api/ILayout.java new file mode 100644 index 00000000..3b2bbe78 --- /dev/null +++ b/src/main/java/binnie/extratrees/api/ILayout.java @@ -0,0 +1,28 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.api; + +import net.minecraft.util.IIcon; + +public interface ILayout +{ + IPattern getPattern(); + + boolean isInverted(); + + ILayout rotateRight(); + + ILayout rotateLeft(); + + ILayout flipHorizontal(); + + ILayout flipVertical(); + + ILayout invert(); + + IIcon getPrimaryIcon(final IDesignSystem p0); + + IIcon getSecondaryIcon(final IDesignSystem p0); +} diff --git a/src/main/java/binnie/extratrees/api/IPattern.java b/src/main/java/binnie/extratrees/api/IPattern.java new file mode 100644 index 00000000..6391b46f --- /dev/null +++ b/src/main/java/binnie/extratrees/api/IPattern.java @@ -0,0 +1,21 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.api; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; + +public interface IPattern +{ + IIcon getPrimaryIcon(final IDesignSystem p0); + + IIcon getSecondaryIcon(final IDesignSystem p0); + + ILayout getRotation(); + + ILayout getHorizontalFlip(); + + void registerIcons(final IIconRegister p0); +} diff --git a/src/main/java/binnie/extratrees/api/IToolHammer.java b/src/main/java/binnie/extratrees/api/IToolHammer.java new file mode 100644 index 00000000..35bfc523 --- /dev/null +++ b/src/main/java/binnie/extratrees/api/IToolHammer.java @@ -0,0 +1,15 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.api; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +public interface IToolHammer +{ + boolean isActive(final ItemStack p0); + + void onHammerUsed(final ItemStack p0, final EntityPlayer p1); +} diff --git a/src/main/java/binnie/extratrees/block/BlockBranch.java b/src/main/java/binnie/extratrees/block/BlockBranch.java new file mode 100644 index 00000000..5f6a3530 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/BlockBranch.java @@ -0,0 +1,137 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import net.minecraft.util.MovingObjectPosition; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.entity.player.EntityPlayer; +import binnie.core.block.BlockMetadata; +import java.util.ArrayList; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import binnie.extratrees.ExtraTrees; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.block.Block; +import binnie.core.block.TileEntityMetadata; +import java.util.List; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import forestry.api.core.Tabs; +import binnie.core.block.IBlockMetadata; +import net.minecraft.block.BlockLog; + +public class BlockBranch extends BlockLog implements IBlockMetadata +{ + public BlockBranch() { + this.setCreativeTab(Tabs.tabArboriculture); + this.setBlockName("branch"); + this.setResistance(5.0f); + this.setHardness(2.0f); + this.setStepSound(Block.soundTypeWood); + } + + @Override + public void getSubBlocks(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + for (int i = 0; i < ILogType.ExtraTreeLog.values().length; ++i) { + itemList.add(TileEntityMetadata.getItemStack(this, i)); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final IBlockAccess world, final int x, final int y, final int z, final int side) { + final TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z); + if (tile != null) { + return this.getIcon(side, tile.getTileMetadata(), world.getBlockMetadata(x, y, z)); + } + return super.getIcon(world, x, y, z, side); + } + + public IIcon getIcon(final int side, final int tileMeta, final int blockMeta) { + final int oriented = blockMeta & 0xC; + final ILogType.ExtraTreeLog log = ILogType.ExtraTreeLog.values()[tileMeta]; + if (side > 3) { + return log.getTrunk(); + } + return log.getBark(); + } + + @Override + public IIcon getIcon(final int side, final int tileMeta) { + return this.getIcon(side, tileMeta, 0); + } + + @Override + public int getRenderType() { + return ExtraTrees.branchRenderId; + } + + @Override + public void dropAsStack(final World world, final int x, final int y, final int z, final ItemStack drop) { + this.dropBlockAsItem(world, x, y, z, drop); + } + + @Override + public ArrayList getDrops(final World world, final int x, final int y, final int z, final int blockMeta, final int fortune) { + return BlockMetadata.getBlockDropped(this, world, x, y, z, blockMeta); + } + + @Override + public boolean removedByPlayer(final World world, final EntityPlayer player, final int x, final int y, final int z) { + return BlockMetadata.breakBlock(this, player, world, x, y, z); + } + + @Override + public TileEntity createNewTileEntity(final World var1, final int i) { + return new TileEntityMetadata(); + } + + @Override + public boolean hasTileEntity(final int meta) { + return true; + } + + @Override + public boolean onBlockEventReceived(final World par1World, final int par2, final int par3, final int par4, final int par5, final int par6) { + super.onBlockEventReceived(par1World, par2, par3, par4, par5, par6); + final TileEntity tileentity = par1World.getTileEntity(par2, par3, par4); + return tileentity != null && tileentity.receiveClientEvent(par5, par6); + } + + @Override + public int getDroppedMeta(final int blockMeta, final int tileMeta) { + return tileMeta; + } + + @Override + public String getBlockName(final ItemStack par1ItemStack) { + final int meta = TileEntityMetadata.getItemDamage(par1ItemStack); + return ILogType.ExtraTreeLog.values()[meta].getName() + " Branch"; + } + + @Override + public void getBlockTooltip(final ItemStack par1ItemStack, final List par3List) { + } + + @Override + public int getPlacedMeta(final ItemStack stack, final World world, final int x, final int y, final int z, final ForgeDirection clickedBlock) { + return TileEntityMetadata.getItemDamage(stack); + } + + @Override + public void breakBlock(final World par1World, final int par2, final int par3, final int par4, final Block par5, final int par6) { + super.breakBlock(par1World, par2, par3, par4, par5, par6); + par1World.removeTileEntity(par2, par3, par4); + } + + @Override + public ItemStack getPickBlock(final MovingObjectPosition target, final World world, final int x, final int y, final int z) { + return BlockMetadata.getPickBlock(world, x, y, z); + } +} diff --git a/src/main/java/binnie/extratrees/block/BlockETDoor.java b/src/main/java/binnie/extratrees/block/BlockETDoor.java new file mode 100644 index 00000000..646b19b1 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/BlockETDoor.java @@ -0,0 +1,306 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.block.Block; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import java.util.List; +import binnie.Binnie; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraft.tileentity.TileEntity; +import binnie.core.block.BlockMetadata; +import net.minecraft.item.ItemStack; +import java.util.ArrayList; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import net.minecraft.client.renderer.IconFlipped; +import binnie.extratrees.ExtraTrees; +import net.minecraft.client.renderer.texture.IIconRegister; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.core.block.TileEntityMetadata; +import net.minecraft.world.IBlockAccess; +import forestry.api.core.Tabs; +import net.minecraft.block.material.Material; +import net.minecraft.util.IIcon; +import binnie.core.block.IBlockMetadata; +import net.minecraft.block.BlockDoor; + +public class BlockETDoor extends BlockDoor implements IBlockMetadata +{ + private IIcon getFlippedIcon(final boolean upper, final boolean flip, final int tileMeta) { + final DoorType type = getDoorType(tileMeta); + return upper ? (flip ? type.iconDoorUpperFlip : type.iconDoorUpper) : (flip ? type.iconDoorLowerFlip : type.iconDoorLower); + } + + public static DoorType getDoorType(final int tileMeta) { + final int type = (tileMeta & 0xF00) >> 8; + if (type >= 0 && type < DoorType.values().length) { + return DoorType.values()[type]; + } + return DoorType.Standard; + } + + protected BlockETDoor() { + super(Material.wood); + this.setHardness(3.0f).setStepSound(Block.soundTypeWood); + this.setCreativeTab(Tabs.tabArboriculture); + this.setBlockName("door"); + } + + @Override + public IIcon getIcon(final int side, final int meta) { + return DoorType.Standard.iconDoorLower; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final IBlockAccess par1IBlockAccess, final int par2, final int par3, final int par4, final int par5) { + if (par5 != 1 && par5 != 0) { + final int i1 = this.getFullMetadata(par1IBlockAccess, par2, par3, par4); + final int j1 = i1 & 0x3; + final boolean flag = (i1 & 0x4) != 0x0; + boolean flag2 = false; + final boolean flag3 = (i1 & 0x8) != 0x0; + if (flag) { + if (j1 == 0 && par5 == 2) { + flag2 = !flag2; + } + else if (j1 == 1 && par5 == 5) { + flag2 = !flag2; + } + else if (j1 == 2 && par5 == 3) { + flag2 = !flag2; + } + else if (j1 == 3 && par5 == 4) { + flag2 = !flag2; + } + } + else { + if (j1 == 0 && par5 == 5) { + flag2 = !flag2; + } + else if (j1 == 1 && par5 == 3) { + flag2 = !flag2; + } + else if (j1 == 2 && par5 == 4) { + flag2 = !flag2; + } + else if (j1 == 3 && par5 == 2) { + flag2 = !flag2; + } + if ((i1 & 0x10) != 0x0) { + flag2 = !flag2; + } + } + int tileMeta = 0; + if (flag3) { + tileMeta = TileEntityMetadata.getTileMetadata(par1IBlockAccess, par2, par3 - 1, par4); + } + else { + tileMeta = TileEntityMetadata.getTileMetadata(par1IBlockAccess, par2, par3, par4); + } + return this.getFlippedIcon(flag3, flag2, tileMeta); + } + return DoorType.Standard.iconDoorLower; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister register) { + for (final DoorType type : DoorType.values()) { + type.iconDoorLower = ExtraTrees.proxy.getIcon(register, "door." + type.id + ".lower"); + type.iconDoorUpper = ExtraTrees.proxy.getIcon(register, "door." + type.id + ".upper"); + type.iconDoorLowerFlip = new IconFlipped(type.iconDoorLower, true, false); + type.iconDoorUpperFlip = new IconFlipped(type.iconDoorUpper, true, false); + } + } + + @Override + public int getRenderType() { + return ExtraTrees.doorRenderId; + } + + @Override + @SideOnly(Side.CLIENT) + public int colorMultiplier(final IBlockAccess par1IBlockAccess, final int par2, final int par3, final int par4) { + final int par5 = 2; + final int i1 = this.getFullMetadata(par1IBlockAccess, par2, par3, par4); + final int j1 = i1 & 0x3; + final boolean flag = (i1 & 0x4) != 0x0; + boolean flag2 = false; + final boolean flag3 = (i1 & 0x8) != 0x0; + if (flag) { + if (j1 == 0 && par5 == 2) { + flag2 = !flag2; + } + else if (j1 == 1 && par5 == 5) { + flag2 = !flag2; + } + else if (j1 == 2 && par5 == 3) { + flag2 = !flag2; + } + else if (j1 == 3 && par5 == 4) { + flag2 = !flag2; + } + } + else { + if (j1 == 0 && par5 == 5) { + flag2 = !flag2; + } + else if (j1 == 1 && par5 == 3) { + flag2 = !flag2; + } + else if (j1 == 2 && par5 == 4) { + flag2 = !flag2; + } + else if (j1 == 3 && par5 == 2) { + flag2 = !flag2; + } + if ((i1 & 0x10) != 0x0) { + flag2 = !flag2; + } + } + if (flag3) { + final int meta = TileEntityMetadata.getTileMetadata(par1IBlockAccess, par2, par3 - 1, par4); + return WoodManager.getPlankType(meta & 0xFF).getColour(); + } + final int meta = TileEntityMetadata.getTileMetadata(par1IBlockAccess, par2, par3, par4); + return WoodManager.getPlankType(meta & 0xFF).getColour(); + } + + public int getFullMetadata(final IBlockAccess par1IBlockAccess, final int par2, final int par3, final int par4) { + final int l = par1IBlockAccess.getBlockMetadata(par2, par3, par4); + final boolean flag = (l & 0x8) != 0x0; + int i1; + int j1; + if (flag) { + i1 = par1IBlockAccess.getBlockMetadata(par2, par3 - 1, par4); + j1 = l; + } + else { + i1 = l; + j1 = par1IBlockAccess.getBlockMetadata(par2, par3 + 1, par4); + } + final boolean flag2 = (j1 & 0x1) != 0x0; + return (i1 & 0x7) | (flag ? 8 : 0) | (flag2 ? 16 : 0); + } + + @Override + @SideOnly(Side.CLIENT) + public void onBlockHarvested(final World par1World, final int par2, final int par3, final int par4, final int par5, final EntityPlayer par6EntityPlayer) { + if (par6EntityPlayer.capabilities.isCreativeMode && (par5 & 0x8) != 0x0 && par1World.getBlock(par2, par3 - 1, par4) == this) { + par1World.setBlockToAir(par2, par3 - 1, par4); + } + } + + @Override + public ArrayList getDrops(final World world, final int x, final int y, final int z, final int blockMeta, final int fortune) { + return BlockMetadata.getBlockDropped(this, world, x, y, z, blockMeta); + } + + @Override + public boolean removedByPlayer(final World world, final EntityPlayer player, final int x, final int y, final int z) { + return BlockMetadata.breakBlock(this, player, world, x, y, z); + } + + @Override + public TileEntity createNewTileEntity(final World var1, final int k) { + return new TileEntityMetadata(); + } + + @Override + public boolean hasTileEntity(final int meta) { + return true; + } + + @Override + public boolean onBlockEventReceived(final World par1World, final int par2, final int par3, final int par4, final int par5, final int par6) { + super.onBlockEventReceived(par1World, par2, par3, par4, par5, par6); + final TileEntity tileentity = par1World.getTileEntity(par2, par3, par4); + return tileentity != null && tileentity.receiveClientEvent(par5, par6); + } + + @Override + public int getPlacedMeta(final ItemStack stack, final World world, final int x, final int y, final int z, final ForgeDirection clickedBlock) { + return TileEntityMetadata.getItemDamage(stack); + } + + @Override + public int getDroppedMeta(final int blockMeta, final int tileMeta) { + return tileMeta; + } + + @Override + public String getBlockName(final ItemStack par1ItemStack) { + final int meta = TileEntityMetadata.getItemDamage(par1ItemStack); + final String typeName = getDoorType(meta).getName(); + final String woodName = WoodManager.getPlankType(meta & 0xFF).getName(); + if (typeName.equals("")) { + return Binnie.Language.localise(ExtraTrees.instance, "block.door.name", woodName); + } + return Binnie.Language.localise(ExtraTrees.instance, "block.door.name.adv", woodName, typeName); + } + + @Override + public void getBlockTooltip(final ItemStack par1ItemStack, final List par3List) { + } + + @Override + public void dropAsStack(final World world, final int x, final int y, final int z, final ItemStack drop) { + this.dropBlockAsItem(world, x, y, z, drop); + } + + @Override + public void getSubBlocks(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + for (final IPlankType type : PlankType.ExtraTreePlanks.values()) { + itemList.add(WoodManager.getDoor(type, DoorType.Standard)); + } + for (final IPlankType type : PlankType.ForestryPlanks.values()) { + itemList.add(WoodManager.getDoor(type, DoorType.Standard)); + } + for (final IPlankType type : PlankType.ExtraBiomesPlank.values()) { + if (type.getStack() != null) { + itemList.add(WoodManager.getDoor(type, DoorType.Standard)); + } + } + for (final IPlankType type : PlankType.VanillaPlanks.values()) { + itemList.add(WoodManager.getDoor(type, DoorType.Standard)); + } + } + + @Override + public boolean isWood(final IBlockAccess world, final int x, final int y, final int z) { + return true; + } + + @Override + public int getFlammability(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return 20; + } + + @Override + public boolean isFlammable(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return true; + } + + @Override + public int getFireSpreadSpeed(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return 5; + } + + @Override + public void breakBlock(final World par1World, final int par2, final int par3, final int par4, final Block par5, final int par6) { + super.breakBlock(par1World, par2, par3, par4, par5, par6); + par1World.removeTileEntity(par2, par3, par4); + } + + @Override + public ItemStack getPickBlock(final MovingObjectPosition target, final World world, final int x, final int y, final int z) { + return BlockMetadata.getPickBlock(world, x, y, z); + } +} diff --git a/src/main/java/binnie/extratrees/block/BlockETLog.java b/src/main/java/binnie/extratrees/block/BlockETLog.java new file mode 100644 index 00000000..fb387cd7 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/BlockETLog.java @@ -0,0 +1,209 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import net.minecraft.util.MovingObjectPosition; +import net.minecraftforge.common.util.ForgeDirection; +import binnie.extratrees.ExtraTrees; +import binnie.Binnie; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.entity.player.EntityPlayer; +import binnie.core.block.BlockMetadata; +import java.util.ArrayList; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraft.client.renderer.texture.IIconRegister; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.block.Block; +import binnie.core.block.TileEntityMetadata; +import java.util.List; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import forestry.api.core.Tabs; +import binnie.core.block.IBlockMetadata; +import net.minecraft.block.BlockLog; + +public class BlockETLog extends BlockLog implements IBlockMetadata +{ + public BlockETLog() { + this.setCreativeTab(Tabs.tabArboriculture); + this.setBlockName("log"); + this.setResistance(5.0f); + this.setHardness(2.0f); + this.setStepSound(Block.soundTypeWood); + } + + @Override + public void getSubBlocks(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + for (int i = 0; i < ILogType.ExtraTreeLog.values().length; ++i) { + itemList.add(TileEntityMetadata.getItemStack(this, i)); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final IBlockAccess world, final int x, final int y, final int z, final int side) { + final TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z); + if (tile != null) { + return this.getIcon(side, tile.getTileMetadata(), world.getBlockMetadata(x, y, z)); + } + return super.getIcon(world, x, y, z, side); + } + + public IIcon getIcon(final int side, final int tileMeta, final int blockMeta) { + final int oriented = blockMeta & 0xC; + final ILogType.ExtraTreeLog log = ILogType.ExtraTreeLog.values()[tileMeta]; + switch (oriented) { + case 4: { + if (side > 3) { + return log.getTrunk(); + } + return log.getBark(); + } + case 8: { + if (side == 2 || side == 3) { + return log.getTrunk(); + } + return log.getBark(); + } + default: { + if (side < 2) { + return log.getTrunk(); + } + return log.getBark(); + } + } + } + + @Override + public IIcon getIcon(final int side, final int tileMeta) { + return this.getIcon(side, tileMeta, 0); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister register) { + ILogType.ExtraTreeLog.registerIcons(register); + } + + @Override + public int getRenderType() { + return 31; + } + + @Override + public void dropAsStack(final World world, final int x, final int y, final int z, final ItemStack drop) { + this.dropBlockAsItem(world, x, y, z, drop); + } + + @Override + public ArrayList getDrops(final World world, final int x, final int y, final int z, final int blockMeta, final int fortune) { + return BlockMetadata.getBlockDropped(this, world, x, y, z, blockMeta); + } + + @Override + public boolean removedByPlayer(final World world, final EntityPlayer player, final int x, final int y, final int z) { + return BlockMetadata.breakBlock(this, player, world, x, y, z); + } + + @Override + public TileEntity createNewTileEntity(final World var1, final int i) { + return new TileEntityMetadata(); + } + + @Override + public boolean hasTileEntity(final int meta) { + return true; + } + + @Override + public boolean onBlockEventReceived(final World par1World, final int par2, final int par3, final int par4, final int par5, final int par6) { + super.onBlockEventReceived(par1World, par2, par3, par4, par5, par6); + final TileEntity tileentity = par1World.getTileEntity(par2, par3, par4); + return tileentity != null && tileentity.receiveClientEvent(par5, par6); + } + + @Override + public int getDroppedMeta(final int blockMeta, final int tileMeta) { + return tileMeta; + } + + @Override + public String getBlockName(final ItemStack par1ItemStack) { + final int meta = TileEntityMetadata.getItemDamage(par1ItemStack); + return Binnie.Language.localise(ExtraTrees.instance, "block.log.name", ILogType.ExtraTreeLog.values()[meta].getName()); + } + + @Override + public void getBlockTooltip(final ItemStack par1ItemStack, final List par3List) { + } + + @Override + public boolean canSustainLeaves(final IBlockAccess world, final int x, final int y, final int z) { + return true; + } + + @Override + public int getPlacedMeta(final ItemStack stack, final World world, final int x, final int y, final int z, final ForgeDirection clickedBlock) { + return TileEntityMetadata.getItemDamage(stack); + } + + @Override + public int onBlockPlaced(final World world, final int x, final int y, final int z, final int side, final float par6, final float par7, final float par8, final int meta) { + byte b0 = 0; + switch (side) { + case 0: + case 1: { + b0 = 0; + break; + } + case 2: + case 3: { + b0 = 8; + break; + } + case 4: + case 5: { + b0 = 4; + break; + } + } + return b0; + } + + @Override + public void breakBlock(final World par1World, final int par2, final int par3, final int par4, final Block par5, final int par6) { + super.breakBlock(par1World, par2, par3, par4, par5, par6); + par1World.removeTileEntity(par2, par3, par4); + } + + @Override + public boolean isWood(final IBlockAccess world, final int x, final int y, final int z) { + return true; + } + + @Override + public int getFlammability(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return 20; + } + + @Override + public boolean isFlammable(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return true; + } + + @Override + public int getFireSpreadSpeed(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return 5; + } + + @Override + public ItemStack getPickBlock(final MovingObjectPosition target, final World world, final int x, final int y, final int z) { + return BlockMetadata.getPickBlock(world, x, y, z); + } +} diff --git a/src/main/java/binnie/extratrees/block/BlockETPlanks.java b/src/main/java/binnie/extratrees/block/BlockETPlanks.java new file mode 100644 index 00000000..88c148e5 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/BlockETPlanks.java @@ -0,0 +1,153 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.client.renderer.texture.IIconRegister; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.block.Block; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import java.util.List; +import binnie.extratrees.ExtraTrees; +import binnie.Binnie; +import net.minecraftforge.common.util.ForgeDirection; +import binnie.core.block.TileEntityMetadata; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.entity.player.EntityPlayer; +import binnie.core.block.BlockMetadata; +import net.minecraft.item.ItemStack; +import java.util.ArrayList; +import net.minecraft.world.World; +import forestry.api.core.Tabs; +import binnie.core.block.IBlockMetadata; +import net.minecraft.block.BlockWood; + +public class BlockETPlanks extends BlockWood implements IBlockMetadata +{ + public BlockETPlanks() { + this.setBlockName("planks"); + this.setCreativeTab(Tabs.tabArboriculture); + this.setResistance(5.0f); + this.setHardness(2.0f); + this.setStepSound(Block.soundTypeWood); + } + + @Override + public ArrayList getDrops(final World world, final int x, final int y, final int z, final int blockMeta, final int fortune) { + return BlockMetadata.getBlockDropped(this, world, x, y, z, blockMeta); + } + + @Override + public boolean removedByPlayer(final World world, final EntityPlayer player, final int x, final int y, final int z) { + return BlockMetadata.breakBlock(this, player, world, x, y, z); + } + + @Override + public TileEntity createNewTileEntity(final World var1, final int i) { + return new TileEntityMetadata(); + } + + @Override + public boolean hasTileEntity(final int meta) { + return true; + } + + @Override + public boolean onBlockEventReceived(final World par1World, final int par2, final int par3, final int par4, final int par5, final int par6) { + super.onBlockEventReceived(par1World, par2, par3, par4, par5, par6); + final TileEntity tileentity = par1World.getTileEntity(par2, par3, par4); + return tileentity != null && tileentity.receiveClientEvent(par5, par6); + } + + @Override + public int getPlacedMeta(final ItemStack stack, final World world, final int x, final int y, final int z, final ForgeDirection clickedBlock) { + return TileEntityMetadata.getItemDamage(stack); + } + + @Override + public int getDroppedMeta(final int blockMeta, final int tileMeta) { + return tileMeta; + } + + @Override + public String getBlockName(final ItemStack par1ItemStack) { + final int meta = TileEntityMetadata.getItemDamage(par1ItemStack); + return Binnie.Language.localise(ExtraTrees.instance, "block.plank.name", PlankType.ExtraTreePlanks.values()[meta].getName()); + } + + @Override + public void getBlockTooltip(final ItemStack par1ItemStack, final List par3List) { + } + + @Override + public void dropAsStack(final World world, final int x, final int y, final int z, final ItemStack drop) { + this.dropBlockAsItem(world, x, y, z, drop); + } + + @Override + public void getSubBlocks(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + for (int i = 0; i < PlankType.ExtraTreePlanks.values().length; ++i) { + itemList.add(TileEntityMetadata.getItemStack(this, i)); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final IBlockAccess world, final int x, final int y, final int z, final int side) { + final TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z); + if (tile != null) { + return this.getIcon(side, tile.getTileMetadata()); + } + return super.getIcon(world, x, y, z, side); + } + + @Override + public IIcon getIcon(final int side, final int meta) { + return PlankType.ExtraTreePlanks.values()[meta].getIcon(); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister register) { + for (final PlankType.ExtraTreePlanks plank : PlankType.ExtraTreePlanks.values()) { + plank.loadIcon(register); + } + } + + @Override + public void breakBlock(final World par1World, final int par2, final int par3, final int par4, final Block par5, final int par6) { + super.breakBlock(par1World, par2, par3, par4, par5, par6); + par1World.removeTileEntity(par2, par3, par4); + } + + @Override + public boolean isWood(final IBlockAccess world, final int x, final int y, final int z) { + return true; + } + + @Override + public int getFlammability(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return 20; + } + + @Override + public boolean isFlammable(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return true; + } + + @Override + public int getFireSpreadSpeed(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return 5; + } + + @Override + public ItemStack getPickBlock(final MovingObjectPosition target, final World world, final int x, final int y, final int z) { + return BlockMetadata.getPickBlock(world, x, y, z); + } +} diff --git a/src/main/java/binnie/extratrees/block/BlockETSlab.java b/src/main/java/binnie/extratrees/block/BlockETSlab.java new file mode 100644 index 00000000..3f023284 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/BlockETSlab.java @@ -0,0 +1,160 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import net.minecraft.util.MovingObjectPosition; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.block.Block; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import java.util.List; +import binnie.Binnie; +import net.minecraftforge.common.util.ForgeDirection; +import binnie.core.block.TileEntityMetadata; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.entity.player.EntityPlayer; +import binnie.core.block.BlockMetadata; +import binnie.extratrees.ExtraTrees; +import net.minecraft.item.ItemStack; +import java.util.ArrayList; +import net.minecraft.world.World; +import forestry.api.core.Tabs; +import binnie.core.block.IBlockMetadata; +import net.minecraft.block.BlockWoodSlab; + +public class BlockETSlab extends BlockWoodSlab implements IBlockMetadata +{ + public BlockETSlab(final boolean par2) { + super(par2); + this.setCreativeTab(Tabs.tabArboriculture); + this.setHardness(2.0f).setResistance(5.0f).setStepSound(Block.soundTypeWood); + if (!this.field_150004_a) { + this.useNeighborBrightness = true; + } + this.setLightOpacity(0); + this.setBlockName("slabs"); + } + + @Override + public ArrayList getDrops(final World world, final int x, final int y, final int z, final int blockMeta, final int fortune) { + final ArrayList drops = new ArrayList(); + drops.addAll(BlockMetadata.getBlockDropped((IBlockMetadata) ExtraTrees.blockSlab, world, x, y, z, blockMeta)); + if (this.field_150004_a) { + drops.addAll(BlockMetadata.getBlockDropped((IBlockMetadata) ExtraTrees.blockSlab, world, x, y, z, blockMeta)); + } + return drops; + } + + @Override + public boolean removedByPlayer(final World world, final EntityPlayer player, final int x, final int y, final int z) { + return BlockMetadata.breakBlock(this, player, world, x, y, z); + } + + @Override + public TileEntity createNewTileEntity(final World var1, final int i) { + return new TileEntityMetadata(); + } + + @Override + public boolean hasTileEntity(final int meta) { + return true; + } + + @Override + public boolean onBlockEventReceived(final World par1World, final int par2, final int par3, final int par4, final int par5, final int par6) { + super.onBlockEventReceived(par1World, par2, par3, par4, par5, par6); + final TileEntity tileentity = par1World.getTileEntity(par2, par3, par4); + return tileentity != null && tileentity.receiveClientEvent(par5, par6); + } + + @Override + public int getPlacedMeta(final ItemStack stack, final World world, final int x, final int y, final int z, final ForgeDirection clickedBlock) { + return TileEntityMetadata.getItemDamage(stack); + } + + @Override + public int getDroppedMeta(final int blockMeta, final int tileMeta) { + return tileMeta; + } + + @Override + public String getBlockName(final ItemStack par1ItemStack) { + final int meta = TileEntityMetadata.getItemDamage(par1ItemStack); + return Binnie.Language.localise(ExtraTrees.instance, "block.woodslab.name", PlankType.ExtraTreePlanks.values()[meta].getName()); + } + + @Override + public void getBlockTooltip(final ItemStack par1ItemStack, final List par3List) { + } + + @Override + public void dropAsStack(final World world, final int x, final int y, final int z, final ItemStack drop) { + this.dropBlockAsItem(world, x, y, z, drop); + } + + @Override + public void getSubBlocks(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + if (this.field_150004_a) { + return; + } + for (int i = 0; i < PlankType.ExtraTreePlanks.values().length; ++i) { + itemList.add(TileEntityMetadata.getItemStack(this, i)); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final IBlockAccess world, final int x, final int y, final int z, final int side) { + final TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z); + if (tile != null) { + return this.getIcon(side, tile.getTileMetadata()); + } + return super.getIcon(world, x, y, z, side); + } + + @Override + public IIcon getIcon(final int side, final int meta) { + return PlankType.ExtraTreePlanks.values()[meta].getIcon(); + } + + @Override + public void breakBlock(final World par1World, final int par2, final int par3, final int par4, final Block par5, final int par6) { + super.breakBlock(par1World, par2, par3, par4, par5, par6); + par1World.removeTileEntity(par2, par3, par4); + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean isWood(final IBlockAccess world, final int x, final int y, final int z) { + return true; + } + + @Override + public int getFlammability(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return 20; + } + + @Override + public boolean isFlammable(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return true; + } + + @Override + public int getFireSpreadSpeed(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return 5; + } + + @Override + public ItemStack getPickBlock(final MovingObjectPosition target, final World world, final int x, final int y, final int z) { + return BlockMetadata.getPickBlock(world, x, y, z); + } +} diff --git a/src/main/java/binnie/extratrees/block/BlockETStairs.java b/src/main/java/binnie/extratrees/block/BlockETStairs.java new file mode 100644 index 00000000..717ca510 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/BlockETStairs.java @@ -0,0 +1,145 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import binnie.Binnie; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.entity.player.EntityPlayer; +import binnie.core.block.BlockMetadata; +import java.util.ArrayList; +import net.minecraft.world.World; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.core.block.TileEntityMetadata; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.item.ItemStack; +import java.util.List; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import forestry.api.core.Tabs; +import net.minecraft.block.Block; +import binnie.extratrees.ExtraTrees; +import binnie.core.block.IBlockMetadata; +import net.minecraft.block.BlockStairs; + +public class BlockETStairs extends BlockStairs implements IBlockMetadata +{ + @Override + public int getRenderType() { + return ExtraTrees.stairsID; + } + + public BlockETStairs(final Block par2Block) { + super(par2Block, 0); + this.setCreativeTab(Tabs.tabArboriculture); + this.setBlockName("stairs"); + this.setResistance(5.0f); + this.setHardness(2.0f); + this.setStepSound(Block.soundTypeWood); + this.useNeighborBrightness = true; + } + + @Override + public void getSubBlocks(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + for (int i = 0; i < PlankType.ExtraTreePlanks.values().length; ++i) { + itemList.add(new ItemStack(this, 1, i)); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final IBlockAccess world, final int x, final int y, final int z, final int side) { + final TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z); + if (tile != null) { + return this.getIcon(side, tile.getTileMetadata()); + } + return super.getIcon(world, x, y, z, side); + } + + @Override + public IIcon getIcon(final int side, final int meta) { + return WoodManager.getPlankType(meta + 32).getIcon(); + } + + @Override + public void dropAsStack(final World world, final int x, final int y, final int z, final ItemStack drop) { + this.dropBlockAsItem(world, x, y, z, drop); + } + + @Override + public ArrayList getDrops(final World world, final int x, final int y, final int z, final int blockMeta, final int fortune) { + return BlockMetadata.getBlockDropped(this, world, x, y, z, blockMeta); + } + + @Override + public boolean removedByPlayer(final World world, final EntityPlayer player, final int x, final int y, final int z) { + return BlockMetadata.breakBlock(this, player, world, x, y, z); + } + + @Override + public TileEntity createNewTileEntity(final World var1, final int i) { + return new TileEntityMetadata(); + } + + @Override + public boolean hasTileEntity(final int meta) { + return true; + } + + @Override + public boolean onBlockEventReceived(final World par1World, final int par2, final int par3, final int par4, final int par5, final int par6) { + super.onBlockEventReceived(par1World, par2, par3, par4, par5, par6); + final TileEntity tileentity = par1World.getTileEntity(par2, par3, par4); + return tileentity != null && tileentity.receiveClientEvent(par5, par6); + } + + @Override + public int getPlacedMeta(final ItemStack stack, final World world, final int x, final int y, final int z, final ForgeDirection clickedBlock) { + return TileEntityMetadata.getItemDamage(stack); + } + + @Override + public int getDroppedMeta(final int blockMeta, final int tileMeta) { + return tileMeta; + } + + @Override + public String getBlockName(final ItemStack par1ItemStack) { + final int meta = TileEntityMetadata.getItemDamage(par1ItemStack); + return Binnie.Language.localise(ExtraTrees.instance, "block.woodstairs.name", WoodManager.getPlankType(meta + 32).getName()); + } + + @Override + public void getBlockTooltip(final ItemStack par1ItemStack, final List par3List) { + } + + @Override + public void breakBlock(final World par1World, final int par2, final int par3, final int par4, final Block par5, final int par6) { + super.breakBlock(par1World, par2, par3, par4, par5, par6); + par1World.removeTileEntity(par2, par3, par4); + } + + @Override + public boolean isWood(final IBlockAccess world, final int x, final int y, final int z) { + return true; + } + + @Override + public int getFlammability(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return 20; + } + + @Override + public boolean isFlammable(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return true; + } + + @Override + public int getFireSpreadSpeed(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return 5; + } +} diff --git a/src/main/java/binnie/extratrees/block/BranchBlockRenderer.java b/src/main/java/binnie/extratrees/block/BranchBlockRenderer.java new file mode 100644 index 00000000..20ef798f --- /dev/null +++ b/src/main/java/binnie/extratrees/block/BranchBlockRenderer.java @@ -0,0 +1,34 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import binnie.extratrees.ExtraTrees; +import net.minecraft.world.IBlockAccess; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.block.Block; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; + +public class BranchBlockRenderer implements ISimpleBlockRenderingHandler +{ + @Override + public void renderInventoryBlock(final Block block, final int metadata, final int modelID, final RenderBlocks renderer) { + } + + @Override + public boolean renderWorldBlock(final IBlockAccess world, final int par2, final int par3, final int par4, final Block par1Block, final int modelId, final RenderBlocks renderer) { + renderer.renderStandardBlock(par1Block, par2, par3, par4); + return true; + } + + @Override + public boolean shouldRender3DInInventory(final int i) { + return false; + } + + @Override + public int getRenderId() { + return ExtraTrees.branchRenderId; + } +} diff --git a/src/main/java/binnie/extratrees/block/DoorBlockRenderer.java b/src/main/java/binnie/extratrees/block/DoorBlockRenderer.java new file mode 100644 index 00000000..8b088d44 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/DoorBlockRenderer.java @@ -0,0 +1,87 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import binnie.extratrees.ExtraTrees; +import net.minecraft.util.IIcon; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.world.IBlockAccess; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.block.Block; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; + +public class DoorBlockRenderer implements ISimpleBlockRenderingHandler +{ + @Override + public void renderInventoryBlock(final Block block, final int metadata, final int modelID, final RenderBlocks renderer) { + } + + @Override + public boolean renderWorldBlock(final IBlockAccess world, final int par2, final int par3, final int par4, final Block par1Block, final int modelId, final RenderBlocks renderer) { + final int c = par1Block.colorMultiplier(renderer.blockAccess, par2, par3, par4); + final float c2 = (c >> 16 & 0xFF) / 255.0f; + final float c3 = (c >> 8 & 0xFF) / 255.0f; + final float c4 = (c & 0xFF) / 255.0f; + final Tessellator tessellator = Tessellator.instance; + final int l = renderer.blockAccess.getBlockMetadata(par2, par3, par4); + if ((l & 0x8) != 0x0) { + if (renderer.blockAccess.getBlock(par2, par3 - 1, par4) != par1Block) { + return false; + } + } + else if (renderer.blockAccess.getBlock(par2, par3 + 1, par4) != par1Block) { + return false; + } + boolean flag = false; + final float f = 0.5f; + final float f2 = 1.0f; + final float f3 = 0.8f; + final float f4 = 0.6f; + final int i1 = par1Block.getMixedBrightnessForBlock(renderer.blockAccess, par2, par3, par4); + tessellator.setBrightness((renderer.renderMinY > 0.0) ? i1 : par1Block.getMixedBrightnessForBlock(renderer.blockAccess, par2, par3 - 1, par4)); + tessellator.setColorOpaque_F(f * c2, f * c3, f * c4); + renderer.renderFaceYNeg(par1Block, par2, par3, par4, renderer.getBlockIcon(par1Block, renderer.blockAccess, par2, par3, par4, 0)); + flag = true; + tessellator.setBrightness((renderer.renderMaxY < 1.0) ? i1 : par1Block.getMixedBrightnessForBlock(renderer.blockAccess, par2, par3 + 1, par4)); + tessellator.setColorOpaque_F(f2 * c2, f2 * c3, f2 * c4); + renderer.renderFaceYPos(par1Block, par2, par3, par4, renderer.getBlockIcon(par1Block, renderer.blockAccess, par2, par3, par4, 1)); + flag = true; + tessellator.setBrightness((renderer.renderMinZ > 0.0) ? i1 : par1Block.getMixedBrightnessForBlock(renderer.blockAccess, par2, par3, par4 - 1)); + tessellator.setColorOpaque_F(f3 * c2, f3 * c3, f3 * c4); + IIcon icon = renderer.getBlockIcon(par1Block, renderer.blockAccess, par2, par3, par4, 2); + renderer.renderFaceZNeg(par1Block, par2, par3, par4, icon); + flag = true; + renderer.flipTexture = false; + tessellator.setBrightness((renderer.renderMaxZ < 1.0) ? i1 : par1Block.getMixedBrightnessForBlock(renderer.blockAccess, par2, par3, par4 + 1)); + tessellator.setColorOpaque_F(f3 * c2, f3 * c3, f3 * c4); + icon = renderer.getBlockIcon(par1Block, renderer.blockAccess, par2, par3, par4, 3); + renderer.renderFaceZPos(par1Block, par2, par3, par4, icon); + flag = true; + renderer.flipTexture = false; + tessellator.setBrightness((renderer.renderMinX > 0.0) ? i1 : par1Block.getMixedBrightnessForBlock(renderer.blockAccess, par2 - 1, par3, par4)); + tessellator.setColorOpaque_F(f4 * c2, f4 * c3, f4 * c4); + icon = renderer.getBlockIcon(par1Block, renderer.blockAccess, par2, par3, par4, 4); + renderer.renderFaceXNeg(par1Block, par2, par3, par4, icon); + flag = true; + renderer.flipTexture = false; + tessellator.setBrightness((renderer.renderMaxX < 1.0) ? i1 : par1Block.getMixedBrightnessForBlock(renderer.blockAccess, par2 + 1, par3, par4)); + tessellator.setColorOpaque_F(f4 * c2, f4 * c3, f4 * c4); + icon = renderer.getBlockIcon(par1Block, renderer.blockAccess, par2, par3, par4, 5); + renderer.renderFaceXPos(par1Block, par2, par3, par4, icon); + flag = true; + renderer.flipTexture = false; + return flag; + } + + @Override + public boolean shouldRender3DInInventory(final int i) { + return false; + } + + @Override + public int getRenderId() { + return ExtraTrees.doorRenderId; + } +} diff --git a/src/main/java/binnie/extratrees/block/DoorType.java b/src/main/java/binnie/extratrees/block/DoorType.java new file mode 100644 index 00000000..1a7bb705 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/DoorType.java @@ -0,0 +1,31 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import binnie.extratrees.ExtraTrees; +import net.minecraft.util.IIcon; + +public enum DoorType +{ + Standard("standard"), + Solid("solid"), + Double("double"), + Full("full"); + + String id; + IIcon iconDoorLower; + IIcon iconDoorUpper; + IIcon iconDoorLowerFlip; + IIcon iconDoorUpperFlip; + IIcon iconItem; + + private DoorType(final String iconName) { + this.id = iconName; + } + + public String getName() { + return ExtraTrees.proxy.localise("block.door.type." + this.id); + } +} diff --git a/src/main/java/binnie/extratrees/block/FruitPod.java b/src/main/java/binnie/extratrees/block/FruitPod.java new file mode 100644 index 00000000..dce380ad --- /dev/null +++ b/src/main/java/binnie/extratrees/block/FruitPod.java @@ -0,0 +1,53 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import binnie.extratrees.ExtraTrees; +import net.minecraft.client.renderer.texture.IIconRegister; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.core.BinnieCore; +import net.minecraft.util.IIcon; +import forestry.api.core.IIconProvider; + +public enum FruitPod implements IIconProvider +{ + Cocoa, + Banana, + Coconut, + Plantain, + RedBanana, + Papayimar; + + short[] textures; + IIcon[] icons; + + private FruitPod() { + this.textures = new short[] { BinnieCore.proxy.getUniqueTextureUID(), BinnieCore.proxy.getUniqueTextureUID(), BinnieCore.proxy.getUniqueTextureUID() }; + this.icons = new IIcon[3]; + } + + public short[] getTextures() { + return this.textures; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final short texUID) { + final int index = this.textures[0] - texUID; + if (index >= 0 && index < 3) { + return this.icons[index]; + } + return null; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.icons[0] = ExtraTrees.proxy.getIcon(register, "pods/" + this.toString().toLowerCase() + ".0"); + this.icons[1] = ExtraTrees.proxy.getIcon(register, "pods/" + this.toString().toLowerCase() + ".1"); + this.icons[2] = ExtraTrees.proxy.getIcon(register, "pods/" + this.toString().toLowerCase() + ".2"); + } +} diff --git a/src/main/java/binnie/extratrees/block/GateItemRenderer.java b/src/main/java/binnie/extratrees/block/GateItemRenderer.java new file mode 100644 index 00000000..4a2c60f0 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/GateItemRenderer.java @@ -0,0 +1,103 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import net.minecraft.util.IIcon; +import net.minecraft.block.Block; +import org.lwjgl.opengl.GL11; +import net.minecraft.item.ItemBlock; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.item.ItemStack; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraftforge.client.IItemRenderer; + +public class GateItemRenderer implements IItemRenderer +{ + private void renderStairBlock(final RenderBlocks renderBlocks, final ItemStack item, final float f, final float g, final float h) { + final Tessellator tessellator = Tessellator.instance; + final Block block = ((ItemBlock) item.getItem()).field_150939_a; + final IIcon textureIndex = WoodManager.getPlankType(item.getItemDamage()).getIcon(); + for (int k = 0; k < 3; ++k) { + float f2 = 0.0625f; + if (k == 0) { + renderBlocks.setRenderBounds(0.5f - f2, 0.30000001192092896, 0.0, 0.5f + f2, 1.0, f2 * 2.0f); + } + if (k == 1) { + renderBlocks.setRenderBounds(0.5f - f2, 0.30000001192092896, 1.0f - f2 * 2.0f, 0.5f + f2, 1.0, 1.0); + } + f2 = 0.0625f; + if (k == 2) { + renderBlocks.setRenderBounds(0.5f - f2, 0.5, 0.0, 0.5f + f2, 1.0f - f2, 1.0); + } + GL11.glTranslatef(-0.5f, -0.5f, -0.5f); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0f, -1.0f, 0.0f); + renderBlocks.renderFaceYNeg(block, 0.0, 0.0, 0.0, renderBlocks.getBlockIconFromSideAndMetadata(block, 0, item.getItemDamage())); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0f, 1.0f, 0.0f); + renderBlocks.renderFaceYPos(block, 0.0, 0.0, 0.0, renderBlocks.getBlockIconFromSideAndMetadata(block, 1, item.getItemDamage())); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0f, 0.0f, -1.0f); + renderBlocks.renderFaceZNeg(block, 0.0, 0.0, 0.0, renderBlocks.getBlockIconFromSideAndMetadata(block, 2, item.getItemDamage())); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0f, 0.0f, 1.0f); + renderBlocks.renderFaceZPos(block, 0.0, 0.0, 0.0, renderBlocks.getBlockIconFromSideAndMetadata(block, 3, item.getItemDamage())); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(-1.0f, 0.0f, 0.0f); + renderBlocks.renderFaceXNeg(block, 0.0, 0.0, 0.0, renderBlocks.getBlockIconFromSideAndMetadata(block, 4, item.getItemDamage())); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(1.0f, 0.0f, 0.0f); + renderBlocks.renderFaceXPos(block, 0.0, 0.0, 0.0, renderBlocks.getBlockIconFromSideAndMetadata(block, 5, item.getItemDamage())); + tessellator.draw(); + GL11.glTranslatef(0.5f, 0.5f, 0.5f); + } + } + + @Override + public boolean handleRenderType(final ItemStack item, final IItemRenderer.ItemRenderType type) { + switch (type) { + case ENTITY: { + return true; + } + case EQUIPPED: { + return true; + } + case INVENTORY: { + return true; + } + default: { + return false; + } + } + } + + @Override + public boolean shouldUseRenderHelper(final IItemRenderer.ItemRenderType type, final ItemStack item, final IItemRenderer.ItemRendererHelper helper) { + return true; + } + + @Override + public void renderItem(final IItemRenderer.ItemRenderType type, final ItemStack item, final Object... data) { + switch (type) { + case ENTITY: { + this.renderStairBlock((RenderBlocks) data[0], item, -0.5f, -0.5f, -0.5f); + break; + } + case EQUIPPED: { + this.renderStairBlock((RenderBlocks) data[0], item, 0.0f, 0.0f, 0.0f); + break; + } + case INVENTORY: { + this.renderStairBlock((RenderBlocks) data[0], item, -0.5f, -0.5f, -0.5f); + break; + } + } + } +} diff --git a/src/main/java/binnie/extratrees/block/IFenceProvider.java b/src/main/java/binnie/extratrees/block/IFenceProvider.java new file mode 100644 index 00000000..600043be --- /dev/null +++ b/src/main/java/binnie/extratrees/block/IFenceProvider.java @@ -0,0 +1,12 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import net.minecraft.item.ItemStack; + +public interface IFenceProvider +{ + ItemStack getFence(); +} diff --git a/src/main/java/binnie/extratrees/block/ILogType.java b/src/main/java/binnie/extratrees/block/ILogType.java new file mode 100644 index 00000000..6b9e5850 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/ILogType.java @@ -0,0 +1,232 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import net.minecraft.init.Blocks; +import net.minecraft.client.renderer.texture.IIconRegister; + +import binnie.core.block.TileEntityMetadata; +import binnie.extratrees.ExtraTrees; + +import cpw.mods.fml.common.registry.GameRegistry; + +import net.minecraftforge.common.util.ForgeDirection; + +import forestry.api.arboriculture.EnumWoodType; +import forestry.api.arboriculture.TreeManager; +import forestry.arboriculture.worldgen.BlockTypeLog; + +import net.minecraft.util.IIcon; + +import binnie.extratrees.api.IDesignMaterial; + +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public interface ILogType +{ + void placeBlock(final World p0, final int p1, final int p2, final int p3); + + ItemStack getItemStack(); + + int getColour(); + + public enum ExtraTreeLog implements ILogType + { + Apple("Apple", 8092283, PlankType.ExtraTreePlanks.Apple), + Fig("Fig", 8418135, PlankType.ExtraTreePlanks.Fig), + Butternut("Butternut", 12037536, PlankType.ExtraTreePlanks.Butternut), + Cherry("Cherry", 7432272, PlankType.ForestryPlanks.CHERRY), + Whitebeam("Whitebeam", 7891565, PlankType.ExtraTreePlanks.Whitebeam), + Rowan("Rowan", 11972763, PlankType.ExtraTreePlanks.Rowan), + Hemlock("Hemlock", 11379611, PlankType.ExtraTreePlanks.Hemlock), + Ash("Ash", 9013634, PlankType.ExtraTreePlanks.Ash), + Alder("Alder", 13025464, PlankType.ExtraTreePlanks.Alder), + Beech("Beech", 11702654, PlankType.ExtraTreePlanks.Beech), + Hawthorn("Hawthorn", 6248261, PlankType.ExtraTreePlanks.Hawthorn), + Banana("Banana", 8753743), + Yew("Yew", 13745089, PlankType.ExtraTreePlanks.Yew), + Cypress("Cypress", 10126467, PlankType.ExtraTreePlanks.Cypress), + Fir("Fir", 8553346, PlankType.ExtraTreePlanks.Fir), + Hazel("Hazel", 11180143, PlankType.ExtraTreePlanks.Hazel), + Hickory("Hickory", 4076848, PlankType.ExtraTreePlanks.Hickory), + Elm("Elm", 8684422, PlankType.ExtraTreePlanks.Elm), + Elder("Elder", 14202996, PlankType.ExtraTreePlanks.Elder), + Holly("Holly", 11905669, PlankType.ExtraTreePlanks.Holly), + Hornbeam("Hornbeam", 10719862, PlankType.ExtraTreePlanks.Hornbeam), + Cedar("Cedar", 11368015, PlankType.ExtraTreePlanks.Cedar), + Olive("Olive", 8089706, PlankType.ExtraTreePlanks.Olive), + Sweetgum("Sweetgum", 10592668, PlankType.ExtraTreePlanks.Sweetgum), + Locust("Locust", 11381948, PlankType.ExtraTreePlanks.Locust), + Pear("Pear", 11048825, PlankType.ExtraTreePlanks.Pear), + Maclura("Maclura", 9131828, PlankType.ExtraTreePlanks.Maclura), + Brazilwood("Brazilwood", 10387560, PlankType.ExtraTreePlanks.Brazilwood), + Logwood("Logwood", 16376530, PlankType.ExtraTreePlanks.Logwood), + Rosewood("Rosewood", 10061414, PlankType.ExtraTreePlanks.Rosewood), + Purpleheart("Purpleheart", 9671330, PlankType.ExtraTreePlanks.Purpleheart), + Iroko("Iroko", 6315099, PlankType.ExtraTreePlanks.Iroko), + Gingko("Gingko", 11382428, PlankType.ExtraTreePlanks.Gingko), + Eucalyptus("Eucalyptus", 15392474, PlankType.ExtraTreePlanks.Eucalyptus), + Eucalyptus2("Eucalyptus", 8814181, PlankType.ExtraTreePlanks.Eucalyptus), + Box("Box", 11235159, PlankType.ExtraTreePlanks.Box), + Syzgium("Syzgium", 11235159, PlankType.ExtraTreePlanks.Syzgium), + Eucalyptus3("Eucalyptus", 7123007, PlankType.ExtraTreePlanks.Eucalyptus), + Cinnamon("Cinnamon", 8804412, PlankType.VanillaPlanks.JUNGLE), + PinkIvory("Pink Ivory", 8349012, PlankType.ExtraTreePlanks.PinkIvory); + + String name; + int color; + IDesignMaterial plank; + IIcon trunk; + IIcon bark; + + private ExtraTreeLog(final String name, final int color) { + this.plank = null; + this.name = name; + this.color = color; + } + + private ExtraTreeLog(final String name, final int color, final IDesignMaterial plank) { + this.plank = null; + this.name = name; + this.color = color; + this.plank = plank; + } + + public String getName() { + return this.name; + } + + public void addRecipe() { + if (this.plank == null) { + return; + } + final ItemStack log = this.getItemStack(); + final ItemStack result = this.plank.getStack(); + result.stackSize = 4; + GameRegistry.addShapelessRecipe(result, new Object[] { log }); + } + + @Override + public void placeBlock(final World world, final int x, final int y, final int z) { + world.setBlock(x, y, z, ExtraTrees.blockLog, 0, 2); + if (world.getTileEntity(x, y, z) != null) { + ((TileEntityMetadata) world.getTileEntity(x, y, z)).setTileMetadata(this.ordinal(), false); + } + } + + public IIcon getTrunk() { + return this.trunk; + } + + public IIcon getBark() { + return this.bark; + } + + public static void registerIcons(final IIconRegister register) { + for (final ExtraTreeLog log : values()) { + log.trunk = ExtraTrees.proxy.getIcon(register, "logs/" + log.toString().toLowerCase() + "Trunk"); + log.bark = ExtraTrees.proxy.getIcon(register, "logs/" + log.toString().toLowerCase() + "Bark"); + } + } + + @Override + public ItemStack getItemStack() { + return TileEntityMetadata.getItemStack(ExtraTrees.blockLog, this.ordinal()).copy(); + } + + @Override + public int getColour() { + return this.color; + } + } + + public enum ForestryLog implements ILogType + { + LARCH(1, 0, 6376529), + TEAK(1, 1, 3486249), + ACACIA(1, 2, 7565906), + LIME(1, 3, 7431512), + CHESTNUT(2, 0, 6183484), + WENGE(2, 1, 6444875), + BAOBAB(2, 2, 14326376), + SEQUOIA(2, 3, 11563861), + KAPOK(3, 0, 5396559), + EBONY(3, 1, 10453073), + MAHOGANY(3, 2, 9403501), + BALSA(3, 3, 8551285), + WILLOW(4, 0, 10590869), + WALNUT(4, 1, 9474682), + GREENHEART(4, 2, 7956050), + CHERRY(4, 3, 6296064), + MAHOE(5, 0, 6382152), + POPLAR(5, 1, 9217671), + PALM(5, 2, 8941379), + PAPAYA(5, 3, 9069862), + PINE(6, 0, 7558729), + PLUM(6, 1, 11961953), + MAPLE(6, 2, 9078657), + CITRUS(6, 3, 5983033); + + int block; + int metadata; + int colour; + + private ForestryLog(final int blockOffset, final int meta, final int colour) { + this.block = blockOffset; + this.metadata = meta; + this.colour = colour; + } + + @Override + public void placeBlock(final World world, final int x, final int y, final int z) { + BlockTypeLog logBlock = new BlockTypeLog(TreeManager.woodItemAccess.getLog(EnumWoodType.valueOf(this.name().toUpperCase()), false)); + logBlock.setDirection(ForgeDirection.UP); + logBlock.setBlock(world, x, y, z); + + } + + @Override + public ItemStack getItemStack() { + return TreeManager.woodItemAccess.getLog(EnumWoodType.valueOf(this.name().toUpperCase()), false); + // return new ItemStack(Mods.Forestry.item("logs"), 1, + // this.metadata); + } + + @Override + public int getColour() { + return this.colour; + } + } + + public enum VanillaLog implements ILogType + { + Oak(6376752), + Spruce(2759179), + Birch(6376752), + Jungle(5456154); + + int colour; + + private VanillaLog(final int colour) { + this.colour = colour; + } + + @Override + public void placeBlock(final World world, final int x, final int y, final int z) { + world.setBlock(x, y, z, Blocks.log, this.ordinal(), 2); + } + + @Override + public ItemStack getItemStack() { + return new ItemStack(Blocks.log, 1, this.ordinal()); + } + + @Override + public int getColour() { + return this.colour; + } + } +} diff --git a/src/main/java/binnie/extratrees/block/IPlankType.java b/src/main/java/binnie/extratrees/block/IPlankType.java new file mode 100644 index 00000000..e8ac682f --- /dev/null +++ b/src/main/java/binnie/extratrees/block/IPlankType.java @@ -0,0 +1,15 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import net.minecraft.util.IIcon; +import binnie.extratrees.api.IDesignMaterial; + +public interface IPlankType extends IDesignMaterial +{ + IIcon getIcon(); + + String getDescription(); +} diff --git a/src/main/java/binnie/extratrees/block/ItemETDoor.java b/src/main/java/binnie/extratrees/block/ItemETDoor.java new file mode 100644 index 00000000..1877e1ed --- /dev/null +++ b/src/main/java/binnie/extratrees/block/ItemETDoor.java @@ -0,0 +1,117 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import net.minecraft.util.IIcon; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.IBlockAccess; +import binnie.core.block.TileEntityMetadata; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.block.Block; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.extratrees.ExtraTrees; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.core.block.ItemMetadata; + +public class ItemETDoor extends ItemMetadata +{ + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + for (final DoorType type : DoorType.values()) { + type.iconItem = ExtraTrees.proxy.getIcon(register, "door." + type.id); + } + } + + public ItemETDoor(final Block block) { + super(block); + this.maxStackSize = 1; + this.setCreativeTab(CreativeTabs.tabRedstone); + } + + @Override + public boolean onItemUse(final ItemStack par1ItemStack, final EntityPlayer par2EntityPlayer, final World par3World, final int par4, int par5, final int par6, final int par7, final float par8, final float par9, final float par10) { + if (par7 != 1) { + return false; + } + ++par5; + final Block block = ExtraTrees.blockDoor; + if (!par2EntityPlayer.canPlayerEdit(par4, par5, par6, par7, par1ItemStack) || !par2EntityPlayer.canPlayerEdit(par4, par5 + 1, par6, par7, par1ItemStack)) { + return false; + } + if (!block.canPlaceBlockAt(par3World, par4, par5, par6)) { + return false; + } + final int i1 = MathHelper.floor_double((par2EntityPlayer.rotationYaw + 180.0f) * 4.0f / 360.0f - 0.5) & 0x3; + placeDoorBlock(par3World, par4, par5, par6, i1, block, par1ItemStack, par2EntityPlayer); + --par1ItemStack.stackSize; + return true; + } + + public static void placeDoorBlock(final World par0World, final int par1, final int par2, final int par3, final int par4, final Block par5Block, final ItemStack item, final EntityPlayer player) { + byte b0 = 0; + byte b2 = 0; + if (par4 == 0) { + b2 = 1; + } + if (par4 == 1) { + b0 = -1; + } + if (par4 == 2) { + b2 = -1; + } + if (par4 == 3) { + b0 = 1; + } + + final int i1 = (par0World.isBlockNormalCubeDefault(par1 - b0, par2, par3 - b2, false) ? 1 : 0) + (par0World.isBlockNormalCubeDefault(par1 - b0, par2 + 1, par3 - b2, false) ? 1 : 0); + final int j1 = (par0World.isBlockNormalCubeDefault(par1 + b0, par2, par3 + b2, false) ? 1 : 0) + (par0World.isBlockNormalCubeDefault(par1 + b0, par2 + 1, par3 + b2, false) ? 1 : 0); + final boolean flag = par0World.getBlock(par1 - b0, par2, par3 - b2) == par5Block || par0World.getBlock(par1 - b0, par2 + 1, par3 - b2) == par5Block; + final boolean flag2 = par0World.getBlock(par1 + b0, par2, par3 + b2) == par5Block || par0World.getBlock(par1 + b0, par2 + 1, par3 + b2) == par5Block; + boolean flag3 = false; + if (flag && !flag2) { + flag3 = true; + } + else if (j1 > i1) { + flag3 = true; + } + par0World.setBlock(par1, par2, par3, par5Block, par4, 2); + par0World.setBlock(par1, par2 + 1, par3, par5Block, 0x8 | (flag3 ? 1 : 0), 2); + if (par0World.getBlock(par1, par2, par3) == par5Block) { + final TileEntityMetadata tile = TileEntityMetadata.getTile(par0World, par1, par2, par3); + if (tile != null) { + tile.setTileMetadata(TileEntityMetadata.getItemDamage(item), false); + } + par5Block.onBlockPlacedBy(par0World, par1, par2, par3, player, item); + par5Block.onPostBlockPlaced(par0World, par1, par2, par3, par4); + } + par0World.notifyBlocksOfNeighborChange(par1, par2, par3, par5Block); + par0World.notifyBlocksOfNeighborChange(par1, par2 + 1, par3, par5Block); + } + + @Override + @SideOnly(Side.CLIENT) + public int getSpriteNumber() { + return 1; + } + + @SideOnly(Side.CLIENT) + @Override + public IIcon getIconFromDamage(final int par1) { + final DoorType type = BlockETDoor.getDoorType(par1); + return type.iconItem; + } + + @Override + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(final ItemStack par1ItemStack, final int par2) { + return WoodManager.getPlankType((par1ItemStack == null) ? 0 : (par1ItemStack.getItemDamage() & 0xFF)).getColour(); + } +} diff --git a/src/main/java/binnie/extratrees/block/ItemETSlab.java b/src/main/java/binnie/extratrees/block/ItemETSlab.java new file mode 100644 index 00000000..69aff134 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/ItemETSlab.java @@ -0,0 +1,99 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.world.IBlockAccess; +import binnie.core.block.TileEntityMetadata; +import net.minecraft.world.World; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import binnie.extratrees.ExtraTrees; +import net.minecraft.block.Block; +import binnie.core.block.ItemMetadata; + +public class ItemETSlab extends ItemMetadata +{ + private final boolean isFullBlock; + private final BlockETSlab theHalfSlab; + private final BlockETSlab doubleSlab; + + public ItemETSlab(final Block block) { + super(block); + this.theHalfSlab = (BlockETSlab) ExtraTrees.blockSlab; + this.doubleSlab = (BlockETSlab) ExtraTrees.blockDoubleSlab; + this.isFullBlock = (block != this.theHalfSlab); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + @SideOnly(Side.CLIENT) + public boolean onItemUse(final ItemStack par1ItemStack, final EntityPlayer par2EntityPlayer, final World par3World, final int par4, final int par5, final int par6, final int par7, final float par8, final float par9, final float par10) { + if (this.isFullBlock) { + return super.onItemUse(par1ItemStack, par2EntityPlayer, par3World, par4, par5, par6, par7, par8, par9, par10); + } + if (par1ItemStack.stackSize == 0) { + return false; + } + if (!par2EntityPlayer.canPlayerEdit(par4, par5, par6, par7, par1ItemStack)) { + return false; + } + final Block i1 = par3World.getBlock(par4, par5, par6); + final int j1 = par3World.getBlockMetadata(par4, par5, par6); + final int tileMeta = TileEntityMetadata.getTileMetadata(par3World, par4, par5, par6); + final int k1 = j1 & 0x7; + final boolean flag = (j1 & 0x8) != 0x0; + if (((par7 == 1 && !flag) || (par7 == 0 && flag)) && i1 == this.theHalfSlab && tileMeta == par1ItemStack.getItemDamage()) { + if (par3World.checkNoEntityCollision(this.doubleSlab.getCollisionBoundingBoxFromPool(par3World, par4, par5, par6)) && par3World.setBlock(par4, par5, par6, this.doubleSlab, k1, 3)) { + final TileEntityMetadata tile = TileEntityMetadata.getTile(par3World, par4, par5, par6); + if (tile != null) { + tile.setTileMetadata(tileMeta, true); + } + --par1ItemStack.stackSize; + } + return true; + } + return this.func_77888_a(par1ItemStack, par2EntityPlayer, par3World, par4, par5, par6, par7) || super.onItemUse(par1ItemStack, par2EntityPlayer, par3World, par4, par5, par6, par7, par8, par9, par10); + } + + private boolean func_77888_a(final ItemStack par1ItemStack, final EntityPlayer par2EntityPlayer, final World par3World, int par4, int par5, int par6, final int par7) { + if (par7 == 0) { + --par5; + } + if (par7 == 1) { + ++par5; + } + if (par7 == 2) { + --par6; + } + if (par7 == 3) { + ++par6; + } + if (par7 == 4) { + --par4; + } + if (par7 == 5) { + ++par4; + } + final Block i1 = par3World.getBlock(par4, par5, par6); + final int j1 = par3World.getBlockMetadata(par4, par5, par6); + final int k1 = j1 & 0x7; + final int tileMeta = TileEntityMetadata.getTileMetadata(par3World, par4, par5, par6); + if (i1 == this.theHalfSlab && tileMeta == par1ItemStack.getItemDamage()) { + if (par3World.checkNoEntityCollision(this.doubleSlab.getCollisionBoundingBoxFromPool(par3World, par4, par5, par6)) && par3World.setBlock(par4, par5, par6, this.doubleSlab, k1, 3)) { + final TileEntityMetadata tile = TileEntityMetadata.getTile(par3World, par4, par5, par6); + if (tile != null) { + tile.setTileMetadata(tileMeta, false); + par3World.markBlockForUpdate(par4, par5, par6); + } + --par1ItemStack.stackSize; + } + return true; + } + return false; + } +} diff --git a/src/main/java/binnie/extratrees/block/ItemETStairs.java b/src/main/java/binnie/extratrees/block/ItemETStairs.java new file mode 100644 index 00000000..73c09e24 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/ItemETStairs.java @@ -0,0 +1,48 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import binnie.core.block.IBlockMetadata; +import binnie.core.block.TileEntityMetadata; +import net.minecraft.world.World; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.block.Block; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.IIcon; +import net.minecraft.item.ItemBlock; + +public class ItemETStairs extends ItemBlock +{ + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(final int par1) { + return PlankType.ExtraTreePlanks.values()[par1].getIcon(); + } + + public ItemETStairs(final Block block) { + super(block); + this.setCreativeTab(CreativeTabs.tabBlock); + this.setUnlocalizedName("stairs"); + } + + @Override + public boolean placeBlockAt(final ItemStack stack, final EntityPlayer player, final World world, final int x, final int y, final int z, final int side, final float hitX, final float hitY, final float hitZ, final int metadata) { + final boolean done = super.placeBlockAt(stack, player, world, x, y, z, side, hitX, hitY, hitZ, metadata); + final TileEntityMetadata tile = (TileEntityMetadata) world.getTileEntity(x, y, z); + if (tile != null) { + tile.setTileMetadata(stack.getItemDamage(), false); + } + return done; + } + + @Override + @SideOnly(Side.CLIENT) + public String getItemStackDisplayName(final ItemStack par1ItemStack) { + return ((IBlockMetadata) this.field_150939_a).getBlockName(par1ItemStack); + } +} diff --git a/src/main/java/binnie/extratrees/block/ModuleBlocks.java b/src/main/java/binnie/extratrees/block/ModuleBlocks.java new file mode 100644 index 00000000..79f7e762 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/ModuleBlocks.java @@ -0,0 +1,148 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import net.minecraftforge.fluids.FluidStack; +import binnie.core.Mods; +import forestry.api.recipes.RecipeManagers; +import binnie.core.liquid.ILiquidType; +import binnie.extratrees.item.ExtraTreeLiquid; +import binnie.extratrees.block.decor.FenceType; +import net.minecraft.item.crafting.IRecipe; +import net.minecraftforge.oredict.ShapedOreRecipe; +import net.minecraft.item.crafting.CraftingManager; +import binnie.core.block.TileEntityMetadata; +import binnie.extratrees.block.decor.MultiFenceRecipeSolid; +import binnie.extratrees.block.decor.MultiFenceRecipeEmbedded; +import net.minecraftforge.oredict.RecipeSorter; +import binnie.extratrees.block.decor.MultiFenceRecipeSize; +import binnie.extratrees.block.decor.HedgeRenderer; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import binnie.extratrees.block.decor.FenceRenderer; +import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.common.event.FMLInterModComms; +import net.minecraft.item.ItemStack; +import net.minecraft.init.Items; +import net.minecraftforge.oredict.OreDictionary; +import net.minecraftforge.client.IItemRenderer; +import binnie.core.block.ItemMetadataRenderer; +import net.minecraft.item.Item; +import binnie.core.BinnieCore; +import net.minecraft.block.Block; +import cpw.mods.fml.common.registry.GameRegistry; +import binnie.core.block.ItemMetadata; +import binnie.extratrees.block.decor.BlockMultiFence; +import binnie.extratrees.block.decor.BlockGate; +import binnie.extratrees.block.decor.BlockFence; +import binnie.extratrees.ExtraTrees; +import binnie.core.IInitializable; + +public class ModuleBlocks implements IInitializable +{ + public static int hedgeRenderID; + + @Override + public void preInit() { + PlankType.setup(); + ExtraTrees.blockPlanks = new BlockETPlanks(); + ExtraTrees.blockFence = new BlockFence(); + ExtraTrees.blockLog = new BlockETLog(); + ExtraTrees.blockGate = new BlockGate(); + ExtraTrees.blockDoor = new BlockETDoor(); + ExtraTrees.blockMultiFence = new BlockMultiFence(); + ExtraTrees.blockSlab = new BlockETSlab(false); + ExtraTrees.blockDoubleSlab = new BlockETSlab(true); + ExtraTrees.blockStairs = new BlockETStairs(ExtraTrees.blockPlanks); + GameRegistry.registerBlock(ExtraTrees.blockPlanks, ItemMetadata.class, "planks"); + GameRegistry.registerBlock(ExtraTrees.blockFence, ItemMetadata.class, "fence"); + GameRegistry.registerBlock(ExtraTrees.blockMultiFence, ItemMetadata.class, "multifence"); + BinnieCore.proxy.registerCustomItemRenderer(Item.getItemFromBlock(ExtraTrees.blockMultiFence), new ItemMetadataRenderer()); + GameRegistry.registerBlock(ExtraTrees.blockLog, ItemMetadata.class, "log"); + GameRegistry.registerBlock(ExtraTrees.blockGate, ItemMetadata.class, "gate"); + GameRegistry.registerBlock(ExtraTrees.blockSlab, ItemETSlab.class, "slab"); + GameRegistry.registerBlock(ExtraTrees.blockDoubleSlab, ItemETSlab.class, "doubleSlab"); + GameRegistry.registerBlock(ExtraTrees.blockDoor, ItemETDoor.class, "door"); + GameRegistry.registerBlock(ExtraTrees.blockStairs, ItemETStairs.class, "stairs"); + BinnieCore.proxy.registerCustomItemRenderer(Item.getItemFromBlock(ExtraTrees.blockStairs), new StairItemRenderer()); + BinnieCore.proxy.registerCustomItemRenderer(Item.getItemFromBlock(ExtraTrees.blockGate), new GateItemRenderer()); + for (final ILogType plank : ILogType.ExtraTreeLog.values()) { + OreDictionary.registerOre("logWood", plank.getItemStack()); + } + GameRegistry.addSmelting(ExtraTrees.blockLog, new ItemStack(Items.coal, 1, 1), 0.15f); + for (final IPlankType plank2 : PlankType.ExtraTreePlanks.values()) { + OreDictionary.registerOre("plankWood", plank2.getStack()); + } + FMLInterModComms.sendMessage("Forestry", "add-fence-block", "ExtraTrees:fence"); + FMLInterModComms.sendMessage("Forestry", "add-fence-block", "ExtraTrees:gate"); + // FMLInterModComms.sendMessage("Forestry", "add-alveary-slab", + // "ExtraTrees:slab"); + FMLInterModComms.sendMessage("Forestry", "add-fence-block", "ExtraTrees:multifence"); + ModuleBlocks.hedgeRenderID = BinnieCore.proxy.getUniqueRenderID(); + } + + @Override + public void init() { + ExtraTrees.fenceID = RenderingRegistry.getNextAvailableRenderId(); + RenderingRegistry.registerBlockHandler(new FenceRenderer()); + ExtraTrees.stairsID = RenderingRegistry.getNextAvailableRenderId(); + RenderingRegistry.registerBlockHandler(new StairsRenderer()); + ExtraTrees.doorRenderId = RenderingRegistry.getNextAvailableRenderId(); + RenderingRegistry.registerBlockHandler(new DoorBlockRenderer()); + ExtraTrees.branchRenderId = RenderingRegistry.getNextAvailableRenderId(); + RenderingRegistry.registerBlockHandler(new BranchBlockRenderer()); + RenderingRegistry.registerBlockHandler(new HedgeRenderer()); + RecipeSorter.register("extratrees:multifence", MultiFenceRecipeSize.class, RecipeSorter.Category.SHAPED, ""); + RecipeSorter.register("extratrees:multifence2", MultiFenceRecipeEmbedded.class, RecipeSorter.Category.SHAPED, ""); + RecipeSorter.register("extratrees:multifence3", MultiFenceRecipeSolid.class, RecipeSorter.Category.SHAPED, ""); + } + + @Override + public void postInit() { + for (final PlankType.ExtraTreePlanks plank : PlankType.ExtraTreePlanks.values()) { + final ItemStack planks = plank.getStack(); + final ItemStack slabs = TileEntityMetadata.getItemStack(ExtraTrees.blockSlab, plank.ordinal()); + final ItemStack stairs = TileEntityMetadata.getItemStack(ExtraTrees.blockStairs, plank.ordinal()); + stairs.stackSize = 4; + GameRegistry.addRecipe(stairs.copy(), new Object[] { "# ", "## ", "###", '#', planks.copy() }); + slabs.stackSize = 6; + CraftingManager.getInstance().getRecipeList().add(0, new ShapedOreRecipe(slabs.copy(), new Object[] { "###", '#', planks.copy() })); + } + GameRegistry.addRecipe(new MultiFenceRecipeSize()); + GameRegistry.addRecipe(new MultiFenceRecipeEmbedded()); + GameRegistry.addRecipe(new MultiFenceRecipeSolid()); + for (final IPlankType plank2 : WoodManager.getAllPlankTypes()) { + final ItemStack planks2 = plank2.getStack(); + final ItemStack fenceNormal = WoodManager.getFence(plank2, new FenceType(0), 1); + final ItemStack gate = WoodManager.getGate(plank2); + final ItemStack doorStandard = WoodManager.getDoor(plank2, DoorType.Standard); + final ItemStack doorSolid = WoodManager.getDoor(plank2, DoorType.Solid); + final ItemStack doorSplit = WoodManager.getDoor(plank2, DoorType.Double); + final ItemStack doorFull = WoodManager.getDoor(plank2, DoorType.Full); + if (planks2 != null) { + if (gate == null) { + continue; + } + gate.stackSize = 1; + GameRegistry.addRecipe(gate.copy(), new Object[] { "fpf", 'f', fenceNormal.copy(), 'p', planks2.copy() }); + fenceNormal.stackSize = 4; + GameRegistry.addRecipe(fenceNormal.copy(), new Object[] { "###", "# #", '#', planks2.copy() }); + GameRegistry.addRecipe(doorSolid.copy(), new Object[] { "###", "###", "###", '#', planks2.copy() }); + GameRegistry.addRecipe(doorStandard.copy(), new Object[] { "# #", "###", "###", '#', planks2.copy() }); + GameRegistry.addRecipe(doorSplit.copy(), new Object[] { "# #", "###", "# #", '#', planks2.copy() }); + GameRegistry.addRecipe(doorFull.copy(), new Object[] { "# #", "# #", "# #", '#', planks2.copy() }); + } + } + this.addSqueezer(ILogType.VanillaLog.Spruce, ExtraTreeLiquid.Resin, 50); + } + + public void addSqueezer(final ILogType log, final ILiquidType liquid, final int amount, final float pulpChance) { + final FluidStack liquidStack = liquid.get(amount); + RecipeManagers.squeezerManager.addRecipe(10, new ItemStack[] { log.getItemStack() }, liquidStack, Mods.Forestry.stack("woodPulp"), (int) (100.0f * pulpChance)); + } + + public void addSqueezer(final ILogType log, final ILiquidType liquid, final int amount) { + this.addSqueezer(log, liquid, amount, 0.5f); + } +} diff --git a/src/main/java/binnie/extratrees/block/PlankType.java b/src/main/java/binnie/extratrees/block/PlankType.java new file mode 100644 index 00000000..4c7706dc --- /dev/null +++ b/src/main/java/binnie/extratrees/block/PlankType.java @@ -0,0 +1,290 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import com.google.common.base.Optional; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.Item; +import binnie.core.Mods; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.core.block.TileEntityMetadata; +import net.minecraft.item.ItemStack; +import binnie.extratrees.ExtraTrees; +import net.minecraft.util.IIcon; +import binnie.extratrees.api.CarpentryManager; + +public class PlankType +{ + public static final int MAX_PLANKS = 256; + + public static void setup() { + for (final VanillaPlanks plank : VanillaPlanks.values()) { + CarpentryManager.carpentryInterface.registerCarpentryWood(plank.ordinal(), plank); + } + for (final ExtraTreePlanks plank2 : ExtraTreePlanks.values()) { + CarpentryManager.carpentryInterface.registerCarpentryWood(plank2.ordinal() + 32, plank2); + } + for (final ForestryPlanks plank3 : ForestryPlanks.values()) { + CarpentryManager.carpentryInterface.registerCarpentryWood(plank3.ordinal() + 128, plank3); + } + for (final ExtraBiomesPlank plank4 : ExtraBiomesPlank.values()) { + CarpentryManager.carpentryInterface.registerCarpentryWood(plank4.ordinal() + 192, plank4); + } + } + + public enum ExtraTreePlanks implements IPlankType, IFenceProvider + { + Fir(12815444), + Cedar(14181940), + Hemlock(13088108), + Cypress(16169052), + Fig(13142058), + Beech(14784849), + Alder(12092755), + Hazel(13480341), + Hornbeam(12818528), + Box(16511430), + Butternut(15510138), + Hickory(14333070), + Whitebeam(13222585), + Elm(15772004), + Apple(6305064), + Yew(14722426), + Pear(12093805), + Hawthorn(13402978), + Rowan(13610394), + Elder(12489337), + Maclura(15970862), + Syzgium(15123393), + Brazilwood(7487063), + Logwood(10762028), + Iroko(7681024), + Locust(12816736), + Eucalyptus(16165771), + Purpleheart(5970991), + Ash(16107368), + Holly(16512743), + Olive(11578760), + Sweetgum(13997656), + Rosewood(7738624), + Gingko(16050106), + PinkIvory(15502496); + + int color; + IIcon icon; + + private ExtraTreePlanks(final int color) { + this.color = color; + } + + @Override + public String getName() { + return ExtraTrees.proxy.localise("block.planks." + this.toString().toLowerCase()); + } + + @Override + public String getDescription() { + return ExtraTrees.proxy.localise("block.planks." + this.toString().toLowerCase() + ".desc"); + } + + @Override + public int getColour() { + return this.color; + } + + @Override + public ItemStack getStack() { + return TileEntityMetadata.getItemStack(ExtraTrees.blockPlanks, this.ordinal()); + } + + public IIcon loadIcon(final IIconRegister register) { + return this.icon = ExtraTrees.proxy.getIcon(register, "planks/" + this.toString()); + } + + @Override + public IIcon getIcon() { + return this.icon; + } + + @Override + public ItemStack getFence() { + return TileEntityMetadata.getItemStack(ExtraTrees.blockFence, WoodManager.getPlankTypeIndex(this)); + } + } + + public enum VanillaPlanks implements IPlankType + { + OAK(11833434), + SPRUCE(8412726), + BIRCH(14139781), + JUNGLE(11632732), + ACACIA(12215095), + DARKOAK(4599061); + + int color; + + private VanillaPlanks(final int color) { + this.color = color; + } + + @Override + public String getName() { + return ExtraTrees.proxy.localise("block.planks.vanilla." + this.toString().toLowerCase()); + } + + @Override + public String getDescription() { + return ExtraTrees.proxy.localise("block.planks.vanilla." + this.toString().toLowerCase() + ".desc"); + } + + @Override + public int getColour() { + return this.color; + } + + @Override + public ItemStack getStack() { + return new ItemStack(Blocks.planks, 1, this.ordinal()); + } + + @Override + public IIcon getIcon() { + if (this.getStack() != null) { + final int meta = this.getStack().getItemDamage(); + final Block block = Blocks.planks; + return block.getIcon(2, meta); + } + return null; + } + } + + public enum ForestryPlanks implements IPlankType, IFenceProvider + { + LARCH(14131085), + TEAK(8223075), + ACACIA(9745287), + LIME(13544048), + CHESTNUT(12298845), + WENGE(6182474), + BAOBAB(9608290), + SEQUOIA(10050135), + KAPOK(8156212), + EBONY(3946288), + MAHOGANY(7749432), + BALSA(11117209), + WILLOW(11710818), + WALNUT(6836802), + GREENHEART(5144156), + CHERRY(11895348), + MAHOE(8362154), + POPLAR(13619074), + PALM(13271115), + PAPAYA(14470005), + PINE(12885585), + PLUM(11364479), + MAPLE(11431211), + CITRUS(10266653), + GIGANTEUM(5186590), + IPE(5057822), + PADAUK(11756341), + COCOBOLO(7541506), + ZEBRAWOOD(10912334); + + int color; + + private ForestryPlanks(final int color) { + this.color = color; + } + + @Override + public String getName() { + return ExtraTrees.proxy.localise("block.planks.forestry." + this.toString().toLowerCase()); + } + + @Override + public String getDescription() { + return ExtraTrees.proxy.localise("block.planks.forestry." + this.toString().toLowerCase() + ".desc"); + } + + @Override + public int getColour() { + return this.color; + } + + @Override + public ItemStack getStack() { + final Item stack = Mods.Forestry.item("planks"); + return new ItemStack(stack, 1, this.ordinal()); + } + + @Override + public IIcon getIcon() { + if (this.getStack() != null) { + final int meta = this.getStack().getItemDamage(); + final Block block = ((ItemBlock) this.getStack().getItem()).field_150939_a; + return block.getIcon(2, meta); + } + return null; + } + + @Override + public ItemStack getFence() { + final ItemStack fence = Mods.Forestry.stack("fences"); + fence.setItemDamage(this.ordinal()); + return fence; + } + } + + public enum ExtraBiomesPlank implements IPlankType + { + Redwood(10185538), + Fir(8288074), + Acacia(12561022); + + int color; + + private ExtraBiomesPlank(final int color) { + this.color = color; + } + + @Override + public String getName() { + return ExtraTrees.proxy.localise("block.planks.ebxl." + this.toString().toLowerCase()); + } + + @Override + public String getDescription() { + return ExtraTrees.proxy.localise("block.planks.ebxl." + this.toString().toLowerCase() + ".desc"); + } + + @Override + public int getColour() { + return this.color; + } + + @Override + public ItemStack getStack() { + try { + final Class clss = Class.forName("extrabiomes.api.Stuff"); + final Block block = (Block) ((Optional) clss.getField("planks").get(null)).get(); + return new ItemStack(block, 1, this.ordinal()); + } catch (Exception e) { + return null; + } + } + + @Override + public IIcon getIcon() { + if (this.getStack() != null) { + final int meta = this.getStack().getItemDamage(); + final Block block = ((ItemBlock) this.getStack().getItem()).field_150939_a; + return block.getIcon(2, meta); + } + return null; + } + } +} diff --git a/src/main/java/binnie/extratrees/block/StairItemRenderer.java b/src/main/java/binnie/extratrees/block/StairItemRenderer.java new file mode 100644 index 00000000..3561048a --- /dev/null +++ b/src/main/java/binnie/extratrees/block/StairItemRenderer.java @@ -0,0 +1,98 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import net.minecraft.util.IIcon; +import net.minecraft.block.Block; +import org.lwjgl.opengl.GL11; +import net.minecraft.item.ItemBlock; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.item.ItemStack; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraftforge.client.IItemRenderer; + +public class StairItemRenderer implements IItemRenderer +{ + private void renderStairBlock(final RenderBlocks renderBlocks, final ItemStack item, final float f, final float g, final float h) { + final Tessellator tessellator = Tessellator.instance; + final Block block = ((ItemBlock) item.getItem()).field_150939_a; + final IIcon textureIndex = PlankType.ExtraTreePlanks.values()[item.getItemDamage()].getIcon(); + for (int i = 0; i < 2; ++i) { + if (i == 0) { + renderBlocks.setRenderBounds(0.0, 0.0, 0.0, 1.0, 1.0, 0.5); + } + if (i == 1) { + renderBlocks.setRenderBounds(0.0, 0.0, 0.5, 1.0, 0.5, 1.0); + } + GL11.glTranslatef(-0.5f, -0.5f, -0.5f); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0f, -1.0f, 0.0f); + renderBlocks.renderFaceYNeg(block, 0.0, 0.0, 0.0, textureIndex); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0f, 1.0f, 0.0f); + renderBlocks.renderFaceYPos(block, 0.0, 0.0, 0.0, textureIndex); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0f, 0.0f, -1.0f); + renderBlocks.renderFaceXNeg(block, 0.0, 0.0, 0.0, textureIndex); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0f, 0.0f, 1.0f); + renderBlocks.renderFaceXPos(block, 0.0, 0.0, 0.0, textureIndex); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(-1.0f, 0.0f, 0.0f); + renderBlocks.renderFaceZNeg(block, 0.0, 0.0, 0.0, textureIndex); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(1.0f, 0.0f, 0.0f); + renderBlocks.renderFaceZPos(block, 0.0, 0.0, 0.0, textureIndex); + tessellator.draw(); + GL11.glTranslatef(0.5f, 0.5f, 0.5f); + } + } + + @Override + public boolean handleRenderType(final ItemStack item, final IItemRenderer.ItemRenderType type) { + switch (type) { + case ENTITY: { + return true; + } + case EQUIPPED: { + return true; + } + case INVENTORY: { + return true; + } + default: { + return false; + } + } + } + + @Override + public boolean shouldUseRenderHelper(final IItemRenderer.ItemRenderType type, final ItemStack item, final IItemRenderer.ItemRendererHelper helper) { + return true; + } + + @Override + public void renderItem(final IItemRenderer.ItemRenderType type, final ItemStack item, final Object... data) { + switch (type) { + case ENTITY: { + this.renderStairBlock((RenderBlocks) data[0], item, -0.5f, -0.5f, -0.5f); + break; + } + case EQUIPPED: { + this.renderStairBlock((RenderBlocks) data[0], item, 0.0f, 0.0f, 0.0f); + break; + } + case INVENTORY: { + this.renderStairBlock((RenderBlocks) data[0], item, -0.5f, -0.5f, -0.5f); + break; + } + } + } +} diff --git a/src/main/java/binnie/extratrees/block/StairsRenderer.java b/src/main/java/binnie/extratrees/block/StairsRenderer.java new file mode 100644 index 00000000..d505048b --- /dev/null +++ b/src/main/java/binnie/extratrees/block/StairsRenderer.java @@ -0,0 +1,81 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import binnie.extratrees.ExtraTrees; +import net.minecraft.world.IBlockAccess; +import org.lwjgl.opengl.GL11; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.block.Block; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; + +public class StairsRenderer implements ISimpleBlockRenderingHandler +{ + @Override + public void renderInventoryBlock(final Block par1Block, final int metadata, final int modelID, final RenderBlocks renderer) { + final Tessellator var4 = Tessellator.instance; + for (int var5 = 0; var5 < 2; ++var5) { + if (var5 == 0) { + renderer.setRenderBounds(0.0, 0.0, 0.0, 1.0, 1.0, 0.5); + } + if (var5 == 1) { + renderer.setRenderBounds(0.0, 0.0, 0.5, 1.0, 0.5, 1.0); + } + GL11.glTranslatef(-0.5f, -0.5f, -0.5f); + var4.startDrawingQuads(); + var4.setNormal(0.0f, -1.0f, 0.0f); + renderer.renderFaceYNeg(par1Block, 0.0, 0.0, 0.0, par1Block.getIcon(0, metadata)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0f, 1.0f, 0.0f); + renderer.renderFaceYPos(par1Block, 0.0, 0.0, 0.0, par1Block.getIcon(1, metadata)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0f, 0.0f, -1.0f); + renderer.renderFaceXPos(par1Block, 0.0, 0.0, 0.0, par1Block.getIcon(2, metadata)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0f, 0.0f, 1.0f); + renderer.renderFaceXNeg(par1Block, 0.0, 0.0, 0.0, par1Block.getIcon(3, metadata)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(-1.0f, 0.0f, 0.0f); + renderer.renderFaceZNeg(par1Block, 0.0, 0.0, 0.0, par1Block.getIcon(4, metadata)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(1.0f, 0.0f, 0.0f); + renderer.renderFaceZPos(par1Block, 0.0, 0.0, 0.0, par1Block.getIcon(5, metadata)); + var4.draw(); + GL11.glTranslatef(0.5f, 0.5f, 0.5f); + } + } + + @Override + public boolean renderWorldBlock(final IBlockAccess world, final int par2, final int par3, final int par4, final Block block, final int modelId, final RenderBlocks renderer) { + final BlockETStairs blockStairs = (BlockETStairs) block; + blockStairs.func_150147_e(renderer.blockAccess, par2, par3, par4); + renderer.setRenderBoundsFromBlock(blockStairs); + renderer.renderStandardBlock(blockStairs, par2, par3, par4); + final boolean var5 = blockStairs.func_150145_f(renderer.blockAccess, par2, par3, par4); + renderer.setRenderBoundsFromBlock(blockStairs); + renderer.renderStandardBlock(blockStairs, par2, par3, par4); + if (var5 && blockStairs.func_150144_g(renderer.blockAccess, par2, par3, par4)) { + renderer.setRenderBoundsFromBlock(blockStairs); + renderer.renderStandardBlock(blockStairs, par2, par3, par4); + } + return true; + } + + @Override + public boolean shouldRender3DInInventory(final int i) { + return true; + } + + @Override + public int getRenderId() { + return ExtraTrees.stairsID; + } +} diff --git a/src/main/java/binnie/extratrees/block/WoodManager.java b/src/main/java/binnie/extratrees/block/WoodManager.java new file mode 100644 index 00000000..1085ac80 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/WoodManager.java @@ -0,0 +1,125 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block; + +import java.util.ArrayList; +import java.util.List; +import net.minecraft.init.Blocks; +import binnie.core.block.TileEntityMetadata; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import binnie.extratrees.ExtraTrees; +import binnie.extratrees.block.decor.FenceDescription; +import binnie.extratrees.block.decor.FenceType; +import net.minecraft.item.ItemStack; +import binnie.extratrees.api.IDesignMaterial; +import binnie.extratrees.api.CarpentryManager; + +public class WoodManager +{ + public static IPlankType getPlankType(final int index) { + final IDesignMaterial wood = CarpentryManager.carpentryInterface.getWoodMaterial(index); + if (wood instanceof IPlankType) { + return (IPlankType) wood; + } + return PlankType.ExtraTreePlanks.Fir; + } + + public static int getPlankTypeIndex(final IPlankType type) { + final int index = CarpentryManager.carpentryInterface.getCarpentryWoodIndex(type); + return (index < 0) ? 0 : index; + } + + public static FenceType getFenceType(final ItemStack stack) { + final FenceDescription desc = getFenceDescription(stack); + return (desc == null) ? null : desc.getFenceType(); + } + + public static FenceDescription getFenceDescription(final ItemStack stack) { + if (stack == null) { + return null; + } + if (stack.getItem() == Item.getItemFromBlock(ExtraTrees.blockMultiFence)) { + final int damage = TileEntityMetadata.getItemDamage(stack); + return getFenceDescription(damage); + } + for (final IPlankType type : getAllPlankTypes()) { + if (type instanceof IFenceProvider) { + final ItemStack f = ((IFenceProvider) type).getFence(); + if (f != null && ItemStack.areItemStacksEqual(stack, f)) { + return new FenceDescription(new FenceType(0), type, type); + } + continue; + } + } + return null; + } + + public static FenceDescription getFenceDescription(final int meta) { + return new FenceDescription(meta); + } + + public static FenceType getFenceType(final int meta) { + return getFenceDescription(meta).getFenceType(); + } + + public static ItemStack getGate(final IPlankType plank) { + if (plank == PlankType.VanillaPlanks.OAK) { + return new ItemStack(Blocks.fence_gate); + } + return TileEntityMetadata.getItemStack(ExtraTrees.blockGate, getPlankTypeIndex(plank)); + } + + public static ItemStack getFence(final IPlankType plank, final FenceType type, final int amount) { + return getFence(plank, plank, type, amount); + } + + public static ItemStack getFence(final IPlankType plank, final IPlankType plank2, final FenceType type, final int amount) { + if (plank instanceof IFenceProvider && plank == plank2 && type.isPlain()) { + final ItemStack original = ((IFenceProvider) plank).getFence(); + if (original != null) { + original.stackSize = amount; + return original; + } + } + final int ord = type.ordinal(); + final int i = getPlankTypeIndex(plank) + 256 * ord; + final ItemStack stack = TileEntityMetadata.getItemStack(ExtraTrees.blockMultiFence, i + 65536 * getPlankTypeIndex(plank2)); + stack.stackSize = amount; + return stack; + } + + public static ItemStack getDoor(final IPlankType plank, final DoorType type) { + return TileEntityMetadata.getItemStack(ExtraTrees.blockDoor, type.ordinal() * 256 + getPlankTypeIndex(plank)); + } + + public static List getAllPlankTypes() { + final List list = new ArrayList(); + for (final IPlankType type : PlankType.ExtraTreePlanks.values()) { + list.add(type); + } + for (final IPlankType type : PlankType.ForestryPlanks.values()) { + list.add(type); + } + for (final IPlankType type : PlankType.ExtraBiomesPlank.values()) { + if (type.getStack() != null) { + list.add(type); + } + } + for (final IPlankType type : PlankType.VanillaPlanks.values()) { + list.add(type); + } + return list; + } + + public static IPlankType get(final ItemStack species) { + for (final IPlankType type : getAllPlankTypes()) { + if (type.getStack() != null && type.getStack().isItemEqual(species)) { + return type; + } + } + return null; + } +} diff --git a/src/main/java/binnie/extratrees/block/decor/BlockFence.java b/src/main/java/binnie/extratrees/block/decor/BlockFence.java new file mode 100644 index 00000000..28a97d79 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/decor/BlockFence.java @@ -0,0 +1,189 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block.decor; + +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.init.Blocks; +import binnie.core.Mods; +import net.minecraft.item.ItemBlock; +import net.minecraft.block.Block; +import binnie.Binnie; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.entity.player.EntityPlayer; +import binnie.core.block.BlockMetadata; +import java.util.ArrayList; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import binnie.extratrees.ExtraTrees; +import binnie.extratrees.block.WoodManager; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.core.block.TileEntityMetadata; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import binnie.extratrees.block.IFenceProvider; +import binnie.extratrees.block.PlankType; +import java.util.List; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import forestry.api.core.Tabs; +import net.minecraft.block.material.Material; +import binnie.core.block.IBlockMetadata; + +public class BlockFence extends net.minecraft.block.BlockFence implements IBlockMetadata, IBlockFence +{ + public BlockFence() { + super("", Material.wood); + this.setCreativeTab(Tabs.tabArboriculture); + this.setBlockName("fence"); + this.setResistance(5.0f); + this.setHardness(2.0f); + this.setStepSound(Block.soundTypeWood); + } + + @Override + public void getSubBlocks(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + for (final IFenceProvider type : PlankType.ExtraTreePlanks.values()) { + itemList.add(type.getFence()); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final IBlockAccess world, final int x, final int y, final int z, final int side) { + final TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z); + if (tile != null) { + return this.getIcon(side, tile.getTileMetadata()); + } + return super.getIcon(world, x, y, z, side); + } + + public FenceDescription getDescription(final int meta) { + return WoodManager.getFenceDescription(meta); + } + + @Override + public IIcon getIcon(final int side, final int meta) { + return this.getDescription(meta).getPlankType().getIcon(); + } + + @Override + public int getRenderType() { + return ExtraTrees.fenceID; + } + + @Override + public void dropAsStack(final World world, final int x, final int y, final int z, final ItemStack drop) { + this.dropBlockAsItem(world, x, y, z, drop); + } + + @Override + public ArrayList getDrops(final World world, final int x, final int y, final int z, final int blockMeta, final int fortune) { + return BlockMetadata.getBlockDropped(this, world, x, y, z, blockMeta); + } + + @Override + public boolean removedByPlayer(final World world, final EntityPlayer player, final int x, final int y, final int z) { + return BlockMetadata.breakBlock(this, player, world, x, y, z); + } + + @Override + public TileEntity createNewTileEntity(final World var1, final int i) { + return new TileEntityMetadata(); + } + + @Override + public boolean hasTileEntity(final int meta) { + return true; + } + + @Override + public boolean onBlockEventReceived(final World par1World, final int par2, final int par3, final int par4, final int par5, final int par6) { + super.onBlockEventReceived(par1World, par2, par3, par4, par5, par6); + final TileEntity tileentity = par1World.getTileEntity(par2, par3, par4); + return tileentity != null && tileentity.receiveClientEvent(par5, par6); + } + + @Override + public int getPlacedMeta(final ItemStack stack, final World world, final int x, final int y, final int z, final ForgeDirection clickedBlock) { + return TileEntityMetadata.getItemDamage(stack); + } + + @Override + public int getDroppedMeta(final int blockMeta, final int tileMeta) { + return tileMeta; + } + + @Override + public String getBlockName(final ItemStack par1ItemStack) { + final int meta = TileEntityMetadata.getItemDamage(par1ItemStack); + return Binnie.Language.localise(ExtraTrees.instance, "block.woodfence.name", this.getDescription(meta).getPlankType().getName()); + } + + @Override + public void getBlockTooltip(final ItemStack par1ItemStack, final List par3List) { + } + + @Override + public boolean canPlaceTorchOnTop(final World world, final int x, final int y, final int z) { + return true; + } + + @Override + public boolean canConnectFenceTo(final IBlockAccess world, final int x, final int y, final int z) { + if (!this.isFence(world, x, y, z)) { + final Block block = world.getBlock(x, y, z); + return block != null && block.getMaterial().isOpaque() && block.renderAsNormalBlock(); + } + return true; + } + + public boolean isFence(final IBlockAccess world, final int x, final int y, final int z) { + final Block block = world.getBlock(x, y, z); + return canConnect(block); + } + + public static boolean canConnect(final Block block) { + return block == ((ItemBlock) Mods.Forestry.item("fences")).field_150939_a || block == Blocks.fence || block == Blocks.fence_gate || block == Blocks.nether_brick_fence || block instanceof IBlockFence || block == ExtraTrees.blockGate; + } + + @Override + public void breakBlock(final World par1World, final int par2, final int par3, final int par4, final Block par5, final int par6) { + super.breakBlock(par1World, par2, par3, par4, par5, par6); + par1World.removeTileEntity(par2, par3, par4); + } + + @Override + public boolean isWood(final IBlockAccess world, final int x, final int y, final int z) { + return true; + } + + @Override + public int getFlammability(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return 20; + } + + @Override + public boolean isFlammable(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return true; + } + + @Override + public int getFireSpreadSpeed(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return 5; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister p_149651_1_) { + } + + @Override + public ItemStack getPickBlock(final MovingObjectPosition target, final World world, final int x, final int y, final int z) { + return BlockMetadata.getPickBlock(world, x, y, z); + } +} diff --git a/src/main/java/binnie/extratrees/block/decor/BlockGate.java b/src/main/java/binnie/extratrees/block/decor/BlockGate.java new file mode 100644 index 00000000..dd19f3a4 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/decor/BlockGate.java @@ -0,0 +1,153 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block.decor; + +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.block.Block; +import binnie.extratrees.ExtraTrees; +import binnie.Binnie; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.entity.player.EntityPlayer; +import binnie.core.block.BlockMetadata; +import java.util.ArrayList; +import net.minecraft.world.World; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.core.block.TileEntityMetadata; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.item.ItemStack; +import binnie.extratrees.block.IPlankType; +import binnie.extratrees.block.WoodManager; +import java.util.List; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import forestry.api.core.Tabs; +import binnie.core.block.IBlockMetadata; +import net.minecraft.block.BlockFenceGate; + +public class BlockGate extends BlockFenceGate implements IBlockMetadata +{ + public BlockGate() { + this.setCreativeTab(Tabs.tabArboriculture); + this.setResistance(5.0f); + this.setHardness(2.0f); + this.setStepSound(Block.soundTypeWood); + } + + @Override + public void getSubBlocks(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + for (final IPlankType type : WoodManager.getAllPlankTypes()) { + final ItemStack gate = WoodManager.getGate(type); + if (gate != null) { + itemList.add(gate); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final IBlockAccess world, final int x, final int y, final int z, final int side) { + final TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z); + if (tile != null) { + return this.getIcon(side, tile.getTileMetadata()); + } + return super.getIcon(world, x, y, z, side); + } + + @Override + public IIcon getIcon(final int side, final int meta) { + return WoodManager.getPlankType(meta).getIcon(); + } + + @Override + public void dropAsStack(final World world, final int x, final int y, final int z, final ItemStack drop) { + this.dropBlockAsItem(world, x, y, z, drop); + } + + @Override + public ArrayList getDrops(final World world, final int x, final int y, final int z, final int blockMeta, final int fortune) { + return BlockMetadata.getBlockDropped(this, world, x, y, z, blockMeta); + } + + @Override + public boolean removedByPlayer(final World world, final EntityPlayer player, final int x, final int y, final int z) { + return BlockMetadata.breakBlock(this, player, world, x, y, z); + } + + @Override + public TileEntity createNewTileEntity(final World var1, final int i) { + return new TileEntityMetadata(); + } + + @Override + public boolean hasTileEntity(final int meta) { + return true; + } + + @Override + public boolean onBlockEventReceived(final World par1World, final int par2, final int par3, final int par4, final int par5, final int par6) { + super.onBlockEventReceived(par1World, par2, par3, par4, par5, par6); + final TileEntity tileentity = par1World.getTileEntity(par2, par3, par4); + return tileentity != null && tileentity.receiveClientEvent(par5, par6); + } + + @Override + public int getPlacedMeta(final ItemStack stack, final World world, final int x, final int y, final int z, final ForgeDirection clickedBlock) { + return TileEntityMetadata.getItemDamage(stack); + } + + @Override + public int getDroppedMeta(final int blockMeta, final int tileMeta) { + return tileMeta; + } + + @Override + public String getBlockName(final ItemStack par1ItemStack) { + final int meta = TileEntityMetadata.getItemDamage(par1ItemStack); + return Binnie.Language.localise(ExtraTrees.instance, "block.woodgate.name", WoodManager.getPlankType(meta).getName()); + } + + @Override + public void getBlockTooltip(final ItemStack par1ItemStack, final List par3List) { + } + + @Override + public void breakBlock(final World par1World, final int par2, final int par3, final int par4, final Block par5, final int par6) { + super.breakBlock(par1World, par2, par3, par4, par5, par6); + par1World.removeTileEntity(par2, par3, par4); + } + + @Override + public boolean isWood(final IBlockAccess world, final int x, final int y, final int z) { + return true; + } + + @Override + public int getFlammability(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return 20; + } + + @Override + public boolean isFlammable(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return true; + } + + @Override + public int getFireSpreadSpeed(final IBlockAccess world, final int x, final int y, final int z, final ForgeDirection face) { + return 5; + } + + @Override + public ItemStack getPickBlock(final MovingObjectPosition target, final World world, final int x, final int y, final int z) { + return BlockMetadata.getPickBlock(world, x, y, z); + } + + @Override + public boolean getBlocksMovement(final IBlockAccess p_149655_1_, final int p_149655_2_, final int p_149655_3_, final int p_149655_4_) { + return false; + } +} diff --git a/src/main/java/binnie/extratrees/block/decor/BlockHedge.java b/src/main/java/binnie/extratrees/block/decor/BlockHedge.java new file mode 100644 index 00000000..7826ab50 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/decor/BlockHedge.java @@ -0,0 +1,182 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block.decor; + +import net.minecraft.world.ColorizerFoliage; +import net.minecraft.item.ItemStack; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import forestry.api.core.ForestryAPI; +import net.minecraft.util.IIcon; +import binnie.extratrees.genetics.ExtraTreeSpecies; +import net.minecraft.client.renderer.texture.IIconRegister; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.init.Blocks; +import binnie.extratrees.block.ModuleBlocks; +import net.minecraft.world.IBlockAccess; +import net.minecraft.entity.Entity; +import java.util.List; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; +import forestry.api.core.Tabs; +import net.minecraft.block.material.Material; +import net.minecraft.block.Block; + +public class BlockHedge extends Block implements IBlockFence +{ + public BlockHedge() { + super(Material.leaves); + this.setCreativeTab(Tabs.tabArboriculture); + this.setBlockName("hedge"); + } + + @Override + public void addCollisionBoxesToList(final World world, final int x, final int y, final int z, final AxisAlignedBB aabb, final List list, final Entity p_149743_7_) { + final boolean connectNegZ = this.canConnectFenceTo(world, x, y, z - 1); + final boolean connectPosZ = this.canConnectFenceTo(world, x, y, z + 1); + final boolean connectNegX = this.canConnectFenceTo(world, x - 1, y, z); + final boolean connectPosX = this.canConnectFenceTo(world, x + 1, y, z); + float f = 0.25f; + float f2 = 0.75f; + float f3 = 0.25f; + float f4 = 0.75f; + if (connectNegZ) { + f3 = 0.0f; + } + if (connectPosZ) { + f4 = 1.0f; + } + if (connectNegZ || connectPosZ) { + this.setBlockBounds(f, 0.0f, f3, f2, 1.5f, f4); + super.addCollisionBoxesToList(world, x, y, z, aabb, list, p_149743_7_); + } + f3 = 0.25f; + f4 = 0.75f; + if (connectNegX) { + f = 0.0f; + } + if (connectPosX) { + f2 = 1.0f; + } + if (connectNegX || connectPosX || (!connectNegZ && !connectPosZ)) { + this.setBlockBounds(f, 0.0f, f3, f2, 1.5f, f4); + super.addCollisionBoxesToList(world, x, y, z, aabb, list, p_149743_7_); + } + if (connectNegZ) { + f3 = 0.0f; + } + if (connectPosZ) { + f4 = 1.0f; + } + this.setBlockBounds(f, 0.0f, f3, f2, 1.0f, f4); + } + + @Override + public void setBlockBoundsBasedOnState(final IBlockAccess world, final int x, final int y, final int z) { + final boolean connectNegZ = this.canConnectFenceTo(world, x, y, z - 1); + final boolean connectPosZ = this.canConnectFenceTo(world, x, y, z + 1); + final boolean connectNegX = this.canConnectFenceTo(world, x - 1, y, z); + final boolean connectPosX = this.canConnectFenceTo(world, x + 1, y, z); + float f = 0.25f; + float f2 = 0.75f; + float f3 = 0.25f; + float f4 = 0.75f; + if (connectNegZ) { + f3 = 0.0f; + } + if (connectPosZ) { + f4 = 1.0f; + } + if (connectNegX) { + f = 0.0f; + } + if (connectPosX) { + f2 = 1.0f; + } + this.setBlockBounds(f, 0.0f, f3, f2, 1.0f, f4); + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public boolean getBlocksMovement(final IBlockAccess p_149655_1_, final int p_149655_2_, final int p_149655_3_, final int p_149655_4_) { + return false; + } + + @Override + public int getRenderType() { + return ModuleBlocks.hedgeRenderID; + } + + public boolean canConnectFenceTo(final IBlockAccess p_149826_1_, final int p_149826_2_, final int p_149826_3_, final int p_149826_4_) { + final Block block = p_149826_1_.getBlock(p_149826_2_, p_149826_3_, p_149826_4_); + return block == this || block == Blocks.fence_gate || func_149825_a(block) || block.isLeaves(p_149826_1_, p_149826_2_, p_149826_3_, p_149826_4_) || (block.getMaterial().isOpaque() && block.renderAsNormalBlock() && block.getMaterial() != Material.gourd); + } + + public static boolean func_149825_a(final Block p_149825_0_) { + return BlockFence.canConnect(p_149825_0_); + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(final IBlockAccess p_149646_1_, final int p_149646_2_, final int p_149646_3_, final int p_149646_4_, final int p_149646_5_) { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister p_149651_1_) { + } + + private ExtraTreeSpecies.LeafType getType(final int meta) { + return ExtraTreeSpecies.LeafType.values()[meta % 8]; + } + + private boolean isFull(final int meta) { + return meta / 8 > 0; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final int p_149691_1_, final int meta) { + final ExtraTreeSpecies.LeafType type = this.getType(meta); + return ForestryAPI.textureManager.getIcon(this.isFull(meta) ? type.plainUID : type.fancyUID); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(final Item item, final CreativeTabs tab, final List list) { + for (int i = 0; i < 6; ++i) { + for (int f = 0; f < 2; ++f) { + list.add(new ItemStack(item, 1, i + f * 8)); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public int colorMultiplier(final IBlockAccess world, final int x, final int y, final int z) { + return getColor(world.getBlockMetadata(x, y, z)); + } + + public static int getColor(final int meta) { + final ExtraTreeSpecies.LeafType type = ExtraTreeSpecies.LeafType.values()[meta % 6]; + if (type == ExtraTreeSpecies.LeafType.Conifer) { + return ColorizerFoliage.getFoliageColorPine(); + } + final double d0 = 0.5; + final double d2 = 1.0; + return ColorizerFoliage.getFoliageColor(d0, d2); + } +} diff --git a/src/main/java/binnie/extratrees/block/decor/BlockMultiFence.java b/src/main/java/binnie/extratrees/block/decor/BlockMultiFence.java new file mode 100644 index 00000000..3290e0be --- /dev/null +++ b/src/main/java/binnie/extratrees/block/decor/BlockMultiFence.java @@ -0,0 +1,47 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block.decor; + +import binnie.extratrees.ExtraTrees; +import binnie.Binnie; +import binnie.core.block.TileEntityMetadata; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import binnie.extratrees.block.IPlankType; +import binnie.extratrees.block.WoodManager; +import binnie.extratrees.block.PlankType; +import java.util.List; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import binnie.core.block.IBlockMetadata; + +public class BlockMultiFence extends BlockFence implements IBlockMetadata +{ + public BlockMultiFence() { + this.setBlockName("multifence"); + } + + @Override + public void getSubBlocks(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + for (final FenceType type : FenceType.values()) { + itemList.add(WoodManager.getFence(PlankType.VanillaPlanks.SPRUCE, PlankType.VanillaPlanks.BIRCH, type, 1)); + } + } + + @Override + public IIcon getIcon(final int side, final int meta) { + return (FenceRenderer.layer == 0) ? this.getDescription(meta).getPlankType().getIcon() : this.getDescription(meta).getSecondaryPlankType().getIcon(); + } + + @Override + public String getBlockName(final ItemStack par1ItemStack) { + final int meta = TileEntityMetadata.getItemDamage(par1ItemStack); + final IPlankType type1 = this.getDescription(meta).getPlankType(); + final IPlankType type2 = this.getDescription(meta).getSecondaryPlankType(); + final boolean twoTypes = type1 != type2; + final FenceType type3 = this.getDescription(meta).getFenceType(); + return Binnie.Language.localise(ExtraTrees.instance, "block.woodslab.name" + (twoTypes ? "2" : ""), type3.getPrefix(), type1.getName(), type2.getName()); + } +} diff --git a/src/main/java/binnie/extratrees/block/decor/FenceDescription.java b/src/main/java/binnie/extratrees/block/decor/FenceDescription.java new file mode 100644 index 00000000..c4c39c04 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/decor/FenceDescription.java @@ -0,0 +1,39 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block.decor; + +import binnie.extratrees.block.WoodManager; +import binnie.extratrees.block.IPlankType; + +public class FenceDescription +{ + FenceType fenceType; + IPlankType plankType; + IPlankType secondaryPlankType; + + public FenceDescription(final FenceType fenceType, final IPlankType plankType, final IPlankType secondaryPlankType) { + this.fenceType = fenceType; + this.plankType = plankType; + this.secondaryPlankType = secondaryPlankType; + } + + public FenceDescription(final int meta) { + this.fenceType = new FenceType(meta >> 8 & 0xFF); + this.plankType = WoodManager.getPlankType(meta & 0xFF); + this.secondaryPlankType = WoodManager.getPlankType(meta >> 16 & 0xFF); + } + + public FenceType getFenceType() { + return this.fenceType; + } + + public IPlankType getPlankType() { + return this.plankType; + } + + public IPlankType getSecondaryPlankType() { + return this.secondaryPlankType; + } +} diff --git a/src/main/java/binnie/extratrees/block/decor/FenceRenderer.java b/src/main/java/binnie/extratrees/block/decor/FenceRenderer.java new file mode 100644 index 00000000..cced1b80 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/decor/FenceRenderer.java @@ -0,0 +1,280 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block.decor; + +import net.minecraft.tileentity.TileEntity; +import binnie.core.block.TileEntityMetadata; +import net.minecraft.world.IBlockAccess; +import org.lwjgl.opengl.GL11; +import binnie.extratrees.block.WoodManager; +import binnie.extratrees.ExtraTrees; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.block.Block; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; + +public class FenceRenderer implements ISimpleBlockRenderingHandler +{ + public static int layer; + + @Override + public void renderInventoryBlock(final Block block, final int metadata, final int modelID, final RenderBlocks renderer) { + final Tessellator tess = Tessellator.instance; + for (int i = 0; i < 5; ++i) { + final float thickness = 0.125f; + FenceRenderer.layer = 0; + if (i == 0) { + block.setBlockBounds(0.5f - thickness, 0.0f, 0.0f, 0.5f + thickness, 1.0f, thickness * 2.0f); + } + if (i == 1) { + block.setBlockBounds(0.5f - thickness, 0.0f, 1.0f - thickness * 2.0f, 0.5f + thickness, 1.0f, 1.0f); + } + final float s = 0.0625f; + final FenceType fenceType = (block == ExtraTrees.blockMultiFence) ? WoodManager.getFenceType(metadata) : new FenceType(0); + final boolean bottomBar = !fenceType.solid; + float topBarMaxY = 1.0f - s; + float topBarMinY = 1.0f - s * 3.0f; + float bottomBarMaxY = 0.5f - s; + float bottomBarMinY = 0.5f - s * 3.0f; + if (fenceType.size == 2) { + bottomBarMinY -= 4.0f * s; + bottomBarMaxY -= 4.0f * s; + topBarMinY -= 4.0f * s; + topBarMaxY -= 4.0f * s; + } + if (fenceType.size == 1) { + bottomBarMinY -= 4.0f * s; + bottomBarMaxY -= 4.0f * s; + } + if (fenceType.solid) { + topBarMinY = bottomBarMinY; + } + float minX = 0.5f - s; + float maxX = 0.5f + s; + float minZ = -s * 2.0f; + float maxZ = 1.0f + s * 2.0f; + if (i == 2) { + block.setBlockBounds(minX, topBarMinY, minZ, maxX, topBarMaxY, maxZ); + FenceRenderer.layer = 1; + } + if (i == 3) { + if (!bottomBar) { + continue; + } + block.setBlockBounds(minX, bottomBarMinY, minZ, maxX, bottomBarMaxY, maxZ); + FenceRenderer.layer = 1; + } + if (i == 4) { + if (fenceType.embossed) { + minX -= s * 0.9f; + maxX += s * 0.9f; + minZ -= s; + maxZ += s; + float minY = 0.0f; + float maxY = 1.0f; + if (fenceType.size != 1 && !fenceType.solid) { + minY = bottomBarMinY + 2.0f * s; + maxY = topBarMaxY - 2.0f * s; + } + else if (fenceType.size == 1 && fenceType.solid) { + minY = bottomBarMinY + 2.0f * s; + maxY = topBarMaxY - 2.0f * s; + } + else { + minY = 0.5f - 2.0f * s; + maxY = 0.5f + 2.0f * s; + } + if (fenceType.solid && fenceType.size == 0) { + minY -= s; + maxY -= s; + } + if (fenceType.solid && fenceType.size == 2) { + minY += s; + maxY += s; + } + block.setBlockBounds(minX, minY, minZ, maxX, maxY, maxZ); + FenceRenderer.layer = 0; + } + else { + if (fenceType.size != 1 || fenceType.solid) { + continue; + } + block.setBlockBounds(minX, 0.5f - s, minZ, maxX, 0.5f + s, maxZ); + FenceRenderer.layer = 1; + } + } + renderer.setRenderBoundsFromBlock(block); + GL11.glTranslatef(-0.5f, -0.5f, -0.5f); + tess.startDrawingQuads(); + tess.setNormal(0.0f, -1.0f, 0.0f); + renderer.renderFaceYNeg(block, 0.0, 0.0, 0.0, block.getIcon(0, metadata)); + tess.draw(); + tess.startDrawingQuads(); + tess.setNormal(0.0f, 1.0f, 0.0f); + renderer.renderFaceYPos(block, 0.0, 0.0, 0.0, block.getIcon(1, metadata)); + tess.draw(); + tess.startDrawingQuads(); + tess.setNormal(0.0f, 0.0f, -1.0f); + renderer.renderFaceXPos(block, 0.0, 0.0, 0.0, block.getIcon(2, metadata)); + tess.draw(); + tess.startDrawingQuads(); + tess.setNormal(0.0f, 0.0f, 1.0f); + renderer.renderFaceXNeg(block, 0.0, 0.0, 0.0, block.getIcon(3, metadata)); + tess.draw(); + tess.startDrawingQuads(); + tess.setNormal(-1.0f, 0.0f, 0.0f); + renderer.renderFaceZNeg(block, 0.0, 0.0, 0.0, block.getIcon(4, metadata)); + tess.draw(); + tess.startDrawingQuads(); + tess.setNormal(1.0f, 0.0f, 0.0f); + renderer.renderFaceZPos(block, 0.0, 0.0, 0.0, block.getIcon(5, metadata)); + tess.draw(); + GL11.glTranslatef(0.5f, 0.5f, 0.5f); + } + block.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); + renderer.setRenderBoundsFromBlock(block); + } + + @Override + public boolean renderWorldBlock(final IBlockAccess world, final int par2, final int par3, final int par4, final Block block, final int modelId, final RenderBlocks renderer) { + FenceRenderer.layer = 0; + final BlockFence blockFence = (BlockFence) block; + final float i = 0.0625f; + FenceType fenceType = new FenceType(0); + final TileEntity tile = world.getTileEntity(par2, par3, par4); + if (tile != null && tile instanceof TileEntityMetadata && block instanceof BlockMultiFence) { + fenceType = WoodManager.getFenceType(((TileEntityMetadata) tile).getTileMetadata()); + } + boolean rendered = false; + final float postWidth = 0.25f; + final float postHeight = 1.0f; + float minPostPos = 0.5f - postWidth / 2.0f; + float maxPostPos = 0.5f + postWidth / 2.0f; + renderer.setRenderBounds(minPostPos, 0.0, minPostPos, maxPostPos, postHeight, maxPostPos); + renderer.renderStandardBlock(block, par2, par3, par4); + rendered = true; + boolean connectAnyX = false; + boolean connectAnyZ = false; + if (blockFence.canConnectFenceTo(renderer.blockAccess, par2 - 1, par3, par4) || blockFence.canConnectFenceTo(renderer.blockAccess, par2 + 1, par3, par4)) { + connectAnyX = true; + } + if (blockFence.canConnectFenceTo(renderer.blockAccess, par2, par3, par4 - 1) || blockFence.canConnectFenceTo(renderer.blockAccess, par2, par3, par4 + 1)) { + connectAnyZ = true; + } + final boolean connectNegX = blockFence.canConnectFenceTo(renderer.blockAccess, par2 - 1, par3, par4); + final boolean connectPosX = blockFence.canConnectFenceTo(renderer.blockAccess, par2 + 1, par3, par4); + final boolean connectNegZ = blockFence.canConnectFenceTo(renderer.blockAccess, par2, par3, par4 - 1); + final boolean connectPosZ = blockFence.canConnectFenceTo(renderer.blockAccess, par2, par3, par4 + 1); + if (!connectAnyX && !connectAnyZ) { + connectAnyX = true; + } + minPostPos = 7.0f * i; + maxPostPos = 9.0f * i; + float barMinY = 12.0f * i; + float barMaxY = 15.0f * i; + final float minX = connectNegX ? 0.0f : minPostPos; + final float maxX = connectPosX ? 1.0f : maxPostPos; + final float minZ = connectNegZ ? 0.0f : minPostPos; + final float maxZ = connectPosZ ? 1.0f : maxPostPos; + boolean renderBottom = true; + if (fenceType.size == 2) { + barMaxY -= 5.0f * i; + barMinY -= 5.0f * i; + } + if (fenceType.solid) { + renderBottom = false; + if (fenceType.size == 0) { + barMinY = 6.0f * i; + } + else { + barMinY = i; + } + } + final float totalMaxY = barMaxY; + FenceRenderer.layer = 1; + if (connectAnyX) { + renderer.setRenderBounds(minX, barMinY, minPostPos, maxX, barMaxY, maxPostPos); + renderer.renderStandardBlock(blockFence, par2, par3, par4); + rendered = true; + } + if (connectAnyZ) { + renderer.setRenderBounds(minPostPos, barMinY, minZ, maxPostPos, barMaxY, maxZ); + renderer.renderStandardBlock(blockFence, par2, par3, par4); + rendered = true; + } + if (renderBottom) { + barMinY -= 6.0f * i; + barMaxY -= 6.0f * i; + if (fenceType.size == 1) { + barMinY += i; + } + if (connectAnyX) { + renderer.setRenderBounds(minX, barMinY, minPostPos, maxX, barMaxY, maxPostPos); + renderer.renderStandardBlock(blockFence, par2, par3, par4); + rendered = true; + } + if (connectAnyZ) { + renderer.setRenderBounds(minPostPos, barMinY, minZ, maxPostPos, barMaxY, maxZ); + renderer.renderStandardBlock(blockFence, par2, par3, par4); + rendered = true; + } + } + if (renderBottom && fenceType.size == 1) { + barMinY -= 6.0f * i; + barMaxY -= 6.0f * i; + barMaxY += i; + if (connectAnyX) { + renderer.setRenderBounds(minX, barMinY, minPostPos, maxX, barMaxY, maxPostPos); + renderer.renderStandardBlock(blockFence, par2, par3, par4); + rendered = true; + } + if (connectAnyZ) { + renderer.setRenderBounds(minPostPos, barMinY, minZ, maxPostPos, barMaxY, maxZ); + renderer.renderStandardBlock(blockFence, par2, par3, par4); + rendered = true; + } + } + final float totalMinY = barMinY; + FenceRenderer.layer = 0; + if (fenceType.embossed) { + minPostPos -= (float) (i - 0.25 * i); + maxPostPos += (float) (i - 0.25 * i); + float minY = totalMinY + 2.0f * i; + float maxY = totalMaxY - 2.0f * i; + if (fenceType.size == 1 && !fenceType.solid) { + minY = 6.0f * i; + maxY = 10.0f * i; + } + else if (fenceType.size == 0 && fenceType.solid) { + minY -= 4.0f * i; + maxY -= 4.0f * i; + } + else if (fenceType.size == 2 && fenceType.solid) { + minY += 4.0f * i; + maxY += 4.0f * i; + } + if (connectAnyX) { + renderer.setRenderBounds(minX, minY, minPostPos, maxX, maxY, maxPostPos); + renderer.renderStandardBlock(block, par2, par3, par4); + } + if (connectAnyZ) { + renderer.setRenderBounds(minPostPos, minY, minZ, maxPostPos, maxY, maxZ); + renderer.renderStandardBlock(block, par2, par3, par4); + } + } + blockFence.setBlockBoundsBasedOnState(renderer.blockAccess, par2, par3, par4); + return rendered; + } + + @Override + public boolean shouldRender3DInInventory(final int i) { + return true; + } + + @Override + public int getRenderId() { + return ExtraTrees.fenceID; + } +} diff --git a/src/main/java/binnie/extratrees/block/decor/FenceType.java b/src/main/java/binnie/extratrees/block/decor/FenceType.java new file mode 100644 index 00000000..d27606b5 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/decor/FenceType.java @@ -0,0 +1,61 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block.decor; + +import java.util.List; +import java.util.ArrayList; +import java.util.Collection; + +public class FenceType +{ + public int size; + public boolean solid; + public boolean embossed; + + public FenceType(final int size, final boolean solid, final boolean embedded) { + this.size = size; + this.solid = solid; + this.embossed = embedded; + } + + public String getPrefix() { + return ((this.size == 0) ? "" : ((this.size == 1) ? "Full " : "Low ")) + (this.solid ? "Solid " : "") + (this.embossed ? "Embedded " : ""); + } + + public int ordinal() { + return this.size + ((this.solid ? 1 : 0) << 2) + ((this.embossed ? 1 : 0) << 3); + } + + public FenceType(final int meta) { + this.size = (meta & 0x3); + this.solid = ((meta >> 2 & 0x1) > 0); + this.embossed = ((meta >> 3 & 0x1) > 0); + } + + public static Collection values() { + final List list = new ArrayList(); + for (int size = 0; size < 3; ++size) { + for (final boolean solid : new boolean[] { false, true }) { + for (final boolean embedded : new boolean[] { false, true }) { + list.add(new FenceType(size, solid, embedded)); + } + } + } + return list; + } + + public boolean isPlain() { + return this.size == 0 && !this.embossed && !this.solid; + } + + @Override + public boolean equals(final Object obj) { + if (obj instanceof FenceType) { + final FenceType o = (FenceType) obj; + return o.size == this.size && o.embossed == this.embossed && o.solid == this.solid; + } + return super.equals(obj); + } +} diff --git a/src/main/java/binnie/extratrees/block/decor/HedgeRenderer.java b/src/main/java/binnie/extratrees/block/decor/HedgeRenderer.java new file mode 100644 index 00000000..13fde6bf --- /dev/null +++ b/src/main/java/binnie/extratrees/block/decor/HedgeRenderer.java @@ -0,0 +1,126 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block.decor; + +import binnie.extratrees.block.ModuleBlocks; +import net.minecraft.util.IIcon; +import binnie.extratrees.ExtraTrees; +import net.minecraft.world.IBlockAccess; +import net.minecraft.client.renderer.Tessellator; +import org.lwjgl.opengl.GL11; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.block.Block; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; + +public class HedgeRenderer implements ISimpleBlockRenderingHandler +{ + @Override + public void renderInventoryBlock(final Block block, final int metadata, final int modelId, final RenderBlocks renderer) { + final int color = BlockHedge.getColor(metadata); + final int r = color >> 16 & 0xFF; + final int g = color >> 8 & 0xFF; + final int b = color & 0xFF; + GL11.glColor3f(r / 255.0f, g / 255.0f, b / 255.0f); + renderer.setRenderBounds(0.25, 0.0, 0.25, 0.75, 1.0, 0.75); + final Tessellator tess = Tessellator.instance; + GL11.glTranslatef(-0.5f, -0.5f, -0.5f); + tess.startDrawingQuads(); + tess.setNormal(0.0f, -1.0f, 0.0f); + renderer.renderFaceYNeg(block, 0.0, 0.0, 0.0, block.getIcon(0, metadata)); + tess.draw(); + tess.startDrawingQuads(); + tess.setNormal(0.0f, 1.0f, 0.0f); + renderer.renderFaceYPos(block, 0.0, 0.0, 0.0, block.getIcon(1, metadata)); + tess.draw(); + tess.startDrawingQuads(); + tess.setNormal(0.0f, 0.0f, -1.0f); + renderer.renderFaceXPos(block, 0.0, 0.0, 0.0, block.getIcon(2, metadata)); + tess.draw(); + tess.startDrawingQuads(); + tess.setNormal(0.0f, 0.0f, 1.0f); + renderer.renderFaceXNeg(block, 0.0, 0.0, 0.0, block.getIcon(3, metadata)); + tess.draw(); + tess.startDrawingQuads(); + tess.setNormal(-1.0f, 0.0f, 0.0f); + renderer.renderFaceZNeg(block, 0.0, 0.0, 0.0, block.getIcon(4, metadata)); + tess.draw(); + tess.startDrawingQuads(); + tess.setNormal(1.0f, 0.0f, 0.0f); + renderer.renderFaceZPos(block, 0.0, 0.0, 0.0, block.getIcon(5, metadata)); + tess.draw(); + GL11.glTranslatef(0.5f, 0.5f, 0.5f); + } + + @Override + public boolean renderWorldBlock(final IBlockAccess world, final int x, final int y, final int z, final Block block, final int modelId, final RenderBlocks renderer) { + final IIcon icon = block.getIcon(0, world.getBlockMetadata(x, y, z)); + final BlockHedge hedge = ExtraTrees.blockHedge; + final boolean connectNegX = hedge.canConnectFenceTo(world, x - 1, y, z); + final boolean connectPosX = hedge.canConnectFenceTo(world, x + 1, y, z); + final boolean connectNegZ = hedge.canConnectFenceTo(world, x, y, z - 1); + final boolean connectPosZ = hedge.canConnectFenceTo(world, x, y, z + 1); + GL11.glPushMatrix(); + renderer.setRenderBounds(0.25, 0.0, 0.25, 0.75, 1.0, 0.75); + renderer.renderStandardBlock(block, x, y, z); + renderer.renderFaceYPos(block, x, y, z, icon); + renderer.renderFaceYNeg(block, x, y, z, icon); + if (!connectNegX) { + renderer.renderFaceXNeg(block, x, y, z, icon); + } + if (!connectPosX) { + renderer.renderFaceXPos(block, x, y, z, icon); + } + if (!connectNegZ) { + renderer.renderFaceZNeg(block, x, y, z, icon); + } + if (!connectPosZ) { + renderer.renderFaceZPos(block, x, y, z, icon); + } + if (connectNegX) { + renderer.setRenderBounds(0.0, 0.0, 0.25, 0.25, 1.0, 0.75); + renderer.renderFaceYPos(block, x, y, z, icon); + renderer.renderFaceYNeg(block, x, y, z, icon); + renderer.renderFaceXNeg(block, x, y, z, icon); + renderer.renderFaceZNeg(block, x, y, z, icon); + renderer.renderFaceZPos(block, x, y, z, icon); + } + if (connectPosX) { + renderer.setRenderBounds(0.75, 0.0, 0.25, 1.0, 1.0, 0.75); + renderer.renderFaceYPos(block, x, y, z, icon); + renderer.renderFaceYNeg(block, x, y, z, icon); + renderer.renderFaceXPos(block, x, y, z, icon); + renderer.renderFaceZNeg(block, x, y, z, icon); + renderer.renderFaceZPos(block, x, y, z, icon); + } + if (connectPosZ) { + renderer.setRenderBounds(0.25, 0.0, 0.75, 0.75, 1.0, 1.0); + renderer.renderFaceYPos(block, x, y, z, icon); + renderer.renderFaceYNeg(block, x, y, z, icon); + renderer.renderFaceZPos(block, x, y, z, icon); + renderer.renderFaceXNeg(block, x, y, z, icon); + renderer.renderFaceXPos(block, x, y, z, icon); + } + if (connectNegZ) { + renderer.setRenderBounds(0.25, 0.0, 0.0, 0.75, 1.0, 0.25); + renderer.renderFaceYPos(block, x, y, z, icon); + renderer.renderFaceYNeg(block, x, y, z, icon); + renderer.renderFaceZNeg(block, x, y, z, icon); + renderer.renderFaceXNeg(block, x, y, z, icon); + renderer.renderFaceXPos(block, x, y, z, icon); + } + GL11.glPopMatrix(); + return false; + } + + @Override + public boolean shouldRender3DInInventory(final int modelId) { + return true; + } + + @Override + public int getRenderId() { + return ModuleBlocks.hedgeRenderID; + } +} diff --git a/src/main/java/binnie/extratrees/block/decor/IBlockFence.java b/src/main/java/binnie/extratrees/block/decor/IBlockFence.java new file mode 100644 index 00000000..585f1098 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/decor/IBlockFence.java @@ -0,0 +1,9 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block.decor; + +public interface IBlockFence +{ +} diff --git a/src/main/java/binnie/extratrees/block/decor/ItemHedge.java b/src/main/java/binnie/extratrees/block/decor/ItemHedge.java new file mode 100644 index 00000000..643139d7 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/decor/ItemHedge.java @@ -0,0 +1,23 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block.decor; + +import binnie.extratrees.genetics.ExtraTreeSpecies; +import net.minecraft.item.ItemStack; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlockWithMetadata; + +public class ItemHedge extends ItemBlockWithMetadata +{ + public ItemHedge(final Block block) { + super(block, block); + } + + @Override + public String getItemStackDisplayName(final ItemStack item) { + final int meta = item.getItemDamage(); + return ExtraTreeSpecies.LeafType.values()[meta % 6].descript + ((meta >= 8) ? " Full" : "") + " Hedge"; + } +} diff --git a/src/main/java/binnie/extratrees/block/decor/MultiFenceRecipeEmbedded.java b/src/main/java/binnie/extratrees/block/decor/MultiFenceRecipeEmbedded.java new file mode 100644 index 00000000..4361db11 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/decor/MultiFenceRecipeEmbedded.java @@ -0,0 +1,60 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block.decor; + +import net.minecraft.init.Blocks; +import binnie.extratrees.block.IPlankType; +import binnie.extratrees.block.WoodManager; +import net.minecraft.world.World; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; + +public class MultiFenceRecipeEmbedded implements IRecipe +{ + ItemStack cached; + + @Override + public boolean matches(final InventoryCrafting inv, final World world) { + final String pattern = ""; + FenceType type = null; + for (int row = 0; row < 3; ++row) { + final ItemStack a = inv.getStackInSlot(row * 3); + final ItemStack b = inv.getStackInSlot(row * 3 + 1); + final ItemStack c = inv.getStackInSlot(row * 3 + 2); + if (a != null && b != null) { + if (c != null) { + type = WoodManager.getFenceType(a); + final FenceType type2 = WoodManager.getFenceType(c); + if (type != null && type2 != null) { + if (type.equals(type2)) { + final IPlankType pType = WoodManager.get(b); + if (WoodManager.getFenceDescription(a).getPlankType() == pType) { + this.cached = WoodManager.getFence(WoodManager.getFenceDescription(a).getPlankType(), WoodManager.getFenceDescription(a).getSecondaryPlankType(), new FenceType(type.size, type.solid, true), 2); + return true; + } + } + } + } + } + } + return false; + } + + @Override + public ItemStack getCraftingResult(final InventoryCrafting inv) { + return this.getRecipeOutput(); + } + + @Override + public int getRecipeSize() { + return 3; + } + + @Override + public ItemStack getRecipeOutput() { + return (this.cached == null) ? new ItemStack(Blocks.fence) : this.cached; + } +} diff --git a/src/main/java/binnie/extratrees/block/decor/MultiFenceRecipeSize.java b/src/main/java/binnie/extratrees/block/decor/MultiFenceRecipeSize.java new file mode 100644 index 00000000..b0dabd59 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/decor/MultiFenceRecipeSize.java @@ -0,0 +1,90 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block.decor; + +import net.minecraft.init.Blocks; +import java.util.List; +import binnie.extratrees.block.WoodManager; +import binnie.extratrees.block.IPlankType; +import java.util.ArrayList; +import net.minecraft.world.World; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; + +public class MultiFenceRecipeSize implements IRecipe +{ + ItemStack cached; + + @Override + public boolean matches(final InventoryCrafting inv, final World world) { + String pattern = ""; + final List types = new ArrayList(); + for (int i = 0; i < inv.getSizeInventory(); ++i) { + final ItemStack stack = inv.getStackInSlot(i); + final IPlankType type = (stack == null) ? null : WoodManager.get(stack); + if (stack != null && type == null) { + return false; + } + if (stack == null) { + pattern += " "; + } + else { + if (!types.contains(type)) { + types.add(type); + if (types.size() > 2) { + return false; + } + } + pattern += types.indexOf(type); + } + } + if (types.isEmpty()) { + return false; + } + ItemStack fence = null; + if (pattern.contains("0100 0 ")) { + fence = WoodManager.getFence(types.get(0), types.get(1), new FenceType(0, false, false), 4); + } + else if (pattern.contains("0000 0 ")) { + fence = WoodManager.getFence(types.get(0), types.get(0), new FenceType(0, false, false), 4); + } + else if (pattern.contains("0100 0 1 ")) { + fence = WoodManager.getFence(types.get(0), types.get(1), new FenceType(1, false, false), 4); + } + else if (pattern.contains("0000 0 0 ")) { + fence = WoodManager.getFence(types.get(0), types.get(0), new FenceType(1, false, false), 4); + } + else if (pattern.contains(" 0 1 1101")) { + fence = WoodManager.getFence(types.get(1), types.get(0), new FenceType(2, false, false), 4); + } + else if (pattern.contains(" 0 0 0000")) { + fence = WoodManager.getFence(types.get(0), types.get(0), new FenceType(2, false, false), 4); + } + this.cached = fence; + return fence != null; + } + + @Override + public ItemStack getCraftingResult(final InventoryCrafting inv) { + return this.getRecipeOutput(); + } + + @Override + public int getRecipeSize() { + return 3; + } + + @Override + public ItemStack getRecipeOutput() { + return (this.cached == null) ? new ItemStack(Blocks.fence) : this.cached; + } + + public static void generateTypes() { + final int type = 0; + for (int type2 = 0; type2 < 2; ++type2) { + } + } +} diff --git a/src/main/java/binnie/extratrees/block/decor/MultiFenceRecipeSolid.java b/src/main/java/binnie/extratrees/block/decor/MultiFenceRecipeSolid.java new file mode 100644 index 00000000..abb140be --- /dev/null +++ b/src/main/java/binnie/extratrees/block/decor/MultiFenceRecipeSolid.java @@ -0,0 +1,57 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block.decor; + +import net.minecraft.init.Blocks; +import binnie.extratrees.block.WoodManager; +import net.minecraft.world.World; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; + +public class MultiFenceRecipeSolid implements IRecipe +{ + ItemStack cached; + + @Override + public boolean matches(final InventoryCrafting inv, final World world) { + final String pattern = ""; + FenceType type = null; + for (int row = 0; row < 3; ++row) { + final ItemStack a = inv.getStackInSlot(row * 3); + final ItemStack b = inv.getStackInSlot(row * 3 + 1); + final ItemStack c = inv.getStackInSlot(row * 3 + 2); + if (a != null && b != null) { + if (c != null) { + type = WoodManager.getFenceType(a); + final FenceType type2 = WoodManager.getFenceType(b); + final FenceType type3 = WoodManager.getFenceType(c); + if (type != null && type2 != null && type3 != null && type.equals(type2)) { + if (type.equals(type3)) { + this.cached = WoodManager.getFence(WoodManager.getFenceDescription(a).getPlankType(), WoodManager.getFenceDescription(a).getSecondaryPlankType(), new FenceType(type.size, true, type.solid), 2); + return true; + } + } + } + } + } + return false; + } + + @Override + public ItemStack getCraftingResult(final InventoryCrafting inv) { + return this.getRecipeOutput(); + } + + @Override + public int getRecipeSize() { + return 3; + } + + @Override + public ItemStack getRecipeOutput() { + return (this.cached == null) ? new ItemStack(Blocks.fence) : this.cached; + } +} diff --git a/src/main/java/binnie/extratrees/block/decor/NBTShapedRecipe.java b/src/main/java/binnie/extratrees/block/decor/NBTShapedRecipe.java new file mode 100644 index 00000000..458ae30b --- /dev/null +++ b/src/main/java/binnie/extratrees/block/decor/NBTShapedRecipe.java @@ -0,0 +1,152 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block.decor; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import java.util.HashMap; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; + +public class NBTShapedRecipe implements IRecipe +{ + public final int recipeWidth; + public final int recipeHeight; + public final ItemStack[] recipeItems; + private ItemStack recipeOutput; + private boolean field_92101_f; + private static final String __OBFID = "CL_00000093"; + + @Override + public ItemStack getRecipeOutput() { + return this.recipeOutput; + } + + @Override + public boolean matches(final InventoryCrafting p_77569_1_, final World p_77569_2_) { + for (int i = 0; i <= 3 - this.recipeWidth; ++i) { + for (int j = 0; j <= 3 - this.recipeHeight; ++j) { + if (this.checkMatch(p_77569_1_, i, j, true)) { + return true; + } + if (this.checkMatch(p_77569_1_, i, j, false)) { + return true; + } + } + } + return false; + } + + private boolean checkMatch(final InventoryCrafting p_77573_1_, final int p_77573_2_, final int p_77573_3_, final boolean p_77573_4_) { + for (int k = 0; k < 3; ++k) { + for (int l = 0; l < 3; ++l) { + final int i1 = k - p_77573_2_; + final int j1 = l - p_77573_3_; + ItemStack itemstack = null; + if (i1 >= 0 && j1 >= 0 && i1 < this.recipeWidth && j1 < this.recipeHeight) { + if (p_77573_4_) { + itemstack = this.recipeItems[this.recipeWidth - i1 - 1 + j1 * this.recipeWidth]; + } + else { + itemstack = this.recipeItems[i1 + j1 * this.recipeWidth]; + } + } + final ItemStack itemstack2 = p_77573_1_.getStackInRowAndColumn(k, l); + if (itemstack2 != null || itemstack != null) { + if ((itemstack2 == null && itemstack != null) || (itemstack2 != null && itemstack == null)) { + return false; + } + if (itemstack.getItem() != itemstack2.getItem()) { + return false; + } + if (itemstack.getItemDamage() != 32767 && itemstack.getItemDamage() != itemstack2.getItemDamage()) { + return false; + } + if (itemstack.hasTagCompound() && itemstack2.hasTagCompound() && !ItemStack.areItemStackTagsEqual(itemstack, itemstack2)) { + return false; + } + } + } + } + return true; + } + + @Override + public ItemStack getCraftingResult(final InventoryCrafting p_77572_1_) { + final ItemStack itemstack = this.getRecipeOutput().copy(); + if (this.field_92101_f) { + for (int i = 0; i < p_77572_1_.getSizeInventory(); ++i) { + final ItemStack itemstack2 = p_77572_1_.getStackInSlot(i); + if (itemstack2 != null && itemstack2.hasTagCompound()) { + itemstack.setTagCompound((NBTTagCompound) itemstack2.stackTagCompound.copy()); + } + } + } + return itemstack; + } + + @Override + public int getRecipeSize() { + return this.recipeWidth * this.recipeHeight; + } + + public NBTShapedRecipe(final ItemStack p_92103_1_, final Object... p_92103_2_) { + String s = ""; + int i = 0; + int j = 0; + int k = 0; + if (p_92103_2_[i] instanceof String[]) { + final String[] astring = (String[]) p_92103_2_[i++]; + for (int l = 0; l < astring.length; ++l) { + final String s2 = astring[l]; + ++k; + j = s2.length(); + s += s2; + } + } + else { + while (p_92103_2_[i] instanceof String) { + final String s3 = (String) p_92103_2_[i++]; + ++k; + j = s3.length(); + s += s3; + } + } + final HashMap hashmap = new HashMap(); + while (i < p_92103_2_.length) { + final Character character = (Character) p_92103_2_[i]; + ItemStack itemstack1 = null; + if (p_92103_2_[i + 1] instanceof Item) { + itemstack1 = new ItemStack((Item) p_92103_2_[i + 1]); + } + else if (p_92103_2_[i + 1] instanceof Block) { + itemstack1 = new ItemStack((Block) p_92103_2_[i + 1], 1, 32767); + } + else if (p_92103_2_[i + 1] instanceof ItemStack) { + itemstack1 = (ItemStack) p_92103_2_[i + 1]; + } + hashmap.put(character, itemstack1); + i += 2; + } + final ItemStack[] aitemstack = new ItemStack[j * k]; + for (int i2 = 0; i2 < j * k; ++i2) { + final char c0 = s.charAt(i2); + if (hashmap.containsKey(c0)) { + aitemstack[i2] = ((ItemStack) hashmap.get(Character.valueOf(c0))).copy(); + } + else { + aitemstack[i2] = null; + } + } + this.recipeWidth = j; + this.recipeHeight = k; + this.recipeItems = aitemstack; + this.recipeOutput = p_92103_1_; + NBTShapedRecipes.addRecipe(this); + } +} diff --git a/src/main/java/binnie/extratrees/block/decor/NBTShapedRecipes.java b/src/main/java/binnie/extratrees/block/decor/NBTShapedRecipes.java new file mode 100644 index 00000000..fd4e1c41 --- /dev/null +++ b/src/main/java/binnie/extratrees/block/decor/NBTShapedRecipes.java @@ -0,0 +1,55 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.block.decor; + +import java.util.ArrayList; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraft.inventory.InventoryCrafting; +import java.util.List; +import net.minecraft.item.crafting.IRecipe; + +public class NBTShapedRecipes implements IRecipe +{ + static List recipes; + + @Override + public boolean matches(final InventoryCrafting inventory, final World world) { + for (final NBTShapedRecipe recipe : NBTShapedRecipes.recipes) { + if (recipe.matches(inventory, world)) { + return true; + } + } + return false; + } + + @Override + public ItemStack getCraftingResult(final InventoryCrafting inventory) { + for (final NBTShapedRecipe recipe : NBTShapedRecipes.recipes) { + if (recipe.matches(inventory, null)) { + return recipe.getCraftingResult(inventory); + } + } + return null; + } + + @Override + public int getRecipeSize() { + return 9; + } + + @Override + public ItemStack getRecipeOutput() { + return null; + } + + public static void addRecipe(final NBTShapedRecipe nbtShapedRecipe) { + NBTShapedRecipes.recipes.add(nbtShapedRecipe); + } + + static { + NBTShapedRecipes.recipes = new ArrayList(); + } +} diff --git a/src/main/java/binnie/extratrees/carpentry/BlockCarpentry.java b/src/main/java/binnie/extratrees/carpentry/BlockCarpentry.java new file mode 100644 index 00000000..3fc07608 --- /dev/null +++ b/src/main/java/binnie/extratrees/carpentry/BlockCarpentry.java @@ -0,0 +1,40 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.carpentry; + +import binnie.extratrees.ExtraTrees; +import binnie.Binnie; +import binnie.extratrees.block.PlankType; + +import net.minecraft.item.ItemStack; + +import binnie.extratrees.api.IDesign; +import forestry.api.core.Tabs; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; + +public class BlockCarpentry extends BlockDesign +{ + public BlockCarpentry() { + super(DesignSystem.Wood, Material.wood); + this.setCreativeTab(Tabs.tabArboriculture); + this.setBlockName("carpentry"); + this.setResistance(5.0f); + this.setHardness(2.0f); + this.setStepSound(Block.soundTypeWood); + } + + @Override + public ItemStack getCreativeStack(final IDesign design) { + return ModuleCarpentry.getItemStack(this, PlankType.ExtraTreePlanks.Apple, PlankType.VanillaPlanks.BIRCH, design); + } + + @Override + public String getBlockName(final DesignBlock design) { + return Binnie.Language.localise(ExtraTrees.instance, "block.woodentile.name", design.getDesign().getName()); + } + +} diff --git a/src/main/java/binnie/extratrees/carpentry/BlockCarpentryPanel.java b/src/main/java/binnie/extratrees/carpentry/BlockCarpentryPanel.java new file mode 100644 index 00000000..adfab20b --- /dev/null +++ b/src/main/java/binnie/extratrees/carpentry/BlockCarpentryPanel.java @@ -0,0 +1,155 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.carpentry; + +import binnie.core.block.BlockMetadata; +import net.minecraft.block.Block; +import net.minecraftforge.common.util.ForgeDirection; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; +import binnie.extratrees.ExtraTrees; +import binnie.Binnie; +import binnie.core.block.TileEntityMetadata; +import net.minecraft.item.ItemStack; +import net.minecraft.world.IBlockAccess; +import java.util.List; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; + +public class BlockCarpentryPanel extends BlockCarpentry +{ + public BlockCarpentryPanel() { + this.useNeighborBrightness = true; + this.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 0.0625f, 1.0f); + this.setLightOpacity(0); + } + + @Override + public void getSubBlocks(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + } + + @Override + public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) + { + this.setBlockBoundsBasedOnState(world, x, y, z); + return super.getCollisionBoundingBoxFromPool(world, x, y, z); + } + + @Override + public void setBlockBoundsBasedOnState(final IBlockAccess world, final int x, final int y, final int z) { + final DesignBlock block = this.getCarpentryBlock(world, x, y, z); + switch (block.getFacing()) { + case DOWN: { + this.setBlockBounds(0.0f, 0.9375f, 0.0f, 1.0f, 1.0f, 1.0f); + break; + } + case EAST: { + this.setBlockBounds(0.0f, 0.0f, 0.0f, 0.0625f, 1.0f, 1.0f); + break; + } + case NORTH: { + this.setBlockBounds(0.0f, 0.0f, 0.9375f, 1.0f, 1.0f, 1.0f); + break; + } + case SOUTH: { + this.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0625f); + break; + } + case UP: { + this.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 0.0625f, 1.0f); + break; + } + case WEST: { + this.setBlockBounds(0.9375f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); + break; + } + } + } + + @Override + public void setBlockBoundsForItemRender() { + this.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 0.0625f, 1.0f); + } + + @Override + public String getBlockName(final ItemStack stack) { + final DesignBlock block = ModuleCarpentry.getDesignBlock(this.getDesignSystem(), TileEntityMetadata.getItemDamage(stack)); + return Binnie.Language.localise(ExtraTrees.instance, "block.woodenpanel.name", block.getDesign().getName()); + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(final World par1World, final int par2, final int par3, final int par4) { + this.setBlockBoundsBasedOnState(par1World, par2, par3, par4); + return AxisAlignedBB.getBoundingBox(par2 + this.minX, par3 + this.minY, par4 + this.minZ, par2 + this.maxX, par3 + this.maxY, par4 + this.maxZ); + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(final IBlockAccess world, final int x, final int y, final int z, final int side) { + return super.shouldSideBeRendered(world, x, y, z, side); + } + + @Override + public DesignBlock getCarpentryBlock(final IBlockAccess world, final int x, final int y, final int z) { + return ModuleCarpentry.getCarpentryPanel(this.getDesignSystem(), TileEntityMetadata.getTileMetadata(world, x, y, z)); + } + + public static boolean isValidPanelPlacement(final World world, final int x, final int y, final int z, final ForgeDirection facing) { + if (facing == ForgeDirection.UNKNOWN) { + return false; + } + final int bx = x - facing.offsetX; + final int by = y - facing.offsetY; + final int bz = z - facing.offsetZ; + final Block block = world.getBlock(bx, by, bz); + return block != null && block.isSideSolid(world, bx, by, bz, facing); + } + + @Override + public int getPlacedMeta(final ItemStack item, final World world, final int x, final int y, final int z, final ForgeDirection clickedBlock) { + final DesignBlock block = ModuleCarpentry.getCarpentryPanel(this.getDesignSystem(), TileEntityMetadata.getItemDamage(item)); + ForgeDirection facing = clickedBlock; + boolean valid = true; + if (!isValidPanelPlacement(world, x, y, z, facing)) { + valid = false; + for (final ForgeDirection direction : ForgeDirection.values()) { + if (isValidPanelPlacement(world, x, y, z, direction)) { + facing = direction; + valid = true; + break; + } + } + } + if (!valid) { + return -1; + } + block.setFacing(facing); + return block.getBlockMetadata(this.getDesignSystem()); + } + + @Override + public void onNeighborBlockChange(final World world, final int x, final int y, final int z, final Block par5) { + super.onNeighborBlockChange(world, x, y, z, par5); + final DesignBlock block = this.getCarpentryBlock(world, x, y, z); + if (!isValidPanelPlacement(world, x, y, z, block.getFacing())) { + for (final ItemStack stack : BlockMetadata.getBlockDropped(this, world, x, y, z, 0)) { + this.dropBlockAsItem(world, x, y, z, stack); + } + world.setBlockToAir(x, y, z); + } + } +} diff --git a/src/main/java/binnie/extratrees/carpentry/BlockDesign.java b/src/main/java/binnie/extratrees/carpentry/BlockDesign.java new file mode 100644 index 00000000..df33f924 --- /dev/null +++ b/src/main/java/binnie/extratrees/carpentry/BlockDesign.java @@ -0,0 +1,175 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.carpentry; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.block.Block; +import net.minecraft.util.IIcon; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.core.block.MultipassBlockRenderer; +import binnie.core.BinnieCore; +import binnie.extratrees.api.CarpentryManager; +import java.util.List; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import binnie.extratrees.api.IDesign; +import net.minecraft.block.material.Material; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import net.minecraft.item.ItemStack; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import binnie.core.block.TileEntityMetadata; +import net.minecraft.world.IBlockAccess; +import binnie.extratrees.api.IToolHammer; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.common.util.ForgeDirection; +import binnie.extratrees.api.IDesignSystem; +import binnie.core.block.IMultipassBlock; +import binnie.core.block.BlockMetadata; + +public abstract class BlockDesign extends BlockMetadata implements IMultipassBlock +{ + IDesignSystem designSystem; + public static final ForgeDirection[] RENDER_DIRECTIONS; + + @SubscribeEvent + public void onClick(final PlayerInteractEvent event) { + if (event.action != PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) { + return; + } + final World world = event.entityPlayer.worldObj; + final EntityPlayer player = event.entityPlayer; + final int x = event.x; + final int y = event.y; + final int z = event.z; + if (!(world.getBlock(x, y, z) instanceof BlockDesign)) { + return; + } + final BlockDesign blockC = (BlockDesign) world.getBlock(x, y, z); + final ItemStack item = player.getHeldItem(); + if (item == null) { + return; + } + if (!(item.getItem() instanceof IToolHammer)) { + return; + } + if (!((IToolHammer) item.getItem()).isActive(item)) { + return; + } + final DesignBlock block = blockC.getCarpentryBlock(world, x, y, z); + final TileEntityMetadata tile = (TileEntityMetadata) world.getTileEntity(x, y, z); + block.rotate(event.face, item, player, world, x, y, z); + final int meta = block.getBlockMetadata(blockC.getDesignSystem()); + tile.setTileMetadata(meta, true); + } + + public BlockDesign(final IDesignSystem system, final Material material) { + super(material); + this.designSystem = system; + } + + public abstract ItemStack getCreativeStack(final IDesign p0); + + @Override + public void getSubBlocks(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + for (final IDesign design : CarpentryManager.carpentryInterface.getSortedDesigns()) { + itemList.add(this.getCreativeStack(design)); + } + } + + public IDesignSystem getDesignSystem() { + return this.designSystem; + } + + @Override + public int getRenderType() { + return BinnieCore.multipassRenderID; + } + + @Override + public String getBlockName(final ItemStack stack) { + final DesignBlock block = ModuleCarpentry.getDesignBlock(this.getDesignSystem(), TileEntityMetadata.getItemDamage(stack)); + return this.getBlockName(block); + } + + public abstract String getBlockName(final DesignBlock p0); + + public DesignBlock getCarpentryBlock(final IBlockAccess world, final int x, final int y, final int z) { + return ModuleCarpentry.getDesignBlock(this.getDesignSystem(), TileEntityMetadata.getTileMetadata(world, x, y, z)); + } + + @Override + @SideOnly(Side.CLIENT) + public int colorMultiplier(final IBlockAccess world, final int x, final int y, final int z) { + final DesignBlock block = this.getCarpentryBlock(world, x, y, z); + return (MultipassBlockRenderer.getLayer() > 0) ? block.getSecondaryColour() : block.getPrimaryColour(); + } + + @Override + public int colorMultiplier(final int meta) { + final DesignBlock block = ModuleCarpentry.getDesignBlock(this.getDesignSystem(), meta); + return (MultipassBlockRenderer.getLayer() > 0) ? block.getSecondaryColour() : block.getPrimaryColour(); + } + + @Override + public IIcon getIcon(final int side, final int damage) { + final DesignBlock block = ModuleCarpentry.getDesignBlock(this.getDesignSystem(), damage); + final IIcon icon = (MultipassBlockRenderer.getLayer() > 0) ? block.getSecondaryIcon(this.getDesignSystem(), BlockDesign.RENDER_DIRECTIONS[side]) : block.getPrimaryIcon(this.getDesignSystem(), BlockDesign.RENDER_DIRECTIONS[side]); + return icon; + } + + @Override + public void getBlockTooltip(final ItemStack stack, final List par3List) { + final DesignBlock block = ModuleCarpentry.getDesignBlock(this.getDesignSystem(), TileEntityMetadata.getItemDamage(stack)); + if (block.getPrimaryMaterial() != block.getSecondaryMaterial()) { + par3List.add(block.getPrimaryMaterial().getName() + " and " + block.getSecondaryMaterial().getName()); + } + else { + par3List.add(block.getPrimaryMaterial().getName()); + } + } + + public int primaryColor(final int damage) { + final DesignBlock block = ModuleCarpentry.getDesignBlock(this.getDesignSystem(), damage); + return block.getPrimaryColour(); + } + + public int secondaryColor(final int damage) { + final DesignBlock block = ModuleCarpentry.getDesignBlock(this.getDesignSystem(), damage); + return block.getSecondaryColour(); + } + + public ItemStack getItemStack(final int plank1, final int plank2, final int design) { + return TileEntityMetadata.getItemStack(this, getMetadata(plank1, plank2, design)); + } + + public static int getMetadata(final int plank1, final int plank2, final int design) { + return plank1 + (plank2 << 9) + (design << 18); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister register) { + for (final IDesignSystem system : DesignerManager.instance.getDesignSystems()) { + system.registerIcons(register); + } + } + + @Override + public int getDroppedMeta(final int blockMeta, final int tileMeta) { + final DesignBlock block = ModuleCarpentry.getDesignBlock(this.getDesignSystem(), tileMeta); + return block.getItemMetadata(this.getDesignSystem()); + } + + @Override + public int getNumberOfPasses() { + return 2; + } + + static { + RENDER_DIRECTIONS = new ForgeDirection[] { ForgeDirection.DOWN, ForgeDirection.UP, ForgeDirection.EAST, ForgeDirection.WEST, ForgeDirection.NORTH, ForgeDirection.SOUTH }; + } +} diff --git a/src/main/java/binnie/extratrees/carpentry/BlockStainedDesign.java b/src/main/java/binnie/extratrees/carpentry/BlockStainedDesign.java new file mode 100644 index 00000000..dbbe0be9 --- /dev/null +++ b/src/main/java/binnie/extratrees/carpentry/BlockStainedDesign.java @@ -0,0 +1,67 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.carpentry; + +import binnie.extratrees.ExtraTrees; +import binnie.Binnie; +import net.minecraft.item.ItemStack; +import binnie.extratrees.api.IDesign; +import net.minecraft.block.Block; +import binnie.botany.Botany; +import net.minecraft.util.Facing; +import net.minecraft.world.IBlockAccess; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import java.util.Random; +import forestry.api.core.Tabs; +import net.minecraft.block.material.Material; + +public class BlockStainedDesign extends BlockDesign +{ + public BlockStainedDesign() { + super(DesignSystem.Glass, Material.glass); + this.setCreativeTab(Tabs.tabArboriculture); + this.setBlockName("stainedGlass"); + } + + @Override + public int quantityDropped(final Random p_149745_1_) { + return 0; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderBlockPass() { + return 1; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(final IBlockAccess p_149646_1_, final int p_149646_2_, final int p_149646_3_, final int p_149646_4_, final int p_149646_5_) { + final Block block2 = p_149646_1_.getBlock(p_149646_2_ - Facing.offsetsXForSide[p_149646_5_], p_149646_3_ - Facing.offsetsYForSide[p_149646_5_], p_149646_4_ - Facing.offsetsZForSide[p_149646_5_]); + final Block block3 = p_149646_1_.getBlock(p_149646_2_, p_149646_3_, p_149646_4_); + return block3 != this && block3 != Botany.stained && super.shouldSideBeRendered(p_149646_1_, p_149646_2_, p_149646_3_, p_149646_4_, p_149646_5_); + } + + @Override + public ItemStack getCreativeStack(final IDesign design) { + return ModuleCarpentry.getItemStack(this, GlassType.get(0), GlassType.get(1), design); + } + + @Override + public String getBlockName(final DesignBlock design) { + return Binnie.Language.localise(ExtraTrees.instance, "block.stainedglass.name", design.getDesign().getName()); + } +} diff --git a/src/main/java/binnie/extratrees/carpentry/CarpentryInterface.java b/src/main/java/binnie/extratrees/carpentry/CarpentryInterface.java new file mode 100644 index 00000000..521ffa71 --- /dev/null +++ b/src/main/java/binnie/extratrees/carpentry/CarpentryInterface.java @@ -0,0 +1,124 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.carpentry; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import net.minecraft.item.ItemStack; +import java.util.List; +import java.util.ArrayList; +import java.util.Collection; +import binnie.extratrees.api.ILayout; +import binnie.extratrees.api.IPattern; +import binnie.extratrees.api.IDesignCategory; +import binnie.extratrees.api.IDesign; +import binnie.extratrees.api.IDesignMaterial; +import java.util.Map; +import binnie.extratrees.api.ICarpentryInterface; + +public class CarpentryInterface implements ICarpentryInterface +{ + static Map woodMap; + static Map designMap; + static Map designCategories; + + @Override + public boolean registerCarpentryWood(final int index, final IDesignMaterial wood) { + return wood != null && CarpentryInterface.woodMap.put(index, wood) == null; + } + + @Override + public int getCarpentryWoodIndex(final IDesignMaterial wood) { + for (final Integer integer : CarpentryInterface.woodMap.keySet()) { + if (CarpentryInterface.woodMap.get(integer).equals(wood)) { + return integer; + } + } + return -1; + } + + @Override + public IDesignMaterial getWoodMaterial(final int index) { + return CarpentryInterface.woodMap.get(index); + } + + @Override + public boolean registerDesign(final int index, final IDesign wood) { + return wood != null && CarpentryInterface.designMap.put(index, wood) == null; + } + + @Override + public int getDesignIndex(final IDesign wood) { + for (final Integer integer : CarpentryInterface.designMap.keySet()) { + if (CarpentryInterface.designMap.get(integer).equals(wood)) { + return integer; + } + } + return -1; + } + + @Override + public IDesign getDesign(final int index) { + return CarpentryInterface.designMap.get(index); + } + + @Override + public ILayout getLayout(final IPattern pattern, final boolean inverted) { + return Layout.get(pattern, inverted); + } + + @Override + public boolean registerDesignCategory(final IDesignCategory category) { + return category != null && category.getId() != null && CarpentryInterface.designCategories.put(category.getId(), category) == null; + } + + @Override + public IDesignCategory getDesignCategory(final String id) { + return CarpentryInterface.designCategories.get(id); + } + + @Override + public Collection getAllDesignCategories() { + final List categories = new ArrayList(); + for (final IDesignCategory category : CarpentryInterface.designCategories.values()) { + if (category.getDesigns().size() > 0) { + categories.add(category); + } + } + return categories; + } + + @Override + public List getSortedDesigns() { + final List designs = new ArrayList(); + for (final IDesignCategory category : this.getAllDesignCategories()) { + designs.addAll(category.getDesigns()); + } + return designs; + } + + @Override + public IDesignMaterial getWoodMaterial(final ItemStack stack) { + if (stack == null) { + return null; + } + for (final Map.Entry entry : CarpentryInterface.woodMap.entrySet()) { + final ItemStack key = entry.getValue().getStack(); + if (key == null) { + continue; + } + if (key.isItemEqual(stack)) { + return entry.getValue(); + } + } + return null; + } + + static { + CarpentryInterface.woodMap = new LinkedHashMap(); + CarpentryInterface.designMap = new LinkedHashMap(); + CarpentryInterface.designCategories = new HashMap(); + } +} diff --git a/src/main/java/binnie/extratrees/carpentry/DesignBlock.java b/src/main/java/binnie/extratrees/carpentry/DesignBlock.java new file mode 100644 index 00000000..64b1cecb --- /dev/null +++ b/src/main/java/binnie/extratrees/carpentry/DesignBlock.java @@ -0,0 +1,455 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.carpentry; + +import binnie.extratrees.api.IToolHammer; +import net.minecraft.world.World; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import binnie.extratrees.api.ILayout; +import binnie.extratrees.api.IDesignSystem; +import net.minecraftforge.common.util.ForgeDirection; +import binnie.extratrees.api.IDesignMaterial; +import binnie.extratrees.api.IDesign; + +public class DesignBlock +{ + IDesign design; + IDesignMaterial primaryMaterial; + IDesignMaterial secondaryMaterial; + int rotation; + ForgeDirection facing; + boolean panel; + + @Override + public String toString() { + return super.toString() + " { design:" + this.design + " }, { primary:" + this.primaryMaterial + " }, { secondary:" + this.secondaryMaterial + " }, { rotation:" + this.rotation + " }, { facing:" + this.facing + " }"; + } + + public IDesign getDesign() { + return this.design; + } + + public IDesignMaterial getPrimaryMaterial() { + return this.primaryMaterial; + } + + public IDesignMaterial getSecondaryMaterial() { + return this.secondaryMaterial; + } + + DesignBlock(final IDesignSystem system, final IDesignMaterial primaryWood, final IDesignMaterial secondaryWood, final IDesign design, final int rotation, final ForgeDirection dir) { + this.rotation = 0; + this.facing = ForgeDirection.UP; + this.panel = false; + this.design = design; + this.primaryMaterial = primaryWood; + this.secondaryMaterial = secondaryWood; + this.rotation = rotation; + this.facing = dir; + if (design == null) { + this.design = EnumDesign.Blank; + } + if (primaryWood == null) { + this.primaryMaterial = system.getDefaultMaterial(); + } + if (secondaryWood == null) { + this.secondaryMaterial = system.getDefaultMaterial(); + } + if (this.rotation > 3 || this.rotation < 0) { + this.rotation = 0; + } + if (this.facing == null || this.facing == ForgeDirection.UNKNOWN) { + this.facing = ForgeDirection.UP; + } + } + + public int getPrimaryColour() { + return this.getPrimaryMaterial().getColour(); + } + + public int getSecondaryColour() { + return this.getSecondaryMaterial().getColour(); + } + + ForgeDirection getRotation(final ForgeDirection dir, final ModuleCarpentry.Axis axis) { + if (axis == ModuleCarpentry.Axis.Y) { + switch (dir) { + case EAST: { + return ForgeDirection.NORTH; + } + case NORTH: { + return ForgeDirection.WEST; + } + case SOUTH: { + return ForgeDirection.EAST; + } + case WEST: { + return ForgeDirection.SOUTH; + } + default: { + return dir; + } + } + } + else if (axis == ModuleCarpentry.Axis.X) { + switch (dir) { + case EAST: { + return ForgeDirection.UP; + } + case UP: { + return ForgeDirection.WEST; + } + case WEST: { + return ForgeDirection.DOWN; + } + case DOWN: { + return ForgeDirection.EAST; + } + default: { + return dir; + } + } + } + else { + switch (dir) { + case SOUTH: { + return ForgeDirection.UP; + } + case UP: { + return ForgeDirection.NORTH; + } + case NORTH: { + return ForgeDirection.DOWN; + } + case DOWN: { + return ForgeDirection.SOUTH; + } + default: { + return dir; + } + } + } + } + + public ILayout getLayout(ForgeDirection dir) { + ForgeDirection adjustedDir; + dir = (adjustedDir = dir.getRotation(ForgeDirection.DOWN)); + switch (this.getFacing()) { + case DOWN: { + adjustedDir = adjustedDir.getRotation(ForgeDirection.EAST); + adjustedDir = adjustedDir.getRotation(ForgeDirection.EAST); + break; + } + case EAST: { + adjustedDir = adjustedDir.getRotation(ForgeDirection.EAST); + adjustedDir = adjustedDir.getRotation(ForgeDirection.NORTH); + break; + } + case NORTH: { + adjustedDir = adjustedDir.getRotation(ForgeDirection.EAST); + adjustedDir = adjustedDir.getRotation(ForgeDirection.SOUTH); + adjustedDir = adjustedDir.getRotation(ForgeDirection.SOUTH); + break; + } + case SOUTH: { + adjustedDir = adjustedDir.getRotation(ForgeDirection.EAST); + break; + } + case WEST: { + adjustedDir = adjustedDir.getRotation(ForgeDirection.EAST); + adjustedDir = adjustedDir.getRotation(ForgeDirection.SOUTH); + break; + } + } + for (int i = 0; i < this.rotation; ++i) { + adjustedDir = adjustedDir.getRotation(ForgeDirection.DOWN); + } + ILayout layout = null; + switch (adjustedDir) { + case EAST: { + layout = this.getDesign().getEastPattern(); + break; + } + case NORTH: { + layout = this.getDesign().getNorthPattern(); + break; + } + case SOUTH: { + layout = this.getDesign().getSouthPattern(); + break; + } + case WEST: { + layout = this.getDesign().getWestPattern(); + break; + } + case DOWN: { + layout = this.getDesign().getBottomPattern(); + break; + } + default: { + layout = this.getDesign().getTopPattern(); + break; + } + } + Label_1107: { + switch (this.getFacing()) { + case UP: { + if (dir == ForgeDirection.DOWN || dir == ForgeDirection.UP) { + for (int j = 0; j < this.rotation; ++j) { + layout = layout.rotateRight(); + } + break; + } + break; + } + case DOWN: { + switch (dir) { + case UP: + case DOWN: { + layout = layout.flipVertical(); + break; + } + case EAST: + case NORTH: + case SOUTH: + case WEST: { + layout = layout.rotateRight().rotateRight(); + break; + } + } + if (dir == ForgeDirection.DOWN || dir == ForgeDirection.UP) { + for (int j = 0; j < this.rotation; ++j) { + layout = layout.rotateLeft(); + } + break; + } + break; + } + case EAST: { + switch (dir) { + case SOUTH: + case UP: { + layout = layout.rotateRight(); + break; + } + case NORTH: { + layout = layout.rotateLeft(); + break; + } + case DOWN: { + layout = layout.rotateLeft().flipHorizontal(); + break; + } + case WEST: { + layout = layout.flipHorizontal(); + break; + } + } + if (dir == ForgeDirection.EAST) { + for (int j = 0; j < this.rotation; ++j) { + layout = layout.rotateRight(); + } + } + if (dir == ForgeDirection.WEST) { + for (int j = 0; j < this.rotation; ++j) { + layout = layout.rotateLeft(); + } + break; + } + break; + } + case WEST: { + switch (dir) { + case NORTH: { + layout = layout.rotateRight(); + break; + } + case SOUTH: + case UP: { + layout = layout.rotateLeft(); + break; + } + case DOWN: { + layout = layout.rotateLeft().flipVertical(); + break; + } + case EAST: { + layout = layout.flipHorizontal(); + for (int j = 0; j < this.rotation; ++j) { + layout = layout.rotateLeft(); + } + break; + } + case WEST: { + for (int j = 0; j < this.rotation; ++j) { + layout = layout.rotateRight(); + } + break; + } + } + break; + } + case NORTH: { + switch (dir) { + case WEST: { + layout = layout.rotateLeft(); + break Label_1107; + } + case EAST: { + layout = layout.rotateRight(); + break Label_1107; + } + case DOWN: { + layout = layout.flipHorizontal(); + break Label_1107; + } + case SOUTH: { + layout = layout.flipHorizontal(); + for (int j = 0; j < this.rotation; ++j) { + layout = layout.rotateLeft(); + } + break Label_1107; + } + case NORTH: { + for (int j = 0; j < this.rotation; ++j) { + layout = layout.rotateRight(); + } + break Label_1107; + } + default: { + break Label_1107; + } + } + + } + case SOUTH: { + switch (dir) { + case EAST: { + layout = layout.rotateLeft(); + break Label_1107; + } + case WEST: { + layout = layout.rotateRight(); + break Label_1107; + } + case UP: { + layout = layout.rotateRight().rotateRight(); + break Label_1107; + } + case DOWN: { + layout = layout.flipVertical(); + break Label_1107; + } + case NORTH: { + layout = layout.flipHorizontal(); + for (int j = 0; j < this.rotation; ++j) { + layout = layout.rotateLeft(); + } + break Label_1107; + } + case SOUTH: { + for (int j = 0; j < this.rotation; ++j) { + layout = layout.rotateRight(); + } + break Label_1107; + } + default: { + break Label_1107; + } + } + + } + } + } + return layout; + } + + public IIcon getPrimaryIcon(final IDesignSystem system, final ForgeDirection dir) { + final ILayout l = this.getLayout(dir); + return (l == null) ? null : l.getPrimaryIcon(system); + } + + public IIcon getSecondaryIcon(final IDesignSystem system, final ForgeDirection dir) { + final ILayout l = this.getLayout(dir); + return (l == null) ? null : l.getSecondaryIcon(system); + } + + public IIcon getIcon(final IDesignSystem system, final boolean secondary, final ForgeDirection dir) { + return secondary ? this.getSecondaryIcon(system, dir) : this.getPrimaryIcon(system, dir); + } + + public ForgeDirection getFacing() { + return this.facing; + } + + public int getRotation() { + return this.rotation; + } + + public void rotate(final int face, final ItemStack hammer, final EntityPlayer player, final World world, final int x, final int y, final int z) { + final ForgeDirection dir = ForgeDirection.getOrientation(face); + final IToolHammer hammerI = (IToolHammer) hammer.getItem(); + if (player.isSneaking()) { + if (this.panel) { + ForgeDirection newFacing = this.getFacing(); + do { + newFacing = ForgeDirection.getOrientation(newFacing.ordinal() + 1); + if (newFacing == ForgeDirection.UNKNOWN) { + newFacing = ForgeDirection.DOWN; + } + } while (newFacing != this.getFacing() && !BlockCarpentryPanel.isValidPanelPlacement(world, x, y, z, newFacing)); + if (newFacing != this.getFacing()) { + hammerI.onHammerUsed(hammer, player); + } + this.setFacing(newFacing); + } + else { + if (dir != this.getFacing()) { + hammerI.onHammerUsed(hammer, player); + } + this.setFacing(dir); + } + } + else { + ++this.rotation; + hammerI.onHammerUsed(hammer, player); + } + if (this.rotation > 3) { + this.rotation = 0; + } + if (this.rotation < 0) { + this.rotation = 3; + } + } + + public void setFacing(final ForgeDirection facing) { + this.facing = facing; + } + + public int getBlockMetadata(final IDesignSystem system) { + return ModuleCarpentry.getBlockMetadata(system, this); + } + + public int getItemMetadata(final IDesignSystem system) { + return ModuleCarpentry.getItemMetadata(system, this); + } + + public void setPanel() { + this.panel = true; + } + + public String getString() { + String type = ""; + if (this.getPrimaryMaterial() != this.getSecondaryMaterial()) { + type = this.getPrimaryMaterial().getName() + " and " + this.getSecondaryMaterial().getName(); + } + else { + type = this.getPrimaryMaterial().getName(); + } + return super.toString() + " " + "{" + type + " " + this.getDesign().getName() + " " + (this.panel ? "Panel" : "Tile") + ", Facing:" + this.getFacing().toString() + ", Rotation:" + this.getRotation() + "}"; + } +} diff --git a/src/main/java/binnie/extratrees/carpentry/DesignSystem.java b/src/main/java/binnie/extratrees/carpentry/DesignSystem.java new file mode 100644 index 00000000..15bc6d88 --- /dev/null +++ b/src/main/java/binnie/extratrees/carpentry/DesignSystem.java @@ -0,0 +1,167 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.carpentry; + +import binnie.extratrees.ExtraTrees; +import binnie.core.AbstractMod; +import binnie.core.BinnieCore; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.extratrees.api.IPattern; +import binnie.extratrees.item.ExtraTreeItems; +import net.minecraft.item.ItemStack; +import binnie.extratrees.api.CarpentryManager; +import binnie.extratrees.block.PlankType; +import binnie.extratrees.api.IDesignMaterial; +import java.util.HashMap; +import net.minecraft.util.IIcon; +import java.util.Map; +import binnie.extratrees.api.IDesignSystem; + +public enum DesignSystem implements IDesignSystem +{ + Wood, + Glass; + + Map primary; + Map secondary; + + private DesignSystem() { + this.primary = new HashMap(); + this.secondary = new HashMap(); + DesignerManager.instance.registerDesignSystem(this); + } + + @Override + public IDesignMaterial getDefaultMaterial() { + switch (this) { + case Glass: { + return GlassType.get(0); + } + case Wood: { + return PlankType.ExtraTreePlanks.Fir; + } + default: { + return null; + } + } + } + + @Override + public IDesignMaterial getDefaultMaterial2() { + switch (this) { + case Glass: { + return GlassType.get(1); + } + case Wood: { + return PlankType.ExtraTreePlanks.Whitebeam; + } + default: { + return null; + } + } + } + + @Override + public IDesignMaterial getMaterial(final int id) { + switch (this) { + case Glass: { + return GlassType.get(id); + } + case Wood: { + return CarpentryManager.carpentryInterface.getWoodMaterial(id); + } + default: { + return null; + } + } + } + + @Override + public int getMaterialIndex(final IDesignMaterial id) { + switch (this) { + case Glass: { + return GlassType.getIndex(id); + } + case Wood: { + return CarpentryManager.carpentryInterface.getCarpentryWoodIndex(id); + } + default: { + return 0; + } + } + } + + public String getTexturePath() { + switch (this) { + case Glass: { + return "glass"; + } + case Wood: { + return "patterns"; + } + default: { + return ""; + } + } + } + + @Override + public IDesignMaterial getMaterial(final ItemStack stack) { + switch (this) { + case Glass: { + return GlassType.get(stack); + } + case Wood: { + return CarpentryManager.carpentryInterface.getWoodMaterial(stack); + } + default: { + return null; + } + } + } + + @Override + public ItemStack getAdhesive() { + switch (this) { + case Glass: { + return ExtraTreeItems.GlassFitting.get(1); + } + case Wood: { + return ExtraTreeItems.WoodWax.get(1); + } + default: { + return null; + } + } + } + + @Override + public IIcon getPrimaryIcon(final IPattern pattern) { + if (pattern instanceof EnumPattern) { + return this.primary.get(((EnumPattern) pattern).ordinal()); + } + return null; + } + + @Override + public IIcon getSecondaryIcon(final IPattern pattern) { + if (pattern instanceof EnumPattern) { + return this.secondary.get(((EnumPattern) pattern).ordinal()); + } + return null; + } + + @Override + public void registerIcons(final IIconRegister register) { + for (final EnumPattern pattern : EnumPattern.values()) { + this.primary.put(pattern.ordinal(), BinnieCore.proxy.getIcon(register, this.getMod().getModID(), this.getTexturePath() + "/" + pattern.toString().toLowerCase() + ".0")); + this.secondary.put(pattern.ordinal(), BinnieCore.proxy.getIcon(register, this.getMod().getModID(), this.getTexturePath() + "/" + pattern.toString().toLowerCase() + ".1")); + } + } + + public AbstractMod getMod() { + return ExtraTrees.instance; + } +} diff --git a/src/main/java/binnie/extratrees/carpentry/DesignerManager.java b/src/main/java/binnie/extratrees/carpentry/DesignerManager.java new file mode 100644 index 00000000..d8c4b2df --- /dev/null +++ b/src/main/java/binnie/extratrees/carpentry/DesignerManager.java @@ -0,0 +1,36 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.carpentry; + +import java.util.Collection; +import java.util.ArrayList; +import binnie.extratrees.api.IDesignSystem; +import java.util.List; + +public class DesignerManager +{ + public static DesignerManager instance; + List systems; + + public DesignerManager() { + this.systems = new ArrayList(); + } + + public void registerDesignSystem(final IDesignSystem system) { + this.systems.add(system); + } + + public Collection getDesignSystems() { + return this.systems; + } + + public void addDesignSystem(final DesignSystem system) { + this.systems.add(system); + } + + static { + DesignerManager.instance = new DesignerManager(); + } +} diff --git a/src/main/java/binnie/extratrees/carpentry/EnumDesign.java b/src/main/java/binnie/extratrees/carpentry/EnumDesign.java new file mode 100644 index 00000000..e4411de3 --- /dev/null +++ b/src/main/java/binnie/extratrees/carpentry/EnumDesign.java @@ -0,0 +1,521 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.carpentry; + +import binnie.extratrees.api.CarpentryManager; +import java.util.ArrayList; +import java.util.List; +import binnie.extratrees.api.IDesignCategory; +import binnie.extratrees.api.ILayout; +import binnie.extratrees.api.IDesign; + +public enum EnumDesign implements IDesign +{ + Blank("Blank"), + Octagon("Octagon"), + Diamond("Diamond"), + Ringed("Ringed"), + Squared("Squared"), + Multiply("Multiply"), + Halved("Halved"), + Striped("Striped"), + ThinStriped("Thin Striped"), + Chequered("Full Chequered"), + Tiled("Full Tiled"), + ChequeredB("Chequered"), + TiledB("Tiled"), + VeryThinCorner("Very Thin Cornered"), + ThinCorner("Thin Cornered"), + Corner("Cornered"), + ThickCorner("Thick Cornered"), + Edged("Edged"), + ThinEdged("Thin Edged"), + ThinBarred("Thin Barred"), + Barred("Barred"), + ThickBarred("Thick Barred"), + Diagonal("Diagonal"), + ThickDiagonal("Thick Diagonal"), + ThinSaltire("Thin Saltire"), + Saltire("Saltire"), + ThickSaltire("Thick Saltire"), + ThinCrossed("Thin Crossed"), + Crossed("Crossed"), + ThickCrossed("Thick Crossed"), + ThinTSection("Thin T Section"), + TSection("T Section"), + ThickTSection("Thick T Section"), + ThinBarredCorner("Thin Barred Corner"), + BarredCorner("Barred Corner"), + ThickBarredCorner("Thick Barred Corner"), + ThinStripedCorner("Thin Striped Corner"), + StripedCorner("Striped Corner"), + Emblem1("Emblem 1"), + Emblem2("Emblem 2"), + Emblem3("Emblem 3"), + Emblem4("Emblem 4"), + Emblem5("Emblem 5"), + LetterA("Letter A"), + LetterB("Letter B"), + LetterC("Letter C"), + LetterD("Letter D"), + LetterE("Letter E"), + LetterF("Letter F"), + LetterG("Letter G"), + LetterH("Letter H"), + LetterI("Letter I"), + LetterJ("Letter J"), + LetterK("Letter K"), + LetterL("Letter L"), + LetterM("Letter M"), + LetterN("Letter N"), + LetterO("Letter O"), + LetterP("Letter P"), + LetterQ("Letter Q"), + LetterR("Letter R"), + LetterS("Letter S"), + LetterT("Letter T"), + LetterU("Letter U"), + LetterV("Letter V"), + LetterW("Letter W"), + LetterX("Letter X"), + LetterY("Letter Y"), + LetterZ("Letter Z"), + ThinCurvedCrossed("Thin Curved Crossed"), + ThinCurvedBarredCorner("Thin Curved Barred Corner"), + CurvedBarredCorner("Curved Barred Corner"), + ThinCurvedCorner("Thin Curved Corner"), + CurvedCorner("Curved Corner"), + ThinCurvedTSection("Thin Curved T Section"), + CurvedTSection("Curved T Section"), + BarredEnd("Barred End"), + DiagonalCorner("Diagonal Corner"), + DiagonalTSection("Diagonal T Section"), + DiagonalCurvedCorner("Diagonal Curved Corner"), + DiagonalCurvedTSection("Diagonal Curved T Section"), + OrnateBarred("Ornate Barred"), + SplitBarred("Split Barred"), + SplitBarredCorner("Split Barred Corner"), + SplitBarredTSection("Split Barred T Section"), + SplitCrossed("Split Crossed"), + SplitBarredEnd("Split Barred End"), + OrnateThinBarred("Ornate Thin Barred"), + Circle("Circle"), + Plus("Plus"), + Creeper("Creeper"), + OrnateStripedCorner("Ornate Striped Corner"), + Test("Testing Block"), + DiagonalHalved("Diagonal Halved"), + Diagonal1Edged("Cornered Diagonal"), + Diagonal2Edged("Opposite Cornered Diagonal"), + ThickDiagonal1Edged("Thick Cornered Diagonal"), + ThinBarredEnd("Thin Barred End"), + ThickBarredEnd("Thick Barred End"), + OverlappedBarred("Overlapped Barred"), + OverlappedSplitBarred("Overlapped Split Barred"); + + String name; + ILayout topPattern; + ILayout bottomPattern; + ILayout northPattern; + ILayout southPattern; + ILayout eastPattern; + ILayout westPattern; + + void setEdgePatterns(final ILayout north, final ILayout east, final ILayout south, final ILayout west) { + this.setNorthPattern(north); + this.setEastPattern(east); + this.setSouthPattern(south); + this.setWestPattern(west); + } + + void setEdgePatterns(final ILayout face) { + this.setEdgePatterns(face, face, face, face); + } + + void setupStriped(final ILayout vert) { + this.setTopPattern(vert); + this.setEdgePatterns(vert.invert(), EnumPattern.Blank.layout(true), vert, EnumPattern.Blank.layout()); + } + + void setChequered(final ILayout cheq) { + this.setAllPatterns(cheq); + this.setNorthPattern(cheq.invert()); + this.setSouthPattern(cheq.invert()); + this.setBottomPattern(cheq.invert()); + } + + void setStripedChequered(final ILayout cheq, final ILayout stripe) { + this.setAllPatterns(cheq); + this.setNorthPattern(stripe.invert()); + this.setSouthPattern(stripe.invert()); + this.setEastPattern(stripe); + this.setWestPattern(stripe); + } + + void setCornered(final ILayout corner, final ILayout edge) { + this.setTopPattern(corner); + this.setNorthPattern(EnumPattern.Blank.layout()); + this.setEastPattern(edge.flipHorizontal()); + this.setSouthPattern(edge); + this.setWestPattern(EnumPattern.Blank.layout()); + } + + void setEdged(final ILayout edge) { + this.setAllPatterns(edge); + this.setWestPattern(EnumPattern.Blank.layout()); + this.setEastPattern(EnumPattern.Blank.layout(true)); + this.northPattern = this.northPattern.flipHorizontal(); + } + + void setBarred(final ILayout bar) { + this.setAllPatterns(bar); + this.setEastPattern(EnumPattern.Blank.layout(true)); + this.setWestPattern(EnumPattern.Blank.layout(true)); + } + + void setDiagonal(final ILayout diagonal, final ILayout edged) { + this.setAllPatterns(edged); + this.setTopPattern(diagonal); + this.northPattern = this.northPattern.flipHorizontal(); + this.southPattern = this.southPattern.flipHorizontal(); + } + + void setSaltire(final ILayout saltire, final ILayout bar) { + this.setTopPattern(saltire); + this.setEdgePatterns(bar.invert()); + } + + void setCross(final ILayout saltire, final ILayout bar) { + this.setTopPattern(saltire); + this.setEdgePatterns(bar); + } + + void setTSection(final ILayout tsection, final ILayout bar) { + this.setTopPattern(tsection); + this.setEdgePatterns(bar); + this.setWestPattern(EnumPattern.Blank.layout(true)); + } + + void setBarredCorner(final ILayout corner, final ILayout bar) { + this.setTSection(corner, bar); + this.setNorthPattern(EnumPattern.Blank.layout(true)); + } + + void setStripedCorner(final ILayout corner, final ILayout striped) { + this.setCornered(corner, striped); + } + + void setLetterPattern(final ILayout letter) { + this.setAllPatterns(EnumPattern.Blank.layout(true)); + this.setTopPattern(letter); + this.setBottomPattern(EnumPattern.Blank.layout(true)); + } + + void setBarredEndPattern(final ILayout end, final ILayout bar) { + this.setAllPatterns(EnumPattern.Blank.layout(true)); + this.setTopPattern(end); + this.setWestPattern(bar); + } + + void setDiagonalCorner(final ILayout diagonal, final ILayout bar, final ILayout edged) { + this.setAllPatterns(EnumPattern.Blank.layout(true)); + this.setTopPattern(diagonal); + this.setWestPattern(bar.invert()); + this.setNorthPattern(edged.flipHorizontal()); + this.setSouthPattern(edged); + } + + void setDiagonalTSection(final ILayout diagonal, final ILayout bar, final ILayout edged) { + this.setAllPatterns(EnumPattern.Blank.layout(true)); + this.setTopPattern(diagonal); + this.setWestPattern(bar.invert()); + this.setNorthPattern(bar.invert()); + this.setEastPattern(edged.flipHorizontal()); + this.setSouthPattern(edged); + } + + private EnumDesign(final String name) { + this.topPattern = Layout.get(EnumPattern.Blank, false); + this.bottomPattern = Layout.get(EnumPattern.Blank, false); + this.northPattern = Layout.get(EnumPattern.Blank, false); + this.eastPattern = Layout.get(EnumPattern.Blank, false); + this.southPattern = Layout.get(EnumPattern.Blank, false); + this.westPattern = Layout.get(EnumPattern.Blank, false); + this.name = name; + } + + private void setAllPatterns(final ILayout layout) { + this.setTopPattern(layout); + this.setBottomPattern(layout); + this.setNorthPattern(layout); + this.setEastPattern(layout); + this.setSouthPattern(layout); + this.setWestPattern(layout); + } + + @Override + public String getName() { + return this.name; + } + + @Override + public ILayout getTopPattern() { + return this.topPattern; + } + + public void setTopPattern(final ILayout layout) { + this.setBottomPattern(this.topPattern = layout); + } + + @Override + public ILayout getBottomPattern() { + return this.bottomPattern; + } + + public void setBottomPattern(final ILayout layout) { + this.bottomPattern = layout; + } + + @Override + public ILayout getNorthPattern() { + return this.northPattern; + } + + public void setNorthPattern(final ILayout layout) { + this.northPattern = layout; + } + + @Override + public ILayout getSouthPattern() { + return this.southPattern; + } + + public void setSouthPattern(final ILayout layout) { + this.southPattern = layout; + } + + @Override + public ILayout getEastPattern() { + return this.eastPattern; + } + + public void setEastPattern(final ILayout layout) { + this.eastPattern = layout; + } + + @Override + public ILayout getWestPattern() { + return this.westPattern; + } + + public void setWestPattern(final ILayout layout) { + this.westPattern = layout; + } + + public void setName(final String name) { + this.name = name; + } + + static { + Category.Design.addDesign(EnumDesign.Blank); + Category.Design.addDesign(EnumDesign.Octagon); + Category.Design.addDesign(EnumDesign.Diamond); + Category.Design.addDesign(EnumDesign.Ringed); + Category.Design.addDesign(EnumDesign.Squared); + Category.Design.addDesign(EnumDesign.Multiply); + Category.Design.addDesign(EnumDesign.Plus); + Category.Design.addDesign(EnumDesign.Circle); + Category.Design.addDesign(EnumDesign.Emblem1); + Category.Design.addDesign(EnumDesign.Emblem2); + Category.Design.addDesign(EnumDesign.Emblem3); + Category.Design.addDesign(EnumDesign.Emblem4); + Category.Design.addDesign(EnumDesign.Emblem5); + Category.Design.addDesign(EnumDesign.Creeper); + Category.Stripes.addDesign(EnumDesign.Chequered); + Category.Stripes.addDesign(EnumDesign.ChequeredB); + Category.Stripes.addDesign(EnumDesign.Tiled); + Category.Stripes.addDesign(EnumDesign.TiledB); + Category.Stripes.addDesign(EnumDesign.Striped); + Category.Stripes.addDesign(EnumDesign.ThinStriped); + Category.Stripes.addDesign(EnumDesign.ThinStripedCorner); + Category.Stripes.addDesign(EnumDesign.StripedCorner); + Category.Stripes.addDesign(EnumDesign.OrnateStripedCorner); + Category.Edges.addDesign(EnumDesign.Halved); + Category.Edges.addDesign(EnumDesign.Corner); + Category.Edges.addDesign(EnumDesign.ThickCorner); + Category.Edges.addDesign(EnumDesign.Edged); + Category.Edges.addDesign(EnumDesign.ThinCorner); + Category.Edges.addDesign(EnumDesign.ThinEdged); + Category.Edges.addDesign(EnumDesign.VeryThinCorner); + Category.Edges.addDesign(EnumDesign.ThinCurvedCorner); + Category.Edges.addDesign(EnumDesign.CurvedCorner); + Category.Barred.addDesign(EnumDesign.ThinBarred); + Category.Barred.addDesign(EnumDesign.ThinBarredCorner); + Category.Barred.addDesign(EnumDesign.ThinTSection); + Category.Barred.addDesign(EnumDesign.ThinCrossed); + Category.Barred.addDesign(EnumDesign.ThinBarredEnd); + Category.Barred.addDesign(EnumDesign.OrnateThinBarred); + Category.Barred.addDesign(EnumDesign.Barred); + Category.Barred.addDesign(EnumDesign.BarredCorner); + Category.Barred.addDesign(EnumDesign.TSection); + Category.Barred.addDesign(EnumDesign.Crossed); + Category.Barred.addDesign(EnumDesign.BarredEnd); + Category.Barred.addDesign(EnumDesign.OverlappedBarred); + Category.Barred.addDesign(EnumDesign.OrnateBarred); + Category.Barred.addDesign(EnumDesign.ThickBarred); + Category.Barred.addDesign(EnumDesign.ThickBarredCorner); + Category.Barred.addDesign(EnumDesign.ThickTSection); + Category.Barred.addDesign(EnumDesign.ThickCrossed); + Category.Barred.addDesign(EnumDesign.ThickBarredEnd); + Category.Barred.addDesign(EnumDesign.ThinCurvedBarredCorner); + Category.Barred.addDesign(EnumDesign.CurvedBarredCorner); + Category.Barred.addDesign(EnumDesign.ThinCurvedTSection); + Category.Barred.addDesign(EnumDesign.CurvedTSection); + Category.Barred.addDesign(EnumDesign.ThinCurvedCrossed); + Category.Barred.addDesign(EnumDesign.SplitBarred); + Category.Barred.addDesign(EnumDesign.SplitBarredCorner); + Category.Barred.addDesign(EnumDesign.SplitBarredTSection); + Category.Barred.addDesign(EnumDesign.SplitCrossed); + Category.Barred.addDesign(EnumDesign.SplitBarredEnd); + Category.Barred.addDesign(EnumDesign.OverlappedSplitBarred); + Category.Diagonal.addDesign(EnumDesign.ThinSaltire); + Category.Diagonal.addDesign(EnumDesign.Diagonal); + Category.Diagonal.addDesign(EnumDesign.DiagonalCorner); + Category.Diagonal.addDesign(EnumDesign.DiagonalTSection); + Category.Diagonal.addDesign(EnumDesign.DiagonalCurvedCorner); + Category.Diagonal.addDesign(EnumDesign.DiagonalCurvedTSection); + Category.Diagonal.addDesign(EnumDesign.Saltire); + Category.Diagonal.addDesign(EnumDesign.ThickDiagonal); + Category.Diagonal.addDesign(EnumDesign.ThickSaltire); + Category.Diagonal.addDesign(EnumDesign.DiagonalHalved); + Category.Diagonal.addDesign(EnumDesign.Diagonal1Edged); + Category.Diagonal.addDesign(EnumDesign.Diagonal2Edged); + Category.Diagonal.addDesign(EnumDesign.ThickDiagonal1Edged); + EnumDesign.Octagon.setAllPatterns(EnumPattern.Octagon.layout()); + EnumDesign.Diamond.setAllPatterns(EnumPattern.Diamond.layout()); + EnumDesign.Ringed.setAllPatterns(EnumPattern.Ringed.layout()); + EnumDesign.Squared.setAllPatterns(EnumPattern.Squared.layout()); + EnumDesign.Multiply.setAllPatterns(EnumPattern.Multiply.layout()); + EnumDesign.ThinStriped.setupStriped(EnumPattern.ThinStriped.layout()); + EnumDesign.Striped.setupStriped(EnumPattern.Striped.layout()); + EnumDesign.Halved.setupStriped(EnumPattern.Halved.layout()); + EnumDesign.Chequered.setChequered(EnumPattern.Chequered.layout()); + EnumDesign.Tiled.setChequered(EnumPattern.Tiled.layout()); + EnumDesign.ChequeredB.setStripedChequered(EnumPattern.Chequered.layout(), EnumPattern.Halved.layout()); + EnumDesign.TiledB.setStripedChequered(EnumPattern.Tiled.layout(), EnumPattern.Striped.layout()); + EnumDesign.VeryThinCorner.setCornered(EnumPattern.VeryThinCorner.layout(), EnumPattern.ThinEdged.layout()); + EnumDesign.ThinCorner.setCornered(EnumPattern.ThinCorner.layout(), EnumPattern.Edged.layout()); + EnumDesign.Corner.setCornered(EnumPattern.Corner.layout(), EnumPattern.Halved.layout()); + EnumDesign.ThickCorner.setCornered(EnumPattern.ThickCorner.layout(), EnumPattern.Edged.layout(true).flipHorizontal()); + EnumDesign.ThinCurvedCorner.setCornered(EnumPattern.ThinCurvedCorner.layout(), EnumPattern.Edged.layout()); + EnumDesign.CurvedCorner.setCornered(EnumPattern.CurvedCorner.layout(), EnumPattern.Halved.layout()); + EnumDesign.Edged.setEdged(EnumPattern.Edged.layout()); + EnumDesign.ThinEdged.setEdged(EnumPattern.ThinEdged.layout()); + EnumDesign.ThinBarred.setBarred(EnumPattern.ThinBarred.layout()); + EnumDesign.Barred.setBarred(EnumPattern.Barred.layout()); + EnumDesign.ThickBarred.setBarred(EnumPattern.ThickBarred.layout()); + EnumDesign.Diagonal.setDiagonal(EnumPattern.Diagonal.layout(), EnumPattern.Edged.layout()); + EnumDesign.ThickDiagonal.setDiagonal(EnumPattern.ThickDiagonal.layout(), EnumPattern.Halved.layout()); + EnumDesign.ThinSaltire.setSaltire(EnumPattern.ThinSaltire.layout(), EnumPattern.ThickBarred.layout()); + EnumDesign.Saltire.setSaltire(EnumPattern.Saltire.layout(), EnumPattern.Barred.layout()); + EnumDesign.ThickSaltire.setSaltire(EnumPattern.ThickSaltire.layout(), EnumPattern.ThinBarred.layout()); + EnumDesign.ThinCrossed.setCross(EnumPattern.ThinCrossed.layout(), EnumPattern.ThinBarred.layout()); + EnumDesign.Crossed.setCross(EnumPattern.Crossed.layout(), EnumPattern.Barred.layout()); + EnumDesign.ThickCrossed.setCross(EnumPattern.ThickCrossed.layout(), EnumPattern.ThickBarred.layout()); + EnumDesign.ThinCurvedCrossed.setCross(EnumPattern.ThinCurvedCrossed.layout(), EnumPattern.ThinBarred.layout()); + EnumDesign.ThinTSection.setTSection(EnumPattern.ThinTSection.layout(), EnumPattern.ThinBarred.layout()); + EnumDesign.TSection.setTSection(EnumPattern.TSection.layout(), EnumPattern.Barred.layout()); + EnumDesign.ThickTSection.setTSection(EnumPattern.ThickTSection.layout(), EnumPattern.ThickBarred.layout()); + EnumDesign.ThinCurvedTSection.setTSection(EnumPattern.ThinCurvedTSection.layout(), EnumPattern.ThinBarred.layout()); + EnumDesign.CurvedTSection.setTSection(EnumPattern.CurvedTSection.layout(), EnumPattern.Barred.layout()); + EnumDesign.ThinBarredCorner.setBarredCorner(EnumPattern.ThinBarredCorner.layout(), EnumPattern.ThinBarred.layout()); + EnumDesign.BarredCorner.setBarredCorner(EnumPattern.BarredCorner.layout(), EnumPattern.Barred.layout()); + EnumDesign.ThickBarredCorner.setBarredCorner(EnumPattern.ThickBarredCorner.layout(), EnumPattern.ThickBarred.layout()); + EnumDesign.ThinCurvedBarredCorner.setBarredCorner(EnumPattern.ThinCurvedBarredCorner.layout(), EnumPattern.ThinBarred.layout()); + EnumDesign.CurvedBarredCorner.setBarredCorner(EnumPattern.BarredCurvedCorner.layout(), EnumPattern.Barred.layout()); + EnumDesign.ThinStripedCorner.setStripedCorner(EnumPattern.ThinStripedCorner.layout(), EnumPattern.ThinStriped.layout()); + EnumDesign.StripedCorner.setStripedCorner(EnumPattern.StripedCorner.layout(), EnumPattern.Striped.layout()); + EnumDesign.OrnateStripedCorner.setStripedCorner(EnumPattern.OrnateStripedCorner.layout(), EnumPattern.ThinStriped.layout()); + EnumDesign.Emblem1.setAllPatterns(EnumPattern.Emblem1.layout()); + EnumDesign.Emblem2.setAllPatterns(EnumPattern.Emblem2.layout()); + EnumDesign.Emblem3.setAllPatterns(EnumPattern.Emblem3.layout()); + EnumDesign.Emblem4.setAllPatterns(EnumPattern.Emblem4.layout()); + EnumDesign.Emblem5.setAllPatterns(EnumPattern.Emblem5.layout()); + EnumDesign.LetterA.setLetterPattern(EnumPattern.LetterA.layout()); + EnumDesign.LetterB.setLetterPattern(EnumPattern.LetterB.layout()); + EnumDesign.LetterF.setLetterPattern(EnumPattern.LetterF.layout()); + EnumDesign.LetterS.setLetterPattern(EnumPattern.LetterS.layout()); + EnumDesign.LetterT.setLetterPattern(EnumPattern.LetterT.layout()); + EnumDesign.BarredEnd.setBarredEndPattern(EnumPattern.BarredEnd.layout(), EnumPattern.Barred.layout()); + EnumDesign.DiagonalCorner.setDiagonalCorner(EnumPattern.DiagonalCorner.layout(), EnumPattern.Barred.layout(), EnumPattern.Edged.layout()); + EnumDesign.DiagonalTSection.setDiagonalTSection(EnumPattern.DiagonalTSection.layout(), EnumPattern.Barred.layout(), EnumPattern.Edged.layout()); + EnumDesign.DiagonalCurvedCorner.setDiagonalCorner(EnumPattern.DiagonalCurvedCorner.layout(), EnumPattern.Barred.layout(), EnumPattern.Edged.layout()); + EnumDesign.DiagonalCurvedTSection.setDiagonalTSection(EnumPattern.DiagonalCurvedTSection.layout(), EnumPattern.Barred.layout(), EnumPattern.Edged.layout()); + EnumDesign.OrnateBarred.setBarred(EnumPattern.OrnateBarred.layout()); + EnumDesign.OrnateThinBarred.setBarred(EnumPattern.OrnateThinBarred.layout()); + EnumDesign.SplitBarred.setBarred(EnumPattern.SplitBarred.layout()); + EnumDesign.SplitBarredCorner.setBarredCorner(EnumPattern.SplitBarredCorner.layout(), EnumPattern.SplitBarred.layout()); + EnumDesign.SplitBarredTSection.setTSection(EnumPattern.SplitBarredTSection.layout(), EnumPattern.SplitBarred.layout()); + EnumDesign.SplitCrossed.setCross(EnumPattern.SplitCrossed.layout(), EnumPattern.SplitBarred.layout()); + EnumDesign.SplitBarredEnd.setBarredEndPattern(EnumPattern.SplitBarredEnd.layout(), EnumPattern.SplitBarred.layout()); + EnumDesign.Circle.setAllPatterns(EnumPattern.Circle.layout()); + EnumDesign.Plus.setAllPatterns(EnumPattern.Plus.layout()); + EnumDesign.Creeper.setAllPatterns(EnumPattern.Blank.layout(true)); + EnumDesign.Creeper.setTopPattern(EnumPattern.Creeper.layout()); + EnumDesign.DiagonalHalved.setTopPattern(EnumPattern.DiagonalHalved.layout()); + EnumDesign.DiagonalHalved.setEdgePatterns(EnumPattern.Blank.layout(), EnumPattern.Blank.layout(true), EnumPattern.Blank.layout(true), EnumPattern.Blank.layout()); + EnumDesign.Diagonal1Edged.setTopPattern(EnumPattern.Diagonal1Edged.layout()); + EnumDesign.Diagonal1Edged.setEdgePatterns(EnumPattern.Edged.layout().flipHorizontal(), EnumPattern.Blank.layout(true), EnumPattern.Blank.layout(true), EnumPattern.Edged.layout()); + EnumDesign.Diagonal2Edged.setTopPattern(EnumPattern.Diagonal2Edged.layout()); + EnumDesign.Diagonal2Edged.setEdgePatterns(EnumPattern.Edged.layout(), EnumPattern.Edged.layout().flipHorizontal(), EnumPattern.Edged.layout(), EnumPattern.Edged.layout().flipHorizontal()); + EnumDesign.ThickDiagonal1Edged.setTopPattern(EnumPattern.ThickDiagonal1Edged.layout()); + EnumDesign.ThickDiagonal1Edged.setEdgePatterns(EnumPattern.Halved.layout().flipHorizontal(), EnumPattern.Blank.layout(true), EnumPattern.Blank.layout(true), EnumPattern.Halved.layout()); + EnumDesign.ThickBarredEnd.setBarredEndPattern(EnumPattern.ThickBarredEnd.layout(), EnumPattern.ThickBarred.layout()); + EnumDesign.ThinBarredEnd.setBarredEndPattern(EnumPattern.ThinBarredEnd.layout(), EnumPattern.ThinBarred.layout()); + EnumDesign.OverlappedSplitBarred.setAllPatterns(EnumPattern.SplitBarred.layout()); + EnumDesign.OverlappedSplitBarred.setTopPattern(EnumPattern.OverlappedSplitBarred.layout()); + EnumDesign.OverlappedBarred.setAllPatterns(EnumPattern.Barred.layout()); + EnumDesign.OverlappedBarred.setTopPattern(EnumPattern.OverlappedBarred.layout()); + } + + enum Category implements IDesignCategory + { + Design("Designs & Emblems"), + Stripes("Squares & Stripes"), + Edges("Edges"), + Barred("Bars"), + Letters("Letters"), + Diagonal("Diagonals"); + + String name; + List designs; + + private Category(final String name) { + this.designs = new ArrayList(); + this.name = name; + CarpentryManager.carpentryInterface.registerDesignCategory(this); + } + + @Override + public String getName() { + return this.name; + } + + @Override + public List getDesigns() { + return this.designs; + } + + @Override + public void addDesign(final IDesign design) { + this.designs.add(design); + } + + @Override + public String getId() { + return this.toString().toLowerCase(); + } + } +} diff --git a/src/main/java/binnie/extratrees/carpentry/EnumPattern.java b/src/main/java/binnie/extratrees/carpentry/EnumPattern.java new file mode 100644 index 00000000..9802bded --- /dev/null +++ b/src/main/java/binnie/extratrees/carpentry/EnumPattern.java @@ -0,0 +1,407 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.carpentry; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import binnie.extratrees.api.IDesignSystem; +import binnie.extratrees.api.ILayout; +import binnie.extratrees.api.IPattern; + +public enum EnumPattern implements IPattern +{ + Blank, + Octagon, + Diamond, + Ringed, + Squared, + Multiply, + Circle, + Plus, + Creeper, + Creeper2, + Creeper3, + Creeper4, + Halved, + Halved2, + Striped, + Striped2, + ThinStriped, + ThinStriped2, + Chequered, + Tiled, + VeryThinCorner, + VeryThinCorner2, + VeryThinCorner3, + VeryThinCorner4, + ThinCorner, + ThinCorner2, + ThinCorner3, + ThinCorner4, + Corner, + Corner2, + Corner3, + Corner4, + ThickCorner, + ThickCorner2, + ThickCorner3, + ThickCorner4, + ThinCurvedCorner, + ThinCurvedCorner2, + ThinCurvedCorner3, + ThinCurvedCorner4, + CurvedCorner, + CurvedCorner2, + CurvedCorner3, + CurvedCorner4, + Edged, + Edged2, + Edged3, + Edged4, + ThinEdged, + ThinEdged2, + ThinEdged3, + ThinEdged4, + ThinBarred, + ThinBarred2, + Barred, + Barred2, + ThickBarred, + ThickBarred2, + BarredEnd, + BarredEnd2, + BarredEnd3, + BarredEnd4, + OrnateBarred, + OrnateBarred2, + OrnateThinBarred, + OrnateThinBarred2, + SplitBarred, + SplitBarred2, + SplitBarredCorner, + SplitBarredCorner2, + SplitBarredCorner3, + SplitBarredCorner4, + SplitBarredTSection, + SplitBarredTSection2, + SplitBarredTSection3, + SplitBarredTSection4, + SplitCrossed, + SplitBarredEnd, + SplitBarredEnd2, + SplitBarredEnd3, + SplitBarredEnd4, + Diagonal, + Diagonal2, + ThickDiagonal, + ThickDiagonal2, + DiagonalCorner, + DiagonalCorner2, + DiagonalCorner3, + DiagonalCorner4, + DiagonalTSection, + DiagonalTSection2, + DiagonalTSection3, + DiagonalTSection4, + DiagonalCurvedCorner, + DiagonalCurvedCorner2, + DiagonalCurvedCorner3, + DiagonalCurvedCorner4, + DiagonalCurvedTSection, + DiagonalCurvedTSection2, + DiagonalCurvedTSection3, + DiagonalCurvedTSection4, + DiagonalStriped, + DiagonalStriped2, + ThinDiagonalStriped, + ThinDiagonalStriped2, + ThinSaltire, + Saltire, + ThickSaltire, + ThinCrossed, + Crossed, + ThickCrossed, + ThinCurvedCrossed, + ThinTSection, + ThinTSection2, + ThinTSection3, + ThinTSection4, + TSection, + TSection2, + TSection3, + TSection4, + ThickTSection, + ThickTSection2, + ThickTSection3, + ThickTSection4, + ThinCurvedTSection, + ThinCurvedTSection2, + ThinCurvedTSection3, + ThinCurvedTSection4, + CurvedTSection, + CurvedTSection2, + CurvedTSection3, + CurvedTSection4, + ThinBarredCorner, + ThinBarredCorner2, + ThinBarredCorner3, + ThinBarredCorner4, + BarredCorner, + BarredCorner2, + BarredCorner3, + BarredCorner4, + ThickBarredCorner, + ThickBarredCorner2, + ThickBarredCorner3, + ThickBarredCorner4, + ThinCurvedBarredCorner, + ThinCurvedBarredCorner2, + ThinCurvedBarredCorner3, + ThinCurvedBarredCorner4, + BarredCurvedCorner, + BarredCurvedCorner2, + BarredCurvedCorner3, + BarredCurvedCorner4, + ThinStripedCorner, + ThinStripedCorner2, + ThinStripedCorner3, + ThinStripedCorner4, + StripedCorner, + StripedCorner2, + StripedCorner3, + StripedCorner4, + OrnateStripedCorner, + OrnateStripedCorner2, + OrnateStripedCorner3, + OrnateStripedCorner4, + Emblem1, + Emblem2, + Emblem3, + Emblem4, + Emblem5, + LetterA, + LetterA2, + LetterA3, + LetterA4, + LetterB, + LetterB2, + LetterB3, + LetterB4, + LetterF, + LetterF2, + LetterF3, + LetterF4, + LetterS, + LetterS2, + LetterS3, + LetterS4, + LetterT, + LetterT2, + LetterT3, + LetterT4, + DiagonalHalved, + DiagonalHalved2, + Diagonal1Edged, + Diagonal1Edged2, + Diagonal1Edged3, + Diagonal1Edged4, + Diagonal2Edged, + Diagonal2Edged2, + ThickDiagonal1Edged, + ThickDiagonal1Edged2, + ThickDiagonal1Edged3, + ThickDiagonal1Edged4, + ThinBarredEnd, + ThinBarredEnd2, + ThinBarredEnd3, + ThinBarredEnd4, + ThickBarredEnd, + ThickBarredEnd2, + ThickBarredEnd3, + ThickBarredEnd4, + OverlappedSplitBarred, + OverlappedSplitBarred2, + OverlappedBarred, + OverlappedBarred2; + + ILayout leftRotation; + ILayout horizontalFlip; + + private EnumPattern() { + this.leftRotation = Layout.get(this, false); + this.horizontalFlip = Layout.get(this, false); + } + + static void setupStripedPattern(final EnumPattern vert, final EnumPattern hori) { + vert.setLeftRotation(hori, true); + hori.setLeftRotation(vert, false); + vert.setHorizontalFlip(vert, true); + } + + static void setupChequeredPattern(final EnumPattern cheq) { + cheq.setLeftRotation(cheq, true); + cheq.setHorizontalFlip(cheq, true); + } + + static void setupCornerPattern(final EnumPattern tl, final EnumPattern tr, final EnumPattern br, final EnumPattern bl) { + tl.setLeftRotation(bl, false); + tr.setLeftRotation(tl, false); + br.setLeftRotation(tr, false); + bl.setLeftRotation(br, false); + tl.setHorizontalFlip(tr, false); + bl.setHorizontalFlip(br, false); + } + + static void setupInvert2Rot(final EnumPattern a, final EnumPattern b) { + a.setLeftRotation(b, true); + b.setLeftRotation(a, false); + a.setHorizontalFlip(b, false); + } + + static void set2Rotation(final EnumPattern a, final EnumPattern b) { + a.setLeftRotation(b, false); + b.setLeftRotation(a, false); + a.setHorizontalFlip(b, false); + } + + static void setupBarredPattern(final EnumPattern vert, final EnumPattern hori) { + vert.setLeftRotation(hori, false); + hori.setLeftRotation(vert, false); + } + + static void setupEdgedPattern(final EnumPattern l, final EnumPattern t, final EnumPattern r, final EnumPattern b) { + l.setLeftRotation(b, false); + t.setLeftRotation(l, false); + r.setLeftRotation(t, false); + b.setLeftRotation(r, false); + l.setHorizontalFlip(r, false); + } + + static void setupDiagonalPattern(final EnumPattern a, final EnumPattern b) { + a.setLeftRotation(b, false); + b.setLeftRotation(a, false); + a.setHorizontalFlip(b, false); + } + + static void setupBarredPattern(final EnumPattern l, final EnumPattern t, final EnumPattern r, final EnumPattern b) { + l.setLeftRotation(b, false); + t.setLeftRotation(l, false); + r.setLeftRotation(t, false); + b.setLeftRotation(r, false); + l.setHorizontalFlip(r, false); + } + + static void setupTSectionPattern(final EnumPattern l, final EnumPattern t, final EnumPattern r, final EnumPattern b) { + setupEdgedPattern(l, t, r, b); + } + + @Override + public IIcon getPrimaryIcon(final IDesignSystem system) { + return system.getPrimaryIcon(this); + } + + private static void setupRotation(final EnumPattern t, final EnumPattern r, final EnumPattern b, final EnumPattern l) { + setupEdgedPattern(l, t, r, b); + } + + private void setHorizontalFlip(final EnumPattern pattern, final boolean inverted) { + this.horizontalFlip = Layout.get(pattern, inverted); + pattern.horizontalFlip = Layout.get(this, inverted); + } + + @Override + public IIcon getSecondaryIcon(final IDesignSystem system) { + return system.getSecondaryIcon(this); + } + + @Override + public ILayout getRotation() { + return this.leftRotation; + } + + @Override + public ILayout getHorizontalFlip() { + return this.horizontalFlip; + } + + protected void setLeftRotation(final EnumPattern pattern, final boolean inverted) { + this.leftRotation = Layout.get(pattern, inverted); + } + + @Override + public void registerIcons(final IIconRegister register) { + } + + public ILayout layout() { + return this.layout(false); + } + + public ILayout layout(final boolean invert) { + return Layout.get(this, invert); + } + + static { + setupStripedPattern(EnumPattern.ThinStriped, EnumPattern.ThinStriped2); + setupStripedPattern(EnumPattern.Striped, EnumPattern.Striped2); + setupStripedPattern(EnumPattern.Halved, EnumPattern.Halved2); + setupChequeredPattern(EnumPattern.Chequered); + setupChequeredPattern(EnumPattern.Tiled); + setupCornerPattern(EnumPattern.VeryThinCorner, EnumPattern.VeryThinCorner2, EnumPattern.VeryThinCorner3, EnumPattern.VeryThinCorner4); + setupCornerPattern(EnumPattern.ThinCorner, EnumPattern.ThinCorner2, EnumPattern.ThinCorner3, EnumPattern.ThinCorner4); + setupCornerPattern(EnumPattern.Corner, EnumPattern.Corner2, EnumPattern.Corner3, EnumPattern.Corner4); + setupCornerPattern(EnumPattern.ThickCorner, EnumPattern.ThickCorner2, EnumPattern.ThickCorner3, EnumPattern.ThickCorner4); + setupCornerPattern(EnumPattern.ThinCurvedCorner, EnumPattern.ThinCurvedCorner2, EnumPattern.ThinCurvedCorner3, EnumPattern.ThinCurvedCorner4); + setupCornerPattern(EnumPattern.CurvedCorner, EnumPattern.CurvedCorner2, EnumPattern.CurvedCorner3, EnumPattern.CurvedCorner4); + setupBarredPattern(EnumPattern.BarredEnd, EnumPattern.BarredEnd2, EnumPattern.BarredEnd3, EnumPattern.BarredEnd4); + setupEdgedPattern(EnumPattern.ThinEdged, EnumPattern.ThinEdged2, EnumPattern.ThinEdged3, EnumPattern.ThinEdged4); + setupEdgedPattern(EnumPattern.Edged, EnumPattern.Edged2, EnumPattern.Edged3, EnumPattern.Edged4); + setupBarredPattern(EnumPattern.ThinBarred, EnumPattern.ThinBarred2); + setupBarredPattern(EnumPattern.Barred, EnumPattern.Barred2); + setupBarredPattern(EnumPattern.ThickBarred, EnumPattern.ThickBarred2); + setupDiagonalPattern(EnumPattern.Diagonal, EnumPattern.Diagonal2); + setupDiagonalPattern(EnumPattern.ThickDiagonal, EnumPattern.ThickDiagonal2); + setupTSectionPattern(EnumPattern.ThinTSection, EnumPattern.ThinTSection2, EnumPattern.ThinTSection3, EnumPattern.ThinTSection4); + setupTSectionPattern(EnumPattern.TSection, EnumPattern.TSection2, EnumPattern.TSection3, EnumPattern.TSection4); + setupTSectionPattern(EnumPattern.ThickTSection, EnumPattern.ThickTSection2, EnumPattern.ThickTSection3, EnumPattern.ThickTSection4); + setupTSectionPattern(EnumPattern.ThinCurvedTSection, EnumPattern.ThinCurvedTSection2, EnumPattern.ThinCurvedTSection3, EnumPattern.ThinCurvedTSection4); + setupTSectionPattern(EnumPattern.CurvedTSection, EnumPattern.CurvedTSection2, EnumPattern.CurvedTSection3, EnumPattern.CurvedTSection4); + setupCornerPattern(EnumPattern.ThinBarredCorner, EnumPattern.ThinBarredCorner2, EnumPattern.ThinBarredCorner3, EnumPattern.ThinBarredCorner4); + setupCornerPattern(EnumPattern.BarredCorner, EnumPattern.BarredCorner2, EnumPattern.BarredCorner3, EnumPattern.BarredCorner4); + setupCornerPattern(EnumPattern.ThickBarredCorner, EnumPattern.ThickBarredCorner2, EnumPattern.ThickBarredCorner3, EnumPattern.ThickBarredCorner4); + setupCornerPattern(EnumPattern.ThinCurvedBarredCorner, EnumPattern.ThinCurvedBarredCorner2, EnumPattern.ThinCurvedBarredCorner3, EnumPattern.ThinCurvedBarredCorner4); + setupCornerPattern(EnumPattern.BarredCurvedCorner, EnumPattern.BarredCurvedCorner2, EnumPattern.BarredCurvedCorner3, EnumPattern.BarredCurvedCorner4); + setupCornerPattern(EnumPattern.ThinStripedCorner, EnumPattern.ThinStripedCorner2, EnumPattern.ThinStripedCorner3, EnumPattern.ThinStripedCorner4); + setupCornerPattern(EnumPattern.StripedCorner, EnumPattern.StripedCorner2, EnumPattern.StripedCorner3, EnumPattern.StripedCorner4); + setupCornerPattern(EnumPattern.OrnateStripedCorner, EnumPattern.OrnateStripedCorner2, EnumPattern.OrnateStripedCorner3, EnumPattern.OrnateStripedCorner4); + setupRotation(EnumPattern.LetterA, EnumPattern.LetterA2, EnumPattern.LetterA3, EnumPattern.LetterA4); + setupRotation(EnumPattern.LetterB, EnumPattern.LetterB2, EnumPattern.LetterB3, EnumPattern.LetterB4); + setupRotation(EnumPattern.LetterF, EnumPattern.LetterF2, EnumPattern.LetterF3, EnumPattern.LetterF4); + setupRotation(EnumPattern.LetterS, EnumPattern.LetterS2, EnumPattern.LetterS3, EnumPattern.LetterS4); + setupRotation(EnumPattern.LetterT, EnumPattern.LetterT2, EnumPattern.LetterT3, EnumPattern.LetterT4); + setupEdgedPattern(EnumPattern.DiagonalCorner, EnumPattern.DiagonalCorner2, EnumPattern.DiagonalCorner3, EnumPattern.DiagonalCorner4); + setupCornerPattern(EnumPattern.DiagonalTSection, EnumPattern.DiagonalTSection2, EnumPattern.DiagonalTSection3, EnumPattern.DiagonalTSection4); + setupEdgedPattern(EnumPattern.DiagonalCurvedCorner, EnumPattern.DiagonalCurvedCorner2, EnumPattern.DiagonalCurvedCorner3, EnumPattern.DiagonalCurvedCorner4); + setupCornerPattern(EnumPattern.DiagonalCurvedTSection, EnumPattern.DiagonalCurvedTSection2, EnumPattern.DiagonalCurvedTSection3, EnumPattern.DiagonalCurvedTSection4); + setupBarredPattern(EnumPattern.OrnateBarred, EnumPattern.OrnateBarred2); + setupBarredPattern(EnumPattern.OrnateThinBarred, EnumPattern.OrnateThinBarred2); + setupBarredPattern(EnumPattern.SplitBarred, EnumPattern.SplitBarred2); + setupCornerPattern(EnumPattern.SplitBarredCorner, EnumPattern.SplitBarredCorner2, EnumPattern.SplitBarredCorner3, EnumPattern.SplitBarredCorner4); + setupTSectionPattern(EnumPattern.SplitBarredTSection, EnumPattern.SplitBarredTSection2, EnumPattern.SplitBarredTSection3, EnumPattern.SplitBarredTSection4); + setupBarredPattern(EnumPattern.SplitBarredEnd, EnumPattern.SplitBarredEnd2, EnumPattern.SplitBarredEnd3, EnumPattern.SplitBarredEnd4); + setupRotation(EnumPattern.Creeper, EnumPattern.Creeper2, EnumPattern.Creeper3, EnumPattern.Creeper4); + setupDiagonalPattern(EnumPattern.DiagonalStriped, EnumPattern.DiagonalStriped2); + setupDiagonalPattern(EnumPattern.ThinDiagonalStriped, EnumPattern.ThinDiagonalStriped2); + setupCornerPattern(EnumPattern.Diagonal1Edged, EnumPattern.Diagonal1Edged2, EnumPattern.Diagonal1Edged3, EnumPattern.Diagonal1Edged4); + setupCornerPattern(EnumPattern.ThickDiagonal1Edged, EnumPattern.ThickDiagonal1Edged2, EnumPattern.ThickDiagonal1Edged3, EnumPattern.ThickDiagonal1Edged4); + setupInvert2Rot(EnumPattern.DiagonalHalved, EnumPattern.DiagonalHalved2); + set2Rotation(EnumPattern.Diagonal2Edged, EnumPattern.Diagonal2Edged2); + setupBarredPattern(EnumPattern.ThinBarredEnd, EnumPattern.ThinBarredEnd2, EnumPattern.ThinBarredEnd3, EnumPattern.ThinBarredEnd4); + setupBarredPattern(EnumPattern.ThickBarredEnd, EnumPattern.ThickBarredEnd2, EnumPattern.ThickBarredEnd3, EnumPattern.ThickBarredEnd4); + EnumPattern.OverlappedBarred.setLeftRotation(EnumPattern.OverlappedBarred2, false); + EnumPattern.OverlappedBarred2.setLeftRotation(EnumPattern.OverlappedBarred, false); + EnumPattern.OverlappedSplitBarred.setLeftRotation(EnumPattern.OverlappedSplitBarred2, false); + EnumPattern.OverlappedSplitBarred2.setLeftRotation(EnumPattern.OverlappedSplitBarred, false); + } +} diff --git a/src/main/java/binnie/extratrees/carpentry/GlassType.java b/src/main/java/binnie/extratrees/carpentry/GlassType.java new file mode 100644 index 00000000..a7925b6e --- /dev/null +++ b/src/main/java/binnie/extratrees/carpentry/GlassType.java @@ -0,0 +1,110 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.carpentry; + +import binnie.botany.genetics.EnumFlowerColor; +import java.util.LinkedHashMap; +import binnie.core.block.TileEntityMetadata; +import binnie.botany.Botany; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import java.util.Map; +import binnie.extratrees.api.IDesignMaterial; + +public class GlassType implements IDesignMaterial +{ + static Map types; + String name; + int colour; + int id; + + private GlassType(final int id, final String name, final int colour) { + this.id = id; + this.name = name; + this.colour = colour; + } + + @Override + public ItemStack getStack() { + if (this.id < 128) { + return new ItemStack(Blocks.stained_glass, 1, this.id); + } + return TileEntityMetadata.getItemStack(Botany.stained, this.id - 128); + } + + @Override + public String getName() { + return this.name; + } + + @Override + public int getColour() { + return this.colour; + } + + public static int getIndex(final IDesignMaterial id) { + for (final Map.Entry entry : GlassType.types.entrySet()) { + if (entry.getValue() == id) { + return entry.getKey(); + } + } + return 0; + } + + public static IDesignMaterial get(final int id) { + return GlassType.types.get(id); + } + + public static IDesignMaterial get(final ItemStack stack) { + if (stack == null) { + return null; + } + for (final Map.Entry entry : GlassType.types.entrySet()) { + if (stack.isItemEqual(entry.getValue().getStack())) { + return entry.getValue(); + } + } + return null; + } + + static { + GlassType.types = new LinkedHashMap(); + for (final StandardColor c : StandardColor.values()) { + GlassType.types.put(c.ordinal(), new GlassType(c.ordinal(), c.name, c.colour)); + } + for (final EnumFlowerColor c2 : EnumFlowerColor.values()) { + GlassType.types.put(128 + c2.ordinal(), new GlassType(128 + c2.ordinal(), c2.getName(), c2.getColor(false))); + } + } + + private enum StandardColor + { + White("White", 16777215), + Orange("Orange", 14188339), + Magenta("Magenta", 11685080), + LightBlue("Light Blue", 6724056), + Yellow("Yellow", 15066419), + Lime("Lime", 8375321), + Pink("Pink", 15892389), + Gray("Gray", 5000268), + LightGray("Light Gray", 10066329), + Cyan("Cyan", 5013401), + Purple("Purple", 8339378), + Blue("Blue", 3361970), + Brown("Brown", 6704179), + Green("Green", 6717235), + Red("Red", 10040115), + Black("Black", 1644825); + + String name; + int colour; + + private StandardColor(final String name, final int colour) { + this.name = name; + this.colour = colour; + } + } +} diff --git a/src/main/java/binnie/extratrees/carpentry/Layout.java b/src/main/java/binnie/extratrees/carpentry/Layout.java new file mode 100644 index 00000000..16cd4cf1 --- /dev/null +++ b/src/main/java/binnie/extratrees/carpentry/Layout.java @@ -0,0 +1,82 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.carpentry; + +import net.minecraft.util.IIcon; +import binnie.extratrees.api.IDesignSystem; +import binnie.extratrees.api.IPattern; +import binnie.extratrees.api.ILayout; + +public class Layout implements ILayout +{ + IPattern pattern; + boolean inverted; + + @Override + public IPattern getPattern() { + return this.pattern; + } + + @Override + public boolean isInverted() { + return this.inverted; + } + + private Layout(final IPattern pattern, final boolean inverted) { + this.pattern = pattern; + this.inverted = inverted; + } + + private Layout(final IPattern pattern) { + this(pattern, false); + } + + ILayout newLayout(final ILayout newLayout) { + return new Layout(newLayout.getPattern(), this.inverted ^ newLayout.isInverted()); + } + + @Override + public ILayout rotateRight() { + return this.rotateLeft().rotateLeft().rotateLeft(); + } + + @Override + public ILayout rotateLeft() { + return this.newLayout(this.pattern.getRotation()); + } + + @Override + public ILayout flipHorizontal() { + return this.newLayout(this.pattern.getHorizontalFlip()); + } + + @Override + public ILayout flipVertical() { + return this.newLayout(this.pattern.getHorizontalFlip().rotateLeft().rotateLeft()); + } + + @Override + public IIcon getPrimaryIcon(final IDesignSystem system) { + return this.inverted ? this.pattern.getSecondaryIcon(system) : this.pattern.getPrimaryIcon(system); + } + + @Override + public IIcon getSecondaryIcon(final IDesignSystem system) { + return this.inverted ? this.pattern.getPrimaryIcon(system) : this.pattern.getSecondaryIcon(system); + } + + @Override + public ILayout invert() { + return new Layout(this.pattern, !this.inverted); + } + + public static ILayout get(final IPattern pattern, final boolean inverted) { + return new Layout(pattern, inverted); + } + + public static ILayout get(final IPattern pattern) { + return new Layout(pattern, false); + } +} diff --git a/src/main/java/binnie/extratrees/carpentry/ModuleCarpentry.java b/src/main/java/binnie/extratrees/carpentry/ModuleCarpentry.java new file mode 100644 index 00000000..4aafc4f5 --- /dev/null +++ b/src/main/java/binnie/extratrees/carpentry/ModuleCarpentry.java @@ -0,0 +1,112 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.carpentry; + +import binnie.extratrees.api.IDesignSystem; +import binnie.core.block.TileEntityMetadata; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraft.item.ItemStack; +import binnie.extratrees.api.IDesignMaterial; +import binnie.extratrees.api.IDesign; +import binnie.extratrees.api.CarpentryManager; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.client.IItemRenderer; +import binnie.core.block.MultipassItemRenderer; +import net.minecraft.item.Item; +import binnie.core.BinnieCore; +import net.minecraft.block.Block; +import cpw.mods.fml.common.registry.GameRegistry; +import binnie.core.block.ItemMetadata; +import binnie.extratrees.ExtraTrees; +import binnie.core.IInitializable; + +public class ModuleCarpentry implements IInitializable +{ + @Override + public void preInit() { + ExtraTrees.blockCarpentry = new BlockCarpentry(); + ExtraTrees.blockPanel = new BlockCarpentryPanel(); + ExtraTrees.blockStained = new BlockStainedDesign(); + GameRegistry.registerBlock(ExtraTrees.blockCarpentry, ItemMetadata.class, "carpentry"); + GameRegistry.registerBlock(ExtraTrees.blockPanel, ItemMetadata.class, "panel"); + GameRegistry.registerBlock(ExtraTrees.blockStained, ItemMetadata.class, "stainedglass"); + BinnieCore.proxy.registerCustomItemRenderer(Item.getItemFromBlock(ExtraTrees.blockCarpentry), new MultipassItemRenderer()); + BinnieCore.proxy.registerCustomItemRenderer(Item.getItemFromBlock(ExtraTrees.blockStained), new MultipassItemRenderer()); + MinecraftForge.EVENT_BUS.register(ExtraTrees.blockCarpentry); + BinnieCore.proxy.registerCustomItemRenderer(Item.getItemFromBlock(ExtraTrees.blockPanel), new MultipassItemRenderer()); + } + + @Override + public void init() { + } + + @Override + public void postInit() { + for (final EnumDesign design : EnumDesign.values()) { + CarpentryManager.carpentryInterface.registerDesign(design.ordinal(), design); + } + } + + public static ItemStack getItemStack(final BlockDesign block, final IDesignMaterial type1, final IDesignMaterial type2, final IDesign design) { + return getItemStack(block, block.getDesignSystem().getMaterialIndex(type1), block.getDesignSystem().getMaterialIndex(type2), CarpentryManager.carpentryInterface.getDesignIndex(design)); + } + + public static ItemStack getItemStack(final BlockDesign block, final int type1, final int type2, final int design) { + return TileEntityMetadata.getItemStack(block, getMetadata(type1, type2, design, 0, ForgeDirection.UP.ordinal())); + } + + public static ItemStack getItemStack(final BlockDesign blockC, final DesignBlock block) { + return getItemStack(blockC, block.getPrimaryMaterial(), block.getSecondaryMaterial(), block.getDesign()); + } + + public static int getMetadata(final int plank1, final int plank2, final int design, final int rotation, final int facing) { + return plank1 + (plank2 << 8) + (design << 16) + (rotation << 26) + (facing << 28); + } + + public static DesignBlock getDesignBlock(final IDesignSystem system, final int meta) { + final int plankID1 = meta & 0xFF; + final int plankID2 = meta >> 8 & 0xFF; + final int tile = meta >> 16 & 0x3FF; + final int rotation = meta >> 26 & 0x3; + final int axis = meta >> 28 & 0x7; + final IDesignMaterial type1 = system.getMaterial(plankID1); + final IDesignMaterial type2 = system.getMaterial(plankID2); + final IDesign type3 = CarpentryManager.carpentryInterface.getDesign(tile); + return new DesignBlock(system, type1, type2, type3, rotation, ForgeDirection.getOrientation(axis)); + } + + public static DesignBlock getCarpentryPanel(final IDesignSystem system, final int meta) { + final DesignBlock block = getDesignBlock(system, meta); + block.setPanel(); + return block; + } + + public static int getBlockMetadata(final IDesignSystem system, final DesignBlock block) { + final int plank1 = system.getMaterialIndex(block.getPrimaryMaterial()); + final int plank2 = system.getMaterialIndex(block.getSecondaryMaterial()); + final int design = CarpentryManager.carpentryInterface.getDesignIndex(block.getDesign()); + final int rotation = block.getRotation(); + final int facing = block.getFacing().ordinal(); + return getMetadata(plank1, plank2, design, rotation, facing); + } + + public static int getItemMetadata(final IDesignSystem system, final DesignBlock block) { + final int plank1 = system.getMaterialIndex(block.getPrimaryMaterial()); + final int plank2 = system.getMaterialIndex(block.getSecondaryMaterial()); + final int design = CarpentryManager.carpentryInterface.getDesignIndex(block.getDesign()); + return getMetadata(plank1, plank2, design, 0, ForgeDirection.UP.ordinal()); + } + + static { + CarpentryManager.carpentryInterface = new CarpentryInterface(); + } + + enum Axis + { + Y, + X, + Z; + } +} diff --git a/src/main/java/binnie/extratrees/config/ConfigurationMain.java b/src/main/java/binnie/extratrees/config/ConfigurationMain.java new file mode 100644 index 00000000..19da7dca --- /dev/null +++ b/src/main/java/binnie/extratrees/config/ConfigurationMain.java @@ -0,0 +1,21 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.config; + +import binnie.core.mod.config.PropBoolean; +import binnie.core.mod.config.ConfigProperty; +import binnie.core.mod.config.ConfigFile; + +@ConfigFile(filename = "/config/forestry/extratrees/main.conf") +public class ConfigurationMain +{ + @ConfigProperty(key = "lemon.citrus.family", comment = { "Uses reflection to convert the Forestry lemon tree to the Citrus family." }) + @PropBoolean + public static boolean alterLemon; + + static { + ConfigurationMain.alterLemon = true; + } +} diff --git a/src/main/java/binnie/extratrees/core/ExtraTreeTexture.java b/src/main/java/binnie/extratrees/core/ExtraTreeTexture.java new file mode 100644 index 00000000..44689f55 --- /dev/null +++ b/src/main/java/binnie/extratrees/core/ExtraTreeTexture.java @@ -0,0 +1,51 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.core; + +import binnie.extratrees.ExtraTrees; +import binnie.Binnie; +import binnie.core.resource.BinnieResource; +import binnie.core.resource.ResourceType; +import binnie.core.resource.IBinnieTexture; + +public enum ExtraTreeTexture implements IBinnieTexture +{ + Gui(ResourceType.GUI, "gui"), + Nursery(ResourceType.Tile, "Nursery"); + + String texture; + ResourceType type; + public static String carpenterTexture; + public static String panelerTexture; + public static String tileworkerTexture; + public static String incubatorTexture; + public static String lumbermillTexture; + public static String pressTexture; + public static String distilleryTexture; + public static String breweryTexture; + public static String infuserTexture; + + private ExtraTreeTexture(final ResourceType base, final String texture) { + this.texture = texture; + this.type = base; + } + + @Override + public BinnieResource getTexture() { + return Binnie.Resource.getPNG(ExtraTrees.instance, this.type, this.texture); + } + + static { + ExtraTreeTexture.carpenterTexture = "extratrees/carpenter_"; + ExtraTreeTexture.panelerTexture = "extratrees/paneler_"; + ExtraTreeTexture.tileworkerTexture = "extratrees/tileworker_"; + ExtraTreeTexture.incubatorTexture = "extratrees/incubator_"; + ExtraTreeTexture.lumbermillTexture = "extratrees/sawmill_"; + ExtraTreeTexture.pressTexture = "extratrees/press_"; + ExtraTreeTexture.distilleryTexture = "extratrees/distillery_"; + ExtraTreeTexture.breweryTexture = "extratrees/brewery_"; + ExtraTreeTexture.infuserTexture = "extratrees/infuser_"; + } +} diff --git a/src/main/java/binnie/extratrees/core/ExtraTreesGUID.java b/src/main/java/binnie/extratrees/core/ExtraTreesGUID.java new file mode 100644 index 00000000..525bd6d7 --- /dev/null +++ b/src/main/java/binnie/extratrees/core/ExtraTreesGUID.java @@ -0,0 +1,90 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.core; + +import net.minecraft.tileentity.TileEntity; +import binnie.craftgui.extratrees.dictionary.WindowSetSquare; +import binnie.craftgui.extratrees.dictionary.WindowLepidopteristDatabase; +import binnie.craftgui.extratrees.dictionary.WindowDistillery; +import binnie.craftgui.extratrees.dictionary.WindowBrewery; +import binnie.craftgui.extratrees.dictionary.WindowPress; +import binnie.craftgui.extratrees.kitchen.WindowBottleRack; +import binnie.craftgui.extratrees.dictionary.WindowLumbermill; +import binnie.craftgui.extratrees.dictionary.WindowWoodworker; +import binnie.craftgui.extratrees.dictionary.WindowArboristDatabase; +import net.minecraft.inventory.IInventory; +import binnie.craftgui.minecraft.Window; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.world.World; +import net.minecraft.entity.player.EntityPlayer; +import binnie.core.gui.IBinnieGUID; + +public enum ExtraTreesGUID implements IBinnieGUID +{ + Database, + Woodworker, + Lumbermill, + DatabaseNEI, + Incubator, + MothDatabase, + MothDatabaseNEI, + Press, + Brewery, + Distillery, + KitchenBottleRack, + Infuser, + SetSquare; + + @Override + public Window getWindow(final EntityPlayer player, final World world, final int x, final int y, final int z, final Side side) { + Window window = null; + final TileEntity tileEntity = world.getTileEntity(x, y, z); + IInventory object = null; + if (tileEntity instanceof IInventory) { + object = (IInventory) tileEntity; + } + switch (this) { + case Database: + case DatabaseNEI: { + window = WindowArboristDatabase.create(player, side, this != ExtraTreesGUID.Database); + break; + } + case Woodworker: { + window = WindowWoodworker.create(player, object, side); + break; + } + case Lumbermill: { + window = WindowLumbermill.create(player, object, side); + break; + } + case KitchenBottleRack: { + window = WindowBottleRack.create(player, object, side); + break; + } + case Press: { + window = WindowPress.create(player, object, side); + break; + } + case Brewery: { + window = WindowBrewery.create(player, object, side); + break; + } + case Distillery: { + window = WindowDistillery.create(player, object, side); + break; + } + case MothDatabase: + case MothDatabaseNEI: { + window = WindowLepidopteristDatabase.create(player, side, this != ExtraTreesGUID.MothDatabase); + break; + } + case SetSquare: { + window = WindowSetSquare.create(player, world, x, y, z, side); + break; + } + } + return window; + } +} diff --git a/src/main/java/binnie/extratrees/core/ModuleCore.java b/src/main/java/binnie/extratrees/core/ModuleCore.java new file mode 100644 index 00000000..d373c42a --- /dev/null +++ b/src/main/java/binnie/extratrees/core/ModuleCore.java @@ -0,0 +1,153 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.core; + +import java.util.Queue; +import java.io.IOException; + +import binnie.extratrees.carpentry.EnumPattern; +import binnie.extratrees.api.CarpentryManager; +import binnie.extratrees.api.IDesign; +import binnie.extratrees.genetics.ExtraTreeFruitGene; +import binnie.extratrees.block.PlankType; +import binnie.extratrees.api.IDesignMaterial; +import binnie.extratrees.block.ILogType; +import binnie.extratrees.genetics.ExtraTreeSpecies; +import forestry.api.arboriculture.IAlleleTreeSpecies; + +import java.util.LinkedList; +import java.io.PrintWriter; +import java.io.FileWriter; + +import binnie.core.BinnieCore; +import binnie.core.IInitializable; + +public class ModuleCore implements IInitializable +{ + @Override + public void preInit() { + } + + @Override + public void init() { + } + + @Override + public void postInit() { + if (BinnieCore.proxy.isDebug()) { + try { + final PrintWriter outputSpecies = new PrintWriter(new FileWriter("data/species.html")); + final PrintWriter outputLogs = new PrintWriter(new FileWriter("data/logs.html")); + final PrintWriter outputPlanks = new PrintWriter(new FileWriter("data/planks.html")); + final PrintWriter outputFruit = new PrintWriter(new FileWriter("data/fruit.html")); + final PrintWriter outputDesigns = new PrintWriter(new FileWriter("data/designs.html")); + final Queue speciesQueue = new LinkedList(); + for (final IAlleleTreeSpecies s : ExtraTreeSpecies.values()) { + speciesQueue.add(s); + } + final Queue logQueue = new LinkedList(); + for (final ILogType wood : ILogType.ExtraTreeLog.values()) { + logQueue.add(wood); + } + final Queue plankQueue = new LinkedList(); + for (final IDesignMaterial wood2 : PlankType.ExtraTreePlanks.values()) { + plankQueue.add(wood2); + } + final Queue fruitQueue = new LinkedList(); + for (final ExtraTreeFruitGene wood3 : ExtraTreeFruitGene.values()) { + fruitQueue.add(wood3); + } + final Queue designQueue = new LinkedList(); + for (final IDesign wood4 : CarpentryManager.carpentryInterface.getSortedDesigns()) { + designQueue.add(wood4); + } + fruitQueue.remove(ExtraTreeFruitGene.Apple); + outputSpecies.println(""); + while (!speciesQueue.isEmpty()) { + outputSpecies.println(""); + for (int i = 0; i < 4; ++i) { + final IAlleleTreeSpecies species = speciesQueue.poll(); + outputSpecies.println(""); + } + outputSpecies.println(""); + } + outputSpecies.println("
" + ((species == null) ? "" : species.getName()) + "
"); + outputLogs.println(""); + while (!logQueue.isEmpty()) { + outputLogs.println(""); + for (int i = 0; i < 4; ++i) { + final ILogType.ExtraTreeLog wood5 = (ILogType.ExtraTreeLog) logQueue.poll(); + if (wood5 == null) { + outputLogs.println(""); + } + else { + final String img = "\"""; + outputLogs.println(""); + } + } + outputLogs.println(""); + } + outputLogs.println("
" + img + " " + wood5.getName() + "
"); + outputPlanks.println(""); + while (!plankQueue.isEmpty()) { + outputPlanks.println(""); + for (int i = 0; i < 4; ++i) { + final IDesignMaterial wood2 = plankQueue.poll(); + if (wood2 == null) { + outputPlanks.println(""); + } + else { + final String img = "\"""; + outputPlanks.println(""); + } + } + outputPlanks.println(""); + } + outputPlanks.println("
" + img + " " + wood2.getName() + "
"); + outputFruit.println(""); + while (!fruitQueue.isEmpty()) { + outputFruit.println(""); + for (int i = 0; i < 4; ++i) { + final ExtraTreeFruitGene wood6 = fruitQueue.poll(); + if (wood6 == null) { + outputFruit.println(""); + } + else { + final String fruit = wood6.getNameOfFruit(); + final String img2 = "\"""; + outputFruit.println(""); + } + } + outputFruit.println(""); + } + outputFruit.println("
" + img2 + " " + wood6.getName() + "
"); + outputDesigns.println(""); + while (!designQueue.isEmpty()) { + outputDesigns.println(""); + for (int i = 0; i < 4; ++i) { + final IDesign wood4 = designQueue.poll(); + if (wood4 == null) { + outputDesigns.println(""); + } + else { + final String texture = ((EnumPattern) wood4.getTopPattern().getPattern()).toString().toLowerCase(); + final String img2 = "\"""; + outputDesigns.println(""); + } + } + outputDesigns.println(""); + } + outputDesigns.println("
" + img2 + " " + wood4.getName() + "
"); + outputSpecies.close(); + outputLogs.close(); + outputPlanks.close(); + outputFruit.close(); + outputDesigns.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/TreeGenBase.java b/src/main/java/binnie/extratrees/gen/TreeGenBase.java new file mode 100644 index 00000000..25828304 --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/TreeGenBase.java @@ -0,0 +1,78 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import java.util.Random; +import net.minecraft.world.World; +import forestry.api.world.ITreeGenData; +import forestry.api.arboriculture.ITree; +import net.minecraft.world.gen.feature.WorldGenerator; + +public class TreeGenBase extends WorldGenerator +{ + protected ITree tree; + protected ITreeGenData treeGen; + protected World world; + protected Random rand; + protected int startX; + protected int startY; + protected int startZ; + protected int girth; + protected int height; + protected int minHeight; + protected int maxHeight; + protected boolean spawnPods; + protected int minPodHeight; + + public TreeGenBase() { + this.minHeight = 4; + this.maxHeight = 80; + this.spawnPods = false; + this.minPodHeight = 3; + } + + protected final int randBetween(final int a, final int b) { + return a + this.rand.nextInt(b - a); + } + + protected final float randBetween(final float a, final float b) { + return a + this.rand.nextFloat() * (b - a); + } + + @Override + public boolean generate(final World world, final Random random, final int x, final int y, final int z) { + this.world = world; + this.startX = x; + this.startY = y; + this.startZ = z; + this.girth = this.tree.getGirth(world, x, y, z); + this.height = (int) (this.randBetween(this.getHeight()[0], this.getHeight()[1]) * this.tree.getGenome().getHeight()); + if (this.tree.canGrow(world, x, y, z, this.girth, this.height)) { + this.generate(); + return true; + } + return false; + } + + protected void generate() { + } + + protected int[] getHeight() { + return new int[] { 5, 2 }; + } + + private static class Vector + { + int x; + int y; + int z; + + public Vector(final int x, final int y, final int z) { + this.x = x; + this.y = y; + this.z = z; + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenAlder.java b/src/main/java/binnie/extratrees/gen/WorldGenAlder.java new file mode 100644 index 00000000..78176cfb --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenAlder.java @@ -0,0 +1,53 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.world.ITreeGenData; + +public class WorldGenAlder +{ + public static class CommonAlder extends WorldGenTree + { + public CommonAlder(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 1; + final float bottom = this.randBetween(1, 2); + final float width = this.height * this.randBetween(0.4f, 0.45f); + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), 0.3f * width, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.8f * width, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width, 1, this.leaf, false); + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), width - 0.4f, 1, this.leaf, false); + } + final float f5 = 0.0f; + final float h5 = leafSpawn; + leafSpawn = h5 - 1.0f; + this.generateCylinder(new Vector(f5, h5, 0.0f), 0.4f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(5, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenApple.java b/src/main/java/binnie/extratrees/gen/WorldGenApple.java new file mode 100644 index 00000000..59fa2fb7 --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenApple.java @@ -0,0 +1,112 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.arboriculture.ITree; +import forestry.api.world.ITreeGenData; + +public class WorldGenApple +{ + public static class OrchardApple extends WorldGenTree + { + public OrchardApple(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + int leafSpawn = this.height; + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 1.5f, 1, this.leaf, false); + while (leafSpawn > 2) { + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 2.5f, 1, this.leaf, false); + } + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 2.0f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(3, 6); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class SweetCrabapple extends WorldGenTree + { + public SweetCrabapple(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + int leafSpawn = this.height; + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 1.5f, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 2.5f, 1, this.leaf, false); + while (leafSpawn > 3) { + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 3.0f, 1, this.leaf, false); + } + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 3.5f, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 1.5f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(4, 4); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class FloweringCrabapple extends WorldGenTree + { + public FloweringCrabapple(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + int leafSpawn = this.height; + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 1.5f, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 3.0f, 1, this.leaf, false); + while (leafSpawn > 3) { + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 4.0f, 1, this.leaf, false); + } + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 2.0f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(3, 6); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class PrairieCrabapple extends WorldGenTree + { + public PrairieCrabapple(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + int leafSpawn = this.height; + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 1.5f, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 2.5f, 1, this.leaf, false); + while (leafSpawn > 3) { + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 3.0f, 1, this.leaf, false); + } + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 3.0f, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 2.0f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(4, 4); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenAsh.java b/src/main/java/binnie/extratrees/gen/WorldGenAsh.java new file mode 100644 index 00000000..13bdbe2d --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenAsh.java @@ -0,0 +1,45 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.world.ITreeGenData; + +public class WorldGenAsh +{ + public static class CommonAsh extends WorldGenTree + { + public CommonAsh(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 1; + final float bottom = this.randBetween(2, 3); + final float width = this.height * this.randBetween(0.35f, 0.45f); + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), 0.8f * width, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), this.randBetween(0.95f, 1.05f) * width, 1, this.leaf, false); + } + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), 0.7f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(5, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenBanana.java b/src/main/java/binnie/extratrees/gen/WorldGenBanana.java new file mode 100644 index 00000000..5a7a18cf --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenBanana.java @@ -0,0 +1,32 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.world.ITreeGenData; + +public class WorldGenBanana extends WorldGenTree +{ + public WorldGenBanana(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.bushiness = 0.9f; + this.generateTreeTrunk(this.height, this.girth); + int leafSpawn = this.height + 1; + final float width = this.height / this.randBetween(1.8f, 2.0f); + final int bottom = this.randBetween(3, 4); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 0.4f * width, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), width, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 0.9f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(6, 1); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenBeech.java b/src/main/java/binnie/extratrees/gen/WorldGenBeech.java new file mode 100644 index 00000000..eefc6b5e --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenBeech.java @@ -0,0 +1,54 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.arboriculture.ITree; + +public class WorldGenBeech +{ + public static class CommonBeech extends WorldGenTree + { + public CommonBeech(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 1; + final float bottom = this.randBetween(2, 3); + final float width = this.height * this.randBetween(0.47f, 0.5f); + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), 0.4f * width, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.8f * width, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width, 1, this.leaf, false); + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), width - 0.5f, 1, this.leaf, false); + } + final float f5 = 0.0f; + final float h5 = leafSpawn; + leafSpawn = h5 - 1.0f; + this.generateCylinder(new Vector(f5, h5, 0.0f), width - 1.0f, 1, this.leaf, false); + } + } + + public static class CopperBeech extends CommonBeech + { + public CopperBeech(final ITree tree) { + super(tree); + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenCitrus.java b/src/main/java/binnie/extratrees/gen/WorldGenCitrus.java new file mode 100644 index 00000000..d8a94c91 --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenCitrus.java @@ -0,0 +1,35 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.world.ITreeGenData; + +public class WorldGenCitrus extends WorldGenTree +{ + public WorldGenCitrus(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + int leafSpawn = this.height; + final float width = this.height / this.randBetween(1.1f, 1.5f); + final int bottom = this.randBetween(1, 2); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 0.4f * width, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 0.7f * width, 1, this.leaf, false); + while (leafSpawn > bottom) { + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), width, 1, this.leaf, false); + } + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 0.4f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.minHeight = this.randBetween(2, 3); + this.height = this.determineHeight(6, 1); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenConifer.java b/src/main/java/binnie/extratrees/gen/WorldGenConifer.java new file mode 100644 index 00000000..fe00bb7b --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenConifer.java @@ -0,0 +1,284 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.arboriculture.ITree; +import forestry.api.world.ITreeGenData; + +public class WorldGenConifer +{ + public static class WesternHemlock extends WorldGenTree + { + public WesternHemlock(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 6; + final float bottom = this.randBetween(2, 3); + float width = this.height / this.randBetween(2.0f, 2.5f); + if (width > 7.0f) { + width = 7.0f; + } + final float coneHeight = leafSpawn - bottom; + while (leafSpawn > bottom) { + float radius = 1.0f - (leafSpawn - bottom) / coneHeight; + radius *= width; + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), radius, 1, this.leaf, false); + } + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.7f * width, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), 0.4f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(7, 3); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Cypress extends WorldGenTree + { + public Cypress(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 2; + final float bottom = 1.0f; + float width = this.height * this.randBetween(0.15f, 0.2f); + if (width > 7.0f) { + width = 7.0f; + } + final float coneHeight = leafSpawn - bottom; + while (leafSpawn > bottom) { + float radius = 1.0f - (leafSpawn - bottom) / coneHeight; + radius *= width - 1.0f; + ++radius; + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), radius, 1, this.leaf, false); + } + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.7f * width, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), 0.4f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(6, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Yew extends WorldGenTree + { + public Yew(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 2; + final float bottom = this.randBetween(1, 2); + float width = this.height * this.randBetween(0.7f, 0.75f); + if (width > 7.0f) { + width = 7.0f; + } + final float coneHeight = leafSpawn - bottom; + while (leafSpawn > bottom) { + float radius = 1.0f - (leafSpawn - bottom) / coneHeight; + radius *= 2.0f - radius; + radius *= width; + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), radius, 1, this.leaf, false); + } + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.7f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(5, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Cedar extends WorldGenTree + { + public Cedar(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 3; + final float bottom = this.randBetween(2, 3); + float width = this.height * this.randBetween(0.7f, 0.75f); + if (width > 7.0f) { + width = 7.0f; + } + final float coneHeight = leafSpawn - bottom; + while (leafSpawn > bottom) { + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), this.girth, 1, this.leaf, false); + } + for (leafSpawn = this.height + 3; leafSpawn > bottom; leafSpawn += 1 + this.rand.nextInt(2)) { + float cone = 1.0f - (leafSpawn - bottom) / coneHeight; + float radius = (0.7f + this.rand.nextFloat() * 0.3f) * width; + float xOffset = (-width + this.rand.nextFloat() * 2.0f * width) / 2.0f; + float yOffset = (-width + this.rand.nextFloat() * 2.0f * width) / 2.0f; + cone *= 2.0f - cone; + xOffset *= cone; + yOffset *= cone; + radius *= cone; + if (radius < 2.0f) { + radius = 2.0f; + } + if (xOffset > radius / 2.0f) { + xOffset = radius / 2.0f; + } + if (yOffset > radius / 2.0f) { + yOffset = radius / 2.0f; + } + final float f2 = xOffset; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, yOffset), 0.7f * radius, 1, this.leaf, false); + final float f3 = xOffset; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, yOffset), radius, 1, this.leaf, false); + final float f4 = xOffset; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, yOffset), 0.5f * radius, 1, this.leaf, false); + } + final float f5 = 0.0f; + final float h5 = leafSpawn; + leafSpawn = h5 - 1.0f; + this.generateCylinder(new Vector(f5, h5, 0.0f), 0.7f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(6, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class LoblollyPine extends WorldGenTree + { + public LoblollyPine(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 2; + final float bottom = this.height * this.randBetween(0.65f, 0.7f); + float width = this.height * this.randBetween(0.25f, 0.3f); + if (width > 7.0f) { + width = 7.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), 0.6f * width, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width, 1, this.leaf, false); + } + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), 0.7f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(6, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class MonkeyPuzzle extends WorldGenTree + { + public MonkeyPuzzle(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 2; + final float bottom = this.randBetween(2, 3); + float width = this.height * this.randBetween(0.4f, 0.45f); + if (width > 7.0f) { + width = 7.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), 0.35f * width, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.55f * width, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), 0.75f * width, 1, this.leaf, false); + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), 0.9f * width, 1, this.leaf, false); + final float f5 = 0.0f; + final float h5 = leafSpawn; + leafSpawn = h5 - 1.0f; + this.generateCylinder(new Vector(f5, h5, 0.0f), 1.0f * width, 1, this.leaf, false); + final float f6 = 0.0f; + final float h6 = leafSpawn; + leafSpawn = h6 - 1.0f; + this.generateCylinder(new Vector(f6, h6, 0.0f), 0.5f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(9, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenDefault.java b/src/main/java/binnie/extratrees/gen/WorldGenDefault.java new file mode 100644 index 00000000..a13e3b71 --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenDefault.java @@ -0,0 +1,44 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import binnie.extratrees.worldgen.BlockTypeLog; +import binnie.extratrees.genetics.ExtraTreeSpecies; +import binnie.extratrees.worldgen.BlockTypeLeaf; +import binnie.extratrees.worldgen.BlockType; +import forestry.api.world.ITreeGenData; + +public class WorldGenDefault extends WorldGenTree +{ + public WorldGenDefault(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + int leafSpawn = this.height + 1; + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 1.0f, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 1.5f, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 2.9f, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 2.9f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(5, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + + @Override + public BlockType getLeaf() { + return new BlockTypeLeaf(); + } + + @Override + public BlockType getWood() { + return new BlockTypeLog(((ExtraTreeSpecies) this.treeGen.getGenome().getPrimary()).getLog()); + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenEucalyptus.java b/src/main/java/binnie/extratrees/gen/WorldGenEucalyptus.java new file mode 100644 index 00000000..4fbe9900 --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenEucalyptus.java @@ -0,0 +1,160 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import binnie.extratrees.worldgen.BlockTypeLog; +import binnie.extratrees.block.ILogType; +import forestry.api.arboriculture.ITree; +import forestry.api.world.ITreeGenData; + +public class WorldGenEucalyptus +{ + public static class SwampGum extends WorldGenTree + { + public SwampGum(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 2; + final float weakerBottm = this.randBetween(0.5f, 0.6f) * this.height; + final float bottom = this.randBetween(0.4f, 0.5f) * this.height; + float width = this.height * this.randBetween(0.15f, 0.2f); + if (width > 7.0f) { + width = 7.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), 0.4f * width, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.7f * width, 1, this.leaf, false); + this.bushiness = 0.3f; + while (leafSpawn > weakerBottm) { + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), this.randBetween(0.9f, 1.0f) * width, 1, this.leaf, false); + } + this.bushiness = 0.6f; + while (leafSpawn > bottom) { + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), this.randBetween(0.8f, 0.9f) * width, 1, this.leaf, false); + } + final float f5 = 0.0f; + final float h5 = leafSpawn; + leafSpawn = h5 - 1.0f; + this.generateCylinder(new Vector(f5, h5, 0.0f), 0.5f * width, 1, this.leaf, false); + for (int i = 0; i < 5; ++i) { + final float f6 = this.randBetween(-1, 1); + final float h6 = leafSpawn; + leafSpawn = h6 - 1.0f; + this.generateSphere(new Vector(f6, h6, this.randBetween(-1, 1)), this.randBetween(1, 2), this.leaf, false); + } + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(14, 3); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class RoseGum extends WorldGenTree + { + public RoseGum(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + final int offset = (this.girth - 1) / 2; + for (int x = 0; x < this.girth; ++x) { + for (int y = 0; y < this.girth; ++y) { + for (int i = 0; i < 2; ++i) { + this.addBlock(x - offset, i, y - offset, new BlockTypeLog(ILogType.ExtraTreeLog.Eucalyptus2), true); + } + } + } + float leafSpawn = this.height + 2; + final float bottom = this.randBetween(0.4f, 0.5f) * this.height; + float width = this.height * this.randBetween(0.05f, 0.1f); + if (width < 1.5f) { + width = 1.5f; + } + this.bushiness = 0.5f; + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), 0.4f * width, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.7f * width, 1, this.leaf, false); + while (leafSpawn > bottom) { + this.bushiness = 0.1f; + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), this.randBetween(0.9f, 1.1f) * width, 1, this.leaf, false); + } + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(9, 3); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class RainbowGum extends WorldGenTree + { + public RainbowGum(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 2; + final float bottom = this.randBetween(0.5f, 0.6f) * this.height; + float width = this.height * this.randBetween(0.15f, 0.2f); + if (width < 1.5f) { + width = 1.5f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), 0.4f * width, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.7f * width, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width, 1, this.leaf, false); + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), width - 0.5f, 1, this.leaf, false); + } + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(7, 3); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenFir.java b/src/main/java/binnie/extratrees/gen/WorldGenFir.java new file mode 100644 index 00000000..7e2182fa --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenFir.java @@ -0,0 +1,145 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.arboriculture.ITree; +import forestry.api.world.ITreeGenData; + +public class WorldGenFir +{ + public static class DouglasFir extends WorldGenTree + { + public DouglasFir(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 1; + final float patchyBottom = this.height / 2; + final float bottom = this.randBetween(3, 4); + final float width = this.height * this.randBetween(0.35f, 0.4f); + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), 0.4f * width, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.8f * width, 1, this.leaf, false); + this.bushiness = 0.1f; + while (leafSpawn > patchyBottom) { + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), this.randBetween(0.9f, 1.1f) * width, 1, this.leaf, false); + } + this.bushiness = 0.5f; + while (leafSpawn > bottom) { + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), this.randBetween(0.7f, 1.0f) * width, 1, this.leaf, false); + } + final float f5 = 0.0f; + final float h5 = leafSpawn; + leafSpawn = h5 - 1.0f; + this.generateCylinder(new Vector(f5, h5, 0.0f), 0.7f * width, 1, this.leaf, false); + final float f6 = 0.0f; + final float h6 = leafSpawn; + leafSpawn = h6 - 1.0f; + this.generateCylinder(new Vector(f6, h6, 0.0f), 0.3f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(7, 3); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class SilverFir extends WorldGenTree + { + public SilverFir(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 2; + final float bottom = this.randBetween(2, 3); + float width = this.height / this.randBetween(2.5f, 3.0f); + if (width > 7.0f) { + width = 7.0f; + } + final float coneHeight = leafSpawn - bottom; + while (leafSpawn > bottom) { + float radius = 1.0f - (leafSpawn - bottom) / coneHeight; + radius *= width; + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), radius, 1, this.leaf, false); + } + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.7f * width, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), 0.4f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(7, 3); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class BalsamFir extends WorldGenTree + { + public BalsamFir(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 2; + final float bottom = 1.0f; + float width = this.height / this.randBetween(2.0f, 2.5f); + if (width > 7.0f) { + width = 7.0f; + } + final float coneHeight = leafSpawn - bottom; + while (leafSpawn > bottom) { + float radius = 1.0f - (leafSpawn - bottom) / coneHeight; + radius *= width; + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), radius, 1, this.leaf, false); + } + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.7f * width, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), 0.4f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(6, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenHolly.java b/src/main/java/binnie/extratrees/gen/WorldGenHolly.java new file mode 100644 index 00000000..44326ebf --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenHolly.java @@ -0,0 +1,52 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.world.ITreeGenData; + +public class WorldGenHolly +{ + public static class Holly extends WorldGenTree + { + public Holly(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 1; + final float bottom = 1.0f; + float width = this.height * this.randBetween(0.4f, 0.45f); + if (width < 1.5f) { + width = 1.5f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), 0.4f * width, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.8f * width, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width, 1, this.leaf, false); + } + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), width = 1.0f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(4, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenJungle.java b/src/main/java/binnie/extratrees/gen/WorldGenJungle.java new file mode 100644 index 00000000..d27af1dc --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenJungle.java @@ -0,0 +1,355 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.arboriculture.ITree; +import forestry.api.world.ITreeGenData; + +public class WorldGenJungle +{ + public static class Brazilwood extends WorldGenTree + { + public Brazilwood(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height; + final float bottom = 1.0f; + float width = this.height * this.randBetween(0.15f, 0.2f); + if (width < 2.0f) { + width = 2.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width - 0.8f, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width, 1, this.leaf, false); + } + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(4, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Logwood extends WorldGenTree + { + public Logwood(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height; + final float bottom = this.randBetween(1, 2); + float width = this.height * this.randBetween(0.25f, 0.3f); + if (width < 2.0f) { + width = 2.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width - 1.0f, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width - 0.7f, 1, this.leaf, false); + } + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(4, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Rosewood extends WorldGenTree + { + public Rosewood(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 1; + final float bottom = this.randBetween(1, 2); + float width = this.height * this.randBetween(0.2f, 0.25f); + if (width < 2.0f) { + width = 2.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width - 1.0f, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width - 0.5f, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width, 1, this.leaf, false); + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), width - 0.7f, 1, this.leaf, false); + } + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(6, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Purpleheart extends WorldGenTree + { + public Purpleheart(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 1; + final float bottom = this.height - 3; + float width = this.height * this.randBetween(0.2f, 0.25f); + if (width < 2.0f) { + width = 2.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width - 1.0f, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width - 0.5f, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width, 1, this.leaf, false); + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), width - 0.7f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(7, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class OsangeOsange extends WorldGenTree + { + public OsangeOsange(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height; + final float bottom = this.randBetween(1, 2); + float width = this.height * this.randBetween(0.2f, 0.25f); + if (width < 2.0f) { + width = 2.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width - 1.0f, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width - 0.6f, 1, this.leaf, false); + } + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(5, 1); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class OldFustic extends WorldGenTree + { + public OldFustic(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height; + final float bottom = this.randBetween(1, 2); + float width = this.height * this.randBetween(0.25f, 0.3f); + if (width < 2.0f) { + width = 2.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width - 0.7f, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width - 0.5f, 1, this.leaf, false); + } + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(5, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Coffee extends WorldGenTree + { + public Coffee(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height; + final float bottom = 1.0f; + float width = this.height * this.randBetween(0.25f, 0.3f); + if (width < 2.0f) { + width = 2.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width - 0.5f, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width, 1, this.leaf, false); + } + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width - 0.3f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(3, 1); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class BrazilNut extends WorldGenTree + { + public BrazilNut(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 1; + final float bottom = this.height - 3; + float width = this.height * this.randBetween(0.25f, 0.3f); + if (width < 2.0f) { + width = 2.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width - 1.0f, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width - 0.5f, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width, 1, this.leaf, false); + } + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), width - 0.5f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(7, 1); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Shrub15 extends WorldGenTree + { + public Shrub15(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height; + final float bottom = 1.0f; + float width = this.height * this.randBetween(0.15f, 0.2f); + if (width < 1.5f) { + width = 1.5f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width - 0.8f, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width, 1, this.leaf, false); + } + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(4, 1); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenLazy.java b/src/main/java/binnie/extratrees/gen/WorldGenLazy.java new file mode 100644 index 00000000..aeb0ac45 --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenLazy.java @@ -0,0 +1,46 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.world.ITreeGenData; + +public class WorldGenLazy +{ + public static class Tree extends WorldGenTree + { + public Tree(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height; + final float bottom = this.height / 2 - 1; + float width = this.height * this.randBetween(0.35f, 0.4f); + if (width < 1.2) { + width = 1.55f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width - 1.0f, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width - 0.5f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(4, 1); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenMaple.java b/src/main/java/binnie/extratrees/gen/WorldGenMaple.java new file mode 100644 index 00000000..84557017 --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenMaple.java @@ -0,0 +1,63 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.world.ITreeGenData; + +public class WorldGenMaple +{ + public static class RedMaple extends WorldGenTree + { + public RedMaple(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 2; + final float bottom = this.randBetween(1, 2); + final float bottom2 = (this.height + bottom) / 2.0f; + float width = 2.0f; + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), 0.4f * width, 1, this.leaf, false); + while (leafSpawn > bottom2) { + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width - 0.4f, 1, this.leaf, false); + } + width += 0.6; + while (leafSpawn > bottom) { + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), width, 1, this.leaf, false); + final float f5 = 0.0f; + final float h5 = leafSpawn; + leafSpawn = h5 - 1.0f; + this.generateCylinder(new Vector(f5, h5, 0.0f), width - 0.4f, 1, this.leaf, false); + } + if (leafSpawn == bottom) { + final float f6 = 0.0f; + final float h6 = leafSpawn; + leafSpawn = h6 - 1.0f; + this.generateCylinder(new Vector(f6, h6, 0.0f), width - 0.6f, 1, this.leaf, false); + } + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(5, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenPalm.java b/src/main/java/binnie/extratrees/gen/WorldGenPalm.java new file mode 100644 index 00000000..d7ff492c --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenPalm.java @@ -0,0 +1,45 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.world.ITreeGenData; + +public class WorldGenPalm +{ + public static class Coconut extends WorldGenTree + { + public Coconut(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height; + float width = this.height * this.randBetween(0.35f, 0.4f); + if (width < 1.2) { + width = 1.55f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width - 1.0f, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width - 0.6f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(6, 1); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenPoplar.java b/src/main/java/binnie/extratrees/gen/WorldGenPoplar.java new file mode 100644 index 00000000..f0803004 --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenPoplar.java @@ -0,0 +1,52 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.world.ITreeGenData; + +public class WorldGenPoplar +{ + public static class Aspen extends WorldGenTree + { + public Aspen(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height; + final float bottom = this.randBetween(this.height / 2, this.height / 2 + 1) + 1; + float width = this.height * this.randBetween(0.25f, 0.35f); + if (width < 2.0f) { + width = 2.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), 0.5f * width, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), this.randBetween(0.9f, 1.1f) * width, 1, this.leaf, false); + } + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), 0.8f * width, 1, this.leaf, false); + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), 0.4f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(5, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenPrune.java b/src/main/java/binnie/extratrees/gen/WorldGenPrune.java new file mode 100644 index 00000000..43abadc3 --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenPrune.java @@ -0,0 +1,35 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.world.ITreeGenData; + +public class WorldGenPrune extends WorldGenTree +{ + public WorldGenPrune(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + int leafSpawn = this.height; + final float width = this.height / this.randBetween(1.7f, 2.1f); + final int bottom = this.randBetween(2, 3); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 0.4f * width, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 0.7f * width, 1, this.leaf, false); + while (leafSpawn > bottom) { + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), width, 1, this.leaf, false); + } + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 0.6f * width, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 0.3f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(6, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenShrub.java b/src/main/java/binnie/extratrees/gen/WorldGenShrub.java new file mode 100644 index 00000000..0fe42b99 --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenShrub.java @@ -0,0 +1,47 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.arboriculture.ITree; + +public class WorldGenShrub +{ + public static class Shrub extends WorldGenTree + { + public Shrub(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + float leafSpawn = this.height; + float width = this.height * this.randBetween(0.7f, 0.9f); + if (width < 1.5f) { + width = 1.5f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), 0.4f * width, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.8f * width, 1, this.leaf, false); + while (leafSpawn >= 0.0f) { + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width, 1, this.leaf, false); + } + } + + @Override + public void preGenerate() { + this.minHeight = 1; + this.height = this.determineHeight(1, 1); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenSorbus.java b/src/main/java/binnie/extratrees/gen/WorldGenSorbus.java new file mode 100644 index 00000000..ba8fe8a8 --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenSorbus.java @@ -0,0 +1,78 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.arboriculture.ITree; +import forestry.api.world.ITreeGenData; + +public class WorldGenSorbus +{ + public static class Whitebeam extends WorldGenTree + { + public Whitebeam(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + int leafSpawn = this.height + 1; + final float bottom = this.randBetween(2, 3); + final float width = this.height * this.randBetween(0.5f, 0.6f); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 0.4f * width, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 0.6f * width, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 0.8f * width, 1, this.leaf, false); + while (leafSpawn > bottom) { + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), this.randBetween(0.95f, 1.05f) * width, 1, this.leaf, false); + } + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 0.7f * width, 1, this.leaf, false); + } + } + + public static class Rowan extends WorldGenTree + { + public Rowan(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + int leafSpawn = this.height + 1; + final float bottom = this.randBetween(2, 3); + final float width = this.height * this.randBetween(0.5f, 0.6f); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 0.5f * width, 1, this.leaf, false); + while (leafSpawn > bottom) { + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), this.randBetween(0.95f, 1.05f) * width, 1, this.leaf, false); + } + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 0.7f * width, 1, this.leaf, false); + } + } + + public static class ServiceTree extends WorldGenTree + { + public ServiceTree(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + int leafSpawn = this.height + 1; + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 1.0f, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 1.5f, 1, this.leaf, false); + while (leafSpawn > 2) { + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 2.4f + this.rand.nextFloat() * 0.7f, 1, this.leaf, false); + } + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 2.9f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(8, 6); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenSpruce.java b/src/main/java/binnie/extratrees/gen/WorldGenSpruce.java new file mode 100644 index 00000000..0e8c8423 --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenSpruce.java @@ -0,0 +1,160 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.arboriculture.ITree; +import forestry.api.world.ITreeGenData; + +public class WorldGenSpruce +{ + public static class GiantSpruce extends WorldGenTree + { + public GiantSpruce(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 3; + final float bottom = this.randBetween(3, 4); + final float width = this.height / this.randBetween(2.5f, 3.0f); + final float coneHeight = leafSpawn - bottom; + while (leafSpawn > bottom) { + float radius = 1.0f - (leafSpawn - bottom) / coneHeight; + radius = 0.15f + 0.85f * radius; + radius *= width; + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), radius, 1, this.leaf, false); + } + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.7f * width, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), 0.4f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(15, 4); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class AlpineSpruce extends WorldGenTree + { + public AlpineSpruce(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 5; + final float bottom = this.randBetween(2, 3); + final float width = this.height / this.randBetween(2.0f, 2.5f); + final float coneHeight = leafSpawn - bottom; + leafSpawn -= 2.0f; + while (leafSpawn > bottom) { + float radius = 1.0f - (leafSpawn - bottom) / coneHeight; + radius *= radius; + radius *= width; + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), radius, 1, this.leaf, false); + } + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.7f * width, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), 0.4f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(5, 3); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class WhiteSpruce extends WorldGenTree + { + public WhiteSpruce(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 2; + final float bottom = this.randBetween(2, 3); + final float width = this.height / this.randBetween(2.2f, 2.5f); + final float coneHeight = leafSpawn - bottom; + while (leafSpawn > bottom) { + float radius = 1.0f - (leafSpawn - bottom) / coneHeight; + radius = (float) Math.sqrt(radius); + radius *= width; + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), radius, 1, this.leaf, false); + } + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.7f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(6, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class BlackSpruce extends WorldGenTree + { + public BlackSpruce(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 2; + final float bottom = this.randBetween(2, 3); + final float width = this.height / this.randBetween(2.2f, 2.5f); + final float coneHeight = leafSpawn - bottom; + while (leafSpawn > bottom) { + float radius = 1.0f - (leafSpawn - bottom) / coneHeight; + radius = (float) Math.sqrt(radius); + radius *= width; + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), radius, 1, this.leaf, false); + } + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.7f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(6, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenTilia.java b/src/main/java/binnie/extratrees/gen/WorldGenTilia.java new file mode 100644 index 00000000..fa0dbcc8 --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenTilia.java @@ -0,0 +1,140 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.arboriculture.ITree; +import forestry.api.world.ITreeGenData; + +public class WorldGenTilia +{ + public static class Basswood extends WorldGenTree + { + public Basswood(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 1; + final float bottom = this.randBetween(2, 3); + final float width = this.height * this.randBetween(0.4f, 0.5f); + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), 0.3f * width, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.8f * width, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), this.randBetween(0.95f, 1.05f) * width, 1, this.leaf, false); + } + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), 0.7f * width, 1, this.leaf, false); + final float f5 = 0.0f; + final float h5 = leafSpawn; + leafSpawn = h5 - 1.0f; + this.generateCylinder(new Vector(f5, h5, 0.0f), 0.4f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(6, 3); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class WhiteBasswood extends WorldGenTree + { + public WhiteBasswood(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 1; + final float bottom = this.randBetween(2, 3); + final float width = this.height * this.randBetween(0.4f, 0.5f); + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), 0.3f * width, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.8f * width, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), this.randBetween(0.95f, 1.05f) * width, 1, this.leaf, false); + } + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), 0.7f * width, 1, this.leaf, false); + final float f5 = 0.0f; + final float h5 = leafSpawn; + leafSpawn = h5 - 1.0f; + this.generateCylinder(new Vector(f5, h5, 0.0f), 0.4f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(6, 3); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class CommonLime extends WorldGenTree + { + public CommonLime(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 1; + final float bottom = this.randBetween(2, 3); + final float width = this.height * this.randBetween(0.45f, 0.55f); + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), 0.3f * width, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.8f * width, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), this.randBetween(0.95f, 1.05f) * width, 1, this.leaf, false); + } + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), 0.7f * width, 1, this.leaf, false); + final float f5 = 0.0f; + final float h5 = leafSpawn; + leafSpawn = h5 - 1.0f; + this.generateCylinder(new Vector(f5, h5, 0.0f), 0.4f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(7, 4); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenTree.java b/src/main/java/binnie/extratrees/gen/WorldGenTree.java new file mode 100644 index 00000000..cd9bacd2 --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenTree.java @@ -0,0 +1,299 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import binnie.extratrees.worldgen.BlockTypeVoid; +import net.minecraft.init.Blocks; +import binnie.extratrees.worldgen.BlockTypeLog; +import binnie.extratrees.genetics.ExtraTreeSpecies; +import binnie.extratrees.worldgen.BlockTypeLeaf; +import binnie.extratrees.worldgen.BlockType; +import java.util.Random; +import net.minecraft.world.World; +import forestry.api.world.ITreeGenData; +import net.minecraft.world.gen.feature.WorldGenerator; + +public abstract class WorldGenTree extends WorldGenerator +{ + protected ITreeGenData treeGen; + protected World world; + protected Random rand; + protected int startX; + protected int startY; + protected int startZ; + protected int girth; + protected int height; + protected int minHeight; + protected int maxHeight; + protected boolean spawnPods; + protected int minPodHeight; + BlockType leaf; + BlockType wood; + BlockType vine; + BlockType air; + float bushiness; + + protected int randBetween(final int a, final int b) { + return a + this.rand.nextInt(b - a); + } + + protected float randBetween(final float a, final float b) { + return a + this.rand.nextFloat() * (b - a); + } + + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + int leafSpawn = this.height + 1; + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 1.0f, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 1.5f, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 2.9f, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 2.9f, 1, this.leaf, false); + } + + public boolean canGrow() { + return this.treeGen.canGrow(this.world, this.startX, this.startY, this.startZ, this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ), this.height); + } + + public void preGenerate() { + this.height = this.determineHeight(5, 3); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + + protected int determineGirth(final int base) { + return base; + } + + protected int modifyByHeight(final int val, final int min, final int max) { + final int determined = Math.round(val * this.treeGen.getHeightModifier()); + return (determined < min) ? min : ((determined > max) ? max : determined); + } + + protected int determineHeight(final int required, final int variation) { + final int determined = Math.round((required + this.rand.nextInt(variation)) * this.treeGen.getHeightModifier()); + return (determined < this.minHeight) ? this.minHeight : ((determined > this.maxHeight) ? this.maxHeight : determined); + } + + public BlockType getLeaf() { + return new BlockTypeLeaf(); + } + + public BlockType getWood() { + return new BlockTypeLog(((ExtraTreeSpecies) this.treeGen.getGenome().getPrimary()).getLog()); + } + + public WorldGenTree(final ITreeGenData tree) { + this.minHeight = 3; + this.maxHeight = 80; + this.spawnPods = false; + this.minPodHeight = 3; + this.vine = new BlockType(Blocks.vine, 0); + this.air = new BlockTypeVoid(); + this.bushiness = 0.0f; + this.spawnPods = tree.allowsFruitBlocks(); + if (tree instanceof ITreeGenData) { + this.treeGen = tree; + } + } + + @Override + public final boolean generate(final World world, final Random random, final int x, final int y, final int z) { + return this.generate(world, random, x, y, z, false); + } + + public final boolean generate(final World world, final Random random, final int x, final int y, final int z, final boolean force) { + this.world = world; + this.rand = random; + this.startX = x; + this.startY = y; + this.startZ = z; + this.leaf = this.getLeaf(); + this.wood = this.getWood(); + this.preGenerate(); + if (!force && !this.canGrow()) { + return false; + } + final int offset = (this.girth - 1) / 2; + for (int x2 = 0; x2 < this.girth; ++x2) { + for (int y2 = 0; y2 < this.girth; ++y2) { + this.addBlock(x2, 0, y2, new BlockTypeVoid(), true); + } + } + this.generate(); + return true; + } + + public final Vector getStartVector() { + return new Vector(this.startX, this.startY, this.startZ); + } + + protected void generateTreeTrunk(final int height, final int width) { + this.generateTreeTrunk(height, width, 0.0f); + } + + protected void generateTreeTrunk(final int height, final int width, final float vines) { + final int offset = (width - 1) / 2; + for (int x = 0; x < width; ++x) { + for (int y = 0; y < width; ++y) { + for (int i = 0; i < height; ++i) { + this.addWood(x - offset, i, y - offset, true); + if (this.rand.nextFloat() < vines) { + this.addVine(x - offset - 1, i, y - offset); + } + if (this.rand.nextFloat() < vines) { + this.addVine(x - offset + 1, i, y - offset); + } + if (this.rand.nextFloat() < vines) { + this.addVine(x - offset, i, y - offset - 1); + } + if (this.rand.nextFloat() < vines) { + this.addVine(x - offset, i, y - offset + 1); + } + } + } + } + if (!this.spawnPods) { + return; + } + for (int y2 = this.minPodHeight; y2 < height; ++y2) { + for (int x2 = 0; x2 < this.girth; ++x2) { + for (int z = 0; z < this.girth; ++z) { + if (x2 <= 0 || x2 >= this.girth || z <= 0 || z >= this.girth) { + this.treeGen.trySpawnFruitBlock(this.world, this.startX + x2 + 1, this.startY + y2, this.startZ + z); + this.treeGen.trySpawnFruitBlock(this.world, this.startX + x2 - 1, this.startY + y2, this.startZ + z); + this.treeGen.trySpawnFruitBlock(this.world, this.startX + x2, this.startY + y2, this.startZ + z + 1); + this.treeGen.trySpawnFruitBlock(this.world, this.startX + x2, this.startY + y2, this.startZ + z - 1); + } + } + } + } + } + + protected void generateSupportStems(final int height, final int girth, final float chance, final float maxHeight) { + for (int offset = 1, x = -offset; x < girth + offset; ++x) { + for (int z = -offset; z < girth + offset; ++z) { + if (x != -offset || z != -offset) { + if (x != girth + offset || z != girth + offset) { + if (x != -offset || z != girth + offset) { + if (x != girth + offset || z != -offset) { + final int stemHeight = this.rand.nextInt(Math.round(height * maxHeight)); + if (this.rand.nextFloat() < chance) { + for (int i = 0; i < stemHeight; ++i) { + this.addWood(x, i, z, true); + } + } + } + } + } + } + } + } + } + + protected final void clearBlock(final int x, final int y, final int z) { + this.air.setBlock(this.world, this.treeGen, this.startX + x, this.startY + y, this.startZ + z); + } + + protected final void addBlock(final int x, final int y, final int z, final BlockType type, final boolean doReplace) { + if (doReplace || this.world.isAirBlock(this.startX + x, this.startY + y, this.startZ + z)) { + type.setBlock(this.world, this.treeGen, this.startX + x, this.startY + y, this.startZ + z); + } + } + + protected final void addWood(final int x, final int y, final int z, final boolean doReplace) { + this.addBlock(x, y, z, this.wood, doReplace); + } + + protected final void addLeaf(final int x, final int y, final int z, final boolean doReplace) { + this.addBlock(x, y, z, this.leaf, doReplace); + } + + protected final void addVine(final int x, final int y, final int z) { + this.addBlock(x, y, z, this.vine, false); + } + + protected final void generateCuboid(final Vector start, final Vector area, final BlockType block, final boolean doReplace) { + for (int x = (int) start.x; x < (int) start.x + area.x; ++x) { + for (int y = (int) start.y; y < (int) start.y + area.y; ++y) { + for (int z = (int) start.z; z < (int) start.z + area.z; ++z) { + this.addBlock(x, y, z, block, doReplace); + } + } + } + } + + protected final void generateCylinder(final Vector center2, final float radius, final int height, final BlockType block, final boolean doReplace) { + final float centerOffset = (this.girth - 1) / 2.0f; + final Vector center3 = new Vector(center2.x + centerOffset, center2.y, center2.z + centerOffset); + final Vector start = new Vector(center3.x - radius, center3.y, center3.z - radius); + final Vector area = new Vector(radius * 2.0f + 1.0f, height, radius * 2.0f + 1.0f); + for (int x = (int) start.x; x < (int) start.x + area.x; ++x) { + for (int y = (int) start.y; y < (int) start.y + area.y; ++y) { + for (int z = (int) start.z; z < (int) start.z + area.z; ++z) { + if (Vector.distance(new Vector(x, y, z), new Vector(center3.x, y, center3.z)) <= radius + 0.01) { + if (Vector.distance(new Vector(x, y, z), new Vector(center3.x, y, center3.z)) < radius - 0.5f || this.rand.nextFloat() >= this.bushiness) { + this.addBlock(x, y, z, block, doReplace); + } + } + } + } + } + } + + protected final void generateCircle(final Vector center, final float radius, final int width, final int height, final BlockType block, final boolean doReplace) { + this.generateCircle(center, radius, width, height, block, 1.0f, doReplace); + } + + protected final void generateCircle(final Vector center2, final float radius, final int width, final int height, final BlockType block, final float chance, final boolean doReplace) { + final float centerOffset = (this.girth % 2 == 0) ? 0.5f : 0.0f; + final Vector center3 = new Vector(center2.x + centerOffset, center2.y, center2.z + centerOffset); + final Vector start = new Vector(center3.x - radius, center3.y, center3.z - radius); + final Vector area = new Vector(radius * 2.0f + 1.0f, height, radius * 2.0f + 1.0f); + for (int x = (int) start.x; x < (int) start.x + area.x; ++x) { + for (int y = (int) start.y; y < (int) start.y + area.y; ++y) { + for (int z = (int) start.z; z < (int) start.z + area.z; ++z) { + if (this.rand.nextFloat() <= chance) { + final double distance = Vector.distance(new Vector(x, y, z), new Vector(center3.x, y, center3.z)); + if (radius - width - 0.01 < distance && distance <= radius + 0.01) { + this.addBlock(x, y, z, block, doReplace); + } + } + } + } + } + } + + protected final void generateSphere(final Vector center2, final int radius, final BlockType block, final boolean doReplace) { + final float centerOffset = (this.girth - 1) / 2.0f; + final Vector center3 = new Vector(center2.x + centerOffset, center2.y, center2.z + centerOffset); + final Vector start = new Vector(center3.x - radius, center3.y - radius, center3.z - radius); + final Vector area = new Vector(radius * 2 + 1, radius * 2 + 1, radius * 2 + 1); + for (int x = (int) start.x; x < (int) start.x + area.x; ++x) { + for (int y = (int) start.y; y < (int) start.y + area.y; ++y) { + for (int z = (int) start.z; z < (int) start.z + area.z; ++z) { + if (Vector.distance(new Vector(x, y, z), new Vector(center3.x, center3.y, center3.z)) <= radius + 0.01) { + this.addBlock(x, y, z, block, doReplace); + } + } + } + } + } + + static class Vector + { + float x; + float y; + float z; + + public Vector(final float f, final float h, final float g) { + this.x = f; + this.y = h; + this.z = g; + } + + public static double distance(final Vector a, final Vector b) { + return Math.sqrt(Math.pow(a.x - b.x, 2.0) + Math.pow(a.y - b.y, 2.0) + Math.pow(a.z - b.z, 2.0)); + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenTree2.java b/src/main/java/binnie/extratrees/gen/WorldGenTree2.java new file mode 100644 index 00000000..63c314af --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenTree2.java @@ -0,0 +1,334 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.arboriculture.ITree; +import forestry.api.world.ITreeGenData; + +public class WorldGenTree2 +{ + public static class Olive extends WorldGenTree + { + public Olive(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height; + final float bottom = this.randBetween(2, 3); + float width = this.height * this.randBetween(0.35f, 0.4f); + if (width < 1.2) { + width = 1.55f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width - 1.0f, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width - 0.5f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(4, 1); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Sweetgum extends WorldGenTree + { + public Sweetgum(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 1; + final float bottom = this.randBetween(1, 2); + float width = this.height * this.randBetween(0.7f, 0.75f); + if (width > 7.0f) { + width = 7.0f; + } + final float coneHeight = leafSpawn - bottom; + while (leafSpawn > bottom) { + float radius = 1.0f - (leafSpawn - bottom) / coneHeight; + radius *= 2.0f - radius; + radius *= width; + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), radius, 1, this.leaf, false); + } + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.7f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(5, 1); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Locust extends WorldGenTree + { + public Locust(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 1; + final float bottom = 2.0f; + float width = this.height * this.randBetween(0.35f, 0.4f); + if (width < 2.0f) { + width = 2.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width - 1.0f, 1, this.leaf, false); + while (leafSpawn > bottom + 1.0f) { + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width - 0.3f, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width - 0.7f, 1, this.leaf, false); + } + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), width, 1, this.leaf, false); + final float f5 = 0.0f; + final float h5 = leafSpawn; + leafSpawn = h5 - 1.0f; + this.generateCylinder(new Vector(f5, h5, 0.0f), width - 0.4f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(6, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Pear extends WorldGenTree + { + public Pear(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height; + final float bottom = this.randBetween(1, 2); + float width = this.height * this.randBetween(0.25f, 0.3f); + if (width < 2.0f) { + width = 2.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width - 1.0f, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width, 1, this.leaf, false); + } + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(3, 1); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Iroko extends WorldGenTree + { + public Iroko(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height; + final float bottom = this.randBetween(2, 3); + float width = this.height * this.randBetween(0.45f, 0.5f); + if (width < 2.5f) { + width = 2.5f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width * 0.25f, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width * 0.5f, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width * 0.7f, 1, this.leaf, false); + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), width, 1, this.leaf, false); + final float f5 = 0.0f; + final float h5 = leafSpawn; + leafSpawn = h5 - 1.0f; + this.generateCylinder(new Vector(f5, h5, 0.0f), width - 2.0f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(6, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Gingko extends WorldGenTree + { + public Gingko(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 2; + final float bottom = 2.0f; + float width = this.height * this.randBetween(0.55f, 0.6f); + if (width > 7.0f) { + width = 7.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width - 2.0f, 1, this.leaf, false); + while (leafSpawn > bottom * 2.0f + 1.0f) { + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width - 1.5f, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width - 0.9f, 1, this.leaf, false); + } + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), width, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f5 = 0.0f; + final float h5 = leafSpawn; + leafSpawn = h5 - 1.0f; + this.generateCylinder(new Vector(f5, h5, 0.0f), width - 0.9f, 1, this.leaf, false); + final float f6 = 0.0f; + final float h6 = leafSpawn; + leafSpawn = h6 - 1.0f; + this.generateCylinder(new Vector(f6, h6, 0.0f), width, 1, this.leaf, false); + } + final float f7 = 0.0f; + final float h7 = leafSpawn; + leafSpawn = h7 - 1.0f; + this.generateCylinder(new Vector(f7, h7, 0.0f), 0.7f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(6, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Box extends WorldGenTree + { + public Box(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height; + final float bottom = 0.0f; + final float width = 1.5f; + while (leafSpawn > bottom) { + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width, 1, this.leaf, false); + } + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(3, 1); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Clove extends WorldGenTree + { + public Clove(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height; + final float bottom = 2.0f; + float width = this.height * this.randBetween(0.25f, 0.3f); + if (width < 2.0f) { + width = 2.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width - 1.0f, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width - 0.6f, 1, this.leaf, false); + } + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width, 1, this.leaf, false); + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), width - 0.4f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(4, 1); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenTree3.java b/src/main/java/binnie/extratrees/gen/WorldGenTree3.java new file mode 100644 index 00000000..d1d63667 --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenTree3.java @@ -0,0 +1,413 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.arboriculture.ITree; +import forestry.api.world.ITreeGenData; + +public class WorldGenTree3 +{ + public static class Hazel extends WorldGenTree + { + public Hazel(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 1; + final float bottom = 3.0f; + float width = this.height * this.randBetween(0.45f, 0.5f); + if (width < 2.5f) { + width = 2.5f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width - 1.0f, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width, 1, this.leaf, false); + } + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width - 0.3f, 1, this.leaf, false); + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), width - 0.6f, 1, this.leaf, false); + final float f5 = 0.0f; + final float h5 = leafSpawn; + leafSpawn = h5 - 1.0f; + this.generateCylinder(new Vector(f5, h5, 0.0f), width - 1.2f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(5, 1); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Sycamore extends WorldGenTree + { + public Sycamore(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height; + final float bottom = this.randBetween(2, 3); + float width = this.height * this.randBetween(0.35f, 0.4f); + if (width < 2.0f) { + width = 2.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width - 1.3f, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width - 0.6f, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width, 1, this.leaf, false); + } + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), width - 0.8f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(6, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Hawthorn extends WorldGenTree + { + public Hawthorn(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 1; + final float bottom = this.randBetween(1, 2); + float width = this.height * this.randBetween(0.4f, 0.45f); + if (width < 1.5f) { + width = 1.5f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), 0.8f * width, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width - 0.5f, 1, this.leaf, false); + } + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), 0.7f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(4, 1); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Pecan extends WorldGenTree + { + public Pecan(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 1; + final float bottom = 2.0f; + float width = this.height * this.randBetween(0.6f, 0.65f); + if (width < 2.0f) { + width = 2.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), 0.3f * width, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.6f * width, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), 0.8f * width, 1, this.leaf, false); + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), 0.9f * width, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f5 = 0.0f; + final float h5 = leafSpawn; + leafSpawn = h5 - 1.0f; + this.generateCylinder(new Vector(f5, h5, 0.0f), width, 1, this.leaf, false); + } + final float f6 = 0.0f; + final float h6 = leafSpawn; + leafSpawn = h6 - 1.0f; + this.generateCylinder(new Vector(f6, h6, 0.0f), 0.6f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(6, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Elm extends WorldGenTree + { + public Elm(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 1; + final float bottom = this.randBetween(2, 3); + float width = this.height * this.randBetween(0.45f, 0.5f); + if (width < 2.0f) { + width = 2.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width - 1.0f, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width - 0.5f, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width, 1, this.leaf, false); + } + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), width - 0.5f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(6, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Elder extends WorldGenTree + { + public Elder(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 1; + final float bottom = 3.0f; + float width = this.height * this.randBetween(0.55f, 0.6f); + if (width < 2.0f) { + width = 2.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width - 1.0f, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width - 0.4f, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width, 1, this.leaf, false); + } + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), width - 0.4f, 1, this.leaf, false); + final float f5 = 0.0f; + final float h5 = leafSpawn; + leafSpawn = h5 - 1.0f; + this.generateCylinder(new Vector(f5, h5, 0.0f), width - 1.0f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(4, 1); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Hornbeam extends WorldGenTree + { + public Hornbeam(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 1; + final float bottom = 2.0f; + float width = this.height * this.randBetween(0.55f, 0.6f); + if (width < 1.5f) { + width = 1.5f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), 0.3f * width, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.7f * width, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width, 1, this.leaf, false); + } + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(5, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Sallow extends WorldGenTree + { + public Sallow(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 1; + final float bottom = 2.0f; + float width = this.height * this.randBetween(0.6f, 0.65f); + if (width < 2.0f) { + width = 2.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), 0.3f * width, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), 0.6f * width, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), 0.8f * width, 1, this.leaf, false); + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), 0.9f * width, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f5 = 0.0f; + final float h5 = leafSpawn; + leafSpawn = h5 - 1.0f; + this.generateCylinder(new Vector(f5, h5, 0.0f), width, 1, this.leaf, false); + } + final float f6 = 0.0f; + final float h6 = leafSpawn; + leafSpawn = h6 - 1.0f; + this.generateCylinder(new Vector(f6, h6, 0.0f), 0.6f * width, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(4, 1); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class AcornOak extends WorldGenTree + { + public AcornOak(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height + 1; + final float bottom = 3.0f; + float width = this.height * this.randBetween(0.45f, 0.5f); + if (width < 2.0f) { + width = 2.0f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width * 0.4f, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width * 0.7f, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width - 0.2f, 1, this.leaf, false); + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), width, 1, this.leaf, false); + } + final float f5 = 0.0f; + final float h5 = leafSpawn; + leafSpawn = h5 - 1.0f; + this.generateCylinder(new Vector(f5, h5, 0.0f), width - 0.5f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(6, 2); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenTropical.java b/src/main/java/binnie/extratrees/gen/WorldGenTropical.java new file mode 100644 index 00000000..d133da26 --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenTropical.java @@ -0,0 +1,64 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.world.ITreeGenData; + +public class WorldGenTropical +{ + public static class Mango extends WorldGenTree + { + public Mango(final ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + float leafSpawn = this.height; + float width = this.height * this.randBetween(0.7f, 0.75f); + final float bottom = 2.0f; + if (width < 1.2) { + width = 1.55f; + } + final float f = 0.0f; + final float h = leafSpawn; + leafSpawn = h - 1.0f; + this.generateCylinder(new Vector(f, h, 0.0f), width * 0.3f, 1, this.leaf, false); + final float f2 = 0.0f; + final float h2 = leafSpawn; + leafSpawn = h2 - 1.0f; + this.generateCylinder(new Vector(f2, h2, 0.0f), width * 0.5f, 1, this.leaf, false); + final float f3 = 0.0f; + final float h3 = leafSpawn; + leafSpawn = h3 - 1.0f; + this.generateCylinder(new Vector(f3, h3, 0.0f), width * 0.7f, 1, this.leaf, false); + final float f4 = 0.0f; + final float h4 = leafSpawn; + leafSpawn = h4 - 1.0f; + this.generateCylinder(new Vector(f4, h4, 0.0f), width * 0.8f, 1, this.leaf, false); + final float f5 = 0.0f; + final float h5 = leafSpawn; + leafSpawn = h5 - 1.0f; + this.generateCylinder(new Vector(f5, h5, 0.0f), width * 0.9f, 1, this.leaf, false); + while (leafSpawn > bottom) { + final float f6 = 0.0f; + final float h6 = leafSpawn; + leafSpawn = h6 - 1.0f; + this.generateCylinder(new Vector(f6, h6, 0.0f), width, 1, this.leaf, false); + } + final float f7 = 0.0f; + final float h7 = leafSpawn; + leafSpawn = h7 - 1.0f; + this.generateCylinder(new Vector(f7, h7, 0.0f), width - 1.0f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(5, 1); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } +} diff --git a/src/main/java/binnie/extratrees/gen/WorldGenWalnut.java b/src/main/java/binnie/extratrees/gen/WorldGenWalnut.java new file mode 100644 index 00000000..2a8e7062 --- /dev/null +++ b/src/main/java/binnie/extratrees/gen/WorldGenWalnut.java @@ -0,0 +1,65 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.gen; + +import forestry.api.arboriculture.ITree; + +public class WorldGenWalnut +{ + public static class BlackWalnut extends WorldGenTree + { + public BlackWalnut(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + int leafSpawn = this.height + 1; + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 2.0f, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 3.6f, 1, this.leaf, false); + while (leafSpawn > this.randBetween(3, 4)) { + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 3.8f, 1, this.leaf, false); + } + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 2.7f, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 1.8f, 1, this.leaf, false); + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(9, 6); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } + + public static class Butternut extends WorldGenTree + { + public Butternut(final ITree tree) { + super(tree); + } + + @Override + public void generate() { + this.generateTreeTrunk(this.height, this.girth); + int leafSpawn = this.height + 1; + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 2.0f, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 3.5f, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 4.5f, 1, this.leaf, false); + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 5.0f, 1, this.leaf, false); + while (leafSpawn > 3) { + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 5.0f, 1, this.leaf, false); + } + if (this.rand.nextBoolean()) { + this.generateCylinder(new Vector(0.0f, leafSpawn--, 0.0f), 4.0f, 1, this.leaf, false); + } + } + + @Override + public void preGenerate() { + this.height = this.determineHeight(6, 3); + this.girth = this.determineGirth(this.treeGen.getGirth(this.world, this.startX, this.startY, this.startZ)); + } + } +} diff --git a/src/main/java/binnie/extratrees/genetics/ButterflySpecies.java b/src/main/java/binnie/extratrees/genetics/ButterflySpecies.java new file mode 100644 index 00000000..1e06a518 --- /dev/null +++ b/src/main/java/binnie/extratrees/genetics/ButterflySpecies.java @@ -0,0 +1,251 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.genetics; + +import net.minecraftforge.common.BiomeDictionary; +import java.util.EnumSet; +import forestry.api.lepidopterology.EnumFlutterType; +import forestry.api.genetics.IIndividual; +import com.mojang.authlib.GameProfile; +import net.minecraft.world.World; +import forestry.api.genetics.AlleleManager; +import binnie.core.Mods; +import net.minecraft.init.Items; +import forestry.api.lepidopterology.IButterflyRoot; +import forestry.api.genetics.IAllele; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import forestry.api.core.IIconProvider; +import forestry.api.core.EnumHumidity; +import forestry.api.core.EnumTemperature; +import binnie.core.resource.ResourceType; +import binnie.extratrees.ExtraTrees; +import binnie.Binnie; +import java.util.HashMap; +import net.minecraft.item.ItemStack; +import java.util.Map; +import forestry.api.genetics.IClassification; +import binnie.core.resource.BinnieResource; +import forestry.api.lepidopterology.IAlleleButterflySpecies; + +public enum ButterflySpecies implements IAlleleButterflySpecies +{ + WhiteAdmiral("White Admiral", "Limenitis camilla", 16448250), + PurpleEmperor("Purple Emperor", "Apatura iris", 4338374), + RedAdmiral("Red Admiral", "Vanessa atalanta", 15101764), + PaintedLady("Painted Lady", "Vanessa cardui", 15573064), + SmallTortoiseshell("Small Tortoiseshell", "Aglais urticae", 15365387), + CamberwellBeauty("Camberwell Beauty", "Aglais antiopa", 9806540), + Peacock("Peacock", "Inachis io", 13842434), + Wall("Wall", "Lasiommata megera", 15707678), + CrimsonRose("Crimson Rose", "Atrophaneura hector", 16736891), + KaiserIHind("Kaiser-i-Hind", "Teinopalpus imperialis", 7839808), + GoldenBirdwing("Golden Birdwing", "Troides aeacus", 16374814), + MarshFritillary("Marsh Fritillary", "Euphydryas aurinia", 16747520), + PearlBorderedFritillary("Pearl-bordered Fritillary", "Boloria euphrosyne", 16747267), + QueenOfSpainFritillary("Queen of Spain Fritillary", "Issoria lathonia", 16765247), + SpeckledWood("Speckled Wood", "Pararge aegeria", 16119949), + ScotchAngus("Scotch Angus", "Erebia aethiops", 12735523), + Gatekeeper("Gatekeeper", "Pyronia tithonus", 16433962), + MeadowBrown("Meadow Brown", "Maniola jurtina", 14914841), + SmallHeath("Small Heath", "Coenonympha pamphilus", 16754226), + Ringlet("Ringlet", "Aphantopus hyperantus", 9919799), + Monarch("Monarch", "Danaus plexippus", 16757254), + MarbledWhite("Marbled White", "Melanargia galathea", 15527148); + + String name; + String branchName; + String scientific; + BinnieResource texture; + public IClassification branch; + int colour; + private Map butterflyLoot; + private Map caterpillarLoot; + + private ButterflySpecies(final String name, final String scientific, final int colour) { + this.butterflyLoot = new HashMap(); + this.caterpillarLoot = new HashMap(); + this.name = name; + this.branchName = scientific.split(" ")[0].toLowerCase(); + this.scientific = scientific.split(" ")[1]; + this.texture = Binnie.Resource.getPNG(ExtraTrees.instance, ResourceType.Entity, this.toString()); + this.colour = colour; + } + + @Override + public String getName() { + return this.name; + } + + @Override + public String getDescription() { + return ""; + } + + @Override + public EnumTemperature getTemperature() { + return EnumTemperature.NORMAL; + } + + @Override + public EnumHumidity getHumidity() { + return EnumHumidity.NORMAL; + } + + @Override + public boolean hasEffect() { + return false; + } + + @Override + public boolean isSecret() { + return false; + } + + @Override + public boolean isCounted() { + return true; + } + + @Override + public String getBinomial() { + return this.scientific; + } + + @Override + public String getAuthority() { + return "Binnie"; + } + + @Override + public IClassification getBranch() { + return this.branch; + } + + @Override + @SideOnly(Side.CLIENT) + public IIconProvider getIconProvider() { + return null; + } + + @Override + public String getUID() { + return "extrabutterflies.species." + this.toString().toLowerCase(); + } + + @Override + public boolean isDominant() { + return true; + } + + @Override + public String getEntityTexture() { + return this.texture.getResourceLocation().toString(); + } + + public IAllele[] getTemplate() { + final IAllele[] def = this.getRoot().getDefaultTemplate().clone(); + def[0] = this; + return def; + } + + @Override + public IButterflyRoot getRoot() { + return Binnie.Genetics.getButterflyRoot(); + } + + @Override + public float getRarity() { + return 0.5f; + } + + @Override + public boolean isNocturnal() { + return false; + } + + @Override + public int getIconColour(final int renderPass) { + return (renderPass > 0) ? 16777215 : this.colour; + } + + @Override + public Map getButterflyLoot() { + return new HashMap(); + } + + @Override + public Map getCaterpillarLoot() { + return new HashMap(); + } + + @Override + public int getComplexity() { + return 4; + } + + @Override + public float getResearchSuitability(final ItemStack itemstack) { + if (itemstack == null) { + return 0.0f; + } + if (itemstack.getItem() == Items.glass_bottle) { + return 0.9f; + } + for (final ItemStack stack : this.butterflyLoot.keySet()) { + if (stack.isItemEqual(itemstack)) { + return 1.0f; + } + } + for (final ItemStack stack : this.caterpillarLoot.keySet()) { + if (stack.isItemEqual(itemstack)) { + return 1.0f; + } + } + if (itemstack.getItem() == Mods.Forestry.item("honeyDrop")) { + return 0.5f; + } + if (itemstack.getItem() == Mods.Forestry.item("honeydew")) { + return 0.7f; + } + if (itemstack.getItem() == Mods.Forestry.item("beeComb")) { + return 0.4f; + } + if (AlleleManager.alleleRegistry.isIndividual(itemstack)) { + return 1.0f; + } + for (final Map.Entry entry : this.getRoot().getResearchCatalysts().entrySet()) { + if (entry.getKey().isItemEqual(itemstack)) { + return entry.getValue(); + } + } + return 0.0f; + } + + @Override + public ItemStack[] getResearchBounty(final World world, final GameProfile researcher, final IIndividual individual, final int bountyLevel) { + return new ItemStack[] { this.getRoot().getMemberStack(individual.copy(), EnumFlutterType.SERUM.ordinal()) }; + } + + @Override + public EnumSet getSpawnBiomes() { + return EnumSet.noneOf(BiomeDictionary.Type.class); + } + + @Override + public boolean strictSpawnMatch() { + return false; + } + + @Override + public float getFlightDistance() { + return 5.0f; + } + + @Override + public String getUnlocalizedName() { + return this.getUID(); + } +} diff --git a/src/main/java/binnie/extratrees/genetics/ExtraTreeFruitFamily.java b/src/main/java/binnie/extratrees/genetics/ExtraTreeFruitFamily.java new file mode 100644 index 00000000..49cf3e8d --- /dev/null +++ b/src/main/java/binnie/extratrees/genetics/ExtraTreeFruitFamily.java @@ -0,0 +1,43 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.genetics; + +import forestry.api.genetics.IFruitFamily; + +public enum ExtraTreeFruitFamily implements IFruitFamily +{ + Berry("Berries", "berry", "berri"), + Citrus("Citrus", "citrus", "citrus"); + + String name; + String uid; + String scientific; + + private ExtraTreeFruitFamily(final String name, final String uid, final String scientific) { + this.name = name; + this.uid = uid; + this.scientific = scientific; + } + + @Override + public String getUID() { + return "binnie.family." + this.uid; + } + + @Override + public String getName() { + return this.name; + } + + @Override + public String getScientific() { + return this.scientific; + } + + @Override + public String getDescription() { + return this.name; + } +} diff --git a/src/main/java/binnie/extratrees/genetics/ExtraTreeFruitGene.java b/src/main/java/binnie/extratrees/genetics/ExtraTreeFruitGene.java new file mode 100644 index 00000000..140fbb24 --- /dev/null +++ b/src/main/java/binnie/extratrees/genetics/ExtraTreeFruitGene.java @@ -0,0 +1,481 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.genetics; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.block.Block; +import net.minecraft.block.BlockLog; +import net.minecraft.init.Blocks; +import net.minecraft.util.Direction; + +import forestry.api.genetics.IChromosomeType; +import forestry.api.arboriculture.EnumTreeChromosome; + +import java.util.List; +import java.util.Map; +import java.util.ArrayList; + +import net.minecraft.world.World; +import net.minecraft.world.IBlockAccess; + +import forestry.api.arboriculture.ITreeGenome; +import binnie.extratrees.ExtraTrees; + +import forestry.api.arboriculture.IAlleleTreeSpecies; +import forestry.api.genetics.IAlleleSpecies; +import binnie.Binnie; + +import java.lang.reflect.Field; + +import forestry.arboriculture.FruitProviderNone; +import forestry.arboriculture.genetics.alleles.AlleleTreeSpecies; +import binnie.extratrees.config.ConfigurationMain; +import binnie.extratrees.item.Food; + +import net.minecraft.init.Items; + +import forestry.api.genetics.AlleleManager; + +import net.minecraft.item.ItemStack; + +import java.util.HashMap; + +import binnie.extratrees.block.FruitPod; +import forestry.api.genetics.IFruitFamily; +import forestry.api.arboriculture.IFruitProvider; +import forestry.api.arboriculture.IAlleleFruit; + +public enum ExtraTreeFruitGene implements IAlleleFruit, IFruitProvider +{ + Blackthorn(10, 7180062, 14561129, FruitSprite.Small), + CherryPlum(10, 7180062, 15211595, FruitSprite.Small), + Peach(10, 7180062, 16424995, FruitSprite.Average), + Nectarine(10, 7180062, 16405795, FruitSprite.Average), + Apricot(10, 7180062, 16437027, FruitSprite.Average), + Almond(10, 7180062, 9364342, FruitSprite.Small), + WildCherry(10, 7180062, 16711680, FruitSprite.Tiny), + SourCherry(10, 7180062, 10225963, FruitSprite.Tiny), + BlackCherry(10, 7180062, 4852249, FruitSprite.Tiny), + Orange(10, 3665987, 16749578, FruitSprite.Average), + Manderin(10, 3665987, 16749578, FruitSprite.Average), + Tangerine(10, 3665987, 16749578, FruitSprite.Average), + Satsuma(10, 3665987, 16749578, FruitSprite.Average), + KeyLime(10, 3665987, 10223428, FruitSprite.Small), + Lime(10, 3665987, 10223428, FruitSprite.Average), + FingerLime(10, 3665987, 11156280, FruitSprite.Small), + Pomelo(10, 3665987, 6083402, FruitSprite.Larger), + Grapefruit(10, 3665987, 16749578, FruitSprite.Large), + Kumquat(10, 3665987, 16749578, FruitSprite.Small), + Citron(10, 3665987, 16772192, FruitSprite.Large), + BuddhaHand(10, 3665987, 16772192, FruitSprite.Large), + Apple(10, 7915859, 16193046, FruitSprite.Average), + Crabapple(10, 7915859, 16760140, FruitSprite.Average), + Banana("Banana", FruitPod.Banana), + RedBanana("Red Banana", FruitPod.RedBanana), + Plantain("Platain", FruitPod.Plantain), + Hazelnut(7, 8223006, 14463606, FruitSprite.Small), + Butternut(7, 11712336, 16102498, FruitSprite.Small), + Beechnut(8, 14401148, 6241845, FruitSprite.Tiny), + Pecan(8, 10660940, 15781769, FruitSprite.Small), + BrazilNut(10, 5875561, 9852208, FruitSprite.Large), + Fig(9, 14201186, 7094086, FruitSprite.Small), + Acorn(6, 7516710, 11364893, FruitSprite.Tiny), + Elderberry(9, 7444317, 5331779, FruitSprite.Tiny), + Olive(9, 8887861, 6444842, FruitSprite.Small), + GingkoNut(7, 9213787, 15063725, FruitSprite.Tiny), + Coffee(8, 7433501, 16273254, FruitSprite.Tiny), + Pear(10, 10456913, 10474833, FruitSprite.Pear), + OsangeOsange(10, 9934674, 10665767, FruitSprite.Larger), + Clove(9, 6847532, 11224133, FruitSprite.Tiny), + Coconut("Coconut", FruitPod.Coconut), + Cashew(8, 12879132, 15289111, FruitSprite.Average), + Avacado(10, 10272370, 2170640, FruitSprite.Pear), + Nutmeg(9, 14861101, 11305813, FruitSprite.Tiny), + Allspice(9, 15180922, 7423542, FruitSprite.Tiny), + Chilli(10, 7430757, 15145010, FruitSprite.Small), + StarAnise(8, 8733742, 13917189, FruitSprite.Tiny), + Mango(10, 6654997, 15902262, FruitSprite.Average), + Starfruit(10, 9814541, 15061550, FruitSprite.Average), + Candlenut(8, 8235123, 14600882, FruitSprite.Small), + Papayimar("Papayimar", FruitPod.Papayimar), + Blackcurrant(8, 9407571, 4935251, FruitSprite.Tiny), + Redcurrant(8, 13008910, 15080974, FruitSprite.Tiny), + Blackberry(8, 9399665, 4801393, FruitSprite.Tiny), + Raspberry(8, 15520197, 14510449, FruitSprite.Tiny), + Blueberry(8, 10203799, 6329278, FruitSprite.Tiny), + Cranberry(8, 12232496, 14555696, FruitSprite.Tiny), + Juniper(8, 10194034, 6316914, FruitSprite.Tiny), + Gooseberry(8, 12164944, 12177232, FruitSprite.Tiny), + GoldenRaspberry(8, 12496955, 15970363, FruitSprite.Tiny); + + IFruitFamily family; + boolean isRipening; + int diffR; + int diffG; + int diffB; + FruitPod pod; + int ripeningPeriod; + int colourUnripe; + int colour; + FruitSprite index; + HashMap products; + + public static void init() { + final IFruitFamily familyPrune = AlleleManager.alleleRegistry.getFruitFamily("forestry.prunes"); + final IFruitFamily familyPome = AlleleManager.alleleRegistry.getFruitFamily("forestry.pomes"); + final IFruitFamily familyJungle = AlleleManager.alleleRegistry.getFruitFamily("forestry.jungle"); + final IFruitFamily familyNuts = AlleleManager.alleleRegistry.getFruitFamily("forestry.nuts"); + final IFruitFamily familyBerry = ExtraTreeFruitFamily.Berry; + final IFruitFamily familyCitrus = ExtraTreeFruitFamily.Citrus; + AlleleManager.alleleRegistry.registerFruitFamily(familyBerry); + AlleleManager.alleleRegistry.registerFruitFamily(familyCitrus); + ExtraTreeFruitGene.Apple.addProduct(new ItemStack(Items.apple), 1.0f); + ExtraTreeFruitGene.Apple.setFamily(familyPome); + ExtraTreeFruitGene.Crabapple.addProduct(Food.Crabapple.get(1), 1.0f); + ExtraTreeFruitGene.Crabapple.setFamily(familyPome); + ExtraTreeFruitGene.Orange.addProduct(Food.Orange.get(1), 1.0f); + ExtraTreeFruitGene.Orange.setFamily(familyCitrus); + ExtraTreeFruitGene.Manderin.addProduct(Food.Manderin.get(1), 1.0f); + ExtraTreeFruitGene.Manderin.setFamily(familyCitrus); + ExtraTreeFruitGene.Tangerine.addProduct(Food.Tangerine.get(1), 1.0f); + ExtraTreeFruitGene.Tangerine.setFamily(familyCitrus); + ExtraTreeFruitGene.Satsuma.addProduct(Food.Satsuma.get(1), 1.0f); + ExtraTreeFruitGene.Satsuma.setFamily(familyCitrus); + ExtraTreeFruitGene.KeyLime.addProduct(Food.KeyLime.get(1), 1.0f); + ExtraTreeFruitGene.KeyLime.setFamily(familyCitrus); + ExtraTreeFruitGene.Lime.addProduct(Food.Lime.get(1), 1.0f); + ExtraTreeFruitGene.Lime.setFamily(familyCitrus); + ExtraTreeFruitGene.FingerLime.addProduct(Food.FingerLime.get(1), 1.0f); + ExtraTreeFruitGene.FingerLime.setFamily(familyCitrus); + ExtraTreeFruitGene.Pomelo.addProduct(Food.Pomelo.get(1), 1.0f); + ExtraTreeFruitGene.Pomelo.setFamily(familyCitrus); + ExtraTreeFruitGene.Grapefruit.addProduct(Food.Grapefruit.get(1), 1.0f); + ExtraTreeFruitGene.Grapefruit.setFamily(familyCitrus); + ExtraTreeFruitGene.Kumquat.addProduct(Food.Kumquat.get(1), 1.0f); + ExtraTreeFruitGene.Kumquat.setFamily(familyCitrus); + ExtraTreeFruitGene.Citron.addProduct(Food.Citron.get(1), 1.0f); + ExtraTreeFruitGene.Citron.setFamily(familyCitrus); + ExtraTreeFruitGene.BuddhaHand.addProduct(Food.BuddhaHand.get(1), 1.0f); + ExtraTreeFruitGene.BuddhaHand.setFamily(familyCitrus); + ExtraTreeFruitGene.Blackthorn.addProduct(Food.Blackthorn.get(1), 1.0f); + ExtraTreeFruitGene.Blackthorn.setFamily(familyPrune); + ExtraTreeFruitGene.CherryPlum.addProduct(Food.CherryPlum.get(1), 1.0f); + ExtraTreeFruitGene.CherryPlum.setFamily(familyPrune); + ExtraTreeFruitGene.Peach.addProduct(Food.Peach.get(1), 1.0f); + ExtraTreeFruitGene.Peach.setFamily(familyPrune); + ExtraTreeFruitGene.Nectarine.addProduct(Food.Nectarine.get(1), 1.0f); + ExtraTreeFruitGene.Nectarine.setFamily(familyPrune); + ExtraTreeFruitGene.Apricot.addProduct(Food.Apricot.get(1), 1.0f); + ExtraTreeFruitGene.Apricot.setFamily(familyPrune); + ExtraTreeFruitGene.Almond.addProduct(Food.Almond.get(1), 1.0f); + ExtraTreeFruitGene.Almond.setFamily(familyPrune); + ExtraTreeFruitGene.WildCherry.addProduct(Food.WildCherry.get(1), 1.0f); + ExtraTreeFruitGene.WildCherry.setFamily(familyPrune); + ExtraTreeFruitGene.SourCherry.addProduct(Food.SourCherry.get(1), 1.0f); + ExtraTreeFruitGene.SourCherry.setFamily(familyPrune); + ExtraTreeFruitGene.BlackCherry.addProduct(Food.BlackCherry.get(1), 1.0f); + ExtraTreeFruitGene.BlackCherry.setFamily(familyPrune); + ExtraTreeFruitGene.Hazelnut.addProduct(Food.Hazelnut.get(1), 1.0f); + ExtraTreeFruitGene.Hazelnut.setFamily(familyNuts); + ExtraTreeFruitGene.Butternut.addProduct(Food.Butternut.get(1), 1.0f); + ExtraTreeFruitGene.Butternut.setFamily(familyNuts); + ExtraTreeFruitGene.Beechnut.addProduct(Food.Beechnut.get(1), 1.0f); + ExtraTreeFruitGene.Beechnut.setFamily(familyNuts); + ExtraTreeFruitGene.Pecan.addProduct(Food.Pecan.get(1), 1.0f); + ExtraTreeFruitGene.Pecan.setFamily(familyNuts); + ExtraTreeFruitGene.Banana.addProduct(Food.Banana.get(2), 1.0f); + ExtraTreeFruitGene.Banana.setFamily(familyJungle); + ExtraTreeFruitGene.RedBanana.addProduct(Food.RedBanana.get(2), 1.0f); + ExtraTreeFruitGene.RedBanana.setFamily(familyJungle); + ExtraTreeFruitGene.Plantain.addProduct(Food.Plantain.get(2), 1.0f); + ExtraTreeFruitGene.Plantain.setFamily(familyJungle); + ExtraTreeFruitGene.BrazilNut.addProduct(Food.BrazilNut.get(4), 1.0f); + ExtraTreeFruitGene.BrazilNut.setFamily(familyNuts); + ExtraTreeFruitGene.Fig.addProduct(Food.Fig.get(1), 1.0f); + ExtraTreeFruitGene.Fig.setFamily(familyPrune); + ExtraTreeFruitGene.Acorn.addProduct(Food.Acorn.get(1), 1.0f); + ExtraTreeFruitGene.Acorn.setFamily(familyNuts); + ExtraTreeFruitGene.Elderberry.addProduct(Food.Elderberry.get(1), 1.0f); + ExtraTreeFruitGene.Elderberry.setFamily(familyPrune); + ExtraTreeFruitGene.Olive.addProduct(Food.Olive.get(1), 1.0f); + ExtraTreeFruitGene.Olive.setFamily(familyPrune); + ExtraTreeFruitGene.GingkoNut.addProduct(Food.GingkoNut.get(1), 1.0f); + ExtraTreeFruitGene.GingkoNut.setFamily(familyNuts); + ExtraTreeFruitGene.Coffee.addProduct(Food.Coffee.get(1), 1.0f); + ExtraTreeFruitGene.Coffee.setFamily(familyJungle); + ExtraTreeFruitGene.Pear.addProduct(Food.Pear.get(1), 1.0f); + ExtraTreeFruitGene.Pear.setFamily(familyPome); + ExtraTreeFruitGene.OsangeOsange.addProduct(Food.OsangeOrange.get(1), 1.0f); + ExtraTreeFruitGene.OsangeOsange.setFamily(familyPome); + ExtraTreeFruitGene.Clove.addProduct(Food.Clove.get(1), 1.0f); + ExtraTreeFruitGene.Clove.setFamily(familyNuts); + ExtraTreeFruitGene.Blackcurrant.addProduct(Food.Blackcurrant.get(2), 1.0f); + ExtraTreeFruitGene.Blackcurrant.setFamily(familyBerry); + ExtraTreeFruitGene.Redcurrant.addProduct(Food.Redcurrant.get(2), 1.0f); + ExtraTreeFruitGene.Redcurrant.setFamily(familyBerry); + ExtraTreeFruitGene.Blackberry.addProduct(Food.Blackberry.get(2), 1.0f); + ExtraTreeFruitGene.Blackberry.setFamily(familyBerry); + ExtraTreeFruitGene.Raspberry.addProduct(Food.Raspberry.get(2), 1.0f); + ExtraTreeFruitGene.Raspberry.setFamily(familyBerry); + ExtraTreeFruitGene.Blueberry.addProduct(Food.Blueberry.get(2), 1.0f); + ExtraTreeFruitGene.Blueberry.setFamily(familyBerry); + ExtraTreeFruitGene.Cranberry.addProduct(Food.Cranberry.get(2), 1.0f); + ExtraTreeFruitGene.Cranberry.setFamily(familyBerry); + ExtraTreeFruitGene.Juniper.addProduct(Food.Juniper.get(2), 1.0f); + ExtraTreeFruitGene.Juniper.setFamily(familyBerry); + ExtraTreeFruitGene.Gooseberry.addProduct(Food.Gooseberry.get(2), 1.0f); + ExtraTreeFruitGene.Gooseberry.setFamily(familyBerry); + ExtraTreeFruitGene.GoldenRaspberry.addProduct(Food.GoldenRaspberry.get(2), 1.0f); + ExtraTreeFruitGene.GoldenRaspberry.setFamily(familyBerry); + ExtraTreeFruitGene.Coconut.addProduct(Food.Coconut.get(1), 1.0f); + ExtraTreeFruitGene.Coconut.setFamily(familyJungle); + ExtraTreeFruitGene.Cashew.addProduct(Food.Cashew.get(1), 1.0f); + ExtraTreeFruitGene.Cashew.setFamily(familyJungle); + ExtraTreeFruitGene.Avacado.addProduct(Food.Avacado.get(1), 1.0f); + ExtraTreeFruitGene.Avacado.setFamily(familyJungle); + ExtraTreeFruitGene.Nutmeg.addProduct(Food.Nutmeg.get(1), 1.0f); + ExtraTreeFruitGene.Nutmeg.setFamily(familyJungle); + ExtraTreeFruitGene.Allspice.addProduct(Food.Allspice.get(1), 1.0f); + ExtraTreeFruitGene.Allspice.setFamily(familyJungle); + ExtraTreeFruitGene.Chilli.addProduct(Food.Chilli.get(1), 1.0f); + ExtraTreeFruitGene.Chilli.setFamily(familyJungle); + ExtraTreeFruitGene.StarAnise.addProduct(Food.StarAnise.get(1), 1.0f); + ExtraTreeFruitGene.StarAnise.setFamily(familyJungle); + ExtraTreeFruitGene.Mango.addProduct(Food.Mango.get(1), 1.0f); + ExtraTreeFruitGene.Mango.setFamily(familyPome); + ExtraTreeFruitGene.Starfruit.addProduct(Food.Starfruit.get(1), 1.0f); + ExtraTreeFruitGene.Starfruit.setFamily(familyJungle); + ExtraTreeFruitGene.Candlenut.addProduct(Food.Candlenut.get(1), 1.0f); + ExtraTreeFruitGene.Candlenut.setFamily(familyJungle); + if (ConfigurationMain.alterLemon) { + try { + final IAlleleFruit lemon = (IAlleleFruit) AlleleManager.alleleRegistry.getAllele("forestry.fruitLemon"); + final FruitProviderNone prov = (FruitProviderNone) lemon.getProvider(); + final Field f = FruitProviderNone.class.getDeclaredField("family"); + final Field modifiersField = Field.class.getDeclaredField("modifiers"); + f.setAccessible(true); + modifiersField.setAccessible(true); + modifiersField.setInt(f, f.getModifiers() & 0xFFFFFFEF); + f.set(prov, familyCitrus); + } catch (Exception e) { + e.printStackTrace(); + } + } + for (final IAlleleSpecies tree : Binnie.Genetics.treeBreedingSystem.getAllSpecies()) { + if (tree instanceof AlleleTreeSpecies && ((IAlleleTreeSpecies) tree).getSuitableFruit().contains(familyPrune)) { + ((AlleleTreeSpecies) tree).addFruitFamily(familyCitrus); + } + } + } + + private void setFamily(final IFruitFamily family) { + this.family = family; + } + + private ExtraTreeFruitGene(final int time, final int unripe, final int colour, final FruitSprite index) { + this.isRipening = false; + this.diffB = 0; + this.pod = null; + this.ripeningPeriod = 0; + this.products = new HashMap(); + this.colour = colour; + this.index = index; + this.setRipening(time, unripe); + } + + private ExtraTreeFruitGene(final String name, final FruitPod pod) { + this.isRipening = false; + this.diffB = 0; + this.pod = null; + this.ripeningPeriod = 0; + this.products = new HashMap(); + this.pod = pod; + this.ripeningPeriod = 2; + } + + public void setRipening(final int time, final int unripe) { + this.ripeningPeriod = time; + this.colourUnripe = unripe; + this.isRipening = true; + this.diffR = (this.colour >> 16 & 0xFF) - (unripe >> 16 & 0xFF); + this.diffG = (this.colour >> 8 & 0xFF) - (unripe >> 8 & 0xFF); + this.diffB = (this.colour & 0xFF) - (unripe & 0xFF); + } + + public void addProduct(final ItemStack product, final float chance) { + this.products.put(product, chance); + } + + @Override + public String getUID() { + return "extratrees.fruit." + this.toString().toLowerCase(); + } + + @Override + public boolean isDominant() { + return true; + } + + @Override + public IFruitProvider getProvider() { + return this; + } + + @Override + public ItemStack[] getProducts() { + return this.products.keySet().toArray(new ItemStack[0]); + } + + @Override + public ItemStack[] getSpecialty() { + return new ItemStack[0]; + } + + @Override + public String getDescription() { + return ExtraTrees.proxy.localise("item.food." + this.name().toLowerCase()); + } + + @Override + public IFruitFamily getFamily() { + return this.family; + } + + @Override + public int getColour(final ITreeGenome genome, final IBlockAccess world, final int x, final int y, final int z, final int ripeningTime) { + if (!this.isRipening) { + return this.colour; + } + final float stage = this.getRipeningStage(ripeningTime); + final int r = (this.colourUnripe >> 16 & 0xFF) + (int) (this.diffR * stage); + final int g = (this.colourUnripe >> 8 & 0xFF) + (int) (this.diffG * stage); + final int b = (this.colourUnripe & 0xFF) + (int) (this.diffB * stage); + return (r & 0xFF) << 16 | (g & 0xFF) << 8 | (b & 0xFF); + } + + @Override + public boolean markAsFruitLeaf(final ITreeGenome genome, final World world, final int x, final int y, final int z) { + return this.pod == null; + } + + @Override + public int getRipeningPeriod() { + return this.ripeningPeriod; + } + + @Override + public ItemStack[] getFruits(final ITreeGenome genome, final World world, final int x, final int y, final int z, final int ripeningTime) { + if (this.pod != null) { + if (ripeningTime >= 2) { + final List product = new ArrayList(); + for (final Map.Entry entry : this.products.entrySet()) { + final ItemStack single = entry.getKey().copy(); + single.stackSize = 1; + for (int i = 0; i < entry.getKey().stackSize; ++i) { + if (world.rand.nextFloat() <= entry.getValue()) { + product.add(single.copy()); + } + } + } + return product.toArray(new ItemStack[0]); + } + return new ItemStack[0]; + } + else { + final ArrayList product2 = new ArrayList(); + final float stage = this.getRipeningStage(ripeningTime); + if (stage < 0.5f) { + return new ItemStack[0]; + } + final float modeYieldMod = 1.0f; + for (final Map.Entry entry2 : this.products.entrySet()) { + if (world.rand.nextFloat() <= genome.getYield() * modeYieldMod * entry2.getValue() * 5.0f * stage) { + product2.add(entry2.getKey().copy()); + } + } + return product2.toArray(new ItemStack[0]); + } + } + + private float getRipeningStage(final int ripeningTime) { + if (ripeningTime >= this.ripeningPeriod) { + return 1.0f; + } + return ripeningTime / this.ripeningPeriod; + } + + @Override + public boolean requiresFruitBlocks() { + return this.pod != null; + } + + @Override + public boolean trySpawnFruitBlock(final ITreeGenome genome, final World world, final int x, final int y, final int z) { + return this.pod != null && world.rand.nextFloat() <= genome.getSappiness() && Binnie.Genetics.getTreeRoot().setFruitBlock(world, (IAlleleFruit) genome.getActiveAllele(EnumTreeChromosome.FRUITS), genome.getSappiness(), this.pod.getTextures(), x, y, z); + } + + public boolean setFruitBlock(final World world, final IAlleleFruit allele, final float sappiness, final int x, final int y, final int z) { + return true; + } + + public static int getDirectionalMetadata(final World world, final int x, final int y, final int z) { + for (int i = 0; i < 4; ++i) { + if (isValidPot(world, x, y, z, i)) { + return i; + } + } + return -1; + } + + public static boolean isValidPot(final World world, int x, final int y, int z, final int notchDirection) { + x += Direction.offsetX[notchDirection]; + z += Direction.offsetZ[notchDirection]; + final Block block = world.getBlock(x, y, z); + if (block == Blocks.log || block == Blocks.log2) { + return BlockLog.func_150165_c(world.getBlockMetadata(x, y, z)) == 3; + } + return block != null && block.isWood(world, x, y, z); + } + + @Override + public short getIconIndex(final ITreeGenome genome, final IBlockAccess world, final int x, final int y, final int z, final int ripeningTime, final boolean fancy) { + return this.index.getIndex(); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + if (this.ordinal() == 0) { + for (final FruitSprite sprite : FruitSprite.values()) { + sprite.registerIcons(register); + } + } + } + + @Override + public String getName() { + return this.getDescription(); + } + + public String getNameOfFruit() { + if (this == ExtraTreeFruitGene.Apple) { + return "Apple"; + } + for (final ItemStack stack : this.products.keySet()) { + if (stack.getItem() == ExtraTrees.itemFood) { + return Food.values()[stack.getItemDamage()].toString(); + } + } + return "NoFruit"; + } + + @Override + public String getUnlocalizedName() { + return this.getUID(); + } +} diff --git a/src/main/java/binnie/extratrees/genetics/ExtraTreeGrowthProvider.java b/src/main/java/binnie/extratrees/genetics/ExtraTreeGrowthProvider.java new file mode 100644 index 00000000..0546e418 --- /dev/null +++ b/src/main/java/binnie/extratrees/genetics/ExtraTreeGrowthProvider.java @@ -0,0 +1,59 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.genetics; + +import forestry.api.arboriculture.EnumGrowthConditions; +import net.minecraft.world.World; +import forestry.api.arboriculture.ITreeGenome; +import forestry.api.arboriculture.IGrowthProvider; +import forestry.api.arboriculture.IAlleleGrowth; + +public class ExtraTreeGrowthProvider implements IAlleleGrowth, IGrowthProvider +{ + @Override + public String getUID() { + return "extratrees.fruit." + this.toString().toLowerCase(); + } + + @Override + public boolean isDominant() { + return true; + } + + @Override + public IGrowthProvider getProvider() { + return this; + } + + @Override + public boolean canGrow(final ITreeGenome genome, final World world, final int xPos, final int yPos, final int zPos, final int expectedGirth, final int expectedHeight) { + return false; + } + + @Override + public EnumGrowthConditions getGrowthConditions(final ITreeGenome genome, final World world, final int xPos, final int yPos, final int zPos) { + return null; + } + + @Override + public String getDescription() { + return null; + } + + @Override + public String[] getInfo() { + return null; + } + + @Override + public String getName() { + return this.getProvider().getDescription(); + } + + @Override + public String getUnlocalizedName() { + return this.getUID(); + } +} diff --git a/src/main/java/binnie/extratrees/genetics/ExtraTreeMutation.java b/src/main/java/binnie/extratrees/genetics/ExtraTreeMutation.java new file mode 100644 index 00000000..64d51f9b --- /dev/null +++ b/src/main/java/binnie/extratrees/genetics/ExtraTreeMutation.java @@ -0,0 +1,268 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.genetics; + +import forestry.api.arboriculture.ITreeGenome; +import forestry.api.arboriculture.ITreeRoot; + +import java.util.List; +import java.util.ArrayList; +import java.util.Collection; + +import net.minecraft.world.biome.BiomeGenBase; + +import net.minecraft.world.World; + +import forestry.api.genetics.IMutation; +import binnie.Binnie; +import forestry.api.genetics.AlleleManager; +import forestry.api.arboriculture.IAlleleTreeSpecies; +import forestry.api.genetics.IAllele; +import forestry.api.arboriculture.ITreeMutation; + +public class ExtraTreeMutation implements ITreeMutation +{ + int chance; + boolean isSecret; + IAlleleTreeSpecies allele0; + IAlleleTreeSpecies allele1; + IAllele[] template; + private float minTemperature; + private float maxTemperature; + private float minRainfall; + private float maxRainfall; + private float height; + + public static void init() { + final IAlleleTreeSpecies lemon = (IAlleleTreeSpecies) getVanilla("Lemon"); + new ExtraTreeMutation(getVanilla("Cherry"), lemon, ExtraTreeSpecies.KeyLime, 10); + new ExtraTreeMutation(ExtraTreeSpecies.KeyLime, lemon, ExtraTreeSpecies.FingerLime, 10); + new ExtraTreeMutation(getVanilla("Cherry"), lemon, ExtraTreeSpecies.Pomelo, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Pomelo, getVanilla("Cherry"), ExtraTreeSpecies.Manderin, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Pomelo, lemon, ExtraTreeSpecies.Citron, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Manderin, getVanilla("Cherry"), ExtraTreeSpecies.Kumquat, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Pomelo, ExtraTreeSpecies.Manderin, ExtraTreeSpecies.Orange, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Citron, ExtraTreeSpecies.Manderin, ExtraTreeSpecies.BuddhaHand, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Kumquat, ExtraTreeSpecies.Manderin, ExtraTreeSpecies.Tangerine, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Kumquat, ExtraTreeSpecies.Manderin, ExtraTreeSpecies.Satsuma, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Pomelo, ExtraTreeSpecies.Orange, ExtraTreeSpecies.Grapefruit, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Pomelo, ExtraTreeSpecies.KeyLime, ExtraTreeSpecies.Lime, 10); + new ExtraTreeMutation(getVanilla("Oak"), getVanilla("Cherry"), ExtraTreeSpecies.OrchardApple, 10); + new ExtraTreeMutation(ExtraTreeSpecies.OrchardApple, getVanilla("Maple"), ExtraTreeSpecies.SweetCrabapple, 10); + new ExtraTreeMutation(ExtraTreeSpecies.OrchardApple, ExtraTreeSpecies.SweetCrabapple, ExtraTreeSpecies.FloweringCrabapple, 10); + new ExtraTreeMutation(ExtraTreeSpecies.OrchardApple, getVanilla("Birch"), ExtraTreeSpecies.PrairieCrabapple, 10); + new ExtraTreeMutation(getVanilla("Plum"), ExtraTreeSpecies.OrchardApple, ExtraTreeSpecies.Blackthorn, 10); + new ExtraTreeMutation(getVanilla("Plum"), getVanilla("Cherry"), ExtraTreeSpecies.CherryPlum, 10); + new ExtraTreeMutation(getVanilla("Plum"), getVanilla("Chestnut"), ExtraTreeSpecies.Peach, 10); + new ExtraTreeMutation(getVanilla("Plum"), ExtraTreeSpecies.Peach, ExtraTreeSpecies.Nectarine, 10); + new ExtraTreeMutation(getVanilla("Plum"), ExtraTreeSpecies.Peach, ExtraTreeSpecies.Apricot, 10); + new ExtraTreeMutation(getVanilla("Plum"), getVanilla("Walnut"), ExtraTreeSpecies.Almond, 10); + new ExtraTreeMutation(getVanilla("Lime"), getVanilla("Cherry"), ExtraTreeSpecies.WildCherry, 10); + new ExtraTreeMutation(getVanilla("Willow"), getVanilla("Cherry"), ExtraTreeSpecies.SourCherry, 10); + new ExtraTreeMutation(getVanilla("Ebony"), getVanilla("Cherry"), ExtraTreeSpecies.BlackCherry, 10); + new ExtraTreeMutation(getVanilla("Balsa"), getVanilla("Jungle"), ExtraTreeSpecies.Banana, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Banana, getVanilla("Kapok"), ExtraTreeSpecies.RedBanana, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Banana, getVanilla("Teak"), ExtraTreeSpecies.Plantain, 10); + new ExtraTreeMutation(getVanilla("Birch"), getVanilla("Oak"), ExtraTreeSpecies.Beech, 10); + new ExtraTreeMutation(getVanilla("Birch"), ExtraTreeSpecies.Beech, ExtraTreeSpecies.Alder, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Alder, ExtraTreeSpecies.Beech, ExtraTreeSpecies.Aspen, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Aspen, ExtraTreeSpecies.Alder, ExtraTreeSpecies.Rowan, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Beech, ExtraTreeSpecies.Aspen, ExtraTreeSpecies.Hazel, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Beech, ExtraTreeSpecies.Rowan, ExtraTreeSpecies.Hawthorn, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Alder, ExtraTreeSpecies.Aspen, ExtraTreeSpecies.Elder, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Alder, ExtraTreeSpecies.Rowan, ExtraTreeSpecies.Holly, 10); + new ExtraTreeMutation(getVanilla("Willow"), ExtraTreeSpecies.Aspen, ExtraTreeSpecies.Sallow, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Beech, getVanilla("Birch"), ExtraTreeSpecies.Pecan, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Beech, getVanilla("Spruce"), ExtraTreeSpecies.CopperBeech, 10); + new ExtraTreeMutation(getVanilla("Lime"), getVanilla("Spruce"), ExtraTreeSpecies.Ash, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Ash, getVanilla("Birch"), ExtraTreeSpecies.Whitebeam, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Ash, getVanilla("Pine"), ExtraTreeSpecies.Elm, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Ash, getVanilla("Larch"), ExtraTreeSpecies.Hornbeam, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Ash, getVanilla("Maple"), ExtraTreeSpecies.Sycamore, 10); + new ExtraTreeMutation(getVanilla("Larch"), getVanilla("Spruce"), ExtraTreeSpecies.Yew, 10); + new ExtraTreeMutation(getVanilla("Larch"), ExtraTreeSpecies.Alder, ExtraTreeSpecies.BalsamFir, 10); + new ExtraTreeMutation(getVanilla("Pine"), ExtraTreeSpecies.BalsamFir, ExtraTreeSpecies.Fir, 10); + new ExtraTreeMutation(getVanilla("Pine"), ExtraTreeSpecies.Fir, ExtraTreeSpecies.Hemlock, 10).setHeight(80); + new ExtraTreeMutation(ExtraTreeSpecies.Fir, getVanilla("Larch"), ExtraTreeSpecies.Cedar, 10).setHeight(60); + new ExtraTreeMutation(ExtraTreeSpecies.Fir, getVanilla("Spruce"), ExtraTreeSpecies.DouglasFir, 10).setHeight(60); + new ExtraTreeMutation(getVanilla("Pine"), getVanilla("Spruce"), ExtraTreeSpecies.Cypress, 10); + new ExtraTreeMutation(getVanilla("Pine"), getVanilla("Spruce"), ExtraTreeSpecies.LoblollyPine, 10); + new ExtraTreeMutation(getVanilla("Walnut"), getVanilla("Cherry"), ExtraTreeSpecies.Butternut, 10); + new ExtraTreeMutation(getVanilla("Walnut"), getVanilla("Oak"), ExtraTreeSpecies.AcornOak, 10); + new ExtraTreeMutation(getVanilla("Cherry"), ExtraTreeSpecies.Alder, ExtraTreeSpecies.Olive, 10); + new ExtraTreeMutation(getVanilla("Maple"), getVanilla("Lime"), ExtraTreeSpecies.RedMaple, 10); + new ExtraTreeMutation(getVanilla("Maple"), getVanilla("Larch"), ExtraTreeSpecies.Sweetgum, 10); + new ExtraTreeMutation(getVanilla("Balsa"), getVanilla("Lime"), ExtraTreeSpecies.Locust, 10); + new ExtraTreeMutation(getVanilla("Balsa"), getVanilla("Teak"), ExtraTreeSpecies.Iroko, 10); + new ExtraTreeMutation(ExtraTreeSpecies.OrchardApple, getVanilla("Birch"), ExtraTreeSpecies.Pear, 10); + new ExtraTreeMutation(getVanilla("Ebony"), getVanilla("Teak"), ExtraTreeSpecies.OldFustic, 10); + new ExtraTreeMutation(ExtraTreeSpecies.OldFustic, getVanilla("Kapok"), ExtraTreeSpecies.OsangeOsange, 10); + new ExtraTreeMutation(getVanilla("Ebony"), getVanilla("Teak"), ExtraTreeSpecies.Brazilwood, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Brazilwood, getVanilla("Kapok"), ExtraTreeSpecies.Purpleheart, 10); + new ExtraTreeMutation(getVanilla("Ebony"), getVanilla("Teak"), ExtraTreeSpecies.Rosewood, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Rosewood, getVanilla("Kapok"), ExtraTreeSpecies.Logwood, 10); + new ExtraTreeMutation(getVanilla("Wenge"), getVanilla("Lime"), ExtraTreeSpecies.Gingko, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Beech, getVanilla("Jungle"), ExtraTreeSpecies.Brazilnut, 10); + new ExtraTreeMutation(getVanilla("Balsa"), getVanilla("Jungle"), ExtraTreeSpecies.RoseGum, 10); + new ExtraTreeMutation(ExtraTreeSpecies.RoseGum, getVanilla("Mahogony"), ExtraTreeSpecies.SwampGum, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Coffee, getVanilla("Teak"), ExtraTreeSpecies.Clove, 10); + new ExtraTreeMutation(getVanilla("Cherry"), getVanilla("Jungle"), ExtraTreeSpecies.Coffee, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Holly, ExtraTreeSpecies.Alder, ExtraTreeSpecies.Box, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Hemlock, getVanilla("Jungle"), ExtraTreeSpecies.MonkeyPuzzle, 10); + new ExtraTreeMutation(ExtraTreeSpecies.RoseGum, getVanilla("Balsa"), ExtraTreeSpecies.RainbowGum, 10); + new ExtraTreeMutation(ExtraTreeSpecies.RoseGum, ExtraTreeSpecies.Brazilwood, ExtraTreeSpecies.PinkIvory, 10); + new ExtraTreeMutation(getVanilla("Cherry"), ExtraTreeSpecies.Elder, ExtraTreeSpecies.Raspberry, 10); + new ExtraTreeMutation(getVanilla("Cherry"), ExtraTreeSpecies.Elder, ExtraTreeSpecies.Redcurrant, 10); + new ExtraTreeMutation(ExtraTreeSpecies.BlackCherry, ExtraTreeSpecies.Redcurrant, ExtraTreeSpecies.Blackcurrant, 10); + new ExtraTreeMutation(ExtraTreeSpecies.BlackCherry, ExtraTreeSpecies.Raspberry, ExtraTreeSpecies.Blackberry, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Blackberry, ExtraTreeSpecies.Raspberry, ExtraTreeSpecies.Blueberry, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Blackberry, ExtraTreeSpecies.CherryPlum, ExtraTreeSpecies.Cranberry, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Raspberry, ExtraTreeSpecies.Fir, ExtraTreeSpecies.Juniper, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Raspberry, ExtraTreeSpecies.Lime, ExtraTreeSpecies.Gooseberry, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Raspberry, ExtraTreeSpecies.Orange, ExtraTreeSpecies.GoldenRaspberry, 10); + new ExtraTreeMutation(getVanilla("Teak"), ExtraTreeSpecies.Rosewood, ExtraTreeSpecies.Cinnamon, 10); + new ExtraTreeMutation(getVanilla("Balsa"), ExtraTreeSpecies.Brazilnut, ExtraTreeSpecies.Coconut, 10); + new ExtraTreeMutation(getVanilla("Teak"), getVanilla("Oak"), ExtraTreeSpecies.Cashew, 10); + new ExtraTreeMutation(getVanilla("Wenge"), getVanilla("Oak"), ExtraTreeSpecies.Avacado, 10); + new ExtraTreeMutation(getVanilla("Teak"), ExtraTreeSpecies.Clove, ExtraTreeSpecies.Nutmeg, 10); + new ExtraTreeMutation(getVanilla("Teak"), ExtraTreeSpecies.Clove, ExtraTreeSpecies.Allspice, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Allspice, ExtraTreeSpecies.Clove, ExtraTreeSpecies.StarAnise, 10); + new ExtraTreeMutation(getVanilla("Jungle"), ExtraTreeSpecies.Orange, ExtraTreeSpecies.Mango, 10); + new ExtraTreeMutation(ExtraTreeSpecies.StarAnise, ExtraTreeSpecies.Mango, ExtraTreeSpecies.Starfruit, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Hazel, ExtraTreeSpecies.Gingko, ExtraTreeSpecies.Candlenut, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Hazel, ExtraTreeSpecies.Gingko, ExtraTreeSpecies.Chilli, 10); + new ExtraTreeMutation(ExtraTreeSpecies.Hazel, ExtraTreeSpecies.Alder, ExtraTreeSpecies.DwarfHazel, 10); + } + + public static IAllele getVanilla(final String uid) { + final IAllele allele = AlleleManager.alleleRegistry.getAllele("forestry.tree" + uid); + if (allele == null) { + throw new RuntimeException("No forestry species with id " + uid); + } + return allele; + } + + public ExtraTreeMutation(final IAllele allele0, final IAllele allele1, final IAllele result, final int chance) { + this(allele0, allele1, Binnie.Genetics.getTreeRoot().getTemplate(result.getUID()), chance); + } + + public ExtraTreeMutation(final IAllele allele0, final IAllele allele1, final IAllele[] template, final int chance) { + this.isSecret = false; + this.minTemperature = 0.0f; + this.maxTemperature = 2.0f; + this.minRainfall = 0.0f; + this.maxRainfall = 2.0f; + this.height = -1.0f; + this.allele0 = (IAlleleTreeSpecies) allele0; + this.allele1 = (IAlleleTreeSpecies) allele1; + this.template = template; + this.chance = chance; + Binnie.Genetics.getTreeRoot().registerMutation(this); + } + + public ExtraTreeMutation setIsSecret() { + this.isSecret = true; + return this; + } + + public ExtraTreeMutation setTemperature(final float minTemperature, final float maxTemperature) { + this.minTemperature = minTemperature; + this.maxTemperature = maxTemperature; + return this; + } + + public ExtraTreeMutation setRainfall(final float minRainfall, final float maxRainfall) { + this.minRainfall = minRainfall; + this.maxRainfall = maxRainfall; + return this; + } + + public ExtraTreeMutation setTemperatureRainfall(final float minTemperature, final float maxTemperature, final float minRainfall, final float maxRainfall) { + this.minTemperature = minTemperature; + this.maxTemperature = maxTemperature; + this.minRainfall = minRainfall; + this.maxRainfall = maxRainfall; + return this; + } + + public ExtraTreeMutation setHeight(final int minHeight) { + this.height = minHeight; + return this; + } + + @Override + public IAlleleTreeSpecies getAllele0() { + return this.allele0; + } + + @Override + public IAlleleTreeSpecies getAllele1() { + return this.allele1; + } + + @Override + public float getBaseChance() { + return this.chance; + } + + @Override + public IAllele[] getTemplate() { + return this.template; + } + + @Override + public boolean isPartner(final IAllele allele) { + return this.allele0.getUID().equals(allele.getUID()) || this.allele1.getUID().equals(allele.getUID()); + } + + @Override + public IAllele getPartner(final IAllele allele) { + if (this.allele0.getUID().equals(allele.getUID())) { + return this.allele1; + } + return this.allele0; + } + + @Override + public boolean isSecret() { + return this.isSecret; + } + + @Override + public float getChance(final World world, final int x, final int y, final int z, final IAlleleTreeSpecies allele0, final IAlleleTreeSpecies allele1, final ITreeGenome genome0, final ITreeGenome genome1) { + final int processedChance = this.chance; + final BiomeGenBase biome = world.getWorldChunkManager().getBiomeGenAt(x, z); + if (biome.temperature < this.minTemperature || biome.temperature > this.maxTemperature) { + return 0.0f; + } + if (biome.rainfall < this.minRainfall || biome.rainfall > this.maxRainfall) { + return 0.0f; + } + if (this.height > 0.0f && y < this.height) { + return 0.0f; + } + if (this.allele0.getUID().equals(allele0.getUID()) && this.allele1.getUID().equals(allele1.getUID())) { + return processedChance; + } + if (this.allele1.getUID().equals(allele0.getUID()) && this.allele0.getUID().equals(allele1.getUID())) { + return processedChance; + } + return 0.0f; + } + + @Override + public Collection getSpecialConditions() { + final List conditions = new ArrayList(); + if (this.height > 0.0f) { + conditions.add("Minimum height from bedrock of " + this.height); + } + return conditions; + } + + @Override + public ITreeRoot getRoot() { + return Binnie.Genetics.getTreeRoot(); + } +} diff --git a/src/main/java/binnie/extratrees/genetics/ExtraTreeSpecies.java b/src/main/java/binnie/extratrees/genetics/ExtraTreeSpecies.java new file mode 100644 index 00000000..a98d1138 --- /dev/null +++ b/src/main/java/binnie/extratrees/genetics/ExtraTreeSpecies.java @@ -0,0 +1,1019 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.genetics; + +import java.awt.Color; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Map; +import com.mojang.authlib.GameProfile; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenerator; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import net.minecraftforge.common.EnumPlantType; +import net.minecraftforge.common.util.ForgeDirection; + +import forestry.api.apiculture.EnumBeeChromosome; +import forestry.api.arboriculture.EnumGermlingType; +import forestry.api.arboriculture.EnumLeafType; +import forestry.api.arboriculture.EnumTreeChromosome; +import forestry.api.arboriculture.IAlleleFruit; +import forestry.api.arboriculture.IAlleleTreeSpecies; +import forestry.api.arboriculture.IGermlingIconProvider; +import forestry.api.arboriculture.ITree; +import forestry.api.arboriculture.ITreeGenerator; +import forestry.api.arboriculture.ITreeGenome; +import forestry.api.arboriculture.ITreeRoot; +import forestry.api.arboriculture.TreeManager; +import forestry.api.core.EnumHumidity; +import forestry.api.core.EnumTemperature; +import forestry.api.core.IIconProvider; +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.IAlleleSpecies; +import forestry.api.genetics.IChromosomeType; +import forestry.api.genetics.IClassification; +import forestry.api.genetics.IFruitFamily; +import forestry.api.genetics.IIndividual; +import forestry.api.genetics.IMutation; +import forestry.api.world.ITreeGenData; +import forestry.arboriculture.blocks.BlockForestryLeaves; +import forestry.arboriculture.genetics.Tree; +import forestry.arboriculture.render.TextureLeaves; +import forestry.arboriculture.tiles.TileLeaves; +import forestry.core.config.Constants; +import forestry.core.render.TextureManager; +import forestry.plugins.PluginArboriculture; +import binnie.Binnie; +import binnie.core.Mods; +import binnie.core.genetics.ForestryAllele; +import binnie.extratrees.ExtraTrees; +import binnie.extratrees.block.ILogType; +import binnie.extratrees.gen.WorldGenAlder; +import binnie.extratrees.gen.WorldGenApple; +import binnie.extratrees.gen.WorldGenAsh; +import binnie.extratrees.gen.WorldGenBanana; +import binnie.extratrees.gen.WorldGenBeech; +import binnie.extratrees.gen.WorldGenConifer; +import binnie.extratrees.gen.WorldGenDefault; +import binnie.extratrees.gen.WorldGenEucalyptus; +import binnie.extratrees.gen.WorldGenFir; +import binnie.extratrees.gen.WorldGenHolly; +import binnie.extratrees.gen.WorldGenJungle; +import binnie.extratrees.gen.WorldGenLazy; +import binnie.extratrees.gen.WorldGenMaple; +import binnie.extratrees.gen.WorldGenPalm; +import binnie.extratrees.gen.WorldGenPoplar; +import binnie.extratrees.gen.WorldGenShrub; +import binnie.extratrees.gen.WorldGenSorbus; +import binnie.extratrees.gen.WorldGenTree; +import binnie.extratrees.gen.WorldGenTree2; +import binnie.extratrees.gen.WorldGenTree3; +import binnie.extratrees.gen.WorldGenTropical; +import binnie.extratrees.gen.WorldGenWalnut; + +public enum ExtraTreeSpecies implements IAlleleTreeSpecies, IIconProvider, IGermlingIconProvider +{ + OrchardApple("malus", "domestica", 6588464, 16751859, ILogType.ExtraTreeLog.Apple, ExtraTreeFruitGene.Apple, WorldGenApple.OrchardApple.class), + SweetCrabapple("malus", "coronaria", 8034643, 16528799, ILogType.ExtraTreeLog.Apple, ExtraTreeFruitGene.Crabapple, WorldGenApple.SweetCrabapple.class), + FloweringCrabapple("malus", "hopa", 8034643, 16528799, ILogType.ExtraTreeLog.Apple, ExtraTreeFruitGene.Crabapple, WorldGenApple.FloweringCrabapple.class), + PrairieCrabapple("malus", "ioensis", 8034643, 16528799, ILogType.ExtraTreeLog.Apple, ExtraTreeFruitGene.Crabapple, WorldGenApple.PrairieCrabapple.class), + Blackthorn("prunus", "spinosa ", 7180062, 16746439, ILogType.ForestryLog.PLUM, ExtraTreeFruitGene.Blackthorn, (Class) null), + CherryPlum("prunus", "cerasifera", 7180062, 16746439, ILogType.ForestryLog.PLUM, ExtraTreeFruitGene.CherryPlum, (Class) null), + Peach("prunus", "persica", 7180062, 16721562, ILogType.ForestryLog.PLUM, ExtraTreeFruitGene.Peach, (Class) null), + Nectarine("prunus", "nectarina", 7180062, 16721562, ILogType.ForestryLog.PLUM, ExtraTreeFruitGene.Nectarine, (Class) null), + Apricot("prunus", "armeniaca", 7180062, 16103640, ILogType.ForestryLog.PLUM, ExtraTreeFruitGene.Apricot, (Class) null), + Almond("prunus", "amygdalus", 7180062, 16090304, ILogType.ForestryLog.PLUM, ExtraTreeFruitGene.Almond, (Class) null), + WildCherry("prunus", "avium", 7180062, 16247798, ILogType.ExtraTreeLog.Cherry, ExtraTreeFruitGene.WildCherry, (Class) null), + SourCherry("prunus", "cerasus", 7180062, 16247798, ILogType.ExtraTreeLog.Cherry, ExtraTreeFruitGene.SourCherry, (Class) null), + BlackCherry("prunus", "serotina", 7180062, 16441848, ILogType.ExtraTreeLog.Cherry, ExtraTreeFruitGene.BlackCherry, (Class) null), + Orange("citrus", "sinensis", 8957780, 10729552, ILogType.ForestryLog.CITRUS, ExtraTreeFruitGene.Orange, (Class) null), + Manderin("citrus", "reticulata", 8957780, 10729552, ILogType.ForestryLog.CITRUS, ExtraTreeFruitGene.Manderin, (Class) null), + Satsuma("citrus", "unshiu", 8957780, 10729552, ILogType.ForestryLog.CITRUS, ExtraTreeFruitGene.Satsuma, (Class) null), + Tangerine("citrus", "tangerina", 8957780, 10729552, ILogType.ForestryLog.CITRUS, ExtraTreeFruitGene.Tangerine, (Class) null), + Lime("citrus", "latifolia", 8957780, 10729552, ILogType.ForestryLog.CITRUS, ExtraTreeFruitGene.Lime, (Class) null), + KeyLime("citrus", "aurantifolia", 8957780, 10729552, ILogType.ForestryLog.CITRUS, ExtraTreeFruitGene.KeyLime, (Class) null), + FingerLime("citrus", "australasica", 8957780, 10729552, ILogType.ForestryLog.CITRUS, ExtraTreeFruitGene.FingerLime, (Class) null), + Pomelo("citrus", "maxima", 8957780, 10729552, ILogType.ForestryLog.CITRUS, ExtraTreeFruitGene.Pomelo, (Class) null), + Grapefruit("citrus", "paradisi", 8957780, 10729552, ILogType.ForestryLog.CITRUS, ExtraTreeFruitGene.Grapefruit, (Class) null), + Kumquat("citrus", "margarita", 8957780, 10729552, ILogType.ForestryLog.CITRUS, ExtraTreeFruitGene.Kumquat, (Class) null), + Citron("citrus", "medica", 8957780, 10729552, ILogType.ForestryLog.CITRUS, ExtraTreeFruitGene.Citron, (Class) null), + BuddhaHand("citrus", "sarcodactylus", 8957780, 10729552, ILogType.ForestryLog.CITRUS, ExtraTreeFruitGene.BuddhaHand, (Class) null), + Banana("musa", "sinensis", 10603918, 4515072, ILogType.ExtraTreeLog.Banana, ExtraTreeFruitGene.Banana, WorldGenBanana.class), + RedBanana("musa", "rubra", 10603918, 4515072, ILogType.ExtraTreeLog.Banana, ExtraTreeFruitGene.RedBanana, WorldGenBanana.class), + Plantain("musa", "paradisiaca", 10603918, 4515072, ILogType.ExtraTreeLog.Banana, ExtraTreeFruitGene.Plantain, WorldGenBanana.class), + Butternut("juglans", "cinerea", 8566156, 8576396, ILogType.ExtraTreeLog.Butternut, ExtraTreeFruitGene.Butternut, WorldGenWalnut.Butternut.class), + Rowan("sorbus", "aucuparia", 10405787, 10414258, ILogType.ExtraTreeLog.Rowan, (IAlleleFruit) null, WorldGenSorbus.Rowan.class), + Hemlock("tsuga", "heterophylla", 6073458, 6082930, ILogType.ExtraTreeLog.Hemlock, (IAlleleFruit) null, WorldGenConifer.WesternHemlock.class), + Ash("fraxinus", "excelsior", 4754987, 4777003, ILogType.ExtraTreeLog.Ash, (IAlleleFruit) null, WorldGenAsh.CommonAsh.class), + Alder("alnus", "glutinosa", 6916659, 6925875, ILogType.ExtraTreeLog.Alder, (IAlleleFruit) null, WorldGenAlder.CommonAlder.class), + Beech("fagus", "sylvatica", 8626252, 8635980, ILogType.ExtraTreeLog.Beech, ExtraTreeFruitGene.Beechnut, WorldGenBeech.CommonBeech.class), + CopperBeech("fagus", "purpurea", 8393496, 13720397, ILogType.ExtraTreeLog.Beech, ExtraTreeFruitGene.Beechnut, WorldGenBeech.CopperBeech.class), + Aspen("populus", "tremula", 9096247, 9101711, ILogType.ForestryLog.POPLAR, (IAlleleFruit) null, WorldGenPoplar.Aspen.class), + Yew("taxus", "baccata", 9734733, 9743949, ILogType.ExtraTreeLog.Yew, (IAlleleFruit) null, WorldGenConifer.Yew.class), + Cypress("chamaecyparis", "lawsoniana", 9030055, 9035206, ILogType.ExtraTreeLog.Cypress, (IAlleleFruit) null, WorldGenConifer.Cypress.class), + DouglasFir("pseudotsuga", "menziesii", 10073474, 10080682, ILogType.ExtraTreeLog.Fir, (IAlleleFruit) null, WorldGenFir.DouglasFir.class), + Hazel("Corylus", "avellana", 10204498, 10215762, ILogType.ExtraTreeLog.Hazel, ExtraTreeFruitGene.Hazelnut, WorldGenTree3.Hazel.class), + Sycamore("ficus", "sycomorus", 10528047, 11851100, ILogType.ExtraTreeLog.Fig, ExtraTreeFruitGene.Fig, WorldGenTree3.Sycamore.class), + Whitebeam("sorbus", "aria", 12242585, 7505471, ILogType.ExtraTreeLog.Whitebeam, (IAlleleFruit) null, WorldGenSorbus.Whitebeam.class), + Hawthorn("crataegus", "monogyna", 7055434, 10008443, ILogType.ExtraTreeLog.Hawthorn, (IAlleleFruit) null, WorldGenTree3.Hawthorn.class), + Pecan("carya", "illinoinensis", 8762996, 2906139, ILogType.ExtraTreeLog.Hickory, ExtraTreeFruitGene.Pecan, WorldGenTree3.Pecan.class), + Elm("ulmus", "procera", 8163400, 8175176, ILogType.ExtraTreeLog.Elm, (IAlleleFruit) null, WorldGenTree3.Elm.class), + Elder("sambucus", "nigra", 11450483, 14739389, ILogType.ExtraTreeLog.Elder, ExtraTreeFruitGene.Elderberry, WorldGenTree3.Elder.class), + Holly("ilex", "aquifolium", 2444108, 7246468, ILogType.ExtraTreeLog.Holly, (IAlleleFruit) null, WorldGenHolly.Holly.class), + Hornbeam("carpinus", "betulus", 9873179, 9887003, ILogType.ExtraTreeLog.Hornbeam, (IAlleleFruit) null, WorldGenTree3.Hornbeam.class), + Sallow("salix", "caprea", 11449123, 12053541, ILogType.ForestryLog.WILLOW, (IAlleleFruit) null, WorldGenTree3.Sallow.class), + AcornOak("quercus", "robur", 6714174, 10396209, ILogType.VanillaLog.Oak, ExtraTreeFruitGene.Acorn, WorldGenTree3.AcornOak.class), + Fir("abies", "alba", 7306272, 7328032, ILogType.ExtraTreeLog.Fir, (IAlleleFruit) null, WorldGenFir.SilverFir.class), + Cedar("cedrus", "libani", 9806704, 9824368, ILogType.ExtraTreeLog.Cedar, (IAlleleFruit) null, WorldGenConifer.Cedar.class), + Olive("olea", "europaea", 3950644, 3950644, ILogType.ExtraTreeLog.Olive, ExtraTreeFruitGene.Olive, WorldGenTree2.Olive.class), + RedMaple("acer", "ubrum", 15216151, 15216151, ILogType.ForestryLog.MAPLE, (IAlleleFruit) null, WorldGenMaple.RedMaple.class), + BalsamFir("abies", "balsamea", 7643260, 7643260, ILogType.ExtraTreeLog.Fir, (IAlleleFruit) null, WorldGenFir.BalsamFir.class), + LoblollyPine("pinus", "taeda", 7309895, 7309895, ILogType.ForestryLog.PINE, (IAlleleFruit) null, WorldGenConifer.LoblollyPine.class), + Sweetgum("liquidambar", "styraciflua", 9144162, 9144162, ILogType.ExtraTreeLog.Sweetgum, (IAlleleFruit) null, WorldGenTree2.Sweetgum.class), + Locust("robinia", "pseudoacacia", 8942336, 8942336, ILogType.ExtraTreeLog.Locust, (IAlleleFruit) null, WorldGenTree2.Locust.class), + Pear("pyrus", "communis", 6195238, 6195238, ILogType.ExtraTreeLog.Pear, ExtraTreeFruitGene.Pear, WorldGenTree2.Pear.class), + OsangeOsange("maclura", "pomifera", 6847056, 6847056, ILogType.ExtraTreeLog.Maclura, ExtraTreeFruitGene.OsangeOsange, WorldGenJungle.OsangeOsange.class), + OldFustic("maclura", "tinctoria", 6847056, 6847056, ILogType.ExtraTreeLog.Maclura, (IAlleleFruit) null, WorldGenJungle.OldFustic.class), + Brazilwood("caesalpinia", "echinata", 6321241, 6321241, ILogType.ExtraTreeLog.Brazilwood, (IAlleleFruit) null, WorldGenJungle.Brazilwood.class), + Logwood("haematoxylum", "campechianum", 8953707, 8953707, ILogType.ExtraTreeLog.Logwood, (IAlleleFruit) null, WorldGenJungle.Logwood.class), + Rosewood("dalbergia", "latifolia", 8887074, 8887074, ILogType.ExtraTreeLog.Rosewood, (IAlleleFruit) null, WorldGenJungle.Rosewood.class), + Purpleheart("peltogyne", "spp.", 7835477, 7835477, ILogType.ExtraTreeLog.Purpleheart, (IAlleleFruit) null, WorldGenJungle.Purpleheart.class), + Iroko("milicia", "excelsa", 11520108, 11520108, ILogType.ExtraTreeLog.Iroko, (IAlleleFruit) null, WorldGenTree2.Iroko.class), + Gingko("ginkgo", "biloba", 7444049, 7444049, ILogType.ExtraTreeLog.Gingko, ExtraTreeFruitGene.GingkoNut, WorldGenTree2.Gingko.class), + Brazilnut("bertholletia", "excelsa", 8163195, 8163195, ILogType.VanillaLog.Jungle, ExtraTreeFruitGene.BrazilNut, WorldGenJungle.BrazilNut.class), + RoseGum("eucalyptus", "grandis", 10265176, 10265176, ILogType.ExtraTreeLog.Eucalyptus, (IAlleleFruit) null, WorldGenEucalyptus.RoseGum.class), + SwampGum("eucalyptus", "grandis", 10667654, 10667654, ILogType.ExtraTreeLog.Eucalyptus2, (IAlleleFruit) null, WorldGenEucalyptus.SwampGum.class), + Box("boxus", "sempervirens", 7510381, 7510381, ILogType.ExtraTreeLog.Box, (IAlleleFruit) null, WorldGenTree2.Box.class), + Clove("syzygium", "aromaticum", 8028703, 8028703, ILogType.ExtraTreeLog.Syzgium, ExtraTreeFruitGene.Clove, WorldGenTree2.Clove.class), + Coffee("coffea", "arabica", 7311461, 7311461, ILogType.VanillaLog.Jungle, ExtraTreeFruitGene.Coffee, WorldGenJungle.Coffee.class), + MonkeyPuzzle("araucaria", "araucana", 5726552, 5726552, ILogType.ForestryLog.PINE, (IAlleleFruit) null, WorldGenConifer.MonkeyPuzzle.class), + RainbowGum("eucalyptus", "deglupta", 12054565, 12054565, ILogType.ExtraTreeLog.Eucalyptus3, (IAlleleFruit) null, WorldGenEucalyptus.RainbowGum.class), + PinkIvory("berchemia", "zeyheri", 8163673, 8163673, ILogType.ExtraTreeLog.PinkIvory, (IAlleleFruit) null, WorldGenTree.class), + Blackcurrant("ribes", "nigrum", 10934876, 10934876, (ILogType) null, ExtraTreeFruitGene.Blackcurrant, WorldGenShrub.Shrub.class), + Redcurrant("ribes", "rubrum", 7646208, 7646208, (ILogType) null, ExtraTreeFruitGene.Redcurrant, WorldGenShrub.Shrub.class), + Blackberry("rubus", "fruticosus", 9617755, 9617755, (ILogType) null, ExtraTreeFruitGene.Blackberry, WorldGenShrub.Shrub.class), + Raspberry("rubus", "idaeus", 8632686, 8632686, (ILogType) null, ExtraTreeFruitGene.Raspberry, WorldGenShrub.Shrub.class), + Blueberry("vaccinium", "corymbosum", 7522128, 7522128, (ILogType) null, ExtraTreeFruitGene.Blueberry, WorldGenShrub.Shrub.class), + Cranberry("vaccinium", "oxycoccos", 9884025, 9884025, (ILogType) null, ExtraTreeFruitGene.Cranberry, WorldGenShrub.Shrub.class), + Juniper("juniperus", "communis", 9482569, 9482569, (ILogType) null, ExtraTreeFruitGene.Juniper, WorldGenShrub.Shrub.class), + Gooseberry("ribes", "grossularia", 7977728, 7977728, (ILogType) null, ExtraTreeFruitGene.Gooseberry, WorldGenShrub.Shrub.class), + GoldenRaspberry("rubus", "occidentalis", 8632686, 8632686, (ILogType) null, ExtraTreeFruitGene.GoldenRaspberry, WorldGenShrub.Shrub.class), + Cinnamon("cinnamomum", "cassia", 7573003, 7573003, ILogType.ExtraTreeLog.Cinnamon, (IAlleleFruit) null, WorldGenLazy.Tree.class), + Coconut("cocous", "nucifera", 6592803, 6592803, ILogType.VanillaLog.Jungle, ExtraTreeFruitGene.Coconut, WorldGenPalm.Coconut.class), + Cashew("anacardium", "occidentale", 11254114, 11254114, ILogType.VanillaLog.Jungle, ExtraTreeFruitGene.Cashew, WorldGenLazy.Tree.class), + Avacado("persea", "americana", 9872245, 9872245, ILogType.VanillaLog.Jungle, ExtraTreeFruitGene.Avacado, WorldGenLazy.Tree.class), + Nutmeg("myristica", "fragrans", 4754764, 4754764, ILogType.VanillaLog.Jungle, ExtraTreeFruitGene.Nutmeg, WorldGenLazy.Tree.class), + Allspice("pimenta", "dioica", 8165156, 8165156, ILogType.VanillaLog.Jungle, ExtraTreeFruitGene.Allspice, WorldGenLazy.Tree.class), + Chilli("capsicum", "annuum", 2793217, 2793217, ILogType.VanillaLog.Jungle, ExtraTreeFruitGene.Chilli, WorldGenLazy.Tree.class), + StarAnise("illicium", "verum", 8373257, 8373257, ILogType.VanillaLog.Jungle, ExtraTreeFruitGene.StarAnise, WorldGenLazy.Tree.class), + Mango("mangifera", "indica", 8893812, 8893812, ILogType.VanillaLog.Jungle, ExtraTreeFruitGene.Mango, WorldGenTropical.Mango.class), + Starfruit("averrhoa", "carambola", 7186733, 7186733, ILogType.VanillaLog.Jungle, ExtraTreeFruitGene.Starfruit, WorldGenLazy.Tree.class), + Candlenut("aleurites", "moluccana", 9085804, 9085804, ILogType.VanillaLog.Jungle, ExtraTreeFruitGene.Candlenut, WorldGenLazy.Tree.class), + DwarfHazel("Corylus", "americana", 10204498, 10215762, ILogType.ExtraTreeLog.Hazel, ExtraTreeFruitGene.Hazelnut, WorldGenShrub.Shrub.class); + + private LeafType leafType; + private SaplingType saplingType; + ArrayList families; + int girth; + Class gen; + IAlleleFruit fruit; + IAllele[] template; + int color; + String binomial; + String uid; + ILogType wood; + String branchName; + IClassification branch; + + public static void init() { + final String bookArborist = "Arborist Manual"; + for (final ExtraTreeSpecies species : values()) { + species.preInit(); + } + ExtraTreeSpecies.OrchardApple.finished(); + ExtraTreeSpecies.SweetCrabapple.finished(); + ExtraTreeSpecies.FloweringCrabapple.finished(); + ExtraTreeSpecies.PrairieCrabapple.finished(); + final ExtraTreeSpecies[] arr$2; + final ExtraTreeSpecies[] pruneSpecies = arr$2 = new ExtraTreeSpecies[] { ExtraTreeSpecies.Blackthorn, ExtraTreeSpecies.CherryPlum, ExtraTreeSpecies.Almond, ExtraTreeSpecies.Apricot, ExtraTreeSpecies.Peach, ExtraTreeSpecies.Nectarine, ExtraTreeSpecies.WildCherry, ExtraTreeSpecies.SourCherry, ExtraTreeSpecies.BlackCherry }; + for (final ExtraTreeSpecies species2 : arr$2) { + final IAlleleTreeSpecies citrus = (IAlleleTreeSpecies) AlleleManager.alleleRegistry.getAllele("forestry.treePlum"); + species2.setWorldGen(citrus.getGenerator().getWorldGenerator(TreeManager.treeRoot.templateAsIndividual(citrus.getRoot().getDefaultTemplate())).getClass()); + species2.saplingType = SaplingType.Fruit; + species2.finished(); + } + ExtraTreeSpecies[] arr$3; + final ExtraTreeSpecies[] citrusSpecies = arr$3 = new ExtraTreeSpecies[] { ExtraTreeSpecies.Orange, ExtraTreeSpecies.Manderin, ExtraTreeSpecies.Satsuma, ExtraTreeSpecies.Tangerine, ExtraTreeSpecies.Lime, ExtraTreeSpecies.KeyLime, ExtraTreeSpecies.FingerLime, ExtraTreeSpecies.Pomelo, ExtraTreeSpecies.Grapefruit, ExtraTreeSpecies.Kumquat, ExtraTreeSpecies.Citron, ExtraTreeSpecies.BuddhaHand }; + for (final ExtraTreeSpecies species3 : arr$3) { + species3.setLeafType(LeafType.Jungle); + species3.saplingType = SaplingType.Fruit; + final IAlleleTreeSpecies citrus2 = (IAlleleTreeSpecies) AlleleManager.alleleRegistry.getAllele("forestry.treeLemon"); + species3.setWorldGen(citrus2.getGenerator().getWorldGenerator(TreeManager.treeRoot.templateAsIndividual(citrus2.getRoot().getDefaultTemplate())).getClass()); + species3.finished(); + } + ExtraTreeSpecies.Banana.setLeafType(LeafType.Palm); + ExtraTreeSpecies.RedBanana.setLeafType(LeafType.Palm); + ExtraTreeSpecies.Plantain.setLeafType(LeafType.Palm); + ExtraTreeSpecies.Banana.finished(); + ExtraTreeSpecies.RedBanana.finished(); + ExtraTreeSpecies.Plantain.finished(); + ExtraTreeSpecies.Hemlock.setLeafType(LeafType.Conifer); + ExtraTreeSpecies.Butternut.finished(); + ExtraTreeSpecies.Butternut.setGirth(2); + ExtraTreeSpecies.Rowan.finished(); + ExtraTreeSpecies.Hemlock.finished(); + ExtraTreeSpecies.Hemlock.setGirth(2); + ExtraTreeSpecies.Ash.finished(); + ExtraTreeSpecies.Alder.finished(); + ExtraTreeSpecies.Beech.finished(); + ExtraTreeSpecies.CopperBeech.finished(); + ExtraTreeSpecies.Aspen.finished(); + ExtraTreeSpecies.Yew.setLeafType(LeafType.Conifer); + ExtraTreeSpecies.Cypress.setLeafType(LeafType.Conifer); + ExtraTreeSpecies.DouglasFir.setLeafType(LeafType.Conifer); + ExtraTreeSpecies.Yew.finished(); + ExtraTreeSpecies.Cypress.finished(); + ExtraTreeSpecies.Cypress.saplingType = SaplingType.Poplar; + ExtraTreeSpecies.DouglasFir.finished(); + ExtraTreeSpecies.DouglasFir.setGirth(2); + ExtraTreeSpecies.Hazel.finished(); + ExtraTreeSpecies.DwarfHazel.finished(); + ExtraTreeSpecies.DwarfHazel.saplingType = SaplingType.Shrub; + ExtraTreeSpecies.Sycamore.finished(); + ExtraTreeSpecies.Whitebeam.finished(); + ExtraTreeSpecies.Hawthorn.finished(); + ExtraTreeSpecies.Pecan.finished(); + ExtraTreeSpecies.Fir.setLeafType(LeafType.Conifer); + ExtraTreeSpecies.Cedar.setLeafType(LeafType.Conifer); + ExtraTreeSpecies.Sallow.setLeafType(LeafType.Willow); + ExtraTreeSpecies.Elm.finished(); + ExtraTreeSpecies.Elder.finished(); + ExtraTreeSpecies.Holly.finished(); + ExtraTreeSpecies.Hornbeam.finished(); + ExtraTreeSpecies.Sallow.finished(); + ExtraTreeSpecies.AcornOak.finished(); + ExtraTreeSpecies.AcornOak.setGirth(2); + ExtraTreeSpecies.Fir.finished(); + ExtraTreeSpecies.Cedar.finished(); + ExtraTreeSpecies.Cedar.setGirth(2); + ExtraTreeSpecies.RedMaple.setLeafType(LeafType.Maple); + ExtraTreeSpecies.BalsamFir.setLeafType(LeafType.Conifer); + ExtraTreeSpecies.LoblollyPine.setLeafType(LeafType.Conifer); + ExtraTreeSpecies.Olive.finished(); + ExtraTreeSpecies.RedMaple.finished(); + ExtraTreeSpecies.BalsamFir.finished(); + ExtraTreeSpecies.LoblollyPine.finished(); + ExtraTreeSpecies.Sweetgum.finished(); + ExtraTreeSpecies.Locust.finished(); + ExtraTreeSpecies.Pear.finished(); + ExtraTreeSpecies.OsangeOsange.setLeafType(LeafType.Jungle); + ExtraTreeSpecies.OldFustic.setLeafType(LeafType.Jungle); + ExtraTreeSpecies.Brazilwood.setLeafType(LeafType.Jungle); + ExtraTreeSpecies.Logwood.setLeafType(LeafType.Jungle); + ExtraTreeSpecies.Rosewood.setLeafType(LeafType.Jungle); + ExtraTreeSpecies.Purpleheart.setLeafType(LeafType.Jungle); + ExtraTreeSpecies.OsangeOsange.finished(); + ExtraTreeSpecies.OldFustic.finished(); + ExtraTreeSpecies.Brazilwood.finished(); + ExtraTreeSpecies.Logwood.finished(); + ExtraTreeSpecies.Rosewood.finished(); + ExtraTreeSpecies.Purpleheart.finished(); + ExtraTreeSpecies.Gingko.setLeafType(LeafType.Jungle); + ExtraTreeSpecies.Brazilnut.setLeafType(LeafType.Jungle); + ExtraTreeSpecies.RoseGum.setLeafType(LeafType.Jungle); + ExtraTreeSpecies.SwampGum.setLeafType(LeafType.Jungle); + ExtraTreeSpecies.Coffee.setLeafType(LeafType.Jungle); + ExtraTreeSpecies.MonkeyPuzzle.setLeafType(LeafType.Conifer); + ExtraTreeSpecies.RainbowGum.setLeafType(LeafType.Jungle); + ExtraTreeSpecies.Iroko.finished(); + ExtraTreeSpecies.Gingko.finished(); + ExtraTreeSpecies.Brazilnut.finished(); + ExtraTreeSpecies.RoseGum.finished(); + ExtraTreeSpecies.SwampGum.finished(); + ExtraTreeSpecies.SwampGum.setGirth(2); + ExtraTreeSpecies.Box.finished(); + ExtraTreeSpecies.Clove.finished(); + ExtraTreeSpecies.Coffee.finished(); + ExtraTreeSpecies.MonkeyPuzzle.finished(); + ExtraTreeSpecies.MonkeyPuzzle.setGirth(2); + ExtraTreeSpecies.RainbowGum.finished(); + ExtraTreeSpecies.PinkIvory.finished(); + ExtraTreeSpecies.Juniper.setLeafType(LeafType.Conifer); + ExtraTreeSpecies.Blackcurrant.saplingType = SaplingType.Shrub; + ExtraTreeSpecies.Redcurrant.saplingType = SaplingType.Shrub; + ExtraTreeSpecies.Blackberry.saplingType = SaplingType.Shrub; + ExtraTreeSpecies.Raspberry.saplingType = SaplingType.Shrub; + ExtraTreeSpecies.Blueberry.saplingType = SaplingType.Shrub; + ExtraTreeSpecies.Cranberry.saplingType = SaplingType.Shrub; + ExtraTreeSpecies.Juniper.saplingType = SaplingType.Shrub; + ExtraTreeSpecies.Gooseberry.saplingType = SaplingType.Shrub; + ExtraTreeSpecies.GoldenRaspberry.saplingType = SaplingType.Shrub; + arr$3 = values(); + for (final ExtraTreeSpecies species3 : arr$3) { + final String scientific = species3.branchName.substring(0, 1).toUpperCase() + species3.branchName.substring(1).toLowerCase(); + final String uid = "trees." + species3.branchName.toLowerCase(); + IClassification branch = AlleleManager.alleleRegistry.getClassification("genus." + uid); + if (branch == null) { + branch = AlleleManager.alleleRegistry.createAndRegisterClassification(IClassification.EnumClassLevel.GENUS, uid, scientific); + } + (species3.branch = branch).addMemberSpecies(species3); + } + ExtraTreeSpecies.Cinnamon.setLeafType(LeafType.Jungle); + ExtraTreeSpecies.Coconut.setLeafType(LeafType.Palm); + ExtraTreeSpecies.Cashew.setLeafType(LeafType.Jungle); + ExtraTreeSpecies.Avacado.setLeafType(LeafType.Jungle); + ExtraTreeSpecies.Nutmeg.setLeafType(LeafType.Jungle); + ExtraTreeSpecies.Allspice.setLeafType(LeafType.Jungle); + ExtraTreeSpecies.Chilli.setLeafType(LeafType.Jungle); + ExtraTreeSpecies.StarAnise.setLeafType(LeafType.Jungle); + ExtraTreeSpecies.Mango.setLeafType(LeafType.Jungle); + ExtraTreeSpecies.Starfruit.setLeafType(LeafType.Jungle); + final IFruitFamily familyPrune = AlleleManager.alleleRegistry.getFruitFamily("forestry.prunes"); + final IFruitFamily familyPome = AlleleManager.alleleRegistry.getFruitFamily("forestry.pomes"); + final IFruitFamily familyJungle = AlleleManager.alleleRegistry.getFruitFamily("forestry.jungle"); + final IFruitFamily familyNuts = AlleleManager.alleleRegistry.getFruitFamily("forestry.nuts"); + final IFruitFamily familyBerry = ExtraTreeFruitFamily.Berry; + final IFruitFamily familyCitrus = ExtraTreeFruitFamily.Citrus; + ExtraTreeSpecies.OrchardApple.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.SweetCrabapple.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.FloweringCrabapple.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.PrairieCrabapple.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.Blackthorn.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.CherryPlum.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.Peach.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.Nectarine.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.Apricot.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.Almond.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.WildCherry.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.SourCherry.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.BlackCherry.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.Orange.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.Manderin.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.Satsuma.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.Tangerine.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.Lime.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.KeyLime.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.FingerLime.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.Pomelo.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.Grapefruit.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.Kumquat.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.Citron.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.BuddhaHand.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.Banana.addFamily(familyNuts).addFamily(familyJungle); + ExtraTreeSpecies.RedBanana.addFamily(familyNuts).addFamily(familyJungle); + ExtraTreeSpecies.Plantain.addFamily(familyNuts).addFamily(familyJungle); + ExtraTreeSpecies.Butternut.addFamily(familyPome).addFamily(familyPrune).addFamily(familyNuts).addFamily(familyCitrus); + ExtraTreeSpecies.Rowan.addFamily(familyNuts).addFamily(familyBerry); + ExtraTreeSpecies.Ash.addFamily(familyPome).addFamily(familyPrune).addFamily(familyNuts).addFamily(familyCitrus); + ExtraTreeSpecies.Alder.addFamily(familyPome).addFamily(familyPrune).addFamily(familyNuts); + ExtraTreeSpecies.Beech.addFamily(familyPrune).addFamily(familyNuts); + ExtraTreeSpecies.CopperBeech.addFamily(familyPrune).addFamily(familyNuts); + ExtraTreeSpecies.Aspen.addFamily(familyPome).addFamily(familyNuts); + ExtraTreeSpecies.Hazel.addFamily(familyPrune).addFamily(familyNuts); + ExtraTreeSpecies.Sycamore.addFamily(familyPrune).addFamily(familyNuts).addFamily(familyCitrus); + ExtraTreeSpecies.Whitebeam.addFamily(familyPome).addFamily(familyPrune); + ExtraTreeSpecies.Hawthorn.addFamily(familyPrune).addFamily(familyNuts); + ExtraTreeSpecies.Pecan.addFamily(familyPome).addFamily(familyPrune).addFamily(familyNuts).addFamily(familyCitrus); + ExtraTreeSpecies.Elm.addFamily(familyPome).addFamily(familyPrune); + ExtraTreeSpecies.Elder.addFamily(familyPrune).addFamily(familyNuts).addFamily(familyCitrus).addFamily(familyBerry); + ExtraTreeSpecies.Holly.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.Hornbeam.addFamily(familyPrune).addFamily(familyNuts); + ExtraTreeSpecies.Sallow.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.AcornOak.addFamily(familyPome).addFamily(familyPrune).addFamily(familyNuts); + ExtraTreeSpecies.Olive.addFamily(familyPrune).addFamily(familyNuts).addFamily(familyCitrus); + ExtraTreeSpecies.RedMaple.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.Sweetgum.addFamily(familyNuts); + ExtraTreeSpecies.Locust.addFamily(familyPrune).addFamily(familyNuts).addFamily(familyCitrus); + ExtraTreeSpecies.Pear.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus); + ExtraTreeSpecies.OsangeOsange.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus).addFamily(familyJungle); + ExtraTreeSpecies.OldFustic.addFamily(familyJungle); + ExtraTreeSpecies.Brazilwood.addFamily(familyJungle); + ExtraTreeSpecies.Logwood.addFamily(familyJungle); + ExtraTreeSpecies.Rosewood.addFamily(familyJungle); + ExtraTreeSpecies.Purpleheart.addFamily(familyJungle); + ExtraTreeSpecies.Iroko.addFamily(familyNuts).addFamily(familyJungle); + ExtraTreeSpecies.Gingko.addFamily(familyNuts).addFamily(familyJungle); + ExtraTreeSpecies.Brazilnut.addFamily(familyNuts).addFamily(familyJungle); + ExtraTreeSpecies.RoseGum.addFamily(familyJungle); + ExtraTreeSpecies.SwampGum.addFamily(familyJungle); + ExtraTreeSpecies.Box.addFamily(familyPome).addFamily(familyPrune).addFamily(familyNuts).addFamily(familyCitrus); + ExtraTreeSpecies.Clove.addFamily(familyNuts).addFamily(familyJungle); + ExtraTreeSpecies.Coffee.addFamily(familyNuts).addFamily(familyJungle); + ExtraTreeSpecies.MonkeyPuzzle.addFamily(familyNuts).addFamily(familyJungle); + ExtraTreeSpecies.RainbowGum.addFamily(familyNuts).addFamily(familyJungle); + ExtraTreeSpecies.PinkIvory.addFamily(familyNuts).addFamily(familyJungle); + ExtraTreeSpecies.Blackcurrant.addFamily(familyPrune).addFamily(familyNuts).addFamily(familyBerry); + ExtraTreeSpecies.Redcurrant.addFamily(familyPrune).addFamily(familyNuts).addFamily(familyBerry); + ExtraTreeSpecies.Blackberry.addFamily(familyPrune).addFamily(familyNuts).addFamily(familyBerry); + ExtraTreeSpecies.Raspberry.addFamily(familyPrune).addFamily(familyNuts).addFamily(familyBerry); + ExtraTreeSpecies.Blueberry.addFamily(familyPrune).addFamily(familyNuts).addFamily(familyBerry); + ExtraTreeSpecies.Cranberry.addFamily(familyPrune).addFamily(familyNuts).addFamily(familyBerry); + ExtraTreeSpecies.Juniper.addFamily(familyPrune).addFamily(familyNuts).addFamily(familyBerry); + ExtraTreeSpecies.Gooseberry.addFamily(familyPrune).addFamily(familyNuts).addFamily(familyBerry); + ExtraTreeSpecies.GoldenRaspberry.addFamily(familyPrune).addFamily(familyNuts).addFamily(familyBerry); + ExtraTreeSpecies.Cinnamon.addFamily(familyNuts).addFamily(familyJungle); + ExtraTreeSpecies.Coconut.addFamily(familyJungle); + ExtraTreeSpecies.Cashew.addFamily(familyNuts).addFamily(familyJungle); + ExtraTreeSpecies.Avacado.addFamily(familyPrune).addFamily(familyCitrus).addFamily(familyJungle); + ExtraTreeSpecies.Nutmeg.addFamily(familyNuts).addFamily(familyJungle); + ExtraTreeSpecies.Allspice.addFamily(familyNuts).addFamily(familyJungle); + ExtraTreeSpecies.Chilli.addFamily(familyNuts).addFamily(familyJungle); + ExtraTreeSpecies.StarAnise.addFamily(familyNuts).addFamily(familyJungle); + ExtraTreeSpecies.Mango.addFamily(familyPome).addFamily(familyPrune).addFamily(familyCitrus).addFamily(familyJungle); + ExtraTreeSpecies.Starfruit.addFamily(familyPrune).addFamily(familyCitrus).addFamily(familyJungle); + ExtraTreeSpecies.Candlenut.addFamily(familyNuts).addFamily(familyJungle); + ExtraTreeSpecies.DwarfHazel.addFamily(familyPrune).addFamily(familyNuts); + ExtraTreeSpecies.OrchardApple.setYield(ForestryAllele.Yield.Higher).setSappiness(ForestryAllele.Sappiness.Low).setMaturation(ForestryAllele.Maturation.Faster); + ExtraTreeSpecies.SweetCrabapple.setYield(ForestryAllele.Yield.High).setSappiness(ForestryAllele.Sappiness.Average).setMaturation(ForestryAllele.Maturation.Fast); + ExtraTreeSpecies.FloweringCrabapple.setFertility(ForestryAllele.Saplings.Average).setYield(ForestryAllele.Yield.Average).setSappiness(ForestryAllele.Sappiness.Low).setMaturation(ForestryAllele.Maturation.Fast); + ExtraTreeSpecies.PrairieCrabapple.setHeight(ForestryAllele.TreeHeight.Smallest).setFertility(ForestryAllele.Saplings.Low).setYield(ForestryAllele.Yield.Average).setSappiness(ForestryAllele.Sappiness.Average); + ExtraTreeSpecies.Blackthorn.setHeight(ForestryAllele.TreeHeight.Smallest).setYield(ForestryAllele.Yield.Low).setSappiness(ForestryAllele.Sappiness.Average).setMaturation(ForestryAllele.Maturation.Fast); + ExtraTreeSpecies.CherryPlum.setHeight(ForestryAllele.TreeHeight.Smallest).setYield(ForestryAllele.Yield.Lower).setSappiness(ForestryAllele.Sappiness.Average).setMaturation(ForestryAllele.Maturation.Fast); + ExtraTreeSpecies.Peach.setHeight(ForestryAllele.TreeHeight.Smallest).setFertility(ForestryAllele.Saplings.Low).setYield(ForestryAllele.Yield.Average).setSappiness(ForestryAllele.Sappiness.Average); + ExtraTreeSpecies.Nectarine.setHeight(ForestryAllele.TreeHeight.Smallest).setYield(ForestryAllele.Yield.Average).setSappiness(ForestryAllele.Sappiness.Average); + ExtraTreeSpecies.Apricot.setHeight(ForestryAllele.TreeHeight.Smallest).setYield(ForestryAllele.Yield.Low).setSappiness(ForestryAllele.Sappiness.Average); + ExtraTreeSpecies.Almond.setYield(ForestryAllele.Yield.Lower).setSappiness(ForestryAllele.Sappiness.Lower).setMaturation(ForestryAllele.Maturation.Fast); + ExtraTreeSpecies.WildCherry.setHeight(ForestryAllele.TreeHeight.Smallest).setFertility(ForestryAllele.Saplings.Low).setYield(ForestryAllele.Yield.Lower).setSappiness(ForestryAllele.Sappiness.Low).setMaturation(ForestryAllele.Maturation.Fast); + ExtraTreeSpecies.SourCherry.setYield(ForestryAllele.Yield.Lower).setSappiness(ForestryAllele.Sappiness.Low); + ExtraTreeSpecies.BlackCherry.setHeight(ForestryAllele.TreeHeight.Smallest).setFertility(ForestryAllele.Saplings.Lowest).setYield(ForestryAllele.Yield.Average).setSappiness(ForestryAllele.Sappiness.Lower).setMaturation(ForestryAllele.Maturation.Fast); + ExtraTreeSpecies.Orange.setHeight(ForestryAllele.TreeHeight.Smallest).setYield(ForestryAllele.Yield.Average).setSappiness(ForestryAllele.Sappiness.Average).setMaturation(ForestryAllele.Maturation.Fast); + ExtraTreeSpecies.Manderin.setHeight(ForestryAllele.TreeHeight.Smallest).setFertility(ForestryAllele.Saplings.Low).setYield(ForestryAllele.Yield.High).setSappiness(ForestryAllele.Sappiness.Low); + ExtraTreeSpecies.Satsuma.setHeight(ForestryAllele.TreeHeight.Smallest).setYield(ForestryAllele.Yield.Low).setSappiness(ForestryAllele.Sappiness.Low).setMaturation(ForestryAllele.Maturation.Fast); + ExtraTreeSpecies.Tangerine.setHeight(ForestryAllele.TreeHeight.Smallest).setFertility(ForestryAllele.Saplings.Low).setYield(ForestryAllele.Yield.Average).setSappiness(ForestryAllele.Sappiness.Average).setMaturation(ForestryAllele.Maturation.Faster); + ExtraTreeSpecies.Lime.setHeight(ForestryAllele.TreeHeight.Smallest).setYield(ForestryAllele.Yield.Average).setSappiness(ForestryAllele.Sappiness.Low); + ExtraTreeSpecies.KeyLime.setHeight(ForestryAllele.TreeHeight.Smallest).setFertility(ForestryAllele.Saplings.Lowest).setYield(ForestryAllele.Yield.Average).setSappiness(ForestryAllele.Sappiness.Low).setMaturation(ForestryAllele.Maturation.Fast); + ExtraTreeSpecies.FingerLime.setHeight(ForestryAllele.TreeHeight.Smallest).setYield(ForestryAllele.Yield.High).setSappiness(ForestryAllele.Sappiness.Low).setMaturation(ForestryAllele.Maturation.Fast); + ExtraTreeSpecies.Pomelo.setHeight(ForestryAllele.TreeHeight.Smallest).setFertility(ForestryAllele.Saplings.Low).setYield(ForestryAllele.Yield.Average).setSappiness(ForestryAllele.Sappiness.Lower); + ExtraTreeSpecies.Grapefruit.setHeight(ForestryAllele.TreeHeight.Smallest).setFertility(ForestryAllele.Saplings.Low).setYield(ForestryAllele.Yield.Average).setSappiness(ForestryAllele.Sappiness.Low).setMaturation(ForestryAllele.Maturation.Fast); + ExtraTreeSpecies.Kumquat.setHeight(ForestryAllele.TreeHeight.Smallest).setYield(ForestryAllele.Yield.High).setSappiness(ForestryAllele.Sappiness.Low); + ExtraTreeSpecies.Citron.setHeight(ForestryAllele.TreeHeight.Smallest).setYield(ForestryAllele.Yield.High).setSappiness(ForestryAllele.Sappiness.Average); + ExtraTreeSpecies.BuddhaHand.setYield(ForestryAllele.Yield.Average).setSappiness(ForestryAllele.Sappiness.Low); + ExtraTreeSpecies.Banana.setYield(ForestryAllele.Yield.Low).setSappiness(ForestryAllele.Sappiness.Low).setMaturation(ForestryAllele.Maturation.Fast); + ExtraTreeSpecies.RedBanana.setFertility(ForestryAllele.Saplings.Low).setYield(ForestryAllele.Yield.Lower).setSappiness(ForestryAllele.Sappiness.Lower); + ExtraTreeSpecies.Plantain.setHeight(ForestryAllele.TreeHeight.Average).setYield(ForestryAllele.Yield.Lower); + ExtraTreeSpecies.Butternut.setHeight(ForestryAllele.TreeHeight.Smaller).setYield(ForestryAllele.Yield.Low); + ExtraTreeSpecies.Rowan.setHeight(ForestryAllele.TreeHeight.Larger).setFertility(ForestryAllele.Saplings.Low).setSappiness(ForestryAllele.Sappiness.Lower); + ExtraTreeSpecies.Hemlock.setHeight(ForestryAllele.TreeHeight.Average).setFertility(ForestryAllele.Saplings.Low).setMaturation(ForestryAllele.Maturation.Slower); + ExtraTreeSpecies.Ash.setFertility(ForestryAllele.Saplings.Low).setSappiness(ForestryAllele.Sappiness.Lower); + ExtraTreeSpecies.Alder.setHeight(ForestryAllele.TreeHeight.Average).setSappiness(ForestryAllele.Sappiness.Lower); + ExtraTreeSpecies.Beech.setHeight(ForestryAllele.TreeHeight.Average).setYield(ForestryAllele.Yield.Lower); + ExtraTreeSpecies.CopperBeech.setMaturation(ForestryAllele.Maturation.Slow); + ExtraTreeSpecies.Aspen.setFertility(ForestryAllele.Saplings.Average).setSappiness(ForestryAllele.Sappiness.Lower); + ExtraTreeSpecies.Yew.setHeight(ForestryAllele.TreeHeight.Large).setSappiness(ForestryAllele.Sappiness.Lower); + ExtraTreeSpecies.Cypress.setHeight(ForestryAllele.TreeHeight.Larger).setFertility(ForestryAllele.Saplings.Low).setSappiness(ForestryAllele.Sappiness.Lower).setMaturation(ForestryAllele.Maturation.Slow); + ExtraTreeSpecies.DouglasFir.setHeight(ForestryAllele.TreeHeight.Smaller).setFertility(ForestryAllele.Saplings.Low).setMaturation(ForestryAllele.Maturation.Slower); + ExtraTreeSpecies.Hazel.setHeight(ForestryAllele.TreeHeight.Average).setFertility(ForestryAllele.Saplings.Low).setYield(ForestryAllele.Yield.Low).setSappiness(ForestryAllele.Sappiness.Lower); + ExtraTreeSpecies.Sycamore.setFertility(ForestryAllele.Saplings.Lowest).setSappiness(ForestryAllele.Sappiness.Lower); + ExtraTreeSpecies.Whitebeam.setHeight(ForestryAllele.TreeHeight.Smaller); + ExtraTreeSpecies.Hawthorn.setHeight(ForestryAllele.TreeHeight.Average); + ExtraTreeSpecies.Pecan.setHeight(ForestryAllele.TreeHeight.Large).setSappiness(ForestryAllele.Sappiness.Lower).setMaturation(ForestryAllele.Maturation.Slow); + ExtraTreeSpecies.Elm.setHeight(ForestryAllele.TreeHeight.Smaller).setFertility(ForestryAllele.Saplings.Low).setSappiness(ForestryAllele.Sappiness.Average); + ExtraTreeSpecies.Elder.setHeight(ForestryAllele.TreeHeight.Smaller).setSappiness(ForestryAllele.Sappiness.Low); + ExtraTreeSpecies.Holly.setHeight(ForestryAllele.TreeHeight.Average).setSappiness(ForestryAllele.Sappiness.Low); + ExtraTreeSpecies.Hornbeam.setHeight(ForestryAllele.TreeHeight.Smaller).setFertility(ForestryAllele.Saplings.Low).setYield(ForestryAllele.Yield.Lower).setMaturation(ForestryAllele.Maturation.Slow); + ExtraTreeSpecies.Sallow.setHeight(ForestryAllele.TreeHeight.Large).setFertility(ForestryAllele.Saplings.Low); + ExtraTreeSpecies.AcornOak.setHeight(ForestryAllele.TreeHeight.Large).setYield(ForestryAllele.Yield.Low).setSappiness(ForestryAllele.Sappiness.Lower); + ExtraTreeSpecies.Fir.setHeight(ForestryAllele.TreeHeight.Large).setSappiness(ForestryAllele.Sappiness.Lower).setMaturation(ForestryAllele.Maturation.Slow); + ExtraTreeSpecies.Cedar.setHeight(ForestryAllele.TreeHeight.Smaller).setSappiness(ForestryAllele.Sappiness.Lower).setMaturation(ForestryAllele.Maturation.Slower); + ExtraTreeSpecies.Olive.setYield(ForestryAllele.Yield.Average); + ExtraTreeSpecies.RedMaple.setFertility(ForestryAllele.Saplings.Average).setSappiness(ForestryAllele.Sappiness.High); + ExtraTreeSpecies.BalsamFir.setHeight(ForestryAllele.TreeHeight.Average).setSappiness(ForestryAllele.Sappiness.Lower).setMaturation(ForestryAllele.Maturation.Slow); + ExtraTreeSpecies.LoblollyPine.setHeight(ForestryAllele.TreeHeight.Smaller).setSappiness(ForestryAllele.Sappiness.Lower).setMaturation(ForestryAllele.Maturation.Slow); + ExtraTreeSpecies.Sweetgum.setHeight(ForestryAllele.TreeHeight.Average).setFertility(ForestryAllele.Saplings.High).setYield(ForestryAllele.Yield.Low).setSappiness(ForestryAllele.Sappiness.Average); + ExtraTreeSpecies.Locust.setHeight(ForestryAllele.TreeHeight.Smallest); + ExtraTreeSpecies.Pear.setHeight(ForestryAllele.TreeHeight.Smaller).setFertility(ForestryAllele.Saplings.Low).setYield(ForestryAllele.Yield.High).setSappiness(ForestryAllele.Sappiness.Lower).setMaturation(ForestryAllele.Maturation.Fast); + ExtraTreeSpecies.OsangeOsange.setYield(ForestryAllele.Yield.Lower); + ExtraTreeSpecies.OldFustic.setHeight(ForestryAllele.TreeHeight.Smaller).setSappiness(ForestryAllele.Sappiness.Lower); + ExtraTreeSpecies.Brazilwood.setHeight(ForestryAllele.TreeHeight.Smaller).setFertility(ForestryAllele.Saplings.Low).setYield(ForestryAllele.Yield.Lower).setSappiness(ForestryAllele.Sappiness.Lower); + ExtraTreeSpecies.Logwood.setHeight(ForestryAllele.TreeHeight.Average).setFertility(ForestryAllele.Saplings.Low).setSappiness(ForestryAllele.Sappiness.Lower); + ExtraTreeSpecies.Rosewood.setHeight(ForestryAllele.TreeHeight.Average).setSappiness(ForestryAllele.Sappiness.Lower); + ExtraTreeSpecies.Purpleheart.setHeight(ForestryAllele.TreeHeight.Large).setSappiness(ForestryAllele.Sappiness.Lower); + ExtraTreeSpecies.Iroko.setHeight(ForestryAllele.TreeHeight.Average).setFertility(ForestryAllele.Saplings.Low); + ExtraTreeSpecies.Gingko.setHeight(ForestryAllele.TreeHeight.Large).setYield(ForestryAllele.Yield.Lower).setSappiness(ForestryAllele.Sappiness.Low); + ExtraTreeSpecies.Brazilnut.setHeight(ForestryAllele.TreeHeight.Larger).setYield(ForestryAllele.Yield.Low).setSappiness(ForestryAllele.Sappiness.Low); + ExtraTreeSpecies.RoseGum.setHeight(ForestryAllele.TreeHeight.Largest).setFertility(ForestryAllele.Saplings.Lowest).setYield(ForestryAllele.Yield.Lower).setSappiness(ForestryAllele.Sappiness.Low).setMaturation(ForestryAllele.Maturation.Slowest); + ExtraTreeSpecies.SwampGum.setHeight(ForestryAllele.TreeHeight.Smallest).setFertility(ForestryAllele.Saplings.Lowest).setMaturation(ForestryAllele.Maturation.Slower); + ExtraTreeSpecies.Box.setHeight(ForestryAllele.TreeHeight.Smaller).setMaturation(ForestryAllele.Maturation.Faster); + ExtraTreeSpecies.Clove.setHeight(ForestryAllele.TreeHeight.Smaller).setFertility(ForestryAllele.Saplings.Low).setYield(ForestryAllele.Yield.High).setSappiness(ForestryAllele.Sappiness.Lower).setMaturation(ForestryAllele.Maturation.Fast); + ExtraTreeSpecies.Coffee.setHeight(ForestryAllele.TreeHeight.Large).setYield(ForestryAllele.Yield.Average).setMaturation(ForestryAllele.Maturation.Fast); + ExtraTreeSpecies.MonkeyPuzzle.setHeight(ForestryAllele.TreeHeight.Average).setYield(ForestryAllele.Yield.Lower).setSappiness(ForestryAllele.Sappiness.Low); + ExtraTreeSpecies.RainbowGum.setFertility(ForestryAllele.Saplings.Low).setYield(ForestryAllele.Yield.Lower); + ExtraTreeSpecies.PinkIvory.setHeight(ForestryAllele.TreeHeight.Smallest); + ExtraTreeSpecies.Blackcurrant.setHeight(ForestryAllele.TreeHeight.Smallest).setFertility(ForestryAllele.Saplings.Low).setYield(ForestryAllele.Yield.Average).setSappiness(ForestryAllele.Sappiness.Lower).setMaturation(ForestryAllele.Maturation.Faster); + ExtraTreeSpecies.Redcurrant.setHeight(ForestryAllele.TreeHeight.Smallest).setFertility(ForestryAllele.Saplings.Average).setYield(ForestryAllele.Yield.Average).setSappiness(ForestryAllele.Sappiness.Low).setMaturation(ForestryAllele.Maturation.Faster); + ExtraTreeSpecies.Blackberry.setHeight(ForestryAllele.TreeHeight.Smallest).setYield(ForestryAllele.Yield.High).setSappiness(ForestryAllele.Sappiness.Lower).setMaturation(ForestryAllele.Maturation.Faster); + ExtraTreeSpecies.Raspberry.setHeight(ForestryAllele.TreeHeight.Smallest).setFertility(ForestryAllele.Saplings.Low).setYield(ForestryAllele.Yield.Average).setSappiness(ForestryAllele.Sappiness.Lower).setMaturation(ForestryAllele.Maturation.Faster); + ExtraTreeSpecies.Blueberry.setHeight(ForestryAllele.TreeHeight.Smallest).setFertility(ForestryAllele.Saplings.Average).setYield(ForestryAllele.Yield.Average).setSappiness(ForestryAllele.Sappiness.Low).setMaturation(ForestryAllele.Maturation.Faster); + ExtraTreeSpecies.Cranberry.setHeight(ForestryAllele.TreeHeight.Smallest).setFertility(ForestryAllele.Saplings.Average).setYield(ForestryAllele.Yield.High).setSappiness(ForestryAllele.Sappiness.Low).setMaturation(ForestryAllele.Maturation.Faster); + ExtraTreeSpecies.Juniper.setHeight(ForestryAllele.TreeHeight.Smallest).setFertility(ForestryAllele.Saplings.Low).setYield(ForestryAllele.Yield.Low).setSappiness(ForestryAllele.Sappiness.Low).setMaturation(ForestryAllele.Maturation.Faster); + ExtraTreeSpecies.Gooseberry.setHeight(ForestryAllele.TreeHeight.Smallest).setFertility(ForestryAllele.Saplings.High).setYield(ForestryAllele.Yield.High).setMaturation(ForestryAllele.Maturation.Faster); + ExtraTreeSpecies.GoldenRaspberry.setHeight(ForestryAllele.TreeHeight.Smaller).setFertility(ForestryAllele.Saplings.Low).setYield(ForestryAllele.Yield.Average).setSappiness(ForestryAllele.Sappiness.Lower).setMaturation(ForestryAllele.Maturation.Fastest); + ExtraTreeSpecies.Cinnamon.setHeight(ForestryAllele.TreeHeight.Average).setYield(ForestryAllele.Yield.Lower).setMaturation(ForestryAllele.Maturation.Fast); + ExtraTreeSpecies.Coconut.setHeight(ForestryAllele.TreeHeight.Smaller).setFertility(ForestryAllele.Saplings.Low).setYield(ForestryAllele.Yield.Average).setMaturation(ForestryAllele.Maturation.Fast); + ExtraTreeSpecies.Cashew.setYield(ForestryAllele.Yield.Low); + ExtraTreeSpecies.Avacado.setHeight(ForestryAllele.TreeHeight.Smallest).setYield(ForestryAllele.Yield.Average); + ExtraTreeSpecies.Nutmeg.setHeight(ForestryAllele.TreeHeight.Smaller).setYield(ForestryAllele.Yield.High).setSappiness(ForestryAllele.Sappiness.Low); + ExtraTreeSpecies.Allspice.setHeight(ForestryAllele.TreeHeight.Smallest).setFertility(ForestryAllele.Saplings.Low).setYield(ForestryAllele.Yield.High); + ExtraTreeSpecies.Chilli.setHeight(ForestryAllele.TreeHeight.Smaller).setYield(ForestryAllele.Yield.Higher).setSappiness(ForestryAllele.Sappiness.Lower).setMaturation(ForestryAllele.Maturation.Fast); + ExtraTreeSpecies.StarAnise.setHeight(ForestryAllele.TreeHeight.Average).setYield(ForestryAllele.Yield.High); + ExtraTreeSpecies.Mango.setHeight(ForestryAllele.TreeHeight.Smaller).setFertility(ForestryAllele.Saplings.Low).setYield(ForestryAllele.Yield.Average).setSappiness(ForestryAllele.Sappiness.Lower).setMaturation(ForestryAllele.Maturation.Fast); + ExtraTreeSpecies.Starfruit.setYield(ForestryAllele.Yield.Average).setMaturation(ForestryAllele.Maturation.Fast); + ExtraTreeSpecies.Candlenut.setHeight(ForestryAllele.TreeHeight.Smallest).setFertility(ForestryAllele.Saplings.Lowest).setYield(ForestryAllele.Yield.Low).setSappiness(ForestryAllele.Sappiness.Low); + ExtraTreeSpecies.DwarfHazel.setFertility(ForestryAllele.Saplings.Average).setSappiness(ForestryAllele.Sappiness.Lower).setMaturation(ForestryAllele.Maturation.Faster); + } + + private ExtraTreeSpecies addFamily(final IFruitFamily family) { + this.families.add(family); + return this; + } + + static final ItemStack getEBXLStack(final String name) { + try { + final Class elements = Class.forName("extrabiomes.lib.Element"); + final Method getElementMethod = elements.getMethod("valueOf", String.class); + final Method getItemStack = elements.getMethod("get", new Class[0]); + final Object element = getElementMethod.invoke(null, "SAPLING_AUTUMN_YELLOW"); + return (ItemStack) getItemStack.invoke(element, new Object[0]); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private void setWorldGen(final Class gen) { + this.gen = gen; + } + + private void setGirth(final int i) { + this.template[EnumTreeChromosome.GIRTH.ordinal()] = AlleleManager.alleleRegistry.getAllele("forestry.i" + i + "d"); + } + + public void preInit() { + (this.template = Binnie.Genetics.getTreeRoot().getDefaultTemplate())[0] = this; + if (this.fruit != null) { + this.template[EnumTreeChromosome.FRUITS.ordinal()] = this.fruit; + } + this.template[EnumTreeChromosome.GIRTH.ordinal()] = AlleleManager.alleleRegistry.getAllele("forestry.i" + this.girth + "d"); + final IClassification clas = AlleleManager.alleleRegistry.getClassification("trees." + this.branch); + if (clas != null) { + clas.addMemberSpecies(this); + this.branch = clas; + } + } + + int colorPollineted; + + private ExtraTreeSpecies(final String branch, final String binomial, final int color, final int polColor, final ILogType wood, final IAlleleFruit fruit, final Class gen) { + this.leafType = LeafType.Normal; + this.saplingType = SaplingType.Default; + this.families = new ArrayList(); + this.girth = 1; + this.fruit = null; + this.color = color; + this.colorPollineted = new Color(color).brighter().getRGB(); + this.uid = this.toString().toLowerCase(); + this.wood = wood; + this.fruit = fruit; + this.gen = ((gen == null) ? WorldGenTree.class : gen); + this.branchName = branch; + this.binomial = binomial; + } + + @Override + public String getName() { + return ExtraTrees.proxy.localise("species." + this.name().toLowerCase() + ".name"); + } + + @Override + public String getDescription() { + return ExtraTrees.proxy.localiseOrBlank("species." + this.name().toLowerCase() + ".desc"); + } + + @Override + public EnumTemperature getTemperature() { + return EnumTemperature.NORMAL; + } + + @Override + public EnumHumidity getHumidity() { + return EnumHumidity.NORMAL; + } + + @Override + public boolean hasEffect() { + return false; + } + + @Override + public boolean isSecret() { + return false; + } + + @Override + public boolean isCounted() { + return true; + } + + @Override + public String getBinomial() { + return this.binomial; + } + + @Override + public String getAuthority() { + return "Binnie"; + } + + @Override + public IClassification getBranch() { + return this.branch; + } + + @Override + public String getUID() { + return "extratrees.species." + this.uid; + } + + @Override + public boolean isDominant() { + return true; + } + + @Override + public EnumPlantType getPlantType() { + return EnumPlantType.Plains; + } + + @Override + public ITreeGenerator getGenerator() { + return new ITreeGenerator() { + + @Override + public void setLogBlock(ITreeGenome arg0, World arg1, int arg2, int arg3, int arg4, ForgeDirection arg5) { + if (ExtraTreeSpecies.this.wood != null) + ExtraTreeSpecies.this.wood.placeBlock(arg1, arg2, arg3, arg4); + } + + @Override + public void setLeaves(ITreeGenome genome, World world, GameProfile owner, int x, int y, int z, boolean decorative) { + boolean placed = world.setBlock(x, y, z, PluginArboriculture.blocks.leaves, 0, Constants.FLAG_BLOCK_SYNCH_AND_UPDATE); + if (!placed) { + return; + } + + Block block = world.getBlock(x, y, z); + if (PluginArboriculture.blocks.leaves != block) { + world.setBlockToAir(x, y, z); + return; + } + + TileLeaves tileLeaves = BlockForestryLeaves.getLeafTile(world, x, y, z); + if (tileLeaves == null) { + world.setBlockToAir(x, y, z); + return; + } + + tileLeaves.setOwner(owner); + if (decorative) { + tileLeaves.setDecorative(); + } + tileLeaves.setTree(new Tree(genome)); + + world.markBlockForUpdate(x, y, z); + } + + @Override + public void setLogBlock(World arg0, int arg1, int arg2, int arg3, ForgeDirection arg4) { + ExtraTreeSpecies.this.wood.placeBlock(arg0, arg1, arg2, arg3); + } + + @Override + public void setLeaves(World world, GameProfile arg1, int x, int y, int z, boolean arg5) { + + } + + @Override + public WorldGenerator getWorldGenerator(ITreeGenData tree) { + return ExtraTreeSpecies.this.getGenerator(tree); + } + + }; + } + + public WorldGenerator getGenerator(final ITreeGenData tree) { + if (this.gen != null) { + try { + return this.gen.getConstructor(ITree.class).newInstance(tree); + } catch (Exception ex) { + } + } + return new WorldGenDefault(tree); + } + + void setLeafType(final LeafType type) { + this.leafType = type; + if (this.leafType == LeafType.Conifer) { + this.saplingType = SaplingType.Conifer; + } + if (this.leafType == LeafType.Jungle) { + this.saplingType = SaplingType.Jungle; + } + if (this.leafType == LeafType.Palm) { + this.saplingType = SaplingType.Palm; + } + } + + public IAllele[] getTemplate() { + return this.template; + } + + @Override + public ArrayList getSuitableFruit() { + return this.families; + } + + public ILogType getLog() { + return this.wood; + } + + public ExtraTreeSpecies setHeight(final ForestryAllele.TreeHeight height) { + final IAllele allele = height.getAllele(); + if (allele != null) { + this.template[EnumTreeChromosome.HEIGHT.ordinal()] = allele; + } + return this; + } + + public ExtraTreeSpecies setSappiness(final ForestryAllele.Sappiness height) { + final IAllele allele = height.getAllele(); + if (allele != null) { + this.template[EnumTreeChromosome.SAPPINESS.ordinal()] = allele; + } + return this; + } + + public ExtraTreeSpecies setMaturation(final ForestryAllele.Maturation height) { + final IAllele allele = height.getAllele(); + if (allele != null) { + this.template[EnumTreeChromosome.MATURATION.ordinal()] = allele; + } + return this; + } + + public ExtraTreeSpecies setYield(final ForestryAllele.Yield height) { + final IAllele allele = height.getAllele(); + if (allele != null) { + this.template[EnumTreeChromosome.YIELD.ordinal()] = allele; + } + return this; + } + + public ExtraTreeSpecies setFertility(final ForestryAllele.Saplings height) { + final IAllele allele = height.getAllele(); + if (allele != null) { + this.template[EnumTreeChromosome.FERTILITY.ordinal()] = allele; + } + return this; + } + + public void setGrowthConditions(final ForestryAllele.Growth growth) { + final IAllele allele = growth.getAllele(); + if (allele != null) { + this.template[EnumTreeChromosome.GROWTH.ordinal()] = allele; + } + } + + public void finished() { + } + + public int getLeafColour(final ITree tree) { + return this.color; + } + + public short getLeafIconIndex(final ITree tree, final boolean fancy) { + if (!fancy) { + return this.leafType.plainUID; + } + if (tree.getMate() != null) { + return this.leafType.changedUID; + } + return this.leafType.fancyUID; + } + + @Override + public int getIconColour(final int renderPass) { + return (renderPass == 0) ? this.color : 0xFFFFFF;// 10451021; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getGermlingIcon(final EnumGermlingType type, final int renderPass) { + if (type == EnumGermlingType.POLLEN) { + return PluginArboriculture.items.pollenFertile.getIcon(PluginArboriculture.items.pollenFertile.getItemStack(), renderPass); + } + + return (renderPass == 0) ? this.saplingType.icon[1] : this.saplingType.icon[0]; + } + + @Override + public IIconProvider getIconProvider() { + return this; + } + + @Override + public IIcon getIcon(final short texUID) { + return TextureManager.getInstance().getIcon(texUID); + } + + @Override + public void registerIcons(final IIconRegister register) { + for (final SaplingType type : SaplingType.values()) { + (type.icon = new IIcon[2])[0] = ExtraTrees.proxy.getIcon(register, "saplings/" + type.toString().toLowerCase() + ".trunk"); + type.icon[1] = ExtraTrees.proxy.getIcon(register, "saplings/" + type.toString().toLowerCase() + ".leaves"); + } + } + + @Override + public ITreeRoot getRoot() { + return Binnie.Genetics.getTreeRoot(); + } + + @Override + public float getResearchSuitability(final ItemStack itemstack) { + if (itemstack == null) { + return 0.0f; + } + if (this.template[EnumTreeChromosome.FRUITS.ordinal()] instanceof ExtraTreeFruitGene) { + final ExtraTreeFruitGene fruit = (ExtraTreeFruitGene) this.template[EnumTreeChromosome.FRUITS.ordinal()]; + for (final ItemStack stack : fruit.products.keySet()) { + if (stack.isItemEqual(itemstack)) { + return 1.0f; + } + } + } + if (itemstack.getItem() == Mods.Forestry.item("honeyDrop")) { + return 0.5f; + } + if (itemstack.getItem() == Mods.Forestry.item("honeydew")) { + return 0.7f; + } + if (itemstack.getItem() == Mods.Forestry.item("beeComb")) { + return 0.4f; + } + if (AlleleManager.alleleRegistry.isIndividual(itemstack)) { + return 1.0f; + } + for (final Map.Entry entry : this.getRoot().getResearchCatalysts().entrySet()) { + if (entry.getKey().isItemEqual(itemstack)) { + return entry.getValue(); + } + } + return 0.0f; + } + + @Override + public ItemStack[] getResearchBounty(final World world, final GameProfile researcher, final IIndividual individual, final int bountyLevel) { + final ArrayList bounty = new ArrayList(); + ItemStack research = null; + if (world.rand.nextFloat() < 10.0f / bountyLevel) { + final Collection combinations = this.getRoot().getCombinations(this); + if (combinations.size() > 0) { + final IMutation[] candidates = combinations.toArray(new IMutation[0]); + research = AlleleManager.alleleRegistry.getMutationNoteStack(researcher, candidates[world.rand.nextInt(candidates.length)]); + } + } + if (research != null) { + bounty.add(research); + } + if (this.template[EnumTreeChromosome.FRUITS.ordinal()] instanceof ExtraTreeFruitGene) { + final ExtraTreeFruitGene fruit = (ExtraTreeFruitGene) this.template[EnumTreeChromosome.FRUITS.ordinal()]; + for (final ItemStack stack : fruit.products.keySet()) { + final ItemStack stack2 = stack.copy(); + stack2.stackSize = world.rand.nextInt((int) (bountyLevel / 2.0f)) + 1; + bounty.add(stack2); + } + } + return bounty.toArray(new ItemStack[0]); + } + + @Override + @SideOnly(Side.CLIENT) + public int getGermlingColour(final EnumGermlingType type, int renderPass) { + if (type == EnumGermlingType.SAPLING) { + return (renderPass == 0) ? this.getLeafColour(null) : ((this.getLog() == null) ? 16777215 : this.getLog().getColour()); + } + return this.getLeafColour(null); + } + + @Override + public int getComplexity() { + return 1 + this.getGeneticAdvancement(this, new ArrayList()); + } + + private int getGeneticAdvancement(final IAllele species, final ArrayList exclude) { + final int own = 1; + int highest = 0; + exclude.add(species); + for (final IMutation mutation : this.getRoot().getPaths(species, EnumBeeChromosome.SPECIES)) { + if (!exclude.contains(mutation.getAllele0())) { + final int otherAdvance = this.getGeneticAdvancement(mutation.getAllele0(), exclude); + if (otherAdvance > highest) { + highest = otherAdvance; + } + } + if (!exclude.contains(mutation.getAllele1())) { + final int otherAdvance = this.getGeneticAdvancement(mutation.getAllele1(), exclude); + if (otherAdvance <= highest) { + continue; + } + highest = otherAdvance; + } + } + return own + ((highest < 0) ? 0 : highest); + } + + public ItemStack[] getLogStacks() { + if (this.wood == null) { + return new ItemStack[0]; + } + return new ItemStack[] { this.wood.getItemStack() }; + } + + @Override + public String getUnlocalizedName() { + return "extratrees.species." + this.toString().toLowerCase() + ".name"; + } + + public enum LeafType + { + Normal((short) 10, (short) 11, (short) 12, "Deciduous"), + Conifer((short) 15, (short) 16, (short) 17, "Conifers"), + Jungle((short) 20, (short) 21, (short) 22, "Jungle"), + Willow((short) 25, (short) 26, (short) 27, "Willow"), + Maple((short) 30, (short) 31, (short) 32, "Maple"), + Palm((short) 35, (short) 36, (short) 37, "Palm"); + + public final short fancyUID; + public final short plainUID; + public final short changedUID; + public final String descript; + + private LeafType(final short fancyUID, final short plainUID, final short changedUID, final String descript) { + this.fancyUID = fancyUID; + this.plainUID = plainUID; + this.changedUID = changedUID; + this.descript = descript; + } + } + + public enum SaplingType + { + Default, + Jungle, + Conifer, + Fruit, + Poplar, + Palm, + Shrub; + + IIcon[] icon; + } + + @Override + public int getLeafColour(boolean pollinated) { + return pollinated ? colorPollineted : color; + } + + @SideOnly(Side.CLIENT) + @Override + public IIcon getLeafIcon(boolean pollinated, boolean fancy) { + try { + if (pollinated) + return TextureLeaves.get(EnumLeafType.valueOf(leafType.descript.toUpperCase())).getPollinated(); + if (fancy) + return TextureLeaves.get(EnumLeafType.valueOf(leafType.descript.toUpperCase())).getFancy(); + return TextureLeaves.get(EnumLeafType.valueOf(leafType.descript.toUpperCase())).getPlain(); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + @SideOnly(Side.CLIENT) + @Override + public IIcon getIcon(EnumGermlingType type, int renderPass) { + return getGermlingIcon(type, renderPass); + } + +} diff --git a/src/main/java/binnie/extratrees/genetics/FruitSprite.java b/src/main/java/binnie/extratrees/genetics/FruitSprite.java new file mode 100644 index 00000000..ece4683c --- /dev/null +++ b/src/main/java/binnie/extratrees/genetics/FruitSprite.java @@ -0,0 +1,46 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.genetics; + +import binnie.extratrees.ExtraTrees; +import binnie.Binnie; +import net.minecraft.client.renderer.texture.IIconRegister; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.IIcon; +import binnie.core.resource.BinnieIcon; +import forestry.api.core.IIconProvider; + +public enum FruitSprite implements IIconProvider +{ + Tiny, + Small, + Average, + Large, + Larger, + Pear; + + BinnieIcon icon; + + public short getIndex() { + return (short) (this.ordinal() + 4200); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final short texUID) { + final int index = texUID - 4200; + if (index >= 0 && index < values().length) { + return values()[index].icon.getIcon(); + } + return null; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.icon = Binnie.Resource.getBlockIcon(ExtraTrees.instance, "fruit/" + this.toString().toLowerCase()); + } +} diff --git a/src/main/java/binnie/extratrees/genetics/ModuleGenetics.java b/src/main/java/binnie/extratrees/genetics/ModuleGenetics.java new file mode 100644 index 00000000..199f298d --- /dev/null +++ b/src/main/java/binnie/extratrees/genetics/ModuleGenetics.java @@ -0,0 +1,113 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.genetics; + +import java.util.Locale; +import forestry.api.genetics.IAlleleSpecies; +import forestry.api.genetics.IClassification; +import binnie.core.BinnieCore; +import binnie.Binnie; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.AlleleManager; +import java.util.ArrayList; +import java.util.List; +import binnie.core.IInitializable; + +public class ModuleGenetics implements IInitializable +{ + String[] branches; + List> classifications; + + public ModuleGenetics() { + this.branches = new String[] { "Malus Maleae Amygdaloideae Rosaceae", "Musa Musaceae Zingiberales Commelinids Angiosperms", "Sorbus Maleae", "Tsuga Pinaceae", "Fraxinus Oleeae Oleaceae Lamiales Asterids Angiospems" }; + this.classifications = new ArrayList>(); + } + + @Override + public void preInit() { + for (final ExtraTreeFruitGene fruit : ExtraTreeFruitGene.values()) { + AlleleManager.alleleRegistry.registerAllele(fruit); + } + for (final ExtraTreeSpecies species : ExtraTreeSpecies.values()) { + AlleleManager.alleleRegistry.registerAllele(species); + } + } + + @Override + public void init() { + } + + @Override + public void postInit() { + ExtraTreeSpecies.init(); + ExtraTreeFruitGene.init(); + for (final ExtraTreeSpecies species : ExtraTreeSpecies.values()) { + Binnie.Genetics.getTreeRoot().registerTemplate(species.getTemplate()); + } + ExtraTreeMutation.init(); + if (BinnieCore.isLepidopteryActive()) { + for (final ButterflySpecies species2 : ButterflySpecies.values()) { + AlleleManager.alleleRegistry.registerAllele(species2); + Binnie.Genetics.getButterflyRoot().registerTemplate(species2.getTemplate()); + final String scientific = species2.branchName.substring(0, 1).toUpperCase() + species2.branchName.substring(1).toLowerCase(); + final String uid = "trees." + species2.branchName.toLowerCase(); + IClassification branch = AlleleManager.alleleRegistry.getClassification("genus." + uid); + if (branch == null) { + branch = AlleleManager.alleleRegistry.createAndRegisterClassification(IClassification.EnumClassLevel.GENUS, uid, scientific); + } + (species2.branch = branch).addMemberSpecies(species2); + } + } + } + + private void generateBranches() { + for (final String hierarchy : this.branches) { + final List set = new ArrayList(); + for (final String string : hierarchy.split(" ", 0)) { + set.add(string.toLowerCase()); + } + this.classifications.add(set); + } + for (final ExtraTreeSpecies species : ExtraTreeSpecies.values()) { + final IClassification branch = this.getOrCreateClassification(IClassification.EnumClassLevel.GENUS, species.branchName); + branch.addMemberSpecies(species); + species.branch = branch; + IClassification clss = branch; + int currentLevel = IClassification.EnumClassLevel.GENUS.ordinal(); + while (clss.getParent() == null) { + for (final List set2 : this.classifications) { + if (set2.contains(clss.getScientific().toLowerCase())) { + String nextLevel = ""; + int index = set2.indexOf(clss.getScientific().toLowerCase()) + 1; + while (nextLevel.length() == 0) { + try { + nextLevel = set2.get(index++); + } catch (IndexOutOfBoundsException ex) { + throw new RuntimeException("Reached end point at " + set2.get(index - 2)); + } + --currentLevel; + } + final IClassification parent = this.getOrCreateClassification(IClassification.EnumClassLevel.values()[currentLevel], nextLevel); + parent.addMemberGroup(clss); + System.out.println("Went from " + clss.getScientific() + " to " + parent.getScientific()); + clss = parent; + break; + } + } + } + } + } + + private IClassification getOrCreateClassification(final IClassification.EnumClassLevel level, String name) { + if (level == IClassification.EnumClassLevel.GENUS) { + name = "trees." + name; + } + final String uid = level.name().toLowerCase(Locale.ENGLISH) + "." + name.toLowerCase(); + if (AlleleManager.alleleRegistry.getClassification(uid) != null) { + return AlleleManager.alleleRegistry.getClassification(uid); + } + return AlleleManager.alleleRegistry.createAndRegisterClassification(level, name.toLowerCase(), name); + } +} diff --git a/src/main/java/binnie/extratrees/item/ExtraTreeItems.java b/src/main/java/binnie/extratrees/item/ExtraTreeItems.java new file mode 100644 index 00000000..c2291441 --- /dev/null +++ b/src/main/java/binnie/extratrees/item/ExtraTreeItems.java @@ -0,0 +1,68 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.item; + +import java.util.List; +import binnie.extratrees.ExtraTrees; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import binnie.core.item.IItemMisc; + +public enum ExtraTreeItems implements IItemMisc +{ + CarpentryHammer("Fake Hammer", "carpentryHammer"), + Sawdust("Sawdust", "sawdust"), + Bark("Bark", "bark"), + ProvenGear("Proven Gear", "provenGear"), + WoodWax("Wood Polish", "woodWax"), + Hops("Hops", "hops"), + Yeast("Yeast", "yeast"), + LagerYeast("Lager Yeast", "yeastLager"), + GrainWheat("Wheat Grain", "grainWheat"), + GrainBarley("Barley Grain", "grainBarley"), + GrainRye("Rye Grain", "grainRye"), + GrainCorn("Corn Grain", "grainCorn"), + GrainRoasted("Roasted Grain", "grainRoasted"), + GlassFitting("Glass Fittings", "glassFitting"); + + String name; + String iconPath; + IIcon icon; + + private ExtraTreeItems(final String name, final String iconPath) { + this.name = name; + this.iconPath = iconPath; + } + + @Override + public IIcon getIcon(final ItemStack stack) { + return this.icon; + } + + @Override + public void registerIcons(final IIconRegister register) { + this.icon = ExtraTrees.proxy.getIcon(register, this.iconPath); + } + + @Override + public void addInformation(final List par3List) { + } + + @Override + public String getName(final ItemStack stack) { + return this.name; + } + + @Override + public boolean isActive() { + return this != ExtraTreeItems.CarpentryHammer; + } + + @Override + public ItemStack get(final int i) { + return new ItemStack(ExtraTrees.itemMisc, i, this.ordinal()); + } +} diff --git a/src/main/java/binnie/extratrees/item/ExtraTreeLiquid.java b/src/main/java/binnie/extratrees/item/ExtraTreeLiquid.java new file mode 100644 index 00000000..10967ec5 --- /dev/null +++ b/src/main/java/binnie/extratrees/item/ExtraTreeLiquid.java @@ -0,0 +1,83 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.item; + +import binnie.core.liquid.FluidContainer; +import binnie.Binnie; +import net.minecraftforge.fluids.FluidStack; +import binnie.extratrees.ExtraTrees; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import binnie.core.liquid.ILiquidType; + +public enum ExtraTreeLiquid implements ILiquidType +{ + Sap("Sap", "sap", 12481858), + Resin("Resin", "resin", 13199360), + Latex("Latex", "latex", 14212041), + Turpentine("Turpentine", "turpentine", 7951162); + + public String name; + String ident; + IIcon icon; + int colour; + + private ExtraTreeLiquid(final String name, final String ident, final int colour) { + this.name = ""; + this.name = name; + this.ident = ident; + this.colour = colour; + } + + @Override + public IIcon getIcon() { + return this.icon; + } + + @Override + public void registerIcon(final IIconRegister register) { + this.icon = ExtraTrees.proxy.getIcon(register, "liquids/" + this.getIdentifier()); + } + + @Override + public String getName() { + return this.name; + } + + @Override + public String getIdentifier() { + return this.ident; + } + + @Override + public int getColour() { + return 16777215; + } + + @Override + public FluidStack get(final int i) { + return Binnie.Liquid.getLiquidStack(this.ident, i); + } + + @Override + public int getTransparency() { + return 255; + } + + @Override + public boolean canPlaceIn(final FluidContainer container) { + return true; + } + + @Override + public boolean showInCreative(final FluidContainer container) { + return container == FluidContainer.Bucket || container == FluidContainer.Can || container == FluidContainer.Capsule; + } + + @Override + public int getContainerColour() { + return this.colour; + } +} diff --git a/src/main/java/binnie/extratrees/item/Food.java b/src/main/java/binnie/extratrees/item/Food.java new file mode 100644 index 00000000..fac04505 --- /dev/null +++ b/src/main/java/binnie/extratrees/item/Food.java @@ -0,0 +1,198 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.item; + +import java.util.Collection; +import net.minecraftforge.oredict.OreDictionary; +import binnie.core.Mods; +import binnie.Binnie; +import forestry.api.recipes.RecipeManagers; +import binnie.extratrees.alcohol.Juice; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.extratrees.ExtraTrees; +import net.minecraft.item.ItemStack; +import java.util.ArrayList; +import java.util.List; +import net.minecraft.util.IIcon; +import binnie.core.item.IItemMisc; + +public enum Food implements IItemMisc +{ + Crabapple(2), + Orange(4), + Kumquat(2), + Lime(2), + WildCherry(2), + SourCherry(2), + BlackCherry(2), + Blackthorn(3), + CherryPlum(3), + Almond(1), + Apricot(4), + Grapefruit(4), + Peach(4), + Satsuma(3), + BuddhaHand(3), + Citron(3), + FingerLime(3), + KeyLime(2), + Manderin(3), + Nectarine(3), + Pomelo(3), + Tangerine(3), + Pear(4), + SandPear(2), + Hazelnut(2), + Butternut(1), + Beechnut(0), + Pecan(0), + Banana(4), + RedBanana(4), + Plantain(2), + BrazilNut(0), + Fig(2), + Acorn(0), + Elderberry(1), + Olive(1), + GingkoNut(1), + Coffee(0), + OsangeOrange(1), + Clove(0), + Papayimar(8), + Blackcurrant(2), + Redcurrant(2), + Blackberry(2), + Raspberry(2), + Blueberry(2), + Cranberry(2), + Juniper(0), + Gooseberry(2), + GoldenRaspberry(2), + Coconut(2), + Cashew(0), + Avacado(2), + Nutmeg(0), + Allspice(0), + Chilli(2), + StarAnise(0), + Mango(4), + Starfruit(2), + Candlenut(0); + + IIcon icon; + int hunger; + private List ores; + + private Food() { + this(0); + } + + private Food(final int hunger) { + this.ores = new ArrayList(); + this.hunger = hunger; + } + + public boolean isEdible() { + return this.hunger > 0; + } + + public int getHealth() { + return this.hunger; + } + + @Override + public boolean isActive() { + return true; + } + + @Override + public String getName(final ItemStack stack) { + return ExtraTrees.proxy.localise("item.food." + this.name().toLowerCase()); + } + + @Override + public ItemStack get(final int i) { + return new ItemStack(ExtraTrees.itemFood, i, this.ordinal()); + } + + @Override + public IIcon getIcon(final ItemStack stack) { + return this.icon; + } + + @Override + public void registerIcons(final IIconRegister register) { + this.icon = ExtraTrees.proxy.getIcon(register, "food/" + this.toString()); + } + + @Override + public void addInformation(final List par3List) { + } + + public void addJuice(final Juice juice, final int time, final int amount, final int mulch) { + RecipeManagers.squeezerManager.addRecipe(time, new ItemStack[] { this.get(1) }, Binnie.Liquid.getLiquidStack("juice", amount), Mods.Forestry.stack("mulch"), mulch); + } + + public void addJuice(final int time, final int amount, final int mulch) { + RecipeManagers.squeezerManager.addRecipe(time, new ItemStack[] { this.get(1) }, Binnie.Liquid.getLiquidStack("juice", amount), Mods.Forestry.stack("mulch"), mulch); + } + + public void addOil(final int time, final int amount, final int mulch) { + RecipeManagers.squeezerManager.addRecipe(time, new ItemStack[] { this.get(1) }, Binnie.Liquid.getLiquidStack("seedoil", amount), Mods.Forestry.stack("mulch"), mulch); + } + + public static void registerOreDictionary() { + Food.Crabapple.ore("Apple").ore("Crabapple"); + Food.Orange.ore("Orange"); + Food.Kumquat.ore("Kumquat"); + Food.Lime.ore("Lime"); + Food.WildCherry.ore("Cherry").ore("WildCherry"); + Food.SourCherry.ore("Cherry").ore("SourCherry"); + Food.BlackCherry.ore("Cherry").ore("BlackCherry"); + Food.Blackthorn.ore("Blackthorn"); + Food.CherryPlum.ore("Plum").ore("CherryPlum"); + Food.Almond.ore("Almond"); + Food.Apricot.ore("Apricot"); + Food.Grapefruit.ore("Grapefruit"); + Food.Peach.ore("Peach"); + Food.Satsuma.ore("Satsuma").ore("Orange"); + Food.BuddhaHand.ore("BuddhaHand").ore("Citron"); + Food.Citron.ore("Citron"); + Food.FingerLime.ore("Lime").ore("FingerLime"); + Food.KeyLime.ore("KeyLime").ore("Lime"); + Food.Manderin.ore("Orange").ore("Manderin"); + Food.Nectarine.ore("Peach").ore("Nectarine"); + Food.Pomelo.ore("Pomelo"); + Food.Tangerine.ore("Tangerine").ore("Orange"); + Food.Pear.ore("Pear"); + Food.SandPear.ore("SandPear"); + Food.Hazelnut.ore("Hazelnut"); + Food.Butternut.ore("Butternut").ore("Walnut"); + Food.Beechnut.ore("Beechnut"); + Food.Pecan.ore("Pecan"); + Food.Banana.ore("Banana"); + Food.RedBanana.ore("RedBanana").ore("Banana"); + Food.Plantain.ore("Plantain"); + Food.BrazilNut.ore("BrazilNut"); + Food.Fig.ore("Fig"); + Food.Acorn.ore("Acorn"); + Food.Elderberry.ore("Elderberry"); + Food.Olive.ore("Olive"); + Food.GingkoNut.ore("GingkoNut"); + Food.Coffee.ore("Coffee"); + Food.OsangeOrange.ore("OsangeOrange"); + Food.Clove.ore("Clove"); + } + + private Food ore(final String string) { + OreDictionary.registerOre("crop" + string, this.get(1)); + this.ores.add("crop" + string); + return this; + } + + public Collection getOres() { + return this.ores; + } +} diff --git a/src/main/java/binnie/extratrees/item/ItemDictionary.java b/src/main/java/binnie/extratrees/item/ItemDictionary.java new file mode 100644 index 00000000..b645670d --- /dev/null +++ b/src/main/java/binnie/extratrees/item/ItemDictionary.java @@ -0,0 +1,75 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.item; + +import binnie.extratrees.core.ExtraTreesGUID; +import net.minecraft.world.World; +import forestry.api.core.Tabs; +import net.minecraft.creativetab.CreativeTabs; +import java.util.List; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.extratrees.ExtraTrees; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraft.item.Item; + +public class ItemDictionary extends Item +{ + IIcon iconMaster; + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.itemIcon = ExtraTrees.proxy.getIcon(register, "arboristDatabase"); + this.iconMaster = ExtraTrees.proxy.getIcon(register, "masterArboristDatabase"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(final int par1) { + return (par1 == 0) ? this.itemIcon : this.iconMaster; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(final ItemStack par1ItemStack, final EntityPlayer par2EntityPlayer, final List par3List, final boolean par4) { + super.addInformation(par1ItemStack, par2EntityPlayer, par3List, par4); + if (par1ItemStack.getItemDamage() > 0) { + par3List.add("Sengir-in-a-can"); + } + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(final Item par1, final CreativeTabs par2CreativeTabs, final List par3List) { + super.getSubItems(par1, par2CreativeTabs, par3List); + par3List.add(new ItemStack(par1, 1, 1)); + } + + public ItemDictionary() { + this.setCreativeTab(Tabs.tabArboriculture); + this.setUnlocalizedName("database"); + this.setMaxStackSize(1); + } + + @Override + public ItemStack onItemRightClick(final ItemStack itemstack, final World world, final EntityPlayer player) { + if (itemstack.getItemDamage() == 0) { + ExtraTrees.proxy.openGui(ExtraTreesGUID.Database, player, (int) player.posX, (int) player.posY, (int) player.posZ); + } + else { + ExtraTrees.proxy.openGui(ExtraTreesGUID.DatabaseNEI, player, (int) player.posX, (int) player.posY, (int) player.posZ); + } + return itemstack; + } + + @Override + public String getItemStackDisplayName(final ItemStack i) { + return (i.getItemDamage() == 0) ? "Arborist Database" : "Master Arborist Database"; + } +} diff --git a/src/main/java/binnie/extratrees/item/ItemFood.java b/src/main/java/binnie/extratrees/item/ItemFood.java new file mode 100644 index 00000000..85c6e092 --- /dev/null +++ b/src/main/java/binnie/extratrees/item/ItemFood.java @@ -0,0 +1,100 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.item; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import java.util.List; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import forestry.api.core.Tabs; +import binnie.core.item.IItemMisc; + +public class ItemFood extends net.minecraft.item.ItemFood +{ + IItemMisc[] items; + + public ItemFood() { + super(0, 0.0f, false); + this.setUnlocalizedName("food"); + this.setCreativeTab(Tabs.tabArboriculture); + this.setHasSubtypes(true); + this.items = Food.values(); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(final Item par1, final CreativeTabs par2CreativeTabs, final List par3List) { + for (final IItemMisc item : this.items) { + if (item.isActive()) { + par3List.add(this.getStack(item, 1)); + } + } + } + + private IItemMisc getItem(final int damage) { + return (damage >= this.items.length) ? this.items[0] : this.items[damage]; + } + + public ItemStack getStack(final IItemMisc type, final int size) { + return new ItemStack(this, size, type.ordinal()); + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(final ItemStack par1ItemStack, final EntityPlayer par2EntityPlayer, final List par3List, final boolean par4) { + super.addInformation(par1ItemStack, par2EntityPlayer, par3List, par4); + final IItemMisc item = this.getItem(par1ItemStack.getItemDamage()); + if (item != null) { + item.addInformation(par3List); + } + } + + @Override + public String getItemStackDisplayName(final ItemStack stack) { + final IItemMisc item = this.getItem(stack.getItemDamage()); + return (item != null) ? item.getName(stack) : "null"; + } + + @Override + public IIcon getIcon(final ItemStack stack, final int pass) { + final IItemMisc item = this.getItem(stack.getItemDamage()); + return (item != null) ? item.getIcon(stack) : null; + } + + @Override + public IIcon getIconFromDamage(final int damage) { + final IItemMisc item = this.getItem(damage); + return (item != null) ? item.getIcon(null) : null; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + for (final IItemMisc item : this.items) { + if (item.isActive()) { + item.registerIcons(register); + } + } + } + + private Food getFood(final ItemStack par1ItemStack) { + return Food.values()[par1ItemStack.getItemDamage()]; + } + + @Override + public int func_150905_g(final ItemStack p_150905_1_) { + return this.getFood(p_150905_1_).getHealth(); + } + + @Override + public float func_150906_h(final ItemStack p_150906_1_) { + return 3.0f; + } +} diff --git a/src/main/java/binnie/extratrees/item/ItemHammer.java b/src/main/java/binnie/extratrees/item/ItemHammer.java new file mode 100644 index 00000000..8a2db660 --- /dev/null +++ b/src/main/java/binnie/extratrees/item/ItemHammer.java @@ -0,0 +1,51 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.item; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.creativetab.CreativeTabs; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.extratrees.ExtraTrees; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.extratrees.api.IToolHammer; +import net.minecraft.item.Item; + +public class ItemHammer extends Item implements IToolHammer +{ + boolean isDurableHammer; + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.itemIcon = ExtraTrees.proxy.getIcon(register, this.isDurableHammer ? "durableHammer" : "carpentryHammer"); + } + + public ItemHammer(final boolean durable) { + this.isDurableHammer = false; + this.isDurableHammer = durable; + this.setCreativeTab(CreativeTabs.tabTools); + this.setUnlocalizedName(durable ? "durableHammer" : "hammer"); + this.setMaxStackSize(1); + this.setMaxDamage(durable ? 1562 : 251); + } + + @Override + public String getItemStackDisplayName(final ItemStack i) { + return this.isDurableHammer ? "Master Carpentry Hammer" : "Carpentry Hammer"; + } + + @Override + public boolean isActive(final ItemStack item) { + return true; + } + + @Override + public void onHammerUsed(final ItemStack item, final EntityPlayer player) { + item.damageItem(1, player); + } +} diff --git a/src/main/java/binnie/extratrees/item/ItemMothDatabase.java b/src/main/java/binnie/extratrees/item/ItemMothDatabase.java new file mode 100644 index 00000000..86a8deac --- /dev/null +++ b/src/main/java/binnie/extratrees/item/ItemMothDatabase.java @@ -0,0 +1,75 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.item; + +import binnie.extratrees.core.ExtraTreesGUID; +import net.minecraft.world.World; +import forestry.api.core.Tabs; +import net.minecraft.creativetab.CreativeTabs; +import java.util.List; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.extratrees.ExtraTrees; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraft.item.Item; + +public class ItemMothDatabase extends Item +{ + IIcon iconMaster; + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.itemIcon = ExtraTrees.proxy.getIcon(register, "lepiDatabase"); + this.iconMaster = ExtraTrees.proxy.getIcon(register, "masterLepiDatabase"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(final int par1) { + return (par1 == 0) ? this.itemIcon : this.iconMaster; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(final ItemStack par1ItemStack, final EntityPlayer par2EntityPlayer, final List par3List, final boolean par4) { + super.addInformation(par1ItemStack, par2EntityPlayer, par3List, par4); + if (par1ItemStack.getItemDamage() > 0) { + par3List.add("Binnie's Emporium of Lepidopterans"); + } + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(final Item par1, final CreativeTabs par2CreativeTabs, final List par3List) { + super.getSubItems(par1, par2CreativeTabs, par3List); + par3List.add(new ItemStack(par1, 1, 1)); + } + + public ItemMothDatabase() { + this.setCreativeTab(Tabs.tabLepidopterology); + this.setUnlocalizedName("databaseMoth"); + this.setMaxStackSize(1); + } + + @Override + public ItemStack onItemRightClick(final ItemStack itemstack, final World world, final EntityPlayer player) { + if (itemstack.getItemDamage() == 0) { + ExtraTrees.proxy.openGui(ExtraTreesGUID.MothDatabase, player, (int) player.posX, (int) player.posY, (int) player.posZ); + } + else { + ExtraTrees.proxy.openGui(ExtraTreesGUID.MothDatabaseNEI, player, (int) player.posX, (int) player.posY, (int) player.posZ); + } + return itemstack; + } + + @Override + public String getItemStackDisplayName(final ItemStack i) { + return (i.getItemDamage() == 0) ? "Lepidopterist Database" : "Master Lepidopterist Database"; + } +} diff --git a/src/main/java/binnie/extratrees/item/ItemSetSquare.java b/src/main/java/binnie/extratrees/item/ItemSetSquare.java new file mode 100644 index 00000000..4327fe69 --- /dev/null +++ b/src/main/java/binnie/extratrees/item/ItemSetSquare.java @@ -0,0 +1,55 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.item; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.creativetab.CreativeTabs; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.extratrees.ExtraTrees; +import net.minecraft.client.renderer.texture.IIconRegister; +import binnie.extratrees.api.IToolHammer; +import net.minecraft.item.Item; + +public class ItemSetSquare extends Item implements IToolHammer +{ + EnumSetSquareMode mode; + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.itemIcon = ExtraTrees.proxy.getIcon(register, "setSquare" + this.mode.ordinal()); + } + + public ItemSetSquare(final EnumSetSquareMode mode) { + this.mode = EnumSetSquareMode.Rotate; + this.mode = mode; + this.setCreativeTab(CreativeTabs.tabTools); + this.setUnlocalizedName("setSquare" + mode); + this.setMaxStackSize(1); + } + + @Override + public String getItemStackDisplayName(final ItemStack i) { + return "Set Square"; + } + + @Override + public boolean isActive(final ItemStack item) { + return this.mode == EnumSetSquareMode.Rotate; + } + + @Override + public void onHammerUsed(final ItemStack item, final EntityPlayer player) { + } + + public enum EnumSetSquareMode + { + Rotate, + Edit, + Swap; + } +} diff --git a/src/main/java/binnie/extratrees/item/ModuleItems.java b/src/main/java/binnie/extratrees/item/ModuleItems.java new file mode 100644 index 00000000..49b4d924 --- /dev/null +++ b/src/main/java/binnie/extratrees/item/ModuleItems.java @@ -0,0 +1,153 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.item; + +import binnie.extratrees.block.ILogType; +import forestry.api.fuels.EngineBronzeFuel; +import forestry.api.fuels.FuelManager; +import net.minecraftforge.fluids.FluidContainerRegistry; +import binnie.core.item.ItemMisc; +import forestry.api.recipes.RecipeManagers; +import net.minecraftforge.oredict.ShapelessOreRecipe; +import net.minecraft.item.Item; +import binnie.core.Mods; +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraftforge.oredict.ShapedOreRecipe; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.init.Items; +import net.minecraftforge.oredict.OreDictionary; +import binnie.core.liquid.ItemFluidContainer; +import binnie.core.BinnieCore; +import binnie.extratrees.ExtraTrees; +import forestry.api.core.Tabs; +import binnie.Binnie; +import binnie.core.IInitializable; + +public class ModuleItems implements IInitializable +{ + @Override + public void preInit() { + ExtraTrees.itemMisc = Binnie.Item.registerMiscItems(ExtraTreeItems.values(), Tabs.tabArboriculture); + ExtraTrees.itemDictionary = new ItemDictionary(); + if (BinnieCore.isLepidopteryActive()) { + ExtraTrees.itemDictionaryLepi = new ItemMothDatabase(); + } + Binnie.Liquid.createLiquids(ExtraTreeLiquid.values(), ItemFluidContainer.LiquidExtraTree); + ExtraTrees.itemFood = new ItemFood(); + + ExtraTrees.itemHammer = new ItemHammer(false); + ExtraTrees.itemDurableHammer = new ItemHammer(true); + + } + + @Override + public void init() { + + OreDictionary.registerOre("pulpWood", ExtraTreeItems.Sawdust.get(1)); + Food.registerOreDictionary(); + OreDictionary.registerOre("cropApple", Items.apple); + OreDictionary.registerOre("cropHops", ExtraTreeItems.Hops.get(1)); + OreDictionary.registerOre("seedWheat", Items.wheat_seeds); + OreDictionary.registerOre("seedWheat", ExtraTreeItems.GrainWheat.get(1)); + OreDictionary.registerOre("seedBarley", ExtraTreeItems.GrainBarley.get(1)); + OreDictionary.registerOre("seedCorn", ExtraTreeItems.GrainCorn.get(1)); + OreDictionary.registerOre("seedRye", ExtraTreeItems.GrainRye.get(1)); + OreDictionary.registerOre("seedRoasted", ExtraTreeItems.GrainRoasted.get(1)); + + Food.Crabapple.addJuice(10, 150, 10); + Food.Orange.addJuice(10, 400, 15); + Food.Kumquat.addJuice(10, 300, 10); + Food.Lime.addJuice(10, 300, 10); + Food.WildCherry.addOil(20, 50, 5); + Food.SourCherry.addOil(20, 50, 3); + Food.BlackCherry.addOil(20, 50, 5); + Food.Blackthorn.addJuice(10, 50, 5); + Food.CherryPlum.addJuice(10, 100, 60); + Food.Almond.addOil(20, 80, 5); + Food.Apricot.addJuice(10, 150, 40); + Food.Grapefruit.addJuice(10, 500, 15); + Food.Peach.addJuice(10, 150, 40); + Food.Satsuma.addJuice(10, 300, 10); + Food.BuddhaHand.addJuice(10, 400, 15); + Food.Citron.addJuice(10, 400, 15); + Food.FingerLime.addJuice(10, 300, 10); + Food.KeyLime.addJuice(10, 300, 10); + Food.Manderin.addJuice(10, 400, 10); + Food.Nectarine.addJuice(10, 150, 40); + Food.Pomelo.addJuice(10, 300, 10); + Food.Tangerine.addJuice(10, 300, 10); + Food.Pear.addJuice(10, 300, 20); + Food.SandPear.addJuice(10, 200, 10); + Food.Hazelnut.addOil(20, 150, 5); + Food.Butternut.addOil(20, 180, 5); + Food.Beechnut.addOil(20, 100, 4); + Food.Pecan.addOil(29, 50, 2); + Food.Banana.addJuice(10, 100, 30); + Food.RedBanana.addJuice(10, 100, 30); + Food.Plantain.addJuice(10, 100, 40); + Food.BrazilNut.addOil(20, 20, 2); + Food.Fig.addOil(20, 50, 3); + Food.Acorn.addOil(20, 50, 3); + Food.Elderberry.addJuice(10, 100, 5); + Food.Olive.addOil(20, 50, 3); + Food.GingkoNut.addOil(20, 50, 5); + Food.Coffee.addOil(15, 20, 2); + Food.OsangeOrange.addJuice(10, 300, 15); + Food.Clove.addOil(10, 25, 2); + Food.Coconut.addOil(20, 300, 25); + Food.Cashew.addJuice(10, 150, 15); + Food.Avacado.addJuice(10, 300, 15); + Food.Nutmeg.addOil(20, 50, 10); + Food.Allspice.addOil(20, 50, 10); + Food.Chilli.addJuice(10, 100, 10); + Food.StarAnise.addOil(20, 100, 10); + Food.Mango.addJuice(10, 400, 20); + Food.Starfruit.addJuice(10, 300, 10); + Food.Candlenut.addJuice(20, 50, 10); + } + + @Override + public void postInit() { + CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(ExtraTrees.itemDurableHammer, 1, 0), new Object[] { "wiw", " s ", " s ", 'w', Blocks.obsidian, 'i', Items.gold_ingot, 's', Items.stick })); + CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(ExtraTrees.itemHammer, 1, 0), new Object[] { "wiw", " s ", " s ", 'w', "plankWood", 'i', Items.iron_ingot, 's', Items.stick })); + CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(ExtraTreeItems.Yeast.get(8), new Object[] { " m ", "mbm", 'b', Items.bread, 'm', Blocks.brown_mushroom })); + CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(ExtraTreeItems.LagerYeast.get(8), new Object[] { "mbm", " m ", 'b', Items.bread, 'm', Blocks.brown_mushroom })); + GameRegistry.addRecipe(ExtraTreeItems.GrainWheat.get(5), new Object[] { " s ", "sss", " s ", 's', Items.wheat_seeds }); + GameRegistry.addRecipe(ExtraTreeItems.GrainBarley.get(3), new Object[] { " s ", "s ", " s ", 's', ExtraTreeItems.GrainWheat.get(1) }); + GameRegistry.addRecipe(ExtraTreeItems.GrainCorn.get(3), new Object[] { " s ", " s", " s ", 's', ExtraTreeItems.GrainWheat.get(1) }); + GameRegistry.addRecipe(ExtraTreeItems.GrainRye.get(3), new Object[] { " ", "s s", " s ", 's', ExtraTreeItems.GrainWheat.get(1) }); + GameRegistry.addRecipe(ExtraTreeItems.Hops.get(3), new Object[] { " s ", "sps", " s ", 's', Items.wheat_seeds, 'p', Items.apple }); + GameRegistry.addRecipe(ExtraTreeItems.ProvenGear.get(1), new Object[] { " s ", "s s", " s ", 's', Mods.Forestry.stack("oakStick") }); + GameRegistry.addRecipe(ExtraTreeItems.GlassFitting.get(6), new Object[] { "s s", " i ", "s s", 'i', Items.iron_ingot, 's', Items.stick }); + GameRegistry.addSmelting(ExtraTreeItems.GrainWheat.get(1), ExtraTreeItems.GrainRoasted.get(1), 0.0f); + GameRegistry.addSmelting(ExtraTreeItems.GrainRye.get(1), ExtraTreeItems.GrainRoasted.get(1), 0.0f); + GameRegistry.addSmelting(ExtraTreeItems.GrainCorn.get(1), ExtraTreeItems.GrainRoasted.get(1), 0.0f); + GameRegistry.addSmelting(ExtraTreeItems.GrainBarley.get(1), ExtraTreeItems.GrainRoasted.get(1), 0.0f); + try { + final Item minium = (Item) Class.forName("com.pahimar.ee3.lib.ItemIds").getField("miniumShard").get(null); + CraftingManager.getInstance().getRecipeList().add(new ShapelessOreRecipe(Food.Papayimar.get(1), new Object[] { minium, "cropPapaya" })); + } catch (Exception ex) { + } + RecipeManagers.carpenterManager.addRecipe(100, Binnie.Liquid.getLiquidStack("water", 2000), (ItemStack) null, new ItemStack(ExtraTrees.itemDictionary), new Object[] { "X#X", "YEY", "RDR", '#', Blocks.glass_pane, 'X', Items.gold_ingot, 'Y', "ingotCopper", 'R', Items.redstone, 'D', Items.diamond, 'E', Items.emerald }); + RecipeManagers.carpenterManager.addRecipe(100, Binnie.Liquid.getLiquidStack("water", 2000), (ItemStack) null, new ItemStack(ExtraTrees.itemDictionaryLepi), new Object[] { "X#X", "YEY", "RDR", '#', Blocks.glass_pane, 'X', Items.gold_ingot, 'Y', "ingotBronze", 'R', Items.redstone, 'D', Items.diamond, 'E', Items.emerald }); + RecipeManagers.stillManager.addRecipe(25, ExtraTreeLiquid.Resin.get(5), ExtraTreeLiquid.Turpentine.get(3)); + RecipeManagers.carpenterManager.addRecipe(25, ExtraTreeLiquid.Turpentine.get(50), (ItemStack) null, ((ItemMisc) ExtraTrees.itemMisc).getStack(ExtraTreeItems.WoodWax, 4), new Object[] { "x", 'x', Mods.Forestry.stack("beeswax") }); + if (Binnie.Liquid.getLiquidStack("Creosote Oil", 100) != null) { + RecipeManagers.carpenterManager.addRecipe(25, Binnie.Liquid.getLiquidStack("Creosote Oil", 50), (ItemStack) null, ((ItemMisc) ExtraTrees.itemMisc).getStack(ExtraTreeItems.WoodWax, 1), new Object[] { "x", 'x', Mods.Forestry.stack("beeswax") }); + } + for (final FluidContainerRegistry.FluidContainerData data : FluidContainerRegistry.getRegisteredFluidContainerData()) { + if (data.fluid.isFluidEqual(Binnie.Liquid.getLiquidStack("water", 0)) && data.fluid.amount == 1000) { + CraftingManager.getInstance().addRecipe(Mods.Forestry.stack("mulch"), new Object[] { " b ", "bwb", " b ", 'b', ExtraTreeItems.Bark.get(1), 'w', data.filledContainer.copy() }); + } + } + FuelManager.bronzeEngineFuel.put(ExtraTreeLiquid.Sap.get(1).getFluid(), new EngineBronzeFuel(ExtraTreeLiquid.Sap.get(1).getFluid(), 20, 10000, 1)); + FuelManager.bronzeEngineFuel.put(ExtraTreeLiquid.Resin.get(1).getFluid(), new EngineBronzeFuel(ExtraTreeLiquid.Resin.get(1).getFluid(), 30, 10000, 1)); + for (final ILogType.ExtraTreeLog log : ILogType.ExtraTreeLog.values()) { + log.addRecipe(); + } + } +} diff --git a/src/main/java/binnie/extratrees/kitchen/BottleRack.java b/src/main/java/binnie/extratrees/kitchen/BottleRack.java new file mode 100644 index 00000000..60ec6b24 --- /dev/null +++ b/src/main/java/binnie/extratrees/kitchen/BottleRack.java @@ -0,0 +1,32 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.kitchen; + +import binnie.core.machines.inventory.ComponentTankContainer; +import binnie.extratrees.core.ExtraTreesGUID; +import binnie.extratrees.machines.ExtraTreeMachine; +import binnie.core.machines.Machine; +import binnie.extratrees.core.ExtraTreeTexture; +import binnie.craftgui.minecraft.IMachineInformation; + +public class BottleRack +{ + public static class PackageBottleRack extends KitchenMachine.PackageKitchenMachine implements IMachineInformation + { + public PackageBottleRack() { + super("bottleRack", ExtraTreeTexture.lumbermillTexture); + } + + @Override + public void createMachine(final Machine machine) { + new ExtraTreeMachine.ComponentExtraTreeGUI(machine, ExtraTreesGUID.KitchenBottleRack); + final ComponentTankContainer inventory = new ComponentTankContainer(machine); + for (int x = 0; x < 36; ++x) { + inventory.addTank(x, "input", 1000); + inventory.getTankSlot(x); + } + } + } +} diff --git a/src/main/java/binnie/extratrees/kitchen/KitchenMachine.java b/src/main/java/binnie/extratrees/kitchen/KitchenMachine.java new file mode 100644 index 00000000..feafbec2 --- /dev/null +++ b/src/main/java/binnie/extratrees/kitchen/KitchenMachine.java @@ -0,0 +1,73 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.kitchen; + +import net.minecraft.client.renderer.RenderBlocks; +import binnie.core.machines.Machine; +import binnie.core.machines.TileEntityMachine; +import net.minecraft.tileentity.TileEntity; +import binnie.core.resource.ResourceType; +import binnie.Binnie; +import binnie.core.resource.BinnieResource; +import binnie.extratrees.ExtraTrees; +import net.minecraft.item.ItemStack; +import binnie.core.machines.MachinePackage; +import binnie.core.machines.IMachineType; + +public enum KitchenMachine implements IMachineType +{ + Worktop((Class) null), + Cupboard((Class) null), + BottleRack(BottleRack.PackageBottleRack.class); + + Class clss; + + private KitchenMachine(final Class clss) { + this.clss = clss; + } + + @Override + public Class getPackageClass() { + return this.clss; + } + + @Override + public boolean isActive() { + return this.clss != null; + } + + public ItemStack get(final int i) { + return new ItemStack(ExtraTrees.blockKitchen, i, this.ordinal()); + } + + public abstract static class PackageKitchenMachine extends MachinePackage + { + BinnieResource textureName; + + protected PackageKitchenMachine(final String uid, final String textureName) { + super(uid, false); + this.textureName = Binnie.Resource.getFile(ExtraTrees.instance, ResourceType.Tile, textureName); + } + + protected PackageKitchenMachine(final String uid, final BinnieResource textureName) { + super(uid, false); + this.textureName = textureName; + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + + @Override + public void renderMachine(final Machine machine, final double x, final double y, final double z, final float var8, final RenderBlocks renderer) { + MachineRendererKitchen.instance.renderMachine(machine, this.textureName, x, y, z, var8, renderer); + } + } +} diff --git a/src/main/java/binnie/extratrees/kitchen/MachineRendererKitchen.java b/src/main/java/binnie/extratrees/kitchen/MachineRendererKitchen.java new file mode 100644 index 00000000..77c5ec87 --- /dev/null +++ b/src/main/java/binnie/extratrees/kitchen/MachineRendererKitchen.java @@ -0,0 +1,105 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.kitchen; + +import net.minecraft.util.IIcon; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.TextureMap; +import org.lwjgl.opengl.GL11; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.init.Blocks; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.RenderBlocks; +import binnie.core.machines.Machine; +import binnie.core.resource.BinnieResource; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class MachineRendererKitchen +{ + static int level; + public static MachineRendererKitchen instance; + BinnieResource texture; + + public void renderMachine(final Machine machine, final BinnieResource texture, final double x, final double y, final double z, final float var8, final RenderBlocks renderer) { + if (renderer != null && renderer.blockAccess != null) { + final Block block = machine.getPackage().getGroup().getBlock(); + final float i = 0.0625f; + renderer.setRenderBounds(2.0f * i, 0.0, 2.0f * i, 14.0f * i, 14.0f * i, 14.0f * i); + renderer.renderStandardBlock(block, (int) x, (int) y, (int) z); + MachineRendererKitchen.level = 1; + renderer.setRenderBounds(0.0, 14.0f * i, 0.0, 1.0, 1.0, 1.0); + renderer.renderStandardBlock(block, (int) x, (int) y, (int) z); + MachineRendererKitchen.level = 0; + renderer.setRenderBounds(0.0, 0.0, 0.0, 1.0, 1.0, 1.0); + if (RenderManager.instance == null || RenderManager.instance.renderEngine == null) { + return; + } + final IIcon icon = Blocks.dirt.getIcon(0, 0); + final Tessellator tess = Tessellator.instance; + boolean wasTessellating = true; + try { + tess.draw(); + } catch (Exception e) { + wasTessellating = false; + } + tess.startDrawingQuads(); + tess.draw(); + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y + 1.0, z + 0.5); + RenderManager.instance.renderEngine.bindTexture(TextureMap.locationBlocksTexture); + final float ux = icon.getMinU(); + final float uy = icon.getMinV(); + final float uw = icon.getMaxU(); + final float uh = icon.getMaxV(); + final int[] widths = { 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 5, 6, 6, 6, 5, 4 }; + for (int h = 0; h < 15; ++h) { + final float h2 = h * i; + final float h3 = h2 + i; + final float d1 = widths[h] * i; + final float d2 = widths[h + 1] * i; + float ang = 0.707f; + final float half = 8.0f * i; + if (h < 13) { + ang -= 0.05f; + for (int angle = 0; angle < 360; angle += 90) { + } + if (h == 12) { + } + ang += 0.05f; + } + for (int angle = 0; angle < 360; angle += 90) { + GL11.glPushMatrix(); + GL11.glRotatef(angle, 0.0f, 1.0f, 0.0f); + GL11.glTranslatef(-0.5f, 0.0f, 0.0f); + tess.startDrawingQuads(); + tess.setColorRGBA(255, 255, 255, 150); + tess.addVertexWithUV(half - d1 * ang, h2, -d1 * ang, 0.0, 0.0); + tess.addVertexWithUV(half - d2 * ang, h3, -d2 * ang, 0.0, 0.0); + tess.addVertexWithUV(half + d2 * ang, h3, -d2 * ang, 0.0, 0.0); + tess.addVertexWithUV(half + d1 * ang, h2, -d1 * ang, 0.0, 0.0); + tess.draw(); + tess.startDrawingQuads(); + tess.addVertexWithUV(half + d1 * ang, h2, -d1 * ang, 0.0, 0.0); + tess.addVertexWithUV(half + d2 * ang, h3, -d2 * ang, 0.0, 0.0); + tess.addVertexWithUV(half - d2 * ang, h3, -d2 * ang, 0.0, 0.0); + tess.addVertexWithUV(half - d1 * ang, h2, -d1 * ang, 0.0, 0.0); + tess.draw(); + GL11.glPopMatrix(); + } + } + GL11.glPopMatrix(); + if (wasTessellating) { + tess.startDrawingQuads(); + } + } + } + + static { + MachineRendererKitchen.level = 0; + MachineRendererKitchen.instance = new MachineRendererKitchen(); + } +} diff --git a/src/main/java/binnie/extratrees/kitchen/ModuleKitchen.java b/src/main/java/binnie/extratrees/kitchen/ModuleKitchen.java new file mode 100644 index 00000000..10944743 --- /dev/null +++ b/src/main/java/binnie/extratrees/kitchen/ModuleKitchen.java @@ -0,0 +1,30 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.kitchen; + +import net.minecraft.block.Block; +import forestry.api.core.Tabs; +import binnie.core.machines.MachineGroup; +import binnie.extratrees.ExtraTrees; +import binnie.core.IInitializable; + +public class ModuleKitchen implements IInitializable +{ + @Override + public void preInit() { + final MachineGroup machineGroup = new MachineGroup(ExtraTrees.instance, "kitchen", "kitchen", KitchenMachine.values()); + machineGroup.setCreativeTab(Tabs.tabArboriculture); + machineGroup.customRenderer = false; + ExtraTrees.blockKitchen = machineGroup.getBlock(); + } + + @Override + public void init() { + } + + @Override + public void postInit() { + } +} diff --git a/src/main/java/binnie/extratrees/machines/Brewery.java b/src/main/java/binnie/extratrees/machines/Brewery.java new file mode 100644 index 00000000..2d470c7e --- /dev/null +++ b/src/main/java/binnie/extratrees/machines/Brewery.java @@ -0,0 +1,612 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.machines; + +import binnie.core.liquid.IFluidType; +import binnie.extratrees.alcohol.Alcohol; +import binnie.Binnie; +import net.minecraftforge.oredict.OreDictionary; +import java.util.HashMap; +import binnie.extratrees.item.ExtraTreeItems; +import binnie.core.machines.inventory.TankValidator; +import binnie.core.machines.inventory.SlotValidator; +import net.minecraft.entity.player.EntityPlayer; +import cpw.mods.fml.relauncher.Side; +import java.util.Map; +import binnie.core.machines.power.ErrorState; +import binnie.core.machines.network.INetwork; +import binnie.core.machines.power.IProcess; +import binnie.core.machines.power.ComponentProcessSetCost; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import forestry.api.core.INBTTagable; +import binnie.core.machines.TileEntityMachine; +import net.minecraft.tileentity.TileEntity; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.core.machines.inventory.MachineSide; +import binnie.core.machines.inventory.ComponentTankContainer; +import binnie.core.machines.inventory.InventorySlot; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.extratrees.core.ExtraTreesGUID; +import binnie.core.machines.Machine; +import binnie.extratrees.core.ExtraTreeTexture; +import binnie.craftgui.minecraft.IMachineInformation; +import java.util.ArrayList; +import net.minecraftforge.fluids.FluidStack; +import net.minecraft.item.ItemStack; +import java.util.List; + +public class Brewery +{ + public static int[] slotRecipeGrains; + public static int slotRecipeInput; + public static int slotRecipeYeast; + public static int[] slotInventory; + public static int tankInput; + public static int tankOutput; + private static List recipes; + + public static boolean isValidGrain(final ItemStack itemstack) { + for (final IBreweryRecipe recipe : Brewery.recipes) { + for (final ItemStack ingredient : recipe.getGrains()) { + if (ingredient.isItemEqual(itemstack)) { + return true; + } + } + } + return false; + } + + public static boolean isValidYeast(final ItemStack itemstack) { + for (final IBreweryRecipe recipe : Brewery.recipes) { + for (final ItemStack ingredient : recipe.getYeasts()) { + if (ingredient.isItemEqual(itemstack)) { + return true; + } + } + } + return false; + } + + public static FluidStack getOutput(final FluidStack stack) { + final BreweryCrafting crafting = new BreweryCrafting(stack, null, null, null); + for (final IBreweryRecipe recipe : Brewery.recipes) { + if (recipe.getOutput(crafting) != null) { + return recipe.getOutput(crafting); + } + } + return null; + } + + public static FluidStack getOutput(final BreweryCrafting crafting) { + if (crafting.currentInput == null) { + return null; + } + if (crafting.yeast == null) { + return null; + } + for (final IBreweryRecipe recipe : Brewery.recipes) { + if (recipe.getOutput(crafting) != null) { + return recipe.getOutput(crafting); + } + } + return null; + } + + public static boolean isValidIngredient(final ItemStack itemstack) { + for (final IBreweryRecipe recipe : Brewery.recipes) { + for (final ItemStack ingr : recipe.getIngredient()) { + if (ingr.isItemEqual(itemstack)) { + return true; + } + } + } + return false; + } + + public static boolean isValidInputLiquid(final FluidStack fluid) { + for (final IBreweryRecipe recipe : Brewery.recipes) { + for (final FluidStack ingr : recipe.getInput()) { + if (ingr.isFluidEqual(fluid)) { + return true; + } + } + } + return false; + } + + public static boolean isValidOutputLiquid(final FluidStack fluid) { + for (final IBreweryRecipe recipe : Brewery.recipes) { + for (final FluidStack ingr : recipe.getOutput()) { + if (ingr.isFluidEqual(fluid)) { + return true; + } + } + } + return false; + } + + public static void addRecipe(final FluidStack input, final FluidStack output) { + Brewery.recipes.add(new BreweryRecipe(input, output)); + } + + public static void addBeerAndMashRecipes() { + Brewery.recipes.add(new BeerRecipe()); + } + + static { + Brewery.slotRecipeGrains = new int[] { 0, 1, 2 }; + Brewery.slotRecipeInput = 3; + Brewery.slotRecipeYeast = 4; + Brewery.slotInventory = new int[] { 5, 6, 7, 8, 9, 10, 11, 12, 13 }; + Brewery.tankInput = 0; + Brewery.tankOutput = 1; + Brewery.recipes = new ArrayList(); + } + + public static class PackageBrewery extends ExtraTreeMachine.PackageExtraTreeMachine implements IMachineInformation + { + public PackageBrewery() { + super("brewery", ExtraTreeTexture.breweryTexture, true); + } + + @Override + public void createMachine(final Machine machine) { + new ExtraTreeMachine.ComponentExtraTreeGUI(machine, ExtraTreesGUID.Brewery); + final ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + inventory.addSlotArray(Brewery.slotRecipeGrains, "grain"); + for (final InventorySlot slot : inventory.getSlots(Brewery.slotRecipeGrains)) { + slot.setValidator(new SlotValidatorBreweryGrain()); + slot.setType(InventorySlot.Type.Recipe); + } + inventory.addSlotArray(Brewery.slotInventory, "inventory"); + for (final InventorySlot slot : inventory.getSlots(Brewery.slotInventory)) { + slot.forbidExtraction(); + } + inventory.addSlot(Brewery.slotRecipeYeast, "yeast"); + inventory.getSlot(Brewery.slotRecipeYeast).setValidator(new SlotValidatorYeast()); + inventory.getSlot(Brewery.slotRecipeYeast).setType(InventorySlot.Type.Recipe); + inventory.addSlot(Brewery.slotRecipeInput, "ingredient"); + inventory.getSlot(Brewery.slotRecipeInput).setValidator(new SlotValidatorBreweryIngredient()); + inventory.getSlot(Brewery.slotRecipeInput).setType(InventorySlot.Type.Recipe); + final ComponentTankContainer tanks = new ComponentTankContainer(machine); + tanks.addTank(Brewery.tankInput, "input", 5000); + tanks.getTankSlot(Brewery.tankInput).setValidator(new TankValidatorFermentInput()); + tanks.getTankSlot(Brewery.tankInput).setOutputSides(MachineSide.TopAndBottom); + tanks.addTank(Brewery.tankOutput, "output", 5000); + tanks.getTankSlot(Brewery.tankOutput).setValidator(new TankValidatorFermentOutput()); + tanks.getTankSlot(Brewery.tankOutput).forbidInsertion(); + tanks.getTankSlot(Brewery.tankOutput).setOutputSides(MachineSide.Sides); + new ComponentPowerReceptor(machine); + new ComponentBreweryLogic(machine); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + } + + public static class BreweryCrafting implements INBTTagable + { + public FluidStack currentInput; + public ItemStack[] inputs; + public ItemStack ingr; + public ItemStack yeast; + + public BreweryCrafting(final FluidStack currentInput, final ItemStack ingr, final ItemStack[] inputs, final ItemStack yeast) { + this.currentInput = currentInput; + this.inputs = ((inputs == null) ? new ItemStack[3] : inputs); + this.ingr = ingr; + this.yeast = yeast; + } + + public BreweryCrafting(final NBTTagCompound nbt) { + this.readFromNBT(nbt); + } + + @Override + public void readFromNBT(final NBTTagCompound nbt) { + this.currentInput = FluidStack.loadFluidStackFromNBT(nbt.getCompoundTag("fluid")); + this.ingr = ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("ingr")); + (this.inputs = new ItemStack[3])[0] = ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("in1")); + this.inputs[1] = ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("in2")); + this.inputs[2] = ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("in3")); + this.yeast = ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("yeast")); + } + + @Override + public void writeToNBT(final NBTTagCompound nbt) { + final NBTTagCompound fluidTag = new NBTTagCompound(); + this.currentInput.writeToNBT(fluidTag); + nbt.setTag("fluid", fluidTag); + nbt.setTag("ingr", this.getNBT(this.ingr)); + nbt.setTag("in1", this.getNBT(this.inputs[0])); + nbt.setTag("in2", this.getNBT(this.inputs[1])); + nbt.setTag("in3", this.getNBT(this.inputs[2])); + nbt.setTag("yeast", this.getNBT(this.yeast)); + } + + private NBTTagCompound getNBT(final ItemStack ingr) { + if (ingr == null) { + return new NBTTagCompound(); + } + final NBTTagCompound nbt = new NBTTagCompound(); + ingr.writeToNBT(nbt); + return nbt; + } + } + + public static class ComponentBreweryLogic extends ComponentProcessSetCost implements IProcess, INetwork.GuiNBT + { + public BreweryCrafting currentCrafting; + + public ComponentBreweryLogic(final Machine machine) { + super(machine, 16000, 800); + this.currentCrafting = null; + } + + @Override + public ErrorState canWork() { + if (this.getUtil().isTankEmpty(Brewery.tankInput) && this.currentCrafting == null) { + return new ErrorState.InsufficientLiquid("No Input Liquid", Brewery.tankInput); + } + if (Brewery.getOutput(this.getInputCrafting()) == null && this.currentCrafting == null) { + return new ErrorState("No Recipe", "Brewing cannot occur with these ingredients"); + } + if (!this.getUtil().hasIngredients(new int[] { 0, 1, 2, 3, 4 }, Brewery.slotInventory) && this.currentCrafting == null) { + return new ErrorState("Insufficient Ingredients", "Not enough ingredients for Brewing"); + } + return super.canWork(); + } + + private BreweryCrafting getInputCrafting() { + return new BreweryCrafting(this.getUtil().getFluid(Brewery.tankInput), this.getUtil().getStack(Brewery.slotRecipeInput), this.getUtil().getStacks(Brewery.slotRecipeGrains), this.getUtil().getStack(Brewery.slotRecipeYeast)); + } + + @Override + public ErrorState canProgress() { + if (this.currentCrafting == null) { + return new ErrorState("Brewery Empty", "No liquid in Brewery"); + } + if (!this.getUtil().spaceInTank(Brewery.tankOutput, 1000)) { + return new ErrorState.TankSpace("No Space for Fermented Liquid", Brewery.tankOutput); + } + if (this.getUtil().getFluid(Brewery.tankOutput) != null && !this.getUtil().getFluid(Brewery.tankOutput).isFluidEqual(Brewery.getOutput(this.currentCrafting))) { + return new ErrorState.TankSpace("Different fluid in tank", Brewery.tankOutput); + } + return super.canProgress(); + } + + @Override + protected void onFinishTask() { + final FluidStack output = Brewery.getOutput(this.currentCrafting).copy(); + output.amount = 1000; + this.getUtil().fillTank(Brewery.tankOutput, output); + } + + @Override + public void onUpdate() { + super.onUpdate(); + if (this.canWork() == null && this.currentCrafting == null && this.getUtil().getTank(Brewery.tankInput).getFluidAmount() >= 1000) { + final FluidStack stack = this.getUtil().drainTank(Brewery.tankInput, 1000); + this.currentCrafting = this.getInputCrafting(); + this.currentCrafting.currentInput = stack; + } + } + + @Override + public void sendGuiNBT(final Map data) { + final NBTTagCompound nbt = new NBTTagCompound(); + if (this.currentCrafting == null) { + nbt.setBoolean("null", true); + } + else { + this.currentCrafting.writeToNBT(nbt); + } + data.put("brewery-recipe", nbt); + } + + @Override + public void recieveGuiNBT(final Side side, final EntityPlayer player, final String name, final NBTTagCompound nbt) { + if (name.equals("brewery-recipe")) { + if (nbt.getBoolean("null")) { + this.currentCrafting = null; + } + else { + this.currentCrafting = new BreweryCrafting(nbt); + } + } + } + + @Override + public String getTooltip() { + if (this.currentCrafting == null) { + return "Empty"; + } + return "Creating " + Brewery.getOutput(this.currentCrafting).getFluid().getLocalizedName(); + } + } + + public static class SlotValidatorBreweryGrain extends SlotValidator + { + public SlotValidatorBreweryGrain() { + super(SlotValidator.IconBlock); + } + + @Override + public boolean isValid(final ItemStack itemStack) { + return Brewery.isValidGrain(itemStack); + } + + @Override + public String getTooltip() { + return "Brewing Grains"; + } + } + + public static class SlotValidatorBreweryIngredient extends SlotValidator + { + public SlotValidatorBreweryIngredient() { + super(SlotValidator.IconBlock); + } + + @Override + public boolean isValid(final ItemStack itemStack) { + return Brewery.isValidIngredient(itemStack); + } + + @Override + public String getTooltip() { + return "Brewing Ingredient"; + } + } + + public static class SlotValidatorYeast extends SlotValidator + { + public SlotValidatorYeast() { + super(SlotValidator.IconBlock); + } + + @Override + public boolean isValid(final ItemStack itemStack) { + return Brewery.isValidYeast(itemStack); + } + + @Override + public String getTooltip() { + return "Yeast"; + } + } + + public static class TankValidatorFermentInput extends TankValidator + { + @Override + public boolean isValid(final FluidStack itemStack) { + return Brewery.isValidInputLiquid(itemStack); + } + + @Override + public String getTooltip() { + return "Fermentable Liquids"; + } + } + + public static class TankValidatorFermentOutput extends TankValidator + { + @Override + public boolean isValid(final FluidStack itemStack) { + return Brewery.isValidOutputLiquid(itemStack); + } + + @Override + public String getTooltip() { + return "Fermented Liquids"; + } + } + + public static class BreweryRecipe implements IBreweryRecipe + { + FluidStack input; + ItemStack specificYeast; + FluidStack output; + + public BreweryRecipe(final FluidStack input, final FluidStack output) { + this(input, null, output); + } + + public BreweryRecipe(final FluidStack input, final ItemStack specificYeast, final FluidStack output) { + this.input = input; + this.specificYeast = specificYeast; + this.output = output; + } + + @Override + public FluidStack getOutput(final BreweryCrafting crafting) { + if (this.specificYeast != null && !this.specificYeast.isItemEqual(crafting.yeast)) { + return null; + } + if (this.input.isFluidEqual(crafting.currentInput)) { + return this.output; + } + return null; + } + + @Override + public FluidStack[] getInput() { + return new FluidStack[] { this.input }; + } + + @Override + public FluidStack[] getOutput() { + return new FluidStack[0]; + } + + @Override + public ItemStack[] getGrains() { + return new ItemStack[0]; + } + + @Override + public ItemStack[] getIngredient() { + return new ItemStack[0]; + } + + @Override + public ItemStack[] getYeasts() { + return new ItemStack[] { ExtraTreeItems.Yeast.get(1) }; + } + } + + public static class BeerRecipe implements IBreweryRecipe + { + Map grainCrops; + List outputs; + static String barley; + static String wheat; + static String rye; + static String corn; + static String roasted; + String[] grains; + FluidStack water; + ItemStack hops; + + public BeerRecipe() { + this.grainCrops = new HashMap(); + this.outputs = new ArrayList(); + this.grains = new String[] { BeerRecipe.barley, BeerRecipe.wheat, BeerRecipe.rye, BeerRecipe.corn, BeerRecipe.roasted }; + for (final String grainType : this.grains) { + for (final ItemStack stack : OreDictionary.getOres(grainType)) { + this.grainCrops.put(stack, grainType); + } + } + this.water = Binnie.Liquid.getLiquidStack("water", 5); + this.hops = OreDictionary.getOres("cropHops").get(0); + this.add(Alcohol.Ale); + this.add(Alcohol.Lager); + this.add(Alcohol.Stout); + this.add(Alcohol.CornBeer); + this.add(Alcohol.RyeBeer); + this.add(Alcohol.WheatBeer); + this.add(Alcohol.Barley); + this.add(Alcohol.Corn); + this.add(Alcohol.Rye); + this.add(Alcohol.Wheat); + } + + private void add(final IFluidType fluid) { + this.outputs.add(fluid.get(1)); + } + + @Override + public FluidStack getOutput(final BreweryCrafting crafting) { + if (!crafting.currentInput.isFluidEqual(this.water)) { + return null; + } + int roasted = 0; + int barley = 0; + int wheat = 0; + int rye = 0; + int corn = 0; + for (final ItemStack stack : crafting.inputs) { + if (stack == null) { + return null; + } + String name = ""; + for (final Map.Entry entry : this.grainCrops.entrySet()) { + if (entry.getKey().isItemEqual(stack)) { + name = entry.getValue(); + break; + } + } + if (name.isEmpty()) { + return null; + } + if (name.equals(BeerRecipe.roasted)) { + ++roasted; + } + if (name.equals(BeerRecipe.barley)) { + ++barley; + } + if (name.equals(BeerRecipe.wheat)) { + ++wheat; + } + if (name.equals(BeerRecipe.rye)) { + ++rye; + } + if (name.equals(BeerRecipe.corn)) { + ++corn; + } + } + final boolean isBeer = crafting.ingr != null; + final boolean isLager = crafting.yeast.isItemEqual(ExtraTreeItems.LagerYeast.get(1)); + if (roasted >= 2 && isBeer) { + return Alcohol.Stout.get(5); + } + if (wheat >= 2) { + return isBeer ? Alcohol.WheatBeer.get(5) : Alcohol.Wheat.get(5); + } + if (rye >= 2) { + return isBeer ? Alcohol.RyeBeer.get(5) : Alcohol.Rye.get(5); + } + if (corn >= 2) { + return isBeer ? Alcohol.CornBeer.get(5) : Alcohol.Corn.get(5); + } + return isBeer ? (isLager ? Alcohol.Lager.get(5) : Alcohol.Ale.get(5)) : Alcohol.Barley.get(5); + } + + @Override + public FluidStack[] getInput() { + return new FluidStack[] { this.water }; + } + + @Override + public FluidStack[] getOutput() { + return this.outputs.toArray(new FluidStack[0]); + } + + @Override + public ItemStack[] getGrains() { + return this.grainCrops.keySet().toArray(new ItemStack[0]); + } + + @Override + public ItemStack[] getIngredient() { + return new ItemStack[] { this.hops }; + } + + @Override + public ItemStack[] getYeasts() { + return new ItemStack[] { ExtraTreeItems.Yeast.get(1), ExtraTreeItems.LagerYeast.get(1) }; + } + + static { + BeerRecipe.barley = "seedBarley"; + BeerRecipe.wheat = "seedWheat"; + BeerRecipe.rye = "seedRye"; + BeerRecipe.corn = "seedCorn"; + BeerRecipe.roasted = "seedRoasted"; + } + } + + private interface IBreweryRecipe + { + FluidStack getOutput(final BreweryCrafting p0); + + FluidStack[] getInput(); + + FluidStack[] getOutput(); + + ItemStack[] getGrains(); + + ItemStack[] getIngredient(); + + ItemStack[] getYeasts(); + } +} diff --git a/src/main/java/binnie/extratrees/machines/Designer.java b/src/main/java/binnie/extratrees/machines/Designer.java new file mode 100644 index 00000000..9ac6074b --- /dev/null +++ b/src/main/java/binnie/extratrees/machines/Designer.java @@ -0,0 +1,217 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.machines; + +import java.util.Map; +import binnie.core.machines.power.ErrorState; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.player.EntityPlayer; +import cpw.mods.fml.relauncher.Side; +import binnie.extratrees.api.IDesignMaterial; +import net.minecraft.item.ItemStack; +import binnie.extratrees.api.CarpentryManager; +import net.minecraft.nbt.NBTTagCompound; +import binnie.extratrees.carpentry.EnumDesign; +import binnie.extratrees.api.IDesign; +import binnie.core.machines.power.IErrorStateSource; +import binnie.core.machines.network.INetwork; +import binnie.core.machines.component.IComponentRecipe; +import binnie.core.machines.component.ComponentRecipe; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.extratrees.core.ExtraTreesGUID; +import binnie.core.machines.Machine; +import binnie.craftgui.minecraft.IMachineInformation; + +public abstract class Designer +{ + public static int beeswaxSlot; + public static int design1Slot; + public static int design2Slot; + + static { + Designer.beeswaxSlot = 0; + Designer.design1Slot = 1; + Designer.design2Slot = 2; + } + + public static class PackageWoodworker extends PackageCarpenter + { + public PackageWoodworker() { + super(DesignerType.Woodworker); + } + } + + public static class PackagePanelworker extends PackageCarpenter + { + public PackagePanelworker() { + super(DesignerType.Panelworker); + } + } + + public static class PackageGlassworker extends PackageCarpenter + { + public PackageGlassworker() { + super(DesignerType.GlassWorker); + } + } + + public static class PackageTileworker extends PackageCarpenter + { + public PackageTileworker() { + super(DesignerType.Tileworker); + } + } + + public abstract static class PackageCarpenter extends ExtraTreeMachine.PackageExtraTreeMachine implements IMachineInformation + { + DesignerType type; + + public PackageCarpenter(final DesignerType type) { + super(type.name, type.texture, false); + this.type = type; + } + + @Override + public void createMachine(final Machine machine) { + new ExtraTreeMachine.ComponentExtraTreeGUI(machine, ExtraTreesGUID.Woodworker); + final ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + inventory.addSlot(Designer.beeswaxSlot, "polish"); + inventory.addSlot(Designer.design1Slot, "wood"); + inventory.addSlot(Designer.design2Slot, "wood"); + inventory.getSlot(Designer.beeswaxSlot).setValidator(new Validators.SlotValidatorBeeswax(this.type)); + inventory.getSlot(Designer.design1Slot).setValidator(new Validators.SlotValidatorPlanks(this.type)); + inventory.getSlot(Designer.design2Slot).setValidator(new Validators.SlotValidatorPlanks(this.type)); + new ComponentWoodworkerRecipe(machine, this.type); + } + } + + public static class ComponentWoodworkerRecipe extends ComponentRecipe implements IComponentRecipe, INetwork.GuiNBT, IErrorStateSource + { + public DesignerType type; + private IDesign design; + + public ComponentWoodworkerRecipe(final Machine machine, final DesignerType type) { + super(machine); + this.design = EnumDesign.Diamond; + this.type = type; + } + + @Override + public void readFromNBT(final NBTTagCompound nbttagcompound) { + super.readFromNBT(nbttagcompound); + this.setDesign(CarpentryManager.carpentryInterface.getDesign(nbttagcompound.getInteger("design"))); + } + + @Override + public void writeToNBT(final NBTTagCompound nbttagcompound) { + super.writeToNBT(nbttagcompound); + nbttagcompound.setInteger("design", CarpentryManager.carpentryInterface.getDesignIndex(this.design)); + } + + @Override + public boolean isRecipe() { + return this.getProduct() != null; + } + + @Override + public ItemStack getProduct() { + final ItemStack plank1 = this.getUtil().getStack(Designer.design1Slot); + final ItemStack plank2 = this.getUtil().getStack(Designer.design2Slot); + if (plank1 == null || plank2 == null) { + return null; + } + final IDesignMaterial type1 = this.type.getSystem().getMaterial(plank1); + final IDesignMaterial type2 = this.type.getSystem().getMaterial(plank2); + final IDesign design = this.getDesign(); + final ItemStack stack = this.type.getBlock(type1, type2, design); + return stack; + } + + @Override + public ItemStack doRecipe(final boolean takeItem) { + if (!this.isRecipe()) { + return null; + } + if (this.canWork() != null) { + return null; + } + final ItemStack product = this.getProduct(); + if (takeItem) { + final ItemStack a = this.getUtil().decreaseStack(Designer.design1Slot, 1); + if (a == null) { + this.getUtil().decreaseStack(Designer.design2Slot, 1); + } + else if (this.design != EnumDesign.Blank) { + this.getUtil().decreaseStack(Designer.design2Slot, 1); + } + this.getUtil().decreaseStack(Designer.beeswaxSlot, 1); + } + return product; + } + + public IDesign getDesign() { + return this.design; + } + + @Override + public void recieveGuiNBT(final Side side, final EntityPlayer player, final String name, final NBTTagCompound nbt) { + if (name.equals("recipe")) { + final InventoryPlayer playerInv = player.inventory; + final ItemStack recipe = this.doRecipe(false); + if (recipe == null) { + return; + } + if (playerInv.getItemStack() == null) { + playerInv.setItemStack(this.doRecipe(true)); + } + else if (playerInv.getItemStack().isItemEqual(recipe) && ItemStack.areItemStackTagsEqual(playerInv.getItemStack(), recipe)) { + final int fit = recipe.getMaxStackSize() - (recipe.stackSize + playerInv.getItemStack().stackSize); + if (fit >= 0) { + final ItemStack doRecipe; + final ItemStack rec = doRecipe = this.doRecipe(true); + doRecipe.stackSize += playerInv.getItemStack().stackSize; + playerInv.setItemStack(rec); + } + } + player.openContainer.detectAndSendChanges(); + if (player instanceof EntityPlayerMP) { + ((EntityPlayerMP) player).updateHeldItem(); + } + } + else if (name.equals("design")) { + this.setDesign(CarpentryManager.carpentryInterface.getDesign(nbt.getShort("d"))); + } + } + + private void setDesign(final IDesign design) { + this.design = design; + } + + @Override + public ErrorState canWork() { + if (this.getUtil().isSlotEmpty(Designer.beeswaxSlot)) { + return new ErrorState.NoItem("Requires Adhesive to Function", Designer.beeswaxSlot); + } + return null; + } + + @Override + public ErrorState canProgress() { + return null; + } + + @Override + public void sendGuiNBT(final Map nbt) { + final NBTTagCompound tag = new NBTTagCompound(); + tag.setShort("d", (short) CarpentryManager.carpentryInterface.getDesignIndex(this.getDesign())); + nbt.put("design", tag); + } + + public DesignerType getDesignerType() { + return this.type; + } + } +} diff --git a/src/main/java/binnie/extratrees/machines/DesignerType.java b/src/main/java/binnie/extratrees/machines/DesignerType.java new file mode 100644 index 00000000..e549bec8 --- /dev/null +++ b/src/main/java/binnie/extratrees/machines/DesignerType.java @@ -0,0 +1,100 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.machines; + +import binnie.extratrees.core.ExtraTreeTexture; +import binnie.botany.Botany; +import binnie.extratrees.ExtraTrees; +import binnie.extratrees.carpentry.BlockDesign; +import binnie.extratrees.carpentry.ModuleCarpentry; +import binnie.extratrees.carpentry.EnumDesign; +import net.minecraft.item.ItemStack; +import binnie.extratrees.api.IDesign; +import binnie.extratrees.api.IDesignMaterial; +import binnie.botany.ceramic.CeramicDesignSystem; +import binnie.extratrees.carpentry.DesignSystem; +import binnie.extratrees.api.IDesignSystem; + +public enum DesignerType +{ + Woodworker("woodworker", ExtraTreeTexture.carpenterTexture), + Panelworker("panelworker", ExtraTreeTexture.panelerTexture), + GlassWorker("glassworker", ExtraTreeTexture.panelerTexture), + Tileworker("tileworker", ExtraTreeTexture.tileworkerTexture); + + public String name; + public String texture; + + private DesignerType(final String name, final String texture) { + this.name = name; + this.texture = texture; + } + + public IDesignSystem getSystem() { + switch (this) { + case GlassWorker: { + return DesignSystem.Glass; + } + case Tileworker: { + return CeramicDesignSystem.instance; + } + default: { + return DesignSystem.Wood; + } + } + } + + public ItemStack getBlock(final IDesignMaterial type1, IDesignMaterial type2, final IDesign design) { + int stackSize = 2; + if (design == EnumDesign.Blank) { + type2 = type1; + stackSize = 1; + } + final ItemStack stack = ModuleCarpentry.getItemStack(this.getBlock(), type1, type2, design); + stack.stackSize = stackSize; + return stack; + } + + private BlockDesign getBlock() { + switch (this) { + case GlassWorker: { + return ExtraTrees.blockStained; + } + case Panelworker: { + return ExtraTrees.blockPanel; + } + case Tileworker: { + return Botany.ceramicTile; + } + default: { + return ExtraTrees.blockCarpentry; + } + } + } + + public ItemStack getDisplayStack(final IDesign design) { + return this.getBlock(this.getSystem().getDefaultMaterial(), this.getSystem().getDefaultMaterial2(), design); + } + + public String getMaterialTooltip() { + switch (this) { + case GlassWorker: { + return "Glass"; + } + case Panelworker: { + return "Wooden Plank"; + } + case Tileworker: { + return "Ceramic Block"; + } + case Woodworker: { + return "Wooden Plank"; + } + default: { + return ""; + } + } + } +} diff --git a/src/main/java/binnie/extratrees/machines/Distillery.java b/src/main/java/binnie/extratrees/machines/Distillery.java new file mode 100644 index 00000000..63e9be10 --- /dev/null +++ b/src/main/java/binnie/extratrees/machines/Distillery.java @@ -0,0 +1,254 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.machines; + +import binnie.core.machines.inventory.TankValidator; +import net.minecraft.entity.player.EntityPlayer; +import cpw.mods.fml.relauncher.Side; +import binnie.core.machines.power.ErrorState; +import net.minecraft.nbt.NBTTagCompound; +import binnie.core.machines.network.INetwork; +import binnie.core.machines.power.IProcess; +import binnie.core.machines.power.ComponentProcessSetCost; +import binnie.core.machines.TileEntityMachine; +import net.minecraft.tileentity.TileEntity; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.core.machines.inventory.MachineSide; +import binnie.core.machines.inventory.ComponentTankContainer; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.extratrees.core.ExtraTreesGUID; +import binnie.core.machines.Machine; +import binnie.extratrees.core.ExtraTreeTexture; +import binnie.craftgui.minecraft.IMachineInformation; +import java.util.HashMap; +import java.util.ArrayList; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.Fluid; +import java.util.Map; +import java.util.List; + +public class Distillery +{ + public static int tankInput; + public static int tankOutput; + static List> recipes; + + public static FluidStack getOutput(final FluidStack fluid, final int level) { + if (fluid == null) { + return null; + } + return Distillery.recipes.get(level).get(fluid.getFluid()); + } + + public static boolean isValidInputLiquid(final FluidStack fluid) { + for (int i = 0; i < 3; ++i) { + if (Distillery.recipes.get(i).containsKey(fluid.getFluid())) { + return true; + } + } + return false; + } + + public static boolean isValidOutputLiquid(final FluidStack fluid) { + for (int i = 0; i < 3; ++i) { + for (final Map.Entry entry : Distillery.recipes.get(i).entrySet()) { + if (entry.getValue().isFluidEqual(fluid)) { + return true; + } + } + } + return false; + } + + public static void addRecipe(final FluidStack input, final FluidStack output, final int level) { + Distillery.recipes.get(level).put(input.getFluid(), output); + } + + static { + Distillery.tankInput = 0; + Distillery.tankOutput = 1; + (Distillery.recipes = new ArrayList>()).add(new HashMap()); + Distillery.recipes.add(new HashMap()); + Distillery.recipes.add(new HashMap()); + } + + public static class PackageDistillery extends ExtraTreeMachine.PackageExtraTreeMachine implements IMachineInformation + { + public PackageDistillery() { + super("distillery", ExtraTreeTexture.distilleryTexture, true); + } + + @Override + public void createMachine(final Machine machine) { + new ExtraTreeMachine.ComponentExtraTreeGUI(machine, ExtraTreesGUID.Distillery); + final ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + final ComponentTankContainer tanks = new ComponentTankContainer(machine); + tanks.addTank(Distillery.tankInput, "input", 5000); + tanks.getTankSlot(Distillery.tankInput).setValidator(new TankValidatorDistilleryInput()); + tanks.getTankSlot(Distillery.tankInput).setOutputSides(MachineSide.TopAndBottom); + tanks.addTank(Distillery.tankOutput, "output", 5000); + tanks.getTankSlot(Distillery.tankOutput).setValidator(new TankValidatorDistilleryOutput()); + tanks.getTankSlot(Distillery.tankOutput).setReadOnly(); + tanks.getTankSlot(Distillery.tankOutput).setOutputSides(MachineSide.Sides); + new ComponentPowerReceptor(machine); + new ComponentDistilleryLogic(machine); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + } + + public static class ComponentDistilleryLogic extends ComponentProcessSetCost implements IProcess, INetwork.SendGuiNBT, INetwork.RecieveGuiNBT + { + public FluidStack currentFluid; + public int level; + int guiLevel; + + public ComponentDistilleryLogic(final Machine machine) { + super(machine, 16000, 800); + this.currentFluid = null; + this.level = 0; + this.guiLevel = machine.getUniqueProgressBarID(); + } + + @Override + public float getEnergyPerTick() { + return 2.0f; + } + + @Override + public int getProcessLength() { + return 2000 + 800 * this.level; + } + + @Override + public void readFromNBT(final NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.level = nbt.getByte("dlevel"); + } + + @Override + public void writeToNBT(final NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setByte("dlevel", (byte) this.level); + } + + @Override + public ErrorState canWork() { + if (this.getUtil().isTankEmpty(Distillery.tankInput) && this.currentFluid == null) { + return new ErrorState.InsufficientLiquid("No Input Liquid", Distillery.tankInput); + } + return super.canWork(); + } + + @Override + public ErrorState canProgress() { + if (this.currentFluid == null) { + return new ErrorState("Distillery Empty", "No liquid in Distillery"); + } + if (!this.getUtil().isTankEmpty(Distillery.tankOutput) && this.getOutput() != null && !this.getOutput().isFluidEqual(this.getUtil().getFluid(Distillery.tankOutput))) { + return new ErrorState.Tank("No Room", "No room for liquid", new int[] { Distillery.tankOutput }); + } + if (this.getUtil().getFluid(Distillery.tankOutput) != null && !this.getUtil().getFluid(Distillery.tankOutput).isFluidEqual(Distillery.getOutput(this.getUtil().getFluid(Distillery.tankInput), this.level))) { + return new ErrorState.TankSpace("Different fluid in tank", Distillery.tankOutput); + } + return super.canProgress(); + } + + private FluidStack getOutput() { + return Distillery.getOutput(this.getUtil().getFluid(Distillery.tankInput), this.level); + } + + @Override + protected void onFinishTask() { + final FluidStack output = Distillery.getOutput(this.currentFluid, this.level).copy(); + output.amount = 1000; + this.getUtil().fillTank(Distillery.tankOutput, output); + } + + @Override + protected void onTickTask() { + } + + @Override + public void recieveGuiNBT(final Side side, final EntityPlayer player, final String name, final NBTTagCompound nbt) { + if (name.equals("still-level")) { + this.level = nbt.getByte("i"); + } + if (name.equals("still-recipe")) { + if (nbt.getBoolean("null")) { + this.currentFluid = null; + } + else { + this.currentFluid = FluidStack.loadFluidStackFromNBT(nbt); + } + } + } + + @Override + public void sendGuiNBT(final Map data) { + final NBTTagCompound nbt = new NBTTagCompound(); + if (this.currentFluid == null) { + nbt.setBoolean("null", true); + } + else { + this.currentFluid.writeToNBT(nbt); + } + data.put("still-recipe", nbt); + final NBTTagCompound nbt2 = new NBTTagCompound(); + nbt.setByte("i", (byte) this.level); + data.put("still-level", nbt); + } + + @Override + public void onUpdate() { + super.onUpdate(); + if (this.canWork() == null && this.currentFluid == null && this.getUtil().getTank(Distillery.tankInput).getFluidAmount() >= 1000) { + final FluidStack stack = this.getUtil().drainTank(Distillery.tankInput, 1000); + this.currentFluid = stack; + } + } + + @Override + public String getTooltip() { + if (this.currentFluid == null) { + return "Empty"; + } + return "Creating " + Distillery.getOutput(this.currentFluid, this.level).getFluid().getLocalizedName(); + } + } + + public static class TankValidatorDistilleryInput extends TankValidator + { + @Override + public boolean isValid(final FluidStack itemStack) { + return Distillery.isValidInputLiquid(itemStack); + } + + @Override + public String getTooltip() { + return "Distillable Liquids"; + } + } + + public static class TankValidatorDistilleryOutput extends TankValidator + { + @Override + public boolean isValid(final FluidStack itemStack) { + return Distillery.isValidOutputLiquid(itemStack); + } + + @Override + public String getTooltip() { + return "Distilled Liquids"; + } + } +} diff --git a/src/main/java/binnie/extratrees/machines/ExtraTreeMachine.java b/src/main/java/binnie/extratrees/machines/ExtraTreeMachine.java new file mode 100644 index 00000000..e6d7daca --- /dev/null +++ b/src/main/java/binnie/extratrees/machines/ExtraTreeMachine.java @@ -0,0 +1,103 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.machines; + +import net.minecraft.client.renderer.RenderBlocks; +import binnie.core.machines.TileEntityMachine; +import net.minecraft.tileentity.TileEntity; +import binnie.core.resource.ResourceType; +import binnie.Binnie; +import binnie.core.resource.BinnieResource; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import binnie.core.machines.Machine; +import binnie.extratrees.core.ExtraTreesGUID; +import binnie.core.machines.component.IInteraction; +import binnie.core.machines.MachineComponent; +import binnie.extratrees.ExtraTrees; +import net.minecraft.item.ItemStack; +import binnie.core.BinnieCore; +import binnie.core.machines.MachinePackage; +import binnie.core.machines.IMachineType; + +public enum ExtraTreeMachine implements IMachineType +{ + Lumbermill(Lumbermill.PackageLumbermill.class), + Woodworker(Designer.PackageWoodworker.class), + Panelworker(Designer.PackagePanelworker.class), + Nursery(Nursery.PackageNursery.class), + Press(Press.PackagePress.class), + Brewery(Brewery.PackageBrewery.class), + Distillery(Distillery.PackageDistillery.class), + Glassworker(Designer.PackageGlassworker.class), + Tileworker(Designer.PackageTileworker.class); + + Class clss; + + private ExtraTreeMachine(final Class clss) { + this.clss = clss; + } + + @Override + public Class getPackageClass() { + return this.clss; + } + + @Override + public boolean isActive() { + if (this == ExtraTreeMachine.Tileworker) { + return BinnieCore.isBotanyActive(); + } + return this != ExtraTreeMachine.Nursery; + } + + public ItemStack get(final int i) { + return new ItemStack(ExtraTrees.blockMachine, i, this.ordinal()); + } + + public static class ComponentExtraTreeGUI extends MachineComponent implements IInteraction.RightClick + { + ExtraTreesGUID id; + + public ComponentExtraTreeGUI(final Machine machine, final ExtraTreesGUID id) { + super(machine); + this.id = id; + } + + @Override + public void onRightClick(final World world, final EntityPlayer player, final int x, final int y, final int z) { + ExtraTrees.proxy.openGui(this.id, player, x, y, z); + } + } + + public abstract static class PackageExtraTreeMachine extends MachinePackage + { + BinnieResource textureName; + + protected PackageExtraTreeMachine(final String uid, final String textureName, final boolean powered) { + super(uid, powered); + this.textureName = Binnie.Resource.getFile(ExtraTrees.instance, ResourceType.Tile, textureName); + } + + protected PackageExtraTreeMachine(final String uid, final BinnieResource textureName, final boolean powered) { + super(uid, powered); + this.textureName = textureName; + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + + @Override + public void renderMachine(final Machine machine, final double x, final double y, final double z, final float var8, final RenderBlocks renderer) { + MachineRendererForestry.renderMachine(this.textureName.getShortPath(), x, y, z, var8); + } + } +} diff --git a/src/main/java/binnie/extratrees/machines/Infuser.java b/src/main/java/binnie/extratrees/machines/Infuser.java new file mode 100644 index 00000000..899af451 --- /dev/null +++ b/src/main/java/binnie/extratrees/machines/Infuser.java @@ -0,0 +1,177 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.machines; + +import binnie.core.machines.inventory.TankValidator; +import binnie.core.machines.power.ErrorState; +import binnie.core.machines.power.IProcess; +import binnie.core.machines.power.ComponentProcessSetCost; +import binnie.core.machines.TileEntityMachine; +import net.minecraft.tileentity.TileEntity; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.core.machines.inventory.MachineSide; +import binnie.core.machines.inventory.ComponentTankContainer; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.extratrees.core.ExtraTreesGUID; +import binnie.core.machines.Machine; +import binnie.extratrees.core.ExtraTreeTexture; +import binnie.craftgui.minecraft.IMachineInformation; +import java.util.HashMap; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.Fluid; +import java.util.Map; + +public class Infuser +{ + public static int tankInput; + public static int tankOutput; + static Map recipes; + + public static FluidStack getOutput(final FluidStack fluid, final ItemStack stack) { + if (fluid == null) { + return null; + } + return Infuser.recipes.get(fluid.getFluid()); + } + + public static boolean isValidInputLiquid(final FluidStack fluid) { + return Infuser.recipes.containsKey(fluid.getFluid()); + } + + public static boolean isValidOutputLiquid(final FluidStack fluid) { + for (final Map.Entry entry : Infuser.recipes.entrySet()) { + if (entry.getValue().isFluidEqual(fluid)) { + return true; + } + } + return false; + } + + public static void addRecipe(final FluidStack input, final FluidStack output) { + Infuser.recipes.put(input.getFluid(), output); + } + + static { + Infuser.tankInput = 0; + Infuser.tankOutput = 1; + Infuser.recipes = new HashMap(); + } + + public static class PackageInfuser extends ExtraTreeMachine.PackageExtraTreeMachine implements IMachineInformation + { + public PackageInfuser() { + super("infuser", ExtraTreeTexture.infuserTexture, true); + } + + @Override + public void createMachine(final Machine machine) { + new ExtraTreeMachine.ComponentExtraTreeGUI(machine, ExtraTreesGUID.Infuser); + final ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + final ComponentTankContainer tanks = new ComponentTankContainer(machine); + tanks.addTank(Infuser.tankInput, "input", 5000); + tanks.getTankSlot(Infuser.tankInput).setValidator(new TankValidatorInfuserInput()); + tanks.getTankSlot(Infuser.tankInput).setOutputSides(MachineSide.TopAndBottom); + tanks.addTank(Infuser.tankOutput, "output", 5000); + tanks.getTankSlot(Infuser.tankOutput).setValidator(new TankValidatorInfuserOutput()); + tanks.getTankSlot(Infuser.tankOutput).setReadOnly(); + tanks.getTankSlot(Infuser.tankOutput).setOutputSides(MachineSide.Sides); + new ComponentPowerReceptor(machine); + new ComponentInfuserLogic(machine); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + } + + public static class ComponentInfuserLogic extends ComponentProcessSetCost implements IProcess + { + ItemStack infusing; + + public ComponentInfuserLogic(final Machine machine) { + super(machine, 16000, 800); + } + + @Override + public int getProcessEnergy() { + return this.getProcessLength() * 2; + } + + @Override + public int getProcessLength() { + return 20; + } + + @Override + public ErrorState canWork() { + if (this.getUtil().isTankEmpty(Infuser.tankInput)) { + return new ErrorState.InsufficientLiquid("No Input Liquid", Infuser.tankInput); + } + return super.canWork(); + } + + @Override + public ErrorState canProgress() { + if (!this.getUtil().isTankEmpty(Infuser.tankOutput) && this.getOutput() != null && !this.getOutput().isFluidEqual(this.getUtil().getFluid(Infuser.tankOutput))) { + return new ErrorState.Tank("No Room", "No room for liquid", new int[] { Infuser.tankOutput }); + } + if (this.getUtil().getFluid(Infuser.tankOutput) != null && !this.getUtil().getFluid(Infuser.tankOutput).isFluidEqual(this.getOutput())) { + return new ErrorState.TankSpace("Different fluid in tank", Infuser.tankOutput); + } + return super.canProgress(); + } + + private FluidStack getOutput() { + return Infuser.getOutput(this.getUtil().getFluid(Infuser.tankInput), this.infusing); + } + + @Override + protected void onFinishTask() { + final FluidStack output = this.getOutput().copy(); + this.getUtil().fillTank(Infuser.tankOutput, output); + } + + @Override + protected void onTickTask() { + } + + @Override + public String getTooltip() { + return "Infusing"; + } + } + + public static class TankValidatorInfuserInput extends TankValidator + { + @Override + public boolean isValid(final FluidStack itemStack) { + return Infuser.isValidInputLiquid(itemStack); + } + + @Override + public String getTooltip() { + return "Infusable Liquids"; + } + } + + public static class TankValidatorInfuserOutput extends TankValidator + { + @Override + public boolean isValid(final FluidStack itemStack) { + return Infuser.isValidOutputLiquid(itemStack); + } + + @Override + public String getTooltip() { + return "Infused Liquids"; + } + } +} diff --git a/src/main/java/binnie/extratrees/machines/Lumbermill.java b/src/main/java/binnie/extratrees/machines/Lumbermill.java new file mode 100644 index 00000000..3d6b1f42 --- /dev/null +++ b/src/main/java/binnie/extratrees/machines/Lumbermill.java @@ -0,0 +1,223 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.machines; + +import net.minecraftforge.oredict.OreDictionary; +import binnie.core.machines.inventory.SlotValidator; +import binnie.extratrees.item.ExtraTreeItems; +import binnie.extratrees.ExtraTrees; +import binnie.core.item.ItemMisc; +import binnie.core.machines.power.ErrorState; +import binnie.core.machines.power.IProcess; +import binnie.core.machines.power.ComponentProcessSetCost; +import binnie.core.machines.TileEntityMachine; +import net.minecraft.tileentity.TileEntity; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.core.machines.inventory.TankValidator; +import binnie.core.machines.inventory.ComponentTankContainer; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.extratrees.core.ExtraTreesGUID; +import binnie.core.machines.Machine; +import binnie.extratrees.core.ExtraTreeTexture; +import binnie.craftgui.minecraft.IMachineInformation; +import java.util.HashMap; +import java.util.List; +import net.minecraftforge.oredict.ShapelessOreRecipe; +import net.minecraft.item.crafting.ShapedRecipes; +import net.minecraft.item.crafting.ShapelessRecipes; +import net.minecraft.item.crafting.CraftingManager; +import java.util.ArrayList; +import java.util.Collection; +import binnie.extratrees.block.IPlankType; +import binnie.extratrees.block.WoodManager; +import net.minecraft.item.ItemStack; +import java.util.Map; + +public class Lumbermill +{ + public static int slotWood; + public static int slotPlanks; + public static int slotBark; + public static int slotSawdust; + public static int tankWater; + static Map recipes; + + public static ItemStack getPlankProduct(final ItemStack item) { + ItemStack stack = null; + if (Lumbermill.recipes.isEmpty()) { + calculateLumbermillProducts(); + } + for (final Map.Entry entry : Lumbermill.recipes.entrySet()) { + if (entry.getKey().isItemEqual(item)) { + stack = entry.getValue().copy(); + break; + } + } + stack.stackSize = 6; + return stack; + } + + private static void calculateLumbermillProducts() { + for (final IPlankType type : WoodManager.getAllPlankTypes()) { + for (final ItemStack wood : getRecipeResult(type.getStack())) { + Lumbermill.recipes.put(wood, type.getStack()); + } + } + } + + private static Collection getRecipeResult(final ItemStack output) { + final List list = new ArrayList(); + for (final Object recipeO : CraftingManager.getInstance().getRecipeList()) { + if (recipeO instanceof ShapelessRecipes) { + final ShapelessRecipes recipe = (ShapelessRecipes) recipeO; + if (recipe.recipeItems.size() != 1) { + continue; + } + if (!(recipe.recipeItems.get(0) instanceof ItemStack)) { + continue; + } + final ItemStack input = (ItemStack) recipe.recipeItems.get(0); + if (recipe.getRecipeOutput() != null && recipe.getRecipeOutput().isItemEqual(output)) { + list.add(input); + } + } + if (recipeO instanceof ShapedRecipes) { + final ShapedRecipes recipe2 = (ShapedRecipes) recipeO; + if (recipe2.recipeItems.length != 1) { + continue; + } + final ItemStack input = recipe2.recipeItems[0]; + if (recipe2.getRecipeOutput() != null && recipe2.getRecipeOutput().isItemEqual(output)) { + list.add(input); + } + } + if (recipeO instanceof ShapelessOreRecipe) { + final ShapelessOreRecipe recipe3 = (ShapelessOreRecipe) recipeO; + if (recipe3.getInput().size() != 1) { + continue; + } + if (!(recipe3.getInput().get(0) instanceof ItemStack)) { + continue; + } + final ItemStack input = (ItemStack) recipe3.getInput().get(0); + if (recipe3.getRecipeOutput() == null || !recipe3.getRecipeOutput().isItemEqual(output)) { + continue; + } + list.add(input); + } + } + return list; + } + + static { + Lumbermill.slotWood = 0; + Lumbermill.slotPlanks = 1; + Lumbermill.slotBark = 2; + Lumbermill.slotSawdust = 3; + Lumbermill.tankWater = 0; + Lumbermill.recipes = new HashMap(); + } + + public static class PackageLumbermill extends ExtraTreeMachine.PackageExtraTreeMachine implements IMachineInformation + { + public PackageLumbermill() { + super("lumbermill", ExtraTreeTexture.lumbermillTexture, true); + } + + @Override + public void createMachine(final Machine machine) { + new ExtraTreeMachine.ComponentExtraTreeGUI(machine, ExtraTreesGUID.Lumbermill); + final ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + inventory.addSlot(Lumbermill.slotWood, "input"); + inventory.getSlot(Lumbermill.slotWood).setValidator(new SlotValidatorLog()); + inventory.getSlot(Lumbermill.slotWood).forbidExtraction(); + inventory.addSlot(Lumbermill.slotPlanks, "output"); + inventory.addSlot(Lumbermill.slotBark, "byproduct"); + inventory.addSlot(Lumbermill.slotSawdust, "byproduct"); + inventory.getSlot(Lumbermill.slotPlanks).setReadOnly(); + inventory.getSlot(Lumbermill.slotBark).setReadOnly(); + inventory.getSlot(Lumbermill.slotSawdust).setReadOnly(); + final ComponentTankContainer tanks = new ComponentTankContainer(machine); + tanks.addTank(Lumbermill.tankWater, "input", 10000); + tanks.getTankSlot(Lumbermill.tankWater).setValidator(new TankValidator.Basic("water")); + new ComponentPowerReceptor(machine); + new ComponentLumbermillLogic(machine); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + } + + public static class ComponentLumbermillLogic extends ComponentProcessSetCost implements IProcess + { + public ComponentLumbermillLogic(final Machine machine) { + super(machine, 900, 30); + } + + @Override + public ErrorState canWork() { + if (this.getUtil().isSlotEmpty(Lumbermill.slotWood)) { + return new ErrorState.NoItem("No Wood", Lumbermill.slotWood); + } + final ItemStack result = Lumbermill.getPlankProduct(this.getUtil().getStack(Lumbermill.slotWood)); + if (!this.getUtil().isSlotEmpty(Lumbermill.slotPlanks) && result != null) { + final ItemStack currentPlank = this.getUtil().getStack(Lumbermill.slotPlanks); + if (!result.isItemEqual(currentPlank) || result.stackSize + currentPlank.stackSize > currentPlank.getMaxStackSize()) { + return new ErrorState.NoSpace("No room for new planks", new int[] { Lumbermill.slotPlanks }); + } + } + return super.canWork(); + } + + @Override + public ErrorState canProgress() { + if (!this.getUtil().liquidInTank(Lumbermill.tankWater, 5)) { + return new ErrorState.InsufficientLiquid("Not Enough Water", Lumbermill.tankWater); + } + return super.canProgress(); + } + + @Override + protected void onFinishTask() { + final ItemStack result = Lumbermill.getPlankProduct(this.getUtil().getStack(Lumbermill.slotWood)); + if (result == null) { + return; + } + this.getUtil().addStack(Lumbermill.slotPlanks, result); + this.getUtil().addStack(Lumbermill.slotSawdust, ((ItemMisc) ExtraTrees.itemMisc).getStack(ExtraTreeItems.Sawdust, 1)); + this.getUtil().addStack(Lumbermill.slotBark, ((ItemMisc) ExtraTrees.itemMisc).getStack(ExtraTreeItems.Bark, 1)); + this.getUtil().decreaseStack(Lumbermill.slotWood, 1); + } + + @Override + protected void onTickTask() { + this.getUtil().drainTank(Lumbermill.tankWater, 10); + } + } + + public static class SlotValidatorLog extends SlotValidator + { + public SlotValidatorLog() { + super(SlotValidator.IconBlock); + } + + @Override + public boolean isValid(final ItemStack itemStack) { + final String name = OreDictionary.getOreName(OreDictionary.getOreID(itemStack)); + return name.contains("logWood") && Lumbermill.getPlankProduct(itemStack) != null; + } + + @Override + public String getTooltip() { + return "Logs"; + } + } +} diff --git a/src/main/java/binnie/extratrees/machines/MachineRendererForestry.java b/src/main/java/binnie/extratrees/machines/MachineRendererForestry.java new file mode 100644 index 00000000..36ae44b2 --- /dev/null +++ b/src/main/java/binnie/extratrees/machines/MachineRendererForestry.java @@ -0,0 +1,47 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.machines; + +import java.util.HashMap; + +import net.minecraftforge.common.util.ForgeDirection; + +import java.lang.reflect.Method; +import java.util.Map; + +import forestry.core.render.TankRenderInfo; + +public class MachineRendererForestry +{ + static Map instances; + static Method renderMethod; + + private static void loadMethod(final String file, final boolean waterTank, final boolean productTank) { + try { + final Class clss = Class.forName("forestry.core.render.RenderMachine"); + final Object instance = clss.getConstructor(String.class).newInstance(file); + MachineRendererForestry.renderMethod = clss.getDeclaredMethod("render", TankRenderInfo.class, TankRenderInfo.class, ForgeDirection.class, Double.TYPE, Double.TYPE, Double.TYPE); + MachineRendererForestry.renderMethod.setAccessible(true); + MachineRendererForestry.instances.put(file, instance); + } catch (Exception ex) { + // ex.printStackTrace(); + } + } + + public static void renderMachine(final String name, final double x, final double y, final double z, final float var8) { + if (!MachineRendererForestry.instances.containsKey(name)) { + loadMethod(name, false, false); + } + try { + MachineRendererForestry.renderMethod.invoke(MachineRendererForestry.instances.get(name), TankRenderInfo.EMPTY, TankRenderInfo.EMPTY, ForgeDirection.UP, x, y, z); + } catch (Exception ex) { + // ex.printStackTrace(); + } + } + + static { + MachineRendererForestry.instances = new HashMap(); + } +} diff --git a/src/main/java/binnie/extratrees/machines/MachineRendererNursery.java b/src/main/java/binnie/extratrees/machines/MachineRendererNursery.java new file mode 100644 index 00000000..63e11388 --- /dev/null +++ b/src/main/java/binnie/extratrees/machines/MachineRendererNursery.java @@ -0,0 +1,38 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.machines; + +import binnie.core.resource.ResourceType; +import binnie.extratrees.ExtraTrees; +import binnie.core.BinnieCore; +import org.lwjgl.opengl.GL11; +import net.minecraftforge.client.model.IModelCustom; +import binnie.core.resource.BinnieResource; + +public class MachineRendererNursery +{ + public static MachineRendererNursery instance; + BinnieResource texture; + private IModelCustom casinoMachine; + private ModelNursery model; + + public MachineRendererNursery() { + this.model = new ModelNursery(); + } + + public void renderMachine(final BinnieResource texture, final double x, final double y, final double z, final float var8) { + this.texture = texture; + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glScaled(0.05, 0.05, 0.05); + BinnieCore.proxy.bindTexture(new BinnieResource(ExtraTrees.instance, ResourceType.Tile, "test.png")); + this.casinoMachine.renderAll(); + GL11.glPopMatrix(); + } + + static { + MachineRendererNursery.instance = new MachineRendererNursery(); + } +} diff --git a/src/main/java/binnie/extratrees/machines/ModelNursery.java b/src/main/java/binnie/extratrees/machines/ModelNursery.java new file mode 100644 index 00000000..62839333 --- /dev/null +++ b/src/main/java/binnie/extratrees/machines/ModelNursery.java @@ -0,0 +1,121 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.machines; + +import net.minecraft.entity.Entity; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.model.ModelBase; + +public class ModelNursery extends ModelBase +{ + ModelRenderer Shape1; + ModelRenderer Shape2; + ModelRenderer Shape3; + ModelRenderer Shape4; + ModelRenderer Shape5; + ModelRenderer Shape6; + ModelRenderer Shape7; + ModelRenderer Shape8; + ModelRenderer Shape9; + ModelRenderer Shape10; + ModelRenderer Shape11; + ModelRenderer Shape12; + ModelRenderer Shape13; + + public ModelNursery() { + this.textureWidth = 64; + this.textureHeight = 64; + (this.Shape1 = new ModelRenderer(this, 0, 0)).addBox(-5.0f, -5.0f, -5.0f, 10, 10, 10); + this.Shape1.setRotationPoint(0.0f, 16.0f, 0.0f); + this.Shape1.setTextureSize(64, 64); + this.Shape1.mirror = true; + this.setRotation(this.Shape1, 0.0f, 0.0f, 0.0f); + (this.Shape2 = new ModelRenderer(this, 0, 20)).addBox(-1.0f, -8.0f, -1.0f, 2, 16, 2); + this.Shape2.setRotationPoint(-5.0f, 16.0f, -5.0f); + this.Shape2.setTextureSize(64, 64); + this.Shape2.mirror = true; + this.setRotation(this.Shape2, 0.0f, 0.0f, 0.0f); + (this.Shape3 = new ModelRenderer(this, 0, 20)).addBox(-1.0f, -8.0f, -1.0f, 2, 16, 2); + this.Shape3.setRotationPoint(-5.0f, 16.0f, 5.0f); + this.Shape3.setTextureSize(64, 64); + this.Shape3.mirror = true; + this.setRotation(this.Shape3, 0.0f, 0.0f, 0.0f); + (this.Shape4 = new ModelRenderer(this, 0, 20)).addBox(-1.0f, -8.0f, -1.0f, 2, 16, 2); + this.Shape4.setRotationPoint(5.0f, 16.0f, -5.0f); + this.Shape4.setTextureSize(64, 64); + this.Shape4.mirror = true; + this.setRotation(this.Shape4, 0.0f, 0.0f, 0.0f); + (this.Shape5 = new ModelRenderer(this, 0, 20)).addBox(-1.0f, -8.0f, -1.0f, 2, 16, 2); + this.Shape5.setRotationPoint(5.0f, 16.0f, 5.0f); + this.Shape5.setTextureSize(64, 64); + this.Shape5.mirror = true; + this.setRotation(this.Shape5, 0.0f, 0.0f, 0.0f); + (this.Shape6 = new ModelRenderer(this, 0, 20)).addBox(-1.0f, -8.0f, -1.0f, 2, 16, 2); + this.Shape6.setRotationPoint(5.0f, 21.0f, 0.0f); + this.Shape6.setTextureSize(64, 64); + this.Shape6.mirror = true; + this.setRotation(this.Shape6, 1.570796f, 0.0f, 0.0f); + (this.Shape7 = new ModelRenderer(this, 0, 20)).addBox(-1.0f, -8.0f, -1.0f, 2, 16, 2); + this.Shape7.setRotationPoint(5.0f, 11.0f, 0.0f); + this.Shape7.setTextureSize(64, 64); + this.Shape7.mirror = true; + this.setRotation(this.Shape7, 1.570796f, 0.0f, 0.0f); + (this.Shape8 = new ModelRenderer(this, 0, 20)).addBox(-1.0f, -8.0f, -1.0f, 2, 16, 2); + this.Shape8.setRotationPoint(-5.0f, 21.0f, 0.0f); + this.Shape8.setTextureSize(64, 64); + this.Shape8.mirror = true; + this.setRotation(this.Shape8, 1.570796f, 0.0f, 0.0f); + (this.Shape9 = new ModelRenderer(this, 0, 20)).addBox(-1.0f, -8.0f, -1.0f, 2, 16, 2); + this.Shape9.setRotationPoint(-5.0f, 11.0f, 0.0f); + this.Shape9.setTextureSize(64, 64); + this.Shape9.mirror = true; + this.setRotation(this.Shape9, 1.570796f, 0.0f, 0.0f); + (this.Shape10 = new ModelRenderer(this, 0, 20)).addBox(-1.0f, -8.0f, -1.0f, 2, 16, 2); + this.Shape10.setRotationPoint(0.0f, 11.0f, 5.0f); + this.Shape10.setTextureSize(64, 64); + this.Shape10.mirror = true; + this.setRotation(this.Shape10, 0.0f, 0.0f, 1.570796f); + (this.Shape11 = new ModelRenderer(this, 0, 20)).addBox(-1.0f, -8.0f, -1.0f, 2, 16, 2); + this.Shape11.setRotationPoint(0.0f, 21.0f, -5.0f); + this.Shape11.setTextureSize(64, 64); + this.Shape11.mirror = true; + this.setRotation(this.Shape11, 0.0f, 0.0f, 1.570796f); + (this.Shape12 = new ModelRenderer(this, 0, 20)).addBox(-1.0f, -8.0f, -1.0f, 2, 16, 2); + this.Shape12.setRotationPoint(0.0f, 21.0f, 5.0f); + this.Shape12.setTextureSize(64, 64); + this.Shape12.mirror = true; + this.setRotation(this.Shape12, 0.0f, 0.0f, 1.570796f); + (this.Shape13 = new ModelRenderer(this, 0, 20)).addBox(-1.0f, -8.0f, -1.0f, 2, 16, 2); + this.Shape13.setRotationPoint(0.0f, 11.0f, -5.0f); + this.Shape13.setTextureSize(64, 64); + this.Shape13.mirror = true; + this.setRotation(this.Shape13, 0.0f, 0.0f, 1.570796f); + } + + @Override + public void render(final Entity entity, final float f, final float f1, final float f2, final float f3, final float f4, final float f5) { + super.render(entity, f, f1, f2, f3, f4, f5); + this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + this.Shape1.render(f5); + this.Shape2.render(f5); + this.Shape3.render(f5); + this.Shape4.render(f5); + this.Shape5.render(f5); + this.Shape6.render(f5); + this.Shape7.render(f5); + this.Shape8.render(f5); + this.Shape9.render(f5); + this.Shape10.render(f5); + this.Shape11.render(f5); + this.Shape12.render(f5); + this.Shape13.render(f5); + } + + private void setRotation(final ModelRenderer model, final float x, final float y, final float z) { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/src/main/java/binnie/extratrees/machines/ModuleMachine.java b/src/main/java/binnie/extratrees/machines/ModuleMachine.java new file mode 100644 index 00000000..14071248 --- /dev/null +++ b/src/main/java/binnie/extratrees/machines/ModuleMachine.java @@ -0,0 +1,47 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.machines; + +import net.minecraft.block.Block; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraftforge.oredict.ShapedOreRecipe; +import binnie.core.Mods; +import net.minecraft.init.Items; +import binnie.extratrees.item.ExtraTreeItems; +import net.minecraft.init.Blocks; +import binnie.core.BinnieCore; +import forestry.api.core.Tabs; +import binnie.core.machines.MachineGroup; +import binnie.extratrees.ExtraTrees; +import binnie.core.IInitializable; + +public class ModuleMachine implements IInitializable +{ + @Override + public void preInit() { + final MachineGroup machineGroup = new MachineGroup(ExtraTrees.instance, "machine", "machine", ExtraTreeMachine.values()); + machineGroup.setCreativeTab(Tabs.tabArboriculture); + ExtraTrees.blockMachine = machineGroup.getBlock(); + BinnieCore.proxy.registerTileEntity(TileEntityNursery.class, "binnie.tile.nursery", BinnieCore.proxy.createObject("binnie.core.machines.RendererMachine")); + } + + @Override + public void init() { + } + + @Override + public void postInit() { + GameRegistry.addRecipe(new ShapedOreRecipe(ExtraTreeMachine.Lumbermill.get(1), new Object[] { "gAg", "GsG", "gPg", 'G', Blocks.glass, 'g', ExtraTreeItems.ProvenGear.get(1), 'A', Items.iron_axe, 's', Mods.Forestry.stack("sturdyMachine"), 'P', "gearBronze" })); + GameRegistry.addRecipe(new ShapedOreRecipe(ExtraTreeMachine.Press.get(1), new Object[] { "iGi", "tSt", "tPt", 'i', "ingotIron", 'G', Blocks.glass, 't', "ingotTin", 'S', Mods.Forestry.stack("sturdyMachine"), 'P', "gearBronze" })); + GameRegistry.addRecipe(new ShapedOreRecipe(ExtraTreeMachine.Brewery.get(1), new Object[] { "bGb", "iSi", "bPb", 'i', "ingotIron", 'G', Blocks.glass, 'b', "gearBronze", 'S', Mods.Forestry.stack("sturdyMachine"), 'P', "gearBronze" })); + GameRegistry.addRecipe(new ShapedOreRecipe(ExtraTreeMachine.Distillery.get(1), new Object[] { "rGr", "iSi", "rPr", 'i', "ingotIron", 'G', Blocks.glass, 'r', "dustRedstone", 'S', Mods.Forestry.stack("sturdyMachine"), 'P', "gearBronze" })); + CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(ExtraTreeMachine.Woodworker.get(1), new Object[] { "wGw", "GsG", "ggg", 'G', Blocks.glass, 'g', ExtraTreeItems.ProvenGear.get(1), 'w', Blocks.planks, 's', Mods.Forestry.stack("impregnatedCasing") })); + CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(ExtraTreeMachine.Panelworker.get(1), new Object[] { "wGw", "GsG", "ggg", 'G', Blocks.glass, 'g', ExtraTreeItems.ProvenGear.get(1), 'w', Blocks.wooden_slab, 's', Mods.Forestry.stack("impregnatedCasing") })); + CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(ExtraTreeMachine.Glassworker.get(1), new Object[] { "wGw", "GsG", "ggg", 'G', Blocks.glass, 'g', ExtraTreeItems.ProvenGear.get(1), 'w', Blocks.glass, 's', Mods.Forestry.stack("impregnatedCasing") })); + CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(ExtraTreeMachine.Tileworker.get(1), new Object[] { "wGw", "GsG", "ggg", 'G', Blocks.glass, 'g', ExtraTreeItems.ProvenGear.get(1), 'w', Items.clay_ball, 's', Mods.Forestry.stack("impregnatedCasing") })); + } +} diff --git a/src/main/java/binnie/extratrees/machines/Nursery.java b/src/main/java/binnie/extratrees/machines/Nursery.java new file mode 100644 index 00000000..d2a533e5 --- /dev/null +++ b/src/main/java/binnie/extratrees/machines/Nursery.java @@ -0,0 +1,42 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.machines; + +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.tileentity.TileEntity; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.core.machines.Machine; +import binnie.extratrees.core.ExtraTreeTexture; + +public class Nursery +{ + public static int slotCaterpillar; + + static { + Nursery.slotCaterpillar = 0; + } + + public static class PackageNursery extends ExtraTreeMachine.PackageExtraTreeMachine + { + public PackageNursery() { + super("nursery", ExtraTreeTexture.Nursery.getTexture(), false); + } + + @Override + public void createMachine(final Machine machine) { + final ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + inventory.addSlot(Nursery.slotCaterpillar, "caterpillar"); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityNursery(this); + } + + @Override + public void renderMachine(final Machine machine, final double x, final double y, final double z, final float var8, final RenderBlocks renderer) { + } + } +} diff --git a/src/main/java/binnie/extratrees/machines/Press.java b/src/main/java/binnie/extratrees/machines/Press.java new file mode 100644 index 00000000..e9b1290d --- /dev/null +++ b/src/main/java/binnie/extratrees/machines/Press.java @@ -0,0 +1,176 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.machines; + +import binnie.core.machines.inventory.SlotValidator; +import binnie.core.machines.power.ErrorState; +import binnie.core.machines.power.IProcess; +import binnie.core.machines.power.ComponentProcessSetCost; +import binnie.core.machines.TileEntityMachine; +import net.minecraft.tileentity.TileEntity; +import binnie.core.machines.inventory.ComponentInventoryTransfer; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.core.machines.inventory.ComponentTankContainer; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.extratrees.core.ExtraTreesGUID; +import binnie.core.machines.Machine; +import binnie.extratrees.core.ExtraTreeTexture; +import binnie.craftgui.minecraft.IMachineInformation; +import java.util.HashMap; +import net.minecraftforge.fluids.FluidStack; +import net.minecraft.item.ItemStack; +import java.util.Map; + +public class Press +{ + public static int slotFruit; + public static int slotCurrent; + public static int tankWater; + private static Map pressRecipes; + + public static boolean isInput(final ItemStack itemstack) { + return getOutput(itemstack) != null; + } + + public static FluidStack getOutput(final ItemStack itemstack) { + if (itemstack == null) { + return null; + } + for (final Map.Entry entry : Press.pressRecipes.entrySet()) { + if (itemstack.isItemEqual(entry.getKey())) { + return entry.getValue(); + } + } + return null; + } + + public static void addRecipe(final ItemStack stack, final FluidStack fluid) { + if (getOutput(stack) != null) { + return; + } + Press.pressRecipes.put(stack, fluid); + } + + static { + Press.slotFruit = 0; + Press.slotCurrent = 1; + Press.tankWater = 0; + Press.pressRecipes = new HashMap(); + } + + public static class PackagePress extends ExtraTreeMachine.PackageExtraTreeMachine implements IMachineInformation + { + public PackagePress() { + super("press", ExtraTreeTexture.pressTexture, true); + } + + @Override + public void createMachine(final Machine machine) { + new ExtraTreeMachine.ComponentExtraTreeGUI(machine, ExtraTreesGUID.Press); + final ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + inventory.addSlot(Press.slotFruit, "input"); + inventory.getSlot(Press.slotFruit).setValidator(new SlotValidatorSqueezable()); + inventory.getSlot(Press.slotFruit).forbidExtraction(); + inventory.addSlot(Press.slotCurrent, "process"); + inventory.getSlot(Press.slotCurrent).setValidator(new SlotValidatorSqueezable()); + inventory.getSlot(Press.slotCurrent).forbidInteraction(); + final ComponentTankContainer tanks = new ComponentTankContainer(machine); + tanks.addTank(Press.tankWater, "output", 5000); + new ComponentPowerReceptor(machine); + new ComponentInventoryTransfer(machine).addRestock(new int[] { Press.slotFruit }, Press.slotCurrent, 1); + new ComponentFruitPressLogic(machine); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + } + + public static class ComponentFruitPressLogic extends ComponentProcessSetCost implements IProcess + { + int lastProgress; + + public ComponentFruitPressLogic(final Machine machine) { + super(machine, 1000, 50); + this.lastProgress = 0; + } + + @Override + public ErrorState canWork() { + if (this.getUtil().isSlotEmpty(Press.slotCurrent)) { + return new ErrorState.NoItem("No Fruit", Press.slotCurrent); + } + return super.canWork(); + } + + @Override + public ErrorState canProgress() { + if (!this.getUtil().spaceInTank(Press.tankWater, 5)) { + return new ErrorState.TankSpace("No room in tank", Press.tankWater); + } + if (this.getUtil().getFluid(Press.tankWater) != null && !this.getUtil().getFluid(Press.tankWater).isFluidEqual(Press.getOutput(this.getUtil().getStack(Press.slotCurrent)))) { + return new ErrorState.TankSpace("Different fluid in tank", Press.tankWater); + } + return super.canProgress(); + } + + @Override + protected void onFinishTask() { + this.getUtil().decreaseStack(Press.slotCurrent, 1); + } + + @Override + protected void onTickTask() { + } + + @Override + public void onUpdate() { + super.onUpdate(); + final FluidStack output = Press.getOutput(this.getUtil().getStack(Press.slotCurrent)); + if (output == null) { + return; + } + final int newProgress = (int) this.getProgress(); + while (this.lastProgress + 4 <= newProgress) { + final int change = newProgress - this.lastProgress; + final int amount = output.amount * change / 100; + final FluidStack tank = new FluidStack(output, amount); + this.getUtil().fillTank(Press.tankWater, tank); + this.lastProgress += 4; + } + if (this.lastProgress > newProgress) { + this.lastProgress = 0; + } + } + + @Override + protected void onStartTask() { + super.onStartTask(); + this.lastProgress = 0; + } + } + + public static class SlotValidatorSqueezable extends SlotValidator + { + public SlotValidatorSqueezable() { + super(SlotValidator.IconBlock); + } + + @Override + public boolean isValid(final ItemStack itemStack) { + return Press.isInput(itemStack); + } + + @Override + public String getTooltip() { + return "Fruit"; + } + } +} diff --git a/src/main/java/binnie/extratrees/machines/TileEntityNursery.java b/src/main/java/binnie/extratrees/machines/TileEntityNursery.java new file mode 100644 index 00000000..ee059cc9 --- /dev/null +++ b/src/main/java/binnie/extratrees/machines/TileEntityNursery.java @@ -0,0 +1,126 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.machines; + +import java.util.HashSet; +import java.util.Set; + +import forestry.api.core.IErrorState; + +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.world.biome.BiomeGenBase; + +import forestry.api.genetics.IIndividual; +import forestry.api.lepidopterology.IButterfly; + +import net.minecraft.item.ItemStack; + +import forestry.api.core.EnumHumidity; +import forestry.api.core.EnumTemperature; + +import net.minecraft.world.World; + +import forestry.api.lepidopterology.IButterflyNursery; +import binnie.core.machines.TileEntityMachine; + +public class TileEntityNursery extends TileEntityMachine implements IButterflyNursery +{ + public TileEntityNursery(final Nursery.PackageNursery pack) { + super(pack); + } + + IButterflyNursery getNursery() { + return this.getMachine().getInterface(IButterflyNursery.class); + } + + boolean hasNursery() { + return this.getNursery() != null; + } + + public World getWorld() { + return this.worldObj; + } + + public int getXCoord() { + return this.xCoord; + } + + public int getYCoord() { + return this.yCoord; + } + + public int getZCoord() { + return this.zCoord; + } + + public EnumTemperature getTemperature() { + return null; + } + + public EnumHumidity getHumidity() { + return null; + } + + public boolean addProduct(final ItemStack product, final boolean all) { + return false; + } + + @Override + public IButterfly getCaterpillar() { + return this.hasNursery() ? this.getNursery().getCaterpillar() : null; + } + + @Override + public IIndividual getNanny() { + return null; + } + + @Override + public void setCaterpillar(final IButterfly butterfly) { + if (this.hasNursery()) { + this.getNursery().setCaterpillar(butterfly); + } + } + + @Override + public boolean canNurse(final IButterfly butterfly) { + return this.getCaterpillar() == null; + } + + public BiomeGenBase getBiome() { + return this.getWorld().getBiomeGenForCoords(this.xCoord, this.zCoord); + } + + public void setErrorState(final IErrorState state) { + } + + public IErrorState getErrorState() { + return null; + } + + public boolean setErrorCondition(final boolean condition, final IErrorState errorState) { + return false; + } + + public Set getErrorStates() { + return new HashSet(); + } + + public int getBiomeId() { + return 0; + } + + public void setErrorState(final int state) { + } + + public int getErrorOrdinal() { + return 0; + } + + @Override + public ChunkCoordinates getCoordinates() { + return new ChunkCoordinates(xCoord, yCoord, zCoord); + } +} diff --git a/src/main/java/binnie/extratrees/machines/Validators.java b/src/main/java/binnie/extratrees/machines/Validators.java new file mode 100644 index 00000000..1f9f5c3a --- /dev/null +++ b/src/main/java/binnie/extratrees/machines/Validators.java @@ -0,0 +1,55 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.machines; + +import binnie.extratrees.api.IDesignMaterial; +import net.minecraft.item.ItemStack; +import binnie.core.machines.inventory.ValidatorIcon; +import binnie.extratrees.ExtraTrees; +import binnie.core.machines.inventory.SlotValidator; + +public class Validators +{ + public static class SlotValidatorBeeswax extends SlotValidator + { + DesignerType type; + + public SlotValidatorBeeswax(final DesignerType type) { + super(new ValidatorIcon(ExtraTrees.instance, "validator/polish.0", "validator/polish.1")); + this.type = type; + } + + @Override + public boolean isValid(final ItemStack itemStack) { + return this.type.getSystem().getAdhesive().isItemEqual(itemStack); + } + + @Override + public String getTooltip() { + return this.type.getSystem().getAdhesive().getDisplayName(); + } + } + + public static class SlotValidatorPlanks extends SlotValidator + { + DesignerType type; + + public SlotValidatorPlanks(final DesignerType type) { + super(SlotValidator.IconBlock); + this.type = type; + } + + @Override + public boolean isValid(final ItemStack itemStack) { + final IDesignMaterial mat = this.type.getSystem().getMaterial(itemStack); + return itemStack != null && mat != null; + } + + @Override + public String getTooltip() { + return this.type.getMaterialTooltip(); + } + } +} diff --git a/src/main/java/binnie/extratrees/proxy/IExtraTreeProxy.java b/src/main/java/binnie/extratrees/proxy/IExtraTreeProxy.java new file mode 100644 index 00000000..cb112a4f --- /dev/null +++ b/src/main/java/binnie/extratrees/proxy/IExtraTreeProxy.java @@ -0,0 +1,11 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.proxy; + +import binnie.core.proxy.IProxyCore; + +public interface IExtraTreeProxy extends IProxyCore +{ +} diff --git a/src/main/java/binnie/extratrees/proxy/Proxy.java b/src/main/java/binnie/extratrees/proxy/Proxy.java new file mode 100644 index 00000000..ee0a6557 --- /dev/null +++ b/src/main/java/binnie/extratrees/proxy/Proxy.java @@ -0,0 +1,15 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.proxy; + +import binnie.extratrees.ExtraTrees; +import binnie.core.proxy.BinnieModProxy; + +public class Proxy extends BinnieModProxy implements IExtraTreeProxy +{ + public Proxy() { + super(ExtraTrees.instance); + } +} diff --git a/src/main/java/binnie/extratrees/proxy/ProxyClient.java b/src/main/java/binnie/extratrees/proxy/ProxyClient.java new file mode 100644 index 00000000..cdd6e8f8 --- /dev/null +++ b/src/main/java/binnie/extratrees/proxy/ProxyClient.java @@ -0,0 +1,17 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.proxy; + +import forestry.api.core.IIconProvider; +import binnie.extratrees.genetics.FruitSprite; +import forestry.api.core.ForestryAPI; + +public class ProxyClient extends Proxy implements IExtraTreeProxy +{ + @Override + public void init() { + ForestryAPI.textureManager.registerIconProvider(FruitSprite.Average); + } +} diff --git a/src/main/java/binnie/extratrees/proxy/ProxyServer.java b/src/main/java/binnie/extratrees/proxy/ProxyServer.java new file mode 100644 index 00000000..0fb6ca80 --- /dev/null +++ b/src/main/java/binnie/extratrees/proxy/ProxyServer.java @@ -0,0 +1,9 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.proxy; + +public class ProxyServer extends Proxy implements IExtraTreeProxy +{ +} diff --git a/src/main/java/binnie/extratrees/village/ComponentVillageGrove.java b/src/main/java/binnie/extratrees/village/ComponentVillageGrove.java new file mode 100644 index 00000000..320a2e2f --- /dev/null +++ b/src/main/java/binnie/extratrees/village/ComponentVillageGrove.java @@ -0,0 +1,52 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.village; + +import forestry.apiculture.worldgen.ComponentVillageBeeHouse; +import net.minecraft.init.Blocks; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureComponent; +import java.util.List; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import java.util.Random; +import net.minecraft.world.gen.structure.StructureVillagePieces; + +public class ComponentVillageGrove extends StructureVillagePieces.Village +{ + public ComponentVillageGrove() { + } + + public ComponentVillageGrove(final StructureVillagePieces.Start start, final int p_i2097_2_, final Random p_i2097_3_, final StructureBoundingBox boundingBox, final int coordBaseMode) { + super(start, p_i2097_2_); + this.coordBaseMode = coordBaseMode; + this.boundingBox = boundingBox; + } + + public static StructureBoundingBox func_74904_a(final StructureVillagePieces.Start p_74904_0_, final List p_74904_1_, final Random p_74904_2_, final int p_74904_3_, final int p_74904_4_, final int p_74904_5_, final int p_74904_6_) { + final StructureBoundingBox structureboundingbox = StructureBoundingBox.getComponentToAddBoundingBox(p_74904_3_, p_74904_4_, p_74904_5_, 0, 0, 0, 3, 3, 3, p_74904_6_); + return (StructureComponent.findIntersecting(p_74904_1_, structureboundingbox) != null) ? null : structureboundingbox; + } + + @Override + public boolean addComponentParts(final World p_74875_1_, final Random p_74875_2_, final StructureBoundingBox p_74875_3_) { + if (this.field_143015_k < 0) { + this.field_143015_k = this.getAverageGroundLevel(p_74875_1_, p_74875_3_); + if (this.field_143015_k < 0) { + return true; + } + this.boundingBox.offset(0, this.field_143015_k - this.boundingBox.maxY + 4 - 1, 0); + } + System.out.println("GROVE2"); + this.fillWithBlocks(p_74875_1_, p_74875_3_, 0, 0, 0, 3, 3, 3, Blocks.air, Blocks.air, false); + this.fillWithBlocks(p_74875_1_, p_74875_3_, 0, 0, 0, 3, 3, 3, Blocks.stone, Blocks.stone, true); + return true; + } + + public static ComponentVillageBeeHouse buildComponent(final StructureVillagePieces.Start startPiece, final List par1List, final Random random, final int par3, final int par4, final int par5, final int par6, final int par7) { + System.out.println("GROVE1"); + final StructureBoundingBox bbox = StructureBoundingBox.getComponentToAddBoundingBox(par3, par4, par5, 0, 0, 0, 9, 9, 10, par6); + return (canVillageGoDeeper(bbox) && StructureComponent.findIntersecting(par1List, bbox) == null) ? new ComponentVillageBeeHouse(startPiece, par7, random, bbox, par6) : null; + } +} diff --git a/src/main/java/binnie/extratrees/village/VillageHandlerExtraTrees.java b/src/main/java/binnie/extratrees/village/VillageHandlerExtraTrees.java new file mode 100644 index 00000000..5a10fcf1 --- /dev/null +++ b/src/main/java/binnie/extratrees/village/VillageHandlerExtraTrees.java @@ -0,0 +1,37 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.village; + +import java.util.List; +import net.minecraft.util.MathHelper; +import net.minecraft.world.gen.structure.StructureVillagePieces; +import java.util.Random; +import net.minecraft.world.gen.structure.MapGenStructureIO; +import cpw.mods.fml.common.registry.VillagerRegistry; + +public class VillageHandlerExtraTrees implements VillagerRegistry.IVillageCreationHandler +{ + public static void registerVillageComponents() { + try { + MapGenStructureIO.func_143031_a(ComponentVillageGrove.class, "ExtraTrees:Grove"); + } catch (Throwable t) { + } + } + + @Override + public StructureVillagePieces.PieceWeight getVillagePieceWeight(final Random random, final int size) { + return new StructureVillagePieces.PieceWeight(ComponentVillageGrove.class, 505, MathHelper.getRandomIntegerInRange(random, size, 1 + size)); + } + + @Override + public Class getComponentClass() { + return ComponentVillageGrove.class; + } + + @Override + public Object buildComponent(final StructureVillagePieces.PieceWeight villagePiece, final StructureVillagePieces.Start startPiece, final List pieces, final Random random, final int p1, final int p2, final int p3, final int p4, final int p5) { + return ComponentVillageGrove.buildComponent(startPiece, pieces, random, p1, p2, p3, p4, p5); + } +} diff --git a/src/main/java/binnie/extratrees/worldgen/BlockType.java b/src/main/java/binnie/extratrees/worldgen/BlockType.java new file mode 100644 index 00000000..aa9f2d6b --- /dev/null +++ b/src/main/java/binnie/extratrees/worldgen/BlockType.java @@ -0,0 +1,28 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.worldgen; + +import forestry.api.world.ITreeGenData; + +import net.minecraft.world.World; +import net.minecraft.block.Block; + +public class BlockType +{ + int meta; + Block block; + + public BlockType(final Block block, final int meta) { + this.block = block; + this.meta = meta; + } + + public void setBlock(final World world, final ITreeGenData tree, final int x, final int y, final int z) { + world.setBlock(x, y, z, this.block, this.meta, 0); + if (world.getTileEntity(x, y, z) != null) { + world.removeTileEntity(x, y, z); + } + } +} diff --git a/src/main/java/binnie/extratrees/worldgen/BlockTypeLeaf.java b/src/main/java/binnie/extratrees/worldgen/BlockTypeLeaf.java new file mode 100644 index 00000000..653d2338 --- /dev/null +++ b/src/main/java/binnie/extratrees/worldgen/BlockTypeLeaf.java @@ -0,0 +1,22 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.worldgen; + +import forestry.api.world.ITreeGenData; +import com.mojang.authlib.GameProfile; +import net.minecraft.world.World; +import binnie.core.Mods; + +public class BlockTypeLeaf extends BlockType +{ + public BlockTypeLeaf() { + super(Mods.Forestry.block("leaves"), 0); + } + + @Override + public void setBlock(final World world, final ITreeGenData tree, final int x, final int y, final int z) { + tree.setLeaves(world, (GameProfile) null, x, y, z); + } +} diff --git a/src/main/java/binnie/extratrees/worldgen/BlockTypeLog.java b/src/main/java/binnie/extratrees/worldgen/BlockTypeLog.java new file mode 100644 index 00000000..31f7ee49 --- /dev/null +++ b/src/main/java/binnie/extratrees/worldgen/BlockTypeLog.java @@ -0,0 +1,25 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.worldgen; + +import forestry.api.world.ITreeGenData; + +import net.minecraft.world.World; +import binnie.extratrees.block.ILogType; + +public class BlockTypeLog extends BlockType +{ + ILogType log; + + public BlockTypeLog(final ILogType log) { + super(null, 0); + this.log = log; + } + + @Override + public void setBlock(final World world, final ITreeGenData tree, final int x, final int y, final int z) { + this.log.placeBlock(world, x, y, z); + } +} diff --git a/src/main/java/binnie/extratrees/worldgen/BlockTypeVoid.java b/src/main/java/binnie/extratrees/worldgen/BlockTypeVoid.java new file mode 100644 index 00000000..956ff906 --- /dev/null +++ b/src/main/java/binnie/extratrees/worldgen/BlockTypeVoid.java @@ -0,0 +1,24 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.extratrees.worldgen; + +import forestry.api.world.ITreeGenData; + +import net.minecraft.world.World; + +public class BlockTypeVoid extends BlockType +{ + public BlockTypeVoid() { + super(null, 0); + } + + @Override + public void setBlock(final World world, final ITreeGenData tree, final int x, final int y, final int z) { + world.setBlockToAir(x, y, z); + if (world.getTileEntity(x, y, z) != null) { + world.removeTileEntity(x, y, z); + } + } +} diff --git a/src/main/java/binnie/genetics/CreativeTabGenetics.java b/src/main/java/binnie/genetics/CreativeTabGenetics.java new file mode 100644 index 00000000..8365d14e --- /dev/null +++ b/src/main/java/binnie/genetics/CreativeTabGenetics.java @@ -0,0 +1,48 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics; + +import net.minecraft.item.Item; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.extrabees.ExtraBees; +import binnie.genetics.item.GeneticsItems; +import net.minecraft.item.ItemStack; +import net.minecraft.creativetab.CreativeTabs; + +public class CreativeTabGenetics extends CreativeTabs +{ + public static CreativeTabs instance; + + @Override + public ItemStack getIconItemStack() { + return GeneticsItems.EmptySerum.get(1); + } + + public CreativeTabGenetics() { + super("Genetics"); + } + + @Override + public String getTranslatedTabLabel() { + return this.getTabLabel(); + } + + @Override + @SideOnly(Side.CLIENT) + public String getTabLabel() { + return ExtraBees.proxy.localise("tab.genetics"); + } + + @Override + @SideOnly(Side.CLIENT) + public Item getTabIconItem() { + return null; + } + + static { + CreativeTabGenetics.instance = new CreativeTabGenetics(); + } +} diff --git a/src/main/java/binnie/genetics/Genetics.java b/src/main/java/binnie/genetics/Genetics.java new file mode 100644 index 00000000..7707ac28 --- /dev/null +++ b/src/main/java/binnie/genetics/Genetics.java @@ -0,0 +1,116 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics; + +import binnie.core.BinnieCore; +import binnie.core.network.BinniePacketHandler; +import binnie.core.proxy.IProxyCore; +import binnie.genetics.core.GeneticsPacket; +import binnie.core.network.IPacketID; +import binnie.genetics.core.GeneticsGUI; +import binnie.core.gui.IBinnieGUID; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import binnie.genetics.machine.ModuleMachine; +import binnie.genetics.item.ModuleItem; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import binnie.genetics.item.ItemAnalyst; +import binnie.genetics.item.ItemDatabase; +import binnie.core.machines.MachineGroup; +import net.minecraft.item.Item; +import cpw.mods.fml.common.SidedProxy; +import binnie.genetics.proxy.Proxy; +import binnie.genetics.item.ItemSerumArray; +import cpw.mods.fml.common.Mod; +import binnie.core.AbstractMod; + +@Mod(modid = "Genetics", name = "Genetics", useMetadata = true, dependencies = "after:BinnieCore") +public class Genetics extends AbstractMod +{ + public static ItemSerumArray itemSerumArray; + @Mod.Instance("Genetics") + public static Genetics instance; + @SidedProxy(clientSide = "binnie.genetics.proxy.ProxyClient", serverSide = "binnie.genetics.proxy.ProxyServer") + public static Proxy proxy; + public static String channel; + public static Item itemGenetics; + public static Item itemSerum; + public static Item itemSequencer; + public static MachineGroup packageGenetic; + public static MachineGroup packageAdvGenetic; + public static MachineGroup packageLabMachine; + public static ItemDatabase database; + public static ItemAnalyst analyst; + public static Item registry; + public static Item masterRegistry; + + @Mod.EventHandler + public void preInit(final FMLPreInitializationEvent evt) { + this.addModule(new ModuleItem()); + this.addModule(new ModuleMachine()); + this.preInit(); + } + + @Mod.EventHandler + public void init(final FMLInitializationEvent evt) { + this.init(); + } + + @Mod.EventHandler + public void postInit(final FMLPostInitializationEvent evt) { + this.postInit(); + } + + public Genetics() { + Genetics.instance = this; + } + + @Override + public IBinnieGUID[] getGUIDs() { + return GeneticsGUI.values(); + } + + @Override + public IPacketID[] getPacketIDs() { + return GeneticsPacket.values(); + } + + @Override + public String getChannel() { + return "GEN"; + } + + @Override + public IProxyCore getProxy() { + return Genetics.proxy; + } + + @Override + public String getModID() { + return "genetics"; + } + + @Override + protected Class getPacketHandler() { + return PacketHandler.class; + } + + @Override + public boolean isActive() { + return BinnieCore.isGeneticsActive(); + } + + static { + Genetics.itemSerumArray = null; + Genetics.channel = "GEN"; + } + + public static class PacketHandler extends BinniePacketHandler + { + public PacketHandler() { + super(Genetics.instance); + } + } +} diff --git a/src/main/java/binnie/genetics/api/IGene.java b/src/main/java/binnie/genetics/api/IGene.java new file mode 100644 index 00000000..f1309050 --- /dev/null +++ b/src/main/java/binnie/genetics/api/IGene.java @@ -0,0 +1,24 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.api; + +import net.minecraft.nbt.NBTTagCompound; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.ISpeciesRoot; +import forestry.api.genetics.IChromosomeType; +import forestry.api.core.INBTTagable; + +public interface IGene extends INBTTagable +{ + IChromosomeType getChromosome(); + + String getName(); + + ISpeciesRoot getSpeciesRoot(); + + IAllele getAllele(); + + NBTTagCompound getNBTTagCompound(); +} diff --git a/src/main/java/binnie/genetics/api/IIncubatorRecipe.java b/src/main/java/binnie/genetics/api/IIncubatorRecipe.java new file mode 100644 index 00000000..f3409d25 --- /dev/null +++ b/src/main/java/binnie/genetics/api/IIncubatorRecipe.java @@ -0,0 +1,24 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.api; + +import binnie.core.machines.MachineUtil; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +public interface IIncubatorRecipe +{ + boolean isInputLiquid(final FluidStack p0); + + boolean isInputLiquidSufficient(final FluidStack p0); + + boolean isItemStack(final ItemStack p0); + + void doTask(final MachineUtil p0); + + float getChance(); + + boolean roomForOutput(final MachineUtil p0); +} diff --git a/src/main/java/binnie/genetics/api/IItemAnalysable.java b/src/main/java/binnie/genetics/api/IItemAnalysable.java new file mode 100644 index 00000000..000e2579 --- /dev/null +++ b/src/main/java/binnie/genetics/api/IItemAnalysable.java @@ -0,0 +1,17 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.api; + +import net.minecraft.item.ItemStack; + +public interface IItemAnalysable +{ + boolean isAnalysed(final ItemStack p0); + + ItemStack analyse(final ItemStack p0); + + @Deprecated + float getAnalyseTimeMult(final ItemStack p0); +} diff --git a/src/main/java/binnie/genetics/api/IItemChargable.java b/src/main/java/binnie/genetics/api/IItemChargable.java new file mode 100644 index 00000000..5f7a28ef --- /dev/null +++ b/src/main/java/binnie/genetics/api/IItemChargable.java @@ -0,0 +1,12 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.api; + +import net.minecraft.item.ItemStack; + +public interface IItemChargable +{ + int getCharges(final ItemStack p0); +} diff --git a/src/main/java/binnie/genetics/api/IItemSerum.java b/src/main/java/binnie/genetics/api/IItemSerum.java new file mode 100644 index 00000000..8d5a9195 --- /dev/null +++ b/src/main/java/binnie/genetics/api/IItemSerum.java @@ -0,0 +1,19 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.api; + +import forestry.api.genetics.ISpeciesRoot; +import net.minecraft.item.ItemStack; + +public interface IItemSerum extends IItemChargable +{ + IGene[] getGenes(final ItemStack p0); + + ISpeciesRoot getSpeciesRoot(final ItemStack p0); + + IGene getGene(final ItemStack p0, final int p1); + + ItemStack addGene(final ItemStack p0, final IGene p1); +} diff --git a/src/main/java/binnie/genetics/config/ConfigurationMain.java b/src/main/java/binnie/genetics/config/ConfigurationMain.java new file mode 100644 index 00000000..6e0a0e31 --- /dev/null +++ b/src/main/java/binnie/genetics/config/ConfigurationMain.java @@ -0,0 +1,12 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.config; + +import binnie.core.mod.config.ConfigFile; + +@ConfigFile(filename = "/config/forestry/genetics/main.conf") +public class ConfigurationMain +{ +} diff --git a/src/main/java/binnie/genetics/core/GeneticsGUI.java b/src/main/java/binnie/genetics/core/GeneticsGUI.java new file mode 100644 index 00000000..e7fc28a9 --- /dev/null +++ b/src/main/java/binnie/genetics/core/GeneticsGUI.java @@ -0,0 +1,97 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.core; + +import binnie.craftgui.genetics.machine.WindowSplicer; +import binnie.craftgui.genetics.machine.WindowAcclimatiser; +import binnie.craftgui.genetics.machine.WindowIncubator; +import binnie.craftgui.genetics.machine.WindowAnalyser; +import binnie.craftgui.genetics.machine.WindowInoculator; +import binnie.craftgui.genetics.machine.WindowPolymeriser; +import binnie.craftgui.genetics.machine.WindowSequencer; +import binnie.craftgui.genetics.machine.WindowIsolator; +import binnie.craftgui.genetics.machine.WindowGenepool; +import net.minecraft.tileentity.TileEntity; +import binnie.craftgui.genetics.machine.WindowGeneBankNEI; +import binnie.craftgui.genetics.machine.WindowGeneBank; +import net.minecraft.world.World; +import java.lang.reflect.Constructor; +import binnie.genetics.gui.WindowAnalyst; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.craftgui.minecraft.Window; +import binnie.core.gui.IBinnieGUID; + +public enum GeneticsGUI implements IBinnieGUID +{ + Genepool(WindowGenepool.class), + Isolator(WindowIsolator.class), + Sequencer(WindowSequencer.class), + Replicator(WindowPolymeriser.class), + Inoculator(WindowInoculator.class), + GeneBank(WindowGeneBank.class), + Analyser(WindowAnalyser.class), + Incubator(WindowIncubator.class), + Database(WindowGeneBank.class), + DatabaseNEI(WindowGeneBankNEI.class), + Acclimatiser(WindowAcclimatiser.class), + Splicer(WindowSplicer.class), + Analyst, + Registry, + MasterRegistry; + + Class windowClass; + + private GeneticsGUI() + { + } + + private GeneticsGUI(final Class window) { + this.windowClass = window; + } + + public Window getWindow(final EntityPlayer player, final IInventory object, final Side side) throws Exception { + switch (this) { + case Analyst: { + return new WindowAnalyst(player, null, side, false, false); + } + case MasterRegistry: { + return new WindowAnalyst(player, null, side, true, true); + } + case Registry: { + return new WindowAnalyst(player, null, side, true, false); + } + default: { + final Constructor constr = this.windowClass.getConstructor(EntityPlayer.class, IInventory.class, Side.class); + return (Window) constr.newInstance(player, object, side); + } + } + } + + @Override + public Window getWindow(final EntityPlayer player, final World world, final int x, final int y, final int z, final Side side) { + Window window = null; + final TileEntity tileEntity = world.getTileEntity(x, y, z); + IInventory object = null; + if (tileEntity instanceof IInventory) { + object = (IInventory) tileEntity; + } + try { + if (this == GeneticsGUI.Database || this == GeneticsGUI.GeneBank) { + window = WindowGeneBank.create(player, object, side); + } + else if (this == GeneticsGUI.DatabaseNEI) { + window = WindowGeneBankNEI.create(player, object, side); + } + else { + window = this.getWindow(player, object, side); + } + } catch (Exception e) { + e.printStackTrace(); + } + return window; + } +} diff --git a/src/main/java/binnie/genetics/core/GeneticsPacket.java b/src/main/java/binnie/genetics/core/GeneticsPacket.java new file mode 100644 index 00000000..989a75b4 --- /dev/null +++ b/src/main/java/binnie/genetics/core/GeneticsPacket.java @@ -0,0 +1,32 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.core; + +import net.minecraft.entity.player.EntityPlayer; +import binnie.genetics.genetics.GeneTracker; +import binnie.core.BinnieCore; +import binnie.core.network.packet.MessageNBT; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import binnie.core.network.packet.MessageBinnie; +import binnie.core.network.IPacketID; + +public enum GeneticsPacket implements IPacketID +{ + GeneTrackerSync; + + @Override + public void onMessage(final MessageBinnie message, final MessageContext context) { + if (this == GeneticsPacket.GeneTrackerSync && context.side == Side.CLIENT) { + final MessageNBT packet = new MessageNBT(message); + final EntityPlayer player = BinnieCore.proxy.getPlayer(); + GeneTracker tracker = null; + tracker = GeneTracker.getTracker(BinnieCore.proxy.getWorld(), player.getGameProfile()); + if (tracker != null) { + tracker.readFromNBT(packet.getTagCompound()); + } + } + } +} diff --git a/src/main/java/binnie/genetics/core/GeneticsTexture.java b/src/main/java/binnie/genetics/core/GeneticsTexture.java new file mode 100644 index 00000000..bbcf1a9c --- /dev/null +++ b/src/main/java/binnie/genetics/core/GeneticsTexture.java @@ -0,0 +1,49 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.core; + +import binnie.genetics.Genetics; +import binnie.Binnie; +import binnie.core.resource.BinnieResource; +import binnie.core.resource.BinnieIcon; +import binnie.core.resource.ResourceType; +import binnie.core.resource.IBinnieTexture; + +public enum GeneticsTexture implements IBinnieTexture +{ + GeneticMachine(ResourceType.Tile, "GeneticMachine"), + Genepool(ResourceType.Tile, "Genepool"), + Incubator(ResourceType.Tile, "Incubator"), + GUIProcess(ResourceType.GUI, "process"), + GUIProcess2(ResourceType.GUI, "process2"), + Isolator(ResourceType.Tile, "Isolator"), + Sequencer(ResourceType.Tile, "Sequencer"), + Polymeriser(ResourceType.Tile, "Polymeriser"), + Inoculator(ResourceType.Tile, "Inoculator"), + Analyser(ResourceType.Tile, "Analyser"), + MachineGlow(ResourceType.Tile, "MachineGlow"), + GeneBank(ResourceType.Tile, "GeneBank"), + LabMachine(ResourceType.Tile, "LabMachine"), + Acclimatiser(ResourceType.Tile, "Acclimatiser"), + Splicer(ResourceType.Tile, "Splicer"); + + String texture; + ResourceType type; + public static BinnieIcon dnaIcon; + + private GeneticsTexture(final ResourceType base, final String texture) { + this.texture = texture; + this.type = base; + } + + @Override + public BinnieResource getTexture() { + return Binnie.Resource.getPNG(Genetics.instance, this.type, this.texture); + } + + static { + GeneticsTexture.dnaIcon = Binnie.Resource.getItemIcon(Genetics.instance, "dna"); + } +} diff --git a/src/main/java/binnie/genetics/genetics/Engineering.java b/src/main/java/binnie/genetics/genetics/Engineering.java new file mode 100644 index 00000000..56acad5e --- /dev/null +++ b/src/main/java/binnie/genetics/genetics/Engineering.java @@ -0,0 +1,71 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.genetics; + +import binnie.genetics.api.IItemChargable; +import binnie.genetics.item.ItemSerumArray; +import binnie.genetics.item.ItemSerum; +import binnie.genetics.api.IGene; +import binnie.genetics.item.GeneticsItems; +import binnie.genetics.Genetics; +import binnie.genetics.api.IItemSerum; +import net.minecraft.item.ItemStack; + +public class Engineering +{ + public static boolean isGeneAcceptor(final ItemStack stack) { + if (stack == null) { + return false; + } + if (stack.getItem() instanceof IItemSerum) { + return ((IItemSerum) stack.getItem()).getCharges(stack) == 0; + } + return stack.getItem() == Genetics.itemGenetics && (stack.getItemDamage() == GeneticsItems.EmptySerum.ordinal() || stack.getItemDamage() == GeneticsItems.EmptyGenome.ordinal()); + } + + public static boolean canAcceptGene(final ItemStack stack, final IGene gene) { + if (stack.getItem() instanceof ItemSerum) { + return true; + } + if (stack.getItem() instanceof IItemSerum) { + return ((IItemSerum) stack.getItem()).getSpeciesRoot(stack) == gene.getSpeciesRoot(); + } + return isGeneAcceptor(stack); + } + + public static IGene getGene(final ItemStack stack, final int chromosome) { + if (stack.getItem() instanceof IItemSerum) { + return ((IItemSerum) stack.getItem()).getGene(stack, chromosome); + } + return null; + } + + public static ItemStack addGene(final ItemStack stack, final IGene gene) { + if (stack.getItem() instanceof IItemSerum) { + ((IItemSerum) stack.getItem()).addGene(stack, gene); + } + if (stack.getItem() == Genetics.itemGenetics && stack.getItemDamage() == GeneticsItems.EmptySerum.ordinal()) { + return ItemSerum.create(gene); + } + if (stack.getItem() == Genetics.itemGenetics && stack.getItemDamage() == GeneticsItems.EmptyGenome.ordinal()) { + return ItemSerumArray.create(gene); + } + return stack; + } + + public static IGene[] getGenes(final ItemStack serum) { + if (serum.getItem() instanceof IItemSerum) { + return ((IItemSerum) serum.getItem()).getGenes(serum); + } + if (serum.getItem() == Genetics.itemSequencer) { + return new IGene[] { new SequencerItem(serum).gene }; + } + return new IGene[0]; + } + + public static int getCharges(final ItemStack serum) { + return ((IItemChargable) serum.getItem()).getCharges(serum); + } +} diff --git a/src/main/java/binnie/genetics/genetics/GeneArrayItem.java b/src/main/java/binnie/genetics/genetics/GeneArrayItem.java new file mode 100644 index 00000000..7d542b61 --- /dev/null +++ b/src/main/java/binnie/genetics/genetics/GeneArrayItem.java @@ -0,0 +1,138 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.genetics; + +import forestry.api.genetics.ISpeciesRoot; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagList; +import binnie.core.genetics.Gene; +import net.minecraft.nbt.NBTTagCompound; +import binnie.Binnie; +import binnie.core.genetics.BreedingSystem; +import binnie.core.BinnieCore; +import java.util.ArrayList; +import net.minecraft.item.ItemStack; +import binnie.genetics.api.IGene; +import java.util.List; +import forestry.api.core.INBTTagable; + +public class GeneArrayItem implements INBTTagable, IGeneItem +{ + List genes; + + public GeneArrayItem(final ItemStack stack) { + this.genes = new ArrayList(); + if (stack == null) { + return; + } + this.readFromNBT(stack.getTagCompound()); + } + + public GeneArrayItem(final IGene gene) { + this.genes = new ArrayList(); + this.addGene(gene); + } + + public GeneArrayItem() { + this.genes = new ArrayList(); + } + + @Override + public int getColour(final int renderPass) { + if (renderPass == 2) { + return this.getBreedingSystem().getColour(); + } + return 16777215; + } + + @Override + public void getInfo(final List list) { + final List totalList = new ArrayList(); + for (final IGene gene : this.genes) { + final String chromosomeName = this.getBreedingSystem().getChromosomeName(gene.getChromosome()); + totalList.add("§6" + chromosomeName + "§7: " + gene.getName()); + } + if (totalList.size() < 4 || BinnieCore.proxy.isShiftDown()) { + list.addAll(totalList); + } + else { + list.add(totalList.get(0)); + list.add(totalList.get(1)); + list.add(totalList.size() - 2 + " more genes. Hold shift to display."); + } + } + + public BreedingSystem getBreedingSystem() { + if (this.genes.size() == 0) { + return null; + } + final BreedingSystem system = Binnie.Genetics.getSystem(this.genes.get(0).getSpeciesRoot().getUID()); + return (system == null) ? Binnie.Genetics.getActiveSystems().iterator().next() : system; + } + + public List getGenes() { + return this.genes; + } + + @Override + public void readFromNBT(final NBTTagCompound nbt) { + this.genes.clear(); + if (nbt != null) { + final NBTTagList list = nbt.getTagList("genes", 10); + for (int i = 0; i < list.tagCount(); ++i) { + final Gene gene = Gene.create(list.getCompoundTagAt(i)); + this.genes.add(gene); + } + } + } + + @Override + public void writeToNBT(final NBTTagCompound nbt) { + if (this.genes.size() == 0) { + return; + } + final NBTTagList list = new NBTTagList(); + for (final IGene gene : this.genes) { + final NBTTagCompound geneNBT = gene.getNBTTagCompound(); + list.appendTag(geneNBT); + } + nbt.setTag("genes", list); + } + + @Override + public ISpeciesRoot getSpeciesRoot() { + if (this.genes.size() == 0) { + return null; + } + return this.genes.get(0).getSpeciesRoot(); + } + + public IGene getGene(final int chromosome) { + for (final IGene gene : this.genes) { + if (gene.getChromosome().ordinal() == chromosome) { + return gene; + } + } + return null; + } + + @Override + public void writeToItem(final ItemStack stack) { + if (stack == null) { + return; + } + final NBTTagCompound nbt = stack.hasTagCompound() ? stack.getTagCompound() : new NBTTagCompound(); + this.writeToNBT(nbt); + stack.setTagCompound(nbt); + } + + @Override + public void addGene(final IGene gene) { + if (this.getGene(gene.getChromosome().ordinal()) != null) { + this.genes.remove(this.getGene(gene.getChromosome().ordinal())); + } + this.genes.add(gene); + } +} diff --git a/src/main/java/binnie/genetics/genetics/GeneItem.java b/src/main/java/binnie/genetics/genetics/GeneItem.java new file mode 100644 index 00000000..0a477bc6 --- /dev/null +++ b/src/main/java/binnie/genetics/genetics/GeneItem.java @@ -0,0 +1,97 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.genetics; + +import forestry.api.genetics.ISpeciesRoot; +import net.minecraft.nbt.NBTBase; +import binnie.core.genetics.Gene; +import binnie.Binnie; +import binnie.core.genetics.BreedingSystem; +import java.util.List; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.item.ItemStack; +import binnie.genetics.api.IGene; +import forestry.api.core.INBTTagable; + +public class GeneItem implements INBTTagable, IGeneItem +{ + IGene gene; + + public GeneItem(final ItemStack stack) { + if (stack == null) { + return; + } + this.readFromNBT(stack.getTagCompound()); + } + + public GeneItem(final IGene gene) { + this.gene = gene; + } + + public boolean isCorrupted() { + return this.gene == null; + } + + @Override + public void writeToItem(final ItemStack stack) { + if (this.gene == null || stack == null) { + return; + } + final NBTTagCompound nbt = stack.hasTagCompound() ? stack.getTagCompound() : new NBTTagCompound(); + this.writeToNBT(nbt); + stack.setTagCompound(nbt); + } + + @Override + public int getColour(final int renderPass) { + if (renderPass == 2 && this.getBreedingSystem() != null) { + return this.getBreedingSystem().getColour(); + } + return 16777215; + } + + @Override + public void getInfo(final List list) { + final String chromosomeName = this.getBreedingSystem().getChromosomeName(this.gene.getChromosome()); + list.add("§6" + chromosomeName + "§7: " + this.gene.getName()); + } + + public BreedingSystem getBreedingSystem() { + if (this.gene == null) { + return null; + } + return Binnie.Genetics.getSystem(this.gene.getSpeciesRoot().getUID()); + } + + public IGene getGene() { + return this.gene; + } + + @Override + public void readFromNBT(final NBTTagCompound nbt) { + if (nbt != null) { + this.gene = Gene.create(nbt.getCompoundTag("gene")); + } + } + + @Override + public void writeToNBT(final NBTTagCompound nbt) { + if (this.gene == null) { + return; + } + final NBTTagCompound geneNBT = this.gene.getNBTTagCompound(); + nbt.setTag("gene", geneNBT); + } + + @Override + public ISpeciesRoot getSpeciesRoot() { + return this.gene.getSpeciesRoot(); + } + + @Override + public void addGene(final IGene gene) { + this.gene = gene; + } +} diff --git a/src/main/java/binnie/genetics/genetics/GeneProject.java b/src/main/java/binnie/genetics/genetics/GeneProject.java new file mode 100644 index 00000000..8b9c35d8 --- /dev/null +++ b/src/main/java/binnie/genetics/genetics/GeneProject.java @@ -0,0 +1,70 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.genetics; + +import java.util.ArrayList; +import java.util.List; +import com.mojang.authlib.GameProfile; + +public class GeneProject +{ + int id; + String name; + GameProfile leader; + List members; + + public GeneProject(final int id, final String name, final GameProfile leader) { + this.id = 0; + this.leader = null; + this.members = new ArrayList(); + this.setID(id); + this.setName(name); + this.setLeader(leader); + } + + public int getID() { + return this.id; + } + + public void setID(final int id) { + this.id = id; + } + + public String getName() { + return this.name; + } + + public void setName(final String name) { + this.name = name; + } + + public GameProfile getLeader() { + return this.leader; + } + + public void setLeader(final GameProfile leader) { + this.addPlayer(this.leader = leader); + } + + public boolean isEmpty() { + return this.members.isEmpty(); + } + + public void addPlayer(final GameProfile player) { + if (!this.members.contains(player)) { + this.members.add(player); + } + if (this.leader == null) { + this.leader = player; + } + } + + public void removePlayer(final GameProfile player) { + if (player == this.leader) { + throw new RuntimeException("Can't remove leader of a Gene Project"); + } + this.members.remove(player); + } +} diff --git a/src/main/java/binnie/genetics/genetics/GeneProjectTracker.java b/src/main/java/binnie/genetics/genetics/GeneProjectTracker.java new file mode 100644 index 00000000..fd46389c --- /dev/null +++ b/src/main/java/binnie/genetics/genetics/GeneProjectTracker.java @@ -0,0 +1,120 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.genetics; + +import java.util.LinkedHashSet; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import java.util.HashMap; +import java.util.Set; +import com.mojang.authlib.GameProfile; +import java.util.Map; +import net.minecraft.world.WorldSavedData; + +public class GeneProjectTracker extends WorldSavedData +{ + Map projects; + Map> TeamInvites; + + public GeneProjectTracker(final String s) { + super(s); + this.projects = new HashMap(); + this.TeamInvites = new HashMap>(); + } + + public static GeneProjectTracker getTracker(final World world) { + final String filename = "GeneProjectTracker.common"; + GeneProjectTracker tracker = (GeneProjectTracker) world.loadItemData(GeneProjectTracker.class, filename); + if (tracker == null) { + tracker = new GeneProjectTracker(filename); + world.setItemData(filename, tracker); + } + return tracker; + } + + @Override + public void readFromNBT(final NBTTagCompound nbt) { + } + + @Override + public void writeToNBT(final NBTTagCompound nbt) { + } + + public int createProject(final String name, final GameProfile leader) { + int i; + for (i = 1; this.projects.keySet().contains(i); ++i) { + } + final GeneProject project = new GeneProject(i, name, leader); + this.projects.put(i, project); + this.markDirty(); + return i; + } + + public void removeProject(final int id) { + this.projects.remove(id); + for (final Map.Entry> entry : this.TeamInvites.entrySet()) { + entry.getValue().remove(id); + } + this.markDirty(); + } + + public void leaveProject(final int id, final GameProfile player) { + final GeneProject project = this.projects.get(id); + if (project == null) { + return; + } + project.removePlayer(player); + if (project.isEmpty()) { + this.removeProject(id); + } + this.markDirty(); + } + + public void joinProject(final int id, final GameProfile player) { + final GeneProject project = this.projects.get(id); + if (project == null) { + return; + } + project.addPlayer(player); + this.markDirty(); + } + + public void reassignPlayer(final int id, final int id2, final GameProfile player) { + final GeneProject project = this.projects.get(id); + if (project == null) { + return; + } + final GeneProject project2 = this.projects.get(id2); + if (project2 == null) { + return; + } + this.leaveProject(id, player); + this.joinProject(id2, player); + } + + public void renameProject(final int id, final String newName) { + final GeneProject project = this.projects.get(id); + if (project != null) { + project.setName(newName); + } + this.markDirty(); + } + + public void invitePlayer(final int id, final GameProfile player) { + if (!this.TeamInvites.containsKey(player)) { + this.TeamInvites.put(player, new LinkedHashSet()); + } + this.TeamInvites.get(player).add(id); + this.markDirty(); + } + + public void revokeInvite(final int id, final GameProfile player) { + if (!this.TeamInvites.containsKey(player)) { + this.TeamInvites.put(player, new LinkedHashSet()); + } + this.TeamInvites.get(player).add(id); + this.markDirty(); + } +} diff --git a/src/main/java/binnie/genetics/genetics/GeneTracker.java b/src/main/java/binnie/genetics/genetics/GeneTracker.java new file mode 100644 index 00000000..7a92a0f5 --- /dev/null +++ b/src/main/java/binnie/genetics/genetics/GeneTracker.java @@ -0,0 +1,119 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.genetics; + +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagString; +import forestry.api.genetics.IAllele; +import net.minecraft.nbt.NBTTagList; +import forestry.api.genetics.IChromosomeType; +import binnie.core.genetics.Gene; +import forestry.api.genetics.ISpeciesRoot; +import forestry.api.genetics.AlleleManager; +import binnie.core.network.packet.MessageNBT; +import binnie.genetics.core.GeneticsPacket; +import binnie.genetics.Genetics; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraft.entity.player.EntityPlayer; +import com.mojang.authlib.GameProfile; +import binnie.genetics.api.IGene; +import java.util.ArrayList; +import net.minecraft.world.WorldSavedData; + +public class GeneTracker extends WorldSavedData +{ + private ArrayList discoveredGenes; + GameProfile username; + + public GeneTracker(final String s, final GameProfile username) { + super(s); + this.discoveredGenes = new ArrayList(); + this.username = username; + } + + public GeneTracker(final String s) { + super(s); + this.discoveredGenes = new ArrayList(); + } + + protected static GeneTracker getCommonTracker(final EntityPlayer player) { + return getTracker(player.worldObj, null); + } + + public static GeneTracker getTracker(final World world, final GameProfile player) { + final String filename = "GeneTracker." + ((player == null) ? "common" : player.getId()); + GeneTracker tracker = (GeneTracker) world.loadItemData(GeneTracker.class, filename); + if (tracker == null) { + tracker = new GeneTracker(filename, player); + world.setItemData(filename, tracker); + } + else { + tracker.username = player; + } + return tracker; + } + + public void synchToPlayer(final EntityPlayer player) { + final NBTTagCompound nbttagcompound = new NBTTagCompound(); + this.writeToNBT(nbttagcompound); + Genetics.proxy.sendToPlayer(new MessageNBT(GeneticsPacket.GeneTrackerSync.ordinal(), nbttagcompound), player); + } + + @Override + public void readFromNBT(final NBTTagCompound nbt) { + for (final ISpeciesRoot root : AlleleManager.alleleRegistry.getSpeciesRoot().values()) { + if (!nbt.hasKey(root.getUID())) { + continue; + } + final NBTTagCompound nbtRoot = nbt.getCompoundTag(root.getUID()); + for (final IChromosomeType chromo : root.getKaryotype()) { + if (nbtRoot.hasKey("" + chromo.ordinal())) { + final NBTTagList nbtChromo = nbtRoot.getTagList("" + chromo.ordinal(), 8); + for (int i = 0; i < nbtChromo.tagCount(); ++i) { + final String uid = nbtChromo.getStringTagAt(i); + final IAllele allele = AlleleManager.alleleRegistry.getAllele(uid); + final Gene gene = new Gene(allele, chromo, root); + if (allele != null && !this.discoveredGenes.contains(gene)) { + this.discoveredGenes.add(gene); + } + } + } + } + } + } + + @Override + public void writeToNBT(final NBTTagCompound nbt) { + for (final ISpeciesRoot root : AlleleManager.alleleRegistry.getSpeciesRoot().values()) { + final NBTTagCompound nbtRoot = new NBTTagCompound(); + for (final IChromosomeType chromo : root.getKaryotype()) { + final NBTTagList nbtChromo = new NBTTagList(); + for (final IGene gene : this.discoveredGenes) { + if (gene.getSpeciesRoot() == root && gene.getChromosome() == chromo) { + nbtChromo.appendTag(new NBTTagString(gene.getAllele().getUID())); + } + } + nbtRoot.setTag("" + chromo.ordinal(), nbtChromo); + } + nbt.setTag(root.getUID(), nbtRoot); + } + } + + public void registerGene(final IGene iGene) { + if (!this.discoveredGenes.contains(iGene)) { + this.discoveredGenes.add(iGene); + } + this.markDirty(); + } + + public int getGenesSequenced() { + return this.discoveredGenes.size(); + } + + public boolean isSequenced(final Gene gene) { + return this.discoveredGenes.contains(gene); + } +} diff --git a/src/main/java/binnie/genetics/genetics/GeneticEngineeringSystem.java b/src/main/java/binnie/genetics/genetics/GeneticEngineeringSystem.java new file mode 100644 index 00000000..2f39d4e5 --- /dev/null +++ b/src/main/java/binnie/genetics/genetics/GeneticEngineeringSystem.java @@ -0,0 +1,79 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.genetics; + +import forestry.api.genetics.IAlleleInteger; +import forestry.api.genetics.IAlleleFloat; +import forestry.api.genetics.ISpeciesRoot; +import java.util.Comparator; +import java.util.TreeSet; +import java.util.ArrayList; +import forestry.api.genetics.IIndividual; +import java.util.HashMap; +import forestry.api.genetics.IAllele; +import java.util.List; +import forestry.api.genetics.IChromosomeType; +import java.util.Map; +import binnie.core.genetics.BreedingSystem; + +public class GeneticEngineeringSystem +{ + BreedingSystem breedingSystem; + public Map> chromosomeMap; + static List speciesList; + + public GeneticEngineeringSystem(final BreedingSystem system) { + this.chromosomeMap = new HashMap>(); + this.breedingSystem = system; + for (final IIndividual indiv : this.breedingSystem.getSpeciesRoot().getIndividualTemplates()) { + for (final IChromosomeType chromosome : this.breedingSystem.getSpeciesRoot().getKaryotype()) { + if (!this.chromosomeMap.containsKey(chromosome)) { + this.chromosomeMap.put(chromosome, new ArrayList()); + } + try { + final IAllele a1 = indiv.getGenome().getActiveAllele(chromosome); + final IAllele a2 = indiv.getGenome().getInactiveAllele(chromosome); + if (a1 != null) { + this.chromosomeMap.get(chromosome).add(a1); + } + if (a2 != null) { + this.chromosomeMap.get(chromosome).add(a2); + } + } catch (Exception ex) { + } + } + } + for (final IChromosomeType chromosome2 : this.breedingSystem.getSpeciesRoot().getKaryotype()) { + final List alleles = this.getAlleles(chromosome2); + final TreeSet set = new TreeSet(new ComparatorAllele()); + set.addAll(alleles); + final List list = new ArrayList(); + list.addAll(set); + this.chromosomeMap.put(chromosome2, list); + } + } + + public List getAlleles(final IChromosomeType chromosome) { + return this.chromosomeMap.get(chromosome); + } + + public ISpeciesRoot getSpeciesRoot() { + return this.breedingSystem.getSpeciesRoot(); + } + + class ComparatorAllele implements Comparator + { + @Override + public int compare(final IAllele o1, final IAllele o2) { + if (o1 instanceof IAlleleFloat && o2 instanceof IAlleleFloat) { + return Float.valueOf(((IAlleleFloat) o1).getValue()).compareTo(Float.valueOf(((IAlleleFloat) o2).getValue())); + } + if (o1 instanceof IAlleleInteger && o2 instanceof IAlleleInteger) { + return Integer.valueOf(((IAlleleInteger) o1).getValue()).compareTo(Integer.valueOf(((IAlleleInteger) o2).getValue())); + } + return o1.getUID().compareTo(o2.getUID()); + } + } +} diff --git a/src/main/java/binnie/genetics/genetics/IGeneItem.java b/src/main/java/binnie/genetics/genetics/IGeneItem.java new file mode 100644 index 00000000..78830793 --- /dev/null +++ b/src/main/java/binnie/genetics/genetics/IGeneItem.java @@ -0,0 +1,23 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.genetics; + +import binnie.genetics.api.IGene; +import net.minecraft.item.ItemStack; +import java.util.List; +import forestry.api.genetics.ISpeciesRoot; + +public interface IGeneItem +{ + ISpeciesRoot getSpeciesRoot(); + + void getInfo(final List p0); + + int getColour(final int p0); + + void writeToItem(final ItemStack p0); + + void addGene(final IGene p0); +} diff --git a/src/main/java/binnie/genetics/genetics/SequencerItem.java b/src/main/java/binnie/genetics/genetics/SequencerItem.java new file mode 100644 index 00000000..3e344ccc --- /dev/null +++ b/src/main/java/binnie/genetics/genetics/SequencerItem.java @@ -0,0 +1,39 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.genetics; + +import net.minecraft.nbt.NBTTagCompound; +import binnie.genetics.api.IGene; +import net.minecraft.item.ItemStack; + +public class SequencerItem extends GeneItem +{ + public int sequenced; + public boolean analysed; + + public SequencerItem(final ItemStack stack) { + super(stack); + } + + public SequencerItem(final IGene gene) { + super(gene); + this.sequenced = 0; + this.analysed = false; + } + + @Override + public void readFromNBT(final NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.sequenced = nbt.getByte("seq"); + this.analysed = nbt.getBoolean("ana"); + } + + @Override + public void writeToNBT(final NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setByte("seq", (byte) this.sequenced); + nbt.setBoolean("ana", this.analysed); + } +} diff --git a/src/main/java/binnie/genetics/gui/AnalystPageAppearance.java b/src/main/java/binnie/genetics/gui/AnalystPageAppearance.java new file mode 100644 index 00000000..4761a506 --- /dev/null +++ b/src/main/java/binnie/genetics/gui/AnalystPageAppearance.java @@ -0,0 +1,71 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import forestry.api.genetics.IAlleleSpecies; +import binnie.botany.api.EnumFlowerStage; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import org.lwjgl.opengl.GL11; +import binnie.craftgui.minecraft.control.ControlIconDisplay; +import binnie.craftgui.botany.ControlColourDisplay; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.botany.api.IFlower; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.IWidget; + +public class AnalystPageAppearance extends ControlAnalystPage +{ + public AnalystPageAppearance(final IWidget parent, final IArea area, final IFlower ind) { + super(parent, area); + this.setColour(3355443); + int y = 4; + final IAlleleSpecies species = ind.getGenome().getPrimary(); + new ControlTextCentered(this, y, "§nAppearance").setColour(this.getColour()); + y += 12; + final ControlColourDisplay a = new ControlColourDisplay(this, this.w() / 2.0f - 28.0f, y); + a.setValue(ind.getGenome().getPrimaryColor()); + a.addTooltip("Primary Petal Colour"); + final ControlColourDisplay b = new ControlColourDisplay(this, this.w() / 2.0f - 8.0f, y); + b.setValue(ind.getGenome().getSecondaryColor()); + b.addTooltip("Secondary Petal Colour"); + final ControlColourDisplay c = new ControlColourDisplay(this, this.w() / 2.0f + 12.0f, y); + c.setValue(ind.getGenome().getStemColor()); + c.addTooltip("Stem Colour"); + y += 26; + final int sections = ind.getGenome().getType().getSections(); + final int w = (sections > 1) ? 50 : 100; + new ControlIconDisplay(this, (this.w() - w) / 2.0f, y - ((sections == 1) ? 0 : 0), null) { + @Override + public void onRenderForeground() { + GL11.glPushMatrix(); + final float scale = w / 16.0f; + final float dy = (sections > 1) ? 16.0f : 0.0f; + GL11.glScalef(scale, scale, 1.0f); + CraftGUI.Render.colour(ind.getGenome().getStemColor().getColor(false)); + if (sections > 1) { + CraftGUI.Render.iconBlock(new IPoint(0.0f, 0.0f), ind.getGenome().getType().getStem(EnumFlowerStage.FLOWER, true, 1)); + } + CraftGUI.Render.iconBlock(new IPoint(0.0f, dy), ind.getGenome().getType().getStem(EnumFlowerStage.FLOWER, true, 0)); + CraftGUI.Render.colour(ind.getGenome().getPrimaryColor().getColor(false)); + if (sections > 1) { + CraftGUI.Render.iconBlock(new IPoint(0.0f, 0.0f), ind.getGenome().getType().getPetalIcon(EnumFlowerStage.FLOWER, true, 1)); + } + CraftGUI.Render.iconBlock(new IPoint(0.0f, dy), ind.getGenome().getType().getPetalIcon(EnumFlowerStage.FLOWER, true, 0)); + CraftGUI.Render.colour(ind.getGenome().getSecondaryColor().getColor(false)); + if (sections > 1) { + CraftGUI.Render.iconBlock(new IPoint(0.0f, 0.0f), ind.getGenome().getType().getVariantIcon(EnumFlowerStage.FLOWER, true, 1)); + } + CraftGUI.Render.iconBlock(new IPoint(0.0f, dy), ind.getGenome().getType().getVariantIcon(EnumFlowerStage.FLOWER, true, 0)); + GL11.glPopMatrix(); + } + }; + } + + @Override + public String getTitle() { + return "Appearance"; + } +} diff --git a/src/main/java/binnie/genetics/gui/AnalystPageBehaviour.java b/src/main/java/binnie/genetics/gui/AnalystPageBehaviour.java new file mode 100644 index 00000000..8fc54f70 --- /dev/null +++ b/src/main/java/binnie/genetics/gui/AnalystPageBehaviour.java @@ -0,0 +1,76 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import forestry.api.lepidopterology.IAlleleButterflyEffect; +import forestry.api.apiculture.IAlleleBeeEffect; +import forestry.api.genetics.IChromosomeType; +import forestry.api.lepidopterology.EnumButterflyChromosome; +import binnie.Binnie; +import forestry.api.lepidopterology.IButterfly; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.core.BinnieCore; +import forestry.plugins.PluginApiculture; +import forestry.api.apiculture.IBee; +import binnie.craftgui.controls.ControlTextCentered; +import forestry.api.genetics.IIndividual; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.IWidget; + +public class AnalystPageBehaviour extends ControlAnalystPage +{ + public AnalystPageBehaviour(final IWidget parent, final IArea area, final IIndividual ind) { + super(parent, area); + this.setColour(6684723); + int y = 4; + new ControlTextCentered(this, y, "§nBehaviour").setColour(this.getColour()); + y += 12; + if (ind instanceof IBee) { + final IBee bee = (IBee) ind; + y += 8; + final int fertility = bee.getGenome().getFlowering(); + new ControlTextCentered(this, y, "Pollinates nearby\n" + bee.getGenome().getFlowerProvider().getDescription()).setColour(this.getColour()); + y += 20; + new ControlTextCentered(this, y, "§oEvery " + this.getTimeString(PluginApiculture.ticksPerBeeWorkCycle * 100.0f / fertility)).setColour(this.getColour()); + y += 22; + final IAlleleBeeEffect effect = bee.getGenome().getEffect(); + final int[] t = bee.getGenome().getTerritory(); + if (!effect.getUID().contains("None")) { + final String effectDesc = BinnieCore.proxy.localiseOrBlank("allele." + effect.getUID() + ".desc"); + final String loc = effectDesc.equals("") ? ("Effect: " + effect.getName()) : effectDesc; + new ControlText(this, new IArea(4.0f, y, this.w() - 8.0f, 0.0f), loc, TextJustification.TopCenter).setColour(this.getColour()); + y += (int) (CraftGUI.Render.textHeight(loc, this.w() - 8.0f) + 1.0f); + new ControlTextCentered(this, y, "§oWithin " + (int) (t[0] / 2.0f) + " blocks").setColour(this.getColour()); + y += 22; + } + new ControlTextCentered(this, y, "Territory: §o" + t[0] + "x" + t[1] + "x" + t[2]).setColour(this.getColour()); + y += 22; + } + if (ind instanceof IButterfly) { + final IButterfly bee2 = (IButterfly) ind; + new ControlTextCentered(this, y, "§oMetabolism: " + Binnie.Genetics.mothBreedingSystem.getAlleleName(EnumButterflyChromosome.METABOLISM, ind.getGenome().getActiveAllele(EnumButterflyChromosome.METABOLISM))).setColour(this.getColour()); + y += 20; + new ControlTextCentered(this, y, "Pollinates nearby\n" + bee2.getGenome().getFlowerProvider().getDescription()).setColour(this.getColour()); + y += 20; + new ControlTextCentered(this, y, "§oEvery " + this.getTimeString(1500.0f)).setColour(this.getColour()); + y += 22; + final IAlleleButterflyEffect effect2 = bee2.getGenome().getEffect(); + if (!effect2.getUID().contains("None")) { + final String effectDesc2 = BinnieCore.proxy.localiseOrBlank("allele." + effect2.getUID() + ".desc"); + final String loc2 = effectDesc2.equals("") ? ("Effect: " + effect2.getName()) : effectDesc2; + new ControlText(this, new IArea(4.0f, y, this.w() - 8.0f, 0.0f), loc2, TextJustification.TopCenter).setColour(this.getColour()); + y += (int) (CraftGUI.Render.textHeight(loc2, this.w() - 8.0f) + 1.0f); + y += 22; + } + } + } + + @Override + public String getTitle() { + return "Behaviour"; + } +} diff --git a/src/main/java/binnie/genetics/gui/AnalystPageBiology.java b/src/main/java/binnie/genetics/gui/AnalystPageBiology.java new file mode 100644 index 00000000..641567ae --- /dev/null +++ b/src/main/java/binnie/genetics/gui/AnalystPageBiology.java @@ -0,0 +1,181 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import java.text.DecimalFormat; +import binnie.craftgui.core.geometry.IPoint; +import binnie.botany.api.IFlower; +import net.minecraftforge.common.EnumPlantType; +import forestry.plugins.PluginApiculture; +import forestry.api.genetics.IChromosomeType; +import forestry.api.arboriculture.EnumTreeChromosome; +import binnie.Binnie; +import forestry.api.arboriculture.ITree; +import forestry.api.lepidopterology.IButterfly; +import binnie.craftgui.minecraft.control.ControlIconDisplay; +import binnie.genetics.item.ModuleItem; +import forestry.api.apiculture.IBee; +import binnie.craftgui.controls.ControlTextCentered; +import forestry.api.genetics.IIndividual; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.IWidget; + +public class AnalystPageBiology extends ControlAnalystPage +{ + public AnalystPageBiology(final IWidget parent, final IArea area, final IIndividual ind) { + super(parent, area); + this.setColour(26214); + int y = 4; + new ControlTextCentered(this, y, "§nBiology").setColour(this.getColour()); + y += 12; + if (ind instanceof IBee) { + final IBee bee = (IBee) ind; + if (bee.getGenome().getNocturnal()) { + new ControlIconDisplay(this, (this.w() - 64.0f) / 2.0f, y, ModuleItem.iconAllDay.getIcon()).addTooltip("Active all day and night"); + } + else if (bee.getGenome().getPrimary().isNocturnal()) { + new ControlIconDisplay(this, (this.w() - 64.0f) / 2.0f, y, ModuleItem.iconNight.getIcon()).addTooltip("Active at night"); + } + else { + new ControlIconDisplay(this, (this.w() - 64.0f) / 2.0f, y, ModuleItem.iconDaytime.getIcon()).addTooltip("Active during the day"); + } + if (!bee.getGenome().getTolerantFlyer()) { + new ControlIconDisplay(this, (this.w() - 64.0f) / 2.0f + 24.0f, y, ModuleItem.iconNoRain.getIcon()).addTooltip("Cannot work during rain"); + } + else { + new ControlIconDisplay(this, (this.w() - 64.0f) / 2.0f + 24.0f, y, ModuleItem.iconRain.getIcon()).addTooltip("Can work during rain"); + } + if (bee.getGenome().getCaveDwelling()) { + new ControlIconDisplay(this, (this.w() - 64.0f) / 2.0f + 48.0f, y, ModuleItem.iconNoSky.getIcon()).addTooltip("Can work underground"); + } + else { + new ControlIconDisplay(this, (this.w() - 64.0f) / 2.0f + 48.0f, y, ModuleItem.iconSky.getIcon()).addTooltip("Cannot work underground"); + } + y += 30; + } + else if (ind instanceof IButterfly) { + final IButterfly moth = (IButterfly) ind; + if (moth.getGenome().getNocturnal()) { + new ControlIconDisplay(this, (this.w() - 64.0f) / 2.0f, y, ModuleItem.iconAllDay.getIcon()).addTooltip("Active all day and night"); + } + else if (moth.getGenome().getPrimary().isNocturnal()) { + new ControlIconDisplay(this, (this.w() - 64.0f) / 2.0f, y, ModuleItem.iconNight.getIcon()).addTooltip("Active at night"); + } + else { + new ControlIconDisplay(this, (this.w() - 64.0f) / 2.0f, y, ModuleItem.iconDaytime.getIcon()).addTooltip("Active during the day"); + } + if (!moth.getGenome().getTolerantFlyer()) { + new ControlIconDisplay(this, (this.w() - 64.0f) / 2.0f + 24.0f, y, ModuleItem.iconNoRain.getIcon()).addTooltip("Cannot work during rain"); + } + else { + new ControlIconDisplay(this, (this.w() - 64.0f) / 2.0f + 24.0f, y, ModuleItem.iconRain.getIcon()).addTooltip("Can work during rain"); + } + if (moth.getGenome().getFireResist()) { + new ControlIconDisplay(this, (this.w() - 64.0f) / 2.0f + 48.0f, y, ModuleItem.iconNoFire.getIcon()).addTooltip("Nonflammable"); + } + else { + new ControlIconDisplay(this, (this.w() - 64.0f) / 2.0f + 48.0f, y, ModuleItem.iconFire.getIcon()).addTooltip("Flammable"); + } + y += 30; + } + else if (ind instanceof ITree) { + new ControlTextCentered(this, y, "§oSappiness: " + Binnie.Genetics.treeBreedingSystem.getAlleleName(EnumTreeChromosome.SAPPINESS, ind.getGenome().getActiveAllele(EnumTreeChromosome.SAPPINESS))).setColour(this.getColour()); + y += 20; + } + else { + y += 10; + } + if (ind instanceof IBee) { + final IBee bee = (IBee) ind; + final int fertility = bee.getGenome().getFertility(); + new ControlTextCentered(this, y, "§l" + fertility + "§r drone" + ((fertility > 1) ? "s" : "") + " per hive").setColour(this.getColour()); + y += 22; + final int lifespan = bee.getGenome().getLifespan() * PluginApiculture.ticksPerBeeWorkCycle; + new ControlTextCentered(this, y, "Average Lifespan").setColour(this.getColour()); + y += 12; + new ControlTextCentered(this, y, "§l" + this.getMCDayString(lifespan * (bee.getGenome().getNocturnal() ? 1.0f : 2.0f))).setColour(this.getColour()); + y += 22; + } + if (ind instanceof IButterfly) { + final IButterfly bee2 = (IButterfly) ind; + final int fertility = bee2.getGenome().getFertility(); + new ControlTextCentered(this, y, "Lays §l" + fertility + "§r caterpillar" + ((fertility > 1) ? "s" : "") + " before dying").setColour(this.getColour()); + y += 32; + final float caterpillarMatureTime = 1365.3999f * Math.round(bee2.getGenome().getLifespan() / (bee2.getGenome().getFertility() * 2)); + new ControlTextCentered(this, y, "Caterpillar Gestation").setColour(this.getColour()); + y += 12; + new ControlTextCentered(this, y, "§l" + this.getMCDayString(caterpillarMatureTime)).setColour(this.getColour()); + y += 22; + final int speed = (int) (20.0f * bee2.getGenome().getSpeed()); + new ControlTextCentered(this, y, "Flight Speed").setColour(this.getColour()); + y += 12; + new ControlTextCentered(this, y, "§l" + speed + "§r blocks per second").setColour(this.getColour()); + y += 22; + } + if (ind instanceof ITree) { + final ITree tree = (ITree) ind; + final int fertility = (int) (1.0f / tree.getGenome().getFertility()); + new ControlTextCentered(this, y, "1 Sapling per §l" + fertility + "§r leave" + ((fertility > 1) ? "s" : "")).setColour(this.getColour()); + y += 22; + final float butterflySpawn = 1365.3999f / (tree.getGenome().getSappiness() * tree.getGenome().getYield() * 0.5f); + new ControlTextCentered(this, y, "Butterfies spawn every\n" + this.getTimeString(butterflySpawn) + " per leaf").setColour(this.getColour()); + y += 34; + new ControlTextCentered(this, y, "Plant Types").setColour(this.getColour()); + y += 12; + for (final EnumPlantType type : tree.getGenome().getPlantTypes()) { + new ControlTextCentered(this, y, "§o" + type.name()).setColour(this.getColour()); + y += 12; + } + } + if (ind instanceof IFlower) { + final IFlower flower = (IFlower) ind; + final float butterflySpawn2 = 1365.3999f / (flower.getGenome().getSappiness() * 0.2f); + new ControlTextCentered(this, y, "Butterfies spawn every\n" + this.getTimeString(butterflySpawn2)).setColour(this.getColour()); + y += 30; + float CHANCE_DISPERSAL = 0.8f; + CHANCE_DISPERSAL += 0.2f * flower.getGenome().getFertility(); + float CHANCE_POLLINATE = 0.6f; + CHANCE_POLLINATE += 0.25f * flower.getGenome().getFertility(); + final float CHANCE_SELFPOLLINATE = 0.2f * CHANCE_POLLINATE; + if (CHANCE_DISPERSAL > 1.0f) { + CHANCE_DISPERSAL = 1.0f; + } + if (CHANCE_POLLINATE > 1.0f) { + CHANCE_POLLINATE = 1.0f; + } + final float dispersalTime = 1365.3999f / CHANCE_DISPERSAL; + final float pollinateTime = 1365.3999f / CHANCE_POLLINATE; + final float lifespan2 = flower.getMaxAge() * 20.0f * 68.27f / flower.getGenome().getAgeChance(); + float floweringLifespan = (flower.getMaxAge() - 1) * 20.0f * 68.27f / flower.getGenome().getAgeChance(); + floweringLifespan -= 1365.3999f; + new ControlTextCentered(this, y, "Average Lifespan").setColour(this.getColour()); + y += 12; + new ControlTextCentered(this, y, "§l" + this.getMCDayString(lifespan2)).setColour(this.getColour()); + y += 22; + new ControlTextCentered(this, y, "Seed Dispersal").setColour(this.getColour()); + y += 12; + new ControlTextCentered(this, y, "§o" + (int) (floweringLifespan / dispersalTime) + " per lifetime").setColour(this.getColour()); + y += 22; + new ControlTextCentered(this, y, "Pollination").setColour(this.getColour()); + y += 12; + new ControlTextCentered(this, y, "§o" + (int) (floweringLifespan / pollinateTime) + " per lifetime").setColour(this.getColour()); + y += 22; + } + this.setSize(new IPoint(this.w(), y)); + } + + private String getMCDayString(final float time) { + final float seconds = time / 20.0f; + final float minutes = seconds / 60.0f; + final float days = minutes / 20.0f; + final DecimalFormat df = new DecimalFormat("#.0"); + return df.format(days) + " MC days"; + } + + @Override + public String getTitle() { + return "Biology"; + } +} diff --git a/src/main/java/binnie/genetics/gui/AnalystPageClimate.java b/src/main/java/binnie/genetics/gui/AnalystPageClimate.java new file mode 100644 index 00000000..e9cc4682 --- /dev/null +++ b/src/main/java/binnie/genetics/gui/AnalystPageClimate.java @@ -0,0 +1,136 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import java.util.List; +import binnie.craftgui.core.geometry.IPoint; +import forestry.api.core.EnumHumidity; +import binnie.core.genetics.Tolerance; +import forestry.api.core.EnumTemperature; +import net.minecraftforge.common.BiomeDictionary; +import net.minecraft.world.biome.BiomeGenBase; +import java.util.ArrayList; +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.controls.ControlTextCentered; +import forestry.api.lepidopterology.EnumButterflyChromosome; +import forestry.api.lepidopterology.IButterfly; +import binnie.botany.api.EnumFlowerChromosome; +import binnie.botany.api.IFlower; +import forestry.api.genetics.IChromosomeType; +import forestry.api.apiculture.EnumBeeChromosome; +import forestry.api.genetics.IAlleleTolerance; +import forestry.api.apiculture.IBee; +import forestry.api.genetics.EnumTolerance; +import forestry.api.genetics.IIndividual; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.IWidget; + +public class AnalystPageClimate extends ControlAnalystPage +{ + public AnalystPageClimate(final IWidget parent, final IArea area, final IIndividual ind) { + super(parent, area); + this.setColour(26163); + final EnumTemperature temp = ind.getGenome().getPrimary().getTemperature(); + EnumTolerance tempTol = EnumTolerance.NONE; + final EnumHumidity humid = ind.getGenome().getPrimary().getHumidity(); + EnumTolerance humidTol = EnumTolerance.NONE; + if (ind instanceof IBee) { + tempTol = ((IAlleleTolerance) ind.getGenome().getActiveAllele(EnumBeeChromosome.TEMPERATURE_TOLERANCE)).getValue(); + humidTol = ((IAlleleTolerance) ind.getGenome().getActiveAllele(EnumBeeChromosome.HUMIDITY_TOLERANCE)).getValue(); + } + if (ind instanceof IFlower) { + tempTol = ((IAlleleTolerance) ind.getGenome().getActiveAllele(EnumFlowerChromosome.TEMPERATURE_TOLERANCE)).getValue(); + humidTol = EnumTolerance.BOTH_5; + } + if (ind instanceof IButterfly) { + tempTol = ((IAlleleTolerance) ind.getGenome().getActiveAllele(EnumButterflyChromosome.TEMPERATURE_TOLERANCE)).getValue(); + humidTol = ((IAlleleTolerance) ind.getGenome().getActiveAllele(EnumButterflyChromosome.HUMIDITY_TOLERANCE)).getValue(); + } + int y = 4; + new ControlTextCentered(this, y, "§nClimate").setColour(this.getColour()); + y += 16; + new ControlText(this, new IArea(4.0f, y, this.w() - 8.0f, 14.0f), "Temp. Tolerance", TextJustification.MiddleCenter).setColour(this.getColour()); + y += 12; + this.createTemperatureBar(this, (this.w() - 100.0f) / 2.0f, y, 100.0f, 10.0f, temp, tempTol); + y += 16; + if (!(ind instanceof IFlower)) { + new ControlText(this, new IArea(4.0f, y, this.w() - 8.0f, 14.0f), "Humidity Tolerance", TextJustification.MiddleCenter).setColour(this.getColour()); + y += 12; + this.createHumidity(this, (this.w() - 100.0f) / 2.0f, y, 100.0f, 10.0f, humid, humidTol); + y += 16; + } + new ControlText(this, new IArea(4.0f, y, this.w() - 8.0f, 14.0f), "Biomes", TextJustification.MiddleCenter).setColour(this.getColour()); + y += 12; + final List biomes = new ArrayList(); + for (final BiomeGenBase biome : BiomeGenBase.getBiomeGenArray()) { + if (biome != null) { + if (BiomeDictionary.isBiomeRegistered(biome)) { + if (biome != BiomeGenBase.frozenOcean) { + if (Tolerance.canTolerate(temp, EnumTemperature.getFromBiome(biome), tempTol)) { + if (Tolerance.canTolerate(humid, EnumHumidity.getFromValue(biome.rainfall), humidTol)) { + boolean match = false; + for (final BiomeGenBase eBiome : biomes) { + if (biome.biomeName.contains(eBiome.biomeName) && EnumHumidity.getFromValue(eBiome.rainfall) == EnumHumidity.getFromValue(biome.rainfall) && EnumTemperature.getFromBiome(eBiome) == EnumTemperature.getFromBiome(biome)) { + match = true; + } + } + if (!match) { + biomes.add(biome); + } + } + } + } + } + } + } + final int maxBiomePerLine = (int) ((this.w() + 2.0f - 16.0f) / 18.0f); + final float biomeListX = (this.w() - (Math.min(maxBiomePerLine, biomes.size()) * 18 - 2)) / 2.0f; + int dx = 0; + int dy = 0; + for (final BiomeGenBase biome2 : biomes) { + new ControlBiome(this, biomeListX + dx, y + dy, 16.0f, 16.0f, biome2); + dx += 18; + if (dx >= 18 * maxBiomePerLine) { + dx = 0; + dy += 18; + } + } + this.setSize(new IPoint(this.w(), y + dy + 18 + 8)); + } + + protected void createTemperatureBar(final IWidget parent, final float x, final float y, final float w, final float h, final EnumTemperature value, final EnumTolerance tol) { + new ControlToleranceBar(parent, x, y, w, h, EnumTemperature.class) { + @Override + protected String getName(final EnumTemperature value) { + return value.name; + } + + @Override + protected int getColour(final EnumTemperature value) { + return (new int[] { 65531, 7912447, 5242672, 16776960, 16753152, 16711680 })[value.ordinal() - 1]; + } + }.setValues(value, tol); + } + + protected void createHumidity(final IWidget parent, final float x, final float y, final float w, final float h, final EnumHumidity value, final EnumTolerance tol) { + new ControlToleranceBar(parent, x, y, w, h, EnumHumidity.class) { + @Override + protected String getName(final EnumHumidity value) { + return value.name; + } + + @Override + protected int getColour(final EnumHumidity value) { + return (new int[] { 16770979, 1769216, 3177727 })[value.ordinal()]; + } + }.setValues(value, tol); + } + + @Override + public String getTitle() { + return "Climate"; + } +} diff --git a/src/main/java/binnie/genetics/gui/AnalystPageDatabase.java b/src/main/java/binnie/genetics/gui/AnalystPageDatabase.java new file mode 100644 index 00000000..44b146dd --- /dev/null +++ b/src/main/java/binnie/genetics/gui/AnalystPageDatabase.java @@ -0,0 +1,187 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.events.EventMouse; +import forestry.api.genetics.IIndividual; +import binnie.craftgui.controls.scroll.ControlScrollBar; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.controls.core.Control; +import binnie.craftgui.controls.listbox.ControlListBox; +import forestry.api.genetics.IChromosomeType; +import forestry.api.arboriculture.EnumTreeChromosome; +import binnie.craftgui.window.Panel; +import binnie.craftgui.minecraft.MinecraftGUI; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.CraftGUI; +import java.util.Collection; +import forestry.api.genetics.IAlleleSpecies; +import java.util.ArrayList; +import binnie.craftgui.controls.ControlTextEdit; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.core.genetics.BreedingSystem; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.scroll.ControlScrollableContent; + +public class AnalystPageDatabase extends ControlAnalystPage +{ + ControlScrollableContent scroll; + boolean isMaster; + + public AnalystPageDatabase(final IWidget parent, final IArea area, final BreedingSystem system, final boolean isMaster) { + super(parent, area); + this.scroll = null; + this.isMaster = isMaster; + final int cOfSystem = system.getColour(); + final int cr = (0xFF0000 & cOfSystem) >> 16; + final int cg = (0xFF00 & cOfSystem) >> 8; + final int cb = 0xFF & cOfSystem; + float brightness = 0.1f * cb / 255.0f + 0.35f * cr / 255.0f + 0.55f * cg / 255.0f; + brightness = 0.3f / brightness; + if (brightness > 1.0f) { + brightness = 1.0f; + } + final int newColour = (int) (cr * brightness) * 65536 + (int) (cg * brightness) * 256 + (int) (cb * brightness); + this.setColour(newColour); + int y = 4; + new ControlTextCentered(this, y, "§nRegistry").setColour(this.getColour()); + y += 16; + new ControlTextEdit(this, 20.0f, y, this.w() - 40.0f, 16.0f) { + @Override + public void onTextEdit(final String value) { + final Collection options = new ArrayList(); + AnalystPageDatabase.this.getSpecies(system); + for (final IAlleleSpecies species : AnalystPageDatabase.this.getSpecies(system)) { + if (value != null) { + if (value != "") { + if (!species.getName().toLowerCase().contains(value.toLowerCase())) { + continue; + } + } + } + options.add(species); + } + AnalystPageDatabase.this.scroll.deleteAllChildren(); + AnalystPageDatabase.this.scroll.setScrollableContent(AnalystPageDatabase.this.getItemScrollList(system, options)); + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.colour(5592405); + CraftGUI.Render.texture(CraftGUITexture.TabSolid, this.getArea().inset(1)); + CraftGUI.Render.colour(AnalystPageDatabase.this.getColour()); + CraftGUI.Render.texture(CraftGUITexture.TabOutline, this.getArea()); + super.renderTextField(); + } + }; + y += 22; + new Panel(this, 3.0f, y - 1, this.w() - 6.0f, this.h() - y - 8.0f + 2.0f, MinecraftGUI.PanelType.TabOutline).setColour(this.getColour()); + final boolean textView = false; + final Collection options = this.getSpecies(system); + for (final IAlleleSpecies species : options) { + final String height = system.getAlleleName(EnumTreeChromosome.HEIGHT, system.getIndividual(species.getUID()).getGenome().getActiveAllele(EnumTreeChromosome.HEIGHT)); + final String fertility = system.getAlleleName(EnumTreeChromosome.FERTILITY, system.getIndividual(species.getUID()).getGenome().getActiveAllele(EnumTreeChromosome.FERTILITY)); + final String yield = system.getAlleleName(EnumTreeChromosome.YIELD, system.getIndividual(species.getUID()).getGenome().getActiveAllele(EnumTreeChromosome.YIELD)); + final String sappiness = system.getAlleleName(EnumTreeChromosome.SAPPINESS, system.getIndividual(species.getUID()).getGenome().getActiveAllele(EnumTreeChromosome.SAPPINESS)); + final String maturation = system.getAlleleName(EnumTreeChromosome.MATURATION, system.getIndividual(species.getUID()).getGenome().getActiveAllele(EnumTreeChromosome.MATURATION)); + } + if (textView) { + this.scroll = new ControlListBox(this, 4.0f, y, this.w() - 8.0f, this.h() - y - 8.0f - 20.0f, 0.0f) { + @Override + public void initialise() { + super.initialise(); + this.setOptions(options); + } + + @Override + public IWidget createOption(final IAlleleSpecies v, final int y) { + return new Control(this.getContent(), 0.0f, y, this.w(), 12.0f) { + IAlleleSpecies value = v; + + @Override + public void onRenderBackground() { + CraftGUI.Render.text(this.getArea(), TextJustification.MiddleCenter, this.value.getName(), 16777215); + } + }; + } + }; + } + else { + (this.scroll = new ControlScrollableContent(this, 4.0f, y, this.w() - 8.0f, this.h() - y - 8.0f, 0.0f)).setScrollableContent(this.getItemScrollList(system, options)); + } + new ControlScrollBar(this, this.scroll.x() + this.scroll.w() - 6.0f, this.scroll.y() + 3.0f, 3.0f, this.scroll.h() - 6.0f, this.scroll) { + @Override + public void onRenderBackground() { + if (!this.isEnabled()) { + return; + } + CraftGUI.Render.gradientRect(this.getArea(), 1140850688 + AnalystPageDatabase.this.getColour(), 1140850688 + AnalystPageDatabase.this.getColour()); + CraftGUI.Render.solid(this.getRenderArea(), AnalystPageDatabase.this.getColour()); + } + }; + } + + private IWidget getItemScrollList(final BreedingSystem system, final Collection options) { + return new Control(this.scroll, 0.0f, 0.0f, this.scroll.w(), this.scroll.h()) { + @Override + public void initialise() { + final int maxBiomePerLine = (int) ((this.w() - 4.0f + 2.0f) / 18.0f); + final float biomeListX = -6.0f + (this.w() - (maxBiomePerLine * 18 - 2)) / 2.0f; + int dx = 0; + int dy = 0; + for (final IAlleleSpecies species : options) { + final IIndividual ind = system.getSpeciesRoot().templateAsIndividual(system.getSpeciesRoot().getTemplate(species.getUID())); + new ControlIndividualDisplay(this, biomeListX + dx, 2 + dy, ind) { + @Override + public void initialise() { + this.addSelfEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + final WindowAnalyst window = (WindowAnalyst) AnalystPageDatabase.this.getSuperParent(); + window.setIndividual(ind); + } + }); + } + + @Override + public void onRenderBackground() { + final WindowAnalyst window = (WindowAnalyst) AnalystPageDatabase.this.getSuperParent(); + if (window.getIndividual() != null && window.getIndividual().getGenome().getPrimary() == species) { + CraftGUI.Render.colour(15658734); + CraftGUI.Render.texture(CraftGUITexture.TabSolid, this.getArea().outset(1)); + CraftGUI.Render.colour(AnalystPageDatabase.this.getColour()); + CraftGUI.Render.texture(CraftGUITexture.TabOutline, this.getArea().outset(1)); + } + else if (this.calculateIsMouseOver()) { + CraftGUI.Render.colour(15658734); + CraftGUI.Render.texture(CraftGUITexture.TabSolid, this.getArea().outset(1)); + } + super.onRenderBackground(); + } + }; + dx += 18; + if (dx >= 18 * maxBiomePerLine) { + dx = 0; + dy += 18; + } + } + this.setSize(new IPoint(this.w(), 4 + dy + 18)); + } + }; + } + + @Override + public String getTitle() { + return "Registry"; + } + + private Collection getSpecies(final BreedingSystem system) { + final Collection species = new ArrayList(); + species.addAll(this.isMaster ? system.getAllSpecies() : system.getDiscoveredSpecies(this.getWindow().getWorld(), this.getWindow().getPlayer().getGameProfile())); + return species; + } +} diff --git a/src/main/java/binnie/genetics/gui/AnalystPageDescription.java b/src/main/java/binnie/genetics/gui/AnalystPageDescription.java new file mode 100644 index 00000000..fd74ee30 --- /dev/null +++ b/src/main/java/binnie/genetics/gui/AnalystPageDescription.java @@ -0,0 +1,75 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import forestry.api.genetics.IAlleleSpecies; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.controls.ControlTextCentered; +import forestry.api.genetics.IIndividual; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.IWidget; + +public class AnalystPageDescription extends ControlAnalystPage +{ + public AnalystPageDescription(final IWidget parent, final IArea area, final IIndividual ind) { + super(parent, area); + this.setColour(3355443); + int y = 4; + final IAlleleSpecies species = ind.getGenome().getPrimary(); + final String branchBinomial = (species.getBranch() != null) ? species.getBranch().getScientific() : ""; + final String branchName = (species.getBranch() != null) ? species.getBranch().getName() : "Unknown"; + final String desc = species.getDescription(); + String descBody = "§o"; + String descSig = ""; + if (desc == null || desc == "" || desc.contains("for.description")) { + descBody += ""; + } + else { + final String[] descStrings = desc.split("\\|"); + descBody += descStrings[0]; + for (int i = 1; i < descStrings.length - 1; ++i) { + descBody = descBody + " " + descStrings[i]; + } + if (descStrings.length > 1) { + descSig += descStrings[descStrings.length - 1]; + } + } + String authority = species.getAuthority(); + if (authority.contains("Binnie")) { + authority = "§1§l" + authority; + } + if (authority.contains("Sengir")) { + authority = "§2§l" + authority; + } + if (authority.contains("MysteriousAges")) { + authority = "§5§l" + authority; + } + new ControlTextCentered(this, y, "§nDescription").setColour(this.getColour()); + y += 16; + new ControlTextCentered(this, y, species.getName() + "§r").setColour(this.getColour()); + y += 10; + new ControlTextCentered(this, y, "§o" + branchBinomial + " " + species.getBinomial() + "§r").setColour(this.getColour()); + y += 20; + new ControlTextCentered(this, y, "Discovered by §l" + authority + "§r").setColour(this.getColour()); + y += (int) (3.0f + CraftGUI.Render.textHeight("Discovered by §l" + authority + "§r", this.w())); + new ControlTextCentered(this, y, "Genetic Complexity: " + species.getComplexity()).setColour(this.getColour()); + y += 26; + final ControlText descText = new ControlText(this, new IArea(8.0f, y, this.w() - 16.0f, 0.0f), descBody + "§r", TextJustification.TopCenter); + final IWidget signatureText = new ControlText(this, new IArea(8.0f, y, this.w() - 16.0f, 0.0f), descSig + "§r", TextJustification.BottomRight); + descText.setColour(this.getColour()); + signatureText.setColour(this.getColour()); + final float descHeight = CraftGUI.Render.textHeight(descText.getValue(), descText.getSize().x()); + signatureText.setPosition(new IPoint(signatureText.pos().x(), descText.getPosition().y() + descHeight + 10.0f)); + this.setSize(new IPoint(this.w(), 20.0f + signatureText.y())); + } + + @Override + public String getTitle() { + return "Description"; + } +} diff --git a/src/main/java/binnie/genetics/gui/AnalystPageFruit.java b/src/main/java/binnie/genetics/gui/AnalystPageFruit.java new file mode 100644 index 00000000..c10b9f83 --- /dev/null +++ b/src/main/java/binnie/genetics/gui/AnalystPageFruit.java @@ -0,0 +1,143 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import java.lang.reflect.Field; +import forestry.api.arboriculture.ITreeGenome; +import binnie.craftgui.core.geometry.IPoint; +import net.minecraft.init.Items; +import forestry.api.arboriculture.IAlleleFruit; +import forestry.api.genetics.IFruitFamily; +import forestry.api.genetics.ISpeciesRoot; +import forestry.api.genetics.IAllele; +import java.util.Collection; +import binnie.craftgui.minecraft.control.ControlItemDisplay; +import net.minecraft.item.ItemStack; +import forestry.arboriculture.FruitProviderPod; +import binnie.core.util.UniqueItemStackSet; +import forestry.api.genetics.IChromosomeType; +import forestry.api.arboriculture.EnumTreeChromosome; +import binnie.Binnie; +import binnie.craftgui.controls.ControlTextCentered; +import forestry.api.arboriculture.ITree; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.IWidget; + +public class AnalystPageFruit extends AnalystPageProduce +{ + public AnalystPageFruit(final IWidget parent, final IArea area, final ITree ind) { + super(parent, area); + this.setColour(13382400); + final ITreeGenome genome = ind.getGenome(); + int y = 4; + new ControlTextCentered(this, y, "§nFruit").setColour(this.getColour()); + y += 12; + new ControlTextCentered(this, y, "§oYield: " + Binnie.Genetics.treeBreedingSystem.getAlleleName(EnumTreeChromosome.YIELD, ind.getGenome().getActiveAllele(EnumTreeChromosome.YIELD))).setColour(this.getColour()); + y += 20; + final Collection products = new UniqueItemStackSet(); + final Collection specialties = new UniqueItemStackSet(); + final Collection wiid = new UniqueItemStackSet(); + for (final ItemStack stack : ind.getProduceList()) { + products.add(stack); + } + for (final ItemStack stack : ind.getSpecialtyList()) { + specialties.add(stack); + } + try { + if (ind.getGenome().getFruitProvider() instanceof FruitProviderPod) { + final FruitProviderPod pod = (FruitProviderPod) ind.getGenome().getFruitProvider(); + final Field f = FruitProviderPod.class.getDeclaredField("drop"); + f.setAccessible(true); + for (final ItemStack stack2 : (ItemStack[]) f.get(pod)) { + products.add(stack2); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + if (products.size() > 0) { + new ControlTextCentered(this, y, "Natural Fruit").setColour(this.getColour()); + y += 10; + final int w = products.size() * 18 - 2; + final int i = 0; + for (final ItemStack stack : products) { + final ControlItemDisplay d = new ControlItemDisplay(this, (this.w() - w) / 2.0f + 18 * i, y); + d.setTooltip(); + d.setItemStack(stack); + } + y += 26; + } + if (specialties.size() > 0) { + new ControlTextCentered(this, y, "Specialty Fruit").setColour(this.getColour()); + y += 10; + final int w = products.size() * 18 - 2; + final int i = 0; + for (final ItemStack stack : specialties) { + final ControlItemDisplay d = new ControlItemDisplay(this, (this.w() - w) / 2.0f + 18 * i, y); + d.setTooltip(); + d.setItemStack(stack); + } + y += 26; + } + final Collection allProducts = new UniqueItemStackSet(); + for (final ItemStack stack3 : products) { + allProducts.add(stack3); + } + for (final ItemStack stack3 : specialties) { + allProducts.add(stack3); + } + final Collection refinedProducts = new UniqueItemStackSet(); + refinedProducts.addAll(this.getAllProductsAndFluids(allProducts)); + if (refinedProducts.size() > 0) { + y = this.getRefined("Refined Products", y, refinedProducts); + y += 8; + } + if (products.size() == 0 && specialties.size() == 0) { + new ControlTextCentered(this, y, "This tree has no \nfruits or nuts").setColour(this.getColour()); + y += 28; + } + new ControlTextCentered(this, y, "Possible Fruits").setColour(this.getColour()); + y += 12; + final Collection fruitAlleles = Binnie.Genetics.getChromosomeMap(Binnie.Genetics.getTreeRoot()).get(EnumTreeChromosome.FRUITS); + for (final IFruitFamily fam : ind.getGenome().getPrimary().getSuitableFruit()) { + final Collection stacks = new UniqueItemStackSet(); + for (final IAllele a : fruitAlleles) { + if (((IAlleleFruit) a).getProvider().getFamily() == fam) { + for (final ItemStack p : ((IAlleleFruit) a).getProvider().getProducts()) { + stacks.add(p); + } + for (final ItemStack p : ((IAlleleFruit) a).getProvider().getSpecialty()) { + stacks.add(p); + } + try { + if (a.getUID().contains("fruitCocoa")) { + stacks.add(new ItemStack(Items.dye, 1, 3)); + } + else { + if (!(((IAlleleFruit) a).getProvider() instanceof FruitProviderPod)) { + continue; + } + final FruitProviderPod pod2 = (FruitProviderPod) ((IAlleleFruit) a).getProvider(); + final Field field = FruitProviderPod.class.getDeclaredField("drop"); + field.setAccessible(true); + for (final ItemStack stack4 : (ItemStack[]) field.get(pod2)) { + stacks.add(stack4); + } + } + } catch (Exception ex) { + } + } + } + y = this.getRefined("§o" + fam.getName(), y, stacks); + y += 2; + } + this.setSize(new IPoint(this.w(), y + 8)); + } + + @Override + public String getTitle() { + return "Fruit"; + } +} diff --git a/src/main/java/binnie/genetics/gui/AnalystPageGenome.java b/src/main/java/binnie/genetics/gui/AnalystPageGenome.java new file mode 100644 index 00000000..bf8fa0f8 --- /dev/null +++ b/src/main/java/binnie/genetics/gui/AnalystPageGenome.java @@ -0,0 +1,65 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import forestry.api.genetics.IAllele; +import binnie.core.genetics.BreedingSystem; +import forestry.api.genetics.ISpeciesRoot; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.core.CraftGUI; +import forestry.api.genetics.IChromosomeType; +import org.lwjgl.opengl.GL11; +import binnie.craftgui.controls.core.Control; +import binnie.Binnie; +import forestry.api.genetics.AlleleManager; +import binnie.craftgui.controls.ControlTextCentered; +import forestry.api.genetics.IIndividual; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.IWidget; + +public class AnalystPageGenome extends ControlAnalystPage +{ + boolean active; + + public AnalystPageGenome(final IWidget parent, final IArea area, final boolean active, final IIndividual ind) { + super(parent, area); + this.active = active; + this.setColour(26265); + int y = 4; + new ControlTextCentered(this, y, "§n" + this.getTitle()).setColour(this.getColour()); + y += 16; + final ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(ind.getClass()); + final BreedingSystem system = Binnie.Genetics.getSystem(root); + final Control scaled = new Control(this, 0.0f, y, 0.0f, 0.0f) { + @Override + public void onRenderBackground() { + GL11.glPushMatrix(); + GL11.glTranslatef(10.0f, -15.0f, 0.0f); + GL11.glScalef(0.9f, 0.95f, 1.0f); + } + + @Override + public void onRenderForeground() { + GL11.glPopMatrix(); + } + }; + for (final IChromosomeType chromo : system.getActiveKaryotype()) { + final IAllele allele = active ? ind.getGenome().getActiveAllele(chromo) : ind.getGenome().getInactiveAllele(chromo); + final String alleleName = system.getAlleleName(chromo, allele); + final float height = CraftGUI.Render.textHeight(alleleName, this.w() / 2.0f - 2.0f); + new ControlText(scaled, new IArea(0.0f, y + (height - 9.0f) / 2.0f, this.w() / 2.0f - 2.0f, 0.0f), system.getChromosomeShortName(chromo) + " :", TextJustification.TopRight).setColour(this.getColour()); + new ControlText(scaled, new IArea(this.w() / 2.0f + 2.0f, y, this.w() / 2.0f - 2.0f, 0.0f), alleleName, TextJustification.TopLeft).setColour(this.getColour()); + y += (int) (3.0f + height); + } + this.setSize(new IPoint(this.w(), y + 8)); + } + + @Override + public String getTitle() { + return (this.active ? "Active" : "Inactive") + " Genome"; + } +} diff --git a/src/main/java/binnie/genetics/gui/AnalystPageGrowth.java b/src/main/java/binnie/genetics/gui/AnalystPageGrowth.java new file mode 100644 index 00000000..bf7233f3 --- /dev/null +++ b/src/main/java/binnie/genetics/gui/AnalystPageGrowth.java @@ -0,0 +1,52 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import forestry.api.genetics.IAlleleSpecies; +import forestry.api.genetics.IChromosomeType; +import forestry.api.arboriculture.EnumTreeChromosome; +import binnie.Binnie; +import forestry.api.arboriculture.ITree; +import binnie.craftgui.controls.ControlTextCentered; +import forestry.api.genetics.IIndividual; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.IWidget; + +public class AnalystPageGrowth extends ControlAnalystPage +{ + public AnalystPageGrowth(final IWidget parent, final IArea area, final IIndividual ind) { + super(parent, area); + this.setColour(3355443); + int y = 4; + final IAlleleSpecies species = ind.getGenome().getPrimary(); + new ControlTextCentered(this, y, "§nGrowth").setColour(this.getColour()); + y += 12; + if (ind instanceof ITree) { + final ITree tree = (ITree) ind; + final int mat = tree.getGenome().getMaturationTime(); + new ControlTextCentered(this, y, "Saplings mature in").setColour(this.getColour()); + y += 12; + new ControlTextCentered(this, y, "§l" + this.getTimeString(1373.3999f * mat)).setColour(this.getColour()); + y += 22; + new ControlTextCentered(this, y, "§oHeight: " + Binnie.Genetics.treeBreedingSystem.getAlleleName(EnumTreeChromosome.HEIGHT, ind.getGenome().getActiveAllele(EnumTreeChromosome.HEIGHT))).setColour(this.getColour()); + y += 12; + new ControlTextCentered(this, y, "§oGirth: " + Binnie.Genetics.treeBreedingSystem.getAlleleName(EnumTreeChromosome.GIRTH, ind.getGenome().getActiveAllele(EnumTreeChromosome.GIRTH))).setColour(this.getColour()); + y += 20; + new ControlTextCentered(this, y, "Growth Conditions").setColour(this.getColour()); + y += 12; + new ControlTextCentered(this, y, "§o" + tree.getGenome().getGrowthProvider().getDescription()).setColour(this.getColour()); + y += 12; + for (final String s : tree.getGenome().getGrowthProvider().getInfo()) { + new ControlTextCentered(this, y, "§o" + s).setColour(this.getColour()); + y += 12; + } + } + } + + @Override + public String getTitle() { + return "Growth"; + } +} diff --git a/src/main/java/binnie/genetics/gui/AnalystPageKaryogram.java b/src/main/java/binnie/genetics/gui/AnalystPageKaryogram.java new file mode 100644 index 00000000..8474367f --- /dev/null +++ b/src/main/java/binnie/genetics/gui/AnalystPageKaryogram.java @@ -0,0 +1,51 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import binnie.core.genetics.BreedingSystem; +import forestry.api.genetics.ISpeciesRoot; +import forestry.api.genetics.IChromosomeType; +import binnie.Binnie; +import forestry.api.genetics.AlleleManager; +import binnie.craftgui.controls.ControlTextCentered; +import forestry.api.genetics.IIndividual; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.IWidget; + +public class AnalystPageKaryogram extends ControlAnalystPage +{ + public AnalystPageKaryogram(final IWidget parent, final IArea area, final IIndividual ind) { + super(parent, area); + this.setColour(10040319); + int y = 4; + new ControlTextCentered(this, y, "§nKaryogram").setColour(this.getColour()); + y += 16; + y += 8; + final ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(ind.getClass()); + final BreedingSystem system = Binnie.Genetics.getSystem(root); + final int maxBiomePerLine = (int) ((this.w() + 4.0f - 16.0f) / 22.0f); + float karygramX = (this.w() - (Math.min(maxBiomePerLine, system.getActiveKaryotype().size()) * 18 - 4)) / 2.0f; + int dx = 0; + int dy = 0; + int rem = system.getActiveKaryotype().size(); + for (final IChromosomeType type : system.getActiveKaryotype()) { + new ControlAnalystChromosome(this, karygramX + dx, y + dy, root, type, ind.getGenome().getActiveAllele(type), ind.getGenome().getInactiveAllele(type)); + dx += 22; + if (dx >= 22 * maxBiomePerLine - 22) { + rem -= maxBiomePerLine - 1; + if (rem < maxBiomePerLine) { + karygramX += (maxBiomePerLine - 1 - rem) * 22 / 2.0f; + } + dx = 0; + dy += 28; + } + } + } + + @Override + public String getTitle() { + return "Karyogram"; + } +} diff --git a/src/main/java/binnie/genetics/gui/AnalystPageMutations.java b/src/main/java/binnie/genetics/gui/AnalystPageMutations.java new file mode 100644 index 00000000..e5114fa9 --- /dev/null +++ b/src/main/java/binnie/genetics/gui/AnalystPageMutations.java @@ -0,0 +1,277 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.minecraft.EnumColor; +import java.util.Collection; +import java.util.List; +import forestry.api.genetics.IAllele; +import binnie.genetics.item.ModuleItem; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import forestry.api.genetics.IAlleleSpecies; +import binnie.core.genetics.BreedingSystem; +import binnie.craftgui.controls.core.Control; +import forestry.api.genetics.IMutation; +import binnie.craftgui.minecraft.control.ControlItemDisplay; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import binnie.core.Mods; +import binnie.core.genetics.ForestryAllele; +import net.minecraft.item.ItemStack; +import binnie.extrabees.ExtraBees; +import binnie.extrabees.genetics.ExtraBeesSpecies; +import forestry.api.apiculture.IBee; +import binnie.craftgui.minecraft.Window; +import binnie.Binnie; +import binnie.craftgui.controls.ControlTextCentered; +import forestry.api.genetics.IIndividual; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.IWidget; + +public class AnalystPageMutations extends ControlAnalystPage +{ + public AnalystPageMutations(final IWidget parent, final IArea area, final IIndividual ind, final boolean isMaster) { + super(parent, area); + this.setColour(3355392); + int y = 4; + new ControlTextCentered(this, y, "§nMutations").setColour(this.getColour()); + y += 18; + final BreedingSystem system = Binnie.Genetics.getSystem(ind.getGenome().getSpeciesRoot()); + final List discovered = system.getDiscoveredMutations(Window.get(this).getWorld(), Window.get(this).getUsername()); + final IAlleleSpecies speciesCurrent = ind.getGenome().getPrimary(); + final Collection resultant = system.getResultantMutations(speciesCurrent); + final Collection further = system.getFurtherMutations(speciesCurrent); + if (ind instanceof IBee) { + ItemStack hive = null; + if (ind.getGenome().getPrimary() == ExtraBeesSpecies.WATER) { + hive = new ItemStack(ExtraBees.hive, 1, 0); + } + if (ind.getGenome().getPrimary() == ExtraBeesSpecies.ROCK) { + hive = new ItemStack(ExtraBees.hive, 1, 1); + } + if (ind.getGenome().getPrimary() == ExtraBeesSpecies.BASALT) { + hive = new ItemStack(ExtraBees.hive, 1, 2); + } + if (ind.getGenome().getPrimary() == ForestryAllele.BeeSpecies.Forest.getAllele()) { + hive = new ItemStack(Mods.Forestry.block("beehives"), 1, 1); + } + if (ind.getGenome().getPrimary() == ForestryAllele.BeeSpecies.Meadows.getAllele()) { + hive = new ItemStack(Mods.Forestry.block("beehives"), 1, 2); + } + if (ind.getGenome().getPrimary() == ForestryAllele.BeeSpecies.Modest.getAllele()) { + hive = new ItemStack(Mods.Forestry.block("beehives"), 1, 3); + } + if (ind.getGenome().getPrimary() == ForestryAllele.BeeSpecies.Tropical.getAllele()) { + hive = new ItemStack(Mods.Forestry.block("beehives"), 1, 4); + } + if (ind.getGenome().getPrimary() == ForestryAllele.BeeSpecies.Ended.getAllele()) { + hive = new ItemStack(Mods.Forestry.block("beehives"), 1, 5); + } + if (ind.getGenome().getPrimary() == ForestryAllele.BeeSpecies.Wintry.getAllele()) { + hive = new ItemStack(Mods.Forestry.block("beehives"), 1, 6); + } + if (ind.getGenome().getPrimary() == ForestryAllele.BeeSpecies.Marshy.getAllele()) { + hive = new ItemStack(Mods.Forestry.block("beehives"), 1, 7); + } + if (ind.getGenome().getPrimary() == ForestryAllele.BeeSpecies.Steadfast.getAllele()) { + hive = new ItemStack(Blocks.chest); + } + if (ind.getGenome().getPrimary() == ForestryAllele.BeeSpecies.Valiant.getAllele()) { + new ControlTextCentered(this, y, "Natural Habitat").setColour(this.getColour()); + y += 10; + new ControlTextCentered(this, y, "§oFound in any Hive").setColour(this.getColour()); + y += 22; + } + else if (ind.getGenome().getPrimary() == ForestryAllele.BeeSpecies.Monastic.getAllele()) { + new ControlTextCentered(this, y, "Natural Habitat").setColour(this.getColour()); + y += 10; + new ControlTextCentered(this, y, "§oBought from Villagers").setColour(this.getColour()); + y += 22; + } + else if (hive != null) { + new ControlTextCentered(this, y, "Natural Habitat").setColour(this.getColour()); + y += 10; + final ControlItemDisplay display = new ControlItemDisplay(this, (this.w() - 16.0f) / 2.0f, y); + if (ind.getGenome().getPrimary() == ForestryAllele.BeeSpecies.Steadfast.getAllele()) { + display.addTooltip("Dungeon Chests"); + } + else { + display.setTooltip(); + } + display.setItemStack(hive); + y += 24; + } + } + float ox = (this.w() - 88.0f - 8.0f) / 2.0f; + float dx = 0.0f; + if (!resultant.isEmpty()) { + if (resultant.size() == 1) { + ox = (this.w() - 44.0f) / 2.0f; + } + new ControlTextCentered(this, y, "Resultant Mutations").setColour(this.getColour()); + y += 10; + for (final IMutation mutation : resultant) { + final float specificChance = this.getSpecificChance(ind, mutation, system); + if (!isMaster && !this.isKnown(system, mutation)) { + new ControlUnknownMutation(this, ox + dx, y, 44.0f, 16.0f); + } + else { + new Control(this, ox + dx, y, 44.0f, 16.0f) { + @Override + public void initialise() { + final IAlleleSpecies species0 = mutation.getAllele0(); + final IAlleleSpecies species2 = mutation.getAllele1(); + final String comb = species0.getName() + " + " + species2.getName(); + this.addTooltip(comb); + String chance = AnalystPageMutations.this.getMutationColour(mutation.getBaseChance()).getCode() + (int) mutation.getBaseChance() + "% Chance"; + if (specificChance != mutation.getBaseChance()) { + chance = chance + AnalystPageMutations.this.getMutationColour(specificChance).getCode() + " (" + (int) specificChance + "% currently)"; + } + this.addTooltip(chance); + for (final String s : mutation.getSpecialConditions()) { + this.addTooltip(s); + } + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.item(new IPoint(0.0f, 0.0f), system.getDefaultMember(mutation.getAllele0().getUID())); + CraftGUI.Render.item(new IPoint(28.0f, 0.0f), system.getDefaultMember(mutation.getAllele1().getUID())); + if (specificChance != mutation.getBaseChance()) { + CraftGUI.Render.colour(AnalystPageMutations.this.getMutationColour(mutation.getBaseChance()).getColour()); + CraftGUI.Render.iconItem(new IPoint(14.0f, 0.0f), ModuleItem.iconAdd0.getIcon()); + CraftGUI.Render.colour(AnalystPageMutations.this.getMutationColour(specificChance).getColour()); + CraftGUI.Render.iconItem(new IPoint(14.0f, 0.0f), ModuleItem.iconAdd1.getIcon()); + } + else { + CraftGUI.Render.colour(AnalystPageMutations.this.getMutationColour(mutation.getBaseChance()).getColour()); + CraftGUI.Render.iconItem(new IPoint(14.0f, 0.0f), ModuleItem.iconAdd.getIcon()); + } + } + }; + } + dx = 52.0f - dx; + if (dx == 0.0f || resultant.size() == 1) { + y += 18; + } + } + if (dx != 0.0f && resultant.size() != 1) { + y += 18; + } + y += 10; + } + ox = (this.w() - 88.0f - 8.0f) / 2.0f; + dx = 0.0f; + if (!further.isEmpty()) { + if (further.size() == 1) { + ox = (this.w() - 44.0f) / 2.0f; + } + new ControlTextCentered(this, y, "Further Mutations").setColour(this.getColour()); + y += 10; + for (final IMutation mutation : further) { + final IAllele speciesComb = mutation.getPartner(speciesCurrent); + final float specificChance2 = this.getSpecificChance(ind, mutation, system); + if (!isMaster && !this.isKnown(system, mutation)) { + new ControlUnknownMutation(this, ox + dx, y, 44.0f, 16.0f); + } + else { + new Control(this, ox + dx, y, 44.0f, 16.0f) { + @Override + public void initialise() { + final IAlleleSpecies species0 = (IAlleleSpecies) speciesComb; + final IAlleleSpecies species2 = (IAlleleSpecies) mutation.getTemplate()[0]; + this.addTooltip(species2.getName()); + final String comb = speciesCurrent.getName() + " + " + species0.getName(); + this.addTooltip(comb); + String chance = AnalystPageMutations.this.getMutationColour(mutation.getBaseChance()).getCode() + (int) mutation.getBaseChance() + "% Chance"; + if (specificChance2 != mutation.getBaseChance()) { + chance = chance + AnalystPageMutations.this.getMutationColour(specificChance2).getCode() + " (" + (int) specificChance2 + "% currently)"; + } + this.addTooltip(chance); + for (final String s : mutation.getSpecialConditions()) { + this.addTooltip(s); + } + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.item(new IPoint(0.0f, 0.0f), system.getDefaultMember(speciesComb.getUID())); + CraftGUI.Render.item(new IPoint(28.0f, 0.0f), system.getDefaultMember(mutation.getTemplate()[0].getUID())); + CraftGUI.Render.colour(AnalystPageMutations.this.getMutationColour(mutation.getBaseChance()).getColour()); + if (specificChance2 != mutation.getBaseChance()) { + CraftGUI.Render.colour(AnalystPageMutations.this.getMutationColour(mutation.getBaseChance()).getColour()); + CraftGUI.Render.iconItem(new IPoint(14.0f, 0.0f), ModuleItem.iconArrow0.getIcon()); + CraftGUI.Render.colour(AnalystPageMutations.this.getMutationColour(specificChance2).getColour()); + CraftGUI.Render.iconItem(new IPoint(14.0f, 0.0f), ModuleItem.iconArrow1.getIcon()); + } + else { + CraftGUI.Render.colour(AnalystPageMutations.this.getMutationColour(mutation.getBaseChance()).getColour()); + CraftGUI.Render.iconItem(new IPoint(14.0f, 0.0f), ModuleItem.iconArrow.getIcon()); + } + } + }; + } + dx = 52.0f - dx; + if (dx == 0.0f || further.size() == 1) { + y += 18; + } + } + if (dx != 0.0f && further.size() != 1) { + y += 18; + } + } + y += 8; + this.setSize(new IPoint(this.w(), y)); + } + + private boolean isKnown(final BreedingSystem system, final IMutation mutation) { + return system.getDiscoveredMutations(this.getWindow().getWorld(), this.getWindow().getPlayer().getGameProfile()).contains(mutation); + } + + private float getSpecificChance(final IIndividual ind, final IMutation mutation, final BreedingSystem system) { + return system.getChance(mutation, this.getWindow().getPlayer(), mutation.getAllele0(), mutation.getAllele1()); + } + + @Override + public String getTitle() { + return "Mutations"; + } + + protected EnumColor getMutationColour(final float percent) { + if (percent >= 20.0f) { + return EnumColor.DarkGreen; + } + if (percent >= 15.0f) { + return EnumColor.Green; + } + if (percent >= 10.0f) { + return EnumColor.Yellow; + } + if (percent >= 5.0f) { + return EnumColor.Gold; + } + if (percent > 0.0f) { + return EnumColor.Red; + } + return EnumColor.DarkRed; + } + + static class ControlUnknownMutation extends Control + { + public ControlUnknownMutation(final IWidget parent, final float x, final float y, final float w, final float h) { + super(parent, x, y, w, h); + this.addAttribute(Attribute.MouseOver); + this.addTooltip("Unknown Mutation"); + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.text(this.getArea(), TextJustification.MiddleCenter, "UNKNOWN", 11184810); + } + } +} diff --git a/src/main/java/binnie/genetics/gui/AnalystPageProduce.java b/src/main/java/binnie/genetics/gui/AnalystPageProduce.java new file mode 100644 index 00000000..dcdb77bf --- /dev/null +++ b/src/main/java/binnie/genetics/gui/AnalystPageProduce.java @@ -0,0 +1,246 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import binnie.craftgui.minecraft.control.ControlItemDisplay; +import binnie.craftgui.controls.ControlTextCentered; +import net.minecraft.init.Items; +import net.minecraftforge.fluids.FluidContainerRegistry; +import binnie.extratrees.machines.Distillery; +import binnie.extratrees.machines.Brewery; +import binnie.core.util.UniqueFluidStackSet; +import binnie.extratrees.machines.Press; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.ShapelessOreRecipe; +import net.minecraft.item.crafting.ShapedRecipes; +import net.minecraft.item.crafting.ShapelessRecipes; +import net.minecraft.item.crafting.CraftingManager; +import java.util.List; +import java.util.Map; +import forestry.api.recipes.RecipeManagers; +import java.util.ArrayList; +import net.minecraft.item.crafting.FurnaceRecipes; +import binnie.core.util.UniqueItemStackSet; +import java.util.Collection; +import net.minecraft.item.ItemStack; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.IWidget; + +public abstract class AnalystPageProduce extends ControlAnalystPage +{ + public AnalystPageProduce(final IWidget parent, final IArea area) { + super(parent, area); + } + + protected Collection getAllProducts(final ItemStack key) { + final Collection products = new UniqueItemStackSet(); + products.addAll(this.getCentrifuge(key)); + products.addAll(this.getSqueezer(key)); + products.add(FurnaceRecipes.smelting().getSmeltingResult(key)); + products.addAll(this.getCrafting(key)); + return products; + } + + public Collection getCentrifuge(final ItemStack stack) { + final List products = new ArrayList(); + for (final Map.Entry recipe : RecipeManagers.centrifugeManager.getRecipes().entrySet()) { + boolean isRecipe = false; + for (final Object obj : recipe.getKey()) { + if (obj instanceof ItemStack && stack.isItemEqual((ItemStack) obj)) { + isRecipe = true; + } + } + if (isRecipe) { + for (final Object obj : recipe.getValue()) { + if (obj instanceof ItemStack) { + products.add((ItemStack) obj); + } + } + } + } + return products; + } + + public Collection getSqueezer(final ItemStack stack) { + final List products = new ArrayList(); + for (final Map.Entry recipe : RecipeManagers.squeezerManager.getRecipes().entrySet()) { + boolean isRecipe = false; + for (final Object obj : recipe.getKey()) { + if (obj instanceof ItemStack && stack.isItemEqual((ItemStack) obj)) { + isRecipe = true; + } + } + if (isRecipe) { + for (final Object obj : recipe.getValue()) { + if (obj instanceof ItemStack) { + products.add((ItemStack) obj); + } + } + } + } + return products; + } + + public Collection getCrafting(final ItemStack stack) { + final List products = new ArrayList(); + for (final Object recipeO : CraftingManager.getInstance().getRecipeList()) { + if (recipeO instanceof ShapelessRecipes) { + final ShapelessRecipes recipe = (ShapelessRecipes) recipeO; + boolean match = true; + for (final Object rec : recipe.recipeItems) { + if (rec != null && (!(rec instanceof ItemStack) || !stack.isItemEqual((ItemStack) rec))) { + match = false; + } + } + if (match) { + products.add(recipe.getRecipeOutput()); + } + } + if (recipeO instanceof ShapedRecipes) { + final ShapedRecipes recipe2 = (ShapedRecipes) recipeO; + boolean match = true; + for (final Object rec2 : recipe2.recipeItems) { + if (rec2 != null && (!(rec2 instanceof ItemStack) || !stack.isItemEqual((ItemStack) rec2))) { + match = false; + } + } + if (match) { + products.add(recipe2.getRecipeOutput()); + } + } + if (recipeO instanceof ShapelessOreRecipe) { + final ShapelessOreRecipe recipe3 = (ShapelessOreRecipe) recipeO; + boolean match = true; + for (final Object rec : recipe3.getInput()) { + if (rec != null && (!(rec instanceof ItemStack) || !stack.isItemEqual((ItemStack) rec))) { + match = false; + } + } + if (!match) { + continue; + } + products.add(recipe3.getRecipeOutput()); + } + } + return products; + } + + public Collection getAllFluids(final ItemStack stack) { + final List products = new ArrayList(); + products.addAll(this.getSqueezerFluid(stack)); + if (Press.getOutput(stack) != null) { + products.add(Press.getOutput(stack)); + } + return products; + } + + public Collection getSqueezerFluid(final ItemStack stack) { + final List products = new ArrayList(); + for (final Map.Entry recipe : RecipeManagers.squeezerManager.getRecipes().entrySet()) { + boolean isRecipe = false; + for (final Object obj : recipe.getKey()) { + if (obj instanceof ItemStack && stack.isItemEqual((ItemStack) obj)) { + isRecipe = true; + } + } + if (isRecipe) { + for (final Object obj : recipe.getValue()) { + if (obj instanceof FluidStack) { + products.add((FluidStack) obj); + } + } + } + } + return products; + } + + protected Collection getAllProducts(final FluidStack stack) { + final Collection fluids = new UniqueFluidStackSet(); + fluids.add(Brewery.getOutput(stack)); + fluids.add(Distillery.getOutput(stack, 0)); + fluids.add(Distillery.getOutput(stack, 1)); + fluids.add(Distillery.getOutput(stack, 2)); + return fluids; + } + + protected Collection getAllProductsAndFluids(final Collection collection) { + final Collection products = new UniqueItemStackSet(); + for (final ItemStack stack : collection) { + products.addAll(this.getAllProducts(stack)); + } + final Collection products2 = new UniqueItemStackSet(); + for (final ItemStack stack2 : products) { + products2.addAll(this.getAllProducts(stack2)); + } + final Collection products3 = new UniqueItemStackSet(); + for (final ItemStack stack3 : products2) { + products3.addAll(this.getAllProducts(stack3)); + } + products.addAll(products2); + products.addAll(products3); + final Collection allFluids = new UniqueFluidStackSet(); + for (final ItemStack stack4 : collection) { + allFluids.addAll(this.getAllFluids(stack4)); + } + final Collection fluids2 = new UniqueFluidStackSet(); + for (final FluidStack stack5 : allFluids) { + fluids2.addAll(this.getAllProducts(stack5)); + } + final Collection fluids3 = new UniqueFluidStackSet(); + for (final FluidStack stack6 : fluids2) { + fluids3.addAll(this.getAllProducts(stack6)); + } + allFluids.addAll(fluids2); + allFluids.addAll(fluids3); + for (final FluidStack fluid : allFluids) { + ItemStack container = null; + for (final FluidContainerRegistry.FluidContainerData data : FluidContainerRegistry.getRegisteredFluidContainerData()) { + if (data.emptyContainer.isItemEqual(new ItemStack(Items.glass_bottle)) && data.fluid.isFluidEqual(fluid)) { + container = data.filledContainer; + break; + } + if (data.emptyContainer.isItemEqual(new ItemStack(Items.bucket)) && data.fluid.isFluidEqual(fluid)) { + container = data.filledContainer; + break; + } + if (data.fluid.isFluidEqual(fluid)) { + container = data.filledContainer; + break; + } + } + if (container != null) { + products.add(container); + } + } + return products; + } + + protected int getRefined(final String string, int y, final Collection products) { + new ControlTextCentered(this, y, string).setColour(this.getColour()); + y += 10; + final int maxBiomePerLine = (int) ((this.w() + 2.0f - 16.0f) / 18.0f); + final float biomeListX = (this.w() - (Math.min(maxBiomePerLine, products.size()) * 18 - 2)) / 2.0f; + int dx = 0; + int dy = 0; + for (final ItemStack soilStack : products) { + if (dx >= 18 * maxBiomePerLine) { + dx = 0; + dy += 18; + } + final FluidStack fluid = FluidContainerRegistry.getFluidForFilledItem(soilStack); + soilStack.stackSize = 1; + final ControlItemDisplay display = new ControlItemDisplay(this, biomeListX + dx, y + dy, soilStack, fluid == null); + if (fluid != null) { + display.addTooltip(fluid.getLocalizedName()); + } + dx += 18; + } + if (dx != 0) { + dy += 18; + } + y += dy; + return y; + } +} diff --git a/src/main/java/binnie/genetics/gui/AnalystPageProducts.java b/src/main/java/binnie/genetics/gui/AnalystPageProducts.java new file mode 100644 index 00000000..f0b794dc --- /dev/null +++ b/src/main/java/binnie/genetics/gui/AnalystPageProducts.java @@ -0,0 +1,190 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import binnie.craftgui.controls.ControlText; +import forestry.plugins.PluginApiculture; +import binnie.craftgui.core.geometry.CraftGUIUtil; +import net.minecraft.nbt.NBTTagCompound; +import binnie.craftgui.core.Tooltip; +import forestry.api.apiculture.IBeeGenome; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.extratrees.kitchen.ControlFluidDisplay; +import net.minecraft.init.Items; +import net.minecraftforge.fluids.FluidContainerRegistry; +import binnie.craftgui.minecraft.control.ControlItemDisplay; +import net.minecraftforge.fluids.FluidStack; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Map; +import net.minecraft.item.ItemStack; +import java.util.HashMap; +import binnie.core.util.UniqueItemStackSet; +import forestry.api.genetics.IChromosomeType; +import forestry.api.apiculture.EnumBeeChromosome; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.core.BinnieCore; +import binnie.Binnie; +import forestry.api.apiculture.IBee; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.IWidget; + +public class AnalystPageProducts extends AnalystPageProduce +{ + public AnalystPageProducts(final IWidget parent, final IArea area, final IBee ind) { + super(parent, area); + this.setColour(13382400); + final IBeeGenome genome = ind.getGenome(); + final float speed = genome.getSpeed(); + final float modeSpeed = Binnie.Genetics.getBeeRoot().getBeekeepingMode(BinnieCore.proxy.getWorld()).getBeeModifier().getProductionModifier(genome, 1.0f); + int y = 4; + new ControlTextCentered(this, y, "§nProduce").setColour(this.getColour()); + y += 12; + new ControlTextCentered(this, y, "§oRate: " + Binnie.Genetics.beeBreedingSystem.getAlleleName(EnumBeeChromosome.SPEED, ind.getGenome().getActiveAllele(EnumBeeChromosome.SPEED))).setColour(this.getColour()); + y += 20; + final Collection refinedProducts = new UniqueItemStackSet(); + final Collection productList = new UniqueItemStackSet(); + final Collection specialtyList = new UniqueItemStackSet(); + Map products = new HashMap(); + products.putAll(genome.getPrimary().getProductChances()); + products.putAll(genome.getSecondary().getProductChances()); + if (!products.isEmpty()) { + new ControlTextCentered(this, y, "Natural Products").setColour(this.getColour()); + y += 12; + for (final Map.Entry entry : products.entrySet()) { + if (!productList.add(entry.getKey())) { + continue; + } + refinedProducts.addAll(this.getAllProducts(entry.getKey())); + this.createProductEntry(entry.getKey(), entry.getValue(), y, speed * modeSpeed); + y += 18; + } + y += 12; + } + products = genome.getPrimary().getSpecialtyChances(); + if (!products.isEmpty()) { + new ControlTextCentered(this, y, "Specialty Products").setColour(this.getColour()); + y += 12; + for (final Map.Entry entry : products.entrySet()) { + refinedProducts.addAll(this.getAllProducts(entry.getKey())); + this.createProductEntry(entry.getKey(), entry.getValue(), y, speed * modeSpeed); + y += 18; + } + y += 12; + } + new ControlTextCentered(this, y, "Refined Products").setColour(this.getColour()); + y += 12; + Collection level2Products = new UniqueItemStackSet(); + for (final ItemStack stack : refinedProducts) { + level2Products.addAll(this.getAllProducts(stack)); + } + refinedProducts.addAll(level2Products); + level2Products = new UniqueItemStackSet(); + for (final ItemStack stack : refinedProducts) { + level2Products.addAll(this.getAllProducts(stack)); + } + refinedProducts.addAll(level2Products); + final Collection allFluids = new ArrayList(); + for (final ItemStack stack2 : refinedProducts) { + for (final FluidStack addition : this.getAllFluids(stack2)) { + boolean alreadyIn = false; + for (final FluidStack existing : allFluids) { + if (existing.isFluidEqual(addition)) { + alreadyIn = true; + } + } + if (!alreadyIn) { + allFluids.add(addition); + } + } + } + final int maxBiomePerLine = (int) ((this.w() + 2.0f - 16.0f) / 18.0f); + final float biomeListX = (this.w() - (Math.min(maxBiomePerLine, allFluids.size() + refinedProducts.size()) * 18 - 2)) / 2.0f; + int dx = 0; + int dy = 0; + for (final ItemStack soilStack : refinedProducts) { + if (dx >= 18 * maxBiomePerLine) { + dx = 0; + dy += 18; + } + final ControlItemDisplay display = new ControlItemDisplay(this, biomeListX + dx, y + dy); + display.setItemStack(soilStack); + display.setTooltip(); + dx += 18; + } + for (final FluidStack soilStack2 : allFluids) { + if (dx >= 18 * maxBiomePerLine) { + dx = 0; + dy += 18; + } + ItemStack container = null; + for (final FluidContainerRegistry.FluidContainerData data : FluidContainerRegistry.getRegisteredFluidContainerData()) { + if (data.emptyContainer.isItemEqual(new ItemStack(Items.glass_bottle)) && data.fluid.isFluidEqual(soilStack2)) { + container = data.filledContainer; + break; + } + if (data.emptyContainer.isItemEqual(new ItemStack(Items.bucket)) && data.fluid.isFluidEqual(soilStack2)) { + container = data.filledContainer; + break; + } + if (data.fluid.isFluidEqual(soilStack2)) { + container = data.filledContainer; + break; + } + } + if (container == null) { + final ControlFluidDisplay display2 = new ControlFluidDisplay(this, biomeListX + dx, y + dy); + display2.setItemStack(soilStack2); + display2.setTooltip(); + } + else { + final ControlItemDisplay display3 = new ControlItemDisplay(this, biomeListX + dx, y + dy); + display3.setItemStack(container); + display3.setTooltip(); + } + dx += 18; + } + this.setSize(new IPoint(this.w(), y + dy + 18 + 8)); + } + + private void createProductEntry(final ItemStack key, final Float value, final int y, final float speed) { + final ControlItemDisplay item = new ControlItemDisplay(this, 16.0f, y) { + @Override + public void getTooltip(final Tooltip tooltip) { + super.getTooltip(tooltip); + final Collection products = AnalystPageProducts.this.getCentrifuge(key); + if (!products.isEmpty()) { + tooltip.add("Centrifuges to give: "); + for (final ItemStack prod : products) { + final NBTTagCompound nbt = new NBTTagCompound(); + prod.writeToNBT(nbt); + tooltip.add(prod, prod.getDisplayName()); + } + } + final Collection liquids = AnalystPageProducts.this.getSqueezer(key); + if (!liquids.isEmpty()) { + tooltip.add("Squeezes to give: "); + for (final ItemStack prod2 : liquids) { + final NBTTagCompound nbt2 = new NBTTagCompound(); + prod2.writeToNBT(nbt2); + tooltip.add(prod2, prod2.getDisplayName()); + } + } + } + }; + item.setTooltip(); + final ControlText textWidget = new ControlTextCentered(this, y + 4, ""); + textWidget.setColour(this.getColour()); + CraftGUIUtil.moveWidget(textWidget, new IPoint(12.0f, 0.0f)); + item.setItemStack(key); + final float time = (int) (PluginApiculture.ticksPerBeeWorkCycle * 100.0 / (speed * value)); + textWidget.setValue("Every " + this.getTimeString(time)); + } + + @Override + public String getTitle() { + return "Produce"; + } +} diff --git a/src/main/java/binnie/genetics/gui/AnalystPageSoil.java b/src/main/java/binnie/genetics/gui/AnalystPageSoil.java new file mode 100644 index 00000000..2af658ad --- /dev/null +++ b/src/main/java/binnie/genetics/gui/AnalystPageSoil.java @@ -0,0 +1,146 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import binnie.Binnie; +import java.util.List; +import forestry.api.genetics.EnumTolerance; +import java.util.EnumSet; +import java.util.ArrayList; +import binnie.craftgui.minecraft.control.ControlItemDisplay; +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import binnie.botany.gardening.BlockSoil; +import binnie.botany.Botany; +import binnie.botany.api.EnumAcidity; +import binnie.core.genetics.Tolerance; +import binnie.botany.api.EnumMoisture; +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.botany.api.IFlower; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.IWidget; + +public class AnalystPageSoil extends ControlAnalystPage +{ + public AnalystPageSoil(final IWidget parent, final IArea area, final IFlower flower) { + super(parent, area); + this.setColour(6697728); + final EnumMoisture moisture = flower.getGenome().getPrimary().getMoisture(); + final EnumTolerance moistureTol = flower.getGenome().getToleranceMoisture(); + final EnumAcidity pH = flower.getGenome().getPrimary().getPH(); + final EnumTolerance pHTol = flower.getGenome().getTolerancePH(); + int y = 4; + new ControlTextCentered(this, y, "§nSoil").setColour(this.getColour()); + y += 16; + new ControlText(this, new IArea(4.0f, y, this.w() - 8.0f, 14.0f), "Moisture Tolerance", TextJustification.MiddleCenter).setColour(this.getColour()); + y += 12; + this.createMoisture(this, (this.w() - 100.0f) / 2.0f, y, 100.0f, 10.0f, moisture, moistureTol); + y += 16; + new ControlText(this, new IArea(4.0f, y, this.w() - 8.0f, 14.0f), "pH Tolerance", TextJustification.MiddleCenter).setColour(this.getColour()); + y += 12; + this.createAcidity(this, (this.w() - 100.0f) / 2.0f, y, 100.0f, 10.0f, pH, pHTol); + y += 16; + new ControlText(this, new IArea(4.0f, y, this.w() - 8.0f, 14.0f), "Recommended Soil", TextJustification.MiddleCenter).setColour(this.getColour()); + y += 12; + EnumMoisture recomMoisture = EnumMoisture.Normal; + final boolean canTolNormal = Tolerance.canTolerate(moisture, EnumMoisture.Normal, moistureTol); + final boolean canTolDamp = Tolerance.canTolerate(moisture, EnumMoisture.Damp, moistureTol); + final boolean canTolDry = Tolerance.canTolerate(moisture, EnumMoisture.Dry, moistureTol); + if (canTolNormal) { + if (canTolDamp && !canTolDry) { + recomMoisture = EnumMoisture.Damp; + } + else if (canTolDry && !canTolDamp) { + recomMoisture = EnumMoisture.Dry; + } + } + else { + if (canTolDamp) { + recomMoisture = EnumMoisture.Damp; + } + if (canTolDry) { + recomMoisture = EnumMoisture.Dry; + } + } + EnumAcidity recomPH = EnumAcidity.Neutral; + final boolean canTolNeutral = Tolerance.canTolerate(pH, EnumAcidity.Neutral, pHTol); + final boolean canTolAcid = Tolerance.canTolerate(pH, EnumAcidity.Acid, pHTol); + final boolean canTolAlkaline = Tolerance.canTolerate(pH, EnumAcidity.Alkaline, pHTol); + if (canTolNeutral) { + if (canTolAcid && !canTolAlkaline) { + recomPH = EnumAcidity.Acid; + } + else if (canTolAlkaline && !canTolAcid) { + recomPH = EnumAcidity.Alkaline; + } + } + else { + if (canTolAcid) { + recomPH = EnumAcidity.Acid; + } + if (canTolAlkaline) { + recomPH = EnumAcidity.Alkaline; + } + } + final ItemStack stack = new ItemStack(Botany.soil, 1, BlockSoil.getMeta(recomPH, recomMoisture)); + final ControlItemDisplay recomSoil = new ControlItemDisplay(this, (this.w() - 24.0f) / 2.0f, y, 24.0f); + recomSoil.setItemStack(stack); + recomSoil.setTooltip(); + y += 32; + new ControlText(this, new IArea(4.0f, y, this.w() - 8.0f, 14.0f), "Other Soils", TextJustification.MiddleCenter).setColour(this.getColour()); + y += 12; + final List stacks = new ArrayList(); + for (final EnumAcidity a : EnumSet.range(EnumAcidity.Acid, EnumAcidity.Alkaline)) { + for (final EnumMoisture b : EnumSet.range(EnumMoisture.Dry, EnumMoisture.Damp)) { + if (Tolerance.canTolerate(pH, a, pHTol) && Tolerance.canTolerate(moisture, b, moistureTol) && (a != recomPH || b != recomMoisture)) { + stacks.add(new ItemStack(Botany.soil, 1, BlockSoil.getMeta(a, b))); + } + } + } + final float soilListWidth = 17 * stacks.size() - 1; + final float soilListX = (this.w() - soilListWidth) / 2.0f; + int t = 0; + for (final ItemStack soilStack : stacks) { + final ControlItemDisplay display = new ControlItemDisplay(this, soilListX + 17 * t++, y); + display.setItemStack(soilStack); + display.setTooltip(); + } + } + + protected void createMoisture(final IWidget parent, final float x, final float y, final float w, final float h, final EnumMoisture value, final EnumTolerance tol) { + new ControlToleranceBar(parent, x, y, w, h, EnumMoisture.class) { + @Override + protected String getName(final EnumMoisture value) { + return Binnie.Language.localise(value); + } + + @Override + protected int getColour(final EnumMoisture value) { + return (new int[] { 13434828, 6737151, 3368703 })[value.ordinal()]; + } + }.setValues(value, tol); + } + + protected void createAcidity(final IWidget parent, final float x, final float y, final float w, final float h, final EnumAcidity value, final EnumTolerance tol) { + new ControlToleranceBar(parent, x, y, w, h, EnumAcidity.class) { + @Override + protected String getName(final EnumAcidity value) { + return Binnie.Language.localise(value); + } + + @Override + protected int getColour(final EnumAcidity value) { + return (new int[] { 16711782, 65280, 26367 })[value.ordinal()]; + } + }.setValues(value, tol); + } + + @Override + public String getTitle() { + return "Soil"; + } +} diff --git a/src/main/java/binnie/genetics/gui/AnalystPageSpecimen.java b/src/main/java/binnie/genetics/gui/AnalystPageSpecimen.java new file mode 100644 index 00000000..da37ec8f --- /dev/null +++ b/src/main/java/binnie/genetics/gui/AnalystPageSpecimen.java @@ -0,0 +1,29 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import forestry.api.genetics.IIndividual; +import binnie.craftgui.controls.ControlTextCentered; +import forestry.api.lepidopterology.IButterfly; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.IWidget; + +public class AnalystPageSpecimen extends ControlAnalystPage +{ + public AnalystPageSpecimen(final IWidget parent, final IArea area, final IButterfly ind) { + super(parent, area); + this.setColour(3355443); + int y = 4; + new ControlTextCentered(this, y, "§nSpecimen").setColour(this.getColour()); + y += 12; + final float w = (this.w() - 16.0f) * ind.getSize(); + new ControlIndividualDisplay(this, (this.w() - w) / 2.0f, y + (this.w() - w) / 2.0f, w, ind); + } + + @Override + public String getTitle() { + return "Specimen"; + } +} diff --git a/src/main/java/binnie/genetics/gui/AnalystPageWood.java b/src/main/java/binnie/genetics/gui/AnalystPageWood.java new file mode 100644 index 00000000..0b732ca7 --- /dev/null +++ b/src/main/java/binnie/genetics/gui/AnalystPageWood.java @@ -0,0 +1,90 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import forestry.api.arboriculture.ITreeGenome; +import binnie.craftgui.core.geometry.IPoint; + +import java.util.Collection; + +import binnie.craftgui.minecraft.control.ControlItemDisplay; + +import net.minecraft.item.ItemStack; + +import net.minecraftforge.common.util.ForgeDirection; + +import binnie.core.util.UniqueItemStackSet; +import binnie.craftgui.minecraft.control.ControlIconDisplay; +import binnie.genetics.item.ModuleItem; +import forestry.api.genetics.IChromosomeType; +import forestry.api.arboriculture.EnumTreeChromosome; +import forestry.api.genetics.IAlleleBoolean; +import binnie.craftgui.controls.ControlTextCentered; +import forestry.api.arboriculture.ITree; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.IWidget; +import binnie.extratrees.FakeWorld; + +public class AnalystPageWood extends AnalystPageProduce +{ + public AnalystPageWood(final IWidget parent, final IArea area, final ITree ind) { + super(parent, area); + this.setColour(6697728); + final ITreeGenome genome = ind.getGenome(); + int y = 4; + new ControlTextCentered(this, y, "§nWood").setColour(this.getColour()); + y += 12; + if (((IAlleleBoolean) ind.getGenome().getActiveAllele(EnumTreeChromosome.FIREPROOF)).getValue()) { + new ControlIconDisplay(this, (this.w() - 16.0f) / 2.0f, y, ModuleItem.iconNoFire.getIcon()).addTooltip("Fireproof"); + } + else { + new ControlIconDisplay(this, (this.w() - 16.0f) / 2.0f, y, ModuleItem.iconFire.getIcon()).addTooltip("Flammable"); + } + y += 30; + final Collection products = new UniqueItemStackSet(); + + genome.getPrimary().getGenerator().setLogBlock(genome, FakeWorld.instance, 0, 0, 0, ForgeDirection.UP); + ItemStack stackWood = FakeWorld.instance.getWooLog(); + if (stackWood != null) { + products.add(stackWood); + } + // for (final ItemStack stack : + // ind.getGenome().getFruitProvider().getProducts()) { + // products.add(stack); + // } + if (products.size() > 0) { + new ControlTextCentered(this, y, "Logs").setColour(this.getColour()); + y += 10; + final int w = products.size() * 18 - 2; + final int i = 0; + for (final ItemStack stack : products) { + final ControlItemDisplay d = new ControlItemDisplay(this, (this.w() - w) / 2.0f + 18 * i, y); + d.setTooltip(); + d.setItemStack(stack); + } + y += 26; + } + final Collection allProducts = new UniqueItemStackSet(); + for (final ItemStack stack2 : products) { + allProducts.add(stack2); + } + final Collection refinedProducts = new UniqueItemStackSet(); + refinedProducts.addAll(this.getAllProductsAndFluids(allProducts)); + if (refinedProducts.size() > 0) { + y = this.getRefined("Refined Products", y, refinedProducts); + y += 8; + } + if (products.size() == 0) { + new ControlTextCentered(this, y, "This tree has no \nfruits or nuts").setColour(this.getColour()); + y += 28; + } + this.setSize(new IPoint(this.w(), y + 8)); + } + + @Override + public String getTitle() { + return "Wood"; + } +} diff --git a/src/main/java/binnie/genetics/gui/ControlAnalystChromosome.java b/src/main/java/binnie/genetics/gui/ControlAnalystChromosome.java new file mode 100644 index 00000000..669da33d --- /dev/null +++ b/src/main/java/binnie/genetics/gui/ControlAnalystChromosome.java @@ -0,0 +1,65 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import binnie.core.genetics.BreedingSystem; +import binnie.Binnie; +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.core.texture.BinnieCoreTexture; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.resource.Texture; +import forestry.api.genetics.ISpeciesRoot; +import forestry.api.genetics.IChromosomeType; +import forestry.api.genetics.IAllele; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +public class ControlAnalystChromosome extends Control implements ITooltip +{ + IAllele allele0; + IAllele allele1; + IChromosomeType chromosomeType; + ISpeciesRoot root; + Texture Homozygous; + Texture Heterozygous; + + public ControlAnalystChromosome(final IWidget parent, final float x, final float y, final ISpeciesRoot root, final IChromosomeType type, final IAllele allele0, final IAllele allele1) { + super(parent, x, y, 16.0f, 22.0f); + this.Homozygous = new StandardTexture(0, 0, 16, 22, BinnieCoreTexture.GUIAnalyst); + this.Heterozygous = new StandardTexture(16, 0, 16, 22, BinnieCoreTexture.GUIAnalyst); + this.addAttribute(Attribute.MouseOver); + this.root = root; + this.chromosomeType = type; + this.allele0 = allele0; + this.allele1 = allele1; + } + + public boolean isHomozygous() { + return this.allele0.getUID().equals(this.allele1.getUID()); + } + + @Override + public void onRenderBackground() { + super.onRenderBackground(); + CraftGUI.Render.texture(this.isHomozygous() ? this.Homozygous : this.Heterozygous, IPoint.ZERO); + } + + @Override + public void getTooltip(final Tooltip tooltip) { + final BreedingSystem system = Binnie.Genetics.getSystem(this.root); + tooltip.add(system.getChromosomeName(this.chromosomeType)); + if (this.isHomozygous()) { + tooltip.add(system.getAlleleName(this.chromosomeType, this.allele0)); + } + else { + tooltip.add("Active: " + system.getAlleleName(this.chromosomeType, this.allele0)); + tooltip.add("Inactive: " + system.getAlleleName(this.chromosomeType, this.allele1)); + } + } +} diff --git a/src/main/java/binnie/genetics/gui/ControlAnalystPage.java b/src/main/java/binnie/genetics/gui/ControlAnalystPage.java new file mode 100644 index 00000000..61830e5b --- /dev/null +++ b/src/main/java/binnie/genetics/gui/ControlAnalystPage.java @@ -0,0 +1,38 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import java.text.DecimalFormat; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.controls.core.Control; + +public abstract class ControlAnalystPage extends Control +{ + public ControlAnalystPage(final IWidget parent, final IArea area) { + super(parent, area); + this.hide(); + } + + @Override + public void onRenderBackground() { + } + + public abstract String getTitle(); + + protected String getTimeString(final float time) { + final float seconds = time / 20.0f; + final float minutes = seconds / 60.0f; + final float hours = minutes / 60.0f; + final DecimalFormat df = new DecimalFormat("#.0"); + if (hours > 1.0f) { + return df.format(hours) + " hours"; + } + if (minutes > 1.0f) { + return df.format(minutes) + " min."; + } + return df.format(seconds) + " sec."; + } +} diff --git a/src/main/java/binnie/genetics/gui/ControlBiome.java b/src/main/java/binnie/genetics/gui/ControlBiome.java new file mode 100644 index 00000000..ace58d7c --- /dev/null +++ b/src/main/java/binnie/genetics/gui/ControlBiome.java @@ -0,0 +1,76 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import binnie.craftgui.core.Tooltip; +import net.minecraft.util.IIcon; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import forestry.core.render.TextureManager; +import net.minecraftforge.common.BiomeDictionary; +import binnie.craftgui.core.IWidget; +import net.minecraft.world.biome.BiomeGenBase; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +public class ControlBiome extends Control implements ITooltip +{ + BiomeGenBase biome; + String iconCategory; + + public ControlBiome(final IWidget parent, final float x, final float y, final float w, final float h, final BiomeGenBase biome) { + super(parent, x, y, w, h); + this.biome = null; + this.iconCategory = "plains"; + this.biome = biome; + } + + @Override + public void onRenderBackground() { + if (BiomeDictionary.isBiomeOfType(this.biome, BiomeDictionary.Type.MOUNTAIN)) { + this.iconCategory = "hills"; + } + if (BiomeDictionary.isBiomeOfType(this.biome, BiomeDictionary.Type.HILLS)) { + this.iconCategory = "hills"; + } + if (BiomeDictionary.isBiomeOfType(this.biome, BiomeDictionary.Type.SANDY)) { + this.iconCategory = "desert"; + } + if (BiomeDictionary.isBiomeOfType(this.biome, BiomeDictionary.Type.SNOWY)) { + this.iconCategory = "snow"; + } + if (BiomeDictionary.isBiomeOfType(this.biome, BiomeDictionary.Type.FOREST)) { + this.iconCategory = "forest"; + } + if (BiomeDictionary.isBiomeOfType(this.biome, BiomeDictionary.Type.SWAMP)) { + this.iconCategory = "swamp"; + } + if (BiomeDictionary.isBiomeOfType(this.biome, BiomeDictionary.Type.JUNGLE)) { + this.iconCategory = "jungle"; + } + if (BiomeDictionary.isBiomeOfType(this.biome, BiomeDictionary.Type.COLD) && BiomeDictionary.isBiomeOfType(this.biome, BiomeDictionary.Type.FOREST)) { + this.iconCategory = "taiga"; + } + if (BiomeDictionary.isBiomeOfType(this.biome, BiomeDictionary.Type.MUSHROOM)) { + this.iconCategory = "mushroom"; + } + if (BiomeDictionary.isBiomeOfType(this.biome, BiomeDictionary.Type.OCEAN)) { + this.iconCategory = "ocean"; + } + if (BiomeDictionary.isBiomeOfType(this.biome, BiomeDictionary.Type.NETHER)) { + this.iconCategory = "nether"; + } + if (BiomeDictionary.isBiomeOfType(this.biome, BiomeDictionary.Type.END)) { + this.iconCategory = "end"; + } + final IIcon icon = TextureManager.getInstance().getDefault("habitats/" + this.iconCategory); + CraftGUI.Render.iconItem(IPoint.ZERO, icon); + } + + @Override + public void getTooltip(final Tooltip tooltip) { + tooltip.add(this.biome.biomeName.replaceAll("(\\p{Ll})(\\p{Lu})", "$1 $2")); + } +} diff --git a/src/main/java/binnie/genetics/gui/ControlChromoPicker.java b/src/main/java/binnie/genetics/gui/ControlChromoPicker.java new file mode 100644 index 00000000..ed03d0e4 --- /dev/null +++ b/src/main/java/binnie/genetics/gui/ControlChromoPicker.java @@ -0,0 +1,61 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import binnie.Binnie; +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.events.EventValueChanged; +import binnie.craftgui.events.EventWidget; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.extrabees.core.ExtraBeeTexture; +import forestry.api.genetics.IChromosomeType; +import binnie.craftgui.resource.Texture; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +public class ControlChromoPicker extends Control implements ITooltip +{ + Texture Selected; + Texture Texture; + IChromosomeType type; + ControlChromosome parent; + + public ControlChromoPicker(final ControlChromosome parent, final float x, final float y, final IChromosomeType chromo) { + super(parent, x, y, 16.0f, 16.0f); + this.Selected = new StandardTexture(160, 18, 16, 16, ExtraBeeTexture.GUIPunnett); + this.Texture = new StandardTexture(160, 34, 16, 16, ExtraBeeTexture.GUIPunnett); + this.type = chromo; + this.addAttribute(Attribute.MouseOver); + this.parent = parent; + this.addSelfEventHandler(new EventWidget.StartMouseOver.Handler() { + @Override + public void onEvent(final EventWidget.StartMouseOver event) { + ControlChromoPicker.this.callEvent(new EventValueChanged(ControlChromoPicker.this.getWidget(), ControlChromoPicker.this.type)); + } + }); + this.addSelfEventHandler(new EventWidget.EndMouseOver.Handler() { + @Override + public void onEvent(final EventWidget.EndMouseOver event) { + ControlChromoPicker.this.callEvent(new EventValueChanged(ControlChromoPicker.this.getWidget(), null)); + } + }); + } + + @Override + public void onRenderBackground() { + super.onRenderBackground(); + final boolean selected = this.isMouseOver(); + final Texture text = selected ? this.Selected : this.Texture; + CraftGUI.Render.texture(text, IPoint.ZERO); + } + + @Override + public void getTooltip(final Tooltip tooltip) { + tooltip.add(Binnie.Genetics.getSystem(this.parent.getRoot()).getChromosomeName(this.type)); + } +} diff --git a/src/main/java/binnie/genetics/gui/ControlChromosome.java b/src/main/java/binnie/genetics/gui/ControlChromosome.java new file mode 100644 index 00000000..9f32fc4c --- /dev/null +++ b/src/main/java/binnie/genetics/gui/ControlChromosome.java @@ -0,0 +1,148 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.CraftGUI; +import forestry.api.lepidopterology.EnumButterflyChromosome; +import binnie.botany.api.EnumFlowerChromosome; +import forestry.api.arboriculture.EnumTreeChromosome; +import forestry.api.apiculture.EnumBeeChromosome; +import binnie.Binnie; +import binnie.craftgui.resource.minecraft.StandardTexture; +import binnie.core.texture.BinnieCoreTexture; +import binnie.craftgui.core.IWidget; +import forestry.api.genetics.ISpeciesRoot; +import binnie.craftgui.resource.Texture; +import forestry.api.genetics.IChromosomeType; +import binnie.craftgui.controls.core.IControlValue; +import binnie.craftgui.controls.core.Control; + +public class ControlChromosome extends Control implements IControlValue +{ + Texture BeeTexture; + Texture TreeTexture; + Texture MothTexture; + Texture FlowerTexture; + IChromosomeType chromo; + ISpeciesRoot species; + + public ControlChromosome(final IWidget parent, final float x, final float y) { + super(parent, x, y, 96.0f, 96.0f); + this.BeeTexture = new StandardTexture(0, 0, 96, 96, BinnieCoreTexture.GUIBreeding); + this.TreeTexture = new StandardTexture(96, 0, 96, 96, BinnieCoreTexture.GUIBreeding); + this.MothTexture = new StandardTexture(96, 96, 96, 96, BinnieCoreTexture.GUIBreeding); + this.FlowerTexture = new StandardTexture(0, 96, 96, 96, BinnieCoreTexture.GUIBreeding); + this.chromo = null; + this.species = null; + } + + public ISpeciesRoot getRoot() { + return this.species; + } + + public void setRoot(final ISpeciesRoot root) { + if (root != this.species) { + this.species = root; + this.deleteAllChildren(); + if (root == Binnie.Genetics.getBeeRoot()) { + new ControlChromoPicker(this, 28.0f, 47.0f, EnumBeeChromosome.SPECIES); + new ControlChromoPicker(this, 28.0f, 72.0f, EnumBeeChromosome.SPEED); + new ControlChromoPicker(this, 19.0f, 20.0f, EnumBeeChromosome.LIFESPAN); + new ControlChromoPicker(this, 55.0f, 65.0f, EnumBeeChromosome.FERTILITY); + new ControlChromoPicker(this, 28.0f, 1.0f, EnumBeeChromosome.TEMPERATURE_TOLERANCE); + new ControlChromoPicker(this, 61.0f, 37.0f, EnumBeeChromosome.NOCTURNAL); + new ControlChromoPicker(this, 81.0f, 76.0f, EnumBeeChromosome.HUMIDITY_TOLERANCE); + new ControlChromoPicker(this, 44.0f, 21.0f, EnumBeeChromosome.TOLERANT_FLYER); + new ControlChromoPicker(this, 3.0f, 37.0f, EnumBeeChromosome.CAVE_DWELLING); + new ControlChromoPicker(this, 4.0f, 65.0f, EnumBeeChromosome.FLOWER_PROVIDER); + new ControlChromoPicker(this, 83.0f, 27.0f, EnumBeeChromosome.FLOWERING); + new ControlChromoPicker(this, 71.0f, 10.0f, EnumBeeChromosome.TERRITORY); + new ControlChromoPicker(this, 84.0f, 54.0f, EnumBeeChromosome.EFFECT); + } + else if (root == Binnie.Genetics.getTreeRoot()) { + new ControlChromoPicker(this, 48.0f, 48.0f, EnumTreeChromosome.SPECIES); + new ControlChromoPicker(this, 43.0f, 12.0f, EnumTreeChromosome.GROWTH); + new ControlChromoPicker(this, 43.0f, 84.0f, EnumTreeChromosome.HEIGHT); + new ControlChromoPicker(this, 25.0f, 63.0f, EnumTreeChromosome.FERTILITY); + new ControlChromoPicker(this, 72.0f, 57.0f, EnumTreeChromosome.FRUITS); + new ControlChromoPicker(this, 21.0f, 43.0f, EnumTreeChromosome.YIELD); + new ControlChromoPicker(this, 38.0f, 32.0f, EnumTreeChromosome.PLANT); + new ControlChromoPicker(this, 15.0f, 17.0f, EnumTreeChromosome.SAPPINESS); + new ControlChromoPicker(this, 75.0f, 78.0f, EnumTreeChromosome.TERRITORY); + new ControlChromoPicker(this, 67.0f, 15.0f, EnumTreeChromosome.EFFECT); + new ControlChromoPicker(this, 70.0f, 34.0f, EnumTreeChromosome.MATURATION); + new ControlChromoPicker(this, 45.0f, 67.0f, EnumTreeChromosome.GIRTH); + new ControlChromoPicker(this, 5.0f, 70.0f, EnumTreeChromosome.FIREPROOF); + } + else if (root == Binnie.Genetics.getFlowerRoot()) { + new ControlChromoPicker(this, 35.0f, 81.0f, EnumFlowerChromosome.SPECIES); + new ControlChromoPicker(this, 36.0f, 28.0f, EnumFlowerChromosome.PRIMARY); + new ControlChromoPicker(this, 27.0f, 13.0f, EnumFlowerChromosome.SECONDARY); + new ControlChromoPicker(this, 47.0f, 15.0f, EnumFlowerChromosome.FERTILITY); + new ControlChromoPicker(this, 54.0f, 31.0f, EnumFlowerChromosome.TERRITORY); + new ControlChromoPicker(this, 15.0f, 55.0f, EnumFlowerChromosome.EFFECT); + new ControlChromoPicker(this, 23.0f, 38.0f, EnumFlowerChromosome.LIFESPAN); + new ControlChromoPicker(this, 17.0f, 77.0f, EnumFlowerChromosome.TEMPERATURE_TOLERANCE); + new ControlChromoPicker(this, 52.0f, 51.0f, EnumFlowerChromosome.HUMIDITY_TOLERANCE); + new ControlChromoPicker(this, 54.0f, 80.0f, EnumFlowerChromosome.PH_TOLERANCE); + new ControlChromoPicker(this, 41.0f, 42.0f, EnumFlowerChromosome.SAPPINESS); + new ControlChromoPicker(this, 37.0f, 63.0f, EnumFlowerChromosome.STEM); + } + else if (root == Binnie.Genetics.getButterflyRoot()) { + new ControlChromoPicker(this, 40.0f, 40.0f, EnumButterflyChromosome.SPECIES); + new ControlChromoPicker(this, 63.0f, 32.0f, EnumButterflyChromosome.SIZE); + new ControlChromoPicker(this, 32.0f, 63.0f, EnumButterflyChromosome.SPEED); + new ControlChromoPicker(this, 11.0f, 27.0f, EnumButterflyChromosome.LIFESPAN); + new ControlChromoPicker(this, 16.0f, 12.0f, EnumButterflyChromosome.METABOLISM); + new ControlChromoPicker(this, 17.0f, 63.0f, EnumButterflyChromosome.FERTILITY); + new ControlChromoPicker(this, 34.0f, 12.0f, EnumButterflyChromosome.TEMPERATURE_TOLERANCE); + new ControlChromoPicker(this, 22.0f, 46.0f, EnumButterflyChromosome.HUMIDITY_TOLERANCE); + new ControlChromoPicker(this, 53.0f, 26.0f, EnumButterflyChromosome.NOCTURNAL); + new ControlChromoPicker(this, 71.0f, 53.0f, EnumButterflyChromosome.TOLERANT_FLYER); + new ControlChromoPicker(this, 78.0f, 12.0f, EnumButterflyChromosome.FIRE_RESIST); + new ControlChromoPicker(this, 55.0f, 55.0f, EnumButterflyChromosome.FLOWER_PROVIDER); + new ControlChromoPicker(this, 27.0f, 31.0f, EnumButterflyChromosome.EFFECT); + new ControlChromoPicker(this, 87.0f, 45.0f, EnumButterflyChromosome.TERRITORY); + } + } + } + + @Override + public IChromosomeType getValue() { + return this.chromo; + } + + @Override + public void setValue(final IChromosomeType value) { + this.chromo = value; + } + + @Override + public void onRenderBackground() { + if (this.species == null) { + return; + } + super.onRenderBackground(); + final Texture text = this.getTypeTexture(); + CraftGUI.Render.texture(text, IPoint.ZERO); + } + + private Texture getTypeTexture() { + if (this.species == Binnie.Genetics.getBeeRoot()) { + return this.BeeTexture; + } + if (this.species == Binnie.Genetics.getTreeRoot()) { + return this.TreeTexture; + } + if (this.species == Binnie.Genetics.getButterflyRoot()) { + return this.MothTexture; + } + if (this.species == Binnie.Genetics.getFlowerRoot()) { + return this.FlowerTexture; + } + return null; + } +} diff --git a/src/main/java/binnie/genetics/gui/ControlGenesisOption.java b/src/main/java/binnie/genetics/gui/ControlGenesisOption.java new file mode 100644 index 00000000..e795229b --- /dev/null +++ b/src/main/java/binnie/genetics/gui/ControlGenesisOption.java @@ -0,0 +1,36 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.controls.listbox.ControlList; +import binnie.core.genetics.Gene; +import binnie.craftgui.controls.listbox.ControlOption; + +public class ControlGenesisOption extends ControlOption +{ + public ControlGenesisOption(final ControlList parent, final Gene gene, final int y) { + super(parent, gene, y); + } + + String getAlleleName() { + return this.getValue().getAlleleName(); + } + + String getChromosomeName() { + return this.getValue().getShortChromosomeName(); + } + + @Override + public void onRenderBackground() { + super.onRenderBackground(); + CraftGUI.Render.text(new IArea(0.0f, 0.0f, 70.0f, 22.0f), TextJustification.MiddleCenter, this.getChromosomeName(), this.getColour()); + CraftGUI.Render.text(new IArea(75.0f, 0.0f, 80.0f, 22.0f), TextJustification.MiddleCenter, this.getAlleleName(), this.getColour()); + CraftGUI.Render.solid(new IArea(70.0f, 2.0f, 1.0f, 16.0f), -16777216 + this.getColour()); + + } +} diff --git a/src/main/java/binnie/genetics/gui/ControlIndividualDisplay.java b/src/main/java/binnie/genetics/gui/ControlIndividualDisplay.java new file mode 100644 index 00000000..c0be4a1a --- /dev/null +++ b/src/main/java/binnie/genetics/gui/ControlIndividualDisplay.java @@ -0,0 +1,42 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import net.minecraft.item.ItemStack; +import forestry.api.genetics.AlleleManager; +import binnie.craftgui.core.Tooltip; +import binnie.core.genetics.BreedingSystem; +import binnie.Binnie; +import forestry.api.genetics.IIndividual; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.minecraft.control.ControlItemDisplay; + +public class ControlIndividualDisplay extends ControlItemDisplay implements ITooltip +{ + public ControlIndividualDisplay(final IWidget parent, final float x, final float y, final IIndividual ind) { + this(parent, x, y, 16.0f, ind); + } + + public ControlIndividualDisplay(final IWidget parent, final float x, final float y, final float size, final IIndividual ind) { + super(parent, x, y, size); + final BreedingSystem system = Binnie.Genetics.getSystem(ind.getGenome().getSpeciesRoot()); + this.setItemStack(system.getSpeciesRoot().getMemberStack(ind, system.getDefaultType())); + this.setTooltip(); + } + + @Override + public void getTooltip(final Tooltip tooltip) { + final ItemStack stack = this.getItemStack(); + if (stack == null) { + return; + } + final IIndividual ind = AlleleManager.alleleRegistry.getIndividual(stack); + if (ind == null) { + return; + } + tooltip.add(ind.getGenome().getPrimary().getName()); + } +} diff --git a/src/main/java/binnie/genetics/gui/ControlToleranceBar.java b/src/main/java/binnie/genetics/gui/ControlToleranceBar.java new file mode 100644 index 00000000..3b0bea57 --- /dev/null +++ b/src/main/java/binnie/genetics/gui/ControlToleranceBar.java @@ -0,0 +1,78 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import binnie.core.genetics.Tolerance; +import forestry.api.genetics.EnumTolerance; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.geometry.IBorder; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.Tooltip; +import forestry.api.core.EnumTemperature; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.IWidget; +import java.util.EnumSet; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +public abstract class ControlToleranceBar> extends Control implements ITooltip +{ + private Class enumClass; + EnumSet tolerated; + EnumSet fullSet; + + public ControlToleranceBar(final IWidget parent, final float x, final float y, final float width, final float height, final Class clss) { + super(parent, x, y, width, height); + this.addAttribute(Attribute.MouseOver); + this.enumClass = clss; + this.tolerated = EnumSet.noneOf(this.enumClass); + this.fullSet = EnumSet.allOf(this.enumClass); + if (this.enumClass == EnumTemperature.class) { + this.fullSet.remove(EnumTemperature.NONE); + } + } + + @Override + public void getTooltip(final Tooltip list) { + final int types = this.fullSet.size(); + final int type = (int) ((int) this.getRelativeMousePosition().x() / (this.getSize().x() / types)); + for (final T tol : this.fullSet) { + if (tol.ordinal() - ((this.enumClass == EnumTemperature.class) ? 1 : 0) == type) { + list.add((this.tolerated.contains(tol) ? "" : "§8") + this.getName(tol)); + } + } + } + + protected abstract String getName(final T p0); + + protected abstract int getColour(final T p0); + + @Override + public void onRenderBackground() { + CraftGUI.Render.gradientRect(this.getArea(), -1431655766, -1431655766); + final float w = this.getArea().w() / this.fullSet.size(); + int t = 0; + for (final T value : this.fullSet) { + final int col = (this.tolerated.contains(value) ? -16777216 : 855638016) + this.getColour(value); + final IBorder inset = new IBorder(this.tolerated.contains(value) ? 1.0f : 3.0f); + CraftGUI.Render.gradientRect(new IArea(w * t, 0.0f, w, this.h()).inset(inset), col, col); + ++t; + } + } + + public void setValues(final T value, final EnumTolerance enumTol) { + this.tolerated.clear(); + final Tolerance tol = Tolerance.get(enumTol); + for (final T full : this.fullSet) { + if (full.ordinal() > value.ordinal() + tol.getBounds()[1]) { + continue; + } + if (full.ordinal() < value.ordinal() + tol.getBounds()[0]) { + continue; + } + this.tolerated.add(full); + } + } +} diff --git a/src/main/java/binnie/genetics/gui/ControlTooltip.java b/src/main/java/binnie/genetics/gui/ControlTooltip.java new file mode 100644 index 00000000..b03b34bb --- /dev/null +++ b/src/main/java/binnie/genetics/gui/ControlTooltip.java @@ -0,0 +1,21 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.controls.core.Control; + +public class ControlTooltip extends Control implements ITooltip +{ + public ControlTooltip(final IWidget parent, final float x, final float y, final float w, final float h) { + super(parent, x, y, w, h); + } + + @Override + public void getTooltip(final Tooltip tooltip) { + } +} diff --git a/src/main/java/binnie/genetics/gui/WindowAnalyst.java b/src/main/java/binnie/genetics/gui/WindowAnalyst.java new file mode 100644 index 00000000..a5f779eb --- /dev/null +++ b/src/main/java/binnie/genetics/gui/WindowAnalyst.java @@ -0,0 +1,485 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.gui; + +import forestry.api.genetics.AlleleManager; +import forestry.api.lepidopterology.IButterfly; +import binnie.botany.api.IFlower; +import forestry.api.apiculture.IBee; +import forestry.api.arboriculture.ITree; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.events.EventKey; +import binnie.craftgui.minecraft.control.ControlPlayerInventory; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.controls.scroll.ControlScrollBar; +import binnie.craftgui.minecraft.MinecraftGUI; +import binnie.craftgui.minecraft.InventoryType; +import binnie.craftgui.minecraft.control.ControlSlot; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.events.EventMouse; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.Widget; +import forestry.api.genetics.IBreedingTracker; +import binnie.Binnie; +import binnie.genetics.machine.ModuleMachine; +import binnie.genetics.item.GeneticsItems; +import binnie.genetics.machine.Analyser; +import net.minecraft.item.ItemStack; +import binnie.core.machines.inventory.SlotValidator; +import binnie.genetics.Genetics; +import binnie.core.AbstractMod; +import java.util.ArrayList; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.inventory.IInventory; +import net.minecraft.entity.player.EntityPlayer; +import binnie.core.genetics.BreedingSystem; +import forestry.api.genetics.IIndividual; +import binnie.craftgui.minecraft.control.ControlSlide; +import binnie.craftgui.core.geometry.IArea; +import java.util.List; +import binnie.craftgui.window.Panel; +import binnie.craftgui.controls.core.Control; +import binnie.craftgui.controls.scroll.ControlScrollableContent; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.minecraft.Window; + +public class WindowAnalyst extends Window +{ + IWidget baseWidget; + ControlScrollableContent leftPage; + ControlScrollableContent rightPage; + Control tabBar; + Panel analystPanel; + List analystPages; + IArea analystPageSize; + boolean isDatabase; + boolean isMaster; + boolean lockedSearch; + private Control analystNone; + private ControlSlide slideUpInv; + IIndividual current; + BreedingSystem currentSystem; + + public WindowAnalyst(final EntityPlayer player, final IInventory inventory, final Side side, final boolean database, final boolean master) { + super(312.0f, 230.0f, player, inventory, side); + this.baseWidget = null; + this.tabBar = null; + this.analystPages = new ArrayList(); + this.analystPageSize = null; + this.isDatabase = false; + this.isMaster = false; + this.lockedSearch = false; + this.current = null; + this.currentSystem = null; + this.isDatabase = database; + this.isMaster = master; + this.lockedSearch = this.isDatabase; + } + + @Override + protected AbstractMod getMod() { + return Genetics.instance; + } + + @Override + protected String getName() { + return "Analyst"; + } + + private void setupValidators() { + if (!this.isDatabase) { + this.getWindowInventory().setValidator(0, new SlotValidator.Individual() { + @Override + public boolean isValid(final ItemStack itemStack) { + return Analyser.isAnalysed(itemStack) || (Analyser.isAnalysable(itemStack) && WindowAnalyst.this.getWindowInventory().getStackInSlot(1) != null); + } + }); + this.getWindowInventory().setValidator(1, new SlotValidator.Item(GeneticsItems.DNADye.get(1), ModuleMachine.IconDye)); + } + } + + @Override + public void initialiseServer() { + for (final BreedingSystem system : Binnie.Genetics.getActiveSystems()) { + final IBreedingTracker tracker = system.getSpeciesRoot().getBreedingTracker(this.getWorld(), this.getUsername()); + if (tracker != null) { + tracker.synchToPlayer(this.getPlayer()); + } + } + this.setupValidators(); + } + + @Override + public void initialiseClient() { + this.setTitle(this.isDatabase ? (this.isMaster ? "Master Registry" : "Registry") : "Analyst"); + final BreedingSystem system = Binnie.Genetics.beeBreedingSystem; + final IIndividual ind = system.getDefaultIndividual(); + final ItemStack stack = system.getSpeciesRoot().getMemberStack(ind, system.getDefaultType()); + this.getWindowInventory().createSlot(0); + this.baseWidget = new Widget(this); + int x = 16; + final int y = 28; + if (this.isDatabase) { + for (final BreedingSystem syst : Binnie.Genetics.getActiveSystems()) { + new Control(this, x, y, 20.0f, 20.0f) { + @Override + public void initialise() { + this.addAttribute(Attribute.MouseOver); + this.addSelfEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + WindowAnalyst.this.setSystem(syst); + } + }); + } + + @Override + public void getTooltip(final Tooltip tooltip) { + tooltip.add(syst.getName()); + } + + @Override + public void onRenderBackground() { + CraftGUI.Render.colour(syst.getColour()); + final int outset = (WindowAnalyst.this.getSystem() == syst) ? 1 : 0; + CraftGUI.Render.texture(CraftGUITexture.TabOutline, this.getArea().outset(outset)); + if (WindowAnalyst.this.getSystem() == syst) { + CraftGUI.Render.colour(1140850688 + syst.getColour()); + CraftGUI.Render.texture(CraftGUITexture.TabSolid, this.getArea().outset(outset)); + } + CraftGUI.Render.item(new IPoint(2.0f, 2.0f), syst.getItemStackRepresentitive()); + } + }; + x += 22; + } + } + else { + new ControlSlot(this, x, y + 1).assign(InventoryType.Window, 0); + x += 22; + new ControlSlot(this, x, y + 1).assign(InventoryType.Window, 1); + x += 26; + this.setupValidators(); + } + this.tabBar = new Control(this, x, 28.0f, this.w() - 16.0f - x, 20.0f); + this.analystPanel = new Panel(this, 16.0f, 54.0f, 280.0f, 164.0f, MinecraftGUI.PanelType.Outline) { + @Override + public void onRenderBackground() { + CraftGUI.Render.gradientRect(this.getArea(), 1157627903, 1728053247); + super.onRenderBackground(); + } + + @Override + public void initialise() { + this.setColour(4473924); + final float sectionWidth = (this.w() - 8.0f - 4.0f) / 2.0f; + WindowAnalyst.this.leftPage = new ControlScrollableContent(this, 3.0f, 3.0f, sectionWidth + 2.0f, this.h() - 8.0f + 2.0f, 0.0f) { + @Override + public void onRenderBackground() { + if (this.getContent() == null) { + return; + } + CraftGUI.Render.colour(this.getContent().getColour()); + CraftGUI.Render.texture(CraftGUITexture.TabOutline, this.getArea()); + } + }; + new ControlScrollBar(this, sectionWidth + 2.0f - 3.0f, 6.0f, 3.0f, this.h() - 8.0f + 2.0f - 6.0f, WindowAnalyst.this.leftPage) { + @Override + public void onRenderBackground() { + if (!this.isEnabled()) { + return; + } + if (WindowAnalyst.this.leftPage.getContent() == null) { + return; + } + CraftGUI.Render.gradientRect(this.getArea(), 1140850688 + WindowAnalyst.this.leftPage.getContent().getColour(), 1140850688 + WindowAnalyst.this.leftPage.getContent().getColour()); + CraftGUI.Render.solid(this.getRenderArea(), WindowAnalyst.this.leftPage.getContent().getColour()); + } + }; + WindowAnalyst.this.rightPage = new ControlScrollableContent(this, 3.0f + sectionWidth + 4.0f, 3.0f, sectionWidth + 2.0f, this.h() - 8.0f + 2.0f, 0.0f) { + @Override + public void onRenderBackground() { + if (this.getContent() == null) { + return; + } + CraftGUI.Render.colour(this.getContent().getColour()); + CraftGUI.Render.texture(CraftGUITexture.TabOutline, this.getArea()); + } + }; + new ControlScrollBar(this, sectionWidth + 2.0f - 3.0f + sectionWidth + 4.0f, 6.0f, 3.0f, this.h() - 8.0f + 2.0f - 6.0f, WindowAnalyst.this.rightPage) { + @Override + public void onRenderBackground() { + if (!this.isEnabled()) { + return; + } + if (WindowAnalyst.this.rightPage.getContent() == null) { + return; + } + CraftGUI.Render.gradientRect(this.getArea(), 1140850688 + WindowAnalyst.this.rightPage.getContent().getColour(), 1140850688 + WindowAnalyst.this.rightPage.getContent().getColour()); + CraftGUI.Render.solid(this.getRenderArea(), WindowAnalyst.this.rightPage.getContent().getColour()); + } + }; + WindowAnalyst.this.analystPageSize = new IArea(1.0f, 1.0f, sectionWidth, this.h() - 8.0f); + } + }; + if (!this.isDatabase) { + this.slideUpInv = new ControlSlide(this, (this.getSize().x() - 244.0f) / 2.0f, this.getSize().y() - 80.0f + 1.0f, 244.0f, 80.0f, Position.Bottom); + new ControlPlayerInventory(this.slideUpInv, true); + this.slideUpInv.setSlide(false); + } + this.addEventHandler(new EventKey.Down.Handler() { + @Override + public void onEvent(final EventKey.Down event) { + if (event.getKey() == 205) { + WindowAnalyst.this.shiftPages(true); + } + if (event.getKey() == 203) { + WindowAnalyst.this.shiftPages(false); + } + } + }); + if (!this.isDatabase) { + this.analystNone = new Control(this.analystPanel, 0.0f, 0.0f, this.analystPanel.w(), this.analystPanel.h()) { + @Override + public void initialise() { + new ControlTextCentered(this, 20.0f, "Add a bee, tree, flower or butterfly to the top left slot. DNA Dye is required if it has not been analysed yet. This dye can also convert vanilla items to breedable individuals.").setColour(4473924); + new ControlPlayerInventory(this); + } + }; + } + this.setIndividual(null); + this.setSystem(Binnie.Genetics.beeBreedingSystem); + } + + public void setIndividual(final IIndividual ind) { + if (!this.isDatabase) { + if (ind == null) { + this.analystNone.show(); + this.slideUpInv.hide(); + } + else { + this.analystNone.hide(); + this.slideUpInv.show(); + } + } + if (ind == this.current || (ind != null && this.current != null && ind.isGeneticEqual(this.current))) { + return; + } + final boolean systemChange = (this.current = ind) != null && ind.getGenome().getSpeciesRoot() != this.getSystem().getSpeciesRoot(); + if (systemChange) { + this.currentSystem = Binnie.Genetics.getSystem(ind.getGenome().getSpeciesRoot()); + } + this.updatePages(systemChange); + } + + public void setSystem(final BreedingSystem system) { + if (system == this.currentSystem) { + return; + } + this.currentSystem = system; + this.current = null; + this.updatePages(true); + } + + public void updatePages(final boolean systemChange) { + int oldLeft = -1; + int oldRight = -1; + if (!systemChange) { + oldLeft = this.analystPages.indexOf(this.leftPage.getContent()); + oldRight = this.analystPages.indexOf(this.rightPage.getContent()); + } + ControlAnalystPage databasePage = null; + if (this.isDatabase && !systemChange) { + databasePage = ((this.analystPages.size() > 0) ? this.analystPages.get(0) : null); + } + this.analystPages.clear(); + this.setPage(this.leftPage, null); + this.setPage(this.rightPage, null); + if (this.isDatabase) { + this.analystPages.add((databasePage != null) ? databasePage : new AnalystPageDatabase(this.analystPanel, this.analystPageSize, this.currentSystem, this.isMaster)); + } + if (this.current != null) { + this.analystPages.add(new AnalystPageDescription(this.analystPanel, this.analystPageSize, this.current)); + this.analystPages.add(new AnalystPageGenome(this.analystPanel, this.analystPageSize, true, this.current)); + if (!this.isDatabase) { + this.analystPages.add(new AnalystPageGenome(this.analystPanel, this.analystPageSize, false, this.current)); + this.analystPages.add(new AnalystPageKaryogram(this.analystPanel, this.analystPageSize, this.current)); + } + if (!(this.current instanceof ITree)) { + this.analystPages.add(new AnalystPageClimate(this.analystPanel, this.analystPageSize, this.current)); + } + if (this.current instanceof IBee) { + this.analystPages.add(new AnalystPageProducts(this.analystPanel, this.analystPageSize, (IBee) this.current)); + } + else if (this.current instanceof ITree) { + this.analystPages.add(new AnalystPageFruit(this.analystPanel, this.analystPageSize, (ITree) this.current)); + this.analystPages.add(new AnalystPageWood(this.analystPanel, this.analystPageSize, (ITree) this.current)); + } + else if (this.current instanceof IFlower) { + this.analystPages.add(new AnalystPageSoil(this.analystPanel, this.analystPageSize, (IFlower) this.current)); + } + else if (this.current instanceof IButterfly) { + this.analystPages.add(new AnalystPageSpecimen(this.analystPanel, this.analystPageSize, (IButterfly) this.current)); + } + this.analystPages.add(new AnalystPageBiology(this.analystPanel, this.analystPageSize, this.current)); + if (this.current instanceof IBee || this.current instanceof IButterfly) { + this.analystPages.add(new AnalystPageBehaviour(this.analystPanel, this.analystPageSize, this.current)); + } + else if (this.current instanceof ITree) { + this.analystPages.add(new AnalystPageGrowth(this.analystPanel, this.analystPageSize, this.current)); + } + else if (this.current instanceof IFlower) { + this.analystPages.add(new AnalystPageAppearance(this.analystPanel, this.analystPageSize, (IFlower) this.current)); + } + this.analystPages.add(new AnalystPageMutations(this.analystPanel, this.analystPageSize, this.current, this.isMaster)); + } + this.tabBar.deleteAllChildren(); + final float width = this.tabBar.w() / this.analystPages.size(); + float x = 0.0f; + for (final ControlAnalystPage page : this.analystPages) { + new ControlTooltip(this.tabBar, x, 0.0f, width, this.tabBar.h()) { + ControlAnalystPage value; + + @Override + public void getTooltip(final Tooltip tooltip) { + tooltip.add(this.value.getTitle()); + } + + @Override + protected void initialise() { + super.initialise(); + this.addAttribute(Attribute.MouseOver); + this.value = page; + this.addSelfEventHandler(new EventMouse.Down.Handler() { + @Override + public void onEvent(final EventMouse.Down event) { + final int currentIndex = WindowAnalyst.this.analystPages.indexOf(WindowAnalyst.this.rightPage.getContent()); + int clickedIndex = WindowAnalyst.this.analystPages.indexOf(value); + if (WindowAnalyst.this.isDatabase) { + if (clickedIndex != 0 && clickedIndex != currentIndex) { + WindowAnalyst.this.setPage(WindowAnalyst.this.rightPage, value); + } + } + else { + if (clickedIndex < 0) { + clickedIndex = 0; + } + if (clickedIndex < currentIndex) { + ++clickedIndex; + } + WindowAnalyst.this.setPage(WindowAnalyst.this.rightPage, null); + WindowAnalyst.this.setPage(WindowAnalyst.this.leftPage, null); + WindowAnalyst.this.setPage(WindowAnalyst.this.rightPage, WindowAnalyst.this.analystPages.get(clickedIndex)); + WindowAnalyst.this.setPage(WindowAnalyst.this.leftPage, WindowAnalyst.this.analystPages.get(clickedIndex - 1)); + } + } + }); + } + + @Override + public void onRenderBackground() { + final boolean active = this.value == WindowAnalyst.this.leftPage.getContent() || this.value == WindowAnalyst.this.rightPage.getContent(); + CraftGUI.Render.colour((active ? -16777216 : 1140850688) + this.value.getColour()); + CraftGUI.Render.texture(CraftGUITexture.TabSolid, this.getArea().inset(1)); + CraftGUI.Render.colour(this.value.getColour()); + CraftGUI.Render.texture(CraftGUITexture.TabOutline, this.getArea().inset(1)); + super.onRenderBackground(); + } + }; + x += width; + } + if (this.analystPages.size() > 0) { + this.setPage(this.leftPage, this.analystPages.get((oldLeft >= 0) ? oldLeft : 0)); + } + if (this.analystPages.size() > 1) { + this.setPage(this.rightPage, this.analystPages.get((oldRight >= 0) ? oldRight : 1)); + } + } + + public void shiftPages(final boolean right) { + if (this.analystPages.size() < 2) { + return; + } + final int leftIndex = this.analystPages.indexOf(this.leftPage.getContent()); + final int rightIndex = this.analystPages.indexOf(this.rightPage.getContent()); + if (right && rightIndex + 1 >= this.analystPages.size()) { + return; + } + if (!this.lockedSearch && !right && leftIndex <= 0) { + return; + } + if (!this.lockedSearch && !right && rightIndex <= 1) { + return; + } + final int newRightIndex = rightIndex + (right ? 1 : -1); + final int newLeftIndex = this.lockedSearch ? 0 : (newRightIndex - 1); + float oldRightPercent = 0.0f; + float oldLeftPercent = 0.0f; + if (newLeftIndex == rightIndex) { + oldRightPercent = this.rightPage.getPercentageIndex(); + } + if (newRightIndex == leftIndex) { + oldLeftPercent = this.leftPage.getPercentageIndex(); + } + this.setPage(this.leftPage, null); + this.setPage(this.rightPage, null); + this.setPage(this.leftPage, this.analystPages.get(newLeftIndex)); + this.setPage(this.rightPage, this.analystPages.get(newRightIndex)); + this.analystPages.get(newLeftIndex).show(); + if (oldRightPercent != 0.0f) { + this.leftPage.setPercentageIndex(oldRightPercent); + } + if (oldLeftPercent != 0.0f) { + this.rightPage.setPercentageIndex(oldLeftPercent); + } + } + + public void setPage(final ControlScrollableContent side, final ControlAnalystPage page) { + final ControlAnalystPage existingPage = (ControlAnalystPage) side.getContent(); + if (existingPage != null) { + existingPage.hide(); + side.setScrollableContent(null); + } + if (page != null) { + page.show(); + side.setScrollableContent(page); + side.setPercentageIndex(0.0f); + page.setPosition(side.pos().add(1.0f, 1.0f)); + } + } + + @Override + public void onWindowInventoryChanged() { + super.onWindowInventoryChanged(); + if (this.getWindowInventory().getStackInSlot(0) != null && !Analyser.isAnalysed(this.getWindowInventory().getStackInSlot(0))) { + this.getWindowInventory().setInventorySlotContents(0, Analyser.analyse(this.getWindowInventory().getStackInSlot(0))); + this.getWindowInventory().decrStackSize(1, 1); + } + final IIndividual ind = AlleleManager.alleleRegistry.getIndividual(this.getWindowInventory().getStackInSlot(0)); + if (ind != null) { + ind.getGenome().getSpeciesRoot().getBreedingTracker(this.getWorld(), this.getUsername()).registerBirth(ind); + } + if (this.isClient()) { + this.setStack(this.getWindowInventory().getStackInSlot(0)); + } + else if (this.isServer()) { + } + } + + public void setStack(final ItemStack stack) { + final IIndividual ind = AlleleManager.alleleRegistry.getIndividual(stack); + this.setIndividual(ind); + } + + public IIndividual getIndividual() { + return this.current; + } + + public BreedingSystem getSystem() { + return this.currentSystem; + } +} diff --git a/src/main/java/binnie/genetics/item/GeneticLiquid.java b/src/main/java/binnie/genetics/item/GeneticLiquid.java new file mode 100644 index 00000000..8a7b43d1 --- /dev/null +++ b/src/main/java/binnie/genetics/item/GeneticLiquid.java @@ -0,0 +1,90 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.item; + +import binnie.core.liquid.FluidContainer; +import binnie.Binnie; +import net.minecraftforge.fluids.FluidStack; +import binnie.genetics.Genetics; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import binnie.core.liquid.IFluidType; + +public enum GeneticLiquid implements IFluidType +{ + GrowthMedium("Growth Medium", "growthMedium", 15460533), + Bacteria("Bacteria", "bacteria", 14203521), + BacteriaPoly("Polymerising Bacteria", "bacteriaPoly", 11443396), + RawDNA("Raw DNA", "dna.raw", 15089129), + BacteriaVector("Bacteria Vector", "bacteriaVector", 15960958); + + String name; + String ident; + IIcon icon; + int colour; + float transparency; + + private GeneticLiquid(final String name, final String ident, final int colour) { + this.name = name; + this.ident = ident; + this.colour = colour; + this.transparency = 1.0f; + } + + @Override + public String toString() { + return this.name; + } + + @Override + public IIcon getIcon() { + return this.icon; + } + + @Override + public void registerIcon(final IIconRegister register) { + this.icon = Genetics.proxy.getIcon(register, "liquids/" + this.ident); + } + + @Override + public String getName() { + return this.name; + } + + @Override + public String getIdentifier() { + return "binnie." + this.ident; + } + + @Override + public int getColour() { + return 16777215; + } + + @Override + public int getContainerColour() { + return this.colour; + } + + @Override + public FluidStack get(final int amount) { + return Binnie.Liquid.getLiquidStack(this.getIdentifier(), amount); + } + + @Override + public int getTransparency() { + return 0; + } + + @Override + public boolean canPlaceIn(final FluidContainer container) { + return this == GeneticLiquid.GrowthMedium || container == FluidContainer.Cylinder; + } + + @Override + public boolean showInCreative(final FluidContainer container) { + return container == FluidContainer.Cylinder; + } +} diff --git a/src/main/java/binnie/genetics/item/GeneticsItems.java b/src/main/java/binnie/genetics/item/GeneticsItems.java new file mode 100644 index 00000000..a2d1fc70 --- /dev/null +++ b/src/main/java/binnie/genetics/item/GeneticsItems.java @@ -0,0 +1,66 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.item; + +import java.util.List; +import binnie.genetics.Genetics; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import binnie.core.item.IItemMisc; + +public enum GeneticsItems implements IItemMisc +{ + LaboratoryCasing("Reinforced Casing", "casingIron"), + DNADye("DNA Dye", "dnaDye"), + FluorescentDye("Fluorescent Dye", "dyeFluor"), + Enzyme("Enzyme", "enzyme"), + GrowthMedium("Growth Medium", "growthMedium"), + EmptySequencer("Blank Sequence", "sequencerEmpty"), + EmptySerum("Empty Serum Vial", "serumEmpty"), + EmptyGenome("Empty Serum Array", "genomeEmpty"), + Cylinder("Glass Cylinder", "cylinderEmpty"), + IntegratedCircuit("Integrated Circuit Board", "integratedCircuit"), + IntegratedCPU("Integrated CPU", "integratedCPU"), + IntegratedCasing("Integrated Casing", "casingCircuit"); + + IIcon icon; + String name; + String iconPath; + + private GeneticsItems(final String name, final String iconPath) { + this.name = name; + this.iconPath = iconPath; + } + + @Override + public IIcon getIcon(final ItemStack stack) { + return this.icon; + } + + @Override + public void registerIcons(final IIconRegister register) { + this.icon = Genetics.proxy.getIcon(register, this.iconPath); + } + + @Override + public void addInformation(final List par3List) { + } + + @Override + public String getName(final ItemStack stack) { + return this.name; + } + + @Override + public ItemStack get(final int size) { + return (Genetics.itemGenetics == null) ? null : new ItemStack(Genetics.itemGenetics, size, this.ordinal()); + } + + @Override + public boolean isActive() { + return true; + } +} diff --git a/src/main/java/binnie/genetics/item/ItemAnalyst.java b/src/main/java/binnie/genetics/item/ItemAnalyst.java new file mode 100644 index 00000000..6aab77aa --- /dev/null +++ b/src/main/java/binnie/genetics/item/ItemAnalyst.java @@ -0,0 +1,42 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.item; + +import binnie.genetics.core.GeneticsGUI; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import net.minecraft.item.ItemStack; +import binnie.genetics.CreativeTabGenetics; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.genetics.Genetics; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.Item; + +public class ItemAnalyst extends Item +{ + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.itemIcon = Genetics.proxy.getIcon(register, "analyst"); + } + + public ItemAnalyst() { + this.setCreativeTab(CreativeTabGenetics.instance); + this.setUnlocalizedName("analyst"); + this.setMaxStackSize(1); + } + + @Override + public ItemStack onItemRightClick(final ItemStack itemstack, final World world, final EntityPlayer player) { + Genetics.proxy.openGui(GeneticsGUI.Analyst, player, (int) player.posX, (int) player.posY, (int) player.posZ); + return itemstack; + } + + @Override + public String getItemStackDisplayName(final ItemStack i) { + return "Analyst"; + } +} diff --git a/src/main/java/binnie/genetics/item/ItemDatabase.java b/src/main/java/binnie/genetics/item/ItemDatabase.java new file mode 100644 index 00000000..5856d9ca --- /dev/null +++ b/src/main/java/binnie/genetics/item/ItemDatabase.java @@ -0,0 +1,72 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.item; + +import binnie.genetics.core.GeneticsGUI; +import net.minecraft.world.World; +import binnie.genetics.CreativeTabGenetics; +import net.minecraft.creativetab.CreativeTabs; +import java.util.List; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.genetics.Genetics; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraft.item.Item; + +public class ItemDatabase extends Item +{ + IIcon iconMaster; + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.itemIcon = Genetics.proxy.getIcon(register, "geneDatabase"); + this.iconMaster = Genetics.proxy.getIcon(register, "masterGeneDatabase"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(final int par1) { + return (par1 == 0) ? this.itemIcon : this.iconMaster; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(final ItemStack par1ItemStack, final EntityPlayer par2EntityPlayer, final List par3List, final boolean par4) { + super.addInformation(par1ItemStack, par2EntityPlayer, par3List, par4); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(final Item par1, final CreativeTabs par2CreativeTabs, final List par3List) { + super.getSubItems(par1, par2CreativeTabs, par3List); + par3List.add(new ItemStack(par1, 1, 1)); + } + + public ItemDatabase() { + this.setCreativeTab(CreativeTabGenetics.instance); + this.setUnlocalizedName("database"); + this.setMaxStackSize(1); + } + + @Override + public ItemStack onItemRightClick(final ItemStack itemstack, final World world, final EntityPlayer player) { + if (itemstack.getItemDamage() == 0) { + Genetics.proxy.openGui(GeneticsGUI.Database, player, (int) player.posX, (int) player.posY, (int) player.posZ); + } + else { + Genetics.proxy.openGui(GeneticsGUI.DatabaseNEI, player, (int) player.posX, (int) player.posY, (int) player.posZ); + } + return itemstack; + } + + @Override + public String getItemStackDisplayName(final ItemStack i) { + return (i.getItemDamage() == 0) ? "Gene Database" : "Master Gene Database"; + } +} diff --git a/src/main/java/binnie/genetics/item/ItemGene.java b/src/main/java/binnie/genetics/item/ItemGene.java new file mode 100644 index 00000000..c379f9d8 --- /dev/null +++ b/src/main/java/binnie/genetics/item/ItemGene.java @@ -0,0 +1,103 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.item; + +import net.minecraft.creativetab.CreativeTabs; +import java.util.List; +import net.minecraft.entity.player.EntityPlayer; +import binnie.genetics.genetics.IGeneItem; +import net.minecraft.item.ItemStack; +import binnie.genetics.CreativeTabGenetics; +import binnie.genetics.Genetics; +import net.minecraft.client.renderer.texture.IIconRegister; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.IIcon; +import net.minecraft.item.Item; + +public abstract class ItemGene extends Item +{ + IIcon[] icons; + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamageForRenderPass(final int damage, final int pass) { + return this.icons[pass]; + } + + @Override + public boolean getShareTag() { + return true; + } + + @Override + public boolean isRepairable() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.icons[0] = Genetics.proxy.getIcon(register, "machines/serum.glass"); + this.icons[1] = Genetics.proxy.getIcon(register, "machines/serum.cap"); + this.icons[2] = Genetics.proxy.getIcon(register, "machines/serum.edges"); + this.icons[3] = Genetics.proxy.getIcon(register, "machines/serum.dna"); + } + + @Override + public int getRenderPasses(final int metadata) { + return 4; + } + + public ItemGene(final String unlocName) { + this.icons = new IIcon[4]; + this.setMaxStackSize(1); + this.setMaxDamage(16); + this.setUnlocalizedName(unlocName); + this.setCreativeTab(CreativeTabGenetics.instance); + } + + @Override + public int getColorFromItemStack(final ItemStack itemstack, final int j) { + final IGeneItem gene = this.getGeneItem(itemstack); + return gene.getColour(j); + } + + public int getCharges(final ItemStack stack) { + return (stack == null) ? 0 : (stack.getItem().getMaxDamage() - stack.getItemDamage()); + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(final ItemStack itemstack, final EntityPlayer entityPlayer, final List list, final boolean par4) { + super.addInformation(itemstack, entityPlayer, list, par4); + final int damage = this.getMaxDamage() - itemstack.getItemDamage(); + if (damage == 0) { + list.add("Empty"); + } + else if (damage == 1) { + list.add("1 Charge"); + } + else { + list.add(damage + " Charges"); + } + final IGeneItem gene = this.getGeneItem(itemstack); + gene.getInfo(list); + } + + @Override + public abstract String getItemStackDisplayName(final ItemStack p0); + + @Override + public void getSubItems(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + } + + @Override + public boolean requiresMultipleRenderPasses() { + return true; + } + + public abstract IGeneItem getGeneItem(final ItemStack p0); +} diff --git a/src/main/java/binnie/genetics/item/ItemMasterRegistry.java b/src/main/java/binnie/genetics/item/ItemMasterRegistry.java new file mode 100644 index 00000000..fc025b60 --- /dev/null +++ b/src/main/java/binnie/genetics/item/ItemMasterRegistry.java @@ -0,0 +1,42 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.item; + +import binnie.genetics.core.GeneticsGUI; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import net.minecraft.item.ItemStack; +import binnie.genetics.CreativeTabGenetics; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.genetics.Genetics; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.Item; + +public class ItemMasterRegistry extends Item +{ + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.itemIcon = Genetics.proxy.getIcon(register, "masterRegistry"); + } + + public ItemMasterRegistry() { + this.setCreativeTab(CreativeTabGenetics.instance); + this.setUnlocalizedName("masterRegistry"); + this.setMaxStackSize(1); + } + + @Override + public ItemStack onItemRightClick(final ItemStack itemstack, final World world, final EntityPlayer player) { + Genetics.proxy.openGui(GeneticsGUI.MasterRegistry, player, (int) player.posX, (int) player.posY, (int) player.posZ); + return itemstack; + } + + @Override + public String getItemStackDisplayName(final ItemStack i) { + return "Master Registry"; + } +} diff --git a/src/main/java/binnie/genetics/item/ItemRegistry.java b/src/main/java/binnie/genetics/item/ItemRegistry.java new file mode 100644 index 00000000..a329a37e --- /dev/null +++ b/src/main/java/binnie/genetics/item/ItemRegistry.java @@ -0,0 +1,42 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.item; + +import binnie.genetics.core.GeneticsGUI; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import net.minecraft.item.ItemStack; +import binnie.genetics.CreativeTabGenetics; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.genetics.Genetics; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.Item; + +public class ItemRegistry extends Item +{ + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.itemIcon = Genetics.proxy.getIcon(register, "registry"); + } + + public ItemRegistry() { + this.setCreativeTab(CreativeTabGenetics.instance); + this.setUnlocalizedName("registry"); + this.setMaxStackSize(1); + } + + @Override + public ItemStack onItemRightClick(final ItemStack itemstack, final World world, final EntityPlayer player) { + Genetics.proxy.openGui(GeneticsGUI.Registry, player, (int) player.posX, (int) player.posY, (int) player.posZ); + return itemstack; + } + + @Override + public String getItemStackDisplayName(final ItemStack i) { + return "Registry"; + } +} diff --git a/src/main/java/binnie/genetics/item/ItemSequence.java b/src/main/java/binnie/genetics/item/ItemSequence.java new file mode 100644 index 00000000..fa7a2d5b --- /dev/null +++ b/src/main/java/binnie/genetics/item/ItemSequence.java @@ -0,0 +1,123 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.item; + +import binnie.genetics.api.IGene; +import forestry.api.genetics.ISpeciesRoot; +import forestry.api.genetics.IChromosomeType; +import forestry.api.genetics.IAllele; +import binnie.core.genetics.Gene; +import binnie.Binnie; +import forestry.api.apiculture.EnumBeeChromosome; +import forestry.api.genetics.AlleleManager; +import forestry.api.apiculture.IAlleleBeeSpecies; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.client.renderer.texture.IIconRegister; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import binnie.genetics.genetics.SequencerItem; +import binnie.genetics.Genetics; +import java.util.List; +import net.minecraft.entity.player.EntityPlayer; +import binnie.genetics.genetics.GeneItem; +import net.minecraft.item.ItemStack; +import binnie.genetics.CreativeTabGenetics; +import binnie.genetics.api.IItemChargable; +import binnie.genetics.api.IItemAnalysable; +import net.minecraft.item.Item; + +public class ItemSequence extends Item implements IItemAnalysable, IItemChargable +{ + public ItemSequence() { + this.setMaxStackSize(1); + this.setMaxDamage(5); + this.setUnlocalizedName("sequence"); + this.setCreativeTab(CreativeTabGenetics.instance); + } + + @Override + public String getItemStackDisplayName(final ItemStack itemstack) { + final GeneItem gene = new GeneItem(itemstack); + if (gene.isCorrupted()) { + return "Corrupted Sequence"; + } + return gene.getBreedingSystem().getDescriptor() + " DNA Sequence"; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(final ItemStack itemstack, final EntityPlayer entityPlayer, final List list, final boolean par4) { + super.addInformation(itemstack, entityPlayer, list, par4); + list.add(Genetics.proxy.localise("item.sequence." + (5 - itemstack.getItemDamage() % 6))); + final SequencerItem gene = new SequencerItem(itemstack); + if (gene.isCorrupted()) { + return; + } + if (gene.analysed) { + gene.getInfo(list); + } + else { + list.add(""); + } + final int seq = gene.sequenced; + if (seq == 0) { + list.add("Unsequenced"); + } + else if (seq < 100) { + list.add("Partially Sequenced (" + seq + "%)"); + } + else { + list.add("Fully Sequenced"); + } + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister register) { + this.itemIcon = Genetics.proxy.getIcon(register, "sequencer"); + } + + @Override + public void getSubItems(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + final IAlleleBeeSpecies species = (IAlleleBeeSpecies) AlleleManager.alleleRegistry.getAllele("forestry.speciesMeadows"); + itemList.add(create(new Gene(species, EnumBeeChromosome.SPECIES, Binnie.Genetics.getBeeRoot()), false)); + } + + @Override + public boolean isAnalysed(final ItemStack stack) { + final SequencerItem seq = new SequencerItem(stack); + return seq.isCorrupted() || seq.analysed; + } + + @Override + public ItemStack analyse(final ItemStack stack) { + final SequencerItem seq = new SequencerItem(stack); + seq.analysed = true; + seq.writeToItem(stack); + return stack; + } + + @Override + public float getAnalyseTimeMult(final ItemStack stack) { + return 1.0f; + } + + public static ItemStack create(final IGene gene) { + return create(gene, false); + } + + public static ItemStack create(final IGene gene, final boolean sequenced) { + final ItemStack item = new ItemStack(Genetics.itemSequencer); + item.setItemDamage(sequenced ? 0 : item.getMaxDamage()); + final SequencerItem seq = new SequencerItem(gene); + seq.writeToItem(item); + return item; + } + + @Override + public int getCharges(final ItemStack stack) { + return stack.getItem().getMaxDamage() - stack.getItemDamage(); + } +} diff --git a/src/main/java/binnie/genetics/item/ItemSerum.java b/src/main/java/binnie/genetics/item/ItemSerum.java new file mode 100644 index 00000000..d5db5b94 --- /dev/null +++ b/src/main/java/binnie/genetics/item/ItemSerum.java @@ -0,0 +1,106 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.item; + +import binnie.genetics.Genetics; +import binnie.genetics.genetics.IGeneItem; +import binnie.genetics.api.IGene; +import binnie.genetics.genetics.GeneItem; +import binnie.core.genetics.Gene; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.IChromosomeType; +import java.util.Map; +import binnie.Binnie; +import forestry.api.genetics.ISpeciesRoot; +import forestry.api.genetics.AlleleManager; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import java.util.List; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import binnie.genetics.api.IItemSerum; + +public class ItemSerum extends ItemGene implements IItemSerum +{ + public ItemSerum() { + super("serum"); + this.setMaxDamage(16); + } + + @SideOnly(Side.CLIENT) + @Override + public void addInformation(final ItemStack itemstack, final EntityPlayer entityPlayer, final List list, final boolean par4) { + super.addInformation(itemstack, entityPlayer, list, par4); + } + + @Override + public int getCharges(final ItemStack stack) { + return stack.getItem().getMaxDamage() - stack.getItemDamage(); + } + + @Override + public void getSubItems(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + for (final ISpeciesRoot root : AlleleManager.alleleRegistry.getSpeciesRoot().values()) { + final Map> chromosomeMap = Binnie.Genetics.getChromosomeMap(root); + for (final Map.Entry> entry : chromosomeMap.entrySet()) { + final IChromosomeType chromosome = entry.getKey(); + for (final IAllele allele : entry.getValue()) { + final Gene gene = Gene.create(allele, chromosome, root); + if (gene == null) { + continue; + } + final IGeneItem item = new GeneItem(gene); + final ItemStack stack = new ItemStack(this); + item.writeToItem(stack); + itemList.add(stack); + } + } + } + } + + @Override + public IGene[] getGenes(final ItemStack stack) { + return new IGene[] { this.getGeneItem(stack).getGene() }; + } + + @Override + public ISpeciesRoot getSpeciesRoot(final ItemStack stack) { + return this.getGeneItem(stack).getSpeciesRoot(); + } + + @Override + public IGene getGene(final ItemStack stack, final int chromosome) { + return this.getGeneItem(stack).getGene(); + } + + @Override + public GeneItem getGeneItem(final ItemStack stack) { + return new GeneItem(stack); + } + + @Override + public String getItemStackDisplayName(final ItemStack itemstack) { + final IGeneItem gene = this.getGeneItem(itemstack); + return Binnie.Genetics.getSystem(gene.getSpeciesRoot()).getDescriptor() + " Serum"; + } + + @Override + public ItemStack addGene(final ItemStack stack, final IGene gene) { + final IGeneItem geneI = this.getGeneItem(stack); + geneI.addGene(gene); + geneI.writeToItem(stack); + return stack; + } + + public static ItemStack create(final IGene gene) { + final ItemStack item = new ItemStack(Genetics.itemSerum); + item.setItemDamage(item.getMaxDamage()); + final GeneItem seq = new GeneItem(gene); + seq.writeToItem(item); + return item; + } +} diff --git a/src/main/java/binnie/genetics/item/ItemSerumArray.java b/src/main/java/binnie/genetics/item/ItemSerumArray.java new file mode 100644 index 00000000..c7749634 --- /dev/null +++ b/src/main/java/binnie/genetics/item/ItemSerumArray.java @@ -0,0 +1,121 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.item; + +import binnie.Binnie; +import binnie.genetics.Genetics; +import net.minecraft.client.renderer.texture.IIconRegister; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.IChromosome; +import forestry.api.genetics.IChromosomeType; +import binnie.genetics.genetics.IGeneItem; +import binnie.core.genetics.Gene; +import forestry.api.genetics.IIndividual; +import forestry.api.genetics.AlleleManager; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import binnie.genetics.genetics.GeneArrayItem; +import forestry.api.genetics.ISpeciesRoot; +import binnie.genetics.api.IGene; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import java.util.List; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import binnie.genetics.api.IItemSerum; + +public class ItemSerumArray extends ItemGene implements IItemSerum +{ + public ItemSerumArray() { + super("serumArray"); + this.setMaxDamage(16); + } + + @SideOnly(Side.CLIENT) + @Override + public void addInformation(final ItemStack itemstack, final EntityPlayer entityPlayer, final List list, final boolean par4) { + super.addInformation(itemstack, entityPlayer, list, par4); + } + + @Override + public int getCharges(final ItemStack stack) { + return stack.getItem().getMaxDamage() - stack.getItemDamage(); + } + + @Override + public IGene[] getGenes(final ItemStack stack) { + return this.getGeneItem(stack).getGenes().toArray(new IGene[0]); + } + + @Override + public ISpeciesRoot getSpeciesRoot(final ItemStack stack) { + return this.getGeneItem(stack).getSpeciesRoot(); + } + + @Override + public IGene getGene(final ItemStack stack, final int chromosome) { + return this.getGeneItem(stack).getGene(chromosome); + } + + @Override + public GeneArrayItem getGeneItem(final ItemStack stack) { + return new GeneArrayItem(stack); + } + + @Override + public void getSubItems(final Item par1, final CreativeTabs par2CreativeTabs, final List itemList) { + for (final ISpeciesRoot root : AlleleManager.alleleRegistry.getSpeciesRoot().values()) { + for (final IIndividual template : root.getIndividualTemplates()) { + if (template.getGenome().getPrimary().isSecret()) { + continue; + } + final IGeneItem item = new GeneArrayItem(); + for (final IChromosomeType type : root.getKaryotype()) { + final IChromosome c = template.getGenome().getChromosomes()[type.ordinal()]; + if (c != null) { + final IAllele active = c.getActiveAllele(); + if (active != null) { + item.addGene(new Gene(active, type, root)); + } + } + } + final ItemStack array = new ItemStack(this); + item.writeToItem(array); + itemList.add(array); + } + } + } + + @SideOnly(Side.CLIENT) + @Override + public void registerIcons(final IIconRegister register) { + this.icons[0] = Genetics.proxy.getIcon(register, "machines/genome.glass"); + this.icons[1] = Genetics.proxy.getIcon(register, "machines/genome.cap"); + this.icons[2] = Genetics.proxy.getIcon(register, "machines/genome.edges"); + this.icons[3] = Genetics.proxy.getIcon(register, "machines/genome.dna"); + } + + @Override + public String getItemStackDisplayName(final ItemStack itemstack) { + final IGeneItem gene = this.getGeneItem(itemstack); + return Binnie.Genetics.getSystem(gene.getSpeciesRoot()).getDescriptor() + " Serum Array"; + } + + @Override + public ItemStack addGene(final ItemStack stack, final IGene gene) { + final IGeneItem geneI = this.getGeneItem(stack); + geneI.addGene(gene); + geneI.writeToItem(stack); + return stack; + } + + public static ItemStack create(final IGene gene) { + final ItemStack item = new ItemStack(Genetics.itemSerumArray); + item.setItemDamage(item.getMaxDamage()); + final GeneArrayItem seq = new GeneArrayItem(gene); + seq.writeToItem(item); + return item; + } +} diff --git a/src/main/java/binnie/genetics/item/ModuleItem.java b/src/main/java/binnie/genetics/item/ModuleItem.java new file mode 100644 index 00000000..3355e24e --- /dev/null +++ b/src/main/java/binnie/genetics/item/ModuleItem.java @@ -0,0 +1,123 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.item; + +import binnie.botany.Botany; +import binnie.extratrees.ExtraTrees; +import binnie.extrabees.ExtraBees; +import net.minecraft.item.Item; +import forestry.api.recipes.RecipeManagers; +import net.minecraft.init.Blocks; +import net.minecraftforge.oredict.ShapelessOreRecipe; +import net.minecraft.item.crafting.IRecipe; +import net.minecraftforge.oredict.ShapedOreRecipe; +import binnie.core.Mods; +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.item.ItemStack; +import net.minecraft.init.Items; +import binnie.core.BinnieCore; +import binnie.core.liquid.ItemFluidContainer; +import binnie.genetics.CreativeTabGenetics; +import binnie.Binnie; +import binnie.genetics.Genetics; +import binnie.core.resource.BinnieIcon; +import binnie.core.IInitializable; + +public class ModuleItem implements IInitializable +{ + public static BinnieIcon iconNight; + public static BinnieIcon iconDaytime; + public static BinnieIcon iconAllDay; + public static BinnieIcon iconRain; + public static BinnieIcon iconNoRain; + public static BinnieIcon iconSky; + public static BinnieIcon iconNoSky; + public static BinnieIcon iconFire; + public static BinnieIcon iconNoFire; + public static BinnieIcon iconAdd; + public static BinnieIcon iconArrow; + public static BinnieIcon iconAdd0; + public static BinnieIcon iconArrow0; + public static BinnieIcon iconAdd1; + public static BinnieIcon iconArrow1; + + @Override + public void preInit() { + Genetics.itemSerum = new ItemSerum(); + Genetics.itemSerumArray = new ItemSerumArray(); + Genetics.itemSequencer = new ItemSequence(); + Genetics.itemGenetics = Binnie.Item.registerMiscItems(GeneticsItems.values(), CreativeTabGenetics.instance); + Genetics.database = new ItemDatabase(); + Genetics.analyst = new ItemAnalyst(); + Genetics.registry = new ItemRegistry(); + Genetics.masterRegistry = new ItemMasterRegistry(); + Binnie.Liquid.createLiquids(GeneticLiquid.values(), ItemFluidContainer.LiquidGenetics); + } + + @Override + public void init() { + ModuleItem.iconNight = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.night"); + ModuleItem.iconDaytime = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.day"); + ModuleItem.iconAllDay = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.allday"); + ModuleItem.iconRain = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.rain"); + ModuleItem.iconNoRain = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.norain"); + ModuleItem.iconSky = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.sky"); + ModuleItem.iconNoSky = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.nosky"); + ModuleItem.iconFire = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.fire"); + ModuleItem.iconNoFire = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.nofire"); + ModuleItem.iconAdd = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.add"); + ModuleItem.iconArrow = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.arrow"); + ModuleItem.iconAdd0 = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.add.0"); + ModuleItem.iconArrow0 = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.arrow.0"); + ModuleItem.iconAdd1 = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.add.1"); + ModuleItem.iconArrow1 = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.arrow.1"); + } + + @Override + public void postInit() { + GameRegistry.addShapelessRecipe(GeneticsItems.DNADye.get(8), new Object[] { Items.glowstone_dust, new ItemStack(Items.dye, 1, 5) }); + GameRegistry.addRecipe(new ShapedOreRecipe(GeneticsItems.LaboratoryCasing.get(1), new Object[] { "iii", "iYi", "iii", 'i', "ingotIron", 'Y', Mods.Forestry.item("sturdyMachine") })); + GameRegistry.addRecipe(new ShapelessOreRecipe(GeneticsItems.DNADye.get(2), new Object[] { "dyePurple", "dyeMagenta", "dyePink" })); + GameRegistry.addRecipe(new ShapelessOreRecipe(GeneticsItems.FluorescentDye.get(2), new Object[] { "dyeOrange", "dyeYellow", "dustGlowstone" })); + GameRegistry.addRecipe(new ShapelessOreRecipe(GeneticsItems.GrowthMedium.get(2), new Object[] { new ItemStack(Items.dye, 1, 15), Items.sugar })); + GameRegistry.addRecipe(new ShapedOreRecipe(GeneticsItems.EmptySequencer.get(1), new Object[] { " p ", "iGi", " p ", 'i', "ingotGold", 'G', Blocks.glass_pane, 'p', Items.paper })); + GameRegistry.addRecipe(new ShapedOreRecipe(GeneticsItems.EmptySerum.get(1), new Object[] { " g ", " G ", "GGG", 'g', "ingotGold", 'G', Blocks.glass_pane })); + GameRegistry.addRecipe(new ShapedOreRecipe(GeneticsItems.EmptyGenome.get(1), new Object[] { "sss", "sss", "sss", 's', GeneticsItems.EmptySerum.get(1) })); + GameRegistry.addRecipe(new ShapedOreRecipe(GeneticsItems.Cylinder.get(8), new Object[] { " g ", "g g", " ", 'g', Blocks.glass_pane })); + GameRegistry.addRecipe(new ShapedOreRecipe(GeneticsItems.IntegratedCircuit.get(1), new Object[] { "l g", " c ", "g l", 'c', Mods.Forestry.stack("chipsets", 1, 1), 'l', new ItemStack(Items.dye, 1, 4), 'g', "dustGlowstone" })); + GameRegistry.addRecipe(new ShapedOreRecipe(GeneticsItems.IntegratedCircuit.get(1), new Object[] { "g l", " c ", "l g", 'c', Mods.Forestry.stack("chipsets", 1, 1), 'l', new ItemStack(Items.dye, 1, 4), 'g', "dustGlowstone" })); + GameRegistry.addRecipe(new ShapedOreRecipe(GeneticsItems.IntegratedCasing.get(1), new Object[] { "ccc", "cdc", "ccc", 'c', GeneticsItems.IntegratedCircuit.get(1), 'd', GeneticsItems.LaboratoryCasing.get(1) })); + GameRegistry.addRecipe(new ShapedOreRecipe(GeneticsItems.IntegratedCPU.get(1), new Object[] { "ccc", "cdc", "ccc", 'c', GeneticsItems.IntegratedCircuit.get(1), 'd', Items.diamond })); + RecipeManagers.carpenterManager.addRecipe(100, Binnie.Liquid.getLiquidStack("water", 2000), (ItemStack) null, new ItemStack(Genetics.database), new Object[] { "X#X", "YEY", "RDR", '#', Blocks.glass_pane, 'X', Items.diamond, 'Y', Items.diamond, 'R', Items.redstone, 'D', Items.ender_eye, 'E', Blocks.obsidian }); + GameRegistry.addSmelting(Genetics.itemSequencer, GeneticsItems.EmptySequencer.get(1), 0.0f); + GameRegistry.addSmelting(Genetics.itemSerum, GeneticsItems.EmptySerum.get(1), 0.0f); + GameRegistry.addSmelting(Genetics.itemSerumArray, GeneticsItems.EmptyGenome.get(1), 0.0f); + final Item[] arr$; + final Item[] lyzers = arr$ = new Item[] { Mods.Forestry.item("beealyzer"), Mods.Forestry.item("treealyzer"), Mods.Forestry.item("flutterlyzer") }; + for (final Item a : arr$) { + for (final Item b : lyzers) { + for (final Item c : lyzers) { + if (a != b && a != c && b != c) { + GameRegistry.addShapedRecipe(new ItemStack(Genetics.analyst), new Object[] { " b ", "fct", " d ", 'c', GeneticsItems.IntegratedCircuit.get(1), 'b', a, 't', b, 'f', c, 'd', new ItemStack(Items.diamond) }); + } + } + } + } + final Item[] dbs = { ExtraBees.dictionary, ExtraTrees.itemDictionary, ExtraTrees.itemDictionaryLepi, Botany.database }; + if (BinnieCore.isBotanyActive() && BinnieCore.isExtraBeesActive() && BinnieCore.isExtraTreesActive()) { + for (final Item a2 : dbs) { + for (final Item b2 : dbs) { + for (final Item c2 : dbs) { + for (final Item d : dbs) { + if (a2 != b2 && a2 != c2 && a2 != d && b2 != c2 && b2 != d && c2 != d) { + GameRegistry.addShapedRecipe(new ItemStack(Genetics.registry), new Object[] { " b ", "fct", " l ", 'c', GeneticsItems.IntegratedCircuit.get(1), 'b', a2, 't', b2, 'f', c2, 'l', d }); + } + } + } + } + } + } + } +} diff --git a/src/main/java/binnie/genetics/machine/Acclimatiser.java b/src/main/java/binnie/genetics/machine/Acclimatiser.java new file mode 100644 index 00000000..8831d6ce --- /dev/null +++ b/src/main/java/binnie/genetics/machine/Acclimatiser.java @@ -0,0 +1,394 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.machine; + +import binnie.core.genetics.Gene; +import java.util.Random; +import forestry.api.genetics.IGenome; +import forestry.api.genetics.IIndividual; +import forestry.api.genetics.IAlleleTolerance; +import binnie.botany.gardening.Gardening; +import binnie.core.machines.power.ErrorState; +import binnie.core.machines.power.ComponentProcessIndefinate; +import binnie.core.machines.TileEntityMachine; +import net.minecraft.tileentity.TileEntity; +import binnie.core.machines.inventory.InventorySlot; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.core.machines.inventory.ComponentInventoryTransfer; +import binnie.core.machines.inventory.SlotValidator; +import binnie.core.machines.IMachine; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.genetics.core.GeneticsGUI; +import binnie.core.machines.Machine; +import binnie.genetics.core.GeneticsTexture; +import binnie.craftgui.minecraft.IMachineInformation; +import java.util.HashMap; +import java.util.ArrayList; +import forestry.api.genetics.EnumTolerance; +import binnie.core.genetics.Tolerance; +import binnie.core.Mods; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import binnie.botany.api.EnumFlowerChromosome; +import forestry.api.lepidopterology.EnumButterflyChromosome; +import forestry.api.apiculture.EnumBeeChromosome; +import binnie.Binnie; +import binnie.core.BinnieCore; +import forestry.api.genetics.IChromosomeType; +import forestry.api.genetics.ISpeciesRoot; +import forestry.api.genetics.AlleleManager; +import net.minecraft.item.ItemStack; +import java.util.Map; +import java.util.List; + +public class Acclimatiser +{ + public static final int[] slotReserve; + public static final int slotTarget = 4; + public static final int[] slotAcclimatiser; + public static final int[] slotDone; + private static List toleranceSystems; + static Map temperatureItems; + static Map humidityItems; + + private static ToleranceSystem getToleranceSystem(final ItemStack stack, final ItemStack acclim) { + final ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(stack); + if (root == null) { + return null; + } + for (final ToleranceSystem system : Acclimatiser.toleranceSystems) { + if (root.getUID() == system.uid && system.type.hasEffect(acclim)) { + return system; + } + } + return null; + } + + public static void addTolerance(final String uid, final IChromosomeType chromosome, final ToleranceType type) { + Acclimatiser.toleranceSystems.add(new ToleranceSystem(uid, chromosome, type)); + } + + public static float getTemperatureEffect(final ItemStack item) { + for (final ItemStack stack : Acclimatiser.temperatureItems.keySet()) { + if (stack.isItemEqual(item)) { + return Acclimatiser.temperatureItems.get(stack); + } + } + return 0.0f; + } + + public static float getHumidityEffect(final ItemStack item) { + for (final ItemStack stack : Acclimatiser.humidityItems.keySet()) { + if (stack.isItemEqual(item)) { + return Acclimatiser.humidityItems.get(stack); + } + } + return 0.0f; + } + + public static void addTemperatureItem(final ItemStack itemstack, final float amount) { + if (itemstack == null) { + return; + } + Acclimatiser.temperatureItems.put(itemstack, amount); + } + + public static void addHumidityItem(final ItemStack itemstack, final float amount) { + if (itemstack == null) { + return; + } + Acclimatiser.humidityItems.put(itemstack, amount); + } + + public static void setupRecipes() { + if (BinnieCore.isApicultureActive()) { + addTolerance(Binnie.Genetics.getBeeRoot().getUID(), EnumBeeChromosome.HUMIDITY_TOLERANCE, ToleranceType.Humidity); + addTolerance(Binnie.Genetics.getBeeRoot().getUID(), EnumBeeChromosome.TEMPERATURE_TOLERANCE, ToleranceType.Temperature); + } + if (BinnieCore.isLepidopteryActive()) { + addTolerance(Binnie.Genetics.getButterflyRoot().getUID(), EnumButterflyChromosome.HUMIDITY_TOLERANCE, ToleranceType.Humidity); + addTolerance(Binnie.Genetics.getButterflyRoot().getUID(), EnumButterflyChromosome.TEMPERATURE_TOLERANCE, ToleranceType.Temperature); + } + if (BinnieCore.isBotanyActive()) { + addTolerance(Binnie.Genetics.getFlowerRoot().getUID(), EnumFlowerChromosome.HUMIDITY_TOLERANCE, ToleranceType.Humidity); + addTolerance(Binnie.Genetics.getFlowerRoot().getUID(), EnumFlowerChromosome.TEMPERATURE_TOLERANCE, ToleranceType.Temperature); + addTolerance(Binnie.Genetics.getFlowerRoot().getUID(), EnumFlowerChromosome.PH_TOLERANCE, ToleranceType.PH); + } + addTemperatureItem(new ItemStack(Items.blaze_powder), 0.5f); + addTemperatureItem(new ItemStack(Items.blaze_rod), 0.75f); + addTemperatureItem(new ItemStack(Items.lava_bucket), 0.75f); + addTemperatureItem(new ItemStack(Items.snowball), -0.15f); + addTemperatureItem(new ItemStack(Blocks.ice), -0.75f); + addHumidityItem(new ItemStack(Items.water_bucket), 0.75f); + addHumidityItem(new ItemStack(Blocks.sand), -0.15f); + addTemperatureItem(Mods.Forestry.stack("canLava"), 0.75f); + addTemperatureItem(Mods.Forestry.stack("refractoryLava"), 0.75f); + addHumidityItem(Mods.Forestry.stack("canWater"), 0.75f); + addHumidityItem(Mods.Forestry.stack("refractoryWater"), 0.75f); + addHumidityItem(Mods.Forestry.stack("waxCapsuleWater"), 0.75f); + } + + public static boolean canAcclimatise(final ItemStack stack, final List acclimatisers) { + if (stack == null || acclimatisers.isEmpty()) { + return true; + } + for (final ItemStack acclim : acclimatisers) { + if (canAcclimatise(stack, acclim)) { + return true; + } + } + return false; + } + + public static boolean canAcclimatise(final ItemStack stack, final ItemStack acclim) { + final ToleranceSystem system = getToleranceSystem(stack, acclim); + return system != null && system.canAlter(stack, acclim); + } + + public static ItemStack acclimatise(final ItemStack stack, final ItemStack acc) { + final ToleranceSystem system = getToleranceSystem(stack, acc); + return system.alter(stack, acc); + } + + public static Tolerance alterTolerance(final Tolerance tol, final float effect) { + final int[] is = tol.getBounds(); + int[] range = new int[2]; + if (effect < 0.0f) { + range = new int[] { is[0] - 1, is[1] }; + } + else { + range = new int[] { is[0], is[1] + 1 }; + } + if (range[0] < -5) { + range[0] = -5; + } + if (range[1] > 5) { + range[1] = 5; + } + final EnumTolerance[] up = { EnumTolerance.NONE, EnumTolerance.UP_1, EnumTolerance.UP_2, EnumTolerance.UP_3, EnumTolerance.UP_4, EnumTolerance.UP_5 }; + final EnumTolerance[] down = { EnumTolerance.NONE, EnumTolerance.DOWN_1, EnumTolerance.DOWN_2, EnumTolerance.DOWN_3, EnumTolerance.DOWN_4, EnumTolerance.DOWN_5 }; + final EnumTolerance[] both = { EnumTolerance.NONE, EnumTolerance.BOTH_1, EnumTolerance.BOTH_2, EnumTolerance.BOTH_3, EnumTolerance.BOTH_4, EnumTolerance.BOTH_5 }; + if (range[0] == 0) { + return Tolerance.get(up[range[1]]); + } + if (range[1] == 0) { + return Tolerance.get(down[-range[0]]); + } + final int avg = (int) ((-range[0] + range[1]) / 2.0f + 0.6f); + return Tolerance.get(both[avg]); + } + + static { + slotReserve = new int[] { 0, 1, 2, 3 }; + slotAcclimatiser = new int[] { 5, 6, 7 }; + slotDone = new int[] { 8, 9, 10, 11 }; + Acclimatiser.toleranceSystems = new ArrayList(); + Acclimatiser.temperatureItems = new HashMap(); + Acclimatiser.humidityItems = new HashMap(); + } + + public static class PackageAcclimatiser extends GeneticMachine.PackageGeneticBase implements IMachineInformation + { + public PackageAcclimatiser() { + super("acclimatiser", GeneticsTexture.Acclimatiser, 9857609, true); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentGeneticGUI(machine, GeneticsGUI.Acclimatiser); + final ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + inventory.addSlot(4, "process"); + inventory.getSlot(4).setValidator(new SlotValidator.Individual()); + inventory.getSlot(4).setReadOnly(); + inventory.getSlot(4).forbidExtraction(); + for (final InventorySlot slot : inventory.addSlotArray(Acclimatiser.slotReserve, "input")) { + slot.forbidExtraction(); + slot.setValidator(new SlotValidator.Individual()); + } + for (final InventorySlot slot : inventory.addSlotArray(Acclimatiser.slotDone, "output")) { + slot.setReadOnly(); + slot.setValidator(new SlotValidator.Individual()); + } + for (final InventorySlot slot : inventory.addSlotArray(Acclimatiser.slotAcclimatiser, "acclimatiser")) { + slot.setValidator(new ValidatorAcclimatiserItem()); + } + final ComponentInventoryTransfer transfer = new ComponentInventoryTransfer(machine); + transfer.addRestock(Acclimatiser.slotReserve, 4, 1); + transfer.addStorage(4, Acclimatiser.slotDone, new ComponentInventoryTransfer.Condition() { + @Override + public boolean fufilled(final ItemStack stack) { + return !Acclimatiser.canAcclimatise(stack, machine.getMachineUtil().getNonNullStacks(Acclimatiser.slotAcclimatiser)); + } + }); + new ComponentPowerReceptor(machine, 5000); + new ComponentAcclimatiserLogic(machine); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + } + + public static class ComponentAcclimatiserLogic extends ComponentProcessIndefinate + { + public ComponentAcclimatiserLogic(final IMachine machine) { + super(machine, 2.0f); + } + + @Override + public ErrorState canWork() { + if (this.getUtil().getStack(4) == null) { + return new ErrorState.NoItem("No Individual to Acclimatise", 4); + } + if (this.getUtil().getNonNullStacks(Acclimatiser.slotAcclimatiser).isEmpty()) { + return new ErrorState.NoItem("No Acclimatising Items", Acclimatiser.slotAcclimatiser); + } + return super.canWork(); + } + + @Override + public ErrorState canProgress() { + if (!Acclimatiser.canAcclimatise(this.getUtil().getStack(4), this.getUtil().getNonNullStacks(Acclimatiser.slotAcclimatiser))) { + return new ErrorState.InvalidItem("Cannot Acclimatise this individual with these items", 4); + } + return super.canProgress(); + } + + @Override + protected boolean inProgress() { + return this.canWork() == null; + } + + @Override + protected void onTickTask() { + super.onTickTask(); + if (this.getUtil().getRandom().nextInt(100) == 0) { + this.attemptAcclimatisation(); + } + } + + protected void attemptAcclimatisation() { + final List acclms = new ArrayList(); + for (final ItemStack s : this.getUtil().getNonNullStacks(Acclimatiser.slotAcclimatiser)) { + if (Acclimatiser.canAcclimatise(this.getUtil().getStack(4), s)) { + acclms.add(s); + } + } + final ItemStack acc = acclms.get(this.getUtil().getRandom().nextInt(acclms.size())); + final ItemStack acclimed = Acclimatiser.acclimatise(this.getUtil().getStack(4), acc); + if (acclimed != null) { + this.getUtil().setStack(4, acclimed); + boolean removed = false; + for (final int i : Acclimatiser.slotAcclimatiser) { + if (!removed && this.getUtil().getStack(i) != null && this.getUtil().getStack(i).isItemEqual(acc)) { + this.getUtil().decreaseStack(i, 1); + removed = true; + } + } + } + } + } + + public static class ValidatorAcclimatiserItem extends SlotValidator + { + public ValidatorAcclimatiserItem() { + super(null); + } + + @Override + public boolean isValid(final ItemStack stack) { + for (final ToleranceType type : ToleranceType.values()) { + if (type.hasEffect(stack)) { + return true; + } + } + return false; + } + + @Override + public String getTooltip() { + return "Acclimatising Items"; + } + } + + public enum ToleranceType + { + Temperature, + Humidity, + PH; + + public float getEffect(final ItemStack stack) { + switch (this) { + case Temperature: { + return Acclimatiser.getTemperatureEffect(stack); + } + case Humidity: { + return Acclimatiser.getHumidityEffect(stack); + } + case PH: { + if (Gardening.isAcidFertiliser(stack)) { + return -0.5f * Gardening.getFertiliserStrength(stack); + } + if (Gardening.isAlkalineFertiliser(stack)) { + return 0.5f * Gardening.getFertiliserStrength(stack); + } + break; + } + } + return 0.0f; + } + + public boolean hasEffect(final ItemStack stack) { + return this.getEffect(stack) != 0.0f; + } + } + + private static class ToleranceSystem + { + String uid; + IChromosomeType chromosomeOrdinal; + ToleranceType type; + + private ToleranceSystem(final String uid, final IChromosomeType chromosomeOrdinal, final ToleranceType type) { + this.uid = uid; + this.chromosomeOrdinal = chromosomeOrdinal; + this.type = type; + } + + public boolean canAlter(final ItemStack stack, final ItemStack acclim) { + final IIndividual member = AlleleManager.alleleRegistry.getIndividual(stack); + final IGenome genome = member.getGenome(); + final IAlleleTolerance tolAllele = (IAlleleTolerance) genome.getActiveAllele(this.chromosomeOrdinal); + final Tolerance tol = Tolerance.get(tolAllele.getValue()); + final float effect = this.type.getEffect(acclim); + return (effect > 0.0f && tol.getBounds()[1] < 5) || (effect < 0.0f && tol.getBounds()[0] > -5); + } + + public ItemStack alter(final ItemStack stack, final ItemStack acc) { + final Random rand = new Random(); + final float effect = this.type.getEffect(acc); + if (rand.nextFloat() > Math.abs(effect)) { + return stack; + } + final IIndividual member = AlleleManager.alleleRegistry.getIndividual(stack); + final IGenome genome = member.getGenome(); + final IAlleleTolerance tolAllele = (IAlleleTolerance) genome.getActiveAllele(this.chromosomeOrdinal); + final Tolerance tol = Tolerance.get(tolAllele.getValue()); + final Tolerance newTol = Acclimatiser.alterTolerance(tol, effect); + if (rand.nextFloat() > 1.0f / (-newTol.getBounds()[0] + newTol.getBounds()[1])) { + return stack; + } + final ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(stack); + Inoculator.setGene(new Gene(newTol.getAllele(), this.chromosomeOrdinal, root), stack, rand.nextInt(2)); + return stack; + } + } +} diff --git a/src/main/java/binnie/genetics/machine/AdvGeneticMachine.java b/src/main/java/binnie/genetics/machine/AdvGeneticMachine.java new file mode 100644 index 00000000..34c1ab55 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/AdvGeneticMachine.java @@ -0,0 +1,44 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.machine; + +import binnie.core.resource.IBinnieTexture; +import net.minecraft.block.Block; +import binnie.genetics.Genetics; +import net.minecraft.item.ItemStack; +import binnie.core.machines.MachinePackage; +import binnie.core.machines.IMachineType; + +public enum AdvGeneticMachine implements IMachineType +{ + Splicer(Splicer.PackageSplicer.class); + + Class clss; + + private AdvGeneticMachine(final Class clss) { + this.clss = clss; + } + + @Override + public Class getPackageClass() { + return this.clss; + } + + @Override + public boolean isActive() { + return true; + } + + public ItemStack get(final int i) { + return new ItemStack(Genetics.packageAdvGenetic.getBlock(), i, this.ordinal()); + } + + public abstract static class PackageAdvGeneticBase extends GeneticMachine.PackageGeneticBase + { + protected PackageAdvGeneticBase(final String uid, final IBinnieTexture renderTexture, final int flashColour, final boolean powered) { + super(uid, renderTexture, flashColour, powered); + } + } +} diff --git a/src/main/java/binnie/genetics/machine/Analyser.java b/src/main/java/binnie/genetics/machine/Analyser.java new file mode 100644 index 00000000..38c728c1 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/Analyser.java @@ -0,0 +1,314 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.machine; + +import net.minecraft.nbt.NBTBase; +import net.minecraft.entity.player.EntityPlayer; +import org.lwjgl.opengl.GL11; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.particle.EntityFX; +import binnie.core.BinnieCore; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import java.util.Random; +import net.minecraft.world.World; +import net.minecraft.entity.item.EntityItem; +import binnie.core.machines.network.INetwork; +import binnie.core.machines.component.IRender; +import binnie.core.machines.MachineComponent; +import binnie.core.machines.power.ErrorState; +import binnie.core.machines.power.IProcess; +import binnie.core.machines.power.ComponentProcessSetCost; +import binnie.core.machines.TileEntityMachine; +import net.minecraft.tileentity.TileEntity; +import binnie.core.machines.inventory.InventorySlot; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.core.machines.inventory.ComponentChargedSlots; +import binnie.core.machines.inventory.ComponentInventoryTransfer; +import binnie.genetics.item.GeneticsItems; +import binnie.core.machines.inventory.SlotValidator; +import binnie.core.machines.IMachine; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.genetics.core.GeneticsGUI; +import binnie.core.machines.Machine; +import binnie.genetics.core.GeneticsTexture; +import binnie.craftgui.minecraft.IMachineInformation; +import forestry.api.genetics.ISpeciesRoot; +import net.minecraft.nbt.NBTTagCompound; +import forestry.api.genetics.IIndividual; +import binnie.Binnie; +import binnie.genetics.api.IItemAnalysable; +import forestry.api.genetics.AlleleManager; +import net.minecraft.item.ItemStack; + +public class Analyser +{ + public static final int[] slotReserve; + public static final int slotTarget = 6; + public static final int[] slotFinished; + public static final int slotDye = 13; + + public static boolean isAnalysable(final ItemStack stack) { + final IIndividual ind = AlleleManager.alleleRegistry.getIndividual(stack); + return ind != null || stack.getItem() instanceof IItemAnalysable || Binnie.Genetics.getConversion(stack) != null; + } + + public static boolean isAnalysed(final ItemStack stack) { + final IIndividual ind = AlleleManager.alleleRegistry.getIndividual(stack); + if (ind != null) { + return ind.isAnalyzed(); + } + return stack.getItem() instanceof IItemAnalysable && ((IItemAnalysable) stack.getItem()).isAnalysed(stack); + } + + public static ItemStack analyse(ItemStack stack) { + final ItemStack conv = Binnie.Genetics.getConversionStack(stack); + if (conv != null) { + stack = conv; + } + final ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(stack); + if (root != null) { + final IIndividual ind = root.getMember(stack); + ind.analyze(); + final NBTTagCompound nbttagcompound = new NBTTagCompound(); + ind.writeToNBT(nbttagcompound); + stack.setTagCompound(nbttagcompound); + return stack; + } + if (stack.getItem() instanceof IItemAnalysable) { + return ((IItemAnalysable) stack.getItem()).analyse(stack); + } + return stack; + } + + static { + slotReserve = new int[] { 0, 1, 2, 3, 4, 5 }; + slotFinished = new int[] { 7, 8, 9, 10, 11, 12 }; + } + + public static class PackageAnalyser extends GeneticMachine.PackageGeneticBase implements IMachineInformation + { + public PackageAnalyser() { + super("analyser", GeneticsTexture.Analyser, 9961727, true); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentGeneticGUI(machine, GeneticsGUI.Analyser); + final ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + inventory.addSlotArray(Analyser.slotReserve, "input"); + for (final InventorySlot slot : inventory.getSlots(Analyser.slotReserve)) { + slot.setValidator(new SlotValidatorUnanalysed()); + slot.forbidExtraction(); + } + inventory.addSlot(6, "analyse"); + inventory.getSlot(6).setValidator(new SlotValidatorUnanalysed()); + inventory.getSlot(6).setReadOnly(); + inventory.getSlot(6).forbidInteraction(); + inventory.addSlot(13, "dye"); + inventory.getSlot(13).forbidExtraction(); + inventory.getSlot(13).setValidator(new SlotValidator(ModuleMachine.IconDye) { + @Override + public boolean isValid(final ItemStack itemStack) { + return itemStack.isItemEqual(GeneticsItems.DNADye.get(1)); + } + + @Override + public String getTooltip() { + return "DNA Dye"; + } + }); + inventory.addSlotArray(Analyser.slotFinished, "output"); + for (final InventorySlot slot : inventory.getSlots(Analyser.slotFinished)) { + slot.forbidInsertion(); + slot.setReadOnly(); + } + final ComponentInventoryTransfer transfer = new ComponentInventoryTransfer(machine); + transfer.addRestock(Analyser.slotReserve, 6, 1); + transfer.addStorage(6, Analyser.slotFinished, new ComponentInventoryTransfer.Condition() { + @Override + public boolean fufilled(final ItemStack stack) { + return Analyser.isAnalysed(stack); + } + }); + new ComponentChargedSlots(machine).addCharge(13); + new ComponentPowerReceptor(machine, 500); + new ComponentAnalyserLogic(machine); + new ComponentAnalyserFX(machine); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + } + + public static class ComponentAnalyserLogic extends ComponentProcessSetCost implements IProcess + { + private static final float DYE_PER_TICK = 0.002f; + + public ComponentAnalyserLogic(final Machine machine) { + super(machine, 9000, 300); + } + + @Override + public ErrorState canWork() { + if (this.getUtil().isSlotEmpty(6)) { + return new ErrorState.NoItem("No item to analyse", 6); + } + final boolean analysed = Analyser.isAnalysed(this.getUtil().getStack(6)); + if (analysed) { + return new ErrorState.InvalidItem("Already Analysed", "Item has already been analysed", 6); + } + return super.canWork(); + } + + @Override + public ErrorState canProgress() { + if (this.getUtil().getSlotCharge(13) == 0.0f) { + return new ErrorState.Item("Insufficient Dye", "Not enough DNA dye to analyse", new int[] { 13 }); + } + return super.canProgress(); + } + + @Override + protected void onFinishTask() { + super.onFinishTask(); + ItemStack itemStack = this.getUtil().getStack(6); + itemStack = Analyser.analyse(itemStack); + this.getInventory().setInventorySlotContents(6, itemStack); + } + + @Override + protected void onTickTask() { + this.getUtil().useCharge(13, 0.002f); + } + } + + public static class SlotValidatorUnanalysed extends SlotValidator + { + public SlotValidatorUnanalysed() { + super(null); + } + + @Override + public boolean isValid(final ItemStack itemStack) { + return Analyser.isAnalysable(itemStack) && !Analyser.isAnalysed(itemStack); + } + + @Override + public String getTooltip() { + return "Unanalysed Item"; + } + } + + public static class ComponentAnalyserFX extends MachineComponent implements IRender.RandomDisplayTick, IRender.DisplayTick, IRender.Render, INetwork.TilePacketSync + { + private final EntityItem dummyEntityItem; + + public ComponentAnalyserFX(final IMachine machine) { + super(machine); + this.dummyEntityItem = new EntityItem((World) null); + } + + @SideOnly(Side.CLIENT) + @Override + public void onRandomDisplayTick(final World world, final int x, final int y, final int z, final Random rand) { + } + + @SideOnly(Side.CLIENT) + @Override + public void onDisplayTick(final World world, final int x, final int y, final int z, final Random rand) { + if (rand.nextFloat() < 1.0f && this.getUtil().getProcess().isInProgress()) { + BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.5, y + 1.3 + rand.nextDouble() * 0.2, z + 0.5, 0.0, 0.0, 0.0) { + double axisX = this.posX; + double axisZ = this.posZ; + double angle = this.rand.nextDouble() * 2.0 * 3.1415; + + { + this.axisX = 0.0; + this.axisZ = 0.0; + this.angle = 0.0; + this.motionX = 0.05 * (this.rand.nextDouble() - 0.5); + this.motionZ = 0.05 * (this.rand.nextDouble() - 0.5); + this.motionY = 0.0; + this.particleMaxAge = 25; + this.particleGravity = 0.05f; + this.noClip = true; + this.setRBGColorF(0.6f, 0.0f, 1.0f); + } + + @Override + public void onUpdate() { + super.onUpdate(); + this.setAlphaF((float) Math.cos(1.57 * this.particleAge / this.particleMaxAge)); + } + + @Override + public int getFXLayer() { + return 0; + } + }); + } + } + + @SideOnly(Side.CLIENT) + @Override + public void renderInWorld(final RenderItem customRenderItem, final double x, final double y, final double z) { + if (!this.getUtil().getProcess().isInProgress()) { + return; + } + final ItemStack stack = this.getUtil().getStack(6); + this.dummyEntityItem.worldObj = this.getMachine().getWorld(); + this.dummyEntityItem.setEntityItemStack(stack); + final EntityItem dummyEntityItem = this.dummyEntityItem; + ++dummyEntityItem.age; + this.dummyEntityItem.hoverStart = 0.0f; + if (stack == null) { + return; + } + final EntityPlayer player = BinnieCore.proxy.getPlayer(); + final double dx = x + 0.5 - player.lastTickPosX; + final double dz = z + 0.5 - player.lastTickPosZ; + final double t = Math.atan2(dz, dx) * 180.0 / 3.1415; + GL11.glPushMatrix(); + GL11.glRotatef(180.0f, 0.0f, 0.0f, 1.0f); + GL11.glTranslatef(0.0f, -0.2f, 0.0f); + customRenderItem.doRender(this.dummyEntityItem, 0.0, 0.0, 0.0, 0.0f, 0.0f); + GL11.glPopMatrix(); + } + + @Override + public void syncToNBT(final NBTTagCompound nbt) { + final NBTTagCompound item = new NBTTagCompound(); + final ItemStack stack = this.getUtil().getStack(6); + if (stack != null) { + stack.writeToNBT(item); + nbt.setTag("item", item); + } + } + + @Override + public void syncFromNBT(final NBTTagCompound nbt) { + if (nbt.hasKey("item")) { + this.getUtil().setStack(6, ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("item"))); + } + else { + this.getUtil().setStack(6, null); + } + } + + @Override + public void onInventoryUpdate() { + if (this.getUtil().isServer()) { + this.getMachine().getWorld().markBlockForUpdate(this.getMachine().getTileEntity().xCoord, this.getMachine().getTileEntity().yCoord, this.getMachine().getTileEntity().zCoord); + } + } + } +} diff --git a/src/main/java/binnie/genetics/machine/ComponentGeneticGUI.java b/src/main/java/binnie/genetics/machine/ComponentGeneticGUI.java new file mode 100644 index 00000000..d4c631d3 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/ComponentGeneticGUI.java @@ -0,0 +1,28 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.machine; + +import binnie.genetics.Genetics; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import binnie.core.machines.Machine; +import binnie.genetics.core.GeneticsGUI; +import binnie.core.machines.component.IInteraction; +import binnie.core.machines.MachineComponent; + +public class ComponentGeneticGUI extends MachineComponent implements IInteraction.RightClick +{ + GeneticsGUI id; + + public ComponentGeneticGUI(final Machine machine, final GeneticsGUI id) { + super(machine); + this.id = id; + } + + @Override + public void onRightClick(final World world, final EntityPlayer player, final int x, final int y, final int z) { + Genetics.proxy.openGui(this.id, player, x, y, z); + } +} diff --git a/src/main/java/binnie/genetics/machine/ComponentIndexerInventory.java b/src/main/java/binnie/genetics/machine/ComponentIndexerInventory.java new file mode 100644 index 00000000..c89b0e70 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/ComponentIndexerInventory.java @@ -0,0 +1,272 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.machine; + +import java.util.Map; +import binnie.Binnie; +import java.util.HashMap; +import java.util.ArrayList; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.entity.player.EntityPlayer; +import binnie.core.machines.inventory.SetList; +import binnie.core.machines.Machine; +import net.minecraft.item.ItemStack; +import java.util.List; +import net.minecraft.inventory.IInventory; +import binnie.core.machines.inventory.ComponentInventory; + +public abstract class ComponentIndexerInventory extends ComponentInventory implements IInventory +{ + int indexerSize; + public int guiRefreshCounter; + List indexerInventory; + public List sortedInventory; + T sortingMode; + boolean needsSorting; + + public ComponentIndexerInventory(final Machine machine) { + super(machine); + this.indexerSize = -1; + this.guiRefreshCounter = 0; + this.indexerInventory = new SetList(); + this.sortedInventory = new SetList(); + this.needsSorting = true; + } + + @Override + public int getSizeInventory() { + if (this.indexerSize > 0) { + return this.indexerSize + 1; + } + return this.indexerInventory.size() + 1; + } + + @Override + public ItemStack getStackInSlot(final int index) { + if (index >= 0 && index < this.indexerInventory.size()) { + return this.indexerInventory.get(index); + } + return null; + } + + @Override + public ItemStack decrStackSize(final int index, final int amount) { + if (index >= 0) { + final ItemStack returnStack = this.getStackInSlot(index).copy(); + this.setInventorySlotContents(index, null); + return returnStack; + } + return null; + } + + @Override + public ItemStack getStackInSlotOnClosing(final int var1) { + return null; + } + + @Override + public void markDirty() { + super.markDirty(); + ++this.guiRefreshCounter; + } + + @Override + public void setInventorySlotContents(final int index, final ItemStack itemStack) { + if (index >= 0 && index < this.indexerInventory.size()) { + this.indexerInventory.set(index, itemStack); + } + else if (itemStack != null) { + this.indexerInventory.add(itemStack); + } + this.needsSorting = true; + this.markDirty(); + } + + @Override + public String getInventoryName() { + return ""; + } + + @Override + public int getInventoryStackLimit() { + return 64; + } + + @Override + public boolean isUseableByPlayer(final EntityPlayer var1) { + return true; + } + + @Override + public void openInventory() { + } + + @Override + public void closeInventory() { + } + + public void setMode(final T mode) { + this.sortingMode = mode; + this.needsSorting = true; + } + + public T getMode() { + return this.sortingMode; + } + + @Override + public void writeToNBT(final NBTTagCompound nbttagcompound) { + super.writeToNBT(nbttagcompound); + final NBTTagList indexerNBT = new NBTTagList(); + for (final ItemStack item : this.indexerInventory) { + final NBTTagCompound itemNBT = new NBTTagCompound(); + item.writeToNBT(itemNBT); + indexerNBT.appendTag(itemNBT); + } + nbttagcompound.setTag("indexer", indexerNBT); + } + + @Override + public void readFromNBT(final NBTTagCompound nbttagcompound) { + super.readFromNBT(nbttagcompound); + final NBTTagList indexerNBT = nbttagcompound.getTagList("indexer", 10); + this.indexerInventory.clear(); + for (int i = 0; i < indexerNBT.tagCount(); ++i) { + final NBTTagCompound itemNBT = indexerNBT.getCompoundTagAt(i); + this.setInventorySlotContents(i, ItemStack.loadItemStackFromNBT(itemNBT)); + } + this.needsSorting = true; + this.markDirty(); + } + + public abstract void Sort(); + + public static class ComponentApiaristIndexerInventory extends ComponentIndexerInventory implements IInventory + { + public ComponentApiaristIndexerInventory(final Machine machine) { + super(machine); + } + + @Override + public void Sort() { + int i = 0; + while (i < this.indexerInventory.size()) { + if (this.indexerInventory.get(i) == null) { + this.indexerInventory.remove(i); + } + else { + ++i; + } + } + if (!this.needsSorting) { + return; + } + this.needsSorting = false; + ++this.guiRefreshCounter; + switch (this.sortingMode) { + case Species: + case Type: { + class SpeciesList + { + public List drones; + public List queens; + public List princesses; + public List bees; + + SpeciesList() { + this.drones = new ArrayList(); + this.queens = new ArrayList(); + this.princesses = new ArrayList(); + this.bees = new ArrayList(); + } + + public void add(final ItemStack stack) { + this.bees.add(stack); + } + } + final Map speciesList = new HashMap(); + for (final ItemStack itemStack : this.indexerInventory) { + final int species = itemStack.getItemDamage(); + if (!speciesList.containsKey(species)) { + speciesList.put(species, new SpeciesList()); + } + speciesList.get(species).add(itemStack); + } + for (final SpeciesList sortableList : speciesList.values()) { + for (final ItemStack beeStack : sortableList.bees) { + if (Binnie.Genetics.getBeeRoot().isDrone(beeStack)) { + sortableList.drones.add(this.indexerInventory.indexOf(beeStack)); + } + else if (Binnie.Genetics.getBeeRoot().isMated(beeStack)) { + sortableList.queens.add(this.indexerInventory.indexOf(beeStack)); + } + else { + sortableList.princesses.add(this.indexerInventory.indexOf(beeStack)); + } + } + } + this.sortedInventory = new SetList(); + switch (this.sortingMode) { + case Species: { + for (int j = 0; j < 1024; ++j) { + if (speciesList.containsKey(j)) { + this.sortedInventory.addAll(speciesList.get(j).queens); + this.sortedInventory.addAll(speciesList.get(j).princesses); + this.sortedInventory.addAll(speciesList.get(j).drones); + } + } + break; + } + case Type: { + for (int j = 0; j < 1024; ++j) { + if (speciesList.containsKey(j)) { + this.sortedInventory.addAll(speciesList.get(j).queens); + } + } + for (int j = 0; j < 1024; ++j) { + if (speciesList.containsKey(j)) { + this.sortedInventory.addAll(speciesList.get(j).princesses); + } + } + for (int j = 0; j < 1024; ++j) { + if (speciesList.containsKey(j)) { + this.sortedInventory.addAll(speciesList.get(j).drones); + } + } + break; + } + } + break; + } + default: { + this.sortedInventory.clear(); + for (i = 0; i < this.indexerInventory.size(); ++i) { + this.sortedInventory.add(i); + } + break; + } + } + } + + @Override + public boolean hasCustomInventoryName() { + return false; + } + + @Override + public boolean isItemValidForSlot(final int i, final ItemStack itemstack) { + return true; + } + + public static enum Mode + { + None, + Species, + Type; + } + } +} diff --git a/src/main/java/binnie/genetics/machine/Genepool.java b/src/main/java/binnie/genetics/machine/Genepool.java new file mode 100644 index 00000000..f5575b4e --- /dev/null +++ b/src/main/java/binnie/genetics/machine/Genepool.java @@ -0,0 +1,229 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.machine; + +import net.minecraft.client.particle.EntityFX; +import binnie.core.BinnieCore; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import java.util.Random; +import net.minecraft.world.World; +import binnie.core.machines.component.IRender; +import binnie.core.machines.MachineComponent; +import binnie.core.machines.inventory.IChargedSlots; +import forestry.api.genetics.ISpeciesRoot; +import binnie.Binnie; +import forestry.api.genetics.AlleleManager; +import net.minecraft.item.ItemStack; +import binnie.genetics.item.GeneticLiquid; +import binnie.core.machines.power.ErrorState; +import binnie.core.machines.power.IProcess; +import binnie.core.machines.power.ComponentProcessSetCost; +import binnie.core.machines.TileEntityMachine; +import net.minecraft.tileentity.TileEntity; +import binnie.core.machines.inventory.InventorySlot; +import binnie.core.machines.inventory.ComponentChargedSlots; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.core.machines.inventory.ComponentInventoryTransfer; +import net.minecraftforge.fluids.FluidStack; +import binnie.core.machines.inventory.TankValidator; +import binnie.core.machines.inventory.ComponentTankContainer; +import binnie.core.machines.inventory.SlotValidator; +import binnie.genetics.item.GeneticsItems; +import binnie.core.machines.IMachine; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.genetics.core.GeneticsGUI; +import binnie.core.machines.Machine; +import binnie.genetics.core.GeneticsTexture; +import binnie.craftgui.minecraft.IMachineInformation; + +public class Genepool +{ + public static final int slotBee = 0; + public static final int[] slotReserve; + public static final int tankDNA = 0; + public static final int tankEthanol = 1; + public static final int slotEnzyme = 7; + + static { + slotReserve = new int[] { 1, 2, 3, 4, 5, 6 }; + } + + public static class PackageGenepool extends GeneticMachine.PackageGeneticBase implements IMachineInformation + { + public PackageGenepool() { + super("genepool", GeneticsTexture.Genepool, 12661942, true); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentGeneticGUI(machine, GeneticsGUI.Genepool); + final ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + inventory.addSlot(7, "enzyme"); + inventory.getSlot(7).setValidator(new SlotValidator.Item(GeneticsItems.Enzyme.get(1), ModuleMachine.IconEnzyme)); + inventory.getSlot(7).forbidExtraction(); + inventory.addSlot(0, "process"); + inventory.getSlot(0).setValidator(new SlotValidator.Individual()); + inventory.getSlot(0).setReadOnly(); + inventory.getSlot(0).forbidExtraction(); + inventory.addSlotArray(Genepool.slotReserve, "input"); + for (final InventorySlot slot : inventory.getSlots(Genepool.slotReserve)) { + slot.setValidator(new SlotValidator.Individual()); + slot.forbidExtraction(); + } + final ComponentTankContainer tanks = new ComponentTankContainer(machine); + tanks.addTank(0, "output", 2000); + tanks.getTankSlot(0).setReadOnly(); + tanks.addTank(1, "input", 1000); + tanks.getTankSlot(1).forbidExtraction(); + tanks.getTankSlot(1).setValidator(new TankValidator() { + @Override + public String getTooltip() { + return "Ethanol"; + } + + @Override + public boolean isValid(final FluidStack stack) { + return stack.getFluid().getName() == "bioethanol"; + } + }); + final ComponentInventoryTransfer transfer = new ComponentInventoryTransfer(machine); + transfer.addRestock(Genepool.slotReserve, 0, 1); + new ComponentPowerReceptor(machine, 1600); + new ComponentGenepoolLogic(machine); + final ComponentChargedSlots chargedSlots = new ComponentChargedSlots(machine); + chargedSlots.addCharge(7); + new ComponentGenepoolFX(machine); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + } + + public static class ComponentGenepoolLogic extends ComponentProcessSetCost implements IProcess + { + float enzymePerProcess; + float ethanolPerProcess; + private float ethanolDrain; + + public ComponentGenepoolLogic(final Machine machine) { + super(machine, 8000, 400); + this.enzymePerProcess = 0.25f; + this.ethanolPerProcess = 50.0f; + this.ethanolDrain = 0.0f; + } + + @Override + public ErrorState canWork() { + if (this.getUtil().isSlotEmpty(0)) { + return new ErrorState.NoItem("No Individual", 0); + } + return super.canWork(); + } + + @Override + public ErrorState canProgress() { + if (!this.getUtil().spaceInTank(0, this.getDNAAmount(this.getUtil().getStack(0)))) { + return new ErrorState.NoSpace("Not enough room in Tank", new int[] { 0 }); + } + if (!this.getUtil().liquidInTank(1, 1)) { + return new ErrorState.InsufficientLiquid("Not enough Ethanol", 1); + } + if (this.getUtil().getSlotCharge(7) == 0.0f) { + return new ErrorState.NoItem("Insufficient Enzyme", 7); + } + return super.canProgress(); + } + + @Override + protected void onFinishTask() { + super.onFinishTask(); + final int amount = this.getDNAAmount(this.getUtil().getStack(0)); + this.getUtil().fillTank(0, GeneticLiquid.RawDNA.get(amount)); + this.getUtil().deleteStack(0); + } + + private int getDNAAmount(final ItemStack stack) { + final ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(stack); + if (root == null) { + return 10; + } + if (root != Binnie.Genetics.getBeeRoot()) { + return 10; + } + if (Binnie.Genetics.getBeeRoot().isDrone(stack)) { + return 10; + } + if (Binnie.Genetics.getBeeRoot().isMated(stack)) { + return 50; + } + return 30; + } + + @Override + protected void onTickTask() { + this.ethanolDrain += this.getDNAAmount(this.getUtil().getStack(0)) * 1.2f * this.getProgressPerTick() / 100.0f; + if (this.ethanolDrain >= 1.0f) { + this.getUtil().drainTank(1, 1); + --this.ethanolDrain; + } + this.getMachine().getInterface(IChargedSlots.class).alterCharge(7, -this.enzymePerProcess * this.getProgressPerTick() / 100.0f); + } + } + + public static class ComponentGenepoolFX extends MachineComponent implements IRender.RandomDisplayTick, IRender.DisplayTick + { + public ComponentGenepoolFX(final IMachine machine) { + super(machine); + } + + @SideOnly(Side.CLIENT) + @Override + public void onRandomDisplayTick(final World world, final int x, final int y, final int z, final Random rand) { + } + + @SideOnly(Side.CLIENT) + @Override + public void onDisplayTick(final World world, final int x, final int y, final int z, final Random rand) { + if (rand.nextFloat() < 1.0f && this.getUtil().getProcess().isInProgress()) { + BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.3 + rand.nextDouble() * 0.4, y + 1, z + 0.3 + rand.nextDouble() * 0.4, 0.0, 0.0, 0.0) { + double axisX = this.posX; + double axisZ = this.posZ; + double angle = this.rand.nextDouble() * 2.0 * 3.1415; + + { + this.axisX = 0.0; + this.axisZ = 0.0; + this.angle = 0.0; + this.motionX = 0.0; + this.motionZ = 0.0; + this.motionY = this.rand.nextFloat() * 0.01; + this.particleMaxAge = 25; + this.particleGravity = 0.0f; + this.noClip = true; + this.setRBGColorF(0.4f + 0.6f * this.rand.nextFloat(), 0.6f * this.rand.nextFloat(), 0.6f + 0.4f * this.rand.nextFloat()); + } + + @Override + public void onUpdate() { + super.onUpdate(); + this.setAlphaF((float) Math.cos(1.57 * this.particleAge / this.particleMaxAge)); + } + + @Override + public int getFXLayer() { + return 0; + } + }); + } + } + } +} diff --git a/src/main/java/binnie/genetics/machine/GeneticMachine.java b/src/main/java/binnie/genetics/machine/GeneticMachine.java new file mode 100644 index 00000000..938fe7a6 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/GeneticMachine.java @@ -0,0 +1,71 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.machine; + +import net.minecraft.client.renderer.RenderBlocks; +import binnie.core.machines.Machine; +import binnie.core.machines.TileEntityMachine; +import net.minecraft.tileentity.TileEntity; +import binnie.core.resource.IBinnieTexture; +import binnie.core.resource.BinnieResource; +import net.minecraft.block.Block; +import binnie.genetics.Genetics; +import net.minecraft.item.ItemStack; +import binnie.core.machines.MachinePackage; +import binnie.core.machines.IMachineType; + +public enum GeneticMachine implements IMachineType +{ + Isolator(Isolator.PackageIsolator.class), + Sequencer(Sequencer.PackageSequencer.class), + Polymeriser(Polymeriser.PackagePolymeriser.class), + Inoculator(Inoculator.PackageInoculator.class); + + Class clss; + + private GeneticMachine(final Class clss) { + this.clss = clss; + } + + @Override + public Class getPackageClass() { + return this.clss; + } + + @Override + public boolean isActive() { + return true; + } + + public ItemStack get(final int i) { + return new ItemStack(Genetics.packageGenetic.getBlock(), i, this.ordinal()); + } + + public abstract static class PackageGeneticBase extends MachinePackage + { + BinnieResource renderTexture; + int colour; + + protected PackageGeneticBase(final String uid, final IBinnieTexture renderTexture, final int flashColour, final boolean powered) { + super(uid, powered); + this.renderTexture = renderTexture.getTexture(); + this.colour = flashColour; + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + + @Override + public void renderMachine(final Machine machine, final double x, final double y, final double z, final float var8, final RenderBlocks renderer) { + MachineRendererGenetics.instance.renderMachine(machine, this.colour, this.renderTexture, x, y, z, var8); + } + } +} diff --git a/src/main/java/binnie/genetics/machine/Incubator.java b/src/main/java/binnie/genetics/machine/Incubator.java new file mode 100644 index 00000000..a46f9c6f --- /dev/null +++ b/src/main/java/binnie/genetics/machine/Incubator.java @@ -0,0 +1,360 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.machine; + +import binnie.core.machines.transfer.TransferRequest; +import binnie.core.machines.power.ErrorState; +import java.util.Random; +import binnie.core.machines.power.IProcess; +import binnie.core.machines.power.ComponentProcessIndefinate; +import binnie.core.machines.TileEntityMachine; +import net.minecraft.tileentity.TileEntity; +import binnie.core.machines.inventory.InventorySlot; +import binnie.core.machines.inventory.ComponentTankContainer; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.genetics.core.GeneticsGUI; +import binnie.core.machines.Machine; +import binnie.genetics.core.GeneticsTexture; +import binnie.craftgui.minecraft.IMachineInformation; +import java.util.ArrayList; +import forestry.api.apiculture.IBee; +import forestry.api.genetics.IIndividual; +import binnie.core.machines.MachineUtil; +import forestry.api.apiculture.EnumBeeType; +import binnie.core.BinnieCore; +import net.minecraft.init.Items; +import binnie.genetics.item.GeneticsItems; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; +import binnie.genetics.item.GeneticLiquid; +import binnie.Binnie; +import binnie.genetics.api.IIncubatorRecipe; +import java.util.List; + +public class Incubator +{ + public static final int[] slotQueue; + public static final int slotIncubator = 3; + public static final int[] slotOutput; + public static final int tankInput = 0; + public static final int tankOutput = 1; + private static List RECIPES; + + public static void addRecipes() { + Incubator.RECIPES.add(new IncubatorRecipe(Binnie.Liquid.getLiquidStack("water", 25), GeneticLiquid.GrowthMedium.get(25), 0.2f) { + @Override + public boolean isItemStack(final ItemStack stack) { + return GeneticsItems.GrowthMedium.get(1).isItemEqual(stack); + } + }); + Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.GrowthMedium.get(25), GeneticLiquid.Bacteria.get(5), 0.2f) { + @Override + public boolean isItemStack(final ItemStack stack) { + return new ItemStack(Items.wheat).isItemEqual(stack); + } + }); + Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.Bacteria.get(0), GeneticLiquid.Bacteria.get(5), 0.05f) { + @Override + public boolean isItemStack(final ItemStack stack) { + return GeneticsItems.GrowthMedium.get(1).isItemEqual(stack); + } + }); + Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.Bacteria.get(2), null, 0.5f, 0.2f) { + @Override + public boolean isItemStack(final ItemStack stack) { + return stack.getItem() == Items.sugar; + } + }.setOutputStack(GeneticsItems.Enzyme.get(1))); + Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.BacteriaPoly.get(0), GeneticLiquid.BacteriaPoly.get(5), 0.05f) { + @Override + public boolean isItemStack(final ItemStack stack) { + return GeneticsItems.GrowthMedium.get(1).isItemEqual(stack); + } + }); + Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.BacteriaVector.get(0), GeneticLiquid.BacteriaVector.get(5), 0.05f) { + @Override + public boolean isItemStack(final ItemStack stack) { + return GeneticsItems.GrowthMedium.get(1).isItemEqual(stack); + } + }); + Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.Bacteria.get(10), GeneticLiquid.BacteriaPoly.get(10), 0.1f) { + @Override + public boolean isItemStack(final ItemStack stack) { + return new ItemStack(Items.dye, 1, 15).isItemEqual(stack); + } + }); + Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.Bacteria.get(10), GeneticLiquid.BacteriaVector.get(10), 0.05f) { + @Override + public boolean isItemStack(final ItemStack stack) { + return new ItemStack(Items.blaze_powder).isItemEqual(stack); + } + }); + if (BinnieCore.isApicultureActive()) { + Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.GrowthMedium.get(50), null, 1.0f, 0.05f) { + @Override + public boolean isItemStack(final ItemStack stack) { + return Binnie.Genetics.getBeeRoot().isMember(stack) && Binnie.Genetics.getBeeRoot().getType(stack) == EnumBeeType.LARVAE; + } + + @Override + public ItemStack getOutputStack(final MachineUtil machine) { + final ItemStack larvae = machine.getStack(3); + final IBee bee = Binnie.Genetics.getBeeRoot().getMember(larvae); + return Binnie.Genetics.getBeeRoot().getMemberStack(bee, EnumBeeType.DRONE.ordinal()); + } + }); + } + } + + static { + slotQueue = new int[] { 0, 1, 2 }; + slotOutput = new int[] { 4, 5, 6 }; + Incubator.RECIPES = new ArrayList(); + } + + public static class PackageIncubator extends GeneticMachine.PackageGeneticBase implements IMachineInformation + { + public PackageIncubator() { + super("incubator", GeneticsTexture.Incubator, 16767313, true); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentGeneticGUI(machine, GeneticsGUI.Incubator); + final ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + inventory.addSlotArray(Incubator.slotQueue, "input"); + for (final InventorySlot slot : inventory.getSlots(Incubator.slotQueue)) { + slot.forbidExtraction(); + } + inventory.addSlot(3, "incubator"); + inventory.getSlot(3).forbidInteraction(); + inventory.getSlot(3).setReadOnly(); + inventory.addSlotArray(Incubator.slotOutput, "output"); + for (final InventorySlot slot : inventory.getSlots(Incubator.slotOutput)) { + slot.forbidInsertion(); + slot.setReadOnly(); + } + new ComponentPowerReceptor(machine, 2000); + final ComponentTankContainer tanks = new ComponentTankContainer(machine); + tanks.addTank(0, "input", 2000).forbidExtraction(); + tanks.addTank(1, "output", 2000).setReadOnly(); + new ComponentIncubatorLogic(machine); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + } + + public static class ComponentIncubatorLogic extends ComponentProcessIndefinate implements IProcess + { + IIncubatorRecipe recipe; + private Random rand; + private boolean roomForOutput; + + public ComponentIncubatorLogic(final Machine machine) { + super(machine, 2.0f); + this.recipe = null; + this.rand = new Random(); + this.roomForOutput = true; + } + + @Override + public ErrorState canWork() { + if (this.recipe == null) { + return new ErrorState("No Recipe", "There is no valid recipe"); + } + return super.canWork(); + } + + @Override + public ErrorState canProgress() { + if (this.recipe != null) { + if (!this.recipe.isInputLiquidSufficient(this.getUtil().getFluid(0))) { + return new ErrorState.InsufficientLiquid("Not enough incubation liquid", 0); + } + if (!this.roomForOutput) { + return new ErrorState.TankSpace("No room for output", 1); + } + } + return super.canProgress(); + } + + @Override + protected void onTickTask() { + if (this.rand.nextInt(20) == 0 && this.recipe != null && this.rand.nextFloat() < this.recipe.getChance()) { + this.recipe.doTask(this.getUtil()); + } + } + + @Override + public boolean inProgress() { + return this.recipe != null; + } + + private IIncubatorRecipe getRecipe(final ItemStack stack, final FluidStack liquid) { + for (final IIncubatorRecipe recipe : Incubator.RECIPES) { + final boolean rightLiquid = recipe.isInputLiquid(liquid); + final boolean rightItem = recipe.isItemStack(stack); + if (rightLiquid && rightItem) { + return recipe; + } + } + return null; + } + + @Override + public void onInventoryUpdate() { + super.onInventoryUpdate(); + if (!this.getUtil().isServer()) { + return; + } + final FluidStack liquid = this.getUtil().getFluid(0); + final ItemStack incubator = this.getUtil().getStack(3); + if (this.recipe != null && (incubator == null || liquid == null || !this.recipe.isInputLiquid(liquid) || !this.recipe.isItemStack(incubator))) { + this.recipe = null; + final ItemStack leftover = new TransferRequest(incubator, this.getInventory()).setTargetSlots(Incubator.slotOutput).ignoreValidation().transfer(true); + this.getUtil().setStack(3, leftover); + } + if (this.recipe == null) { + if (liquid == null) { + return; + } + if (incubator != null) { + final IIncubatorRecipe recipe = this.getRecipe(incubator, liquid); + if (recipe != null) { + this.recipe = recipe; + return; + } + } + IIncubatorRecipe potential = null; + int potentialSlot = 0; + for (final int slot : Incubator.slotQueue) { + final ItemStack stack = this.getUtil().getStack(slot); + if (stack != null) { + if (potential == null) { + for (final IIncubatorRecipe recipe2 : Incubator.RECIPES) { + final boolean rightLiquid = recipe2.isInputLiquid(liquid); + final boolean rightItem = recipe2.isItemStack(stack); + if (rightLiquid && rightItem) { + potential = recipe2; + potentialSlot = slot; + break; + } + } + } + } + } + if (potential != null) { + final TransferRequest removal = new TransferRequest(incubator, this.getInventory()).setTargetSlots(Incubator.slotOutput).ignoreValidation(); + if (removal.transfer(false) == null) { + this.recipe = potential; + } + removal.transfer(true); + final ItemStack stack2 = this.getUtil().getStack(potentialSlot); + this.getUtil().setStack(potentialSlot, null); + this.getUtil().setStack(3, stack2); + } + } + if (this.recipe != null) { + this.roomForOutput = this.recipe.roomForOutput(this.getUtil()); + } + } + } + + private class IncubatorCrafting + { + ItemStack input; + FluidStack fluid; + } + + private abstract static class IncubatorRecipe implements IIncubatorRecipe + { + FluidStack input; + FluidStack output; + float lossChance; + ItemStack outputStack; + float tickChance; + + @Override + public float getChance() { + return this.tickChance; + } + + public IncubatorRecipe(final FluidStack input, final FluidStack output, final float lossChance) { + this(input, output, lossChance, 1.0f); + } + + public IncubatorRecipe(final FluidStack input, final FluidStack output, final float lossChance, final float chance) { + this.input = input; + this.output = output; + this.lossChance = lossChance; + this.tickChance = chance; + } + + @Override + public boolean isInputLiquid(final FluidStack fluid) { + return fluid != null && this.input.isFluidEqual(fluid); + } + + @Override + public boolean isInputLiquidSufficient(final FluidStack fluid) { + return fluid != null && fluid.amount >= 500; + } + + @Override + public void doTask(final MachineUtil machine) { + machine.drainTank(0, this.input.amount); + if (this.output != null) { + machine.fillTank(1, this.output); + } + this.outputStack = this.getOutputStack(machine); + if (this.outputStack != null) { + final ItemStack output = this.outputStack.copy(); + final TransferRequest product = new TransferRequest(output, machine.getInventory()).setTargetSlots(Incubator.slotOutput).ignoreValidation(); + product.transfer(true); + } + final Random rand = machine.getRandom(); + if (rand.nextFloat() < this.lossChance) { + machine.decreaseStack(3, 1); + } + } + + public IncubatorRecipe setOutputStack(final ItemStack stack) { + this.outputStack = stack; + return this; + } + + protected ItemStack getOutputStack(final MachineUtil util) { + return this.outputStack; + } + + @Override + public boolean roomForOutput(final MachineUtil machine) { + if (this.output != null && !machine.isTankEmpty(1)) { + if (!machine.getFluid(1).isFluidEqual(this.output)) { + return false; + } + if (!machine.spaceInTank(1, this.output.amount)) { + return false; + } + } + final ItemStack outputStack = this.getOutputStack(machine); + if (outputStack != null) { + final ItemStack output = outputStack.copy(); + final TransferRequest product = new TransferRequest(output, machine.getInventory()).setTargetSlots(Incubator.slotOutput).ignoreValidation(); + final ItemStack leftover = product.transfer(false); + return leftover == null; + } + return true; + } + } +} diff --git a/src/main/java/binnie/genetics/machine/Inoculator.java b/src/main/java/binnie/genetics/machine/Inoculator.java new file mode 100644 index 00000000..b61ece5b --- /dev/null +++ b/src/main/java/binnie/genetics/machine/Inoculator.java @@ -0,0 +1,425 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.machine; + +import forestry.api.genetics.ISpeciesRoot; +import binnie.Binnie; +import net.minecraft.nbt.NBTBase; +import net.minecraft.entity.player.EntityPlayer; +import org.lwjgl.opengl.GL11; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.particle.EntityFX; +import binnie.core.BinnieCore; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import java.util.Random; +import net.minecraft.world.World; +import net.minecraft.entity.item.EntityItem; +import binnie.core.machines.network.INetwork; +import binnie.core.machines.component.IRender; +import binnie.core.machines.MachineComponent; +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.IIndividual; +import binnie.core.machines.power.ErrorState; +import binnie.core.machines.power.IProcess; +import binnie.core.machines.power.ComponentProcessSetCost; +import binnie.core.machines.TileEntityMachine; +import net.minecraft.tileentity.TileEntity; +import binnie.core.machines.inventory.InventorySlot; +import binnie.genetics.item.GeneticLiquid; +import net.minecraftforge.fluids.FluidStack; +import binnie.core.machines.inventory.ComponentTankContainer; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.genetics.genetics.Engineering; +import binnie.core.machines.inventory.ComponentInventoryTransfer; +import binnie.core.machines.inventory.Validator; +import binnie.genetics.api.IItemSerum; +import binnie.core.machines.inventory.SlotValidator; +import binnie.core.machines.IMachine; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.genetics.core.GeneticsGUI; +import binnie.core.machines.Machine; +import binnie.genetics.core.GeneticsTexture; +import binnie.craftgui.minecraft.IMachineInformation; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagCompound; +import forestry.api.genetics.IAllele; +import forestry.api.apiculture.IBeeRoot; +import forestry.api.apiculture.EnumBeeChromosome; +import net.minecraft.item.ItemStack; +import binnie.genetics.api.IGene; + +public class Inoculator +{ + public static final int slotSerumVial = 0; + public static final int[] slotSerumReserve; + public static final int[] slotSerumExpended; + public static final int[] slotReserve; + public static final int slotTarget = 9; + public static final int[] slotFinished; + public static final int tankVector = 0; + + public static void setGene(final IGene gene, final ItemStack target, final int chromoN) { + int chromosomeID; + final int chromosome = chromosomeID = gene.getChromosome().ordinal(); + if (chromosomeID >= EnumBeeChromosome.HUMIDITY.ordinal() && gene.getSpeciesRoot() instanceof IBeeRoot) { + --chromosomeID; + } + final Class cls = gene.getChromosome().getAlleleClass(); + if (!cls.isInstance(gene.getAllele())) { + return; + } + final NBTTagCompound beeNBT = target.getTagCompound(); + final NBTTagCompound genomeNBT = beeNBT.getCompoundTag("Genome"); + final NBTTagList chromosomes = genomeNBT.getTagList("Chromosomes", 10); + final NBTTagCompound chromosomeNBT = chromosomes.getCompoundTagAt(chromosomeID); + chromosomeNBT.setString("UID" + chromoN, gene.getAllele().getUID()); + target.setTagCompound(beeNBT); + } + + static { + slotSerumReserve = new int[] { 1, 2 }; + slotSerumExpended = new int[] { 3, 4 }; + slotReserve = new int[] { 5, 6, 7, 8 }; + slotFinished = new int[] { 10, 11, 12, 13 }; + } + + public static class PackageInoculator extends GeneticMachine.PackageGeneticBase implements IMachineInformation + { + public PackageInoculator() { + super("inoculator", GeneticsTexture.Inoculator, 14819893, true); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentGeneticGUI(machine, GeneticsGUI.Inoculator); + final ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + inventory.addSlot(0, "serum.active"); + inventory.getSlot(0).forbidInteraction(); + inventory.getSlot(0).setReadOnly(); + final SlotValidator serumValid = new SlotValidator(ModuleMachine.IconSerum) { + @Override + public boolean isValid(final ItemStack itemStack) { + return itemStack.getItem() instanceof IItemSerum; + } + + @Override + public String getTooltip() { + return "Serum Vials & Arrays"; + } + }; + inventory.getSlot(0).setValidator(serumValid); + inventory.addSlotArray(Inoculator.slotSerumReserve, "serum.input"); + for (final InventorySlot slot : inventory.getSlots(Inoculator.slotSerumReserve)) { + slot.setValidator(serumValid); + slot.forbidExtraction(); + } + inventory.addSlotArray(Inoculator.slotSerumExpended, "serum.output"); + for (final InventorySlot slot : inventory.getSlots(Inoculator.slotSerumExpended)) { + slot.setValidator(serumValid); + slot.setReadOnly(); + } + inventory.addSlotArray(Inoculator.slotReserve, "input"); + for (final InventorySlot slot : inventory.getSlots(Inoculator.slotReserve)) { + slot.forbidExtraction(); + slot.setValidator(new ValidatorIndividualInoculate()); + } + inventory.addSlot(9, "process"); + inventory.getSlot(9).setValidator(new ValidatorIndividualInoculate()); + inventory.getSlot(9).setReadOnly(); + inventory.getSlot(9).forbidInteraction(); + inventory.addSlotArray(Inoculator.slotFinished, "output"); + for (final InventorySlot slot : inventory.getSlots(Inoculator.slotFinished)) { + slot.setReadOnly(); + slot.forbidInsertion(); + slot.setValidator(new ValidatorIndividualInoculate()); + } + final ComponentInventoryTransfer transfer = new ComponentInventoryTransfer(machine); + transfer.addRestock(Inoculator.slotReserve, 9, 1); + transfer.addRestock(Inoculator.slotSerumReserve, 0); + transfer.addStorage(0, Inoculator.slotSerumExpended, new ComponentInventoryTransfer.Condition() { + @Override + public boolean fufilled(final ItemStack stack) { + return Engineering.getCharges(stack) == 0; + } + }); + transfer.addStorage(9, Inoculator.slotFinished, new ComponentInventoryTransfer.Condition() { + @Override + public boolean fufilled(final ItemStack stack) { + return stack != null && this.transfer.getMachine().getMachineUtil().getStack(0) != null && this.transfer.getMachine().getInterface(ComponentInoculatorLogic.class).isValidSerum() != null; + } + }); + new ComponentPowerReceptor(machine, 15000); + new ComponentInoculatorLogic(machine); + new ComponentInoculatorFX(machine); + new ComponentTankContainer(machine).addTank(0, "input", 1000).setValidator(new Validator() { + @Override + public boolean isValid(final FluidStack object) { + return GeneticLiquid.BacteriaVector.get(1).isFluidEqual(object); + } + + @Override + public String getTooltip() { + return GeneticLiquid.BacteriaVector.getName(); + } + }); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + } + + public static class ComponentInoculatorLogic extends ComponentProcessSetCost implements IProcess + { + private float bacteriaDrain; + + @Override + public int getProcessLength() { + return super.getProcessLength() * this.getNumberOfGenes(); + } + + @Override + public int getProcessEnergy() { + return super.getProcessEnergy() * this.getNumberOfGenes(); + } + + private int getNumberOfGenes() { + final ItemStack serum = this.getUtil().getStack(0); + if (serum == null) { + return 1; + } + return Engineering.getGenes(serum).length; + } + + @Override + public String getTooltip() { + final int n = this.getNumberOfGenes(); + return "Inoculating with " + n + " gene" + ((n > 1) ? "s" : ""); + } + + public ComponentInoculatorLogic(final Machine machine) { + super(machine, 600000, 12000); + this.bacteriaDrain = 0.0f; + } + + @Override + public ErrorState canWork() { + if (this.getUtil().isSlotEmpty(9)) { + return new ErrorState.NoItem("No Individual to Inoculate", 9); + } + if (this.getUtil().isSlotEmpty(0)) { + return new ErrorState.NoItem("No Serum", 0); + } + final ErrorState state = this.isValidSerum(); + if (state != null) { + return state; + } + if (this.getUtil().getStack(0) != null && Engineering.getCharges(this.getUtil().getStack(0)) == 0) { + return new ErrorState("Empty Serum", "Serum is empty"); + } + return super.canWork(); + } + + public ErrorState isValidSerum() { + final ItemStack serum = this.getUtil().getStack(0); + final ItemStack target = this.getUtil().getStack(9); + final IGene[] genes = Engineering.getGenes(serum); + if (genes.length == 0) { + return new ErrorState("Invalid Serum", "Serum does not hold any genes"); + } + if (!genes[0].getSpeciesRoot().isMember(target)) { + return new ErrorState("Invalid Serum", "Mismatch of Serum Type and Target"); + } + final IIndividual individual = genes[0].getSpeciesRoot().getMember(target); + boolean hasAll = true; + for (final IGene gene : genes) { + if (hasAll) { + final IAllele a = individual.getGenome().getActiveAllele(gene.getChromosome()); + final IAllele b = individual.getGenome().getInactiveAllele(gene.getChromosome()); + hasAll = (hasAll && a.getUID().equals(gene.getAllele().getUID()) && b.getUID().equals(gene.getAllele().getUID())); + } + } + if (hasAll) { + return new ErrorState("Defunct Serum", "Individual already possesses this allele"); + } + return null; + } + + @Override + public ErrorState canProgress() { + return super.canProgress(); + } + + @Override + protected void onFinishTask() { + super.onFinishTask(); + final ItemStack serum = this.getUtil().getStack(0); + final ItemStack target = this.getUtil().getStack(9); + final IIndividual ind = AlleleManager.alleleRegistry.getIndividual(target); + if (!ind.isAnalyzed()) { + ind.analyze(); + final NBTTagCompound nbttagcompound = new NBTTagCompound(); + ind.writeToNBT(nbttagcompound); + target.setTagCompound(nbttagcompound); + } + final IGene[] arr$; + final IGene[] genes = arr$ = ((IItemSerum) serum.getItem()).getGenes(serum); + for (final IGene gene : arr$) { + Inoculator.setGene(gene, target, 0); + Inoculator.setGene(gene, target, 1); + } + this.getUtil().damageItem(0, 1); + } + + @Override + protected void onTickTask() { + this.bacteriaDrain += 15.0f * this.getProgressPerTick() / 100.0f; + if (this.bacteriaDrain >= 1.0f) { + this.getUtil().drainTank(0, 1); + --this.bacteriaDrain; + } + } + } + + public static class ComponentInoculatorFX extends MachineComponent implements IRender.RandomDisplayTick, IRender.DisplayTick, IRender.Render, INetwork.TilePacketSync + { + private final EntityItem dummyEntityItem; + + public ComponentInoculatorFX(final IMachine machine) { + super(machine); + this.dummyEntityItem = new EntityItem((World) null); + } + + @SideOnly(Side.CLIENT) + @Override + public void onRandomDisplayTick(final World world, final int x, final int y, final int z, final Random rand) { + } + + @SideOnly(Side.CLIENT) + @Override + public void onDisplayTick(final World world, final int x, final int y, final int z, final Random rand) { + final int tick = (int) (world.getTotalWorldTime() % 3L); + if (tick == 0 && this.getUtil().getProcess().isInProgress()) { + BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.5, y + 0.92, z + 0.5, 0.0, 0.0, 0.0) { + double axisX = this.posX; + double axisZ = this.posZ; + double angle = (int) (this.worldObj.getTotalWorldTime() % 4L) * 0.5 * 3.1415; + + { + this.axisX = 0.0; + this.axisZ = 0.0; + this.angle = 0.0; + this.motionX = 0.0; + this.motionZ = 0.0; + this.motionY = 0.007 + this.rand.nextDouble() * 0.002; + this.particleMaxAge = 240; + this.particleGravity = 0.0f; + this.noClip = true; + this.setRBGColorF(0.8f, 0.0f, 1.0f); + } + + @Override + public void onUpdate() { + super.onUpdate(); + double speed = 5.0E-4; + if (this.particleAge > 60) { + speed += (this.particleAge - 60) / 4000.0f; + } + this.angle += speed; + final double dist = 0.27; + this.setPosition(this.axisX + dist * Math.sin(this.angle), this.posY, this.axisZ + dist * Math.cos(this.angle)); + this.setAlphaF((float) Math.cos(1.57 * this.particleAge / this.particleMaxAge)); + if (this.particleAge > 40) { + this.setRBGColorF(this.particleRed + (1.0f - this.particleRed) / 10.0f, this.particleGreen + (0.0f - this.particleGreen) / 10.0f, this.particleBlue + (0.0f - this.particleBlue) / 10.0f); + } + } + + @Override + public int getFXLayer() { + return 0; + } + }); + } + } + + @SideOnly(Side.CLIENT) + @Override + public void renderInWorld(final RenderItem customRenderItem, final double x, final double y, final double z) { + if (!this.getUtil().getProcess().isInProgress()) { + return; + } + final ItemStack stack = this.getUtil().getStack(9); + this.dummyEntityItem.worldObj = this.getMachine().getWorld(); + this.dummyEntityItem.setEntityItemStack(stack); + final EntityItem dummyEntityItem = this.dummyEntityItem; + ++dummyEntityItem.age; + this.dummyEntityItem.hoverStart = 0.0f; + if (stack == null) { + return; + } + final EntityPlayer player = BinnieCore.proxy.getPlayer(); + final double dx = x + 0.5 - player.lastTickPosX; + final double dz = z + 0.5 - player.lastTickPosZ; + final double t = Math.atan2(dz, dx) * 180.0 / 3.1415; + GL11.glPushMatrix(); + GL11.glRotatef(180.0f, 0.0f, 0.0f, 1.0f); + GL11.glTranslatef(0.0f, -0.25f, 0.0f); + customRenderItem.doRender(this.dummyEntityItem, 0.0, 0.0, 0.0, 0.0f, 0.0f); + GL11.glPopMatrix(); + } + + @Override + public void syncToNBT(final NBTTagCompound nbt) { + final NBTTagCompound item = new NBTTagCompound(); + final ItemStack stack = this.getUtil().getStack(9); + if (stack != null) { + stack.writeToNBT(item); + nbt.setTag("item", item); + } + } + + @Override + public void syncFromNBT(final NBTTagCompound nbt) { + if (nbt.hasKey("item")) { + this.getUtil().setStack(9, ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("item"))); + } + else { + this.getUtil().setStack(9, null); + } + } + + @Override + public void onInventoryUpdate() { + if (!this.getUtil().isServer()) { + return; + } + this.getUtil().refreshBlock(); + } + } + + public static class ValidatorIndividualInoculate extends SlotValidator + { + public ValidatorIndividualInoculate() { + super(null); + } + + @Override + public boolean isValid(final ItemStack object) { + final ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(object); + return root != null && Binnie.Genetics.getSystem(root).isDNAManipulable(object); + } + + @Override + public String getTooltip() { + return "Inoculable Individual"; + } + } +} diff --git a/src/main/java/binnie/genetics/machine/Isolator.java b/src/main/java/binnie/genetics/machine/Isolator.java new file mode 100644 index 00000000..902b552b --- /dev/null +++ b/src/main/java/binnie/genetics/machine/Isolator.java @@ -0,0 +1,282 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.machine; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.particle.EntityFX; +import binnie.core.BinnieCore; +import net.minecraft.world.World; +import binnie.core.machines.component.IRender; +import binnie.core.machines.MachineComponent; +import binnie.core.machines.inventory.IChargedSlots; +import net.minecraft.item.ItemStack; +import forestry.api.genetics.IChromosomeType; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.IIndividual; +import forestry.api.genetics.ISpeciesRoot; +import java.util.Random; +import binnie.genetics.item.ItemSequence; +import binnie.core.genetics.Gene; +import forestry.api.genetics.AlleleManager; +import binnie.core.machines.power.ErrorState; +import binnie.core.machines.power.IProcess; +import binnie.core.machines.power.ComponentProcessSetCost; +import binnie.core.machines.TileEntityMachine; +import net.minecraft.tileentity.TileEntity; +import binnie.core.machines.inventory.InventorySlot; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.core.machines.inventory.ComponentInventoryTransfer; +import binnie.core.machines.inventory.ComponentChargedSlots; +import net.minecraftforge.fluids.FluidStack; +import binnie.core.machines.inventory.TankValidator; +import binnie.core.machines.inventory.ComponentTankContainer; +import binnie.core.machines.inventory.SlotValidator; +import binnie.genetics.item.GeneticsItems; +import binnie.core.machines.IMachine; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.genetics.core.GeneticsGUI; +import binnie.core.machines.Machine; +import binnie.genetics.core.GeneticsTexture; +import binnie.craftgui.minecraft.IMachineInformation; + +public class Isolator +{ + public static final int slotEnzyme = 0; + public static final int slotSequencerVial = 1; + public static final int[] slotReserve; + public static final int slotTarget = 5; + public static final int slotResult = 6; + public static final int[] slotFinished; + public static final int tankEthanol = 0; + + static { + slotReserve = new int[] { 2, 3, 4 }; + slotFinished = new int[] { 7, 8, 9, 10, 11, 12 }; + } + + public static class PackageIsolator extends GeneticMachine.PackageGeneticBase implements IMachineInformation + { + public PackageIsolator() { + super("isolator", GeneticsTexture.Isolator, 16740111, true); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentGeneticGUI(machine, GeneticsGUI.Isolator); + final ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + inventory.addSlot(0, "enzyme"); + inventory.getSlot(0).setValidator(new SlotValidator.Item(GeneticsItems.Enzyme.get(1), ModuleMachine.IconEnzyme)); + inventory.getSlot(0).forbidExtraction(); + inventory.addSlot(1, "sequencervial"); + inventory.getSlot(1).setValidator(new SlotValidator.Item(GeneticsItems.EmptySequencer.get(1), ModuleMachine.IconSequencer)); + inventory.getSlot(1).forbidExtraction(); + inventory.addSlotArray(Isolator.slotReserve, "input"); + for (final InventorySlot slot : inventory.getSlots(Isolator.slotReserve)) { + slot.setValidator(new SlotValidator.Individual()); + slot.forbidExtraction(); + } + inventory.addSlot(5, "process"); + inventory.getSlot(5).setValidator(new SlotValidator.Individual()); + inventory.getSlot(5).setReadOnly(); + inventory.getSlot(5).forbidInteraction(); + inventory.addSlot(6, "output"); + inventory.getSlot(6).setReadOnly(); + inventory.getSlot(6).forbidInteraction(); + inventory.addSlotArray(Isolator.slotFinished, "output"); + for (final InventorySlot slot : inventory.getSlots(Isolator.slotFinished)) { + slot.setReadOnly(); + slot.forbidInsertion(); + } + final ComponentTankContainer tanks = new ComponentTankContainer(machine); + tanks.addTank(0, "input", 1000); + tanks.getTankSlot(0).setValidator(new TankValidator() { + @Override + public String getTooltip() { + return "Ethanol"; + } + + @Override + public boolean isValid(final FluidStack stack) { + return stack.getFluid().getName() == "bioethanol"; + } + }); + final ComponentChargedSlots chargedSlots = new ComponentChargedSlots(machine); + chargedSlots.addCharge(0); + final ComponentInventoryTransfer transfer = new ComponentInventoryTransfer(machine); + transfer.addRestock(Isolator.slotReserve, 5, 1); + transfer.addStorage(6, Isolator.slotFinished); + new ComponentPowerReceptor(machine, 20000); + new ComponentIsolatorLogic(machine); + new ComponentIsolaterFX(machine); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + } + + public static class ComponentIsolatorLogic extends ComponentProcessSetCost implements IProcess + { + float enzymePerProcess; + float ethanolPerProcess; + + public ComponentIsolatorLogic(final Machine machine) { + super(machine, 192000, 4800); + this.enzymePerProcess = 0.5f; + this.ethanolPerProcess = 10.0f; + } + + @Override + public ErrorState canWork() { + if (this.getUtil().isSlotEmpty(5)) { + return new ErrorState.NoItem("No individual to isolate", 5); + } + if (!this.getUtil().isSlotEmpty(6)) { + return new ErrorState.NoSpace("No room for DNA sequences", Isolator.slotFinished); + } + if (this.getUtil().isSlotEmpty(1)) { + return new ErrorState.NoItem("No empty sequencer vials", 1); + } + return super.canWork(); + } + + @Override + public ErrorState canProgress() { + if (!this.getUtil().liquidInTank(0, (int) this.ethanolPerProcess)) { + return new ErrorState.InsufficientLiquid("Insufficient ethanol", 0); + } + if (this.getUtil().getSlotCharge(0) == 0.0f) { + return new ErrorState.NoItem("No enzyme", 0); + } + return super.canProgress(); + } + + @Override + protected void onFinishTask() { + super.onFinishTask(); + final Random rand = this.getMachine().getWorld().rand; + final ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(this.getUtil().getStack(5)); + if (root == null) { + return; + } + final IIndividual individual = root.getMember(this.getUtil().getStack(5)); + if (individual == null) { + return; + } + IAllele allele = null; + IChromosomeType chromosome = null; + Gene gene = null; + if (this.getMachine().getWorld().rand.nextFloat() < 2.0f) { + while (gene == null) { + try { + chromosome = root.getKaryotype()[rand.nextInt(root.getKaryotype().length)]; + allele = (rand.nextBoolean() ? individual.getGenome().getActiveAllele(chromosome) : individual.getGenome().getInactiveAllele(chromosome)); + gene = Gene.create(allele, chromosome, root); + } catch (Exception e) { + } + } + } + final ItemStack serum = ItemSequence.create(gene); + this.getUtil().setStack(6, serum); + this.getUtil().decreaseStack(1, 1); + if (rand.nextFloat() < 0.05f) { + this.getUtil().decreaseStack(5, 1); + } + this.getUtil().drainTank(0, (int) this.ethanolPerProcess); + } + + @Override + protected void onTickTask() { + this.getMachine().getInterface(IChargedSlots.class).alterCharge(0, -this.enzymePerProcess * this.getProgressPerTick() / 100.0f); + } + } + + public static class ComponentIsolaterFX extends MachineComponent implements IRender.RandomDisplayTick, IRender.DisplayTick + { + public ComponentIsolaterFX(final IMachine machine) { + super(machine); + } + + @SideOnly(Side.CLIENT) + @Override + public void onRandomDisplayTick(final World world, final int x, final int y, final int z, final Random rand) { + if (!this.getUtil().getProcess().isInProgress()) { + return; + } + BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.4 + 0.2 * rand.nextDouble(), y + 1.6, z + 0.4 + rand.nextDouble() * 0.2, 0.0, 0.0, 0.0) { + double axisX = 0.0; + double axisZ = 0.0; + double angle = 0.0; + + { + this.motionX = 0.0; + this.motionZ = 0.0; + this.motionY = -0.012; + this.particleMaxAge = 100; + this.particleGravity = 0.0f; + this.noClip = true; + this.setRBGColorF(0.8f, 0.4f, 0.0f); + } + + @Override + public void onUpdate() { + super.onUpdate(); + this.angle += 0.06; + this.setAlphaF((float) Math.sin(3.14 * this.particleAge / this.particleMaxAge)); + } + + @Override + public int getFXLayer() { + return 0; + } + }); + } + + @SideOnly(Side.CLIENT) + @Override + public void onDisplayTick(final World world, final int x, final int y, final int z, final Random rand) { + final int tick = (int) (world.getTotalWorldTime() % 6L); + if ((tick == 0 || tick == 5) && this.getUtil().getProcess().isInProgress()) { + BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.5, y + 1, z + 0.5, 0.0, 0.0, 0.0) { + double axisX = this.posX; + double axisZ = this.posZ; + double angle = 0.7 + (int) (this.worldObj.getTotalWorldTime() % 2L) * 3.1415; + + { + this.axisX = 0.0; + this.axisZ = 0.0; + this.angle = 0.0; + this.motionX = 0.0; + this.motionZ = 0.0; + this.motionY = 0.012; + this.particleMaxAge = 100; + this.particleGravity = 0.0f; + this.noClip = true; + this.setRBGColorF(0.8f, 0.0f, 1.0f); + } + + @Override + public void onUpdate() { + super.onUpdate(); + this.angle += 0.06; + this.setPosition(this.axisX + 0.26 * Math.sin(this.angle), this.posY, this.axisZ + 0.26 * Math.cos(this.angle)); + this.setAlphaF((float) Math.cos(1.57 * this.particleAge / this.particleMaxAge)); + } + + @Override + public int getFXLayer() { + return 0; + } + }); + } + } + } +} diff --git a/src/main/java/binnie/genetics/machine/LaboratoryMachine.java b/src/main/java/binnie/genetics/machine/LaboratoryMachine.java new file mode 100644 index 00000000..de8feead --- /dev/null +++ b/src/main/java/binnie/genetics/machine/LaboratoryMachine.java @@ -0,0 +1,189 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.machine; + +import java.util.List; +import binnie.extratrees.ExtraTrees; +import binnie.extrabees.ExtraBees; +import binnie.botany.Botany; +import net.minecraft.item.Item; +import java.util.ArrayList; +import buildcraft.api.tools.IToolWrench; +import binnie.core.BinnieCore; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import binnie.core.machines.component.IInteraction; +import binnie.core.machines.network.INetwork; +import binnie.core.machines.MachineComponent; +import net.minecraft.client.renderer.RenderBlocks; +import binnie.core.machines.IMachine; +import binnie.core.machines.Machine; +import binnie.genetics.core.GeneticsTexture; +import net.minecraft.block.Block; +import binnie.genetics.Genetics; +import net.minecraft.item.ItemStack; +import binnie.core.machines.MachinePackage; +import binnie.core.machines.IMachineType; + +public enum LaboratoryMachine implements IMachineType +{ + LabMachine(PackageLabMachine.class), + Analyser(Analyser.PackageAnalyser.class), + Incubator(Incubator.PackageIncubator.class), + Genepool(Genepool.PackageGenepool.class), + Acclimatiser(Acclimatiser.PackageAcclimatiser.class); + + Class clss; + + private LaboratoryMachine(final Class clss) { + this.clss = clss; + } + + @Override + public Class getPackageClass() { + return this.clss; + } + + @Override + public boolean isActive() { + return true; + } + + public ItemStack get(final int i) { + return new ItemStack(Genetics.packageLabMachine.getBlock(), i, this.ordinal()); + } + + public static class PackageLabMachine extends GeneticMachine.PackageGeneticBase + { + public PackageLabMachine() { + super("labMachine", GeneticsTexture.LabMachine, 16777215, false); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentGUIHolder(machine); + } + + @Override + public void renderMachine(final Machine machine, final double x, final double y, final double z, final float var8, final RenderBlocks renderer) { + MachineRendererLab.instance.renderMachine(machine, this.colour, this.renderTexture, x, y, z, var8); + } + } + + public static class ComponentGUIHolder extends MachineComponent implements INetwork.TilePacketSync, IInteraction.RightClick + { + private ItemStack stack; + + public ComponentGUIHolder(final IMachine machine) { + super(machine); + } + + public ItemStack getStack() { + return this.stack; + } + + @Override + public void readFromNBT(final NBTTagCompound nbttagcompound) { + super.readFromNBT(nbttagcompound); + if (nbttagcompound == null) { + return; + } + this.stack = ItemStack.loadItemStackFromNBT(nbttagcompound.getCompoundTag("Item")); + } + + @Override + public void writeToNBT(final NBTTagCompound nbttagcompound) { + super.writeToNBT(nbttagcompound); + final NBTTagCompound nbt = new NBTTagCompound(); + if (this.stack != null) { + this.stack.writeToNBT(nbt); + } + nbttagcompound.setTag("Item", nbt); + } + + @Override + public void syncToNBT(final NBTTagCompound nbt) { + this.writeToNBT(nbt); + } + + @Override + public void syncFromNBT(final NBTTagCompound nbt) { + this.readFromNBT(nbt); + } + + @Override + public void onDestruction() { + super.onDestruction(); + if (this.stack != null) { + final float f = this.getMachine().getWorld().rand.nextFloat() * 0.8f + 0.1f; + final float f2 = this.getMachine().getWorld().rand.nextFloat() * 0.8f + 0.1f; + final float f3 = this.getMachine().getWorld().rand.nextFloat() * 0.8f + 0.1f; + if (this.stack.stackSize == 0) { + this.stack.stackSize = 1; + } + final EntityItem entityitem = new EntityItem(this.getMachine().getWorld(), this.getMachine().getTileEntity().xCoord + f, this.getMachine().getTileEntity().yCoord + f2, this.getMachine().getTileEntity().zCoord + f3, this.stack.copy()); + final float accel = 0.05f; + entityitem.motionX = (float) this.getMachine().getWorld().rand.nextGaussian() * accel; + entityitem.motionY = (float) this.getMachine().getWorld().rand.nextGaussian() * accel + 0.2f; + entityitem.motionZ = (float) this.getMachine().getWorld().rand.nextGaussian() * accel; + this.getMachine().getWorld().spawnEntityInWorld(entityitem); + } + } + + @Override + public void onRightClick(final World world, final EntityPlayer player, final int x, final int y, final int z) { + if (BinnieCore.proxy.isSimulating(world) && player.getHeldItem() != null) { + if (this.stack != null && player.getHeldItem().getItem() instanceof IToolWrench) { + final float f = 0.7f; + final double d0 = world.rand.nextFloat() * f + (1.0f - f) * 0.5; + final double d2 = world.rand.nextFloat() * f + (1.0f - f) * 0.5; + final double d3 = world.rand.nextFloat() * f + (1.0f - f) * 0.5; + final EntityItem entityitem = new EntityItem(world, x + d0, y + d2, z + d3, this.stack); + entityitem.delayBeforeCanPickup = 10; + world.spawnEntityInWorld(entityitem); + this.stack = null; + ((IToolWrench) player.getHeldItem().getItem()).wrenchUsed(player, x, y, z); + this.getUtil().refreshBlock(); + return; + } + final List validSelections = new ArrayList(); + if (BinnieCore.isBotanyActive()) { + validSelections.add(Botany.database); + } + if (BinnieCore.isExtraBeesActive()) { + validSelections.add(ExtraBees.dictionary); + } + if (BinnieCore.isExtraTreesActive()) { + validSelections.add(ExtraTrees.itemDictionary); + } + if (BinnieCore.isLepidopteryActive()) { + validSelections.add(ExtraTrees.itemDictionaryLepi); + } + validSelections.add(Genetics.database); + validSelections.add(Genetics.analyst); + validSelections.add(Genetics.registry); + validSelections.add(Genetics.masterRegistry); + validSelections.add(BinnieCore.genesis); + if (this.stack == null && validSelections.contains(player.getHeldItem().getItem())) { + this.stack = player.getHeldItem().copy(); + final ItemStack heldItem = player.getHeldItem(); + --heldItem.stackSize; + world.markBlockForUpdate(x, y, z); + return; + } + if (this.stack != null && player.getHeldItem().getItem() instanceof IToolWrench) { + this.stack.getItem().onItemRightClick(this.stack, world, player); + } + } + if (this.stack != null) { + this.stack.getItem().onItemRightClick(this.stack, world, player); + } + } + } +} diff --git a/src/main/java/binnie/genetics/machine/MachineRendererGenetics.java b/src/main/java/binnie/genetics/machine/MachineRendererGenetics.java new file mode 100644 index 00000000..777ec974 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/MachineRendererGenetics.java @@ -0,0 +1,70 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.machine; + +import binnie.core.machines.component.IRender; +import net.minecraft.client.Minecraft; +import binnie.core.BinnieCore; +import org.lwjgl.opengl.GL11; +import binnie.core.resource.BinnieResource; +import binnie.core.machines.Machine; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.entity.RenderItem; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class MachineRendererGenetics +{ + public static MachineRendererGenetics instance; + public final RenderItem customRenderItem; + private ModelMachine model; + + public MachineRendererGenetics() { + this.model = new ModelMachine(); + (this.customRenderItem = new RenderItem() { + @Override + public boolean shouldBob() { + return false; + } + + @Override + public boolean shouldSpreadItems() { + return false; + } + }).setRenderManager(RenderManager.instance); + } + + public void renderMachine(final Machine machine, final int colour, final BinnieResource texture, final double x, final double y, final double z, final float var8) { + GL11.glPushMatrix(); + int i1 = 0; + final int ix = machine.getTileEntity().xCoord; + final int iy = machine.getTileEntity().yCoord; + final int iz = machine.getTileEntity().zCoord; + if (machine.getTileEntity() != null) { + i1 = ix * iy * iz + ix * iy - ix * iz + iy * iz - ix + iy - iz; + } + final float phase = (float) Math.max(0.0, Math.sin((System.currentTimeMillis() + i1) * 0.003)); + GL11.glTranslated(x + 0.5, y + 1.5, z + 0.5); + GL11.glRotatef(180.0f, 0.0f, 0.0f, 1.0f); + BinnieCore.proxy.bindTexture(texture); + GL11.glPushMatrix(); + this.model.render((float) x, (float) y, (float) z, 0.0625f, 0.0625f, 0.0625f); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + BinnieCore.proxy.getMinecraftInstance(); + if (Minecraft.isFancyGraphicsEnabled()) { + for (final IRender.Render render : machine.getInterfaces(IRender.Render.class)) { + render.renderInWorld(this.customRenderItem, x, y, z); + } + } + GL11.glPopMatrix(); + GL11.glPopMatrix(); + } + + static { + MachineRendererGenetics.instance = new MachineRendererGenetics(); + } +} diff --git a/src/main/java/binnie/genetics/machine/MachineRendererLab.java b/src/main/java/binnie/genetics/machine/MachineRendererLab.java new file mode 100644 index 00000000..d1444d4a --- /dev/null +++ b/src/main/java/binnie/genetics/machine/MachineRendererLab.java @@ -0,0 +1,122 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.machine; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.client.Minecraft; +import binnie.core.BinnieCore; +import org.lwjgl.opengl.GL11; +import binnie.core.resource.BinnieResource; +import binnie.core.machines.Machine; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.world.World; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.entity.item.EntityItem; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class MachineRendererLab +{ + public static MachineRendererLab instance; + private final EntityItem dummyEntityItem; + private final EntityItem[] itemSides; + private final RenderItem customRenderItem; + private long lastTick; + private ModelMachine model; + + public MachineRendererLab() { + this.dummyEntityItem = new EntityItem((World) null); + this.itemSides = new EntityItem[] { new EntityItem((World) null), new EntityItem((World) null), new EntityItem((World) null), new EntityItem((World) null) }; + this.model = new ModelMachine(); + (this.customRenderItem = new RenderItem() { + @Override + public boolean shouldBob() { + return false; + } + + @Override + public boolean shouldSpreadItems() { + return false; + } + }).setRenderManager(RenderManager.instance); + } + + public void renderMachine(final Machine machine, final int colour, final BinnieResource texture, final double x, final double y, final double z, final float var8) { + GL11.glPushMatrix(); + int i1 = 0; + final int ix = machine.getTileEntity().xCoord; + final int iy = machine.getTileEntity().yCoord; + final int iz = machine.getTileEntity().zCoord; + if (machine.getTileEntity() != null) { + i1 = ix * iy * iz + ix * iy - ix * iz + iy * iz - ix + iy - iz; + } + final float phase = (float) Math.max(0.0, Math.sin((System.currentTimeMillis() + i1) * 0.003)); + GL11.glTranslated(x + 0.5, y + 1.5, z + 0.5); + GL11.glRotatef(180.0f, 0.0f, 0.0f, 1.0f); + BinnieCore.proxy.bindTexture(texture); + GL11.glPushMatrix(); + this.model.render((float) x, (float) y, (float) z, 0.0625f, 0.0625f, 0.0625f); + GL11.glPopMatrix(); + final World world = machine.getWorld(); + final LaboratoryMachine.ComponentGUIHolder holder = Machine.getInterface(LaboratoryMachine.ComponentGUIHolder.class, machine); + Label_0591: { + if (world != null && holder != null && holder.getStack() != null) { + BinnieCore.proxy.getMinecraftInstance(); + if (Minecraft.isFancyGraphicsEnabled()) { + final ItemStack stack = holder.getStack(); + this.dummyEntityItem.worldObj = world; + this.dummyEntityItem.setEntityItemStack(stack); + if (world.getTotalWorldTime() != this.lastTick) { + this.lastTick = world.getTotalWorldTime(); + this.dummyEntityItem.onUpdate(); + } + this.dummyEntityItem.age = 0; + this.dummyEntityItem.hoverStart = 0.0f; + GL11.glPushMatrix(); + final EntityPlayer player = BinnieCore.proxy.getPlayer(); + final double dx = ix + 0.5 - player.lastTickPosX; + final double dz = iz + 0.5 - player.lastTickPosZ; + final double t = Math.atan2(dz, dx) * 180.0 / 3.1415; + GL11.glRotatef(90.0f, 1.0f, 0.0f, 0.0f); + GL11.glTranslatef(0.0f, 0.0f, -0.55f); + GL11.glRotatef(90.0f + (float) (-t), 0.0f, 0.0f, 1.0f); + GL11.glTranslatef(0.0f, -0.125f, 0.0f); + GL11.glScalef(1.2f, 1.2f, 1.2f); + GL11.glRotatef(45.0f, 1.0f, 0.0f, 0.0f); + GL11.glTranslatef(0.0f, 0.1f, 0.1f); + this.customRenderItem.doRender(this.dummyEntityItem, 0.0, 0.0, 0.0, 0.0f, 0.0f); + GL11.glPopMatrix(); + int rot = 0; + for (final EntityItem item : this.itemSides) { + GL11.glPushMatrix(); + item.worldObj = world; + item.setEntityItemStack(stack); + item.age = 0; + item.hoverStart = 0.0f; + GL11.glRotatef(rot, 0.0f, 1.0f, 0.0f); + GL11.glRotatef(180.0f, 1.0f, 0.0f, 0.0f); + GL11.glTranslated(0.0, -1.13, 0.4); + GL11.glScalef(0.8f, 0.8f, 0.8f); + this.customRenderItem.doRender(item, 0.0, 0.0, 0.0, 0.0f, 0.0f); + rot += 90; + GL11.glPopMatrix(); + } + break Label_0591; + } + } + this.dummyEntityItem.setEntityItemStack((ItemStack) null); + for (final EntityItem item2 : this.itemSides) { + item2.setEntityItemStack((ItemStack) null); + } + } + GL11.glPopMatrix(); + } + + static { + MachineRendererLab.instance = new MachineRendererLab(); + } +} diff --git a/src/main/java/binnie/genetics/machine/ModelMachine.java b/src/main/java/binnie/genetics/machine/ModelMachine.java new file mode 100644 index 00000000..c2b7c63b --- /dev/null +++ b/src/main/java/binnie/genetics/machine/ModelMachine.java @@ -0,0 +1,82 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.machine; + +import net.minecraft.entity.Entity; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.model.ModelBase; + +public class ModelMachine extends ModelBase +{ + ModelRenderer Base; + ModelRenderer Body; + ModelRenderer Arm1; + ModelRenderer Arm2; + ModelRenderer Arm3; + ModelRenderer Arm4; + ModelRenderer Top; + + public ModelMachine() { + this.textureWidth = 64; + this.textureHeight = 64; + (this.Base = new ModelRenderer(this, 0, 18)).addBox(0.0f, 0.0f, 0.0f, 16, 4, 16); + this.Base.setRotationPoint(-8.0f, 20.0f, -8.0f); + this.Base.setTextureSize(64, 64); + this.Base.mirror = true; + this.setRotation(this.Base, 0.0f, 0.0f, 0.0f); + (this.Body = new ModelRenderer(this, 0, 26)).addBox(0.0f, 0.0f, 0.0f, 12, 7, 12); + this.Body.setRotationPoint(-6.0f, 13.0f, -6.0f); + this.Body.setTextureSize(64, 64); + this.Body.mirror = true; + this.setRotation(this.Body, 0.0f, 0.0f, 0.0f); + (this.Arm1 = new ModelRenderer(this, 0, 0)).addBox(0.0f, 0.0f, 0.0f, 3, 6, 3); + this.Arm1.setRotationPoint(5.0f, 8.0f, 5.0f); + this.Arm1.setTextureSize(64, 64); + this.Arm1.mirror = true; + this.setRotation(this.Arm1, 0.0f, 0.0f, 0.0f); + (this.Arm2 = new ModelRenderer(this, 0, 0)).addBox(0.0f, 0.0f, 0.0f, 3, 6, 3); + this.Arm2.setRotationPoint(-5.0f, 8.0f, 5.0f); + this.Arm2.setTextureSize(64, 64); + this.Arm2.mirror = true; + this.setRotation(this.Arm2, 0.0f, -1.57075f, 0.0f); + (this.Arm3 = new ModelRenderer(this, 0, 0)).addBox(0.0f, 0.0f, 0.0f, 3, 6, 3); + this.Arm3.setRotationPoint(-5.0f, 8.0f, -5.0f); + this.Arm3.setTextureSize(64, 64); + this.Arm3.mirror = true; + this.setRotation(this.Arm3, 0.0f, -3.1415f, 0.0f); + (this.Arm4 = new ModelRenderer(this, 0, 0)).addBox(0.0f, 0.0f, 0.0f, 3, 6, 3); + this.Arm4.setRotationPoint(5.0f, 8.0f, -5.0f); + this.Arm4.setTextureSize(64, 64); + this.Arm4.mirror = true; + this.setRotation(this.Arm4, 0.0f, -4.7122498f, 0.0f); + (this.Top = new ModelRenderer(this, 0, 0)).addBox(0.0f, 0.0f, 0.0f, 14, 4, 14); + this.Top.setRotationPoint(-7.0f, 9.0f, -7.0f); + this.Top.setTextureSize(64, 64); + this.Top.mirror = true; + this.setRotation(this.Top, 0.0f, 0.0f, 0.0f); + } + + public void render(final float f, final float f1, final float f2, final float f3, final float f4, final float f5) { + super.render((Entity) null, f, f1, f2, f3, f4, f5); + this.setRotationAngles(f, f1, f2, f3, f4, f5); + this.Base.render(f5); + this.Body.render(f5); + this.Arm1.render(f5); + this.Arm2.render(f5); + this.Arm3.render(f5); + this.Arm4.render(f5); + this.Top.render(f5); + } + + private void setRotation(final ModelRenderer model, final float x, final float y, final float z) { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(final float f, final float f1, final float f2, final float f3, final float f4, final float f5) { + super.setRotationAngles(f, f1, f2, f3, f4, f5, (Entity) null); + } +} diff --git a/src/main/java/binnie/genetics/machine/ModuleMachine.java b/src/main/java/binnie/genetics/machine/ModuleMachine.java new file mode 100644 index 00000000..c50bb38b --- /dev/null +++ b/src/main/java/binnie/genetics/machine/ModuleMachine.java @@ -0,0 +1,85 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.machine; + +import net.minecraft.item.Item; +import net.minecraft.init.Items; +import binnie.core.BinnieCore; +import net.minecraft.item.crafting.IRecipe; +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraftforge.oredict.ShapedOreRecipe; +import net.minecraft.init.Blocks; +import net.minecraftforge.oredict.OreDictionary; +import binnie.genetics.item.GeneticsItems; +import binnie.core.Mods; +import binnie.genetics.CreativeTabGenetics; +import binnie.core.machines.MachineGroup; +import binnie.genetics.Genetics; +import binnie.core.machines.inventory.ValidatorIcon; +import binnie.core.IInitializable; + +public class ModuleMachine implements IInitializable +{ + static ValidatorIcon IconSequencer; + static ValidatorIcon IconSerum; + static ValidatorIcon IconEnzyme; + public static ValidatorIcon IconDye; + static ValidatorIcon IconBacteria; + static ValidatorIcon IconNugget; + + @Override + public void preInit() { + (Genetics.packageGenetic = new MachineGroup(Genetics.instance, "machine", "machine", GeneticMachine.values())).setCreativeTab(CreativeTabGenetics.instance); + (Genetics.packageLabMachine = new MachineGroup(Genetics.instance, "labMachine", "labMachine", LaboratoryMachine.values())).setCreativeTab(CreativeTabGenetics.instance); + (Genetics.packageAdvGenetic = new MachineGroup(Genetics.instance, "advMachine", "advMachine", AdvGeneticMachine.values())).setCreativeTab(CreativeTabGenetics.instance); + } + + @Override + public void init() { + ModuleMachine.IconSequencer = new ValidatorIcon(Genetics.instance, "validator/sequencer.0", "validator/sequencer.1"); + ModuleMachine.IconSerum = new ValidatorIcon(Genetics.instance, "validator/serum.0", "validator/serum.1"); + ModuleMachine.IconEnzyme = new ValidatorIcon(Genetics.instance, "validator/enzyme.0", "validator/enzyme.1"); + ModuleMachine.IconDye = new ValidatorIcon(Genetics.instance, "validator/dye.0", "validator/dye.1"); + ModuleMachine.IconNugget = new ValidatorIcon(Genetics.instance, "validator/nugget.0", "validator/nugget.1"); + ModuleMachine.IconBacteria = new ValidatorIcon(Genetics.instance, "validator/bacteria.0", "validator/bacteria.1"); + Incubator.addRecipes(); + } + + @Override + public void postInit() { + Acclimatiser.setupRecipes(); + final Object[] standardCircuit = { Mods.Forestry.stack("chipsets", 1, 1) }; + final Object[] advCircuit = { GeneticsItems.IntegratedCircuit.get(1) }; + final String ironGear = OreDictionary.getOres("gearIron").isEmpty() ? "gearIron" : "ingotIron"; + final String goldGear = OreDictionary.getOres("gearGold").isEmpty() ? "gearIron" : "ingotIron"; + final String diamondGear = OreDictionary.getOres("gearDiamond").isEmpty() ? "gearIron" : "ingotIron"; + for (final Object circuit : standardCircuit) { + GameRegistry.addRecipe(new ShapedOreRecipe(LaboratoryMachine.Incubator.get(1), new Object[] { "gFg", "cCc", "aPa", 'C', GeneticsItems.LaboratoryCasing.get(1), 'F', Blocks.furnace, 'c', circuit, 'g', Blocks.glass_pane, 'P', "gearBronze", 'a', ironGear })); + Item alyzer = null; + if (BinnieCore.isApicultureActive()) { + alyzer = Mods.Forestry.item("beealyzer"); + } + else if (BinnieCore.isArboricultureActive()) { + alyzer = Mods.Forestry.item("treealyzer"); + } + else if (BinnieCore.isArboricultureActive()) { + alyzer = Mods.Forestry.item("flutterlyzer"); + } + if (alyzer != null) { + GameRegistry.addRecipe(new ShapedOreRecipe(LaboratoryMachine.Analyser.get(1), new Object[] { "gBg", "cCc", "aPa", 'C', GeneticsItems.LaboratoryCasing.get(1), 'B', alyzer, 'c', circuit, 'g', Blocks.glass_pane, 'P', "gearBronze", 'a', GeneticsItems.DNADye.get(1) })); + } + GameRegistry.addRecipe(new ShapedOreRecipe(LaboratoryMachine.Genepool.get(1), new Object[] { "gBg", "cCc", "aPa", 'C', GeneticsItems.LaboratoryCasing.get(1), 'B', "gearBronze", 'c', circuit, 'g', Blocks.glass_pane, 'P', "gearBronze", 'a', Blocks.glass })); + GameRegistry.addRecipe(new ShapedOreRecipe(LaboratoryMachine.Acclimatiser.get(1), new Object[] { "gBg", "cCc", "aPa", 'C', GeneticsItems.LaboratoryCasing.get(1), 'B', Items.lava_bucket, 'c', circuit, 'g', Blocks.glass_pane, 'P', "gearBronze", 'a', Items.water_bucket })); + } + for (final Object circuit : advCircuit) { + GameRegistry.addRecipe(new ShapedOreRecipe(GeneticMachine.Isolator.get(1), new Object[] { "gBg", "cCc", "aPa", 'C', GeneticsItems.LaboratoryCasing.get(1), 'B', goldGear, 'c', circuit, 'g', Items.gold_nugget, 'P', "gearBronze", 'a', GeneticsItems.Enzyme.get(1) })); + GameRegistry.addRecipe(new ShapedOreRecipe(GeneticMachine.Polymeriser.get(1), new Object[] { "gBg", "cCc", "gPg", 'C', GeneticsItems.LaboratoryCasing.get(1), 'B', ironGear, 'c', circuit, 'g', Items.gold_nugget, 'P', "gearBronze" })); + GameRegistry.addRecipe(new ShapedOreRecipe(GeneticMachine.Sequencer.get(1), new Object[] { "gBg", "cCc", "aPa", 'C', GeneticsItems.LaboratoryCasing.get(1), 'B', "gearBronze", 'c', circuit, 'g', Items.gold_nugget, 'P', "gearBronze", 'a', GeneticsItems.FluorescentDye.get(1) })); + GameRegistry.addRecipe(new ShapedOreRecipe(GeneticMachine.Inoculator.get(1), new Object[] { "gBg", "cCc", "aPa", 'C', GeneticsItems.LaboratoryCasing.get(1), 'B', diamondGear, 'c', circuit, 'g', Items.gold_nugget, 'P', "gearBronze", 'a', Items.emerald })); + } + GameRegistry.addRecipe(new ShapedOreRecipe(AdvGeneticMachine.Splicer.get(1), new Object[] { "gBg", "cCc", "aPa", 'C', GeneticsItems.IntegratedCasing.get(1), 'B', diamondGear, 'c', GeneticsItems.IntegratedCPU.get(1), 'g', Items.gold_nugget, 'P', "gearBronze", 'a', Items.blaze_rod })); + GameRegistry.addRecipe(new ShapedOreRecipe(LaboratoryMachine.LabMachine.get(1), new Object[] { "igi", "gCg", "igi", 'C', GeneticsItems.LaboratoryCasing.get(1), 'i', "ingotIron", 'g', Blocks.glass_pane })); + } +} diff --git a/src/main/java/binnie/genetics/machine/Polymeriser.java b/src/main/java/binnie/genetics/machine/Polymeriser.java new file mode 100644 index 00000000..88772e1a --- /dev/null +++ b/src/main/java/binnie/genetics/machine/Polymeriser.java @@ -0,0 +1,302 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.machine; + +import net.minecraft.client.particle.EntityFX; +import binnie.core.BinnieCore; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import java.util.Random; +import net.minecraft.world.World; +import binnie.core.machines.component.IRender; +import binnie.core.machines.MachineComponent; +import binnie.genetics.api.IItemChargable; +import binnie.core.machines.power.ErrorState; +import binnie.genetics.genetics.Engineering; +import binnie.core.machines.power.IProcess; +import binnie.core.machines.power.ComponentProcessSetCost; +import binnie.core.machines.TileEntityMachine; +import net.minecraft.tileentity.TileEntity; +import binnie.core.machines.inventory.InventorySlot; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.core.machines.inventory.ComponentChargedSlots; +import binnie.genetics.item.GeneticLiquid; +import net.minecraftforge.fluids.FluidStack; +import binnie.core.machines.inventory.ComponentTankContainer; +import binnie.core.machines.inventory.ComponentInventoryTransfer; +import binnie.core.machines.inventory.Validator; +import binnie.core.machines.inventory.SlotValidator; +import net.minecraft.item.ItemStack; +import net.minecraft.init.Items; +import binnie.core.machines.IMachine; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.genetics.core.GeneticsGUI; +import binnie.core.machines.Machine; +import binnie.genetics.core.GeneticsTexture; +import binnie.craftgui.minecraft.IMachineInformation; + +public class Polymeriser +{ + public static final int tankBacteria = 0; + public static final int tankDNA = 1; + public static final int slotSerum = 0; + public static final int slotGold = 1; + public static final int[] slotSerumReserve; + public static final int[] slotSerumFinished; + + static { + slotSerumReserve = new int[] { 2, 3, 4, 5 }; + slotSerumFinished = new int[] { 6, 7, 8, 9 }; + } + + public static class PackagePolymeriser extends GeneticMachine.PackageGeneticBase implements IMachineInformation + { + public PackagePolymeriser() { + super("polymeriser", GeneticsTexture.Polymeriser, 58819, true); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentGeneticGUI(machine, GeneticsGUI.Replicator); + final ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + inventory.addSlot(1, "catalyst"); + inventory.getSlot(1).setValidator(new SlotValidator.Item(new ItemStack(Items.gold_nugget, 1), ModuleMachine.IconNugget)); + inventory.getSlot(1).forbidExtraction(); + inventory.addSlot(0, "process"); + inventory.getSlot(0).setValidator(new SlotValidatorUnfilledSerum()); + inventory.getSlot(0).forbidInteraction(); + inventory.getSlot(0).setReadOnly(); + for (final InventorySlot slot : inventory.addSlotArray(Polymeriser.slotSerumReserve, "input")) { + slot.setValidator(new SlotValidatorUnfilledSerum()); + slot.forbidExtraction(); + } + for (final InventorySlot slot : inventory.addSlotArray(Polymeriser.slotSerumFinished, "output")) { + slot.setReadOnly(); + } + final ComponentInventoryTransfer transfer = new ComponentInventoryTransfer(machine); + transfer.addRestock(Polymeriser.slotSerumReserve, 0, 1); + transfer.addStorage(0, Polymeriser.slotSerumFinished, new ComponentInventoryTransfer.Condition() { + @Override + public boolean fufilled(final ItemStack stack) { + return !stack.isItemDamaged(); + } + }); + final ComponentTankContainer tank = new ComponentTankContainer(machine); + tank.addTank(0, "input", 1000); + tank.getTankSlot(0).setValidator(new Validator() { + @Override + public boolean isValid(final FluidStack itemStack) { + return GeneticLiquid.BacteriaPoly.get(1).isFluidEqual(itemStack); + } + + @Override + public String getTooltip() { + return "Polymerising Bacteria"; + } + }); + tank.addTank(1, "input", 1000); + tank.getTankSlot(1).setValidator(new Validator() { + @Override + public boolean isValid(final FluidStack itemStack) { + return GeneticLiquid.RawDNA.get(1).isFluidEqual(itemStack); + } + + @Override + public String getTooltip() { + return "Raw DNA"; + } + }); + new ComponentChargedSlots(machine).addCharge(1); + new ComponentPowerReceptor(machine, 8000); + new ComponentPolymeriserLogic(machine); + new ComponentPolymeriserFX(machine); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + } + + public static class ComponentPolymeriserLogic extends ComponentProcessSetCost implements IProcess + { + private static float chargePerProcess; + private float dnaDrain; + private float bacteriaDrain; + + public ComponentPolymeriserLogic(final Machine machine) { + super(machine, 96000, 2400); + this.dnaDrain = 0.0f; + this.bacteriaDrain = 0.0f; + } + + private float getCatalyst() { + return (this.getUtil().getSlotCharge(1) > 0.0f) ? 0.2f : 1.0f; + } + + @Override + public int getProcessLength() { + return (int) (super.getProcessLength() * this.getNumberOfGenes() * this.getCatalyst()); + } + + @Override + public int getProcessEnergy() { + return (int) (super.getProcessEnergy() * this.getNumberOfGenes() * this.getCatalyst()); + } + + private float getDNAPerProcess() { + return this.getNumberOfGenes() * 50; + } + + @Override + public void onTickTask() { + super.onTickTask(); + this.getUtil().useCharge(1, ComponentPolymeriserLogic.chargePerProcess * this.getProgressPerTick() / 100.0f); + this.dnaDrain += this.getDNAPerProcess() * this.getProgressPerTick() / 100.0f; + this.bacteriaDrain += 0.2f * this.getDNAPerProcess() * this.getProgressPerTick() / 100.0f; + if (this.dnaDrain >= 1.0f) { + this.getUtil().drainTank(1, 1); + --this.dnaDrain; + } + if (this.bacteriaDrain >= 1.0f) { + this.getUtil().drainTank(0, 1); + --this.bacteriaDrain; + } + } + + private int getNumberOfGenes() { + final ItemStack serum = this.getUtil().getStack(0); + if (serum == null) { + return 1; + } + return Engineering.getGenes(serum).length; + } + + @Override + public String getTooltip() { + final int n = this.getNumberOfGenes(); + return "Replicating " + n + " genes" + ((n > 1) ? "s" : ""); + } + + @Override + public ErrorState canWork() { + if (this.getUtil().isSlotEmpty(0)) { + return new ErrorState.NoItem("No item to replicate", 0); + } + if (!this.getUtil().getStack(0).isItemDamaged()) { + return new ErrorState.InvalidItem("Item filled", 0); + } + return super.canWork(); + } + + @Override + public ErrorState canProgress() { + if (this.getUtil().getFluid(0) == null) { + return new ErrorState.InsufficientLiquid("Insufficient Bacteria", 0); + } + if (this.getUtil().getFluid(1) == null) { + return new ErrorState.InsufficientLiquid("Insufficient DNA", 1); + } + return super.canProgress(); + } + + @Override + protected void onFinishTask() { + super.onFinishTask(); + this.getUtil().damageItem(0, -1); + } + + static { + ComponentPolymeriserLogic.chargePerProcess = 0.4f; + } + } + + public static class SlotValidatorUnfilledSerum extends SlotValidator + { + public SlotValidatorUnfilledSerum() { + super(ModuleMachine.IconSerum); + } + + @Override + public boolean isValid(final ItemStack itemStack) { + return itemStack.getItem() instanceof IItemChargable; + } + + @Override + public String getTooltip() { + return "Unfilled Serum"; + } + } + + public static class ComponentPolymeriserFX extends MachineComponent implements IRender.RandomDisplayTick, IRender.DisplayTick + { + public ComponentPolymeriserFX(final IMachine machine) { + super(machine); + } + + @SideOnly(Side.CLIENT) + @Override + public void onRandomDisplayTick(final World world, final int x, final int y, final int z, final Random rand) { + } + + @SideOnly(Side.CLIENT) + @Override + public void onDisplayTick(final World world, final int x, final int y, final int z, final Random rand) { + final int tick = (int) (world.getTotalWorldTime() % 8L); + if ((tick == 0 || tick == 3) && this.getUtil().getProcess().isInProgress()) { + BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.5, y + 1.8, z + 0.5, 0.0, 0.0, 0.0) { + double axisX = this.posX; + double axisZ = this.posZ; + double angle = 0.7 + (int) (this.worldObj.getTotalWorldTime() % 2L) * 3.1415; + + { + this.axisX = 0.0; + this.axisZ = 0.0; + this.angle = 0.0; + this.motionX = 0.0; + this.motionZ = 0.0; + this.motionY = -0.006; + this.particleMaxAge = 140; + this.particleGravity = 0.0f; + this.noClip = true; + this.setRBGColorF(0.8f, 0.0f, 1.0f); + } + + @Override + public void onUpdate() { + super.onUpdate(); + this.angle += 0.1; + this.motionY = -0.006; + double dist = 0.2; + if (this.particleAge > 60) { + if (this.particleAge > 120) { + dist = 0.1; + } + else { + dist = 0.2 - 0.1 * ((this.particleAge - 60.0f) / 60.0f); + } + } + this.setPosition(this.axisX + dist * Math.sin(this.angle), this.posY, this.axisZ + dist * Math.cos(this.angle)); + if (this.particleAge <= 40) { + this.setAlphaF(this.particleAge / 40.0f); + } + if (this.particleAge > 80) { + this.setRBGColorF(this.particleRed + (0.0f - this.particleRed) / 10.0f, this.particleGreen + (1.0f - this.particleGreen) / 10.0f, this.particleBlue + (1.0f - this.particleBlue) / 10.0f); + } + } + + @Override + public int getFXLayer() { + return 0; + } + }); + } + } + } +} diff --git a/src/main/java/binnie/genetics/machine/Sequencer.java b/src/main/java/binnie/genetics/machine/Sequencer.java new file mode 100644 index 00000000..81c7d318 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/Sequencer.java @@ -0,0 +1,296 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.machine; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.particle.EntityFX; +import binnie.core.BinnieCore; +import java.util.Random; +import net.minecraft.world.World; +import binnie.core.machines.component.IRender; +import binnie.core.machines.MachineComponent; +import binnie.genetics.genetics.GeneTracker; +import binnie.genetics.genetics.SequencerItem; +import binnie.core.machines.power.ErrorState; +import net.minecraft.item.ItemStack; +import binnie.core.machines.power.IProcess; +import binnie.core.machines.power.ComponentProcess; +import binnie.core.machines.TileEntityMachine; +import net.minecraft.tileentity.TileEntity; +import binnie.core.machines.inventory.InventorySlot; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.core.machines.inventory.ComponentChargedSlots; +import binnie.core.machines.inventory.ComponentInventoryTransfer; +import binnie.core.machines.inventory.SlotValidator; +import binnie.genetics.item.GeneticsItems; +import binnie.core.machines.IMachine; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.genetics.core.GeneticsGUI; +import binnie.core.machines.Machine; +import binnie.genetics.Genetics; +import binnie.Binnie; +import binnie.genetics.core.GeneticsTexture; +import binnie.craftgui.minecraft.IMachineInformation; +import binnie.core.resource.BinnieIcon; + +public class Sequencer +{ + public static final int slotDye = 0; + public static final int[] slotReserve; + public static final int slotTarget = 5; + public static final int slotDone = 6; + public static BinnieIcon fxSeqA; + public static BinnieIcon fxSeqG; + public static BinnieIcon fxSeqT; + public static BinnieIcon fxSeqC; + + static { + slotReserve = new int[] { 1, 2, 3, 4 }; + } + + public static class PackageSequencer extends GeneticMachine.PackageGeneticBase implements IMachineInformation + { + public PackageSequencer() { + super("sequencer", GeneticsTexture.Sequencer, 12058418, true); + Sequencer.fxSeqA = Binnie.Resource.getBlockIcon(Genetics.instance, "fx/sequencer.a"); + Sequencer.fxSeqG = Binnie.Resource.getBlockIcon(Genetics.instance, "fx/sequencer.g"); + Sequencer.fxSeqT = Binnie.Resource.getBlockIcon(Genetics.instance, "fx/sequencer.t"); + Sequencer.fxSeqC = Binnie.Resource.getBlockIcon(Genetics.instance, "fx/sequencer.c"); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentGeneticGUI(machine, GeneticsGUI.Sequencer); + final ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + inventory.addSlot(0, "dye"); + inventory.getSlot(0).setValidator(new SlotValidator.Item(GeneticsItems.FluorescentDye.get(1), ModuleMachine.IconDye)); + inventory.getSlot(0).forbidExtraction(); + inventory.addSlotArray(Sequencer.slotReserve, "input"); + for (final InventorySlot slot : inventory.getSlots(Sequencer.slotReserve)) { + slot.setValidator(new SlotValidatorUnsequenced()); + slot.forbidExtraction(); + } + inventory.addSlot(5, "process"); + inventory.getSlot(5).setValidator(new SlotValidatorUnsequenced()); + inventory.getSlot(5).setReadOnly(); + inventory.getSlot(5).forbidInteraction(); + inventory.addSlot(6, "output"); + inventory.getSlot(6).setReadOnly(); + final ComponentInventoryTransfer transfer = new ComponentInventoryTransfer(machine); + transfer.addRestock(Sequencer.slotReserve, 5, 1); + new ComponentChargedSlots(machine).addCharge(0); + new ComponentPowerReceptor(machine, 10000); + new ComponentSequencerLogic(machine); + new ComponentSequencerFX(machine); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + } + + public static class ComponentSequencerLogic extends ComponentProcess implements IProcess + { + public ComponentSequencerLogic(final Machine machine) { + super(machine); + } + + public float getSequenceStrength() { + final ItemStack stack = this.getUtil().getStack(5); + if (stack == null) { + return 1.0f; + } + final float mult = 1.0f - stack.getItemDamage() % 6 / 5.0f; + return 1.0f - mult * mult * 0.75f; + } + + @Override + public int getProcessLength() { + return (int) (19200.0f * this.getSequenceStrength()); + } + + @Override + public int getProcessEnergy() { + return this.getProcessLength() * 20; + } + + @Override + public ErrorState canWork() { + if (this.getUtil().isSlotEmpty(5)) { + return new ErrorState.NoItem("No DNA sequence", 5); + } + return super.canWork(); + } + + @Override + public ErrorState canProgress() { + if (this.getMachine().getOwner() == null) { + return new ErrorState("No Owner", "Replace this block to claim this machine"); + } + if (this.getUtil().getSlotCharge(0) == 0.0f) { + return new ErrorState.NoItem("Insufficient Dye", 0); + } + if (this.getUtil().getStack(6) != null && this.getUtil().getStack(6).stackSize >= 64) { + return new ErrorState.NoSpace("No space for empty sequences", new int[] { 6 }); + } + return super.canProgress(); + } + + @Override + protected void onStartTask() { + super.onStartTask(); + final ItemStack item = this.getUtil().getStack(5); + final SequencerItem seqItem = new SequencerItem(item); + final int seq = seqItem.sequenced; + if (seq != 0) { + this.setProgress(seq); + } + } + + @Override + protected void onFinishTask() { + super.onFinishTask(); + this.updateSequence(); + final SequencerItem seqItem = new SequencerItem(this.getUtil().getStack(5)); + GeneTracker.getTracker(this.getMachine().getWorld(), this.getMachine().getOwner()).registerGene(seqItem.getGene()); + this.getUtil().decreaseStack(5, 1); + if (this.getUtil().getStack(6) == null) { + this.getUtil().setStack(6, GeneticsItems.EmptySequencer.get(1)); + } + else { + this.getUtil().decreaseStack(6, -1); + } + } + + @Override + protected void onTickTask() { + this.updateSequence(); + this.getUtil().useCharge(0, 0.4f * this.getProgressPerTick() / 100.0f); + } + + private void updateSequence() { + final int prog = (int) this.getProgress(); + final ItemStack item = this.getUtil().getStack(5); + final SequencerItem seqItem = new SequencerItem(item); + final int seq = seqItem.sequenced; + if (prog != seq) { + seqItem.sequenced = prog; + seqItem.writeToItem(item); + } + } + } + + public static class ComponentSequencerFX extends MachineComponent implements IRender.RandomDisplayTick, IRender.DisplayTick + { + public ComponentSequencerFX(final IMachine machine) { + super(machine); + } + + @SideOnly(Side.CLIENT) + @Override + public void onRandomDisplayTick(final World world, final int x, final int y, final int z, final Random rand) { + if (!this.getUtil().getProcess().isInProgress()) { + return; + } + BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.5, y + 1.2 + rand.nextDouble() * 0.2, z + 0.5, 0.0, 0.0, 0.0) { + double axisX = this.posX; + double axisZ = this.posZ; + double angle = this.rand.nextDouble() * 2.0 * 3.1415; + + { + this.axisX = 0.0; + this.axisZ = 0.0; + this.angle = 0.0; + this.motionX = 0.0; + this.motionZ = 0.0; + this.motionY = 0.0; + this.particleMaxAge = 200; + this.particleGravity = 0.0f; + this.noClip = true; + this.setRBGColorF(0.6f + this.rand.nextFloat() * 0.2f, 1.0f, 0.8f * this.rand.nextFloat() * 0.2f); + } + + @Override + public void onUpdate() { + super.onUpdate(); + this.angle += 0.03; + this.setPosition(this.axisX + 0.4 * Math.sin(this.angle), this.posY, this.axisZ + 0.4 * Math.cos(this.angle)); + this.motionY = 0.0; + this.setAlphaF((float) Math.sin(3.14 * this.particleAge / this.particleMaxAge)); + } + + @Override + public int getFXLayer() { + return 0; + } + }); + } + + @SideOnly(Side.CLIENT) + @Override + public void onDisplayTick(final World world, final int x, final int y, final int z, final Random rand) { + final int ticks = (int) (world.getTotalWorldTime() % 16L); + if (ticks == 0 && this.getUtil().getProcess().isInProgress()) { + BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.5, y + 1, z + 0.5, 0.0, 0.0, 0.0) { + double axisX = 0.0; + double axisZ = 0.0; + double angle = 0.0; + + { + this.motionX = 0.0; + this.motionZ = 0.0; + this.motionY = 0.012; + this.particleMaxAge = 50; + this.particleGravity = 0.0f; + this.noClip = true; + this.particleScale = 2.0f; + this.setParticleIcon((new BinnieIcon[] { Sequencer.fxSeqA, Sequencer.fxSeqG, Sequencer.fxSeqC, Sequencer.fxSeqT })[this.rand.nextInt(4)].getIcon()); + } + + @Override + public void onUpdate() { + super.onUpdate(); + this.motionY = 0.012; + if (this.particleAge > 40) { + this.setAlphaF((50 - this.particleAge) / 10.0f); + } + } + + @Override + public int getFXLayer() { + return 1; + } + }); + } + } + } + + public static class SlotValidatorUnsequenced extends SlotValidator + { + public SlotValidatorUnsequenced() { + super(ModuleMachine.IconSequencer); + } + + @Override + public boolean isValid(final ItemStack itemStack) { + if (itemStack.getItem() == Genetics.itemSequencer) { + final SequencerItem seq = new SequencerItem(itemStack); + return seq.sequenced < 100; + } + return false; + } + + @Override + public String getTooltip() { + return "Unsequenced DNA"; + } + } +} diff --git a/src/main/java/binnie/genetics/machine/SlotValidatorInoculatorCatalyst.java b/src/main/java/binnie/genetics/machine/SlotValidatorInoculatorCatalyst.java new file mode 100644 index 00000000..f7df06fd --- /dev/null +++ b/src/main/java/binnie/genetics/machine/SlotValidatorInoculatorCatalyst.java @@ -0,0 +1,21 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.machine; + +import net.minecraft.item.ItemStack; +import binnie.core.machines.inventory.Validator; + +public class SlotValidatorInoculatorCatalyst extends Validator +{ + @Override + public boolean isValid(final ItemStack itemStack) { + return false; + } + + @Override + public String getTooltip() { + return "Inoculation Catalyst"; + } +} diff --git a/src/main/java/binnie/genetics/machine/Splicer.java b/src/main/java/binnie/genetics/machine/Splicer.java new file mode 100644 index 00000000..77675c30 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/Splicer.java @@ -0,0 +1,439 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.machine; + +import forestry.api.genetics.ISpeciesRoot; +import binnie.Binnie; +import net.minecraft.nbt.NBTBase; +import net.minecraft.entity.player.EntityPlayer; +import org.lwjgl.opengl.GL11; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.particle.EntityFX; +import binnie.core.BinnieCore; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import java.util.Random; +import net.minecraft.world.World; +import net.minecraft.entity.item.EntityItem; +import binnie.core.machines.network.INetwork; +import binnie.core.machines.component.IRender; +import binnie.core.machines.MachineComponent; +import binnie.core.machines.power.ErrorState; +import forestry.api.genetics.IIndividual; +import forestry.api.genetics.AlleleManager; +import binnie.core.machines.power.IProcess; +import binnie.core.machines.power.ComponentProcessSetCost; +import binnie.core.machines.TileEntityMachine; +import net.minecraft.tileentity.TileEntity; +import binnie.core.machines.inventory.InventorySlot; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.genetics.genetics.Engineering; +import binnie.core.machines.inventory.ComponentInventoryTransfer; +import binnie.genetics.api.IItemSerum; +import binnie.core.machines.inventory.SlotValidator; +import binnie.core.machines.IMachine; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.genetics.core.GeneticsGUI; +import binnie.core.machines.Machine; +import binnie.genetics.core.GeneticsTexture; +import binnie.craftgui.minecraft.IMachineInformation; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagCompound; +import forestry.api.genetics.IAllele; +import forestry.api.apiculture.IBeeRoot; +import forestry.api.apiculture.EnumBeeChromosome; +import net.minecraft.item.ItemStack; +import binnie.genetics.api.IGene; + +public class Splicer +{ + public static final int slotSerumVial = 0; + public static final int[] slotSerumReserve; + public static final int[] slotSerumExpended; + public static final int[] slotReserve; + public static final int slotTarget = 9; + public static final int[] slotFinished; + + public static void setGene(final IGene gene, final ItemStack target, final int chromoN) { + int chromosomeID; + final int chromosome = chromosomeID = gene.getChromosome().ordinal(); + if (chromosomeID >= EnumBeeChromosome.HUMIDITY.ordinal() && gene.getSpeciesRoot() instanceof IBeeRoot) { + --chromosomeID; + } + final Class cls = gene.getChromosome().getAlleleClass(); + if (!cls.isInstance(gene.getAllele())) { + return; + } + final NBTTagCompound beeNBT = target.getTagCompound(); + final NBTTagCompound genomeNBT = beeNBT.getCompoundTag("Genome"); + final NBTTagList chromosomes = genomeNBT.getTagList("Chromosomes", 10); + final NBTTagCompound chromosomeNBT = chromosomes.getCompoundTagAt(chromosomeID); + chromosomeNBT.setString("UID" + chromoN, gene.getAllele().getUID()); + target.setTagCompound(beeNBT); + } + + static { + slotSerumReserve = new int[] { 1, 2 }; + slotSerumExpended = new int[] { 3, 4 }; + slotReserve = new int[] { 5, 6, 7, 8, 9 }; + slotFinished = new int[] { 10, 11, 12, 13 }; + } + + public static class PackageSplicer extends AdvGeneticMachine.PackageAdvGeneticBase implements IMachineInformation + { + public PackageSplicer() { + super("splicer", GeneticsTexture.Splicer, 14819893, true); + } + + @Override + public void createMachine(final Machine machine) { + new ComponentGeneticGUI(machine, GeneticsGUI.Splicer); + final ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + inventory.addSlot(0, "serum.active"); + inventory.getSlot(0).forbidInteraction(); + inventory.getSlot(0).setReadOnly(); + final SlotValidator serumValid = new SlotValidator(ModuleMachine.IconSerum) { + @Override + public boolean isValid(final ItemStack itemStack) { + return itemStack.getItem() instanceof IItemSerum; + } + + @Override + public String getTooltip() { + return "Serum Vials & Arrays"; + } + }; + inventory.getSlot(0).setValidator(serumValid); + inventory.addSlotArray(Splicer.slotSerumReserve, "serum.input"); + for (final InventorySlot slot : inventory.getSlots(Splicer.slotSerumReserve)) { + slot.setValidator(serumValid); + slot.forbidExtraction(); + } + inventory.addSlotArray(Splicer.slotSerumExpended, "serum.output"); + for (final InventorySlot slot : inventory.getSlots(Splicer.slotSerumExpended)) { + slot.setValidator(serumValid); + slot.setReadOnly(); + } + inventory.addSlotArray(Splicer.slotReserve, "input"); + for (final InventorySlot slot : inventory.getSlots(Splicer.slotReserve)) { + slot.forbidExtraction(); + slot.setValidator(new ValidatorIndividualInoculate()); + } + inventory.addSlot(9, "process"); + inventory.getSlot(9).setValidator(new ValidatorIndividualInoculate()); + inventory.getSlot(9).setReadOnly(); + inventory.getSlot(9).forbidInteraction(); + inventory.addSlotArray(Splicer.slotFinished, "output"); + for (final InventorySlot slot : inventory.getSlots(Splicer.slotFinished)) { + slot.setReadOnly(); + slot.forbidInsertion(); + slot.setValidator(new ValidatorIndividualInoculate()); + } + final ComponentInventoryTransfer transfer = new ComponentInventoryTransfer(machine); + transfer.addRestock(Splicer.slotReserve, 9, 1); + transfer.addRestock(Splicer.slotSerumReserve, 0); + transfer.addStorage(0, Splicer.slotSerumExpended, new ComponentInventoryTransfer.Condition() { + @Override + public boolean fufilled(final ItemStack stack) { + return Engineering.getCharges(stack) == 0; + } + }); + transfer.addStorage(9, Splicer.slotFinished, new ComponentInventoryTransfer.Condition() { + @Override + public boolean fufilled(final ItemStack stack) { + return stack != null && this.transfer.getMachine().getMachineUtil().getStack(0) != null && this.transfer.getMachine().getInterface(ComponentSplicerLogic.class).isValidSerum() != null; + } + }); + new ComponentPowerReceptor(machine, 20000); + new ComponentSplicerLogic(machine); + new ComponentSplicerFX(machine); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void register() { + } + } + + public static class ComponentSplicerLogic extends ComponentProcessSetCost implements IProcess + { + int nOfGenes; + + @Override + public int getProcessLength() { + float n = this.getNumberOfGenes(); + if (n > 1.0f) { + n = 1.0f + (n - 1.0f) * 0.5f; + } + // Fix for / by 0 + int temp = (int) (super.getProcessLength() * n); + return temp != 0 ? temp : 1; + } + + @Override + public int getProcessEnergy() { + float n = this.getNumberOfGenes(); + if (n > 1.0f) { + n = 1.0f + (n - 1.0f) * 0.5f; + } + return (int) (super.getProcessEnergy() * n); + } + + @Override + public void onInventoryUpdate() { + super.onInventoryUpdate(); + this.nOfGenes = this.getGenesToUse(); + } + + protected int getGenesToUse() { + final ItemStack serum = this.getUtil().getStack(0); + final ItemStack target = this.getUtil().getStack(9); + if (serum == null || target == null) { + return 1; + } + final IIndividual ind = AlleleManager.alleleRegistry.getIndividual(target); + final IGene[] genes = ((IItemSerum) serum.getItem()).getGenes(serum); + if (ind.getGenome().getSpeciesRoot() != ((IItemSerum) serum.getItem()).getSpeciesRoot(serum)) { + return 1; + } + int i = 0; + for (final IGene gene : genes) { + if (ind.getGenome().getActiveAllele(gene.getChromosome()) != gene.getAllele() || ind.getGenome().getInactiveAllele(gene.getChromosome()) != gene.getAllele()) { + ++i; + } + } + return (i < 1) ? 1 : i; + } + + private int getFullNumberOfGenes() { + final ItemStack serum = this.getUtil().getStack(0); + if (serum == null) { + return 1; + } + return Engineering.getGenes(serum).length; + } + + private int getNumberOfGenes() { + return this.nOfGenes; + } + + @Override + public String getTooltip() { + final int n = this.getNumberOfGenes(); + final int f = this.getFullNumberOfGenes(); + return "Splicing in " + n + ((f > 1) ? ("/" + f) : "") + " gene" + ((n > 1) ? "s" : ""); + } + + public ComponentSplicerLogic(final Machine machine) { + super(machine, 12000000, 1200); + this.nOfGenes = 0; + } + + @Override + public ErrorState canWork() { + if (this.getUtil().isSlotEmpty(9)) { + return new ErrorState.NoItem("No Individual to Splice", 9); + } + if (this.getUtil().isSlotEmpty(0)) { + return new ErrorState.NoItem("No Serum", 0); + } + final ErrorState state = this.isValidSerum(); + if (state != null) { + return state; + } + if (this.getUtil().getStack(0) != null && Engineering.getCharges(this.getUtil().getStack(0)) == 0) { + return new ErrorState("Empty Serum", "Serum is empty"); + } + return super.canWork(); + } + + public ErrorState isValidSerum() { + final ItemStack serum = this.getUtil().getStack(0); + final ItemStack target = this.getUtil().getStack(9); + final IGene[] genes = Engineering.getGenes(serum); + if (genes.length == 0) { + return new ErrorState("Invalid Serum", "Serum does not hold any genes"); + } + if (!genes[0].getSpeciesRoot().isMember(target)) { + return new ErrorState("Invalid Serum", "Mismatch of Serum Type and Target"); + } + final IIndividual individual = genes[0].getSpeciesRoot().getMember(target); + boolean hasAll = true; + for (final IGene gene : genes) { + if (hasAll) { + final IAllele a = individual.getGenome().getActiveAllele(gene.getChromosome()); + final IAllele b = individual.getGenome().getInactiveAllele(gene.getChromosome()); + hasAll = (hasAll && a.getUID().equals(gene.getAllele().getUID()) && b.getUID().equals(gene.getAllele().getUID())); + } + } + if (hasAll) { + return new ErrorState("Defunct Serum", "Individual already possesses this allele"); + } + return null; + } + + @Override + public ErrorState canProgress() { + return super.canProgress(); + } + + @Override + protected void onFinishTask() { + super.onFinishTask(); + final ItemStack serum = this.getUtil().getStack(0); + final ItemStack target = this.getUtil().getStack(9); + final IIndividual ind = AlleleManager.alleleRegistry.getIndividual(target); + if (!ind.isAnalyzed()) { + ind.analyze(); + final NBTTagCompound nbttagcompound = new NBTTagCompound(); + ind.writeToNBT(nbttagcompound); + target.setTagCompound(nbttagcompound); + } + final IGene[] arr$; + final IGene[] genes = arr$ = ((IItemSerum) serum.getItem()).getGenes(serum); + for (final IGene gene : arr$) { + Splicer.setGene(gene, target, 0); + Splicer.setGene(gene, target, 1); + } + this.getUtil().damageItem(0, 1); + } + + @Override + protected void onTickTask() { + } + } + + public static class ComponentSplicerFX extends MachineComponent implements IRender.RandomDisplayTick, IRender.DisplayTick, IRender.Render, INetwork.TilePacketSync + { + private final EntityItem dummyEntityItem; + + public ComponentSplicerFX(final IMachine machine) { + super(machine); + this.dummyEntityItem = new EntityItem((World) null); + } + + @SideOnly(Side.CLIENT) + @Override + public void onRandomDisplayTick(final World world, final int x, final int y, final int z, final Random rand) { + } + + @SideOnly(Side.CLIENT) + @Override + public void onDisplayTick(final World world, final int x, final int y, final int z, final Random rand) { + final int tick = (int) (world.getTotalWorldTime() % 3L); + if (tick == 0 && this.getUtil().getProcess().isInProgress()) { + BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.5, y + 1.5, z + 0.5, 0.0, 0.0, 0.0) { + double axisX = this.posX; + double axisZ = this.posZ; + double angle = (int) (this.worldObj.getTotalWorldTime() % 4L) * 0.5 * 3.1415; + + { + this.axisX = 0.0; + this.axisZ = 0.0; + this.angle = 0.0; + this.motionX = 0.0; + this.motionZ = 0.0; + this.motionY = (this.rand.nextDouble() - 0.5) * 0.02; + this.particleMaxAge = 240; + this.particleGravity = 0.0f; + this.noClip = true; + this.setRBGColorF(0.3f + this.rand.nextFloat() * 0.5f, 0.3f + this.rand.nextFloat() * 0.5f, 0.0f); + } + + @Override + public void onUpdate() { + super.onUpdate(); + final double speed = 0.04; + this.angle -= speed; + final double dist = 0.25 + 0.2 * Math.sin(this.particleAge / 50.0f); + this.setPosition(this.axisX + dist * Math.sin(this.angle), this.posY, this.axisZ + dist * Math.cos(this.angle)); + this.setAlphaF((float) Math.cos(1.57 * this.particleAge / this.particleMaxAge)); + } + + @Override + public int getFXLayer() { + return 0; + } + }); + } + } + + @SideOnly(Side.CLIENT) + @Override + public void renderInWorld(final RenderItem customRenderItem, final double x, final double y, final double z) { + if (!this.getUtil().getProcess().isInProgress()) { + return; + } + final ItemStack stack = this.getUtil().getStack(9); + this.dummyEntityItem.worldObj = this.getMachine().getWorld(); + this.dummyEntityItem.setEntityItemStack(stack); + final EntityItem dummyEntityItem = this.dummyEntityItem; + ++dummyEntityItem.age; + this.dummyEntityItem.hoverStart = 0.0f; + if (stack == null) { + return; + } + final EntityPlayer player = BinnieCore.proxy.getPlayer(); + final double dx = x + 0.5 - player.lastTickPosX; + final double dz = z + 0.5 - player.lastTickPosZ; + final double t = Math.atan2(dz, dx) * 180.0 / 3.1415; + GL11.glPushMatrix(); + GL11.glRotatef(180.0f, 0.0f, 0.0f, 1.0f); + GL11.glTranslatef(0.0f, -0.25f, 0.0f); + customRenderItem.doRender(this.dummyEntityItem, 0.0, 0.0, 0.0, 0.0f, 0.0f); + GL11.glPopMatrix(); + } + + @Override + public void syncToNBT(final NBTTagCompound nbt) { + final NBTTagCompound item = new NBTTagCompound(); + final ItemStack stack = this.getUtil().getStack(9); + if (stack != null) { + stack.writeToNBT(item); + nbt.setTag("item", item); + } + } + + @Override + public void syncFromNBT(final NBTTagCompound nbt) { + if (nbt.hasKey("item")) { + this.getUtil().setStack(9, ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("item"))); + } + else { + this.getUtil().setStack(9, null); + } + } + + @Override + public void onInventoryUpdate() { + if (!this.getUtil().isServer()) { + return; + } + this.getUtil().refreshBlock(); + } + } + + public static class ValidatorIndividualInoculate extends SlotValidator + { + public ValidatorIndividualInoculate() { + super(null); + } + + @Override + public boolean isValid(final ItemStack object) { + final ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(object); + return root != null && Binnie.Genetics.getSystem(root).isDNAManipulable(object); + } + + @Override + public String getTooltip() { + return "Splicable Individual"; + } + } +} diff --git a/src/main/java/binnie/genetics/network/PacketID.java b/src/main/java/binnie/genetics/network/PacketID.java new file mode 100644 index 00000000..8ff1ea66 --- /dev/null +++ b/src/main/java/binnie/genetics/network/PacketID.java @@ -0,0 +1,9 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.network; + +public enum PacketID +{ +} diff --git a/src/main/java/binnie/genetics/proxy/IGeneticsProxy.java b/src/main/java/binnie/genetics/proxy/IGeneticsProxy.java new file mode 100644 index 00000000..bce9bfb2 --- /dev/null +++ b/src/main/java/binnie/genetics/proxy/IGeneticsProxy.java @@ -0,0 +1,11 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.proxy; + +import binnie.core.proxy.IProxyCore; + +public interface IGeneticsProxy extends IProxyCore +{ +} diff --git a/src/main/java/binnie/genetics/proxy/Proxy.java b/src/main/java/binnie/genetics/proxy/Proxy.java new file mode 100644 index 00000000..4b739d46 --- /dev/null +++ b/src/main/java/binnie/genetics/proxy/Proxy.java @@ -0,0 +1,15 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.proxy; + +import binnie.genetics.Genetics; +import binnie.core.proxy.BinnieModProxy; + +public class Proxy extends BinnieModProxy implements IGeneticsProxy +{ + public Proxy() { + super(Genetics.instance); + } +} diff --git a/src/main/java/binnie/genetics/proxy/ProxyClient.java b/src/main/java/binnie/genetics/proxy/ProxyClient.java new file mode 100644 index 00000000..09efa562 --- /dev/null +++ b/src/main/java/binnie/genetics/proxy/ProxyClient.java @@ -0,0 +1,9 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.proxy; + +public class ProxyClient extends Proxy implements IGeneticsProxy +{ +} diff --git a/src/main/java/binnie/genetics/proxy/ProxyServer.java b/src/main/java/binnie/genetics/proxy/ProxyServer.java new file mode 100644 index 00000000..fd7b427d --- /dev/null +++ b/src/main/java/binnie/genetics/proxy/ProxyServer.java @@ -0,0 +1,9 @@ +// +// Decompiled by Procyon v0.5.30 +// + +package binnie.genetics.proxy; + +public class ProxyServer extends Proxy implements IGeneticsProxy +{ +} diff --git a/src/main/resources/assets/binniecore/gui/stylesheet.json b/src/main/resources/assets/binniecore/gui/stylesheet.json new file mode 100644 index 00000000..f04cf9e4 --- /dev/null +++ b/src/main/resources/assets/binniecore/gui/stylesheet.json @@ -0,0 +1,274 @@ +{ + "name": "default", + "author": "Binnie", + + "texture-sheets": [ + { + "name": "controls", + "modid": "binniecore", + "path": "craftgui-controls.png" + }, + { + "name": "panels", + "modid": "binniecore", + "path": "craftgui-panels.png" + }, + { + "name": "slots", + "modid": "binniecore", + "path": "craftgui-slots.png" + } + ], + + "textures": [ + { + "name": "window", + "sheet": "panels", + "uv": "6 6 64 64", + "padding": "8" + }, + { + "name": "panel.gray", + "sheet": "panels", + "uv": "78 4 32 32", + "padding": "2" + }, + { + "name": "panel.black", + "sheet": "panels", + "uv": "116 4 32 32", + "padding": "2" + }, + { + "name": "panel.tinted", + "sheet": "panels", + "uv": "154 4 32 32", + "padding": "2" + }, + { + "name": "button", + "sheet": "controls", + "uv": "30 4 20 20", + "padding": "4" + }, + { + "name": "button.highlighted", + "sheet": "controls", + "uv": "56 4 20 20", + "padding": "4" + }, + { + "name": "button.disabled", + "sheet": "controls", + "uv": "4 4 20 20", + "padding": "4" + }, + { + "name": "slot", + "sheet": "slots", + "uv": "4 4 18 18", + "padding": "2" + }, + { + "name": "slot.border", + "sheet": "slots", + "uv": "28 4 18 18", + "padding": "2" + }, + { + "name": "slot.overlay", + "sheet": "slots", + "uv": "52 4 18 18", + "padding": "2" + }, + { + "name": "slot.charge", + "sheet": "slots", + "uv": "2 26 2 16", + "padding": "0" + }, + { + "name": "liquidtank", + "sheet": "slots", + "uv": "8 28 18 60", + "padding": "1" + }, + { + "name": "liquidtank.overlay", + "sheet": "slots", + "uv": "32 28 18 60", + "padding": "1" + }, + + { + "name": "errorstate.none", + "sheet": "controls", + "uv": "44 30 14 14" + }, + { + "name": "errorstate.warning", + "sheet": "controls", + "uv": "24 30 14 14" + }, + { + "name": "errorstate.error", + "sheet": "controls", + "uv": "4 30 14 14" + }, + + { + "name": "errorstate.error", + "sheet": "controls", + "uv": "4 30 14 14" + }, + { + "name": "energybar.back", + "sheet": "controls", + "uv": "40 50 12 14", + "padding": "1" + }, + { + "name": "energybar.glow", + "sheet": "controls", + "uv": "4 50 12 14", + "padding": "1" + }, + { + "name": "energybar.glass", + "sheet": "controls", + "uv": "22 50 12 14", + "padding": "1" + }, + + { + "name": "tab", + "sheet": "controls", + "uv": "30 70 20 20", + "padding": "6" + }, + { + "name": "tab.highlighted", + "sheet": "controls", + "uv": "56 70 20 20", + "padding": "6" + }, + { + "name": "tab.disabled", + "sheet": "controls", + "uv": "4 70 20 20", + "padding": "6" + }, + { + "name": "tab.outline", + "sheet": "controls", + "uv": "56 96 20 20", + "padding": "6" + }, + { + "name": "tab.solid", + "sheet": "controls", + "uv": "82 96 20 20", + "padding": "6" + }, + { + "name": "scroll", + "sheet": "controls", + "uv": "64 30 11 14", + "padding": "2" + }, + { + "name": "scroll.highlighted", + "sheet": "controls", + "uv": "82 30 11 14", + "padding": "2" + }, + { + "name": "scroll.disabled", + "sheet": "controls", + "uv": "100 30 11 14", + "padding": "2" + }, + + { + "name": "outline", + "sheet": "panels", + "uv": "76 40 16 16", + "padding": "2" + }, + { + "name": "button.help", + "sheet": "controls", + "uv": "88 4 16 16", + "padding": "2" + }, + { + "name": "button.info", + "sheet": "controls", + "uv": "110 4 16 16", + "padding": "2" + }, + { + "name": "button.user", + "sheet": "controls", + "uv": "132 4 16 16", + "padding": "2" + }, + { + "name": "button.power", + "sheet": "controls", + "uv": "154 4 16 16", + "padding": "2" + }, + { + "name": "horizontalliquidtank", + "sheet": "slots", + "uv": "56 28 60 18" + }, + { + "name": "horizontalliquidtank.overlay", + "sheet": "slots", + "uv": "56 52 60 18" + }, + { + "name": "slide.up", + "sheet": "panels", + "uv": "0 76 16 16" + }, + { + "name": "slide.down", + "sheet": "panels", + "uv": "16 76 16 16" + }, + { + "name": "slide.left", + "sheet": "panels", + "uv": "0 92 16 16" + }, + { + "name": "slide.right", + "sheet": "panels", + "uv": "16 92 16 16" + }, + { + "name": "checkbox", + "sheet": "controls", + "uv": "0 112 16 16" + }, + { + "name": "checkbox.checked", + "sheet": "controls", + "uv": "16 112 16 16" + }, + { + "name": "checkbox.highlighted", + "sheet": "controls", + "uv": "0 128 16 16" + }, + { + "name": "checkbox.checked.highlighted", + "sheet": "controls", + "uv": "16 128 16 16" + } + ] + +} \ No newline at end of file diff --git a/src/main/resources/assets/binniecore/lang/en_GB.lang b/src/main/resources/assets/binniecore/lang/en_GB.lang new file mode 100644 index 00000000..b931c929 --- /dev/null +++ b/src/main/resources/assets/binniecore/lang/en_GB.lang @@ -0,0 +1,265 @@ +binniecore.mod.name=Binnie Core + +binniecore.rootBees.descriptor=Apiarist +binniecore.rootTrees.descriptor=Arborist +binniecore.rootButterflies.descriptor=Lepidopterist +binniecore.rootFlowers.descriptor=Botanist + +binniecore.rootBees.shortName=Bees +binniecore.rootTrees.shortName=Trees +binniecore.rootButterflies.shortName=Butterflies & Moths +binniecore.rootFlowers.shortName=Flowers + +binniecore.rootBees.epitome.0=Bee Swatter +binniecore.rootBees.epitome.1=Amateur Beekeeper +binniecore.rootBees.epitome.2=Apiarist-In-Training +binniecore.rootBees.epitome.3=Professional Beekeeper +binniecore.rootBees.epitome.4=Master Apiarist +binniecore.rootBees.epitome.5=God amongst Apiarists +binniecore.rootBees.epitome.6=Sengir's Chosen + +binniecore.rootTrees.epitome.0=Wannabe Tree Farmer +binniecore.rootTrees.epitome.1=Lumberjack +binniecore.rootTrees.epitome.2=Green Thumbed +binniecore.rootTrees.epitome.3=Renowned Farmer +binniecore.rootTrees.epitome.4=Agricultural Master +binniecore.rootTrees.epitome.5=Lord of the Trees +binniecore.rootTrees.epitome.6=Mother Nature + +binniecore.rootButterflies.epitome.0=Bug Catcher +binniecore.rootButterflies.epitome.1=Moth Chaser +binniecore.rootButterflies.epitome.2=Scoop Wizard +binniecore.rootButterflies.epitome.3=Caterpillar Lord +binniecore.rootButterflies.epitome.4=Winged Assassin +binniecore.rootButterflies.epitome.5=Moth King +binniecore.rootButterflies.epitome.6=Monarch of the Butterflies + +binniecore.rootFlowers.epitome.0=Pansy +binniecore.rootFlowers.epitome.1=Daisy Pusher +binniecore.rootFlowers.epitome.2=Flower Power +binniecore.rootFlowers.epitome.3=Midas Touch +binniecore.rootFlowers.epitome.4=Green Thumb +binniecore.rootFlowers.epitome.5=Master Gardener +binniecore.rootFlowers.epitome.6=Peerless Botanist + +binniecore.rootBees.chromosome.species=Species +binniecore.rootBees.chromosome.speed=Production +binniecore.rootBees.chromosome.lifespan=Lifespan +binniecore.rootBees.chromosome.fertility=Fertility +binniecore.rootBees.chromosome.temperature_tolerance=Temperature Tolerance +binniecore.rootBees.chromosome.nocturnal=Cathemeral +binniecore.rootBees.chromosome.humidity=Humidity +binniecore.rootBees.chromosome.humidity_tolerance=Humidity Tolerance +binniecore.rootBees.chromosome.tolerant_flyer=Rain Tolerance +binniecore.rootBees.chromosome.cave_dwelling=Cave Dwelling +binniecore.rootBees.chromosome.flower_provider=Flowers +binniecore.rootBees.chromosome.flowering=Pollination +binniecore.rootBees.chromosome.territory=Territory +binniecore.rootBees.chromosome.effect=Effect + +binniecore.rootBees.chromosome.species.short=Species +binniecore.rootBees.chromosome.speed.short=Production +binniecore.rootBees.chromosome.lifespan.short=Lifespan +binniecore.rootBees.chromosome.fertility.short=Fertility +binniecore.rootBees.chromosome.temperature_tolerance.short=Temp. Tol. +binniecore.rootBees.chromosome.nocturnal.short=Cathemeral +binniecore.rootBees.chromosome.humidity.short=Humidity +binniecore.rootBees.chromosome.humidity_tolerance.short=Humid. Tol. +binniecore.rootBees.chromosome.tolerant_flyer.short=Rain Tol. +binniecore.rootBees.chromosome.cave_dwelling.short=Cave Dwell. +binniecore.rootBees.chromosome.flower_provider.short=Flowers +binniecore.rootBees.chromosome.flowering.short=Pollination +binniecore.rootBees.chromosome.territory.short=Territory +binniecore.rootBees.chromosome.effect.short=Effect + +binniecore.rootTrees.chromosome.species=Species +binniecore.rootTrees.chromosome.growth=Growth +binniecore.rootTrees.chromosome.height=Height +binniecore.rootTrees.chromosome.fertility=Fertility +binniecore.rootTrees.chromosome.fruits=Fruit +binniecore.rootTrees.chromosome.yield=Yield +binniecore.rootTrees.chromosome.plant=Plant Type +binniecore.rootTrees.chromosome.sappiness=Sappiness +binniecore.rootTrees.chromosome.territory=Territory +binniecore.rootTrees.chromosome.effect=Effect +binniecore.rootTrees.chromosome.maturation=Maturation +binniecore.rootTrees.chromosome.girth=Girth +binniecore.rootTrees.chromosome.fireproof=Fireproof + +binniecore.rootTrees.chromosome.species.short=Species +binniecore.rootTrees.chromosome.growth.short=Growth +binniecore.rootTrees.chromosome.height.short=Height +binniecore.rootTrees.chromosome.fertility.short=Fertility +binniecore.rootTrees.chromosome.fruits.short=Fruit +binniecore.rootTrees.chromosome.yield.short=Yield +binniecore.rootTrees.chromosome.plant.short=Plant Type +binniecore.rootTrees.chromosome.sappiness.short=Sappiness +binniecore.rootTrees.chromosome.territory.short=Territory +binniecore.rootTrees.chromosome.effect.short=Effect +binniecore.rootTrees.chromosome.maturation.short=Maturation +binniecore.rootTrees.chromosome.girth.short=Girth +binniecore.rootTrees.chromosome.fireproof.short=Fireproof + +binniecore.rootButterflies.chromosome.species=Species +binniecore.rootButterflies.chromosome.size=Size +binniecore.rootButterflies.chromosome.speed=Speed +binniecore.rootButterflies.chromosome.lifespan=Lifespan +binniecore.rootButterflies.chromosome.metabolism=Metabolism +binniecore.rootButterflies.chromosome.fertility=Fertility +binniecore.rootButterflies.chromosome.temperature_tolerance=Temperature Tolerance +binniecore.rootButterflies.chromosome.humidity_tolerance=Humidity Tolerance +binniecore.rootButterflies.chromosome.nocturnal=Cathemeral +binniecore.rootButterflies.chromosome.tolerant_flyer=Rain Tolerance +binniecore.rootButterflies.chromosome.fire_resist=Fire Resistance +binniecore.rootButterflies.chromosome.flower_provider=Flowers +binniecore.rootButterflies.chromosome.effect=Effect +binniecore.rootButterflies.chromosome.territory=Territory + +binniecore.rootButterflies.chromosome.species.short=Species +binniecore.rootButterflies.chromosome.size.short=Size +binniecore.rootButterflies.chromosome.speed.short=Speed +binniecore.rootButterflies.chromosome.lifespan.short=Lifespan +binniecore.rootButterflies.chromosome.metabolism.short=Metabolism +binniecore.rootButterflies.chromosome.fertility.short=Fertility +binniecore.rootButterflies.chromosome.temperature_tolerance.short=Temp. Tol. +binniecore.rootButterflies.chromosome.humidity_tolerance.short=Humid. Tol. +binniecore.rootButterflies.chromosome.nocturnal.short=Cathemeral +binniecore.rootButterflies.chromosome.tolerant_flyer.short=Rain Tol. +binniecore.rootButterflies.chromosome.fire_resist.short=Fire Resist. +binniecore.rootButterflies.chromosome.flower_provider.short=Flowers +binniecore.rootButterflies.chromosome.effect.short=Effect +binniecore.rootButterflies.chromosome.territory.short=Territory + +binniecore.rootFlowers.chromosome.species=Species +binniecore.rootFlowers.chromosome.primary=Primary Colour +binniecore.rootFlowers.chromosome.secondary=Secondary Colour +binniecore.rootFlowers.chromosome.fertility=Fertility +binniecore.rootFlowers.chromosome.territory=Territory +binniecore.rootFlowers.chromosome.effect=Effect +binniecore.rootFlowers.chromosome.lifespan=Lifespan +binniecore.rootFlowers.chromosome.temperature_tolerance=Temperature Tolerance +binniecore.rootFlowers.chromosome.humidity_tolerance=Humidity Tolerance +binniecore.rootFlowers.chromosome.ph_tolerance=pH Tolerance +binniecore.rootFlowers.chromosome.sappiness=Nectar +binniecore.rootFlowers.chromosome.stem=Stem Colour + +binniecore.rootFlowers.chromosome.species.short=Species +binniecore.rootFlowers.chromosome.primary.short=Prim. Colour +binniecore.rootFlowers.chromosome.secondary.short=Sec. Colour +binniecore.rootFlowers.chromosome.fertility.short=Fertility +binniecore.rootFlowers.chromosome.territory.short=Territory +binniecore.rootFlowers.chromosome.effect.short=Effect +binniecore.rootFlowers.chromosome.lifespan.short=Lifespan +binniecore.rootFlowers.chromosome.temperature_tolerance.short=Temp. Tol. +binniecore.rootFlowers.chromosome.humidity_tolerance.short=Humid. Tol. +binniecore.rootFlowers.chromosome.ph_tolerance.short=pH Tol. +binniecore.rootFlowers.chromosome.sappiness.short=Nectar +binniecore.rootFlowers.chromosome.stem.short=Stem Colour + +binniecore.allele.fertility.low=Low +binniecore.allele.fertility.normal=Normal +binniecore.allele.fertility.high=High +binniecore.allele.fertility.maximum=Maximum + +binniecore.allele.true=Yes +binniecore.allele.false=No + +binniecore.allele.metabolism.highest=Highest +binniecore.allele.metabolism.higher=Higher +binniecore.allele.metabolism.high=High +binniecore.allele.metabolism.average=Average +binniecore.allele.metabolism.slow=Slow +binniecore.allele.metabolism.slower=Slower +binniecore.allele.metabolism.slowest=Slowest + + +binniecore.allele.none=None + +binniecore.allele.growth.tropical=Tropical +binniecore.allele.growth.lightlevel=Light Level + + +binniecore.beemodifier.territory=Territory +binniecore.beemodifier.mutation=Mutation +binniecore.beemodifier.lifespan=Lifespan +binniecore.beemodifier.production=Production +binniecore.beemodifier.flowering=Flowering +binniecore.beemodifier.geneticdecay=Genetic Decay + +binniecore.gui.breedingmessage.species=Species Discovered +binniecore.gui.breedingmessage.branch=Branch Discovered +binniecore.gui.breedingmessage.epithet=Epithet Gained + +binniecore.item.container.capsule=Capsule +binniecore.item.container.refractory=Capsule +binniecore.item.container.can=Can +binniecore.item.container.bucket=Bucket +binniecore.item.container.glass=Bottle +binniecore.item.container.cylinder=Cylinder + +binniecore.machine.storage.compartment=Compartment +binniecore.machine.storage.compartmentIron=Iron Compartment +binniecore.machine.storage.compartmentDiamond=Diamond Compartment +binniecore.machine.storage.compartmentCopper=Copper Compartment +binniecore.machine.storage.compartmentBronze=Bronze Compartment +binniecore.machine.storage.compartmentGold=Gold Compartment + +< %1$s is the name of the pattern > +binniecore.gui.designer.pattern=%1$s Pattern + +binniecore.gui.database.nodescription=No Description Provided. + +binniecore.gui.database.mode.species=Species +binniecore.gui.database.mode.branches=Branches +binniecore.gui.database.mode.breeder=Breeder + +binniecore.gui.temperature.short=Temp. +binniecore.gui.humidity.short=Humid. + +binniecore.gui.tolerated=Tolerated +binniecore.gui.nottolerated=Not Tolerated + +binniecore.gui.design=Design + + + +< Descriptions used for effects in the database > +binniecore.allele.extrabees.effect.acid.desc=Dissolves stone and dirt +binniecore.allele.forestry.effectAggressive.desc=Attacks players +binniecore.allele.forestry.effectBeatific.desc=Slowly restores health to players +binniecore.allele.forestry.effectCreeper.desc=Explodes violently on approach +binniecore.allele.extrabees.effect.spawn_creeper.desc=Randomly spawns creepers +binniecore.allele.extrabees.effect.blindness.desc=Blinds players +binniecore.allele.forestry.effectDrunkard.desc=Causes players to become tipsy +binniecore.allele.extrabees.effect.ectoplasm.desc=Creates ectoplasmic webbing +binniecore.allele.forestry.effectMisanthrope.desc=Aggressively defends its hive +binniecore.allele.forestry.effectExploration.desc=Slowly rewards nearby players with experience +binniecore.allele.forestry.effectFertile.desc=Stimulates nearby blocks +binniecore.allele.extrabees.effect.fireworks.desc=Spontaneously fires fireworks into the sky +binniecore.allele.forestry.effectIgnition.desc=Randomly starts fires +binniecore.allele.forestry.effectGlacial.desc=Slowly freezes over water +binniecore.allele.extrabees.effect.gravity.desc=Pulls entities towards the hive +binniecore.allele.extrabees.effect.bonemealsapling.desc=Bonemeals saplings +binniecore.allele.forestry.effectHeroic.desc=Defends their hive against mobs +binniecore.allele.extrabees.effect.hunger.desc=Causes players to be hungry +binniecore.allele.extrabees.effect.lightning.desc=Stimulates lightning strikes +binniecore.allele.extrabees.effect.meteor.desc=Causes meteors to fall from the sky +binniecore.allele.extrabees.effect.bonemealmushroom.desc=Bonemeals mushrooms +binniecore.allele.forestry.effectMycophilic.desc=Spreads mushrooms and mycelium +binniecore.allele.forestry.effectNone.desc=No discernible effects +binniecore.allele.forestry.effectMiasmic.desc=Poisons players +binniecore.allele.extrabees.effect.power.desc=Provides some power to machines +binniecore.allele.forestry.effectRadioactive.desc=Destroys nearby blocks +binniecore.allele.forestry.effectReanimation.desc=Reanimates deceased mobs +binniecore.allele.forestry.effectRepulsion.desc=Naturally encourages mobs to avoid it +binniecore.allele.forestry.effectResurrection.desc=Ressurects deceased mobs +binniecore.allele.extrabees.effect.bonemealfruit.desc=Bonemeals fruit leaves +binniecore.allele.extrabees.effect.spawn_skeleton.desc=Randomly spawns skeletons +binniecore.allele.extrabees.effect.slow.desc=Slows down players +binniecore.allele.forestry.effectSnowing.desc=Causes it to snow +binniecore.allele.extrabees.effect.teleport.desc=Randomly teleports entities +binniecore.allele.extrabees.effect.radioactive.desc=Irradiates approaching players +binniecore.allele.extrabees.effect.water.desc=Fills machines with water +binniecore.allele.extrabees.effect.wither.desc=Withers anyone who approaches +binniecore.allele.extrabees.effect.spawn_zombie.desc=Randomly spawns zombies +binniecore.allele.forestry.effectFestiveEaster.desc=Does nothing diff --git a/src/main/resources/assets/binniecore/lang/en_US.lang b/src/main/resources/assets/binniecore/lang/en_US.lang new file mode 100644 index 00000000..e8494a33 --- /dev/null +++ b/src/main/resources/assets/binniecore/lang/en_US.lang @@ -0,0 +1,299 @@ +binniecore.mod.name=Binnie Core + +binniecore.rootBees.descriptor=Apiarist +binniecore.rootTrees.descriptor=Arborist +binniecore.rootButterflies.descriptor=Lepidopterist +binniecore.rootFlowers.descriptor=Botanist + +binniecore.rootBees.shortName=Bees +binniecore.rootTrees.shortName=Trees +binniecore.rootButterflies.shortName=Butterflies & Moths +binniecore.rootFlowers.shortName=Flowers + +binniecore.rootBees.epitome.0=Bee Swatter +binniecore.rootBees.epitome.1=Amateur Beekeeper +binniecore.rootBees.epitome.2=Apiarist-In-Training +binniecore.rootBees.epitome.3=Professional Beekeeper +binniecore.rootBees.epitome.4=Master Apiarist +binniecore.rootBees.epitome.5=God amoungst Apiarists +binniecore.rootBees.epitome.6=Sengir's Chosen + +binniecore.rootTrees.epitome.0=Wannabe Tree Farmer +binniecore.rootTrees.epitome.1=Lumberjack +binniecore.rootTrees.epitome.2=Green Thumbed +binniecore.rootTrees.epitome.3=Renowned Farmer +binniecore.rootTrees.epitome.4=Agricultural Master +binniecore.rootTrees.epitome.5=Lord of the Trees +binniecore.rootTrees.epitome.6=Mother Nature + +binniecore.rootButterflies.epitome.0=Bug Catcher +binniecore.rootButterflies.epitome.1=Moth Chaser +binniecore.rootButterflies.epitome.2=Scoop Wizard +binniecore.rootButterflies.epitome.3=Caterpiller Lord +binniecore.rootButterflies.epitome.4=Winged Assassin +binniecore.rootButterflies.epitome.5=Moth King +binniecore.rootButterflies.epitome.6=Monarch of the Butterflies + +binniecore.rootFlowers.epitome.0=Pansy +binniecore.rootFlowers.epitome.1=Daisy Pusher +binniecore.rootFlowers.epitome.2=Flower Power +binniecore.rootFlowers.epitome.3=Midas Touch +binniecore.rootFlowers.epitome.4=Green Thumb +binniecore.rootFlowers.epitome.5=Master Garderner +binniecore.rootFlowers.epitome.6=Peerless Botanist + +binniecore.rootBees.chromosome.species=Species +binniecore.rootBees.chromosome.speed=Production +binniecore.rootBees.chromosome.lifespan=Lifespan +binniecore.rootBees.chromosome.fertility=Fertility +binniecore.rootBees.chromosome.temperature_tolerance=Temperature Tolerance +binniecore.rootBees.chromosome.nocturnal=Cathemeral +binniecore.rootBees.chromosome.humidity=Humidity +binniecore.rootBees.chromosome.humidity_tolerance=Humidity Tolerance +binniecore.rootBees.chromosome.tolerant_flyer=Rain Tolerance +binniecore.rootBees.chromosome.cave_dwelling=Cave Dwelling +binniecore.rootBees.chromosome.flower_provider=Flowers +binniecore.rootBees.chromosome.flowering=Pollination +binniecore.rootBees.chromosome.territory=Territory +binniecore.rootBees.chromosome.effect=Effect + +binniecore.rootBees.chromosome.species.short=Species +binniecore.rootBees.chromosome.speed.short=Production +binniecore.rootBees.chromosome.lifespan.short=Lifespan +binniecore.rootBees.chromosome.fertility.short=Fertility +binniecore.rootBees.chromosome.temperature_tolerance.short=Temp. Tol. +binniecore.rootBees.chromosome.nocturnal.short=Cathemeral +binniecore.rootBees.chromosome.humidity.short=Humidity +binniecore.rootBees.chromosome.humidity_tolerance.short=Humid. Tol. +binniecore.rootBees.chromosome.tolerant_flyer.short=Rain Tol. +binniecore.rootBees.chromosome.cave_dwelling.short=Cave Dwell. +binniecore.rootBees.chromosome.flower_provider.short=Flowers +binniecore.rootBees.chromosome.flowering.short=Pollination +binniecore.rootBees.chromosome.territory.short=Territory +binniecore.rootBees.chromosome.effect.short=Effect + +binniecore.rootTrees.chromosome.species=Species +binniecore.rootTrees.chromosome.growth=Growth +binniecore.rootTrees.chromosome.height=Height +binniecore.rootTrees.chromosome.fertility=Fertility +binniecore.rootTrees.chromosome.fruits=Fruit +binniecore.rootTrees.chromosome.yield=Yield +binniecore.rootTrees.chromosome.plant=Plant Type +binniecore.rootTrees.chromosome.sappiness=Sappiness +binniecore.rootTrees.chromosome.territory=Territory +binniecore.rootTrees.chromosome.effect=Effect +binniecore.rootTrees.chromosome.maturation=Maturation +binniecore.rootTrees.chromosome.girth=Girth +binniecore.rootTrees.chromosome.fireproof=Fireproof + +binniecore.rootTrees.chromosome.species.short=Species +binniecore.rootTrees.chromosome.growth.short=Growth +binniecore.rootTrees.chromosome.height.short=Height +binniecore.rootTrees.chromosome.fertility.short=Fertility +binniecore.rootTrees.chromosome.fruits.short=Fruit +binniecore.rootTrees.chromosome.yield.short=Yield +binniecore.rootTrees.chromosome.plant.short=Plant Type +binniecore.rootTrees.chromosome.sappiness.short=Sappiness +binniecore.rootTrees.chromosome.territory.short=Territory +binniecore.rootTrees.chromosome.effect.short=Effect +binniecore.rootTrees.chromosome.maturation.short=Maturation +binniecore.rootTrees.chromosome.girth.short=Girth +binniecore.rootTrees.chromosome.fireproof.short=Fireproof + +binniecore.rootButterflies.chromosome.species=Species +binniecore.rootButterflies.chromosome.size=Size +binniecore.rootButterflies.chromosome.speed=Speed +binniecore.rootButterflies.chromosome.lifespan=Lifespan +binniecore.rootButterflies.chromosome.metabolism=Metabolism +binniecore.rootButterflies.chromosome.fertility=Fertility +binniecore.rootButterflies.chromosome.temperature_tolerance=Temperature Tolerance +binniecore.rootButterflies.chromosome.humidity_tolerance=Humidity Tolerance +binniecore.rootButterflies.chromosome.nocturnal=Cathemeral +binniecore.rootButterflies.chromosome.tolerant_flyer=Rain Tolerance +binniecore.rootButterflies.chromosome.fire_resist=Fire Resistance +binniecore.rootButterflies.chromosome.flower_provider=Flowers +binniecore.rootButterflies.chromosome.effect=Effect +binniecore.rootButterflies.chromosome.territory=Territory + +binniecore.rootButterflies.chromosome.species.short=Species +binniecore.rootButterflies.chromosome.size.short=Size +binniecore.rootButterflies.chromosome.speed.short=Speed +binniecore.rootButterflies.chromosome.lifespan.short=Lifespan +binniecore.rootButterflies.chromosome.metabolism.short=Metabolism +binniecore.rootButterflies.chromosome.fertility.short=Fertility +binniecore.rootButterflies.chromosome.temperature_tolerance.short=Temp. Tol. +binniecore.rootButterflies.chromosome.humidity_tolerance.short=Humid. Tol. +binniecore.rootButterflies.chromosome.nocturnal.short=Cathemeral +binniecore.rootButterflies.chromosome.tolerant_flyer.short=Rain Tol. +binniecore.rootButterflies.chromosome.fire_resist.short=Fire Resist. +binniecore.rootButterflies.chromosome.flower_provider.short=Flowers +binniecore.rootButterflies.chromosome.effect.short=Effect +binniecore.rootButterflies.chromosome.territory.short=Territory + +binniecore.rootFlowers.chromosome.species=Species +binniecore.rootFlowers.chromosome.primary=Primary Colour +binniecore.rootFlowers.chromosome.secondary=Secondary Colour +binniecore.rootFlowers.chromosome.fertility=Fertility +binniecore.rootFlowers.chromosome.territory=Territory +binniecore.rootFlowers.chromosome.effect=Effect +binniecore.rootFlowers.chromosome.lifespan=Lifespan +binniecore.rootFlowers.chromosome.temperature_tolerance=Temperature Tolerance +binniecore.rootFlowers.chromosome.humidity_tolerance=Humidity Tolerance +binniecore.rootFlowers.chromosome.ph_tolerance=pH Tolerance +binniecore.rootFlowers.chromosome.sappiness=Nectar +binniecore.rootFlowers.chromosome.stem=Stem Colour + +binniecore.rootFlowers.chromosome.species.short=Species +binniecore.rootFlowers.chromosome.primary.short=Prim. Colour +binniecore.rootFlowers.chromosome.secondary.short=Sec. Colour +binniecore.rootFlowers.chromosome.fertility.short=Fertility +binniecore.rootFlowers.chromosome.territory.short=Territory +binniecore.rootFlowers.chromosome.effect.short=Effect +binniecore.rootFlowers.chromosome.lifespan.short=Lifespan +binniecore.rootFlowers.chromosome.temperature_tolerance.short=Temp. Tol. +binniecore.rootFlowers.chromosome.humidity_tolerance.short=Humid. Tol. +binniecore.rootFlowers.chromosome.ph_tolerance.short=pH Tol. +binniecore.rootFlowers.chromosome.sappiness.short=Nectar +binniecore.rootFlowers.chromosome.stem.short=Stem Colour + +binniecore.allele.fertility.low=Low +binniecore.allele.fertility.normal=Normal +binniecore.allele.fertility.high=High +binniecore.allele.fertility.maximum=Maximum + +binniecore.allele.true=Yes +binniecore.allele.false=No + +binniecore.allele.metabolism.highest=Highest +binniecore.allele.metabolism.higher=Higher +binniecore.allele.metabolism.high=High +binniecore.allele.metabolism.average=Average +binniecore.allele.metabolism.slow=Slow +binniecore.allele.metabolism.slower=Slower +binniecore.allele.metabolism.slowest=Slowest + + +binniecore.allele.none=None + +binniecore.allele.growth.tropical=Tropical +binniecore.allele.growth.lightlevel=Light Level + + +binniecore.beemodifier.territory=Territory +binniecore.beemodifier.mutation=Mutation +binniecore.beemodifier.lifespan=Lifespan +binniecore.beemodifier.production=Production +binniecore.beemodifier.flowering=Flowering +binniecore.beemodifier.geneticdecay=Genetic Decay + +binniecore.gui.breedingmessage.species=Species Discovered +binniecore.gui.breedingmessage.branch=Branch Discovered +binniecore.gui.breedingmessage.epithet=Epithet Gained + +binniecore.item.container.capsule=Capsule +binniecore.item.container.refractory=Capsule +binniecore.item.container.can=Can +binniecore.item.container.bucket=Bucket +binniecore.item.container.glass=Bottle +binniecore.item.container.cylinder=Cylinder + +binniecore.machine.storage.compartment=Compartment +binniecore.machine.storage.compartmentIron=Iron Compartment +binniecore.machine.storage.compartmentDiamond=Diamond Compartment +binniecore.machine.storage.compartmentCopper=Copper Compartment +binniecore.machine.storage.compartmentBronze=Bronze Compartment +binniecore.machine.storage.compartmentGold=Gold Compartment + +< %1$s is the name of the pattern > +binniecore.gui.designer.pattern=%1$s Pattern + +binniecore.gui.database.nodescription=No Description Provided. + +binniecore.gui.database.mode.species=Species +binniecore.gui.database.mode.branches=Branches +binniecore.gui.database.mode.breeder=Breeder + +binniecore.gui.temperature.short=Temp. +binniecore.gui.humidity.short=Humid. + +binniecore.gui.tolerated=Tolerated +binniecore.gui.nottolerated=Not Tolerated + +binniecore.gui.design=Design + + + +< Descriptions used for effects in the registry > +binniecore.allele.extrabees.effect.acid.desc=Dissolves stone and dirt +binniecore.allele.forestry.effectAggressive.desc=Attacks players +binniecore.allele.forestry.effectBeatific.desc=Slowly restores health to players +binniecore.allele.forestry.effectCreeper.desc=Explodes violently on approach +binniecore.allele.extrabees.effect.spawn_creeper.desc=Randomly spawns creepers +binniecore.allele.extrabees.effect.blindness.desc=Blinds players +binniecore.allele.forestry.effectDrunkard.desc=Causes players to become tipsy +binniecore.allele.extrabees.effect.ectoplasm.desc=Creates ectoplasmic webbing +binniecore.allele.forestry.effectMisanthrope.desc=Aggresively defends its hive +binniecore.allele.forestry.effectExploration.desc=Slowly rewards nearby players with experiance +binniecore.allele.forestry.effectFertile.desc=Stimulates nearby blocks +binniecore.allele.extrabees.effect.fireworks.desc=Spontaneously fires fireworks into the sky +binniecore.allele.forestry.effectIgnition.desc=Randomly starts fires +binniecore.allele.forestry.effectGlacial.desc=Slowly freezes over water +binniecore.allele.extrabees.effect.gravity.desc=Pulls entities towards their hive +binniecore.allele.extrabees.effect.bonemealsapling.desc=Bonemeals saplings +binniecore.allele.forestry.effectHeroic.desc=Defends their hive against mobs +binniecore.allele.extrabees.effect.hunger.desc=Causes players to become hungry +binniecore.allele.extrabees.effect.lightning.desc=Stimulates lightning strikes +binniecore.allele.extrabees.effect.meteor.desc=Causes meteors to fall from the sky +binniecore.allele.extrabees.effect.bonemealmushroom.desc=Bonemeals mushrooms +binniecore.allele.forestry.effectMycophilic.desc=Spreads mushrooms and mycellium +binniecore.allele.forestry.effectNone.desc=No discernable effects +binniecore.allele.forestry.effectMiasmic.desc=Poisons players +binniecore.allele.extrabees.effect.power.desc=Provides some power to machines +binniecore.allele.forestry.effectRadioactive.desc=Destroys nearby blocks +binniecore.allele.forestry.effectReanimation.desc=Reanimates deceased mobs +binniecore.allele.forestry.effectRepulsion.desc=Naturally encourages mobs to avoid it +binniecore.allele.forestry.effectResurrection.desc=Ressurects deceased mobs +binniecore.allele.extrabees.effect.bonemealfruit.desc=Bonemeals fruit leaves +binniecore.allele.extrabees.effect.spawn_skeleton.desc=Randomly spawns skeletons +binniecore.allele.extrabees.effect.slow.desc=Slows down players +binniecore.allele.forestry.effectSnowing.desc=Causes it to snow +binniecore.allele.extrabees.effect.teleport.desc=Randomly teleports entities +binniecore.allele.extrabees.effect.radioactive.desc=Irradiates approaching players +binniecore.allele.extrabees.effect.water.desc=Fills machines with water +binniecore.allele.extrabees.effect.wither.desc=Withers anyone who approaches +binniecore.allele.extrabees.effect.spawn_zombie.desc=Randomly spawns zombies +binniecore.allele.forestry.effectFestiveEaster.desc=Does nothing + + + +< Names for slots when using help tooltip > +binniecore.gui.slot.slot=Slot +binniecore.gui.slot.input=Input Slot +binniecore.gui.slot.process=Process Slot +binniecore.gui.slot.output=Output Slot +binniecore.gui.slot.frame=Frame Slot +binniecore.gui.slot.mutator=Mutator Slot +binniecore.gui.slot.circuit=Circuit Slot +binniecore.gui.slot.grain=Grain Slot +binniecore.gui.slot.inventory=Inventory Slot +binniecore.gui.slot.caterpillar=Caterpillar Slot +binniecore.gui.slot.polish=Polish Slot +binniecore.gui.slot.wood=Wood Slot +binniecore.gui.slot.acclimatiser=Acclimatiser Item Slot +binniecore.gui.slot.analyse=Analyse Slot +binniecore.gui.slot.dye=Dye Slot +binniecore.gui.slot.incubator=Incubator Slot +binniecore.gui.slot.compartment=Compartment Slot +binniecore.gui.slot.ingredient=Ingredient Slot +binniecore.gui.slot.byproduct=Byproduct Slot +binniecore.gui.slot.enzyme=Enzyme Slot +binniecore.gui.slot.sequencervial=Sequencer Vial Slot +binniecore.gui.slot.catalyst=Catalyst Slot +binniecore.gui.slot.serum.input=Serum Input Slot +binniecore.gui.slot.serum.output=Serum Output Slot +binniecore.gui.slot.serum.active=Active Serum Slot +binniecore.gui.slot.yeast=Yeast Slot + +binniecore.gui.tank.input=Input Tank +binniecore.gui.tank.process=Process Tank +binniecore.gui.tank.output=Output Tank diff --git a/src/main/resources/assets/binniecore/textures/blocks/liquids/blank.png b/src/main/resources/assets/binniecore/textures/blocks/liquids/blank.png new file mode 100644 index 00000000..3837e946 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/blocks/liquids/blank.png differ diff --git a/src/main/resources/assets/binniecore/textures/blocks/liquids/blank.png.mcmeta b/src/main/resources/assets/binniecore/textures/blocks/liquids/blank.png.mcmeta new file mode 100644 index 00000000..0c36dcaa --- /dev/null +++ b/src/main/resources/assets/binniecore/textures/blocks/liquids/blank.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":32,"frametime":1,"frames":[{"index":0,"time":2},{"index":1,"time":2},{"index":2,"time":2},{"index":3,"time":2},{"index":4,"time":2},{"index":5,"time":2},{"index":6,"time":2},{"index":7,"time":2},{"index":8,"time":2},{"index":9,"time":2},{"index":10,"time":2},{"index":11,"time":2},{"index":12,"time":2},{"index":13,"time":2},{"index":14,"time":2},{"index":15,"time":2},{"index":16,"time":2},{"index":17,"time":2},{"index":18,"time":2},{"index":19,"time":2},{"index":20,"time":2},{"index":21,"time":2},{"index":22,"time":2},{"index":23,"time":2},{"index":24,"time":2},{"index":25,"time":2},{"index":26,"time":2},{"index":27,"time":2},{"index":28,"time":2},{"index":29,"time":2},{"index":30,"time":2},{"index":31,"time":2}]}} \ No newline at end of file diff --git a/src/main/resources/assets/binniecore/textures/blocks/liquids/blank.txt b/src/main/resources/assets/binniecore/textures/blocks/liquids/blank.txt new file mode 100644 index 00000000..d8fe765a --- /dev/null +++ b/src/main/resources/assets/binniecore/textures/blocks/liquids/blank.txt @@ -0,0 +1,32 @@ +0*2 +1*2 +2*2 +3*2 +4*2 +5*2 +6*2 +7*2 +8*2 +9*2 +10*2 +11*2 +12*2 +13*2 +14*2 +15*2 +16*2 +17*2 +18*2 +19*2 +20*2 +21*2 +22*2 +23*2 +24*2 +25*2 +26*2 +27*2 +28*2 +29*2 +30*2 +31*2 diff --git a/src/main/resources/assets/binniecore/textures/gui/breeding.png b/src/main/resources/assets/binniecore/textures/gui/breeding.png new file mode 100644 index 00000000..7a26e9f2 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/gui/breeding.png differ diff --git a/src/main/resources/assets/binniecore/textures/gui/craftgui-controls.png b/src/main/resources/assets/binniecore/textures/gui/craftgui-controls.png new file mode 100644 index 00000000..7b14dc8f Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/gui/craftgui-controls.png differ diff --git a/src/main/resources/assets/binniecore/textures/gui/craftgui-controls.png.mcmeta b/src/main/resources/assets/binniecore/textures/gui/craftgui-controls.png.mcmeta new file mode 100644 index 00000000..50f27d12 --- /dev/null +++ b/src/main/resources/assets/binniecore/textures/gui/craftgui-controls.png.mcmeta @@ -0,0 +1,11 @@ +{ + "craftgui":{ + "texture:slot":{ + "x":0, + "y":0, + "w":18, + "h":18, + "padding-all":4 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/binniecore/textures/gui/craftgui-panels.png b/src/main/resources/assets/binniecore/textures/gui/craftgui-panels.png new file mode 100644 index 00000000..4411eaaf Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/gui/craftgui-panels.png differ diff --git a/src/main/resources/assets/binniecore/textures/gui/craftgui-slots.png b/src/main/resources/assets/binniecore/textures/gui/craftgui-slots.png new file mode 100644 index 00000000..d3104618 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/gui/craftgui-slots.png differ diff --git a/src/main/resources/assets/binniecore/textures/gui/guianalyst.png b/src/main/resources/assets/binniecore/textures/gui/guianalyst.png new file mode 100644 index 00000000..c9ec47c1 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/gui/guianalyst.png differ diff --git a/src/main/resources/assets/binniecore/textures/gui/message.png b/src/main/resources/assets/binniecore/textures/gui/message.png new file mode 100644 index 00000000..958ebd67 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/gui/message.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/actions/CancelTask.png b/src/main/resources/assets/binniecore/textures/items/actions/CancelTask.png new file mode 100644 index 00000000..333181a1 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/actions/CancelTask.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/actions/PauseProcess.png b/src/main/resources/assets/binniecore/textures/items/actions/PauseProcess.png new file mode 100644 index 00000000..1bcc91fd Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/actions/PauseProcess.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/fieldKit.png b/src/main/resources/assets/binniecore/textures/items/fieldKit.png new file mode 100644 index 00000000..c2eec935 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/fieldKit.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/fieldKit1.png b/src/main/resources/assets/binniecore/textures/items/fieldKit1.png new file mode 100644 index 00000000..1d142983 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/fieldKit1.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/fieldKit2.png b/src/main/resources/assets/binniecore/textures/items/fieldKit2.png new file mode 100644 index 00000000..7c41ca90 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/fieldKit2.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/fieldKit3.png b/src/main/resources/assets/binniecore/textures/items/fieldKit3.png new file mode 100644 index 00000000..67b667fa Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/fieldKit3.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/genesis.png b/src/main/resources/assets/binniecore/textures/items/genesis.png new file mode 100644 index 00000000..612a4d42 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/genesis.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/analyst.add.0.png b/src/main/resources/assets/binniecore/textures/items/gui/analyst.add.0.png new file mode 100644 index 00000000..8cddef50 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/analyst.add.0.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/analyst.add.1.png b/src/main/resources/assets/binniecore/textures/items/gui/analyst.add.1.png new file mode 100644 index 00000000..089b10dc Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/analyst.add.1.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/analyst.add.png b/src/main/resources/assets/binniecore/textures/items/gui/analyst.add.png new file mode 100644 index 00000000..82316726 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/analyst.add.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/analyst.allday.png b/src/main/resources/assets/binniecore/textures/items/gui/analyst.allday.png new file mode 100644 index 00000000..fd4da7a8 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/analyst.allday.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/analyst.arrow.0.png b/src/main/resources/assets/binniecore/textures/items/gui/analyst.arrow.0.png new file mode 100644 index 00000000..da92e463 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/analyst.arrow.0.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/analyst.arrow.1.png b/src/main/resources/assets/binniecore/textures/items/gui/analyst.arrow.1.png new file mode 100644 index 00000000..05d6abc4 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/analyst.arrow.1.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/analyst.arrow.png b/src/main/resources/assets/binniecore/textures/items/gui/analyst.arrow.png new file mode 100644 index 00000000..f2090f8b Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/analyst.arrow.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/analyst.day.png b/src/main/resources/assets/binniecore/textures/items/gui/analyst.day.png new file mode 100644 index 00000000..14e1b9bd Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/analyst.day.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/analyst.fire.png b/src/main/resources/assets/binniecore/textures/items/gui/analyst.fire.png new file mode 100644 index 00000000..81a2dd9b Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/analyst.fire.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/analyst.night.png b/src/main/resources/assets/binniecore/textures/items/gui/analyst.night.png new file mode 100644 index 00000000..dfd85269 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/analyst.night.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/analyst.nofire.png b/src/main/resources/assets/binniecore/textures/items/gui/analyst.nofire.png new file mode 100644 index 00000000..95f5f209 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/analyst.nofire.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/analyst.norain.png b/src/main/resources/assets/binniecore/textures/items/gui/analyst.norain.png new file mode 100644 index 00000000..8542eda3 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/analyst.norain.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/analyst.nosky.png b/src/main/resources/assets/binniecore/textures/items/gui/analyst.nosky.png new file mode 100644 index 00000000..3cec7819 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/analyst.nosky.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/analyst.rain.png b/src/main/resources/assets/binniecore/textures/items/gui/analyst.rain.png new file mode 100644 index 00000000..1557245d Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/analyst.rain.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/analyst.sky.png b/src/main/resources/assets/binniecore/textures/items/gui/analyst.sky.png new file mode 100644 index 00000000..9afd2b85 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/analyst.sky.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/arrow-down.png b/src/main/resources/assets/binniecore/textures/items/gui/arrow-down.png new file mode 100644 index 00000000..318255b6 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/arrow-down.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/arrow-downleft.png b/src/main/resources/assets/binniecore/textures/items/gui/arrow-downleft.png new file mode 100644 index 00000000..1fc23e35 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/arrow-downleft.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/arrow-downright.png b/src/main/resources/assets/binniecore/textures/items/gui/arrow-downright.png new file mode 100644 index 00000000..3bfc3927 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/arrow-downright.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/arrow-left.png b/src/main/resources/assets/binniecore/textures/items/gui/arrow-left.png new file mode 100644 index 00000000..ea1d59e7 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/arrow-left.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/arrow-leftdown.png b/src/main/resources/assets/binniecore/textures/items/gui/arrow-leftdown.png new file mode 100644 index 00000000..b1f9960d Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/arrow-leftdown.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/arrow-leftup.png b/src/main/resources/assets/binniecore/textures/items/gui/arrow-leftup.png new file mode 100644 index 00000000..cbf48cd9 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/arrow-leftup.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/arrow-right.png b/src/main/resources/assets/binniecore/textures/items/gui/arrow-right.png new file mode 100644 index 00000000..ecec04e4 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/arrow-right.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/arrow-rightdown.png b/src/main/resources/assets/binniecore/textures/items/gui/arrow-rightdown.png new file mode 100644 index 00000000..f0be459e Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/arrow-rightdown.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/arrow-rightup.png b/src/main/resources/assets/binniecore/textures/items/gui/arrow-rightup.png new file mode 100644 index 00000000..9cbcb710 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/arrow-rightup.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/arrow-tldown.png b/src/main/resources/assets/binniecore/textures/items/gui/arrow-tldown.png new file mode 100644 index 00000000..d26c57e0 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/arrow-tldown.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/arrow-up.png b/src/main/resources/assets/binniecore/textures/items/gui/arrow-up.png new file mode 100644 index 00000000..7cb96079 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/arrow-up.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/arrow-upbl.png b/src/main/resources/assets/binniecore/textures/items/gui/arrow-upbl.png new file mode 100644 index 00000000..ca479e1c Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/arrow-upbl.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/arrow-upleft.png b/src/main/resources/assets/binniecore/textures/items/gui/arrow-upleft.png new file mode 100644 index 00000000..7d4eec54 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/arrow-upleft.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/gui/arrow-upright.png b/src/main/resources/assets/binniecore/textures/items/gui/arrow-upright.png new file mode 100644 index 00000000..f9615473 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/gui/arrow-upright.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/habitats/desert.png b/src/main/resources/assets/binniecore/textures/items/habitats/desert.png new file mode 100644 index 00000000..c8bfd61d Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/habitats/desert.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/habitats/end.png b/src/main/resources/assets/binniecore/textures/items/habitats/end.png new file mode 100644 index 00000000..0c663ee6 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/habitats/end.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/habitats/forest.png b/src/main/resources/assets/binniecore/textures/items/habitats/forest.png new file mode 100644 index 00000000..094d85a0 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/habitats/forest.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/habitats/frozenriver.png b/src/main/resources/assets/binniecore/textures/items/habitats/frozenriver.png new file mode 100644 index 00000000..1a8cca2f Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/habitats/frozenriver.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/habitats/hills.png b/src/main/resources/assets/binniecore/textures/items/habitats/hills.png new file mode 100644 index 00000000..5177d3f1 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/habitats/hills.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/habitats/jungle.png b/src/main/resources/assets/binniecore/textures/items/habitats/jungle.png new file mode 100644 index 00000000..49850fce Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/habitats/jungle.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/habitats/mushroom.png b/src/main/resources/assets/binniecore/textures/items/habitats/mushroom.png new file mode 100644 index 00000000..95725a68 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/habitats/mushroom.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/habitats/nether.png b/src/main/resources/assets/binniecore/textures/items/habitats/nether.png new file mode 100644 index 00000000..0ea85689 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/habitats/nether.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/habitats/ocean.png b/src/main/resources/assets/binniecore/textures/items/habitats/ocean.png new file mode 100644 index 00000000..0972112a Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/habitats/ocean.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/habitats/plains.png b/src/main/resources/assets/binniecore/textures/items/habitats/plains.png new file mode 100644 index 00000000..0595be51 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/habitats/plains.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/habitats/river.png b/src/main/resources/assets/binniecore/textures/items/habitats/river.png new file mode 100644 index 00000000..afa3ffe3 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/habitats/river.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/habitats/snow.png b/src/main/resources/assets/binniecore/textures/items/habitats/snow.png new file mode 100644 index 00000000..f33ed2bc Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/habitats/snow.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/habitats/swamp.png b/src/main/resources/assets/binniecore/textures/items/habitats/swamp.png new file mode 100644 index 00000000..c1404f92 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/habitats/swamp.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/habitats/taiga.png b/src/main/resources/assets/binniecore/textures/items/habitats/taiga.png new file mode 100644 index 00000000..7798f0eb Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/habitats/taiga.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/liquids/cylinder.bottle.png b/src/main/resources/assets/binniecore/textures/items/liquids/cylinder.bottle.png new file mode 100644 index 00000000..a986220e Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/liquids/cylinder.bottle.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/liquids/cylinder.contents.png b/src/main/resources/assets/binniecore/textures/items/liquids/cylinder.contents.png new file mode 100644 index 00000000..11406e0b Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/liquids/cylinder.contents.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/triggers/CanWork.png b/src/main/resources/assets/binniecore/textures/items/triggers/CanWork.png new file mode 100644 index 00000000..0a88a7af Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/triggers/CanWork.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/triggers/CannotWork.png b/src/main/resources/assets/binniecore/textures/items/triggers/CannotWork.png new file mode 100644 index 00000000..333181a1 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/triggers/CannotWork.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/triggers/IsNotWorking.png b/src/main/resources/assets/binniecore/textures/items/triggers/IsNotWorking.png new file mode 100644 index 00000000..27e56943 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/triggers/IsNotWorking.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/triggers/IsWorking.png b/src/main/resources/assets/binniecore/textures/items/triggers/IsWorking.png new file mode 100644 index 00000000..0227c01c Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/triggers/IsWorking.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/triggers/PowerFull.png b/src/main/resources/assets/binniecore/textures/items/triggers/PowerFull.png new file mode 100644 index 00000000..2e3783b3 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/triggers/PowerFull.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/triggers/PowerHigh.png b/src/main/resources/assets/binniecore/textures/items/triggers/PowerHigh.png new file mode 100644 index 00000000..4556ab24 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/triggers/PowerHigh.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/triggers/PowerLow.png b/src/main/resources/assets/binniecore/textures/items/triggers/PowerLow.png new file mode 100644 index 00000000..1ec4830a Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/triggers/PowerLow.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/triggers/PowerMedium.png b/src/main/resources/assets/binniecore/textures/items/triggers/PowerMedium.png new file mode 100644 index 00000000..e70f119c Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/triggers/PowerMedium.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/triggers/PowerNone.png b/src/main/resources/assets/binniecore/textures/items/triggers/PowerNone.png new file mode 100644 index 00000000..4ef4e852 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/triggers/PowerNone.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/validator/bee.0.png b/src/main/resources/assets/binniecore/textures/items/validator/bee.0.png new file mode 100644 index 00000000..7f691590 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/validator/bee.0.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/validator/bee.1.png b/src/main/resources/assets/binniecore/textures/items/validator/bee.1.png new file mode 100644 index 00000000..87aa594a Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/validator/bee.1.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/validator/block.0.png b/src/main/resources/assets/binniecore/textures/items/validator/block.0.png new file mode 100644 index 00000000..02546bd1 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/validator/block.0.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/validator/block.1.png b/src/main/resources/assets/binniecore/textures/items/validator/block.1.png new file mode 100644 index 00000000..73279405 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/validator/block.1.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/validator/circuit.0.png b/src/main/resources/assets/binniecore/textures/items/validator/circuit.0.png new file mode 100644 index 00000000..7a2fab58 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/validator/circuit.0.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/validator/circuit.1.png b/src/main/resources/assets/binniecore/textures/items/validator/circuit.1.png new file mode 100644 index 00000000..dfe8f361 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/validator/circuit.1.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/validator/frame.0.png b/src/main/resources/assets/binniecore/textures/items/validator/frame.0.png new file mode 100644 index 00000000..e3f3e563 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/validator/frame.0.png differ diff --git a/src/main/resources/assets/binniecore/textures/items/validator/frame.1.png b/src/main/resources/assets/binniecore/textures/items/validator/frame.1.png new file mode 100644 index 00000000..854fbde2 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/items/validator/frame.1.png differ diff --git a/src/main/resources/assets/binniecore/textures/tile/Compartment.png b/src/main/resources/assets/binniecore/textures/tile/Compartment.png new file mode 100644 index 00000000..e1e206b3 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/tile/Compartment.png differ diff --git a/src/main/resources/assets/binniecore/textures/tile/CompartmentBronze.png b/src/main/resources/assets/binniecore/textures/tile/CompartmentBronze.png new file mode 100644 index 00000000..618dbbdb Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/tile/CompartmentBronze.png differ diff --git a/src/main/resources/assets/binniecore/textures/tile/CompartmentCopper.png b/src/main/resources/assets/binniecore/textures/tile/CompartmentCopper.png new file mode 100644 index 00000000..defdb016 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/tile/CompartmentCopper.png differ diff --git a/src/main/resources/assets/binniecore/textures/tile/CompartmentDiamond.png b/src/main/resources/assets/binniecore/textures/tile/CompartmentDiamond.png new file mode 100644 index 00000000..c720b954 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/tile/CompartmentDiamond.png differ diff --git a/src/main/resources/assets/binniecore/textures/tile/CompartmentGold.png b/src/main/resources/assets/binniecore/textures/tile/CompartmentGold.png new file mode 100644 index 00000000..c63ff009 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/tile/CompartmentGold.png differ diff --git a/src/main/resources/assets/binniecore/textures/tile/CompartmentIron.png b/src/main/resources/assets/binniecore/textures/tile/CompartmentIron.png new file mode 100644 index 00000000..daafa5d5 Binary files /dev/null and b/src/main/resources/assets/binniecore/textures/tile/CompartmentIron.png differ diff --git a/src/main/resources/assets/botany/lang/en_GB.lang b/src/main/resources/assets/botany/lang/en_GB.lang new file mode 100644 index 00000000..4cad51a6 --- /dev/null +++ b/src/main/resources/assets/botany/lang/en_GB.lang @@ -0,0 +1,162 @@ +botany.tab.botany=Botany + +botany.ph.acid=Acidic +botany.ph.neutral=Neutral +botany.ph.alkaline=Alkaline + +botany.moisture.dry=Dry +botany.moisture.normal=Normal +botany.moisture.damp=Damp + +botany.soil.soil=Soil +botany.soil.loam=Loam +botany.soil.flowerbed=Flowerbed + +item.trowelWood.name=Wooden Trowel +item.trowelStone.name=Stone Trowel +item.trowelIron.name=Iron Trowel +item.trowelGold.name=Gold Trowel +item.trowelDiamond.name=Diamond Trowel + +botany.colour.aquamarine=Aquamarine +botany.colour.black=Black +botany.colour.blue=Deep Blue +botany.colour.brown=Red-Brown +botany.colour.cadetblue=Dull Blue +botany.colour.chocolate=Light Brown +botany.colour.coral=Coral +botany.colour.crimson=Crimson +botany.colour.cyan=Cyan +botany.colour.darkgoldenrod=Dark Bronze +botany.colour.darkgray=Gray +botany.colour.darkgreen=Dark Green +botany.colour.darkkhaki=Dark Beige +botany.colour.darkolivegreen=Dark Olive +botany.colour.darkorange=Red-Orange +botany.colour.darksalmon=Dark Salmon +botany.colour.darkseagreen=Dull Green +botany.colour.darkslateblue=Dark Slate +botany.colour.darkslategray=Dark Teal +botany.colour.darkturquoise=Turquoise +botany.colour.darkviolet=Purple +botany.colour.deeppink=Deep Pink +botany.colour.deepskyblue=Light Blue +botany.colour.dimgray=Dark Grey +botany.colour.dodgerblue=Blue +botany.colour.gold=Gold +botany.colour.goldenrod=Bronze +botany.colour.gray=Dim Grey +botany.colour.green=Green +botany.colour.hotpink=Pink +botany.colour.indianred=Brick Red +botany.colour.indigo=Indigo +botany.colour.khaki=Beige +botany.colour.lavender=Alice Blue +botany.colour.lemonchiffon=Pale Yellow +botany.colour.lightgray=Light Grey +botany.colour.lightseagreen=Dark Turquoise +botany.colour.lightsteelblue=Pale Blue +botany.colour.lime=Lime +botany.colour.limegreen=Light Green +botany.colour.magenta=Magenta +botany.colour.maroon=Maroon +botany.colour.mediumaquamarine=Light Mint +botany.colour.mediumorchid=Light Purple +botany.colour.mediumpurple=Light Slate +botany.colour.mediumseagreen=Mint +botany.colour.mediumvioletred=Purple-Red +botany.colour.mistyrose=Pale Rose +botany.colour.navy=Navy +botany.colour.olive=Dark Yellow +botany.colour.olivedrab=Olive +botany.colour.orange=Orange +botany.colour.palegreen=Pale Green +botany.colour.paleturquoise=Pale Turquoise +botany.colour.palevioletred=Dull Pink +botany.colour.peru=Tan +botany.colour.pink=Pale Pink +botany.colour.plum=Light Mauve +botany.colour.purple=Dark Purple +botany.colour.red=Red +botany.colour.rosybrown=Dull Red +botany.colour.royalblue=Royal Blue +botany.colour.salmon=Salmon +botany.colour.sandybrown=Pale Brown +botany.colour.seagreen=Dark Mint +botany.colour.sienna=Brown +botany.colour.skyblue=Sky Blue +botany.colour.slateblue=Slate Blue +botany.colour.slategray=Slate +botany.colour.springgreen=Spring Green +botany.colour.steelblue=Steel Blue +botany.colour.tan=Pale Tan +botany.colour.teal=Teal +botany.colour.thistle=Pale Purple +botany.colour.turquoise=Light Turquoise +botany.colour.violet=Mauve +botany.colour.wheat=Pale Orange +botany.colour.white=White +botany.colour.yellow=Yellow +botany.colour.yellowgreen=Yellow-Green + +for.binnie.circuit.garden.dry.manual.fert=Fert. Garden (Dry) +for.binnie.circuit.garden.dry.acid.manual.fert=Fert. Garden (Dry, Acidic) +for.binnie.circuit.garden.dry.neutral.manual.fert=Fert. Garden (Dry, Neutral) +for.binnie.circuit.garden.dry.alkaline.manual.fert=Fert. Garden (Dry, Alkaline) +for.binnie.circuit.garden.normal.manual.fert=Fert. Garden +for.binnie.circuit.garden.normal.acid.manual.fert=Fert. Garden (Acidic) +for.binnie.circuit.garden.normal.neutral.manual.fert=Fert. Garden (Neutral) +for.binnie.circuit.garden.normal.alkaline.manual.fert=Fert. Garden (Alkaline) +for.binnie.circuit.garden.damp.manual.fert=Fert. Garden (Damp) +for.binnie.circuit.garden.damp.acid.manual.fert=Fert. Garden (Damp, Acidic) +for.binnie.circuit.garden.damp.neutral.manual.fert=Fert. Garden (Damp, Neutral) +for.binnie.circuit.garden.damp.alkaline.manual.fert=Fert. Garden (Damp, Alkaline) +for.binnie.circuit.garden.dry.manual=Garden (Dry) +for.binnie.circuit.garden.dry.acid.manual=Garden (Dry, Acidic) +for.binnie.circuit.garden.dry.neutral.manual=Garden (Dry, Neutral) +for.binnie.circuit.garden.dry.alkaline.manual=Garden (Dry, Alkaline) +for.binnie.circuit.garden.normal.manual=Garden +for.binnie.circuit.garden.normal.acid.manual=Garden (Acidic) +for.binnie.circuit.garden.normal.neutral.manual=Garden (Neutral) +for.binnie.circuit.garden.normal.alkaline.manual=Garden (Alkaline) +for.binnie.circuit.garden.damp.manual=Garden (Damp) +for.binnie.circuit.garden.damp.acid.manual=Garden (Damp, Acidic) +for.binnie.circuit.garden.damp.neutral.manual=Garden (Damp, Neutral) +for.binnie.circuit.garden.damp.alkaline.manual=Garden (Damp, Alkaline) +for.binnie.circuit.garden.dry.fert=Fert. Garden (Dry) +for.binnie.circuit.garden.dry.acid.fert=Fert. Garden (Dry, Acidic) +for.binnie.circuit.garden.dry.neutral.fert=Fert. Garden (Dry, Neutral) +for.binnie.circuit.garden.dry.alkaline.fert=Fert. Garden (Dry, Alkaline) +for.binnie.circuit.garden.normal.fert=Fert. Garden +for.binnie.circuit.garden.normal.acid.fert=Fert. Garden (Acidic) +for.binnie.circuit.garden.normal.neutral.fert=Fert. Garden (Neutral) +for.binnie.circuit.garden.normal.alkaline.fert=Fert. Garden (Alkaline) +for.binnie.circuit.garden.damp.fert=Fert. Garden (Damp) +for.binnie.circuit.garden.damp.acid.fert=Fert. Garden (Damp, Acidic) +for.binnie.circuit.garden.damp.neutral.fert=Fert. Garden (Damp, Neutral) +for.binnie.circuit.garden.damp.alkaline.fert=Fert. Garden (Damp, Alkaline) +for.binnie.circuit.garden.dry=Garden (Dry) +for.binnie.circuit.garden.dry.acid=Garden (Dry, Acidic) +for.binnie.circuit.garden.dry.neutral=Garden (Dry, Neutral) +for.binnie.circuit.garden.dry.alkaline=Garden (Dry, Alkaline) +for.binnie.circuit.garden.normal=Garden +for.binnie.circuit.garden.normal.acid=Garden (Acidic) +for.binnie.circuit.garden.normal.neutral=Garden (Neutral) +for.binnie.circuit.garden.normal.alkaline=Garden (Alkaline) +for.binnie.circuit.garden.damp=Garden (Damp) +for.binnie.circuit.garden.damp.acid=Garden (Damp, Acidic) +for.binnie.circuit.garden.damp.neutral=Garden (Damp, Neutral) +for.binnie.circuit.garden.damp.alkaline=Garden (Damp, Alkaline) + + +botany.gui.database.tab.species.overview=Overview +botany.gui.database.tab.species.genome=Genome +botany.gui.database.tab.species.classification=Classification +botany.gui.database.tab.species.resultant=Resultant Mutations +botany.gui.database.tab.species.further=Further Mutations +botany.gui.database.tab.branches.overview=Overview +botany.gui.database.tab.branches.species=Species +botany.gui.database.tab.breeder=Breeder + +botany.gui.database.tab.colour.resultant=Resultant Mixes +botany.gui.database.tab.colour.further=Further Mixes diff --git a/src/main/resources/assets/botany/lang/en_US.lang b/src/main/resources/assets/botany/lang/en_US.lang new file mode 100644 index 00000000..dfa66284 --- /dev/null +++ b/src/main/resources/assets/botany/lang/en_US.lang @@ -0,0 +1,163 @@ +botany.tab.botany=Botany + +botany.ph.acid=Acidic +botany.ph.neutral=Neutral +botany.ph.alkaline=Alkaline + +botany.moisture.dry=Dry +botany.moisture.normal=Normal +botany.moisture.damp=Damp + +botany.soil.soil=Soil +botany.soil.loam=Loam +botany.soil.flowerbed=Flowerbed + +item.trowelWood.name=Wooden Trowel +item.trowelStone.name=Stone Trowel +item.trowelIron.name=Iron Trowel +item.trowelGold.name=Gold Trowel +item.trowelDiamond.name=Diamond Trowel + +botany.colour.aquamarine=Aquamarine +botany.colour.black=Black +botany.colour.blue=Deep Blue +botany.colour.brown=Red-Brown +botany.colour.cadetblue=Dull Blue +botany.colour.chocolate=Light Brown +botany.colour.coral=Coral +botany.colour.crimson=Crimson +botany.colour.cyan=Cyan +botany.colour.darkgoldenrod=Dark Bronze +botany.colour.darkgray=Gray +botany.colour.darkgreen=Dark Green +botany.colour.darkkhaki=Dark Beige +botany.colour.darkolivegreen=Dark Olive +botany.colour.darkorange=Red-Orange +botany.colour.darksalmon=Dark Salmon +botany.colour.darkseagreen=Dull Green +botany.colour.darkslateblue=Dark Slate +botany.colour.darkslategray=Dark Teal +botany.colour.darkturquoise=Turquoise +botany.colour.darkviolet=Purple +botany.colour.deeppink=Deep Pink +botany.colour.deepskyblue=Light Blue +botany.colour.dimgray=Dark Gray +botany.colour.dodgerblue=Blue +botany.colour.gold=Gold +botany.colour.goldenrod=Bronze +botany.colour.gray=Dim Gray +botany.colour.green=Green +botany.colour.hotpink=Pink +botany.colour.indianred=Brick Red +botany.colour.indigo=Indigo +botany.colour.khaki=Beige +botany.colour.lavender=Alice Blue +botany.colour.lemonchiffon=Pale Yellow +botany.colour.lightgray=Light Gray +botany.colour.lightseagreen=Dark Turquoise +botany.colour.lightsteelblue=Pale Blue +botany.colour.lime=Lime +botany.colour.limegreen=Light Green +botany.colour.magenta=Magenta +botany.colour.maroon=Maroon +botany.colour.mediumaquamarine=Light Mint +botany.colour.mediumorchid=Light Purple +botany.colour.mediumpurple=Light Slate +botany.colour.mediumseagreen=Mint +botany.colour.mediumvioletred=Purple-Red +botany.colour.mistyrose=Pale Rose +botany.colour.navy=Navy +botany.colour.olive=Dark Yellow +botany.colour.olivedrab=Olive +botany.colour.orange=Orange +botany.colour.palegreen=Pale Green +botany.colour.paleturquoise=Pale Turquoise +botany.colour.palevioletred=Dull Pink +botany.colour.peru=Tan +botany.colour.pink=Pale Pink +botany.colour.plum=Light Mauve +botany.colour.purple=Dark Purple +botany.colour.red=Red +botany.colour.rosybrown=Dull Red +botany.colour.royalblue=Royal Blue +botany.colour.salmon=Salmon +botany.colour.sandybrown=Pale Brown +botany.colour.seagreen=Dark Mint +botany.colour.sienna=Brown +botany.colour.skyblue=Sky Blue +botany.colour.slateblue=Slate Blue +botany.colour.slategray=Slate +botany.colour.springgreen=Spring Green +botany.colour.steelblue=Steel Blue +botany.colour.tan=Pale Tan +botany.colour.teal=Teal +botany.colour.thistle=Pale Purple +botany.colour.turquoise=Light Turquoise +botany.colour.violet=Mauve +botany.colour.wheat=Pale Orange +botany.colour.white=White +botany.colour.yellow=Yellow +botany.colour.yellowgreen=Yellow-Green + +for.binnie.circuit.garden.dry.manual.fert=Fert. Garden (Dry) +for.binnie.circuit.garden.dry.acid.manual.fert=Fert. Garden (Dry, Acidic) +for.binnie.circuit.garden.dry.neutral.manual.fert=Fert. Garden (Dry, Neutral) +for.binnie.circuit.garden.dry.alkaline.manual.fert=Fert. Garden (Dry, Alkaline) +for.binnie.circuit.garden.normal.manual.fert=Fert. Garden +for.binnie.circuit.garden.normal.acid.manual.fert=Fert. Garden (Acidic) +for.binnie.circuit.garden.normal.neutral.manual.fert=Fert. Garden (Neutral) +for.binnie.circuit.garden.normal.alkaline.manual.fert=Fert. Garden (Alkaline) +for.binnie.circuit.garden.damp.manual.fert=Fert. Garden (Damp) +for.binnie.circuit.garden.damp.acid.manual.fert=Fert. Garden (Damp, Acidic) +for.binnie.circuit.garden.damp.neutral.manual.fert=Fert. Garden (Damp, Neutral) +for.binnie.circuit.garden.damp.alkaline.manual.fert=Fert. Garden (Damp, Alkaline) +for.binnie.circuit.garden.dry.manual=Garden (Dry) +for.binnie.circuit.garden.dry.acid.manual=Garden (Dry, Acidic) +for.binnie.circuit.garden.dry.neutral.manual=Garden (Dry, Neutral) +for.binnie.circuit.garden.dry.alkaline.manual=Garden (Dry, Alkaline) +for.binnie.circuit.garden.normal.manual=Garden +for.binnie.circuit.garden.normal.acid.manual=Garden (Acidic) +for.binnie.circuit.garden.normal.neutral.manual=Garden (Neutral) +for.binnie.circuit.garden.normal.alkaline.manual=Garden (Alkaline) +for.binnie.circuit.garden.damp.manual=Garden (Damp) +for.binnie.circuit.garden.damp.acid.manual=Garden (Damp, Acidic) +for.binnie.circuit.garden.damp.neutral.manual=Garden (Damp, Neutral) +for.binnie.circuit.garden.damp.alkaline.manual=Garden (Damp, Alkaline) +for.binnie.circuit.garden.dry.fert=Fert. Garden (Dry) +for.binnie.circuit.garden.dry.acid.fert=Fert. Garden (Dry, Acidic) +for.binnie.circuit.garden.dry.neutral.fert=Fert. Garden (Dry, Neutral) +for.binnie.circuit.garden.dry.alkaline.fert=Fert. Garden (Dry, Alkaline) +for.binnie.circuit.garden.normal.fert=Fert. Garden +for.binnie.circuit.garden.normal.acid.fert=Fert. Garden (Acidic) +for.binnie.circuit.garden.normal.neutral.fert=Fert. Garden (Neutral) +for.binnie.circuit.garden.normal.alkaline.fert=Fert. Garden (Alkaline) +for.binnie.circuit.garden.damp.fert=Fert. Garden (Damp) +for.binnie.circuit.garden.damp.acid.fert=Fert. Garden (Damp, Acidic) +for.binnie.circuit.garden.damp.neutral.fert=Fert. Garden (Damp, Neutral) +for.binnie.circuit.garden.damp.alkaline.fert=Fert. Garden (Damp, Alkaline) +for.binnie.circuit.garden.dry=Garden (Dry) +for.binnie.circuit.garden.dry.acid=Garden (Dry, Acidic) +for.binnie.circuit.garden.dry.neutral=Garden (Dry, Neutral) +for.binnie.circuit.garden.dry.alkaline=Garden (Dry, Alkaline) +for.binnie.circuit.garden.normal=Garden +for.binnie.circuit.garden.normal.acid=Garden (Acidic) +for.binnie.circuit.garden.normal.neutral=Garden (Neutral) +for.binnie.circuit.garden.normal.alkaline=Garden (Alkaline) +for.binnie.circuit.garden.damp=Garden (Damp) +for.binnie.circuit.garden.damp.acid=Garden (Damp, Acidic) +for.binnie.circuit.garden.damp.neutral=Garden (Damp, Neutral) +for.binnie.circuit.garden.damp.alkaline=Garden (Damp, Alkaline) + + +botany.gui.database.tab.species.overview=Overview +botany.gui.database.tab.species.genome=Genome +botany.gui.database.tab.species.classification=Classification +botany.gui.database.tab.species.resultant=Resultant Mutations +botany.gui.database.tab.species.further=Further Mutations +botany.gui.database.tab.branches.overview=Overview +botany.gui.database.tab.branches.species=Species +botany.gui.database.tab.breeder=Breeder + +botany.gui.database.tab.colour.resultant=Resultant Mixes +botany.gui.database.tab.colour.further=Further Mixes + diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic brick base texture.png b/src/main/resources/assets/botany/textures/blocks/ceramic brick base texture.png new file mode 100644 index 00000000..c6195676 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic brick base texture.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.brick.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic.brick.0.png new file mode 100644 index 00000000..7546bce7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.brick.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.brick.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic.brick.1.png new file mode 100644 index 00000000..b356a46f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.brick.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.brick.2.png b/src/main/resources/assets/botany/textures/blocks/ceramic.brick.2.png new file mode 100644 index 00000000..76e76d38 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.brick.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.bricklarge.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic.bricklarge.0.png new file mode 100644 index 00000000..c2ce1c17 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.bricklarge.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.bricklarge.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic.bricklarge.1.png new file mode 100644 index 00000000..e1105b44 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.bricklarge.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.bricklarge.2.png b/src/main/resources/assets/botany/textures/blocks/ceramic.bricklarge.2.png new file mode 100644 index 00000000..750d9e85 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.bricklarge.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.brickstripe.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic.brickstripe.0.png new file mode 100644 index 00000000..7546bce7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.brickstripe.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.brickstripe.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic.brickstripe.1.png new file mode 100644 index 00000000..1bd66859 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.brickstripe.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.brickstripe.2.png b/src/main/resources/assets/botany/textures/blocks/ceramic.brickstripe.2.png new file mode 100644 index 00000000..508e94a9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.brickstripe.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.cheque.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic.cheque.0.png new file mode 100644 index 00000000..af3320d0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.cheque.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.cheque.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic.cheque.1.png new file mode 100644 index 00000000..f52df969 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.cheque.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.cheque.2.png b/src/main/resources/assets/botany/textures/blocks/ceramic.cheque.2.png new file mode 100644 index 00000000..568a83b7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.cheque.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.mixed.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic.mixed.0.png new file mode 100644 index 00000000..dd09f1c8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.mixed.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.mixed.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic.mixed.1.png new file mode 100644 index 00000000..3e19bb72 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.mixed.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.mixed.2.png b/src/main/resources/assets/botany/textures/blocks/ceramic.mixed.2.png new file mode 100644 index 00000000..90316bff Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.mixed.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.png b/src/main/resources/assets/botany/textures/blocks/ceramic.png new file mode 100644 index 00000000..efd3aabe Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.split.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic.split.0.png new file mode 100644 index 00000000..182dd77c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.split.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.split.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic.split.1.png new file mode 100644 index 00000000..02100cc1 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.split.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.split.2.png b/src/main/resources/assets/botany/textures/blocks/ceramic.split.2.png new file mode 100644 index 00000000..83a03f0f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.split.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.tile.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic.tile.0.png new file mode 100644 index 00000000..9aa7893d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.tile.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.tile.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic.tile.1.png new file mode 100644 index 00000000..8d2035bb Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.tile.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.tile.2.png b/src/main/resources/assets/botany/textures/blocks/ceramic.tile.2.png new file mode 100644 index 00000000..16e968c2 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.tile.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbrick.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbrick.0.png new file mode 100644 index 00000000..5d5d4fbe Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbrick.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbrick.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbrick.1.png new file mode 100644 index 00000000..c8dedb0d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbrick.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbrick.2.png b/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbrick.2.png new file mode 100644 index 00000000..4c29f9b2 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbrick.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbricklarge.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbricklarge.0.png new file mode 100644 index 00000000..0abd3905 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbricklarge.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbricklarge.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbricklarge.1.png new file mode 100644 index 00000000..1f04fb7c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbricklarge.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbricklarge.2.png b/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbricklarge.2.png new file mode 100644 index 00000000..a1095990 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbricklarge.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbrickstripe.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbrickstripe.0.png new file mode 100644 index 00000000..5d5d4fbe Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbrickstripe.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbrickstripe.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbrickstripe.1.png new file mode 100644 index 00000000..374a913e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbrickstripe.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbrickstripe.2.png b/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbrickstripe.2.png new file mode 100644 index 00000000..d6b1245a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic.verticalbrickstripe.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barred.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barred.0.png new file mode 100644 index 00000000..0c1a2cc9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barred.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barred.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barred.1.png new file mode 100644 index 00000000..8e34970f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barred.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barred2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barred2.0.png new file mode 100644 index 00000000..be445a2e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barred2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barred2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barred2.1.png new file mode 100644 index 00000000..f715171d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barred2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner.0.png new file mode 100644 index 00000000..a0af8234 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner.1.png new file mode 100644 index 00000000..87f5cf8d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner2.0.png new file mode 100644 index 00000000..a288e2a9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner2.1.png new file mode 100644 index 00000000..43f57d72 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner3.0.png new file mode 100644 index 00000000..1fb43f5c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner3.1.png new file mode 100644 index 00000000..260426f8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner4.0.png new file mode 100644 index 00000000..1b523006 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner4.1.png new file mode 100644 index 00000000..134702cc Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcorner4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner.0.png new file mode 100644 index 00000000..06ae5d4b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner.1.png new file mode 100644 index 00000000..4f5dc627 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner2.0.png new file mode 100644 index 00000000..0f82922a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner2.1.png new file mode 100644 index 00000000..be242b68 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner3.0.png new file mode 100644 index 00000000..e6d1cfb4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner3.1.png new file mode 100644 index 00000000..1c1384fc Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner4.0.png new file mode 100644 index 00000000..eb761912 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner4.1.png new file mode 100644 index 00000000..17e29c2e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredcurvedcorner4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredend.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredend.0.png new file mode 100644 index 00000000..f5824374 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredend.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredend.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredend.1.png new file mode 100644 index 00000000..b9b4ba3b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredend.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredend2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredend2.0.png new file mode 100644 index 00000000..9bbde3bf Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredend2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredend2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredend2.1.png new file mode 100644 index 00000000..5b1dadf1 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredend2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredend3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredend3.0.png new file mode 100644 index 00000000..90450dd3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredend3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredend3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredend3.1.png new file mode 100644 index 00000000..91ff21c8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredend3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredend4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredend4.0.png new file mode 100644 index 00000000..cabc9094 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredend4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/barredend4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/barredend4.1.png new file mode 100644 index 00000000..492efddb Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/barredend4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/blank.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/blank.0.png new file mode 100644 index 00000000..8a8d8523 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/blank.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/blank.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/blank.1.png new file mode 100644 index 00000000..96729e15 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/blank.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/chequered.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/chequered.0.png new file mode 100644 index 00000000..7a176e7e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/chequered.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/chequered.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/chequered.1.png new file mode 100644 index 00000000..77ceb3d5 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/chequered.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/circle.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/circle.0.png new file mode 100644 index 00000000..c8d051cd Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/circle.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/circle.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/circle.1.png new file mode 100644 index 00000000..8aa12a8a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/circle.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/corner.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/corner.0.png new file mode 100644 index 00000000..82db072e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/corner.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/corner.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/corner.1.png new file mode 100644 index 00000000..06735a92 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/corner.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/corner2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/corner2.0.png new file mode 100644 index 00000000..9dc70b7a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/corner2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/corner2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/corner2.1.png new file mode 100644 index 00000000..ff9d05e5 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/corner2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/corner3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/corner3.0.png new file mode 100644 index 00000000..ed458cde Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/corner3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/corner3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/corner3.1.png new file mode 100644 index 00000000..2990edff Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/corner3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/corner4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/corner4.0.png new file mode 100644 index 00000000..69a93c09 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/corner4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/corner4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/corner4.1.png new file mode 100644 index 00000000..cdf07e4e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/corner4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/creeper.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/creeper.0.png new file mode 100644 index 00000000..4c1884fc Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/creeper.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/creeper.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/creeper.1.png new file mode 100644 index 00000000..dded0521 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/creeper.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/creeper2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/creeper2.0.png new file mode 100644 index 00000000..9e48c1f1 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/creeper2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/creeper2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/creeper2.1.png new file mode 100644 index 00000000..964a1682 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/creeper2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/creeper3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/creeper3.0.png new file mode 100644 index 00000000..9fe3105a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/creeper3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/creeper3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/creeper3.1.png new file mode 100644 index 00000000..b9d41e15 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/creeper3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/creeper4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/creeper4.0.png new file mode 100644 index 00000000..66aa4931 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/creeper4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/creeper4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/creeper4.1.png new file mode 100644 index 00000000..82d83490 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/creeper4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/crossed.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/crossed.0.png new file mode 100644 index 00000000..ac10f691 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/crossed.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/crossed.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/crossed.1.png new file mode 100644 index 00000000..7285fe12 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/crossed.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner.0.png new file mode 100644 index 00000000..642177f7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner.1.png new file mode 100644 index 00000000..f800723d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner2.0.png new file mode 100644 index 00000000..9bcbf575 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner2.1.png new file mode 100644 index 00000000..206c3fd3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner3.0.png new file mode 100644 index 00000000..bd5a0b5f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner3.1.png new file mode 100644 index 00000000..6e4f8d13 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner4.0.png new file mode 100644 index 00000000..92ec87a6 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner4.1.png new file mode 100644 index 00000000..984f507b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedcorner4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner.0.png new file mode 100644 index 00000000..1184326a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner.1.png new file mode 100644 index 00000000..eafeb1ad Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner2.0.png new file mode 100644 index 00000000..123e3bf0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner2.1.png new file mode 100644 index 00000000..2db1db47 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner3.0.png new file mode 100644 index 00000000..09f5487a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner3.1.png new file mode 100644 index 00000000..23ac5810 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner4.0.png new file mode 100644 index 00000000..afafd010 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner4.1.png new file mode 100644 index 00000000..f9f6215c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedsplitbarredcorner4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection.0.png new file mode 100644 index 00000000..dcc7114b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection.1.png new file mode 100644 index 00000000..65636079 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection2.0.png new file mode 100644 index 00000000..f4cfd0c3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection2.1.png new file mode 100644 index 00000000..e8a98994 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection3.0.png new file mode 100644 index 00000000..894c9ce7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection3.1.png new file mode 100644 index 00000000..983e700a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection4.0.png new file mode 100644 index 00000000..43de3861 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection4.1.png new file mode 100644 index 00000000..1e7448d6 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/curvedtsection4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal.0.png new file mode 100644 index 00000000..6c37b518 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal.1.png new file mode 100644 index 00000000..9d49cecf Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged.0.png new file mode 100644 index 00000000..065f3944 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged.1.png new file mode 100644 index 00000000..d39ed85d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged2.0.png new file mode 100644 index 00000000..a4efcf64 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged2.1.png new file mode 100644 index 00000000..672ac607 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged3.0.png new file mode 100644 index 00000000..f1b8bbb3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged3.1.png new file mode 100644 index 00000000..5b885cd9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged4.0.png new file mode 100644 index 00000000..88f6b972 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged4.1.png new file mode 100644 index 00000000..7d894584 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal1edged4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal2.0.png new file mode 100644 index 00000000..5f703203 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal2.1.png new file mode 100644 index 00000000..ca6b9339 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal2edged.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal2edged.0.png new file mode 100644 index 00000000..89f06a02 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal2edged.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal2edged.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal2edged.1.png new file mode 100644 index 00000000..bba261c8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal2edged.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal2edged2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal2edged2.0.png new file mode 100644 index 00000000..7b217ebe Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal2edged2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal2edged2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal2edged2.1.png new file mode 100644 index 00000000..12b9e948 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal2edged2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged.0.png new file mode 100644 index 00000000..212bd39e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged.1.png new file mode 100644 index 00000000..5e15e3db Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged2.0.png new file mode 100644 index 00000000..07bf78f7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged2.1.png new file mode 100644 index 00000000..a485a27a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged3.0.png new file mode 100644 index 00000000..fc6f9a47 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged3.1.png new file mode 100644 index 00000000..c198f443 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged4.0.png new file mode 100644 index 00000000..29d8d5e1 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged4.1.png new file mode 100644 index 00000000..d8afbb95 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal3edged4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal4edged.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal4edged.0.png new file mode 100644 index 00000000..fd78ff30 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal4edged.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal4edged.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal4edged.1.png new file mode 100644 index 00000000..ac674f25 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonal4edged.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner.0.png new file mode 100644 index 00000000..3e6ee274 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner.1.png new file mode 100644 index 00000000..e9cd55a4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner2.0.png new file mode 100644 index 00000000..f7b69fc8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner2.1.png new file mode 100644 index 00000000..50b476ce Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner3.0.png new file mode 100644 index 00000000..5bdc7aed Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner3.1.png new file mode 100644 index 00000000..cb42fc7d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner4.0.png new file mode 100644 index 00000000..65fdd66f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner4.1.png new file mode 100644 index 00000000..7a21edbf Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcorner4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner.0.png new file mode 100644 index 00000000..7a0e6d8b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner.1.png new file mode 100644 index 00000000..1c019620 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner2.0.png new file mode 100644 index 00000000..aa9f24f5 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner2.1.png new file mode 100644 index 00000000..9eb2b369 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner3.0.png new file mode 100644 index 00000000..2d73fc7c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner3.1.png new file mode 100644 index 00000000..0a56fe9e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner4.0.png new file mode 100644 index 00000000..4105dc08 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner4.1.png new file mode 100644 index 00000000..b4b99bcd Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedcorner4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection.0.png new file mode 100644 index 00000000..3d3e4155 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection.1.png new file mode 100644 index 00000000..d0417280 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection2.0.png new file mode 100644 index 00000000..0e905af8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection2.1.png new file mode 100644 index 00000000..794ba087 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection3.0.png new file mode 100644 index 00000000..e331708d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection3.1.png new file mode 100644 index 00000000..08057ffb Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection4.0.png new file mode 100644 index 00000000..8e2aab3a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection4.1.png new file mode 100644 index 00000000..be285ce6 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalcurvedtsection4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalhalved.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalhalved.0.png new file mode 100644 index 00000000..55fa79fe Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalhalved.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalhalved.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalhalved.1.png new file mode 100644 index 00000000..00877bba Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalhalved.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalhalved2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalhalved2.0.png new file mode 100644 index 00000000..b99dbc72 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalhalved2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalhalved2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalhalved2.1.png new file mode 100644 index 00000000..adf3c8fa Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalhalved2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalstriped.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalstriped.0.png new file mode 100644 index 00000000..709c836a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalstriped.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalstriped.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalstriped.1.png new file mode 100644 index 00000000..9f6f449d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalstriped.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalstriped2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalstriped2.0.png new file mode 100644 index 00000000..eea49029 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalstriped2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalstriped2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalstriped2.1.png new file mode 100644 index 00000000..50c39a0a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonalstriped2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection.0.png new file mode 100644 index 00000000..6814e20a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection.1.png new file mode 100644 index 00000000..93109597 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection2.0.png new file mode 100644 index 00000000..05f438da Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection2.1.png new file mode 100644 index 00000000..a8f054f9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection3.0.png new file mode 100644 index 00000000..91527f0d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection3.1.png new file mode 100644 index 00000000..5e201cef Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection4.0.png new file mode 100644 index 00000000..f9c89274 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection4.1.png new file mode 100644 index 00000000..793daea0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diagonaltsection4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diamond.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diamond.0.png new file mode 100644 index 00000000..1accf302 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diamond.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/diamond.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/diamond.1.png new file mode 100644 index 00000000..480e2e3b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/diamond.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/edged.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/edged.0.png new file mode 100644 index 00000000..fb90a88f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/edged.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/edged.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/edged.1.png new file mode 100644 index 00000000..c89bc4fa Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/edged.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/edged2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/edged2.0.png new file mode 100644 index 00000000..8f7a5235 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/edged2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/edged2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/edged2.1.png new file mode 100644 index 00000000..e3ff20ce Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/edged2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/edged3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/edged3.0.png new file mode 100644 index 00000000..b4a53f0e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/edged3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/edged3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/edged3.1.png new file mode 100644 index 00000000..e646990b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/edged3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/edged4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/edged4.0.png new file mode 100644 index 00000000..b4570a31 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/edged4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/edged4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/edged4.1.png new file mode 100644 index 00000000..efda6765 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/edged4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/emblem1.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/emblem1.0.png new file mode 100644 index 00000000..69931bf7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/emblem1.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/emblem1.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/emblem1.1.png new file mode 100644 index 00000000..b3ec7ba6 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/emblem1.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/emblem2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/emblem2.0.png new file mode 100644 index 00000000..42788e5a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/emblem2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/emblem2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/emblem2.1.png new file mode 100644 index 00000000..44529656 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/emblem2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/emblem3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/emblem3.0.png new file mode 100644 index 00000000..8bc110e9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/emblem3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/emblem3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/emblem3.1.png new file mode 100644 index 00000000..f920094d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/emblem3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/emblem4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/emblem4.0.png new file mode 100644 index 00000000..ae65715c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/emblem4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/emblem4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/emblem4.1.png new file mode 100644 index 00000000..99a18696 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/emblem4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/emblem5.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/emblem5.0.png new file mode 100644 index 00000000..6a4c65cc Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/emblem5.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/emblem5.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/emblem5.1.png new file mode 100644 index 00000000..1814c2b1 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/emblem5.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/halved.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/halved.0.png new file mode 100644 index 00000000..132621d2 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/halved.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/halved.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/halved.1.png new file mode 100644 index 00000000..9d42b732 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/halved.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/halved2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/halved2.0.png new file mode 100644 index 00000000..8f3dd0c5 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/halved2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/halved2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/halved2.1.png new file mode 100644 index 00000000..5bdea1ab Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/halved2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/lettera.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/lettera.0.png new file mode 100644 index 00000000..94f73f2e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/lettera.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/lettera.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/lettera.1.png new file mode 100644 index 00000000..8a253776 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/lettera.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/lettera2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/lettera2.0.png new file mode 100644 index 00000000..dce882be Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/lettera2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/lettera2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/lettera2.1.png new file mode 100644 index 00000000..b7b215c3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/lettera2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/lettera3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/lettera3.0.png new file mode 100644 index 00000000..b4b08196 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/lettera3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/lettera3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/lettera3.1.png new file mode 100644 index 00000000..6c745724 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/lettera3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/lettera4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/lettera4.0.png new file mode 100644 index 00000000..1e6e79ea Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/lettera4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/lettera4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/lettera4.1.png new file mode 100644 index 00000000..942ae74b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/lettera4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letterb.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letterb.0.png new file mode 100644 index 00000000..c0a2d63b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letterb.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letterb.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letterb.1.png new file mode 100644 index 00000000..b9b82728 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letterb.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letterb2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letterb2.0.png new file mode 100644 index 00000000..6e0092b6 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letterb2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letterb2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letterb2.1.png new file mode 100644 index 00000000..621ff45b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letterb2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letterb3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letterb3.0.png new file mode 100644 index 00000000..8b5c63b8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letterb3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letterb3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letterb3.1.png new file mode 100644 index 00000000..2cd4a6cf Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letterb3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letterb4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letterb4.0.png new file mode 100644 index 00000000..9f6022fb Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letterb4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letterb4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letterb4.1.png new file mode 100644 index 00000000..af5fa765 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letterb4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letterf.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letterf.0.png new file mode 100644 index 00000000..c60bd034 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letterf.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letterf.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letterf.1.png new file mode 100644 index 00000000..5a93c233 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letterf.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letterf2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letterf2.0.png new file mode 100644 index 00000000..aadbb463 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letterf2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letterf2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letterf2.1.png new file mode 100644 index 00000000..3fe1ec99 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letterf2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letterf3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letterf3.0.png new file mode 100644 index 00000000..8e24c05c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letterf3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letterf3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letterf3.1.png new file mode 100644 index 00000000..10e88da5 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letterf3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letterf4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letterf4.0.png new file mode 100644 index 00000000..c18e13f1 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letterf4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letterf4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letterf4.1.png new file mode 100644 index 00000000..ea80e95d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letterf4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letters.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letters.0.png new file mode 100644 index 00000000..93b82478 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letters.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letters.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letters.1.png new file mode 100644 index 00000000..1c49ea48 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letters.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letters2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letters2.0.png new file mode 100644 index 00000000..eea5ecb0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letters2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letters2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letters2.1.png new file mode 100644 index 00000000..2594a087 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letters2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letters3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letters3.0.png new file mode 100644 index 00000000..e984c136 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letters3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letters3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letters3.1.png new file mode 100644 index 00000000..8853cc7c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letters3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letters4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letters4.0.png new file mode 100644 index 00000000..c20bb32b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letters4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/letters4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/letters4.1.png new file mode 100644 index 00000000..661024bc Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/letters4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/lettert.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/lettert.0.png new file mode 100644 index 00000000..cb9f0057 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/lettert.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/lettert.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/lettert.1.png new file mode 100644 index 00000000..666b5b57 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/lettert.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/lettert2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/lettert2.0.png new file mode 100644 index 00000000..8c01c82b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/lettert2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/lettert2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/lettert2.1.png new file mode 100644 index 00000000..66bce588 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/lettert2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/lettert3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/lettert3.0.png new file mode 100644 index 00000000..d87e7288 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/lettert3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/lettert3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/lettert3.1.png new file mode 100644 index 00000000..0b31998f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/lettert3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/lettert4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/lettert4.0.png new file mode 100644 index 00000000..a7888398 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/lettert4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/lettert4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/lettert4.1.png new file mode 100644 index 00000000..ce59d477 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/lettert4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/multiply.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/multiply.0.png new file mode 100644 index 00000000..030d7a75 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/multiply.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/multiply.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/multiply.1.png new file mode 100644 index 00000000..aa5aae4b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/multiply.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/octagon.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/octagon.0.png new file mode 100644 index 00000000..29ff6378 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/octagon.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/octagon.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/octagon.1.png new file mode 100644 index 00000000..e73825bf Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/octagon.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/ornatebarred.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatebarred.0.png new file mode 100644 index 00000000..320f7b11 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatebarred.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/ornatebarred.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatebarred.1.png new file mode 100644 index 00000000..1c7d0121 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatebarred.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/ornatebarred2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatebarred2.0.png new file mode 100644 index 00000000..d9e5b3e9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatebarred2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/ornatebarred2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatebarred2.1.png new file mode 100644 index 00000000..d46418ee Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatebarred2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner.0.png new file mode 100644 index 00000000..f0fdc786 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner.1.png new file mode 100644 index 00000000..6eeb0376 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner2.0.png new file mode 100644 index 00000000..4523f68e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner2.1.png new file mode 100644 index 00000000..60be7553 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner3.0.png new file mode 100644 index 00000000..f8e5bfd7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner3.1.png new file mode 100644 index 00000000..d1015fe9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner4.0.png new file mode 100644 index 00000000..e2628e08 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner4.1.png new file mode 100644 index 00000000..2a80eca9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatestripedcorner4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/ornatethinbarred.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatethinbarred.0.png new file mode 100644 index 00000000..046558d3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatethinbarred.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/ornatethinbarred.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatethinbarred.1.png new file mode 100644 index 00000000..ee73bdd8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatethinbarred.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/ornatethinbarred2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatethinbarred2.0.png new file mode 100644 index 00000000..368e53e2 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatethinbarred2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/ornatethinbarred2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatethinbarred2.1.png new file mode 100644 index 00000000..9a8aebb4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/ornatethinbarred2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedbarred.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedbarred.0.png new file mode 100644 index 00000000..11b40b3b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedbarred.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedbarred.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedbarred.1.png new file mode 100644 index 00000000..f5e784b9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedbarred.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedbarred2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedbarred2.0.png new file mode 100644 index 00000000..d778f645 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedbarred2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedbarred2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedbarred2.1.png new file mode 100644 index 00000000..314bbce9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedbarred2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedsplitbarred.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedsplitbarred.0.png new file mode 100644 index 00000000..69c0f793 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedsplitbarred.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedsplitbarred.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedsplitbarred.1.png new file mode 100644 index 00000000..d912b0c4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedsplitbarred.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedsplitbarred2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedsplitbarred2.0.png new file mode 100644 index 00000000..e5f81433 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedsplitbarred2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedsplitbarred2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedsplitbarred2.1.png new file mode 100644 index 00000000..1e7e9a0e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/overlappedsplitbarred2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/plus.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/plus.0.png new file mode 100644 index 00000000..19b5600f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/plus.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/plus.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/plus.1.png new file mode 100644 index 00000000..95a0b253 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/plus.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/ringed.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/ringed.0.png new file mode 100644 index 00000000..a16898f2 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/ringed.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/ringed.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/ringed.1.png new file mode 100644 index 00000000..70e33099 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/ringed.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend.0.png new file mode 100644 index 00000000..76833a02 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend.1.png new file mode 100644 index 00000000..4dce3344 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend2.0.png new file mode 100644 index 00000000..50a833c3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend2.1.png new file mode 100644 index 00000000..1d5e2622 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend3.0.png new file mode 100644 index 00000000..ad155d51 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend3.1.png new file mode 100644 index 00000000..89895c44 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend4.0.png new file mode 100644 index 00000000..d56decb7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend4.1.png new file mode 100644 index 00000000..2436494e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/roundedbarredend4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/saltire.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/saltire.0.png new file mode 100644 index 00000000..e5cdafb9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/saltire.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/saltire.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/saltire.1.png new file mode 100644 index 00000000..87a21ebb Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/saltire.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarred.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarred.0.png new file mode 100644 index 00000000..006921eb Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarred.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarred.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarred.1.png new file mode 100644 index 00000000..33a5f96b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarred.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarred2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarred2.0.png new file mode 100644 index 00000000..59baf38d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarred2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarred2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarred2.1.png new file mode 100644 index 00000000..d40f4f35 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarred2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner.0.png new file mode 100644 index 00000000..d9d6b59f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner.1.png new file mode 100644 index 00000000..350384c7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner2.0.png new file mode 100644 index 00000000..668ed306 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner2.1.png new file mode 100644 index 00000000..f166fbf7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner3.0.png new file mode 100644 index 00000000..71b2a9a5 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner3.1.png new file mode 100644 index 00000000..3c17df74 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner4.0.png new file mode 100644 index 00000000..d616a232 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner4.1.png new file mode 100644 index 00000000..cbe0f88b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredcorner4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend.0.png new file mode 100644 index 00000000..11b76cf1 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend.1.png new file mode 100644 index 00000000..8f61c8a8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend2.0.png new file mode 100644 index 00000000..d0ee8be6 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend2.1.png new file mode 100644 index 00000000..85d6caa5 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend3.0.png new file mode 100644 index 00000000..bc4ae2b8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend3.1.png new file mode 100644 index 00000000..ad9fe447 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend4.0.png new file mode 100644 index 00000000..9171a943 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend4.1.png new file mode 100644 index 00000000..85ce031d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredend4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection.0.png new file mode 100644 index 00000000..4c20a6c2 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection.1.png new file mode 100644 index 00000000..99294894 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection2.0.png new file mode 100644 index 00000000..0ddcfe8b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection2.1.png new file mode 100644 index 00000000..011a85b0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection3.0.png new file mode 100644 index 00000000..01f6810c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection3.1.png new file mode 100644 index 00000000..1ea21ed4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection4.0.png new file mode 100644 index 00000000..095eaf07 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection4.1.png new file mode 100644 index 00000000..d3926ef6 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitbarredtsection4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitcrossed.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitcrossed.0.png new file mode 100644 index 00000000..69370a29 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitcrossed.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/splitcrossed.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/splitcrossed.1.png new file mode 100644 index 00000000..83c65d1d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/splitcrossed.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/squared.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/squared.0.png new file mode 100644 index 00000000..7f92c956 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/squared.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/squared.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/squared.1.png new file mode 100644 index 00000000..ff9dcc3f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/squared.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/striped.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/striped.0.png new file mode 100644 index 00000000..a86007c2 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/striped.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/striped.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/striped.1.png new file mode 100644 index 00000000..4ebba576 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/striped.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/striped2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/striped2.0.png new file mode 100644 index 00000000..29196653 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/striped2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/striped2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/striped2.1.png new file mode 100644 index 00000000..20c4585c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/striped2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner.0.png new file mode 100644 index 00000000..6b8cac95 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner.1.png new file mode 100644 index 00000000..0b32a63c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner2.0.png new file mode 100644 index 00000000..e563853d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner2.1.png new file mode 100644 index 00000000..f8adc381 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner3.0.png new file mode 100644 index 00000000..1187d21c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner3.1.png new file mode 100644 index 00000000..4bcbd783 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner4.0.png new file mode 100644 index 00000000..2f6afa77 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner4.1.png new file mode 100644 index 00000000..8a7d8279 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/stripedcorner4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarred.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarred.0.png new file mode 100644 index 00000000..cae47b7c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarred.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarred.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarred.1.png new file mode 100644 index 00000000..984b4eb9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarred.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarred2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarred2.0.png new file mode 100644 index 00000000..d54c63fe Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarred2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarred2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarred2.1.png new file mode 100644 index 00000000..461142d5 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarred2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner.0.png new file mode 100644 index 00000000..b110e085 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner.1.png new file mode 100644 index 00000000..706e82a9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner2.0.png new file mode 100644 index 00000000..087f720b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner2.1.png new file mode 100644 index 00000000..6ebec2d3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner3.0.png new file mode 100644 index 00000000..ba9f8515 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner3.1.png new file mode 100644 index 00000000..ac7254b3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner4.0.png new file mode 100644 index 00000000..73ef0e31 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner4.1.png new file mode 100644 index 00000000..d8400e68 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredcorner4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend.0.png new file mode 100644 index 00000000..008860c2 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend.1.png new file mode 100644 index 00000000..02662c71 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend2.0.png new file mode 100644 index 00000000..cd730855 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend2.1.png new file mode 100644 index 00000000..c135fe41 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend3.0.png new file mode 100644 index 00000000..b7fca6e4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend3.1.png new file mode 100644 index 00000000..0ab05955 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend4.0.png new file mode 100644 index 00000000..21c8b8e7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend4.1.png new file mode 100644 index 00000000..3cf79fed Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickbarredend4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner.0.png new file mode 100644 index 00000000..1724e73e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner.1.png new file mode 100644 index 00000000..24db2a27 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner2.0.png new file mode 100644 index 00000000..30630e4b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner2.1.png new file mode 100644 index 00000000..12cc904d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner3.0.png new file mode 100644 index 00000000..d376f806 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner3.1.png new file mode 100644 index 00000000..a2720a60 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner4.0.png new file mode 100644 index 00000000..b65c0ecd Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner4.1.png new file mode 100644 index 00000000..abc070d4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickcorner4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickcrossed.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickcrossed.0.png new file mode 100644 index 00000000..271c715c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickcrossed.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickcrossed.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickcrossed.1.png new file mode 100644 index 00000000..9d94cc75 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickcrossed.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal.0.png new file mode 100644 index 00000000..e1f27b70 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal.1.png new file mode 100644 index 00000000..da70bed6 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged.0.png new file mode 100644 index 00000000..f5d1c4f9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged.1.png new file mode 100644 index 00000000..d8309907 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged2.0.png new file mode 100644 index 00000000..e8f56cab Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged2.1.png new file mode 100644 index 00000000..222f727a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged3.0.png new file mode 100644 index 00000000..bf86c076 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged3.1.png new file mode 100644 index 00000000..c8e23543 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged4.0.png new file mode 100644 index 00000000..f1d1abd8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged4.1.png new file mode 100644 index 00000000..a03a3f99 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal1edged4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal2.0.png new file mode 100644 index 00000000..cdf98abc Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal2.1.png new file mode 100644 index 00000000..991c6cc1 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal2edged.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal2edged.0.png new file mode 100644 index 00000000..f56d079d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal2edged.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal2edged.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal2edged.1.png new file mode 100644 index 00000000..203f1916 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal2edged.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal2edged2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal2edged2.0.png new file mode 100644 index 00000000..26a0fa37 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal2edged2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal2edged2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal2edged2.1.png new file mode 100644 index 00000000..c6013a20 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal2edged2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged.0.png new file mode 100644 index 00000000..9b7eb1d6 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged.1.png new file mode 100644 index 00000000..9406d739 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged2.0.png new file mode 100644 index 00000000..50e46d5c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged2.1.png new file mode 100644 index 00000000..e7e44661 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged3.0.png new file mode 100644 index 00000000..e383bcd0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged3.1.png new file mode 100644 index 00000000..f6937e74 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged4.0.png new file mode 100644 index 00000000..442aa2e1 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged4.1.png new file mode 100644 index 00000000..f08a4002 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal3edged4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal4edged.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal4edged.0.png new file mode 100644 index 00000000..7d22e31f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal4edged.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal4edged.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal4edged.1.png new file mode 100644 index 00000000..1ec41561 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickdiagonal4edged.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend.0.png new file mode 100644 index 00000000..e2cb5d4b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend.1.png new file mode 100644 index 00000000..731d24d4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend2.0.png new file mode 100644 index 00000000..985a25b0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend2.1.png new file mode 100644 index 00000000..2e20e748 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend3.0.png new file mode 100644 index 00000000..ea235c61 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend3.1.png new file mode 100644 index 00000000..3241313f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend4.0.png new file mode 100644 index 00000000..8579245f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend4.1.png new file mode 100644 index 00000000..bbf9aade Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thickroundedbarredend4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thicksaltire.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thicksaltire.0.png new file mode 100644 index 00000000..85e13cd6 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thicksaltire.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thicksaltire.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thicksaltire.1.png new file mode 100644 index 00000000..88e90180 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thicksaltire.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection.0.png new file mode 100644 index 00000000..f2daacff Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection.1.png new file mode 100644 index 00000000..4005b1cb Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection2.0.png new file mode 100644 index 00000000..4261707c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection2.1.png new file mode 100644 index 00000000..5d17c6a6 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection3.0.png new file mode 100644 index 00000000..10c355bf Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection3.1.png new file mode 100644 index 00000000..daf071cb Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection4.0.png new file mode 100644 index 00000000..0d0566c2 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection4.1.png new file mode 100644 index 00000000..625d4ed7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thicktsection4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarred.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarred.0.png new file mode 100644 index 00000000..cc30a1b2 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarred.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarred.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarred.1.png new file mode 100644 index 00000000..cb395f2b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarred.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarred2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarred2.0.png new file mode 100644 index 00000000..54df4bbc Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarred2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarred2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarred2.1.png new file mode 100644 index 00000000..b0bd06b4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarred2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner.0.png new file mode 100644 index 00000000..a316d255 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner.1.png new file mode 100644 index 00000000..162e0a9a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner2.0.png new file mode 100644 index 00000000..41e14dca Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner2.1.png new file mode 100644 index 00000000..823d5d9f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner3.0.png new file mode 100644 index 00000000..0ff1d089 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner3.1.png new file mode 100644 index 00000000..6e90c397 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner4.0.png new file mode 100644 index 00000000..35557105 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner4.1.png new file mode 100644 index 00000000..5c6f689f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredcorner4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend.0.png new file mode 100644 index 00000000..d46417b4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend.1.png new file mode 100644 index 00000000..9f7c6dbf Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend2.0.png new file mode 100644 index 00000000..6b44ec2a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend2.1.png new file mode 100644 index 00000000..d358d38e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend3.0.png new file mode 100644 index 00000000..3b9ab0d6 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend3.1.png new file mode 100644 index 00000000..3e8d5469 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend4.0.png new file mode 100644 index 00000000..ce69bd0d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend4.1.png new file mode 100644 index 00000000..60ba4fcb Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinbarredend4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner.0.png new file mode 100644 index 00000000..86acced7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner.1.png new file mode 100644 index 00000000..1336fdc6 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner2.0.png new file mode 100644 index 00000000..279b6dd4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner2.1.png new file mode 100644 index 00000000..20631dad Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner3.0.png new file mode 100644 index 00000000..4108f662 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner3.1.png new file mode 100644 index 00000000..d72c6688 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner4.0.png new file mode 100644 index 00000000..ec9e8007 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner4.1.png new file mode 100644 index 00000000..ebd1064e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincorner4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincrossed.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincrossed.0.png new file mode 100644 index 00000000..82655b5d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincrossed.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincrossed.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincrossed.1.png new file mode 100644 index 00000000..ef87a6bd Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincrossed.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner.0.png new file mode 100644 index 00000000..3ff91aee Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner.1.png new file mode 100644 index 00000000..f8ad0ced Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner2.0.png new file mode 100644 index 00000000..b9a99eb0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner2.1.png new file mode 100644 index 00000000..a78ed53c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner3.0.png new file mode 100644 index 00000000..bb01bdcb Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner3.1.png new file mode 100644 index 00000000..bad50c72 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner4.0.png new file mode 100644 index 00000000..1b2cb034 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner4.1.png new file mode 100644 index 00000000..91cfc9bb Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedbarredcorner4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner.0.png new file mode 100644 index 00000000..d44d51dc Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner.1.png new file mode 100644 index 00000000..faa1c6c0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner2.0.png new file mode 100644 index 00000000..7c880e4a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner2.1.png new file mode 100644 index 00000000..85bc5450 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner3.0.png new file mode 100644 index 00000000..c41533b8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner3.1.png new file mode 100644 index 00000000..af073b26 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner4.0.png new file mode 100644 index 00000000..ad445a51 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner4.1.png new file mode 100644 index 00000000..eee317b7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcorner4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcrossed.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcrossed.0.png new file mode 100644 index 00000000..0541f7ff Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcrossed.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcrossed.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcrossed.1.png new file mode 100644 index 00000000..d56c17bf Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedcrossed.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection.0.png new file mode 100644 index 00000000..77995e01 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection.1.png new file mode 100644 index 00000000..c50bc004 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection2.0.png new file mode 100644 index 00000000..a62e73af Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection2.1.png new file mode 100644 index 00000000..c4fde466 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection3.0.png new file mode 100644 index 00000000..1711357d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection3.1.png new file mode 100644 index 00000000..5f962eb2 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection4.0.png new file mode 100644 index 00000000..97be8f1c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection4.1.png new file mode 100644 index 00000000..43b882f2 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thincurvedtsection4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thindiagonalstriped.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thindiagonalstriped.0.png new file mode 100644 index 00000000..39532d4b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thindiagonalstriped.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thindiagonalstriped.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thindiagonalstriped.1.png new file mode 100644 index 00000000..35073055 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thindiagonalstriped.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thindiagonalstriped2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thindiagonalstriped2.0.png new file mode 100644 index 00000000..b999e08e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thindiagonalstriped2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thindiagonalstriped2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thindiagonalstriped2.1.png new file mode 100644 index 00000000..6b08973c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thindiagonalstriped2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged.0.png new file mode 100644 index 00000000..65bff738 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged.1.png new file mode 100644 index 00000000..29418097 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged2.0.png new file mode 100644 index 00000000..feb692f0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged2.1.png new file mode 100644 index 00000000..8ad204d9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged3.0.png new file mode 100644 index 00000000..be87bc27 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged3.1.png new file mode 100644 index 00000000..686f41bc Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged4.0.png new file mode 100644 index 00000000..661491e3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged4.1.png new file mode 100644 index 00000000..2f677934 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinedged4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinsaltire.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinsaltire.0.png new file mode 100644 index 00000000..2aa59a8d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinsaltire.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinsaltire.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinsaltire.1.png new file mode 100644 index 00000000..1d2c8d72 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinsaltire.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinstriped.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstriped.0.png new file mode 100644 index 00000000..f90934b8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstriped.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinstriped.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstriped.1.png new file mode 100644 index 00000000..42c9634f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstriped.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinstriped2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstriped2.0.png new file mode 100644 index 00000000..1b4dc71c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstriped2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinstriped2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstriped2.1.png new file mode 100644 index 00000000..8a144a84 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstriped2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner.0.png new file mode 100644 index 00000000..afa912a3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner.1.png new file mode 100644 index 00000000..ed066e76 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner2.0.png new file mode 100644 index 00000000..7a07ccdf Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner2.1.png new file mode 100644 index 00000000..3809fc73 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner3.0.png new file mode 100644 index 00000000..3883b215 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner3.1.png new file mode 100644 index 00000000..fc0eedae Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner4.0.png new file mode 100644 index 00000000..933e2246 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner4.1.png new file mode 100644 index 00000000..8b355c2f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thinstripedcorner4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection.0.png new file mode 100644 index 00000000..93983a93 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection.1.png new file mode 100644 index 00000000..c40b985e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection2.0.png new file mode 100644 index 00000000..d7b5611d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection2.1.png new file mode 100644 index 00000000..035eaec1 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection3.0.png new file mode 100644 index 00000000..6754e59a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection3.1.png new file mode 100644 index 00000000..eccf552f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection4.0.png new file mode 100644 index 00000000..f28cdbe6 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection4.1.png new file mode 100644 index 00000000..57ea8330 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/thintsection4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/tiled.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/tiled.0.png new file mode 100644 index 00000000..a87c6c7f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/tiled.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/tiled.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/tiled.1.png new file mode 100644 index 00000000..4c127059 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/tiled.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/tsection.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/tsection.0.png new file mode 100644 index 00000000..d15bb5d1 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/tsection.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/tsection.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/tsection.1.png new file mode 100644 index 00000000..ddff7b04 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/tsection.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/tsection2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/tsection2.0.png new file mode 100644 index 00000000..d48da1fd Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/tsection2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/tsection2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/tsection2.1.png new file mode 100644 index 00000000..fe9b3712 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/tsection2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/tsection3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/tsection3.0.png new file mode 100644 index 00000000..22acb936 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/tsection3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/tsection3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/tsection3.1.png new file mode 100644 index 00000000..d6ec67fd Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/tsection3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/tsection4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/tsection4.0.png new file mode 100644 index 00000000..e484279a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/tsection4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/tsection4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/tsection4.1.png new file mode 100644 index 00000000..f6070c80 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/tsection4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner.0.png new file mode 100644 index 00000000..28b10397 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner.1.png new file mode 100644 index 00000000..be9b864c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner2.0.png new file mode 100644 index 00000000..699f44d1 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner2.1.png new file mode 100644 index 00000000..9a9b9e0a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner3.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner3.0.png new file mode 100644 index 00000000..f2966f69 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner3.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner3.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner3.1.png new file mode 100644 index 00000000..36180a3d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner3.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner4.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner4.0.png new file mode 100644 index 00000000..fadb4dbd Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner4.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner4.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner4.1.png new file mode 100644 index 00000000..3ff018ab Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/verythincorner4.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarred.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarred.0.png new file mode 100644 index 00000000..5ad8fbab Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarred.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarred.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarred.1.png new file mode 100644 index 00000000..e63e8be1 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarred.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarred2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarred2.0.png new file mode 100644 index 00000000..dff88898 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarred2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarred2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarred2.1.png new file mode 100644 index 00000000..84053801 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarred2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarredalt.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarredalt.0.png new file mode 100644 index 00000000..72f2cd77 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarredalt.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarredalt.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarredalt.1.png new file mode 100644 index 00000000..ddec6193 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarredalt.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarredalt2.0.png b/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarredalt2.0.png new file mode 100644 index 00000000..e2421408 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarredalt2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarredalt2.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarredalt2.1.png new file mode 100644 index 00000000..53ccc657 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/ceramic/wavybarredalt2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/deadflower.png b/src/main/resources/assets/botany/textures/blocks/deadflower.png new file mode 100644 index 00000000..763b0c71 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/deadflower.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/decayingflower.png b/src/main/resources/assets/botany/textures/blocks/decayingflower.png new file mode 100644 index 00000000..16eeb1f2 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/decayingflower.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flower_allium.png b/src/main/resources/assets/botany/textures/blocks/flower_allium.png new file mode 100644 index 00000000..b7b5a45c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flower_allium.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flower_blue_orchid.png b/src/main/resources/assets/botany/textures/blocks/flower_blue_orchid.png new file mode 100644 index 00000000..51d7fd94 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flower_blue_orchid.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flower_dandelion.png b/src/main/resources/assets/botany/textures/blocks/flower_dandelion.png new file mode 100644 index 00000000..873e3f5c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flower_dandelion.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flower_houstonia.png b/src/main/resources/assets/botany/textures/blocks/flower_houstonia.png new file mode 100644 index 00000000..2f9127d9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flower_houstonia.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flower_oxeye_daisy.png b/src/main/resources/assets/botany/textures/blocks/flower_oxeye_daisy.png new file mode 100644 index 00000000..6d489130 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flower_oxeye_daisy.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flower_paeonia.png b/src/main/resources/assets/botany/textures/blocks/flower_paeonia.png new file mode 100644 index 00000000..01a92ee7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flower_paeonia.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flower_pot.png b/src/main/resources/assets/botany/textures/blocks/flower_pot.png new file mode 100644 index 00000000..09c2523c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flower_pot.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flower_rose.png b/src/main/resources/assets/botany/textures/blocks/flower_rose.png new file mode 100644 index 00000000..895d78ff Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flower_rose.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flower_tulip_orange.png b/src/main/resources/assets/botany/textures/blocks/flower_tulip_orange.png new file mode 100644 index 00000000..6715a628 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flower_tulip_orange.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flower_tulip_pink.png b/src/main/resources/assets/botany/textures/blocks/flower_tulip_pink.png new file mode 100644 index 00000000..a757bf53 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flower_tulip_pink.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flower_tulip_red.png b/src/main/resources/assets/botany/textures/blocks/flower_tulip_red.png new file mode 100644 index 00000000..3048b63d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flower_tulip_red.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flower_tulip_white.png b/src/main/resources/assets/botany/textures/blocks/flower_tulip_white.png new file mode 100644 index 00000000..6aa12a90 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flower_tulip_white.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.acid.damp.0.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.acid.damp.0.png new file mode 100644 index 00000000..75d2da76 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.acid.damp.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.acid.damp.1.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.acid.damp.1.png new file mode 100644 index 00000000..fefc25a0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.acid.damp.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.acid.dry.0.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.acid.dry.0.png new file mode 100644 index 00000000..631497c1 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.acid.dry.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.acid.dry.1.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.acid.dry.1.png new file mode 100644 index 00000000..e4c15ec1 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.acid.dry.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.acid.normal.0.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.acid.normal.0.png new file mode 100644 index 00000000..eb78f3ec Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.acid.normal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.acid.normal.1.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.acid.normal.1.png new file mode 100644 index 00000000..95257a08 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.acid.normal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.alkaline.damp.0.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.alkaline.damp.0.png new file mode 100644 index 00000000..81415f87 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.alkaline.damp.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.alkaline.damp.1.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.alkaline.damp.1.png new file mode 100644 index 00000000..b7c4a421 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.alkaline.damp.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.alkaline.dry.0.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.alkaline.dry.0.png new file mode 100644 index 00000000..c97d584f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.alkaline.dry.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.alkaline.dry.1.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.alkaline.dry.1.png new file mode 100644 index 00000000..136c16cc Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.alkaline.dry.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.alkaline.normal.0.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.alkaline.normal.0.png new file mode 100644 index 00000000..3f6bb279 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.alkaline.normal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.alkaline.normal.1.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.alkaline.normal.1.png new file mode 100644 index 00000000..445b812d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.alkaline.normal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.neutral.damp.0.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.neutral.damp.0.png new file mode 100644 index 00000000..06203956 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.neutral.damp.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.neutral.damp.1.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.neutral.damp.1.png new file mode 100644 index 00000000..89fe3164 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.neutral.damp.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.neutral.dry.0.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.neutral.dry.0.png new file mode 100644 index 00000000..b3d79853 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.neutral.dry.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.neutral.dry.1.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.neutral.dry.1.png new file mode 100644 index 00000000..f06d23e3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.neutral.dry.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.neutral.normal.0.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.neutral.normal.0.png new file mode 100644 index 00000000..f5cb7281 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.neutral.normal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.neutral.normal.1.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.neutral.normal.1.png new file mode 100644 index 00000000..0017f357 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.neutral.normal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.normal.damp.0.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.normal.damp.0.png new file mode 100644 index 00000000..06203956 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.normal.damp.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.normal.damp.1.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.normal.damp.1.png new file mode 100644 index 00000000..89fe3164 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.normal.damp.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.normal.dry.0.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.normal.dry.0.png new file mode 100644 index 00000000..b3d79853 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.normal.dry.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.normal.dry.1.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.normal.dry.1.png new file mode 100644 index 00000000..f06d23e3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.normal.dry.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.normal.normal.0.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.normal.normal.0.png new file mode 100644 index 00000000..f5cb7281 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.normal.normal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowerbed.normal.normal.1.png b/src/main/resources/assets/botany/textures/blocks/flowerbed.normal.normal.1.png new file mode 100644 index 00000000..0017f357 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowerbed.normal.normal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/agapanthus-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/agapanthus-bw.pdn new file mode 100644 index 00000000..2903bfce Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/agapanthus-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/agapanthus-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/agapanthus-original.pdn new file mode 100644 index 00000000..b4de9136 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/agapanthus-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/agapanthus-wip.png b/src/main/resources/assets/botany/textures/blocks/flowers/agapanthus-wip.png new file mode 100644 index 00000000..88002f4f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/agapanthus-wip.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/agapanthus.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/agapanthus.0.png new file mode 100644 index 00000000..948fbe17 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/agapanthus.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/agapanthus.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/agapanthus.1.png new file mode 100644 index 00000000..37fcb1fe Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/agapanthus.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/agapanthus.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/agapanthus.2.png new file mode 100644 index 00000000..afabebe5 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/agapanthus.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/agapanthus.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/agapanthus.3.png new file mode 100644 index 00000000..f61d91c9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/agapanthus.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/allium.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/allium.0.png new file mode 100644 index 00000000..6819c869 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/allium.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/allium.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/allium.1.png new file mode 100644 index 00000000..28005c7f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/allium.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/allium.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/allium.2.png new file mode 100644 index 00000000..d0d443d3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/allium.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/allium.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/allium.3.png new file mode 100644 index 00000000..bbf87de9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/allium.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/anemone-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/anemone-bw.pdn new file mode 100644 index 00000000..03389b2d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/anemone-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/anemone-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/anemone-original.pdn new file mode 100644 index 00000000..2e0fb554 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/anemone-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/anemone.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/anemone.0.png new file mode 100644 index 00000000..90b5902b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/anemone.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/anemone.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/anemone.1.png new file mode 100644 index 00000000..d0b9d9b3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/anemone.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/anemone.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/anemone.2.png new file mode 100644 index 00000000..b6b388f7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/anemone.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/anemone.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/anemone.3.png new file mode 100644 index 00000000..2f6105b4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/anemone.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/aquilegia-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/aquilegia-bw.pdn new file mode 100644 index 00000000..a52ce7f3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/aquilegia-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/aquilegia-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/aquilegia-original.pdn new file mode 100644 index 00000000..402b3232 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/aquilegia-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/aquilegia.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/aquilegia.0.png new file mode 100644 index 00000000..dff1d530 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/aquilegia.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/aquilegia.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/aquilegia.1.png new file mode 100644 index 00000000..78eb7ea0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/aquilegia.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/aquilegia.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/aquilegia.2.png new file mode 100644 index 00000000..3a1bb359 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/aquilegia.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/aquilegia.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/aquilegia.3.png new file mode 100644 index 00000000..dd62d5a9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/aquilegia.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/aster-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/aster-bw.pdn new file mode 100644 index 00000000..19ef8a3c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/aster-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/aster-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/aster-original.pdn new file mode 100644 index 00000000..8bfd52c9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/aster-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/aster.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/aster.0.png new file mode 100644 index 00000000..0ed771ba Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/aster.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/aster.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/aster.1.png new file mode 100644 index 00000000..80b1eafb Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/aster.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/aster.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/aster.2.png new file mode 100644 index 00000000..570e8e4c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/aster.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/aster.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/aster.3.png new file mode 100644 index 00000000..17c6fbf2 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/aster.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/auricula-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/auricula-bw.pdn new file mode 100644 index 00000000..3d4e79a6 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/auricula-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/auricula-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/auricula-original.pdn new file mode 100644 index 00000000..0313232d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/auricula-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/auricula.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/auricula.0.png new file mode 100644 index 00000000..0b347a90 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/auricula.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/auricula.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/auricula.1.png new file mode 100644 index 00000000..be680fe0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/auricula.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/auricula.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/auricula.2.png new file mode 100644 index 00000000..a47d56b4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/auricula.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/auricula.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/auricula.3.png new file mode 100644 index 00000000..47d9d637 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/auricula.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/azalea-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/azalea-bw.pdn new file mode 100644 index 00000000..b148bb8d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/azalea-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/azalea-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/azalea-original.pdn new file mode 100644 index 00000000..71587d1b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/azalea-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/azalea.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/azalea.0.png new file mode 100644 index 00000000..b439bc71 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/azalea.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/azalea.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/azalea.1.png new file mode 100644 index 00000000..f1779080 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/azalea.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/azalea.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/azalea.2.png new file mode 100644 index 00000000..a9c6121b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/azalea.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/azalea.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/azalea.3.png new file mode 100644 index 00000000..3546bffd Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/azalea.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/blank.png b/src/main/resources/assets/botany/textures/blocks/flowers/blank.png new file mode 100644 index 00000000..ffbc0bc7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/blank.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/bluet.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/bluet.0.png new file mode 100644 index 00000000..2fe35ded Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/bluet.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/bluet.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/bluet.1.png new file mode 100644 index 00000000..91ac1d0f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/bluet.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/bluet.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/bluet.2.png new file mode 100644 index 00000000..d6bdac9b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/bluet.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/bluet.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/bluet.3.png new file mode 100644 index 00000000..341d5ed8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/bluet.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/buddleia-wip.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/buddleia-wip.pdn new file mode 100644 index 00000000..b440155f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/buddleia-wip.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/carnation-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/carnation-bw.pdn new file mode 100644 index 00000000..19b5ebac Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/carnation-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/carnation-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/carnation-original.pdn new file mode 100644 index 00000000..f099f986 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/carnation-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/carnation.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/carnation.0.png new file mode 100644 index 00000000..de9a147a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/carnation.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/carnation.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/carnation.1.png new file mode 100644 index 00000000..35f966b7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/carnation.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/carnation.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/carnation.2.png new file mode 100644 index 00000000..c1c274be Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/carnation.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/carnation.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/carnation.3.png new file mode 100644 index 00000000..c92729e5 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/carnation.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/coneflower-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/coneflower-bw.pdn new file mode 100644 index 00000000..fa18f7bc Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/coneflower-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/coneflower-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/coneflower-original.pdn new file mode 100644 index 00000000..d1a3822b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/coneflower-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/coneflower.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/coneflower.0.png new file mode 100644 index 00000000..3a3e7a96 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/coneflower.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/coneflower.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/coneflower.1.png new file mode 100644 index 00000000..0721c3ec Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/coneflower.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/coneflower.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/coneflower.2.png new file mode 100644 index 00000000..66945547 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/coneflower.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/coneflower.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/coneflower.3.png new file mode 100644 index 00000000..c92729e5 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/coneflower.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/coneflower.bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/coneflower.bw.pdn new file mode 100644 index 00000000..e5f9cdce Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/coneflower.bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/cornflower.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/cornflower.0.png new file mode 100644 index 00000000..00bd7e5f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/cornflower.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/cornflower.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/cornflower.1.png new file mode 100644 index 00000000..d573af78 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/cornflower.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/cornflower.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/cornflower.2.png new file mode 100644 index 00000000..b5138fb1 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/cornflower.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/cornflower.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/cornflower.3.png new file mode 100644 index 00000000..899501f0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/cornflower.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/cornflower.png b/src/main/resources/assets/botany/textures/blocks/flowers/cornflower.png new file mode 100644 index 00000000..dffe7a98 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/cornflower.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/daffodil.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/daffodil.0.png new file mode 100644 index 00000000..07223d27 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/daffodil.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/daffodil.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/daffodil.1.png new file mode 100644 index 00000000..b1152ad9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/daffodil.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/daffodil.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/daffodil.2.png new file mode 100644 index 00000000..657a9d7d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/daffodil.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/daffodil.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/daffodil.3.png new file mode 100644 index 00000000..b2efd727 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/daffodil.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/dahlia.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/dahlia.0.png new file mode 100644 index 00000000..047799ab Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/dahlia.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/dahlia.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/dahlia.1.png new file mode 100644 index 00000000..f0a6cc97 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/dahlia.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/dahlia.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/dahlia.2.png new file mode 100644 index 00000000..cf234d2e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/dahlia.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/dahlia.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/dahlia.3.png new file mode 100644 index 00000000..b2efd727 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/dahlia.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/daisy.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/daisy.0.png new file mode 100644 index 00000000..b8f52f6b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/daisy.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/daisy.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/daisy.1.png new file mode 100644 index 00000000..67b26feb Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/daisy.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/daisy.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/daisy.2.png new file mode 100644 index 00000000..bb38e72b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/daisy.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/daisy.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/daisy.3.png new file mode 100644 index 00000000..08bd9bfa Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/daisy.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/dandelion.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/dandelion.0.png new file mode 100644 index 00000000..b8b3c088 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/dandelion.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/dandelion.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/dandelion.1.png new file mode 100644 index 00000000..9205c440 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/dandelion.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/dandelion.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/dandelion.2.png new file mode 100644 index 00000000..3c39ff4d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/dandelion.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/dandelion.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/dandelion.3.png new file mode 100644 index 00000000..0d537b85 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/dandelion.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/dianthus-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/dianthus-bw.pdn new file mode 100644 index 00000000..963c583e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/dianthus-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/dianthus-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/dianthus-original.pdn new file mode 100644 index 00000000..98e502ec Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/dianthus-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/dianthus-wip.png b/src/main/resources/assets/botany/textures/blocks/flowers/dianthus-wip.png new file mode 100644 index 00000000..17fd9fb7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/dianthus-wip.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/dianthus.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/dianthus.0.png new file mode 100644 index 00000000..2391cddc Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/dianthus.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/dianthus.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/dianthus.1.png new file mode 100644 index 00000000..cb25dba2 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/dianthus.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/dianthus.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/dianthus.2.png new file mode 100644 index 00000000..17bae031 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/dianthus.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/dianthus.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/dianthus.3.png new file mode 100644 index 00000000..470cf011 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/dianthus.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/althea-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/double/althea-bw.pdn new file mode 100644 index 00000000..cdf47484 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/althea-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/althea-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/double/althea-original.pdn new file mode 100644 index 00000000..cb581d5f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/althea-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/althea.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/althea.0.png new file mode 100644 index 00000000..e3e2a254 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/althea.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/althea.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/althea.1.png new file mode 100644 index 00000000..9866ce1f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/althea.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/althea.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/althea.2.png new file mode 100644 index 00000000..a4d12476 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/althea.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/althea.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/althea.3.png new file mode 100644 index 00000000..fd6881c5 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/althea.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/althea2.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/althea2.0.png new file mode 100644 index 00000000..5649dfef Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/althea2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/althea2.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/althea2.1.png new file mode 100644 index 00000000..5c3653c7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/althea2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/althea2.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/althea2.2.png new file mode 100644 index 00000000..b491cfa4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/althea2.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/althea2.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/althea2.3.png new file mode 100644 index 00000000..314d5999 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/althea2.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia-bw.pdn new file mode 100644 index 00000000..1a41ac0c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia-original.pdn new file mode 100644 index 00000000..35b51188 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia.0.png new file mode 100644 index 00000000..89444626 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia.1.png new file mode 100644 index 00000000..f27f9fd4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia.2.png new file mode 100644 index 00000000..cc8440a3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia.3.png new file mode 100644 index 00000000..f09ce4dc Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia2.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia2.0.png new file mode 100644 index 00000000..345d5d2e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia2.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia2.1.png new file mode 100644 index 00000000..c720e2df Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia2.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia2.2.png new file mode 100644 index 00000000..6310c078 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia2.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia2.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia2.3.png new file mode 100644 index 00000000..f9f45b16 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/camellia2.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium-dw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium-dw.pdn new file mode 100644 index 00000000..d3a5762d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium-dw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium-original.pdn new file mode 100644 index 00000000..3e904994 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium.0.png new file mode 100644 index 00000000..0c4d7bba Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium.1.png new file mode 100644 index 00000000..4eebda08 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium.2.png new file mode 100644 index 00000000..8b70364f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium.3.png new file mode 100644 index 00000000..b8501d93 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium2.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium2.0.png new file mode 100644 index 00000000..1908b1fb Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium2.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium2.1.png new file mode 100644 index 00000000..e1ee3efd Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium2.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium2.2.png new file mode 100644 index 00000000..bb49dfe6 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium2.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium2.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium2.3.png new file mode 100644 index 00000000..750a73b5 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/delphinium2.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/double_plant_paeonia_bottom.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/double_plant_paeonia_bottom.png new file mode 100644 index 00000000..21285f5e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/double_plant_paeonia_bottom.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/double_plant_paeonia_top.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/double_plant_paeonia_top.png new file mode 100644 index 00000000..bc682417 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/double_plant_paeonia_top.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/double_plant_rose_bottom.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/double_plant_rose_bottom.png new file mode 100644 index 00000000..4d59f443 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/double_plant_rose_bottom.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/double_plant_rose_top.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/double_plant_rose_top.png new file mode 100644 index 00000000..028aa80a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/double_plant_rose_top.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/double_plant_syringa_bottom.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/double_plant_syringa_bottom.png new file mode 100644 index 00000000..5b880b5f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/double_plant_syringa_bottom.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/double_plant_syringa_top.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/double_plant_syringa_top.png new file mode 100644 index 00000000..b00751fc Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/double_plant_syringa_top.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove-original.pdn new file mode 100644 index 00000000..299c8764 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove.0.png new file mode 100644 index 00000000..47da4c97 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove.1.png new file mode 100644 index 00000000..8e8254d0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove.2.png new file mode 100644 index 00000000..ad47cd71 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove.3.png new file mode 100644 index 00000000..eecd322c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove.pdn new file mode 100644 index 00000000..0fbd7b43 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove2.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove2.0.png new file mode 100644 index 00000000..30c0eeb5 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove2.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove2.1.png new file mode 100644 index 00000000..8e583aee Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove2.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove2.2.png new file mode 100644 index 00000000..97d550bf Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove2.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove2.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove2.3.png new file mode 100644 index 00000000..cf2d17ce Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/foxglove2.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod-bw.pdn new file mode 100644 index 00000000..0512f2d9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod-original.pdn new file mode 100644 index 00000000..1abb75a4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod.0.png new file mode 100644 index 00000000..a1b76a6a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod.1.png new file mode 100644 index 00000000..b5cd1f78 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod.2.png new file mode 100644 index 00000000..4206f906 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod.3.png new file mode 100644 index 00000000..96c85a23 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod2.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod2.0.png new file mode 100644 index 00000000..0cf509dd Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod2.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod2.1.png new file mode 100644 index 00000000..0f752e1a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod2.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod2.2.png new file mode 100644 index 00000000..3230ac1f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod2.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod2.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod2.3.png new file mode 100644 index 00000000..4c455674 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/goldenrod2.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock-bw.pdn new file mode 100644 index 00000000..e722c02e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock-original.pdn new file mode 100644 index 00000000..128cdd24 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock.0.png new file mode 100644 index 00000000..47e88695 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock.1.png new file mode 100644 index 00000000..48e29a0d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock.2.png new file mode 100644 index 00000000..f4cd7f58 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock.3.png new file mode 100644 index 00000000..f4cd7f58 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock2.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock2.0.png new file mode 100644 index 00000000..0b088399 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock2.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock2.1.png new file mode 100644 index 00000000..c4365e6c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock2.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock2.2.png new file mode 100644 index 00000000..330d8590 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock2.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock2.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock2.3.png new file mode 100644 index 00000000..ebc25d75 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/hollyhock2.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea-original.pdn new file mode 100644 index 00000000..12e0524d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea.0.png new file mode 100644 index 00000000..6d8350df Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea.1.png new file mode 100644 index 00000000..e9fea30e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea.2.png new file mode 100644 index 00000000..fe3cde32 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea.3.png new file mode 100644 index 00000000..76384d2f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea.pdn new file mode 100644 index 00000000..1074be8e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea2.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea2.0.png new file mode 100644 index 00000000..87adb00b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea2.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea2.1.png new file mode 100644 index 00000000..0d822e9f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea2.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea2.2.png new file mode 100644 index 00000000..88be2113 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea2.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea2.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea2.3.png new file mode 100644 index 00000000..e3a12557 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/hydrangea2.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender-bw.pdn new file mode 100644 index 00000000..0f9bd615 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender-original.pdn new file mode 100644 index 00000000..b2d9dbca Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender.0.png new file mode 100644 index 00000000..aaed5a1b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender.1.png new file mode 100644 index 00000000..dd999252 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender.2.png new file mode 100644 index 00000000..6b2df588 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender.3.png new file mode 100644 index 00000000..2a78a608 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender2.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender2.0.png new file mode 100644 index 00000000..ca19bfb5 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender2.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender2.1.png new file mode 100644 index 00000000..0c11d9c0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender2.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender2.2.png new file mode 100644 index 00000000..b5a4d9e3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender2.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender2.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender2.3.png new file mode 100644 index 00000000..8d90bff0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/lavender2.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac.0.png new file mode 100644 index 00000000..42e727fa Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac.1.png new file mode 100644 index 00000000..da5324e5 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac.2.png new file mode 100644 index 00000000..5fe7db95 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac.3.png new file mode 100644 index 00000000..3ca419c0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac.pdn new file mode 100644 index 00000000..60e93429 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac.png new file mode 100644 index 00000000..3808e65f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac2.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac2.0.png new file mode 100644 index 00000000..22d8dfd7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac2.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac2.1.png new file mode 100644 index 00000000..56787fd2 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac2.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac2.2.png new file mode 100644 index 00000000..2fa6f403 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac2.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac2.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac2.3.png new file mode 100644 index 00000000..c28641c4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/lilac2.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon-bw.pdn new file mode 100644 index 00000000..fa4e216c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon-original.pdn new file mode 100644 index 00000000..dd31107b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon.0.png new file mode 100644 index 00000000..12889e6f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon.1.png new file mode 100644 index 00000000..ffec170b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon.2.png new file mode 100644 index 00000000..adb5a33d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon.3.png new file mode 100644 index 00000000..fec04a69 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon2.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon2.0.png new file mode 100644 index 00000000..ee325dee Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon2.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon2.1.png new file mode 100644 index 00000000..76182f42 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon2.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon2.2.png new file mode 100644 index 00000000..e0a5ba6e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon2.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon2.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon2.3.png new file mode 100644 index 00000000..0d734137 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/penstemon2.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/peony.0.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony.0.0.png new file mode 100644 index 00000000..8b68a160 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony.0.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/peony.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony.0.png new file mode 100644 index 00000000..8b68a160 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/peony.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony.1.png new file mode 100644 index 00000000..4fc91f13 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/peony.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony.2.png new file mode 100644 index 00000000..71779b3a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/peony.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony.3.png new file mode 100644 index 00000000..1d1e1499 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/peony.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony.pdn new file mode 100644 index 00000000..8b6957b7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/peony.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony.png new file mode 100644 index 00000000..35c6ee59 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/peony2.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony2.0.png new file mode 100644 index 00000000..8d1c5c9b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/peony2.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony2.1.png new file mode 100644 index 00000000..01521946 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/peony2.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony2.2.png new file mode 100644 index 00000000..4da3a933 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony2.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/peony2.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony2.3.png new file mode 100644 index 00000000..f932f898 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/peony2.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/rose.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/rose.0.png new file mode 100644 index 00000000..811ed9cf Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/rose.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/rose.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/rose.1.png new file mode 100644 index 00000000..ec6e9848 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/rose.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/rose.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/rose.2.png new file mode 100644 index 00000000..0391072f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/rose.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/rose.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/rose.3.png new file mode 100644 index 00000000..3f9460c7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/rose.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/rose.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/double/rose.pdn new file mode 100644 index 00000000..c34b7f1f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/rose.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/rose.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/rose.png new file mode 100644 index 00000000..1b2ace67 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/rose.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/rose2.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/rose2.0.png new file mode 100644 index 00000000..fdddccc5 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/rose2.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/rose2.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/rose2.1.png new file mode 100644 index 00000000..2fa6f403 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/rose2.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/rose2.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/rose2.2.png new file mode 100644 index 00000000..c28641c4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/rose2.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/double/rose2.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/double/rose2.3.png new file mode 100644 index 00000000..76384d2f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/double/rose2.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/edelweiss-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/edelweiss-bw.pdn new file mode 100644 index 00000000..35da0e7d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/edelweiss-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/edelweiss-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/edelweiss-original.pdn new file mode 100644 index 00000000..ac91a623 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/edelweiss-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/edelweiss.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/edelweiss.0.png new file mode 100644 index 00000000..a26d35f8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/edelweiss.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/edelweiss.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/edelweiss.1.png new file mode 100644 index 00000000..b97a3ecd Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/edelweiss.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/edelweiss.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/edelweiss.2.png new file mode 100644 index 00000000..4471355a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/edelweiss.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/edelweiss.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/edelweiss.3.png new file mode 100644 index 00000000..194eb403 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/edelweiss.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/flower.dandelion.png b/src/main/resources/assets/botany/textures/blocks/flowers/flower.dandelion.png new file mode 100644 index 00000000..f84c786b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/flower.dandelion.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/flower_allium.png b/src/main/resources/assets/botany/textures/blocks/flowers/flower_allium.png new file mode 100644 index 00000000..b7b5a45c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/flower_allium.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/flower_blue_orchid.png b/src/main/resources/assets/botany/textures/blocks/flowers/flower_blue_orchid.png new file mode 100644 index 00000000..51d7fd94 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/flower_blue_orchid.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/flower_dandelion.png b/src/main/resources/assets/botany/textures/blocks/flowers/flower_dandelion.png new file mode 100644 index 00000000..873e3f5c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/flower_dandelion.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/flower_houstonia.png b/src/main/resources/assets/botany/textures/blocks/flowers/flower_houstonia.png new file mode 100644 index 00000000..2f9127d9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/flower_houstonia.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/flower_oxeye_daisy.png b/src/main/resources/assets/botany/textures/blocks/flowers/flower_oxeye_daisy.png new file mode 100644 index 00000000..6d489130 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/flower_oxeye_daisy.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/flower_paeonia.png b/src/main/resources/assets/botany/textures/blocks/flowers/flower_paeonia.png new file mode 100644 index 00000000..01a92ee7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/flower_paeonia.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/flower_rose.png b/src/main/resources/assets/botany/textures/blocks/flowers/flower_rose.png new file mode 100644 index 00000000..895d78ff Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/flower_rose.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/flower_tulip_white.png b/src/main/resources/assets/botany/textures/blocks/flowers/flower_tulip_white.png new file mode 100644 index 00000000..6aa12a90 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/flower_tulip_white.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/forget-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/forget-bw.pdn new file mode 100644 index 00000000..fd5c7bfa Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/forget-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/forget-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/forget-original.pdn new file mode 100644 index 00000000..c0d6b6a0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/forget-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/forget.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/forget.0.png new file mode 100644 index 00000000..4bdb3312 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/forget.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/forget.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/forget.1.png new file mode 100644 index 00000000..c0157a7b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/forget.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/forget.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/forget.2.png new file mode 100644 index 00000000..a7dd1721 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/forget.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/forget.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/forget.3.png new file mode 100644 index 00000000..086100c8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/forget.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/fuchsia-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/fuchsia-bw.pdn new file mode 100644 index 00000000..fc2c6029 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/fuchsia-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/fuchsia-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/fuchsia-original.pdn new file mode 100644 index 00000000..f4df0ed1 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/fuchsia-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/fuchsia-wip.png b/src/main/resources/assets/botany/textures/blocks/flowers/fuchsia-wip.png new file mode 100644 index 00000000..e49984dd Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/fuchsia-wip.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/fuchsia.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/fuchsia.0.png new file mode 100644 index 00000000..45488cec Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/fuchsia.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/fuchsia.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/fuchsia.1.png new file mode 100644 index 00000000..6f6f8274 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/fuchsia.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/fuchsia.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/fuchsia.2.png new file mode 100644 index 00000000..88df2d9a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/fuchsia.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/fuchsia.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/fuchsia.3.png new file mode 100644 index 00000000..d7ac61ed Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/fuchsia.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/fuschia-wip.png b/src/main/resources/assets/botany/textures/blocks/flowers/fuschia-wip.png new file mode 100644 index 00000000..e49984dd Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/fuschia-wip.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/gaillardia-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/gaillardia-bw.pdn new file mode 100644 index 00000000..0c87bf0e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/gaillardia-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/gaillardia-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/gaillardia-original.pdn new file mode 100644 index 00000000..c0ac4df0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/gaillardia-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/gaillardia.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/gaillardia.0.png new file mode 100644 index 00000000..87eb5a4f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/gaillardia.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/gaillardia.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/gaillardia.1.png new file mode 100644 index 00000000..d1b4c5dc Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/gaillardia.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/gaillardia.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/gaillardia.2.png new file mode 100644 index 00000000..df054678 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/gaillardia.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/gaillardia.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/gaillardia.3.png new file mode 100644 index 00000000..66841e8f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/gaillardia.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/geranium-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/geranium-bw.pdn new file mode 100644 index 00000000..5589b9f2 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/geranium-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/geranium-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/geranium-original.pdn new file mode 100644 index 00000000..51608501 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/geranium-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/geranium-original.png b/src/main/resources/assets/botany/textures/blocks/flowers/geranium-original.png new file mode 100644 index 00000000..54ed5761 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/geranium-original.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/geranium.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/geranium.0.png new file mode 100644 index 00000000..54710264 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/geranium.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/geranium.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/geranium.1.png new file mode 100644 index 00000000..54141a47 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/geranium.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/geranium.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/geranium.2.png new file mode 100644 index 00000000..0bdd104b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/geranium.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/geranium.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/geranium.3.png new file mode 100644 index 00000000..d85fcbd9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/geranium.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/helenium-wip.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/helenium-wip.pdn new file mode 100644 index 00000000..9351647b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/helenium-wip.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/iris.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/iris.0.png new file mode 100644 index 00000000..312765cd Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/iris.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/iris.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/iris.1.png new file mode 100644 index 00000000..95a3e1b0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/iris.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/iris.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/iris.2.png new file mode 100644 index 00000000..c18299bf Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/iris.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/iris.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/iris.3.png new file mode 100644 index 00000000..ef2e39d9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/iris.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/iris.png b/src/main/resources/assets/botany/textures/blocks/flowers/iris.png new file mode 100644 index 00000000..0c6b9443 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/iris.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/lavender-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/lavender-bw.pdn new file mode 100644 index 00000000..93a85ac4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/lavender-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/lavender-new-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/lavender-new-original.pdn new file mode 100644 index 00000000..0b4efdb7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/lavender-new-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/lavender-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/lavender-original.pdn new file mode 100644 index 00000000..e673b0b4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/lavender-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/lavender.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/lavender.0.png new file mode 100644 index 00000000..1cef04e9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/lavender.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/lavender.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/lavender.1.png new file mode 100644 index 00000000..f6701bdf Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/lavender.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/lavender.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/lavender.2.png new file mode 100644 index 00000000..3ad00425 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/lavender.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/lavender.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/lavender.3.png new file mode 100644 index 00000000..73418f07 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/lavender.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/lily-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/lily-bw.pdn new file mode 100644 index 00000000..5f76d242 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/lily-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/lily-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/lily-original.pdn new file mode 100644 index 00000000..c2c4f364 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/lily-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/lily-wip.png b/src/main/resources/assets/botany/textures/blocks/flowers/lily-wip.png new file mode 100644 index 00000000..28d97aba Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/lily-wip.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/lily.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/lily.0.png new file mode 100644 index 00000000..ad6b0d95 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/lily.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/lily.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/lily.1.png new file mode 100644 index 00000000..0e3805e8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/lily.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/lily.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/lily.2.png new file mode 100644 index 00000000..396079b6 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/lily.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/lily.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/lily.3.png new file mode 100644 index 00000000..2f6105b4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/lily.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/marigold-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/marigold-bw.pdn new file mode 100644 index 00000000..0c72d45c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/marigold-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/marigold-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/marigold-original.pdn new file mode 100644 index 00000000..a26c7551 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/marigold-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/marigold.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/marigold.0.png new file mode 100644 index 00000000..319fab23 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/marigold.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/marigold.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/marigold.1.png new file mode 100644 index 00000000..f23c03d8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/marigold.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/marigold.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/marigold.2.png new file mode 100644 index 00000000..57fdfa2d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/marigold.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/marigold.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/marigold.3.png new file mode 100644 index 00000000..7b24ac13 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/marigold.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/mum-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/mum-bw.pdn new file mode 100644 index 00000000..66400389 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/mum-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/mums-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/mums-original.pdn new file mode 100644 index 00000000..e43c4843 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/mums-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/mums.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/mums.0.png new file mode 100644 index 00000000..354f5094 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/mums.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/mums.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/mums.1.png new file mode 100644 index 00000000..6ea6f11f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/mums.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/mums.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/mums.2.png new file mode 100644 index 00000000..827a615c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/mums.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/mums.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/mums.3.png new file mode 100644 index 00000000..009eb252 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/mums.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/orchid.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/orchid.0.png new file mode 100644 index 00000000..de49947d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/orchid.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/orchid.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/orchid.1.png new file mode 100644 index 00000000..09e9db65 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/orchid.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/orchid.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/orchid.2.png new file mode 100644 index 00000000..4c78ae9c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/orchid.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/orchid.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/orchid.3.png new file mode 100644 index 00000000..297d3821 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/orchid.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/pansy.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/pansy.0.png new file mode 100644 index 00000000..8b8e20ef Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/pansy.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/pansy.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/pansy.1.png new file mode 100644 index 00000000..8dd08e00 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/pansy.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/pansy.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/pansy.2.png new file mode 100644 index 00000000..baf88973 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/pansy.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/pansy.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/pansy.3.png new file mode 100644 index 00000000..d649ea80 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/pansy.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/pansy.png b/src/main/resources/assets/botany/textures/blocks/flowers/pansy.png new file mode 100644 index 00000000..6505db56 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/pansy.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/petunia-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/petunia-bw.pdn new file mode 100644 index 00000000..940d4ccb Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/petunia-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/petunia-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/petunia-original.pdn new file mode 100644 index 00000000..dd3ac3c7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/petunia-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/petunia-wip.png b/src/main/resources/assets/botany/textures/blocks/flowers/petunia-wip.png new file mode 100644 index 00000000..e4d824d7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/petunia-wip.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/petunia.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/petunia.0.png new file mode 100644 index 00000000..4a67af21 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/petunia.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/petunia.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/petunia.1.png new file mode 100644 index 00000000..b46a3c07 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/petunia.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/petunia.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/petunia.2.png new file mode 100644 index 00000000..6c80064a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/petunia.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/petunia.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/petunia.3.png new file mode 100644 index 00000000..49940958 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/petunia.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/phlox-wip.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/phlox-wip.pdn new file mode 100644 index 00000000..4fe50985 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/phlox-wip.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/pollen.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/pollen.0.png new file mode 100644 index 00000000..4ab2fc4f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/pollen.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/pollen.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/pollen.1.png new file mode 100644 index 00000000..706a6b74 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/pollen.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/pollen.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/pollen.2.png new file mode 100644 index 00000000..2f3c5397 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/pollen.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/poppy.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/poppy.0.png new file mode 100644 index 00000000..eb761476 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/poppy.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/poppy.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/poppy.1.png new file mode 100644 index 00000000..491dbbc7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/poppy.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/poppy.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/poppy.2.png new file mode 100644 index 00000000..80e5a0c4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/poppy.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/poppy.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/poppy.3.png new file mode 100644 index 00000000..4fa80297 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/poppy.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/primrose-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/primrose-bw.pdn new file mode 100644 index 00000000..5318d3af Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/primrose-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/primrose-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/primrose-original.pdn new file mode 100644 index 00000000..25f0f390 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/primrose-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/primrose.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/primrose.0.png new file mode 100644 index 00000000..1dbbe6c8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/primrose.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/primrose.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/primrose.1.png new file mode 100644 index 00000000..43bbc1bd Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/primrose.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/primrose.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/primrose.2.png new file mode 100644 index 00000000..f29c9222 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/primrose.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/primrose.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/primrose.3.png new file mode 100644 index 00000000..b3ac34c4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/primrose.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/scabious-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/scabious-bw.pdn new file mode 100644 index 00000000..68a24e62 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/scabious-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/scabious-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/scabious-original.pdn new file mode 100644 index 00000000..a2ead5fc Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/scabious-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/scabious.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/scabious.0.png new file mode 100644 index 00000000..fef514ba Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/scabious.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/scabious.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/scabious.1.png new file mode 100644 index 00000000..05deb13d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/scabious.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/scabious.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/scabious.2.png new file mode 100644 index 00000000..7cc11d47 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/scabious.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/scabious.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/scabious.3.png new file mode 100644 index 00000000..2f6105b4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/scabious.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/seed.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/seed.0.png new file mode 100644 index 00000000..c4348372 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/seed.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/seed.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/seed.1.png new file mode 100644 index 00000000..bc5fb508 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/seed.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/seed.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/seed.2.png new file mode 100644 index 00000000..acbc60db Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/seed.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/tulip.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/tulip.0.png new file mode 100644 index 00000000..72f15b7f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/tulip.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/tulip.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/tulip.1.png new file mode 100644 index 00000000..c9dd64ea Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/tulip.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/tulip.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/tulip.2.png new file mode 100644 index 00000000..cfaff4ff Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/tulip.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/tulip.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/tulip.3.png new file mode 100644 index 00000000..bbf87de9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/tulip.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/viola.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/viola.0.png new file mode 100644 index 00000000..ebb5566a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/viola.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/viola.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/viola.1.png new file mode 100644 index 00000000..a476e0f0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/viola.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/viola.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/viola.2.png new file mode 100644 index 00000000..7e4e73b9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/viola.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/viola.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/viola.3.png new file mode 100644 index 00000000..b2efd727 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/viola.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/violet.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/violet.0.png new file mode 100644 index 00000000..2b83a79c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/violet.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/violet.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/violet.1.png new file mode 100644 index 00000000..1f8b9519 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/violet.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/violet.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/violet.2.png new file mode 100644 index 00000000..dea5dbf4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/violet.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/yarrow-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/yarrow-bw.pdn new file mode 100644 index 00000000..6cf9dfac Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/yarrow-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/yarrow-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/yarrow-original.pdn new file mode 100644 index 00000000..a7cd875a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/yarrow-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/yarrow-wip.png b/src/main/resources/assets/botany/textures/blocks/flowers/yarrow-wip.png new file mode 100644 index 00000000..ff3efc37 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/yarrow-wip.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/yarrow.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/yarrow.0.png new file mode 100644 index 00000000..157be267 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/yarrow.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/yarrow.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/yarrow.1.png new file mode 100644 index 00000000..4a4232ed Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/yarrow.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/yarrow.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/yarrow.2.png new file mode 100644 index 00000000..2ec06917 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/yarrow.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/yarrow.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/yarrow.3.png new file mode 100644 index 00000000..e291b9a0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/yarrow.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/zinnia-bw.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/zinnia-bw.pdn new file mode 100644 index 00000000..f2a20b9a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/zinnia-bw.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/zinnia-original.pdn b/src/main/resources/assets/botany/textures/blocks/flowers/zinnia-original.pdn new file mode 100644 index 00000000..0ea5c833 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/zinnia-original.pdn differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/zinnia.0.png b/src/main/resources/assets/botany/textures/blocks/flowers/zinnia.0.png new file mode 100644 index 00000000..4b80013b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/zinnia.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/zinnia.1.png b/src/main/resources/assets/botany/textures/blocks/flowers/zinnia.1.png new file mode 100644 index 00000000..476a9b99 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/zinnia.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/zinnia.2.png b/src/main/resources/assets/botany/textures/blocks/flowers/zinnia.2.png new file mode 100644 index 00000000..fee75a60 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/zinnia.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/flowers/zinnia.3.png b/src/main/resources/assets/botany/textures/blocks/flowers/zinnia.3.png new file mode 100644 index 00000000..7b24ac13 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/flowers/zinnia.3.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.acid.damp.0.png b/src/main/resources/assets/botany/textures/blocks/loam.acid.damp.0.png new file mode 100644 index 00000000..19063e6e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.acid.damp.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.acid.damp.1.png b/src/main/resources/assets/botany/textures/blocks/loam.acid.damp.1.png new file mode 100644 index 00000000..492e6e61 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.acid.damp.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.acid.dry.0.png b/src/main/resources/assets/botany/textures/blocks/loam.acid.dry.0.png new file mode 100644 index 00000000..94284cef Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.acid.dry.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.acid.dry.1.png b/src/main/resources/assets/botany/textures/blocks/loam.acid.dry.1.png new file mode 100644 index 00000000..616a1571 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.acid.dry.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.acid.normal.0.png b/src/main/resources/assets/botany/textures/blocks/loam.acid.normal.0.png new file mode 100644 index 00000000..af1c5a15 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.acid.normal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.acid.normal.1.png b/src/main/resources/assets/botany/textures/blocks/loam.acid.normal.1.png new file mode 100644 index 00000000..3af8e209 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.acid.normal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.alkaline.damp.0.png b/src/main/resources/assets/botany/textures/blocks/loam.alkaline.damp.0.png new file mode 100644 index 00000000..eaced7f7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.alkaline.damp.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.alkaline.damp.1.png b/src/main/resources/assets/botany/textures/blocks/loam.alkaline.damp.1.png new file mode 100644 index 00000000..985311e6 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.alkaline.damp.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.alkaline.dry.0.png b/src/main/resources/assets/botany/textures/blocks/loam.alkaline.dry.0.png new file mode 100644 index 00000000..187eba19 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.alkaline.dry.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.alkaline.dry.1.png b/src/main/resources/assets/botany/textures/blocks/loam.alkaline.dry.1.png new file mode 100644 index 00000000..d5e1197f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.alkaline.dry.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.alkaline.normal.0.png b/src/main/resources/assets/botany/textures/blocks/loam.alkaline.normal.0.png new file mode 100644 index 00000000..3eb0acaa Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.alkaline.normal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.alkaline.normal.1.png b/src/main/resources/assets/botany/textures/blocks/loam.alkaline.normal.1.png new file mode 100644 index 00000000..a0b760fc Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.alkaline.normal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.neutral.damp.0.png b/src/main/resources/assets/botany/textures/blocks/loam.neutral.damp.0.png new file mode 100644 index 00000000..7fcdb96d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.neutral.damp.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.neutral.damp.1.png b/src/main/resources/assets/botany/textures/blocks/loam.neutral.damp.1.png new file mode 100644 index 00000000..5810018e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.neutral.damp.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.neutral.dry.0.png b/src/main/resources/assets/botany/textures/blocks/loam.neutral.dry.0.png new file mode 100644 index 00000000..0b3c837b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.neutral.dry.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.neutral.dry.1.png b/src/main/resources/assets/botany/textures/blocks/loam.neutral.dry.1.png new file mode 100644 index 00000000..4fc87097 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.neutral.dry.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.neutral.normal.0.png b/src/main/resources/assets/botany/textures/blocks/loam.neutral.normal.0.png new file mode 100644 index 00000000..4eb04a64 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.neutral.normal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.neutral.normal.1.png b/src/main/resources/assets/botany/textures/blocks/loam.neutral.normal.1.png new file mode 100644 index 00000000..313edcca Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.neutral.normal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.normal.damp.0.png b/src/main/resources/assets/botany/textures/blocks/loam.normal.damp.0.png new file mode 100644 index 00000000..7fcdb96d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.normal.damp.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.normal.damp.1.png b/src/main/resources/assets/botany/textures/blocks/loam.normal.damp.1.png new file mode 100644 index 00000000..5810018e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.normal.damp.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.normal.dry.0.png b/src/main/resources/assets/botany/textures/blocks/loam.normal.dry.0.png new file mode 100644 index 00000000..0b3c837b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.normal.dry.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.normal.dry.1.png b/src/main/resources/assets/botany/textures/blocks/loam.normal.dry.1.png new file mode 100644 index 00000000..4fc87097 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.normal.dry.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.normal.normal.0.png b/src/main/resources/assets/botany/textures/blocks/loam.normal.normal.0.png new file mode 100644 index 00000000..4eb04a64 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.normal.normal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.normal.normal.1.png b/src/main/resources/assets/botany/textures/blocks/loam.normal.normal.1.png new file mode 100644 index 00000000..313edcca Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.normal.normal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.png b/src/main/resources/assets/botany/textures/blocks/loam.png new file mode 100644 index 00000000..de2bf825 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/loam.zip b/src/main/resources/assets/botany/textures/blocks/loam.zip new file mode 100644 index 00000000..2385fed9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/loam.zip differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.acid.damp.0.png b/src/main/resources/assets/botany/textures/blocks/soil.acid.damp.0.png new file mode 100644 index 00000000..63689a7a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.acid.damp.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.acid.damp.1.png b/src/main/resources/assets/botany/textures/blocks/soil.acid.damp.1.png new file mode 100644 index 00000000..e468f2a8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.acid.damp.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.acid.dry.0.png b/src/main/resources/assets/botany/textures/blocks/soil.acid.dry.0.png new file mode 100644 index 00000000..f64d855f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.acid.dry.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.acid.dry.1.png b/src/main/resources/assets/botany/textures/blocks/soil.acid.dry.1.png new file mode 100644 index 00000000..3e2855f8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.acid.dry.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.acid.normal.0.png b/src/main/resources/assets/botany/textures/blocks/soil.acid.normal.0.png new file mode 100644 index 00000000..b015ad45 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.acid.normal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.acid.normal.1.png b/src/main/resources/assets/botany/textures/blocks/soil.acid.normal.1.png new file mode 100644 index 00000000..39e8d82d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.acid.normal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.alkaline.damp.0.png b/src/main/resources/assets/botany/textures/blocks/soil.alkaline.damp.0.png new file mode 100644 index 00000000..a46dad5f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.alkaline.damp.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.alkaline.damp.1.png b/src/main/resources/assets/botany/textures/blocks/soil.alkaline.damp.1.png new file mode 100644 index 00000000..9215e1e8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.alkaline.damp.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.alkaline.dry.0.png b/src/main/resources/assets/botany/textures/blocks/soil.alkaline.dry.0.png new file mode 100644 index 00000000..de4322de Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.alkaline.dry.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.alkaline.dry.1.png b/src/main/resources/assets/botany/textures/blocks/soil.alkaline.dry.1.png new file mode 100644 index 00000000..f3996051 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.alkaline.dry.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.alkaline.normal.0.png b/src/main/resources/assets/botany/textures/blocks/soil.alkaline.normal.0.png new file mode 100644 index 00000000..44e30f85 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.alkaline.normal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.alkaline.normal.1.png b/src/main/resources/assets/botany/textures/blocks/soil.alkaline.normal.1.png new file mode 100644 index 00000000..5626c2b7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.alkaline.normal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.neutral.damp.0.png b/src/main/resources/assets/botany/textures/blocks/soil.neutral.damp.0.png new file mode 100644 index 00000000..54f5b973 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.neutral.damp.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.neutral.damp.1.png b/src/main/resources/assets/botany/textures/blocks/soil.neutral.damp.1.png new file mode 100644 index 00000000..77aceb2f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.neutral.damp.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.neutral.dry.0.png b/src/main/resources/assets/botany/textures/blocks/soil.neutral.dry.0.png new file mode 100644 index 00000000..18a831b3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.neutral.dry.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.neutral.dry.1.png b/src/main/resources/assets/botany/textures/blocks/soil.neutral.dry.1.png new file mode 100644 index 00000000..9de8a64e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.neutral.dry.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.neutral.normal.0.png b/src/main/resources/assets/botany/textures/blocks/soil.neutral.normal.0.png new file mode 100644 index 00000000..26abc7ac Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.neutral.normal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.neutral.normal.1.png b/src/main/resources/assets/botany/textures/blocks/soil.neutral.normal.1.png new file mode 100644 index 00000000..38616b51 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.neutral.normal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.normal.damp.0.png b/src/main/resources/assets/botany/textures/blocks/soil.normal.damp.0.png new file mode 100644 index 00000000..54f5b973 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.normal.damp.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.normal.damp.1.png b/src/main/resources/assets/botany/textures/blocks/soil.normal.damp.1.png new file mode 100644 index 00000000..77aceb2f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.normal.damp.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.normal.dry.0.png b/src/main/resources/assets/botany/textures/blocks/soil.normal.dry.0.png new file mode 100644 index 00000000..18a831b3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.normal.dry.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.normal.dry.1.png b/src/main/resources/assets/botany/textures/blocks/soil.normal.dry.1.png new file mode 100644 index 00000000..9de8a64e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.normal.dry.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.normal.normal.0.png b/src/main/resources/assets/botany/textures/blocks/soil.normal.normal.0.png new file mode 100644 index 00000000..26abc7ac Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.normal.normal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil.normal.normal.1.png b/src/main/resources/assets/botany/textures/blocks/soil.normal.normal.1.png new file mode 100644 index 00000000..38616b51 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil.normal.normal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.damp.0.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.damp.0.png new file mode 100644 index 00000000..87251d45 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.damp.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.damp.1.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.damp.1.png new file mode 100644 index 00000000..b9228a8f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.damp.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.damp.2.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.damp.2.png new file mode 100644 index 00000000..27ad7c77 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.damp.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.dry.0.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.dry.0.png new file mode 100644 index 00000000..a42a94db Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.dry.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.dry.1.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.dry.1.png new file mode 100644 index 00000000..92192791 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.dry.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.dry.2.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.dry.2.png new file mode 100644 index 00000000..36669dc1 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.dry.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.normal.0.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.normal.0.png new file mode 100644 index 00000000..f5cbcbdd Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.normal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.normal.1.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.normal.1.png new file mode 100644 index 00000000..548085a9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.normal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.normal.2.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.normal.2.png new file mode 100644 index 00000000..a62ea5f9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.acid.normal.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.damp.0.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.damp.0.png new file mode 100644 index 00000000..3fd53b6d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.damp.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.damp.1.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.damp.1.png new file mode 100644 index 00000000..6c6ec03a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.damp.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.damp.2.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.damp.2.png new file mode 100644 index 00000000..257cc0b2 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.damp.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.dry.0.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.dry.0.png new file mode 100644 index 00000000..1009991f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.dry.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.dry.1.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.dry.1.png new file mode 100644 index 00000000..17141bbf Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.dry.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.dry.2.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.dry.2.png new file mode 100644 index 00000000..0e641f53 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.dry.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.normal.0.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.normal.0.png new file mode 100644 index 00000000..a89ed1d0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.normal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.normal.1.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.normal.1.png new file mode 100644 index 00000000..11742427 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.normal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.normal.2.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.normal.2.png new file mode 100644 index 00000000..a213a685 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.alkaline.normal.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.damp.0.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.damp.0.png new file mode 100644 index 00000000..3d2c0966 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.damp.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.damp.1.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.damp.1.png new file mode 100644 index 00000000..7e0080ef Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.damp.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.damp.2.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.damp.2.png new file mode 100644 index 00000000..81eac806 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.damp.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.dry.0.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.dry.0.png new file mode 100644 index 00000000..e7627900 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.dry.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.dry.1.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.dry.1.png new file mode 100644 index 00000000..d1c7d692 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.dry.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.dry.2.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.dry.2.png new file mode 100644 index 00000000..7367bc16 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.dry.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.normal.0.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.normal.0.png new file mode 100644 index 00000000..a568c003 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.normal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.normal.1.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.normal.1.png new file mode 100644 index 00000000..783b88b3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.normal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.normal.2.png b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.normal.2.png new file mode 100644 index 00000000..c7e53596 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/flowerbed.neutral.normal.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.damp.0.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.damp.0.png new file mode 100644 index 00000000..5fd688a4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.damp.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.damp.1.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.damp.1.png new file mode 100644 index 00000000..136b9590 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.damp.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.damp.2.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.damp.2.png new file mode 100644 index 00000000..0f7fa150 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.damp.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.dry.0.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.dry.0.png new file mode 100644 index 00000000..f1397cec Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.dry.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.dry.1.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.dry.1.png new file mode 100644 index 00000000..6fdbe577 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.dry.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.dry.2.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.dry.2.png new file mode 100644 index 00000000..6d5ad52b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.dry.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.normal.0.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.normal.0.png new file mode 100644 index 00000000..311416c8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.normal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.normal.1.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.normal.1.png new file mode 100644 index 00000000..17d3bd9e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.normal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.normal.2.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.normal.2.png new file mode 100644 index 00000000..82d701b5 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.acid.normal.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.damp.0.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.damp.0.png new file mode 100644 index 00000000..9d0396fc Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.damp.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.damp.1.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.damp.1.png new file mode 100644 index 00000000..4a463517 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.damp.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.damp.2.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.damp.2.png new file mode 100644 index 00000000..93d23493 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.damp.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.dry.0.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.dry.0.png new file mode 100644 index 00000000..441a1edc Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.dry.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.dry.1.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.dry.1.png new file mode 100644 index 00000000..662a070e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.dry.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.dry.2.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.dry.2.png new file mode 100644 index 00000000..dee2a344 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.dry.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.normal.0.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.normal.0.png new file mode 100644 index 00000000..b9967797 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.normal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.normal.1.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.normal.1.png new file mode 100644 index 00000000..0362a9a7 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.normal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.normal.2.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.normal.2.png new file mode 100644 index 00000000..57dda57b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.alkaline.normal.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.damp.0.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.damp.0.png new file mode 100644 index 00000000..a1856e04 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.damp.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.damp.1.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.damp.1.png new file mode 100644 index 00000000..1a46c68f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.damp.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.damp.2.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.damp.2.png new file mode 100644 index 00000000..86d31482 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.damp.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.dry.0.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.dry.0.png new file mode 100644 index 00000000..fb2852d9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.dry.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.dry.1.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.dry.1.png new file mode 100644 index 00000000..8bc23697 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.dry.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.dry.2.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.dry.2.png new file mode 100644 index 00000000..cce821a2 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.dry.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.normal.0.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.normal.0.png new file mode 100644 index 00000000..6352a244 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.normal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.normal.1.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.normal.1.png new file mode 100644 index 00000000..f3c1749d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.normal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.normal.2.png b/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.normal.2.png new file mode 100644 index 00000000..4fd0efe4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/loam.neutral.normal.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.damp.0.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.damp.0.png new file mode 100644 index 00000000..932c6bbd Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.damp.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.damp.1.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.damp.1.png new file mode 100644 index 00000000..f1c5db2e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.damp.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.damp.2.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.damp.2.png new file mode 100644 index 00000000..1a723ff8 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.damp.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.dry.0.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.dry.0.png new file mode 100644 index 00000000..95089aa0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.dry.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.dry.1.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.dry.1.png new file mode 100644 index 00000000..be067a68 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.dry.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.dry.2.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.dry.2.png new file mode 100644 index 00000000..4fbef23a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.dry.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.normal.0.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.normal.0.png new file mode 100644 index 00000000..52ce8673 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.normal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.normal.1.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.normal.1.png new file mode 100644 index 00000000..46d0d041 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.normal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.normal.2.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.normal.2.png new file mode 100644 index 00000000..084d7020 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.acid.normal.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.damp.0.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.damp.0.png new file mode 100644 index 00000000..e110d06d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.damp.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.damp.1.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.damp.1.png new file mode 100644 index 00000000..4b63d179 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.damp.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.damp.2.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.damp.2.png new file mode 100644 index 00000000..630236d6 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.damp.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.dry.0.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.dry.0.png new file mode 100644 index 00000000..a9a9c045 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.dry.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.dry.1.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.dry.1.png new file mode 100644 index 00000000..ed273cc9 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.dry.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.dry.2.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.dry.2.png new file mode 100644 index 00000000..19f4e252 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.dry.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.normal.0.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.normal.0.png new file mode 100644 index 00000000..291ff2f4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.normal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.normal.1.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.normal.1.png new file mode 100644 index 00000000..549bd83e Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.normal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.normal.2.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.normal.2.png new file mode 100644 index 00000000..adac328b Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.alkaline.normal.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.damp.0.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.damp.0.png new file mode 100644 index 00000000..f0817c3d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.damp.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.damp.1.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.damp.1.png new file mode 100644 index 00000000..694d455a Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.damp.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.damp.2.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.damp.2.png new file mode 100644 index 00000000..d03000ae Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.damp.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.dry.0.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.dry.0.png new file mode 100644 index 00000000..86bbc0ed Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.dry.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.dry.1.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.dry.1.png new file mode 100644 index 00000000..6521500f Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.dry.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.dry.2.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.dry.2.png new file mode 100644 index 00000000..ee028847 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.dry.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.normal.0.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.normal.0.png new file mode 100644 index 00000000..388a920c Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.normal.0.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.normal.1.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.normal.1.png new file mode 100644 index 00000000..75164a60 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.normal.1.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.normal.2.png b/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.normal.2.png new file mode 100644 index 00000000..46cc1952 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/soil/soil.neutral.normal.2.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/stained.png b/src/main/resources/assets/botany/textures/blocks/stained.png new file mode 100644 index 00000000..964fc3a4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/stained.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/weeds.png b/src/main/resources/assets/botany/textures/blocks/weeds.png new file mode 100644 index 00000000..dcbc7833 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/weeds.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/weedslong.png b/src/main/resources/assets/botany/textures/blocks/weedslong.png new file mode 100644 index 00000000..66a17fd6 Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/weedslong.png differ diff --git a/src/main/resources/assets/botany/textures/blocks/weedsverylong.png b/src/main/resources/assets/botany/textures/blocks/weedsverylong.png new file mode 100644 index 00000000..427aa28d Binary files /dev/null and b/src/main/resources/assets/botany/textures/blocks/weedsverylong.png differ diff --git a/src/main/resources/assets/botany/textures/items/botanistDatabase.png b/src/main/resources/assets/botany/textures/items/botanistDatabase.png new file mode 100644 index 00000000..59e2ee19 Binary files /dev/null and b/src/main/resources/assets/botany/textures/items/botanistDatabase.png differ diff --git a/src/main/resources/assets/botany/textures/items/clay.png b/src/main/resources/assets/botany/textures/items/clay.png new file mode 100644 index 00000000..299ade0f Binary files /dev/null and b/src/main/resources/assets/botany/textures/items/clay.png differ diff --git a/src/main/resources/assets/botany/textures/items/encylopedia.png b/src/main/resources/assets/botany/textures/items/encylopedia.png new file mode 100644 index 00000000..d0403aff Binary files /dev/null and b/src/main/resources/assets/botany/textures/items/encylopedia.png differ diff --git a/src/main/resources/assets/botany/textures/items/encylopediaIron.png b/src/main/resources/assets/botany/textures/items/encylopediaIron.png new file mode 100644 index 00000000..f6fd07cc Binary files /dev/null and b/src/main/resources/assets/botany/textures/items/encylopediaIron.png differ diff --git a/src/main/resources/assets/botany/textures/items/insulatedTube.0.png b/src/main/resources/assets/botany/textures/items/insulatedTube.0.png new file mode 100644 index 00000000..b9b585b0 Binary files /dev/null and b/src/main/resources/assets/botany/textures/items/insulatedTube.0.png differ diff --git a/src/main/resources/assets/botany/textures/items/insulatedTube.1.png b/src/main/resources/assets/botany/textures/items/insulatedTube.1.png new file mode 100644 index 00000000..2a0d935c Binary files /dev/null and b/src/main/resources/assets/botany/textures/items/insulatedTube.1.png differ diff --git a/src/main/resources/assets/botany/textures/items/insulatedTube.2.png b/src/main/resources/assets/botany/textures/items/insulatedTube.2.png new file mode 100644 index 00000000..a31c3d5f Binary files /dev/null and b/src/main/resources/assets/botany/textures/items/insulatedTube.2.png differ diff --git a/src/main/resources/assets/botany/textures/items/masterBotanistDatabase.png b/src/main/resources/assets/botany/textures/items/masterBotanistDatabase.png new file mode 100644 index 00000000..730cf7c4 Binary files /dev/null and b/src/main/resources/assets/botany/textures/items/masterBotanistDatabase.png differ diff --git a/src/main/resources/assets/botany/textures/items/mortar.png b/src/main/resources/assets/botany/textures/items/mortar.png new file mode 100644 index 00000000..c7113d2a Binary files /dev/null and b/src/main/resources/assets/botany/textures/items/mortar.png differ diff --git a/src/main/resources/assets/botany/textures/items/pigment.png b/src/main/resources/assets/botany/textures/items/pigment.png new file mode 100644 index 00000000..0f9747ee Binary files /dev/null and b/src/main/resources/assets/botany/textures/items/pigment.png differ diff --git a/src/main/resources/assets/botany/textures/items/powderAsh.png b/src/main/resources/assets/botany/textures/items/powderAsh.png new file mode 100644 index 00000000..21e474ff Binary files /dev/null and b/src/main/resources/assets/botany/textures/items/powderAsh.png differ diff --git a/src/main/resources/assets/botany/textures/items/powderCompost.png b/src/main/resources/assets/botany/textures/items/powderCompost.png new file mode 100644 index 00000000..08dd34fb Binary files /dev/null and b/src/main/resources/assets/botany/textures/items/powderCompost.png differ diff --git a/src/main/resources/assets/botany/textures/items/powderFertiliser.png b/src/main/resources/assets/botany/textures/items/powderFertiliser.png new file mode 100644 index 00000000..8e68764b Binary files /dev/null and b/src/main/resources/assets/botany/textures/items/powderFertiliser.png differ diff --git a/src/main/resources/assets/botany/textures/items/powderMulch.png b/src/main/resources/assets/botany/textures/items/powderMulch.png new file mode 100644 index 00000000..3e1c4380 Binary files /dev/null and b/src/main/resources/assets/botany/textures/items/powderMulch.png differ diff --git a/src/main/resources/assets/botany/textures/items/powderPulp.png b/src/main/resources/assets/botany/textures/items/powderPulp.png new file mode 100644 index 00000000..85255da1 Binary files /dev/null and b/src/main/resources/assets/botany/textures/items/powderPulp.png differ diff --git a/src/main/resources/assets/botany/textures/items/powderSulphur.png b/src/main/resources/assets/botany/textures/items/powderSulphur.png new file mode 100644 index 00000000..9e8584a1 Binary files /dev/null and b/src/main/resources/assets/botany/textures/items/powderSulphur.png differ diff --git a/src/main/resources/assets/botany/textures/items/soilMeter.png b/src/main/resources/assets/botany/textures/items/soilMeter.png new file mode 100644 index 00000000..b81b85e3 Binary files /dev/null and b/src/main/resources/assets/botany/textures/items/soilMeter.png differ diff --git a/src/main/resources/assets/botany/textures/items/weedkiller.png b/src/main/resources/assets/botany/textures/items/weedkiller.png new file mode 100644 index 00000000..3b8319f1 Binary files /dev/null and b/src/main/resources/assets/botany/textures/items/weedkiller.png differ diff --git a/src/main/resources/assets/extrabees/lang/en_GB.lang b/src/main/resources/assets/extrabees/lang/en_GB.lang new file mode 100644 index 00000000..7d3910ff --- /dev/null +++ b/src/main/resources/assets/extrabees/lang/en_GB.lang @@ -0,0 +1,506 @@ +################################################## +## Items + +extrabees.item.comb.barren=Barren Comb +extrabees.item.comb.rotten=Rotten Comb +extrabees.item.comb.bone=Bone Comb +extrabees.item.comb.oil=Oily Comb +extrabees.item.comb.coal=Fossilised Comb +extrabees.item.comb.fuel=Petroleum Comb +extrabees.item.comb.water=Damp Comb +extrabees.item.comb.milk=Milky Comb +extrabees.item.comb.fruit=Fruity Comb +extrabees.item.comb.seed=Seedy Comb +extrabees.item.comb.alcohol=Alcoholic Comb +extrabees.item.comb.stone=Rocky Comb +extrabees.item.comb.redstone=Energetic Comb +extrabees.item.comb.resin=Amber Comb +extrabees.item.comb.ic2energy=Static Comb +extrabees.item.comb.iron=Iron Comb +extrabees.item.comb.gold=Golden Comb +extrabees.item.comb.copper=Copper Comb +extrabees.item.comb.tin=Tin Comb +extrabees.item.comb.silver=Silver Comb +extrabees.item.comb.uranium=Radioactive Comb +extrabees.item.comb.clay=Clay Comb +extrabees.item.comb.old=Old Comb +extrabees.item.comb.fungal=Fungal Comb +extrabees.item.comb.creosote=Tar Comb +extrabees.item.comb.latex=Latex Comb +extrabees.item.comb.acidic=Brimstone Comb +extrabees.item.comb.venomous=Venomous Comb +extrabees.item.comb.slime=Mucous Comb +extrabees.item.comb.blaze=Blaze Comb +extrabees.item.comb.coffee=Caffeinated Comb +extrabees.item.comb.glacial=Glacial Comb +extrabees.item.comb.mint=Minty Comb +extrabees.item.comb.citrus=Citrus Comb +extrabees.item.comb.peat=Peat Comb +extrabees.item.comb.shadow=Shadow Comb +extrabees.item.comb.lead=Leaden Comb +extrabees.item.comb.zinc=Zinc Comb +extrabees.item.comb.titanium=Titanium Comb +extrabees.item.comb.tungsten=Tungsten Comb +extrabees.item.comb.platinum=Platinum Comb +extrabees.item.comb.lapis=Lapis Comb +extrabees.item.comb.emerald=Emerald Comb +extrabees.item.comb.ruby=Ruby Comb +extrabees.item.comb.sapphire=Sapphire Comb +extrabees.item.comb.diamond=Diamond Comb +extrabees.item.comb.red=Red Tinted Comb +extrabees.item.comb.yellow=Yellow Tinted Comb +extrabees.item.comb.blue=Blue Tinted Comb +extrabees.item.comb.green=Green Tinted Comb +extrabees.item.comb.black=Black Tinted Comb +extrabees.item.comb.white=White Tinted Comb +extrabees.item.comb.brown=Brown Tinted Comb +extrabees.item.comb.orange=Orange Tinted Comb +extrabees.item.comb.cyan=Cyan Tinted Comb +extrabees.item.comb.purple=Purple Tinted Comb +extrabees.item.comb.gray=Grey Tinted Comb +extrabees.item.comb.lightblue=Light Blue Tinted Comb +extrabees.item.comb.pink=Pink Tinted Comb +extrabees.item.comb.limegreen=Lime Green Tinted Comb +extrabees.item.comb.magenta=Magenta Tinted Comb +extrabees.item.comb.lightgray=Light Grey Tinted Comb +extrabees.item.comb.nickel=Nickel Comb +extrabees.item.comb.glowstone=Glowing Comb +extrabees.item.comb.saltpeter=Unstable Comb +extrabees.item.comb.compost=Decomposed Comb +extrabees.item.comb.sawdust=Dusty Comb +extrabees.item.comb.certus=Certus Comb +extrabees.item.comb.enderpearl=Shimmering Comb +extrabees.item.comb.yellorium=Yellorium Comb +extrabees.item.comb.cyanite=Cyanite Comb +extrabees.item.comb.blutonium=Blutonium Comb + +extrabees.item.honeydrop.energy=Energy Drop +extrabees.item.honeydrop.acid=Acidic Drop +extrabees.item.honeydrop.poison=Venomous Drop +extrabees.item.honeydrop.apple=Juicy Drop +extrabees.item.honeydrop.citrus=Bitter Drop +extrabees.item.honeydrop.ice=Kelvin Drop +extrabees.item.honeydrop.milk=Milkdew +extrabees.item.honeydrop.seed=Nutdew +extrabees.item.honeydrop.alcohol=Tipsy Drop +extrabees.item.honeydrop.fruit=Fruitdew +extrabees.item.honeydrop.vegetable=Leafy Drop +extrabees.item.honeydrop.pumpkin=Fleshy Drop +extrabees.item.honeydrop.melon=Glistening Drop +extrabees.item.honeydrop.red=Red Tinted Honey +extrabees.item.honeydrop.yellow=Yellow Tinted Honey +extrabees.item.honeydrop.blue=Blue Tinted Honey +extrabees.item.honeydrop.green=Green Tinted Honey +extrabees.item.honeydrop.black=Black Tinted Honey +extrabees.item.honeydrop.white=White Tinted Honey +extrabees.item.honeydrop.brown=Brown Tinted Honey +extrabees.item.honeydrop.orange=Orange Tinted Honey +extrabees.item.honeydrop.cyan=Cyan Tinted Honey +extrabees.item.honeydrop.purple=Purple Tinted Honey +extrabees.item.honeydrop.gray=Grey Tinted Honey +extrabees.item.honeydrop.lightblue=Light Blue Tinted Honey +extrabees.item.honeydrop.pink=Pink Tinted Honey +extrabees.item.honeydrop.limegreen=Lime Green Tinted Honey +extrabees.item.honeydrop.magenta=Magenta Tinted Honey +extrabees.item.honeydrop.lightgray=Light Grey Tinted Honey + +extrabees.item.propolis.water=Watery Propolis +extrabees.item.propolis.oil=Oily Propolis +extrabees.item.propolis.fuel=Petroleum Propolis +extrabees.item.propolis.creosote=Creosote Propolis +extrabees.item.propolis.peat=Peat Propolis + +extrabees.item.honeycrystal=Honey Crystal +extrabees.item.honeycrystal.empty=Depleted Honey Crystal + +extrabees.item.frame.cocoa=Chocolate Frame +extrabees.item.frame.cage=Restraint Frame +extrabees.item.frame.soul=Soul Frame +extrabees.item.frame.clay=Healing Frame +extrabees.item.frame.debug=Nova Frame + +extrabees.item.serum.tooltip.nocharge=Empty +extrabees.item.serum.tooltip.charge1=1 Charge +extrabees.item.serum.tooltip.manycharge=%d Charges +extrabees.item.serum.corrupted=Corrupted Serum +extrabees.item.serum.name=%s Serum +extrabees.item.serum.empty=Empty Serum + +extrabees.item.template.corrupted=Corrupted Template +extrabees.item.template.name=%s Template +extrabees.item.template.empty=Blank Template + + + + +extrabees.block.apiaristMachine.name=Apiarist Machine +extrabees.block.geneticMachine.name=Genetic Machine +extrabees.block.advGeneticMachine.name=Advanced Genetic Machine + +extrabees.block.ectoplasm.name=Ectoplasm + +extrabees.block.hive.0=Water Hive +extrabees.block.hive.1=Rock Hive +extrabees.block.hive.2=Nether Hive +extrabees.block.hive.3=Marble Hive + + +################################################## +## Liquids + +extrabees.liquid.acid=Acid +extrabees.liquid.poison=Poison +extrabees.liquid.glacial=Liquid Nitrogen +extrabees.liquid.dna=Liquid DNA + + + + +################################################## +## Machines + +extrabees.machine.alveay.frame=Frame Housing +extrabees.machine.alveay.frame.info=The Frame Housing holds one hive frame to alter a bee's traits. +extrabees.machine.alveay.lighting=Alveary Lighting +extrabees.machine.alveay.lighting.info=The Alveary Lighting tricks bees into thinking it is daylight at night time. +extrabees.machine.alveay.mutator=Mutator +extrabees.machine.alveay.mutator.info=The Mutator uses certain items in order to encourage bee mutation. +extrabees.machine.alveay.rainShield=Rain Shield +extrabees.machine.alveay.rainShield.info=The Rain Shield prevents bees from being affected by rainfall. +extrabees.machine.alveay.stimulator=Electrical Stimulator +extrabees.machine.alveay.stimulator.info=Uses circuits and power to stimulate bees in a way similar to frames. +extrabees.machine.alveay.hatchery=Hatchery +extrabees.machine.alveay.hatchery.info=Collect larvae laid by queen bees inside the alveary. +extrabees.machine.alveay.transmission=Alveary Transmission + + + + +################################################## +## Misc + +extrabees.circuit.layout.stimulator=Electrical Stimulator +extrabees.circuit.layout.stimulator.usage=In Electrical Stimulators +extrabees.tab.genetics=Genetics + +for.binnie.circuit.stimulator.lowvoltage=LV Stimulus +for.binnie.circuit.stimulator.highvoltage=HV Stimulus +for.binnie.circuit.stimulator.plant=Biotic Stimulus +for.binnie.circuit.stimulator.death=Charged Stimulus +for.binnie.circuit.stimulator.life=Gentle Stimulus +for.binnie.circuit.stimulator.nether=Molten Stimulus +for.binnie.circuit.stimulator.mutation=Mutagenic Stimulus +for.binnie.circuit.stimulator.inhibitor=Inhibiting Stimulus +for.binnie.circuit.stimulator.territory=Agitating Stimulus + +extrabees.genetics.quality.awful=Awful +extrabees.genetics.quality.poor=Poor +extrabees.genetics.quality.average=Average +extrabees.genetics.quality.good=Good +extrabees.genetics.quality.excellent=Excellent + +extrabees.genetics.quality.tooltip=%s Quality + +extrabees.genetics.allele.shortest=Shortest +extrabees.genetics.allele.shorter=Shorter +extrabees.genetics.allele.short=Short +extrabees.genetics.allele.shortened=Shortened +extrabees.genetics.allele.normal=Normal +extrabees.genetics.allele.elongated=Elongated +extrabees.genetics.allele.long=Long +extrabees.genetics.allele.longer=Longer +extrabees.genetics.allele.longest=Longest + +extrabees.genetics.allele.slowest=Slowest +extrabees.genetics.allele.slower=Slower +extrabees.genetics.allele.slow=Slow +extrabees.genetics.allele.norm=Normal +extrabees.genetics.allele.fast=Fast +extrabees.genetics.allele.faster=Faster +extrabees.genetics.allele.fastest=Fastest + +extrabees.genetics.allele.low=Low +extrabees.genetics.allele.high=High +extrabees.genetics.allele.maximum=Maximum + +extrabees.genetics.allele.average=Average + +extrabees.genetics.allele.default=Default +extrabees.genetics.allele.large=Large +extrabees.genetics.allele.larger=Larger +extrabees.genetics.allele.largest=Largest + +extrabees.genetics.allele.none=None +extrabees.genetics.allele.both1=Both 1 +extrabees.genetics.allele.both2=Both 2 +extrabees.genetics.allele.both3=Both 3 +extrabees.genetics.allele.both4=Both 4 +extrabees.genetics.allele.both5=Both 5 +extrabees.genetics.allele.up1=Up 1 +extrabees.genetics.allele.up2=Up 2 +extrabees.genetics.allele.up3=Up 3 +extrabees.genetics.allele.up4=Up 4 +extrabees.genetics.allele.up5=Up 5 +extrabees.genetics.allele.down1=Down 1 +extrabees.genetics.allele.down2=Down 2 +extrabees.genetics.allele.down3=Down 3 +extrabees.genetics.allele.down4=Down 4 +extrabees.genetics.allele.down5=Down 5 + +extrabees.genetics.allele.noeffect=Effect Cancellation +extrabees.genetics.allele.noflower=Non-pollination + +extrabees.genetics.allele.lifespan=%s Lifespan +extrabees.genetics.allele.production=%s Production +extrabees.genetics.allele.fertility=%s Fertility +extrabees.genetics.allele.flowering=%s Flowering +extrabees.genetics.allele.territory=%s Territory +extrabees.genetics.allele.tolerance=%s %s Tol. +extrabees.genetics.allele.species=%s Species +extrabees.genetics.allele.effect=%s Effect +extrabees.genetics.allele.flower=%s Pollination +extrabees.genetics.allele.humidity=Humid. +extrabees.genetics.allele.temperature=Temp. +extrabees.genetics.allele.nocturnal=Nocturnal +extrabees.genetics.allele.caveDwelling=Cave Dwelling +extrabees.genetics.allele.tolerantFlyer=Rainfall + +extrabees.genetics.corrupted=Corrupted + + + +extrabees.branch.barren.name=Barren +extrabees.branch.barren.desc=Although initially these bees are considerably useless due to their meagre combs, they can lead onto greater things. +extrabees.branch.hostile.name=Hostile +extrabees.branch.hostile.desc=Prone to summoning monsters out of the blue, these bees nonetheless make useful if distasteful products. +extrabees.branch.rocky.name=Rocky +extrabees.branch.rocky.desc=Found amongst the rocks, these bees have very high tolerance to adverse conditions. +extrabees.branch.metallic.name=Rusty +extrabees.branch.metallic2.name=Metallic +extrabees.branch.alloy.name=Alloyed +extrabees.branch.farming.name=Agricultural +extrabees.branch.precious.name=Precious +extrabees.branch.mineral.name=Mineral +extrabees.branch.gemstone.name=Gemstone +extrabees.branch.nuclear.name=Nuclear +extrabees.branch.historic.name=Historic +extrabees.branch.fossilized.name=Fossilised +extrabees.branch.refined.name=Refined +extrabees.branch.aquatic.name=Aquatic +extrabees.branch.saccharine.name=Saccharine +extrabees.branch.volcanic.name=Volcanic +extrabees.branch.viscous.name=Viscous +extrabees.branch.virulent.name=Virulent +extrabees.branch.caustic.name=Caustic +extrabees.branch.energetic.name=Energetic +extrabees.branch.shadow.name=Shadow +extrabees.branch.primary.name=Primary +extrabees.branch.secondary.name=Secondary +extrabees.branch.tertiary.name=Tertiary +extrabees.branch.ftb.name=Beastly +extrabees.branch.quantum.name=Quantum + +extrabees.flowers.water.name=Lily Pads +extrabees.flowers.sugar.name=Reeds +extrabees.flowers.rock.name=Rocks +extrabees.flowers.book.name=Books +extrabees.flowers.dead.name=Dead Bushes +extrabees.flowers.redstone.name=Redstone +extrabees.flowers.wood.name=Wood +extrabees.flowers.leaves.name=Leaves +extrabees.flowers.sapling.name=Saplings +extrabees.flowers.fruit.name=Fruit +extrabees.flowers.mystical.name=Mystical + +extrabees.species.arid.name=Arid +extrabees.species.arid.desc=Fond of dry landscapes, their combs are quite waxy and contain less honey.|Apiarist Manual +extrabees.species.barren.name=Barren +extrabees.species.barren.desc=Preferring deserts, they can live their entire lives without seeing flowers of any kind.|Apiarist Manual +extrabees.species.desolate.name=Desolate +extrabees.species.desolate.desc=They thrive in blasted wastelands where other life simply withers away.|Apiarist Manual +extrabees.species.gnawing.name=Gnawing +extrabees.species.rotten.name=Decaying +extrabees.species.rotten.desc=These bees have an unusual attraction to dead, rotting meat and will store it in their combs. The smell also attracts other unsavoury types.|Apiarist Manual +extrabees.species.bone.name=Skeletal +extrabees.species.bone.desc=Largely unable to defend their hives in the wild, they attract other creatures to guard their homes.|Apiarist Manual +extrabees.species.creeper.name=Creepy +extrabees.species.creeper.desc=You're sure to get a bang out of these bees.|Binnie, Apiarist +extrabees.species.decomposing.name=Decomposing +extrabees.species.rock.name=Rocky +extrabees.species.rock.desc=If only I could find them Rolling Bees, then I might get some good music.|Mysterious Apiarist +extrabees.species.stone.name=Tolerant +extrabees.species.stone.desc=Part of their hive is made out of stone and use less wax than before.|Apiarist Manual +extrabees.species.granite.name=Robust +extrabees.species.granite.desc=Capable of burrowing through solid rock, they have an extraordinary affinity for minerals hidden in rocks.|Apiarist Manual +extrabees.species.mineral.name=Resilient +extrabees.species.mineral.desc=Generations of breeding Rocky bees and their offspring has resulted in offspring that have begun to consume minerals as part of their diet.|Apiarist Manual +extrabees.species.copper.name=Corroded +extrabees.species.copper.desc=These are infamous for causing power issues by gnawing on the copper wires in walls.|Apiarist Manual +extrabees.species.tin.name=Tarnished +extrabees.species.tin.desc=Their bodies have a metallic coating, which they shed and incorporate into their combs.|Apiarist Manual +extrabees.species.iron.name=Rusty +extrabees.species.iron.desc=Oh, rusty bees. Do I need a tetanus shot?|Jadedcat, Apiarist +extrabees.species.lead.name=Leaden +extrabees.species.lead.desc="It should be easy to turn these into gold!"|Pahimar, Alchemist +extrabees.species.zinc.name=Galvanized +extrabees.species.titanium.name=Impregnable +extrabees.species.bronze.name=Resolute +extrabees.species.brass.name=Brazen +extrabees.species.steel.name=Fortified +extrabees.species.tungstate.name=Invincible +extrabees.species.gold.name=Glittering +extrabees.species.silver.name=Shining +extrabees.species.electrum.name=Precious +extrabees.species.platinum.name=Valuable +extrabees.species.platinum.desc=Ohhhhh, look how shiny this bee is.|Jadedcat, Apiarist +extrabees.species.lapis.name=Lapis +extrabees.species.sodalite.name=Sodalite +extrabees.species.pyrite.name=Pyrite +extrabees.species.bauxite.name=Bauxite +extrabees.species.cinnabar.name=Cinnabar +extrabees.species.sphalerite.name=Sphalerite +extrabees.species.emerald.name=Emerald +extrabees.species.emerald.desc=Look at this bee, it's even shinier!|Jadedcat, Apiarist +extrabees.species.ruby.name=Ruby +extrabees.species.sapphire.name=Sapphire +extrabees.species.olivine.name=Olivine +extrabees.species.diamond.name=Diamond +extrabees.species.diamond.desc=Oh my god, this is definitely the shiniest bee!|Jadedcat, Apiarist +extrabees.species.unstable.name=Unstable +extrabees.species.nuclear.name=Nuclear +extrabees.species.radioactive.name=Radioactive +extrabees.species.ancient.name=Ancient +extrabees.species.primeval.name=Primeval +extrabees.species.prehistoric.name=Prehistoric +extrabees.species.relic.name=Relic +extrabees.species.coal.name=Fossilised +extrabees.species.resin.name=Resinous +extrabees.species.oil.name=Oily +extrabees.species.peat.name=Preserved +extrabees.species.distilled.name=Distilled +extrabees.species.fuel.name=Refined +extrabees.species.creosote.name=Tarry +extrabees.species.latex.name=Elastic +extrabees.species.water.name=Water +extrabees.species.river.name=River +extrabees.species.ocean.name=Ocean +extrabees.species.ink.name=Stained +extrabees.species.growing.name=Growing +extrabees.species.thriving.name=Thriving +extrabees.species.blooming.name=Blooming +extrabees.species.sweet.name=Sweetened +extrabees.species.sugar.name=Sugary +extrabees.species.ripening.name=Ripening +extrabees.species.fruit.name=Fruity +extrabees.species.alcohol.name=Fermented +extrabees.species.alcohol.desc=Go home bee, you're drunk.|Jadedcat, Apiarist +extrabees.species.farm.name=Farmed +extrabees.species.milk.name=Bovine +extrabees.species.milk.desc="Moo. I mean, Bzzz."|Confused Bee +extrabees.species.coffee.name=Caffeinated +extrabees.species.coffee.desc=The only drawback is that they don't actually brew the coffee for you.|Apiarist Manual +extrabees.species.citrus.name=Citrus +extrabees.species.mint.name=Minty +extrabees.species.swamp.name=Damp +extrabees.species.boggy.name=Sodden +extrabees.species.fungal.name=Fungal +extrabees.species.basalt.name=Embittered +extrabees.species.basalt.desc=It is unknown how they first arrived in the Nether, but its influence has made them aggresive.|Apiarist Manual +extrabees.species.tempered.name=Furious +extrabees.species.tempered.desc=An unusual mutation has activated recessive genes that cause high levels of anger in this bee.|Apiarist Manual +extrabees.species.volcanic.name=Volcanic +extrabees.species.volcanic.desc=At some point during their evolution, they seem to have acquired traits from Blazes.|Apiarist Manual +extrabees.species.malicious.name=Malicious +extrabees.species.infectious.name=Infectious +extrabees.species.virulent.name=Virulent +extrabees.species.viscous.name=Viscous +extrabees.species.glutinous.name=Glutinous +extrabees.species.sticky.name=Sticky +extrabees.species.corrosive.name=Corrosive +extrabees.species.caustic.name=Caustic +extrabees.species.acidic.name=Acidic +extrabees.species.excited.name=Excited +extrabees.species.excited.desc=Redstone acts as a source of extra energy for these bees.|Apiarist Manual +extrabees.species.energetic.name=Energetic +extrabees.species.energetic.desc=Oh my god. Something happened. House on fire, house on fire.|Generikb, Panicked Apiarist +extrabees.species.ecstatic.name=Ecstatic +extrabees.species.ecstatic.desc=After accumulating excessive static electricity from Redstone, they produce powerful lightning arcs. Use caution, and maybe a lightning rod.|Apiarist Manual +extrabees.species.artic.name=Frigid +extrabees.species.freezing.name=Absolute +extrabees.species.shadow.name=Shadowed +extrabees.species.darkened.name=Darkened +extrabees.species.abyss.name=Abyssal +extrabees.species.red.name=Maroon +extrabees.species.red.desc=Don't let them sting you, or you may be seeing red.|Apiarist Manual +extrabees.species.yellow.name=Saffron +extrabees.species.yellow.desc=They're dyeing to brighten your day with their honey.|Apiarist Manual +extrabees.species.blue.name=Prussian +extrabees.species.blue.desc="Cheer up, bee. You're looking a little blue."|Mysterious Apiarist +extrabees.species.green.name=Natural +extrabees.species.green.desc=Perhaps it is an attempt at camouflage, but these bees have begun producing dyes that match the colour of leaves and grass.|Apiarist Manual +extrabees.species.black.name=Ebony +extrabees.species.white.name=Bleached +extrabees.species.brown.name=Sepia +extrabees.species.orange.name=Amber +extrabees.species.cyan.name=Turquoise +extrabees.species.purple.name=Indigo +extrabees.species.gray.name=Slate +extrabees.species.lightblue.name=Azure +extrabees.species.pink.name=Lavender +extrabees.species.limegreen.name=Lime +extrabees.species.magenta.name=Fuchsia +extrabees.species.lightgray.name=Ashen +extrabees.species.celebratory.name=Celebratory +extrabees.species.jaded.name=Jaded +extrabees.species.jaded.desc=I bred all the bees and all I got is some bloody purple dye!|Jaded, Sengir's Chosen +extrabees.species.glowstone.name=Glowering +extrabees.species.hazardous.name=Hazardous +extrabees.species.nickel.name=Lustered +extrabees.species.invar.name=Lustrous +extrabees.species.quantum.name=Quantum +extrabees.species.spatial.name=Spatial +extrabees.species.unusual.name=Abnormal +extrabees.species.yellorium.name=Yellorium +extrabees.species.cyanite.name=Cyanite +extrabees.species.blutonium.name=Blutonium +extrabees.species.mystical.name=Mystical + +extrabees.effect.ectoplasm.name=Ectoplasm +extrabees.effect.acid.name=Acidic +extrabees.effect.spawn_zombie.name=Zombies +extrabees.effect.spawn_skeleton.name=Skeletons +extrabees.effect.spawn_creeper.name=Creepers +extrabees.effect.lightning.name=Lightning +extrabees.effect.radioactive.name=Unstable +extrabees.effect.meteor.name=Meteor +extrabees.effect.hunger.name=Hunger +extrabees.effect.food.name=Nourishment +extrabees.effect.blindness.name=Darkness +extrabees.effect.confusion.name=Confusion +extrabees.effect.fireworks.name=Fireworks +extrabees.effect.festival.name=Festival +extrabees.effect.birthday.name=Birthday +extrabees.effect.teleport.name=Teleport +extrabees.effect.gravity.name=Gravity +extrabees.effect.thief.name=Antigravity +extrabees.effect.wither.name=Wither +extrabees.effect.water.name=Water +extrabees.effect.slow.name=Slowness +extrabees.effect.bonemealsapling.name=Growth +extrabees.effect.bonemealfruit.name=Ripening +extrabees.effect.bonemealmushroom.name=Mushroom +extrabees.effect.power.name=Power + + + + +extrabees.gui.database.tab.species.overview=Overview +extrabees.gui.database.tab.species.classification=Classification +extrabees.gui.database.tab.species.genome=Genome +extrabees.gui.database.tab.species.products=Products +extrabees.gui.database.tab.species.climate=Climate +extrabees.gui.database.tab.species.resultant=Resultant Mutations +extrabees.gui.database.tab.species.further=Further Mutations +extrabees.gui.database.tab.branches.overview=Overview +extrabees.gui.database.tab.branches.species=Species +extrabees.gui.database.tab.breeder=Breeder diff --git a/src/main/resources/assets/extrabees/lang/en_US.lang b/src/main/resources/assets/extrabees/lang/en_US.lang new file mode 100644 index 00000000..fc49f42b --- /dev/null +++ b/src/main/resources/assets/extrabees/lang/en_US.lang @@ -0,0 +1,506 @@ +################################################## +## Items + +extrabees.item.comb.barren=Barren Comb +extrabees.item.comb.rotten=Rotten Comb +extrabees.item.comb.bone=Bone Comb +extrabees.item.comb.oil=Oily Comb +extrabees.item.comb.coal=Fossilised Comb +extrabees.item.comb.fuel=Petroleum Comb +extrabees.item.comb.water=Damp Comb +extrabees.item.comb.milk=Milky Comb +extrabees.item.comb.fruit=Fruity Comb +extrabees.item.comb.seed=Seedy Comb +extrabees.item.comb.alcohol=Alcoholic Comb +extrabees.item.comb.stone=Rocky Comb +extrabees.item.comb.redstone=Energetic Comb +extrabees.item.comb.resin=Amber Comb +extrabees.item.comb.ic2energy=Static Comb +extrabees.item.comb.iron=Iron Comb +extrabees.item.comb.gold=Golden Comb +extrabees.item.comb.copper=Copper Comb +extrabees.item.comb.tin=Tin Comb +extrabees.item.comb.silver=Silver Comb +extrabees.item.comb.uranium=Radioactive Comb +extrabees.item.comb.clay=Clay Comb +extrabees.item.comb.old=Old Comb +extrabees.item.comb.fungal=Fungal Comb +extrabees.item.comb.creosote=Tar Comb +extrabees.item.comb.latex=Latex Comb +extrabees.item.comb.acidic=Brimstone Comb +extrabees.item.comb.venomous=Venomous Comb +extrabees.item.comb.slime=Mucous Comb +extrabees.item.comb.blaze=Blaze Comb +extrabees.item.comb.coffee=Caffeinated Comb +extrabees.item.comb.glacial=Glacial Comb +extrabees.item.comb.mint=Minty Comb +extrabees.item.comb.citrus=Citrus Comb +extrabees.item.comb.peat=Peat Comb +extrabees.item.comb.shadow=Shadow Comb +extrabees.item.comb.lead=Leaden Comb +extrabees.item.comb.zinc=Zinc Comb +extrabees.item.comb.titanium=Titanium Comb +extrabees.item.comb.tungsten=Tungsten Comb +extrabees.item.comb.platinum=Platinum Comb +extrabees.item.comb.lapis=Lapis Comb +extrabees.item.comb.emerald=Emerald Comb +extrabees.item.comb.ruby=Ruby Comb +extrabees.item.comb.sapphire=Sapphire Comb +extrabees.item.comb.diamond=Diamond Comb +extrabees.item.comb.red=Red Tinted Comb +extrabees.item.comb.yellow=Yellow Tinted Comb +extrabees.item.comb.blue=Blue Tinted Comb +extrabees.item.comb.green=Green Tinted Comb +extrabees.item.comb.black=Black Tinted Comb +extrabees.item.comb.white=White Tinted Comb +extrabees.item.comb.brown=Brown Tinted Comb +extrabees.item.comb.orange=Orange Tinted Comb +extrabees.item.comb.cyan=Cyan Tinted Comb +extrabees.item.comb.purple=Purple Tinted Comb +extrabees.item.comb.gray=Gray Tinted Comb +extrabees.item.comb.lightblue=Light Blue Tinted Comb +extrabees.item.comb.pink=Pink Tinted Comb +extrabees.item.comb.limegreen=Lime Green Tinted Comb +extrabees.item.comb.magenta=Magenta Tinted Comb +extrabees.item.comb.lightgray=Light Gray Tinted Comb +extrabees.item.comb.nickel=Nickel Comb +extrabees.item.comb.glowstone=Glowing Comb +extrabees.item.comb.saltpeter=Unstable Comb +extrabees.item.comb.compost=Decomposed Comb +extrabees.item.comb.sawdust=Dusty Comb +extrabees.item.comb.certus=Certus Comb +extrabees.item.comb.enderpearl=Shimmering Comb +extrabees.item.comb.yellorium=Yellorium Comb +extrabees.item.comb.cyanite=Cyanite Comb +extrabees.item.comb.blutonium=Blutonium Comb + +extrabees.item.honeydrop.energy=Energy Drop +extrabees.item.honeydrop.acid=Acidic Drop +extrabees.item.honeydrop.poison=Venomous Drop +extrabees.item.honeydrop.apple=Juicy Drop +extrabees.item.honeydrop.citrus=Bitter Drop +extrabees.item.honeydrop.ice=Kelvin Drop +extrabees.item.honeydrop.milk=Milkdew +extrabees.item.honeydrop.seed=Nutdew +extrabees.item.honeydrop.alcohol=Tipsy Drop +extrabees.item.honeydrop.fruit=Fruitdew +extrabees.item.honeydrop.vegetable=Leafy Drop +extrabees.item.honeydrop.pumpkin=Fleshy Drop +extrabees.item.honeydrop.melon=Glistening Drop +extrabees.item.honeydrop.red=Red Tinted Honey +extrabees.item.honeydrop.yellow=Yellow Tinted Honey +extrabees.item.honeydrop.blue=Blue Tinted Honey +extrabees.item.honeydrop.green=Green Tinted Honey +extrabees.item.honeydrop.black=Black Tinted Honey +extrabees.item.honeydrop.white=White Tinted Honey +extrabees.item.honeydrop.brown=Brown Tinted Honey +extrabees.item.honeydrop.orange=Orange Tinted Honey +extrabees.item.honeydrop.cyan=Cyan Tinted Honey +extrabees.item.honeydrop.purple=Purple Tinted Honey +extrabees.item.honeydrop.gray=Gray Tinted Honey +extrabees.item.honeydrop.lightblue=Light Blue Tinted Honey +extrabees.item.honeydrop.pink=Pink Tinted Honey +extrabees.item.honeydrop.limegreen=Lime Green Tinted Honey +extrabees.item.honeydrop.magenta=Magenta Tinted Honey +extrabees.item.honeydrop.lightgray=Light Gray Tinted Honey + +extrabees.item.propolis.water=Watery Propolis +extrabees.item.propolis.oil=Oily Propolis +extrabees.item.propolis.fuel=Petroleum Propolis +extrabees.item.propolis.creosote=Creosote Propolis +extrabees.item.propolis.peat=Peat Propolis + +extrabees.item.honeycrystal=Honey Crystal +extrabees.item.honeycrystal.empty=Depleted Honey Crystal + +extrabees.item.frame.cocoa=Chocolate Frame +extrabees.item.frame.cage=Restraint Frame +extrabees.item.frame.soul=Soul Frame +extrabees.item.frame.clay=Healing Frame +extrabees.item.frame.debug=Nova Frame + +extrabees.item.serum.tooltip.nocharge=Empty +extrabees.item.serum.tooltip.charge1=1 Charge +extrabees.item.serum.tooltip.manycharge=%d Charges +extrabees.item.serum.corrupted=Corrupted Serum +extrabees.item.serum.name=%s Serum +extrabees.item.serum.empty=Empty Serum + +extrabees.item.template.corrupted=Corrupted Template +extrabees.item.template.name=%s Template +extrabees.item.template.empty=Blank Template + + + + +extrabees.block.apiaristMachine.name=Apiarist Machine +extrabees.block.geneticMachine.name=Genetic Machine +extrabees.block.advGeneticMachine.name=Advanced Genetic Machine + +extrabees.block.ectoplasm.name=Ectoplasm + +extrabees.block.hive.0=Water Hive +extrabees.block.hive.1=Rock Hive +extrabees.block.hive.2=Nether Hive +extrabees.block.hive.3=Marble Hive + + +################################################## +## Liquids + +extrabees.liquid.acid=Acid +extrabees.liquid.poison=Poison +extrabees.liquid.glacial=Liquid Nitrogen +extrabees.liquid.dna=Liquid DNA + + + + +################################################## +## Machines + +extrabees.machine.alveay.frame=Frame Housing +extrabees.machine.alveay.frame.info=The Frame Housing holds one hive frame to alter a bee's traits. +extrabees.machine.alveay.lighting=Alveary Lighting +extrabees.machine.alveay.lighting.info=The Alveary Lighting tricks bees into thinking it is daylight at night time. +extrabees.machine.alveay.mutator=Mutator +extrabees.machine.alveay.mutator.info=The Mutator uses certain items in order to encourage bee mutation. +extrabees.machine.alveay.rainShield=Rain Shield +extrabees.machine.alveay.rainShield.info=The Rain Shield prevents bees from being affected by rainfall. +extrabees.machine.alveay.stimulator=Electrical Stimulator +extrabees.machine.alveay.stimulator.info=Uses circuits and power to stimulate bees in a way similar to frames. +extrabees.machine.alveay.hatchery=Hatchery +extrabees.machine.alveay.hatchery.info=Collect larvae laid by queen bees inside the alveary. +extrabees.machine.alveay.transmission=Alveary Transmission + + + + +################################################## +## Misc + +extrabees.circuit.layout.stimulator=Electrical Stimulator +extrabees.circuit.layout.stimulator.usage=In Electrical Stimulators +extrabees.tab.genetics=Genetics + +for.binnie.circuit.stimulator.lowvoltage=LV Stimulus +for.binnie.circuit.stimulator.highvoltage=HV Stimulus +for.binnie.circuit.stimulator.plant=Biotic Stimulus +for.binnie.circuit.stimulator.death=Charged Stimulus +for.binnie.circuit.stimulator.life=Gentle Stimulus +for.binnie.circuit.stimulator.nether=Molten Stimulus +for.binnie.circuit.stimulator.mutation=Mutagenic Stimulus +for.binnie.circuit.stimulator.inhibitor=Inhibiting Stimulus +for.binnie.circuit.stimulator.territory=Agitating Stimulus + +extrabees.genetics.quality.awful=Awful +extrabees.genetics.quality.poor=Poor +extrabees.genetics.quality.average=Average +extrabees.genetics.quality.good=Good +extrabees.genetics.quality.excellent=Excellent + +extrabees.genetics.quality.tooltip=%s Quality + +extrabees.genetics.allele.shortest=Shortest +extrabees.genetics.allele.shorter=Shorter +extrabees.genetics.allele.short=Short +extrabees.genetics.allele.shortened=Shortened +extrabees.genetics.allele.normal=Normal +extrabees.genetics.allele.elongated=Elongated +extrabees.genetics.allele.long=Long +extrabees.genetics.allele.longer=Longer +extrabees.genetics.allele.longest=Longest + +extrabees.genetics.allele.slowest=Slowest +extrabees.genetics.allele.slower=Slower +extrabees.genetics.allele.slow=Slow +extrabees.genetics.allele.norm=Normal +extrabees.genetics.allele.fast=Fast +extrabees.genetics.allele.faster=Faster +extrabees.genetics.allele.fastest=Fastest + +extrabees.genetics.allele.low=Low +extrabees.genetics.allele.high=High +extrabees.genetics.allele.maximum=Maximum + +extrabees.genetics.allele.average=Average + +extrabees.genetics.allele.default=Default +extrabees.genetics.allele.large=Large +extrabees.genetics.allele.larger=Larger +extrabees.genetics.allele.largest=Largest + +extrabees.genetics.allele.none=None +extrabees.genetics.allele.both1=Both 1 +extrabees.genetics.allele.both2=Both 2 +extrabees.genetics.allele.both3=Both 3 +extrabees.genetics.allele.both4=Both 4 +extrabees.genetics.allele.both5=Both 5 +extrabees.genetics.allele.up1=Up 1 +extrabees.genetics.allele.up2=Up 2 +extrabees.genetics.allele.up3=Up 3 +extrabees.genetics.allele.up4=Up 4 +extrabees.genetics.allele.up5=Up 5 +extrabees.genetics.allele.down1=Down 1 +extrabees.genetics.allele.down2=Down 2 +extrabees.genetics.allele.down3=Down 3 +extrabees.genetics.allele.down4=Down 4 +extrabees.genetics.allele.down5=Down 5 + +extrabees.genetics.allele.noeffect=Effect Cancellation +extrabees.genetics.allele.noflower=Non-pollination + +extrabees.genetics.allele.lifespan=%s Lifespan +extrabees.genetics.allele.production=%s Production +extrabees.genetics.allele.fertility=%s Fertility +extrabees.genetics.allele.flowering=%s Flowering +extrabees.genetics.allele.territory=%s Territory +extrabees.genetics.allele.tolerance=%s %s Tol. +extrabees.genetics.allele.species=%s Species +extrabees.genetics.allele.effect=%s Effect +extrabees.genetics.allele.flower=%s Pollination +extrabees.genetics.allele.humidity=Humid. +extrabees.genetics.allele.temperature=Temp. +extrabees.genetics.allele.nocturnal=Nocturnal +extrabees.genetics.allele.caveDwelling=Cave Dwelling +extrabees.genetics.allele.tolerantFlyer=Rainfall + +extrabees.genetics.corrupted=Corrupted + + + +extrabees.branch.barren.name=Barren +extrabees.branch.barren.desc=Although initially these bees are considerably useless due to their meagre combs, they can lead onto greater things. +extrabees.branch.hostile.name=Hostile +extrabees.branch.hostile.desc=Prone to summoning monsters out of the blue, these bees nonetheless make useful if distasteful products. +extrabees.branch.rocky.name=Rocky +extrabees.branch.rocky.desc=Found amoungst the rocks, these bees have very high tolarance to adverse conditions. +extrabees.branch.metallic.name=Rusty +extrabees.branch.metallic2.name=Metallic +extrabees.branch.alloy.name=Alloyed +extrabees.branch.farming.name=Agricultural +extrabees.branch.precious.name=Precious +extrabees.branch.mineral.name=Mineral +extrabees.branch.gemstone.name=Gemstone +extrabees.branch.nuclear.name=Nuclear +extrabees.branch.historic.name=Historic +extrabees.branch.fossilized.name=Fossilised +extrabees.branch.refined.name=Refined +extrabees.branch.aquatic.name=Aquatic +extrabees.branch.saccharine.name=Saccharine +extrabees.branch.volcanic.name=Volcanic +extrabees.branch.viscous.name=Viscous +extrabees.branch.virulent.name=Virulent +extrabees.branch.caustic.name=Caustic +extrabees.branch.energetic.name=Energetic +extrabees.branch.shadow.name=Shadow +extrabees.branch.primary.name=Primary +extrabees.branch.secondary.name=Secondary +extrabees.branch.tertiary.name=Tertiary +extrabees.branch.ftb.name=Beastly +extrabees.branch.quantum.name=Quantum + +extrabees.flowers.water.name=Lily Pads +extrabees.flowers.sugar.name=Reeds +extrabees.flowers.rock.name=Rocks +extrabees.flowers.book.name=Books +extrabees.flowers.dead.name=Dead Bushes +extrabees.flowers.redstone.name=Redstone +extrabees.flowers.wood.name=Wood +extrabees.flowers.leaves.name=Leaves +extrabees.flowers.sapling.name=Saplings +extrabees.flowers.fruit.name=Fruit +extrabees.flowers.mystical.name=Mystical + +extrabees.species.arid.name=Arid +extrabees.species.arid.desc=Fond of dry landscapes, their combs are quite waxy and contain less honey.|Apiarist Manual +extrabees.species.barren.name=Barren +extrabees.species.barren.desc=Preferring deserts, they can live their entire lives without seeing flowers of any kind.|Apiarist Manual +extrabees.species.desolate.name=Desolate +extrabees.species.desolate.desc=They thrive in blasted wastelands where other life simply withers away.|Apiarist Manual +extrabees.species.gnawing.name=Gnawing +extrabees.species.rotten.name=Decaying +extrabees.species.rotten.desc=These bees have an ususual attraction to dead, rotting meat and will store it in their combs. The smell also attracts other unsavoury types.|Apiarist Manual +extrabees.species.bone.name=Skeletal +extrabees.species.bone.desc=Largely unable to defend their hives in the wild, they attract other creatures to guard their homes.|Apiarist Manual +extrabees.species.creeper.name=Creepy +extrabees.species.creeper.desc=You're sure to get a bang out of these bees.|Binnie, Apiarist +extrabees.species.decomposing.name=Decomposing +extrabees.species.rock.name=Rocky +extrabees.species.rock.desc=If only I could find them Rolling Bees, then I might get some good music.|Mysterious Apiarist +extrabees.species.stone.name=Tolerant +extrabees.species.stone.desc=Part of their hive is made out of stone and use less wax than before.|Apiarist Manual +extrabees.species.granite.name=Robust +extrabees.species.granite.desc=Capable of burrowing through solid rock, they have an extraordinary affinity for minerals hidden in rocks.|Apiarist Manual +extrabees.species.mineral.name=Resilient +extrabees.species.mineral.desc=Generations of breeding Rocky bees and their offspring has resulted in offspring that have begun to consume minerals as part of their diet.|Apiarist Manual +extrabees.species.copper.name=Corroded +extrabees.species.copper.desc=These are infamous for causing power issues by gnawing on the copper wires in walls.|Apiarist Manual +extrabees.species.tin.name=Tarnished +extrabees.species.tin.desc=Their bodies have a metallic coating, which they shed and incorporate into their combs.|Apiarist Manual +extrabees.species.iron.name=Rusty +extrabees.species.iron.desc=Oh, rusty bees. Do I need a tetanus shot?|Jadedcat, Apiarist +extrabees.species.lead.name=Leaden +extrabees.species.lead.desc="It should be easy to turn these into gold!"|Pahimar, Alchemist +extrabees.species.zinc.name=Galvanized +extrabees.species.titanium.name=Impregnable +extrabees.species.bronze.name=Resolute +extrabees.species.brass.name=Brazen +extrabees.species.steel.name=Fortified +extrabees.species.tungstate.name=Invincible +extrabees.species.gold.name=Glittering +extrabees.species.silver.name=Shining +extrabees.species.electrum.name=Precious +extrabees.species.platinum.name=Valuable +extrabees.species.platinum.desc=Ohhhhh, look how shiny this bee is.|Jadedcat, Apiarist +extrabees.species.lapis.name=Lapis +extrabees.species.sodalite.name=Sodalite +extrabees.species.pyrite.name=Pyrite +extrabees.species.bauxite.name=Bauxite +extrabees.species.cinnabar.name=Cinnabar +extrabees.species.sphalerite.name=Sphalerite +extrabees.species.emerald.name=Emerald +extrabees.species.emerald.desc=Look at this bee, it's even shinier!|Jadedcat, Apiarist +extrabees.species.ruby.name=Ruby +extrabees.species.sapphire.name=Sapphire +extrabees.species.olivine.name=Olivine +extrabees.species.diamond.name=Diamond +extrabees.species.diamond.desc=Oh my god, this is definitely the shiniest bee!|Jadedcat, Apiarist +extrabees.species.unstable.name=Unstable +extrabees.species.nuclear.name=Nuclear +extrabees.species.radioactive.name=Radioactive +extrabees.species.ancient.name=Ancient +extrabees.species.primeval.name=Primeval +extrabees.species.prehistoric.name=Prehistoric +extrabees.species.relic.name=Relic +extrabees.species.coal.name=Fossilised +extrabees.species.resin.name=Resinous +extrabees.species.oil.name=Oily +extrabees.species.peat.name=Preserved +extrabees.species.distilled.name=Distilled +extrabees.species.fuel.name=Refined +extrabees.species.creosote.name=Tarry +extrabees.species.latex.name=Elastic +extrabees.species.water.name=Water +extrabees.species.river.name=River +extrabees.species.ocean.name=Ocean +extrabees.species.ink.name=Stained +extrabees.species.growing.name=Growing +extrabees.species.thriving.name=Thriving +extrabees.species.blooming.name=Blooming +extrabees.species.sweet.name=Sweetened +extrabees.species.sugar.name=Sugary +extrabees.species.ripening.name=Ripening +extrabees.species.fruit.name=Fruity +extrabees.species.alcohol.name=Fermented +extrabees.species.alcohol.desc=Go home bee, you're drunk.|Jadedcat, Apiarist +extrabees.species.farm.name=Farmed +extrabees.species.milk.name=Bovine +extrabees.species.milk.desc="Moo. I mean, Bzzz."|Confused Bee +extrabees.species.coffee.name=Caffeinated +extrabees.species.coffee.desc=The only drawback is that they don't actually brew the coffee for you.|Apiarist Manual +extrabees.species.citrus.name=Citrus +extrabees.species.mint.name=Minty +extrabees.species.swamp.name=Damp +extrabees.species.boggy.name=Sodden +extrabees.species.fungal.name=Fungal +extrabees.species.basalt.name=Embittered +extrabees.species.basalt.desc=It is unknown how they first arrived in the Nether, but its influence has made them aggresive.|Apiarist Manual +extrabees.species.tempered.name=Furious +extrabees.species.tempered.desc=An unusual mutation has activated recessive genes that cause high levels of anger in this bee.|Apiarist Manual +extrabees.species.volcanic.name=Volcanic +extrabees.species.volcanic.desc=At some point during their evolution, they seem to have acquired traits from Blazes.|Apiarist Manual +extrabees.species.malicious.name=Malicious +extrabees.species.infectious.name=Infectious +extrabees.species.virulent.name=Virulent +extrabees.species.viscous.name=Viscous +extrabees.species.glutinous.name=Glutinous +extrabees.species.sticky.name=Sticky +extrabees.species.corrosive.name=Corrosive +extrabees.species.caustic.name=Caustic +extrabees.species.acidic.name=Acidic +extrabees.species.excited.name=Excited +extrabees.species.excited.desc=Redstone acts as a source of extra energy for these bees.|Apiarist Manual +extrabees.species.energetic.name=Energetic +extrabees.species.energetic.desc=Oh my god. Something happened. House on fire, house on fire.|Generikb, Panicked Apiarist +extrabees.species.ecstatic.name=Ecstatic +extrabees.species.ecstatic.desc=After accumulating excessive static electricity from Redstone, they produce powerful lightning arcs. Use caution, and maybe a lightning rod.|Apiarist Manual +extrabees.species.artic.name=Frigid +extrabees.species.freezing.name=Absolute +extrabees.species.shadow.name=Shadowed +extrabees.species.darkened.name=Darkened +extrabees.species.abyss.name=Abyssal +extrabees.species.red.name=Maroon +extrabees.species.red.desc=Don't let them sting you, or you may be seeing red.|Apiarist Manual +extrabees.species.yellow.name=Saffron +extrabees.species.yellow.desc=They're dyeing to brighten your day with their honey.|Apiarist Manual +extrabees.species.blue.name=Prussian +extrabees.species.blue.desc="Cheer up, bee. You're looking a little blue."|Mysterious Apiarist +extrabees.species.green.name=Natural +extrabees.species.green.desc=Perhaps it is an attempt at camoflauge, but these bees have begun producing dyes that match the colour of leaves and grass.|Apiarist Manual +extrabees.species.black.name=Ebony +extrabees.species.white.name=Bleached +extrabees.species.brown.name=Sepia +extrabees.species.orange.name=Amber +extrabees.species.cyan.name=Turquoise +extrabees.species.purple.name=Indigo +extrabees.species.gray.name=Slate +extrabees.species.lightblue.name=Azure +extrabees.species.pink.name=Lavender +extrabees.species.limegreen.name=Lime +extrabees.species.magenta.name=Fuchsia +extrabees.species.lightgray.name=Ashen +extrabees.species.celebratory.name=Celebratory +extrabees.species.jaded.name=Jaded +extrabees.species.jaded.desc=I bred all the bees and all I got is some bloody purple dye!|Jaded, Sengir's Chosen +extrabees.species.glowstone.name=Glowering +extrabees.species.hazardous.name=Hazardous +extrabees.species.nickel.name=Lustered +extrabees.species.invar.name=Lustrous +extrabees.species.quantum.name=Quantum +extrabees.species.spatial.name=Spatial +extrabees.species.unusual.name=Abnormal +extrabees.species.yellorium.name=Yellorium +extrabees.species.cyanite.name=Cyanite +extrabees.species.blutonium.name=Blutonium +extrabees.species.mystical.name=Mystical + +extrabees.effect.ectoplasm.name=Ectoplasm +extrabees.effect.acid.name=Acidic +extrabees.effect.spawn_zombie.name=Zombies +extrabees.effect.spawn_skeleton.name=Skeletons +extrabees.effect.spawn_creeper.name=Creepers +extrabees.effect.lightning.name=Lightning +extrabees.effect.radioactive.name=Unstable +extrabees.effect.meteor.name=Meteor +extrabees.effect.hunger.name=Hunger +extrabees.effect.food.name=Nourishment +extrabees.effect.blindness.name=Darkness +extrabees.effect.confusion.name=Confusion +extrabees.effect.fireworks.name=Fireworks +extrabees.effect.festival.name=Festival +extrabees.effect.birthday.name=Birthday +extrabees.effect.teleport.name=Teleport +extrabees.effect.gravity.name=Gravity +extrabees.effect.thief.name=Antigravity +extrabees.effect.wither.name=Wither +extrabees.effect.water.name=Water +extrabees.effect.slow.name=Slowness +extrabees.effect.bonemealsapling.name=Growth +extrabees.effect.bonemealfruit.name=Ripening +extrabees.effect.bonemealmushroom.name=Mushroom +extrabees.effect.power.name=Power + + + + +extrabees.gui.database.tab.species.overview=Overview +extrabees.gui.database.tab.species.classification=Classification +extrabees.gui.database.tab.species.genome=Genome +extrabees.gui.database.tab.species.products=Products +extrabees.gui.database.tab.species.climate=Climate +extrabees.gui.database.tab.species.resultant=Resultant Mutations +extrabees.gui.database.tab.species.further=Further Mutations +extrabees.gui.database.tab.branches.overview=Overview +extrabees.gui.database.tab.branches.species=Species +extrabees.gui.database.tab.breeder=Breeder \ No newline at end of file diff --git a/src/main/resources/assets/extrabees/textures/blocks/ectoplasm.png b/src/main/resources/assets/extrabees/textures/blocks/ectoplasm.png new file mode 100644 index 00000000..ace5536b Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/blocks/ectoplasm.png differ diff --git a/src/main/resources/assets/extrabees/textures/blocks/hive/marble.0.png b/src/main/resources/assets/extrabees/textures/blocks/hive/marble.0.png new file mode 100644 index 00000000..6d0352e3 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/blocks/hive/marble.0.png differ diff --git a/src/main/resources/assets/extrabees/textures/blocks/hive/marble.1.png b/src/main/resources/assets/extrabees/textures/blocks/hive/marble.1.png new file mode 100644 index 00000000..0c05f7dc Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/blocks/hive/marble.1.png differ diff --git a/src/main/resources/assets/extrabees/textures/blocks/hive/nether.0.png b/src/main/resources/assets/extrabees/textures/blocks/hive/nether.0.png new file mode 100644 index 00000000..6c8f1af3 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/blocks/hive/nether.0.png differ diff --git a/src/main/resources/assets/extrabees/textures/blocks/hive/nether.1.png b/src/main/resources/assets/extrabees/textures/blocks/hive/nether.1.png new file mode 100644 index 00000000..169b3961 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/blocks/hive/nether.1.png differ diff --git a/src/main/resources/assets/extrabees/textures/blocks/hive/rock.0.png b/src/main/resources/assets/extrabees/textures/blocks/hive/rock.0.png new file mode 100644 index 00000000..396f4137 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/blocks/hive/rock.0.png differ diff --git a/src/main/resources/assets/extrabees/textures/blocks/hive/rock.1.png b/src/main/resources/assets/extrabees/textures/blocks/hive/rock.1.png new file mode 100644 index 00000000..f8764225 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/blocks/hive/rock.1.png differ diff --git a/src/main/resources/assets/extrabees/textures/blocks/hive/water.0.png b/src/main/resources/assets/extrabees/textures/blocks/hive/water.0.png new file mode 100644 index 00000000..e3512a38 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/blocks/hive/water.0.png differ diff --git a/src/main/resources/assets/extrabees/textures/blocks/hive/water.1.png b/src/main/resources/assets/extrabees/textures/blocks/hive/water.1.png new file mode 100644 index 00000000..ec891f0e Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/blocks/hive/water.1.png differ diff --git a/src/main/resources/assets/extrabees/textures/blocks/liquids/acid.png b/src/main/resources/assets/extrabees/textures/blocks/liquids/acid.png new file mode 100644 index 00000000..f06308fd Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/blocks/liquids/acid.png differ diff --git a/src/main/resources/assets/extrabees/textures/blocks/liquids/acid.png.mcmeta b/src/main/resources/assets/extrabees/textures/blocks/liquids/acid.png.mcmeta new file mode 100644 index 00000000..0c36dcaa --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/blocks/liquids/acid.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":32,"frametime":1,"frames":[{"index":0,"time":2},{"index":1,"time":2},{"index":2,"time":2},{"index":3,"time":2},{"index":4,"time":2},{"index":5,"time":2},{"index":6,"time":2},{"index":7,"time":2},{"index":8,"time":2},{"index":9,"time":2},{"index":10,"time":2},{"index":11,"time":2},{"index":12,"time":2},{"index":13,"time":2},{"index":14,"time":2},{"index":15,"time":2},{"index":16,"time":2},{"index":17,"time":2},{"index":18,"time":2},{"index":19,"time":2},{"index":20,"time":2},{"index":21,"time":2},{"index":22,"time":2},{"index":23,"time":2},{"index":24,"time":2},{"index":25,"time":2},{"index":26,"time":2},{"index":27,"time":2},{"index":28,"time":2},{"index":29,"time":2},{"index":30,"time":2},{"index":31,"time":2}]}} \ No newline at end of file diff --git a/src/main/resources/assets/extrabees/textures/blocks/liquids/acid.txt b/src/main/resources/assets/extrabees/textures/blocks/liquids/acid.txt new file mode 100644 index 00000000..d8fe765a --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/blocks/liquids/acid.txt @@ -0,0 +1,32 @@ +0*2 +1*2 +2*2 +3*2 +4*2 +5*2 +6*2 +7*2 +8*2 +9*2 +10*2 +11*2 +12*2 +13*2 +14*2 +15*2 +16*2 +17*2 +18*2 +19*2 +20*2 +21*2 +22*2 +23*2 +24*2 +25*2 +26*2 +27*2 +28*2 +29*2 +30*2 +31*2 diff --git a/src/main/resources/assets/extrabees/textures/blocks/liquids/dna.png b/src/main/resources/assets/extrabees/textures/blocks/liquids/dna.png new file mode 100644 index 00000000..3c3070af Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/blocks/liquids/dna.png differ diff --git a/src/main/resources/assets/extrabees/textures/blocks/liquids/dna.png.mcmeta b/src/main/resources/assets/extrabees/textures/blocks/liquids/dna.png.mcmeta new file mode 100644 index 00000000..d54a6c5e --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/blocks/liquids/dna.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":32,"frametime":1,"frames":[{"index":0,"time":5},{"index":1,"time":3},{"index":2,"time":5},{"index":3,"time":3},{"index":4,"time":5},{"index":5,"time":3},{"index":6,"time":5},{"index":7,"time":3},{"index":8,"time":5},{"index":9,"time":3},{"index":10,"time":5},{"index":11,"time":3},{"index":12,"time":5},{"index":13,"time":3},{"index":14,"time":5},{"index":15,"time":3},{"index":16,"time":5},{"index":17,"time":3},{"index":18,"time":5},{"index":19,"time":3},{"index":20,"time":5},{"index":21,"time":3},{"index":22,"time":5},{"index":23,"time":3},{"index":24,"time":5},{"index":25,"time":3},{"index":26,"time":5},{"index":27,"time":3},{"index":28,"time":5},{"index":29,"time":3},{"index":30,"time":5},{"index":31,"time":3}]}} \ No newline at end of file diff --git a/src/main/resources/assets/extrabees/textures/blocks/liquids/dna.txt b/src/main/resources/assets/extrabees/textures/blocks/liquids/dna.txt new file mode 100644 index 00000000..acb88088 --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/blocks/liquids/dna.txt @@ -0,0 +1,32 @@ +0*5 +1*3 +2*5 +3*3 +4*5 +5*3 +6*5 +7*3 +8*5 +9*3 +10*5 +11*3 +12*5 +13*3 +14*5 +15*3 +16*5 +17*3 +18*5 +19*3 +20*5 +21*3 +22*5 +23*3 +24*5 +25*3 +26*5 +27*3 +28*5 +29*3 +30*5 +31*3 diff --git a/src/main/resources/assets/extrabees/textures/blocks/liquids/liquidnitrogen.png b/src/main/resources/assets/extrabees/textures/blocks/liquids/liquidnitrogen.png new file mode 100644 index 00000000..f1dcb2c3 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/blocks/liquids/liquidnitrogen.png differ diff --git a/src/main/resources/assets/extrabees/textures/blocks/liquids/liquidnitrogen.png.mcmeta b/src/main/resources/assets/extrabees/textures/blocks/liquids/liquidnitrogen.png.mcmeta new file mode 100644 index 00000000..0c36dcaa --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/blocks/liquids/liquidnitrogen.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":32,"frametime":1,"frames":[{"index":0,"time":2},{"index":1,"time":2},{"index":2,"time":2},{"index":3,"time":2},{"index":4,"time":2},{"index":5,"time":2},{"index":6,"time":2},{"index":7,"time":2},{"index":8,"time":2},{"index":9,"time":2},{"index":10,"time":2},{"index":11,"time":2},{"index":12,"time":2},{"index":13,"time":2},{"index":14,"time":2},{"index":15,"time":2},{"index":16,"time":2},{"index":17,"time":2},{"index":18,"time":2},{"index":19,"time":2},{"index":20,"time":2},{"index":21,"time":2},{"index":22,"time":2},{"index":23,"time":2},{"index":24,"time":2},{"index":25,"time":2},{"index":26,"time":2},{"index":27,"time":2},{"index":28,"time":2},{"index":29,"time":2},{"index":30,"time":2},{"index":31,"time":2}]}} \ No newline at end of file diff --git a/src/main/resources/assets/extrabees/textures/blocks/liquids/liquidnitrogen.txt b/src/main/resources/assets/extrabees/textures/blocks/liquids/liquidnitrogen.txt new file mode 100644 index 00000000..d8fe765a --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/blocks/liquids/liquidnitrogen.txt @@ -0,0 +1,32 @@ +0*2 +1*2 +2*2 +3*2 +4*2 +5*2 +6*2 +7*2 +8*2 +9*2 +10*2 +11*2 +12*2 +13*2 +14*2 +15*2 +16*2 +17*2 +18*2 +19*2 +20*2 +21*2 +22*2 +23*2 +24*2 +25*2 +26*2 +27*2 +28*2 +29*2 +30*2 +31*2 diff --git a/src/main/resources/assets/extrabees/textures/blocks/liquids/molten.png b/src/main/resources/assets/extrabees/textures/blocks/liquids/molten.png new file mode 100644 index 00000000..ded8f70d Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/blocks/liquids/molten.png differ diff --git a/src/main/resources/assets/extrabees/textures/blocks/liquids/molten.png.mcmeta b/src/main/resources/assets/extrabees/textures/blocks/liquids/molten.png.mcmeta new file mode 100644 index 00000000..0c36dcaa --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/blocks/liquids/molten.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":32,"frametime":1,"frames":[{"index":0,"time":2},{"index":1,"time":2},{"index":2,"time":2},{"index":3,"time":2},{"index":4,"time":2},{"index":5,"time":2},{"index":6,"time":2},{"index":7,"time":2},{"index":8,"time":2},{"index":9,"time":2},{"index":10,"time":2},{"index":11,"time":2},{"index":12,"time":2},{"index":13,"time":2},{"index":14,"time":2},{"index":15,"time":2},{"index":16,"time":2},{"index":17,"time":2},{"index":18,"time":2},{"index":19,"time":2},{"index":20,"time":2},{"index":21,"time":2},{"index":22,"time":2},{"index":23,"time":2},{"index":24,"time":2},{"index":25,"time":2},{"index":26,"time":2},{"index":27,"time":2},{"index":28,"time":2},{"index":29,"time":2},{"index":30,"time":2},{"index":31,"time":2}]}} \ No newline at end of file diff --git a/src/main/resources/assets/extrabees/textures/blocks/liquids/molten.txt b/src/main/resources/assets/extrabees/textures/blocks/liquids/molten.txt new file mode 100644 index 00000000..d8fe765a --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/blocks/liquids/molten.txt @@ -0,0 +1,32 @@ +0*2 +1*2 +2*2 +3*2 +4*2 +5*2 +6*2 +7*2 +8*2 +9*2 +10*2 +11*2 +12*2 +13*2 +14*2 +15*2 +16*2 +17*2 +18*2 +19*2 +20*2 +21*2 +22*2 +23*2 +24*2 +25*2 +26*2 +27*2 +28*2 +29*2 +30*2 +31*2 diff --git a/src/main/resources/assets/extrabees/textures/blocks/liquids/poison.png b/src/main/resources/assets/extrabees/textures/blocks/liquids/poison.png new file mode 100644 index 00000000..f173787d Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/blocks/liquids/poison.png differ diff --git a/src/main/resources/assets/extrabees/textures/blocks/liquids/poison.png.mcmeta b/src/main/resources/assets/extrabees/textures/blocks/liquids/poison.png.mcmeta new file mode 100644 index 00000000..0c36dcaa --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/blocks/liquids/poison.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":32,"frametime":1,"frames":[{"index":0,"time":2},{"index":1,"time":2},{"index":2,"time":2},{"index":3,"time":2},{"index":4,"time":2},{"index":5,"time":2},{"index":6,"time":2},{"index":7,"time":2},{"index":8,"time":2},{"index":9,"time":2},{"index":10,"time":2},{"index":11,"time":2},{"index":12,"time":2},{"index":13,"time":2},{"index":14,"time":2},{"index":15,"time":2},{"index":16,"time":2},{"index":17,"time":2},{"index":18,"time":2},{"index":19,"time":2},{"index":20,"time":2},{"index":21,"time":2},{"index":22,"time":2},{"index":23,"time":2},{"index":24,"time":2},{"index":25,"time":2},{"index":26,"time":2},{"index":27,"time":2},{"index":28,"time":2},{"index":29,"time":2},{"index":30,"time":2},{"index":31,"time":2}]}} \ No newline at end of file diff --git a/src/main/resources/assets/extrabees/textures/blocks/liquids/poison.txt b/src/main/resources/assets/extrabees/textures/blocks/liquids/poison.txt new file mode 100644 index 00000000..d8fe765a --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/blocks/liquids/poison.txt @@ -0,0 +1,32 @@ +0*2 +1*2 +2*2 +3*2 +4*2 +5*2 +6*2 +7*2 +8*2 +9*2 +10*2 +11*2 +12*2 +13*2 +14*2 +15*2 +16*2 +17*2 +18*2 +19*2 +20*2 +21*2 +22*2 +23*2 +24*2 +25*2 +26*2 +27*2 +28*2 +29*2 +30*2 +31*2 diff --git a/src/main/resources/assets/extrabees/textures/fx/fx.png b/src/main/resources/assets/extrabees/textures/fx/fx.png new file mode 100644 index 00000000..9f69ad87 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/fx/fx.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/Acclimatiser.png b/src/main/resources/assets/extrabees/textures/gui/Acclimatiser.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/Acclimatiser.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/AlvearyFrame.png b/src/main/resources/assets/extrabees/textures/gui/AlvearyFrame.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/AlvearyFrame.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/AlvearyMutator.png b/src/main/resources/assets/extrabees/textures/gui/AlvearyMutator.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/AlvearyMutator.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/AlvearyStimulator.png b/src/main/resources/assets/extrabees/textures/gui/AlvearyStimulator.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/AlvearyStimulator.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/Database.png b/src/main/resources/assets/extrabees/textures/gui/Database.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/Database.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/Database2.png b/src/main/resources/assets/extrabees/textures/gui/Database2.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/Database2.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/Genepool.png b/src/main/resources/assets/extrabees/textures/gui/Genepool.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/Genepool.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/Indexer.png b/src/main/resources/assets/extrabees/textures/gui/Indexer.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/Indexer.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/Indexer2.png b/src/main/resources/assets/extrabees/textures/gui/Indexer2.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/Indexer2.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/Inoculator.png b/src/main/resources/assets/extrabees/textures/gui/Inoculator.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/Inoculator.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/Inoculator2.png b/src/main/resources/assets/extrabees/textures/gui/Inoculator2.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/Inoculator2.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/Isolator.png b/src/main/resources/assets/extrabees/textures/gui/Isolator.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/Isolator.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/Isolator2.png b/src/main/resources/assets/extrabees/textures/gui/Isolator2.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/Isolator2.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/Purifier.png b/src/main/resources/assets/extrabees/textures/gui/Purifier.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/Purifier.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/Replicator.png b/src/main/resources/assets/extrabees/textures/gui/Replicator.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/Replicator.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/Replicator2.png b/src/main/resources/assets/extrabees/textures/gui/Replicator2.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/Replicator2.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/Sequencer.png b/src/main/resources/assets/extrabees/textures/gui/Sequencer.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/Sequencer.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/Splicer.png b/src/main/resources/assets/extrabees/textures/gui/Splicer.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/Splicer.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/Splicer2.png b/src/main/resources/assets/extrabees/textures/gui/Splicer2.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/Splicer2.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/Synthesizer.png b/src/main/resources/assets/extrabees/textures/gui/Synthesizer.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/Synthesizer.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/processes.png b/src/main/resources/assets/extrabees/textures/gui/processes.png new file mode 100644 index 00000000..ebcb2a28 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/processes.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/processes2.png b/src/main/resources/assets/extrabees/textures/gui/processes2.png new file mode 100644 index 00000000..0550694a Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/processes2.png differ diff --git a/src/main/resources/assets/extrabees/textures/gui/punnett.png b/src/main/resources/assets/extrabees/textures/gui/punnett.png new file mode 100644 index 00000000..42780195 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/gui/punnett.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/actions/CancelTask.png b/src/main/resources/assets/extrabees/textures/items/actions/CancelTask.png new file mode 100644 index 00000000..333181a1 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/actions/CancelTask.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/actions/PauseProcess.png b/src/main/resources/assets/extrabees/textures/items/actions/PauseProcess.png new file mode 100644 index 00000000..1bcc91fd Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/actions/PauseProcess.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/apiaristDatabase.png b/src/main/resources/assets/extrabees/textures/items/apiaristDatabase.png new file mode 100644 index 00000000..63119d8b Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/apiaristDatabase.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/beekeepingPage.png b/src/main/resources/assets/extrabees/textures/items/beekeepingPage.png new file mode 100644 index 00000000..81c07bff Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/beekeepingPage.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/body1.png b/src/main/resources/assets/extrabees/textures/items/bees/jaded/body1.png new file mode 100644 index 00000000..a400d7c9 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/bees/jaded/body1.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/drone.body2.png b/src/main/resources/assets/extrabees/textures/items/bees/jaded/drone.body2.png new file mode 100644 index 00000000..bf43cf61 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/bees/jaded/drone.body2.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/drone.body2.png.mcmeta b/src/main/resources/assets/extrabees/textures/items/bees/jaded/drone.body2.png.mcmeta new file mode 100644 index 00000000..0e1c12b6 --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/items/bees/jaded/drone.body2.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":5,"frametime":1,"frames":[{"index":0,"time":64},{"index":1,"time":2},{"index":2,"time":2},{"index":1,"time":2},{"index":0,"time":96},{"index":3,"time":4},{"index":0,"time":128},{"index":4,"time":2}]}} \ No newline at end of file diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/drone.body2.txt b/src/main/resources/assets/extrabees/textures/items/bees/jaded/drone.body2.txt new file mode 100644 index 00000000..1ec94148 --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/items/bees/jaded/drone.body2.txt @@ -0,0 +1,8 @@ +0*64 +1*2 +2*2 +1*2 +0*96 +3*4 +0*128 +4*2 diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/drone.outline.png b/src/main/resources/assets/extrabees/textures/items/bees/jaded/drone.outline.png new file mode 100644 index 00000000..494920b7 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/bees/jaded/drone.outline.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/drone.outline.png.mcmeta b/src/main/resources/assets/extrabees/textures/items/bees/jaded/drone.outline.png.mcmeta new file mode 100644 index 00000000..0e1c12b6 --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/items/bees/jaded/drone.outline.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":5,"frametime":1,"frames":[{"index":0,"time":64},{"index":1,"time":2},{"index":2,"time":2},{"index":1,"time":2},{"index":0,"time":96},{"index":3,"time":4},{"index":0,"time":128},{"index":4,"time":2}]}} \ No newline at end of file diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/drone.outline.txt b/src/main/resources/assets/extrabees/textures/items/bees/jaded/drone.outline.txt new file mode 100644 index 00000000..1ec94148 --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/items/bees/jaded/drone.outline.txt @@ -0,0 +1,8 @@ +0*64 +1*2 +2*2 +1*2 +0*96 +3*4 +0*128 +4*2 diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.body.png b/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.body.png new file mode 100644 index 00000000..0f63aaf5 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.body.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.body.png.mcmeta b/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.body.png.mcmeta new file mode 100644 index 00000000..952d5f22 --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.body.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":2,"frametime":1,"frames":[{"index":0,"time":64},{"index":1,"time":2},{"index":0,"time":48},{"index":1,"time":2}]}} \ No newline at end of file diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.body.txt b/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.body.txt new file mode 100644 index 00000000..c3822c62 --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.body.txt @@ -0,0 +1,5 @@ +0*64 +1*2 +0*48 +1*2 + diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.body2.png b/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.body2.png new file mode 100644 index 00000000..a5027233 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.body2.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.body2.png.mcmeta b/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.body2.png.mcmeta new file mode 100644 index 00000000..952d5f22 --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.body2.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":2,"frametime":1,"frames":[{"index":0,"time":64},{"index":1,"time":2},{"index":0,"time":48},{"index":1,"time":2}]}} \ No newline at end of file diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.body2.txt b/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.body2.txt new file mode 100644 index 00000000..c3822c62 --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.body2.txt @@ -0,0 +1,5 @@ +0*64 +1*2 +0*48 +1*2 + diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.outline.png b/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.outline.png new file mode 100644 index 00000000..44430b19 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.outline.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.outline.png.mcmeta b/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.outline.png.mcmeta new file mode 100644 index 00000000..952d5f22 --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.outline.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":2,"frametime":1,"frames":[{"index":0,"time":64},{"index":1,"time":2},{"index":0,"time":48},{"index":1,"time":2}]}} \ No newline at end of file diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.outline.txt b/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.outline.txt new file mode 100644 index 00000000..c3822c62 --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/items/bees/jaded/larvae.outline.txt @@ -0,0 +1,5 @@ +0*64 +1*2 +0*48 +1*2 + diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/princess.body2.png b/src/main/resources/assets/extrabees/textures/items/bees/jaded/princess.body2.png new file mode 100644 index 00000000..f838cdb9 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/bees/jaded/princess.body2.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/princess.body2.png.mcmeta b/src/main/resources/assets/extrabees/textures/items/bees/jaded/princess.body2.png.mcmeta new file mode 100644 index 00000000..5ea42da8 --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/items/bees/jaded/princess.body2.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":6,"frametime":1,"frames":[{"index":0,"time":76},{"index":5,"time":20},{"index":3,"time":4},{"index":0,"time":64},{"index":4,"time":2},{"index":0,"time":112},{"index":5,"time":16},{"index":1,"time":2},{"index":2,"time":2},{"index":1,"time":2}]}} \ No newline at end of file diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/princess.body2.txt b/src/main/resources/assets/extrabees/textures/items/bees/jaded/princess.body2.txt new file mode 100644 index 00000000..d7f49ad1 --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/items/bees/jaded/princess.body2.txt @@ -0,0 +1,10 @@ +0*76 +5*20 +3*4 +0*64 +4*2 +0*112 +5*16 +1*2 +2*2 +1*2 \ No newline at end of file diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/princess.outline.png b/src/main/resources/assets/extrabees/textures/items/bees/jaded/princess.outline.png new file mode 100644 index 00000000..494920b7 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/bees/jaded/princess.outline.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/princess.outline.png.mcmeta b/src/main/resources/assets/extrabees/textures/items/bees/jaded/princess.outline.png.mcmeta new file mode 100644 index 00000000..66c13589 --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/items/bees/jaded/princess.outline.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":5,"frametime":1,"frames":[{"index":0,"time":128},{"index":3,"time":4},{"index":0,"time":96},{"index":1,"time":2},{"index":2,"time":2},{"index":1,"time":2},{"index":0,"time":64},{"index":4,"time":2}]}} \ No newline at end of file diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/princess.outline.txt b/src/main/resources/assets/extrabees/textures/items/bees/jaded/princess.outline.txt new file mode 100644 index 00000000..91fce38b --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/items/bees/jaded/princess.outline.txt @@ -0,0 +1,8 @@ +0*128 +3*4 +0*96 +1*2 +2*2 +1*2 +0*64 +4*2 diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/queen.body2.png b/src/main/resources/assets/extrabees/textures/items/bees/jaded/queen.body2.png new file mode 100644 index 00000000..ce18ea88 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/bees/jaded/queen.body2.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/queen.body2.png.mcmeta b/src/main/resources/assets/extrabees/textures/items/bees/jaded/queen.body2.png.mcmeta new file mode 100644 index 00000000..5ea42da8 --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/items/bees/jaded/queen.body2.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":6,"frametime":1,"frames":[{"index":0,"time":76},{"index":5,"time":20},{"index":3,"time":4},{"index":0,"time":64},{"index":4,"time":2},{"index":0,"time":112},{"index":5,"time":16},{"index":1,"time":2},{"index":2,"time":2},{"index":1,"time":2}]}} \ No newline at end of file diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/queen.body2.txt b/src/main/resources/assets/extrabees/textures/items/bees/jaded/queen.body2.txt new file mode 100644 index 00000000..68268e1b --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/items/bees/jaded/queen.body2.txt @@ -0,0 +1,10 @@ +0*76 +5*20 +3*4 +0*64 +4*2 +0*112 +5*16 +1*2 +2*2 +1*2 diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/queen.outline.png b/src/main/resources/assets/extrabees/textures/items/bees/jaded/queen.outline.png new file mode 100644 index 00000000..494920b7 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/bees/jaded/queen.outline.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/queen.outline.png.mcmeta b/src/main/resources/assets/extrabees/textures/items/bees/jaded/queen.outline.png.mcmeta new file mode 100644 index 00000000..ec8d8cac --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/items/bees/jaded/queen.outline.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":5,"frametime":1,"frames":[{"index":0,"time":96},{"index":3,"time":4},{"index":0,"time":64},{"index":4,"time":2},{"index":0,"time":128},{"index":1,"time":2},{"index":2,"time":2},{"index":1,"time":2}]}} \ No newline at end of file diff --git a/src/main/resources/assets/extrabees/textures/items/bees/jaded/queen.outline.txt b/src/main/resources/assets/extrabees/textures/items/bees/jaded/queen.outline.txt new file mode 100644 index 00000000..f873d1c3 --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/items/bees/jaded/queen.outline.txt @@ -0,0 +1,8 @@ +0*96 +3*4 +0*64 +4*2 +0*128 +1*2 +2*2 +1*2 diff --git a/src/main/resources/assets/extrabees/textures/items/bees/pahi/princess.png b/src/main/resources/assets/extrabees/textures/items/bees/pahi/princess.png new file mode 100644 index 00000000..3df00d9d Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/bees/pahi/princess.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/cast.png b/src/main/resources/assets/extrabees/textures/items/cast.png new file mode 100644 index 00000000..2154a224 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/cast.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/cast/axe.png b/src/main/resources/assets/extrabees/textures/items/cast/axe.png new file mode 100644 index 00000000..965dd7ad Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/cast/axe.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/cast/block.png b/src/main/resources/assets/extrabees/textures/items/cast/block.png new file mode 100644 index 00000000..1fc5a986 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/cast/block.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/cast/boots.png b/src/main/resources/assets/extrabees/textures/items/cast/boots.png new file mode 100644 index 00000000..3b0d5d0e Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/cast/boots.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/cast/chestplate.png b/src/main/resources/assets/extrabees/textures/items/cast/chestplate.png new file mode 100644 index 00000000..43cfd3a7 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/cast/chestplate.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/cast/gear.png b/src/main/resources/assets/extrabees/textures/items/cast/gear.png new file mode 100644 index 00000000..9b3fc03a Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/cast/gear.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/cast/helmet.png b/src/main/resources/assets/extrabees/textures/items/cast/helmet.png new file mode 100644 index 00000000..49664a73 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/cast/helmet.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/cast/hoe.png b/src/main/resources/assets/extrabees/textures/items/cast/hoe.png new file mode 100644 index 00000000..671abc40 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/cast/hoe.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/cast/legging.png b/src/main/resources/assets/extrabees/textures/items/cast/legging.png new file mode 100644 index 00000000..3befbba5 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/cast/legging.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/cast/pickaxe.png b/src/main/resources/assets/extrabees/textures/items/cast/pickaxe.png new file mode 100644 index 00000000..80d2e00c Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/cast/pickaxe.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/cast/shovel.png b/src/main/resources/assets/extrabees/textures/items/cast/shovel.png new file mode 100644 index 00000000..1aae41e2 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/cast/shovel.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/fieldGlass.png b/src/main/resources/assets/extrabees/textures/items/fieldGlass.png new file mode 100644 index 00000000..c945c2c7 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/fieldGlass.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/fieldKit.png b/src/main/resources/assets/extrabees/textures/items/fieldKit.png new file mode 100644 index 00000000..34a7d62d Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/fieldKit.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/frameCage.png b/src/main/resources/assets/extrabees/textures/items/frameCage.png new file mode 100644 index 00000000..6fde61e7 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/frameCage.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/frameClay.png b/src/main/resources/assets/extrabees/textures/items/frameClay.png new file mode 100644 index 00000000..3e84afd5 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/frameClay.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/frameCocoa.png b/src/main/resources/assets/extrabees/textures/items/frameCocoa.png new file mode 100644 index 00000000..bab69efe Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/frameCocoa.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/frameDebug.png b/src/main/resources/assets/extrabees/textures/items/frameDebug.png new file mode 100644 index 00000000..7556e0be Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/frameDebug.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/frameSoul.png b/src/main/resources/assets/extrabees/textures/items/frameSoul.png new file mode 100644 index 00000000..e4a36e79 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/frameSoul.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/helix.png b/src/main/resources/assets/extrabees/textures/items/helix.png new file mode 100644 index 00000000..a0ca281b Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/helix.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/honeyCrystal.png b/src/main/resources/assets/extrabees/textures/items/honeyCrystal.png new file mode 100644 index 00000000..824558b1 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/honeyCrystal.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/honeyCrystalEmpty.png b/src/main/resources/assets/extrabees/textures/items/honeyCrystalEmpty.png new file mode 100644 index 00000000..06daa00b Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/honeyCrystalEmpty.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/icon/discoveredBee.png b/src/main/resources/assets/extrabees/textures/items/icon/discoveredBee.png new file mode 100644 index 00000000..dcbb25be Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/icon/discoveredBee.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/icon/undiscoveredBee.png b/src/main/resources/assets/extrabees/textures/items/icon/undiscoveredBee.png new file mode 100644 index 00000000..c4e5d7ca Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/icon/undiscoveredBee.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/machines/serum.empty.png b/src/main/resources/assets/extrabees/textures/items/machines/serum.empty.png new file mode 100644 index 00000000..96600976 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/machines/serum.empty.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/machines/serumCaps.png b/src/main/resources/assets/extrabees/textures/items/machines/serumCaps.png new file mode 100644 index 00000000..09d70343 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/machines/serumCaps.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/machines/serumEdges.png b/src/main/resources/assets/extrabees/textures/items/machines/serumEdges.png new file mode 100644 index 00000000..14b7fd41 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/machines/serumEdges.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/machines/serumFilling.png b/src/main/resources/assets/extrabees/textures/items/machines/serumFilling.png new file mode 100644 index 00000000..867fbc55 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/machines/serumFilling.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/machines/serumFilling.png.mcmeta b/src/main/resources/assets/extrabees/textures/items/machines/serumFilling.png.mcmeta new file mode 100644 index 00000000..dff3f78a --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/items/machines/serumFilling.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":5,"frametime":1,"frames":[{"index":0,"time":5},{"index":1,"time":5},{"index":2,"time":5},{"index":3,"time":5},{"index":4,"time":5}]}} \ No newline at end of file diff --git a/src/main/resources/assets/extrabees/textures/items/machines/serumFilling.txt b/src/main/resources/assets/extrabees/textures/items/machines/serumFilling.txt new file mode 100644 index 00000000..d5f71f49 --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/items/machines/serumFilling.txt @@ -0,0 +1,5 @@ +0*5 +1*5 +2*5 +3*5 +4*5 \ No newline at end of file diff --git a/src/main/resources/assets/extrabees/textures/items/machines/serumOutline.png b/src/main/resources/assets/extrabees/textures/items/machines/serumOutline.png new file mode 100644 index 00000000..4c56e608 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/machines/serumOutline.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/machines/template.blank.png b/src/main/resources/assets/extrabees/textures/items/machines/template.blank.png new file mode 100644 index 00000000..d745dd05 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/machines/template.blank.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/machines/template.edge.png b/src/main/resources/assets/extrabees/textures/items/machines/template.edge.png new file mode 100644 index 00000000..908f1b05 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/machines/template.edge.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/machines/template.filling.png b/src/main/resources/assets/extrabees/textures/items/machines/template.filling.png new file mode 100644 index 00000000..2d3995df Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/machines/template.filling.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/masterApiaristDatabase.png b/src/main/resources/assets/extrabees/textures/items/masterApiaristDatabase.png new file mode 100644 index 00000000..9f532188 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/masterApiaristDatabase.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/blutoniumDust.png b/src/main/resources/assets/extrabees/textures/items/misc/blutoniumDust.png new file mode 100644 index 00000000..603a0c89 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/blutoniumDust.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/clayDust.png b/src/main/resources/assets/extrabees/textures/items/misc/clayDust.png new file mode 100644 index 00000000..f04df1c2 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/clayDust.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/coalDust.png b/src/main/resources/assets/extrabees/textures/items/misc/coalDust.png new file mode 100644 index 00000000..7dcb11d8 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/coalDust.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/copperDust.png b/src/main/resources/assets/extrabees/textures/items/misc/copperDust.png new file mode 100644 index 00000000..674f4897 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/copperDust.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/cyaniteDust.png b/src/main/resources/assets/extrabees/textures/items/misc/cyaniteDust.png new file mode 100644 index 00000000..a3e088a8 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/cyaniteDust.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/diamondCracked.png b/src/main/resources/assets/extrabees/textures/items/misc/diamondCracked.png new file mode 100644 index 00000000..10e70a0c Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/diamondCracked.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/diamondShard.png b/src/main/resources/assets/extrabees/textures/items/misc/diamondShard.png new file mode 100644 index 00000000..f8e6b9e6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/diamondShard.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/dyeBlack.png b/src/main/resources/assets/extrabees/textures/items/misc/dyeBlack.png new file mode 100644 index 00000000..3e7f38c7 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/dyeBlack.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/dyeBlue.png b/src/main/resources/assets/extrabees/textures/items/misc/dyeBlue.png new file mode 100644 index 00000000..91eee009 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/dyeBlue.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/dyeBrown.png b/src/main/resources/assets/extrabees/textures/items/misc/dyeBrown.png new file mode 100644 index 00000000..1104f947 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/dyeBrown.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/dyeGreen.png b/src/main/resources/assets/extrabees/textures/items/misc/dyeGreen.png new file mode 100644 index 00000000..e147654a Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/dyeGreen.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/dyeRed.png b/src/main/resources/assets/extrabees/textures/items/misc/dyeRed.png new file mode 100644 index 00000000..3eab388c Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/dyeRed.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/dyeWhite.png b/src/main/resources/assets/extrabees/textures/items/misc/dyeWhite.png new file mode 100644 index 00000000..28b090ca Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/dyeWhite.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/dyeYellow.png b/src/main/resources/assets/extrabees/textures/items/misc/dyeYellow.png new file mode 100644 index 00000000..38be5591 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/dyeYellow.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/emeraldShard.png b/src/main/resources/assets/extrabees/textures/items/misc/emeraldShard.png new file mode 100644 index 00000000..ef590aeb Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/emeraldShard.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/goldDust.png b/src/main/resources/assets/extrabees/textures/items/misc/goldDust.png new file mode 100644 index 00000000..d179428f Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/goldDust.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/ironDust.png b/src/main/resources/assets/extrabees/textures/items/misc/ironDust.png new file mode 100644 index 00000000..b5589e6f Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/ironDust.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/lapisShard.png b/src/main/resources/assets/extrabees/textures/items/misc/lapisShard.png new file mode 100644 index 00000000..89cb95f3 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/lapisShard.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/leadDust.png b/src/main/resources/assets/extrabees/textures/items/misc/leadDust.png new file mode 100644 index 00000000..af8e4ad0 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/leadDust.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/nickelDust.png b/src/main/resources/assets/extrabees/textures/items/misc/nickelDust.png new file mode 100644 index 00000000..f929072b Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/nickelDust.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/platinumDust.png b/src/main/resources/assets/extrabees/textures/items/misc/platinumDust.png new file mode 100644 index 00000000..fbfa801c Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/platinumDust.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/radioactiveDust.png b/src/main/resources/assets/extrabees/textures/items/misc/radioactiveDust.png new file mode 100644 index 00000000..5bacd82f Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/radioactiveDust.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/rubyShard.png b/src/main/resources/assets/extrabees/textures/items/misc/rubyShard.png new file mode 100644 index 00000000..e0e5d55c Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/rubyShard.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/sapphireShard.png b/src/main/resources/assets/extrabees/textures/items/misc/sapphireShard.png new file mode 100644 index 00000000..f84279cb Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/sapphireShard.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/scentedGear.png b/src/main/resources/assets/extrabees/textures/items/misc/scentedGear.png new file mode 100644 index 00000000..bd5f5967 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/scentedGear.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/silverDust.png b/src/main/resources/assets/extrabees/textures/items/misc/silverDust.png new file mode 100644 index 00000000..92d295ae Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/silverDust.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/tinBeeswax.png b/src/main/resources/assets/extrabees/textures/items/misc/tinBeeswax.png new file mode 100644 index 00000000..d2c8d5ab Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/tinBeeswax.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/tinDust.png b/src/main/resources/assets/extrabees/textures/items/misc/tinDust.png new file mode 100644 index 00000000..6a810d2a Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/tinDust.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/titaniumDust.png b/src/main/resources/assets/extrabees/textures/items/misc/titaniumDust.png new file mode 100644 index 00000000..5c4adcb9 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/titaniumDust.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/tungstenDust.png b/src/main/resources/assets/extrabees/textures/items/misc/tungstenDust.png new file mode 100644 index 00000000..a3bcd51c Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/tungstenDust.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/vialDNA.png b/src/main/resources/assets/extrabees/textures/items/misc/vialDNA.png new file mode 100644 index 00000000..a413806a Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/vialDNA.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/vialDNA.png.mcmeta b/src/main/resources/assets/extrabees/textures/items/misc/vialDNA.png.mcmeta new file mode 100644 index 00000000..11c88a5a --- /dev/null +++ b/src/main/resources/assets/extrabees/textures/items/misc/vialDNA.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":32,"frametime":1,"frames":[{"index":0,"time":5},{"index":1,"time":3},{"index":2,"time":5},{"index":3,"time":3},{"index":4,"time":5},{"index":5,"time":3},{"index":6,"time":5},{"index":7,"time":3}]}} \ No newline at end of file diff --git a/src/main/resources/assets/extrabees/textures/items/misc/vialSterilised.png b/src/main/resources/assets/extrabees/textures/items/misc/vialSterilised.png new file mode 100644 index 00000000..b0ed285f Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/vialSterilised.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/yelloriumDust.png b/src/main/resources/assets/extrabees/textures/items/misc/yelloriumDust.png new file mode 100644 index 00000000..a29cfeaa Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/yelloriumDust.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/misc/zincDust.png b/src/main/resources/assets/extrabees/textures/items/misc/zincDust.png new file mode 100644 index 00000000..659f74c8 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/misc/zincDust.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/particles/blindness.png b/src/main/resources/assets/extrabees/textures/items/particles/blindness.png new file mode 100644 index 00000000..d3c66499 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/particles/blindness.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/particles/bonemeal.png b/src/main/resources/assets/extrabees/textures/items/particles/bonemeal.png new file mode 100644 index 00000000..e77a094c Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/particles/bonemeal.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/particles/food.png b/src/main/resources/assets/extrabees/textures/items/particles/food.png new file mode 100644 index 00000000..7017f625 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/particles/food.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/particles/gravity.png b/src/main/resources/assets/extrabees/textures/items/particles/gravity.png new file mode 100644 index 00000000..4674439b Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/particles/gravity.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/particles/lightning.png b/src/main/resources/assets/extrabees/textures/items/particles/lightning.png new file mode 100644 index 00000000..d3c2b792 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/particles/lightning.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/particles/meteor.png b/src/main/resources/assets/extrabees/textures/items/particles/meteor.png new file mode 100644 index 00000000..dea7f90c Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/particles/meteor.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/particles/radioactive.png b/src/main/resources/assets/extrabees/textures/items/particles/radioactive.png new file mode 100644 index 00000000..77051e8e Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/particles/radioactive.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/particles/water.png b/src/main/resources/assets/extrabees/textures/items/particles/water.png new file mode 100644 index 00000000..b79762f0 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/particles/water.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/particles/wither.png b/src/main/resources/assets/extrabees/textures/items/particles/wither.png new file mode 100644 index 00000000..09ed272f Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/particles/wither.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/punnettSquare.png b/src/main/resources/assets/extrabees/textures/items/punnettSquare.png new file mode 100644 index 00000000..d2b325cd Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/punnettSquare.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/triggers/CanWork.png b/src/main/resources/assets/extrabees/textures/items/triggers/CanWork.png new file mode 100644 index 00000000..0a88a7af Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/triggers/CanWork.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/triggers/CannotWork.png b/src/main/resources/assets/extrabees/textures/items/triggers/CannotWork.png new file mode 100644 index 00000000..333181a1 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/triggers/CannotWork.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/triggers/IsNotWorking.png b/src/main/resources/assets/extrabees/textures/items/triggers/IsNotWorking.png new file mode 100644 index 00000000..27e56943 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/triggers/IsNotWorking.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/triggers/IsWorking.png b/src/main/resources/assets/extrabees/textures/items/triggers/IsWorking.png new file mode 100644 index 00000000..0227c01c Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/triggers/IsWorking.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/triggers/NoBlankTemplate.png b/src/main/resources/assets/extrabees/textures/items/triggers/NoBlankTemplate.png new file mode 100644 index 00000000..c63e4d5e Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/triggers/NoBlankTemplate.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/triggers/NoTemplate.png b/src/main/resources/assets/extrabees/textures/items/triggers/NoTemplate.png new file mode 100644 index 00000000..9ab8dd1c Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/triggers/NoTemplate.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/triggers/PowerFull.png b/src/main/resources/assets/extrabees/textures/items/triggers/PowerFull.png new file mode 100644 index 00000000..2e3783b3 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/triggers/PowerFull.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/triggers/PowerHigh.png b/src/main/resources/assets/extrabees/textures/items/triggers/PowerHigh.png new file mode 100644 index 00000000..4556ab24 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/triggers/PowerHigh.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/triggers/PowerLow.png b/src/main/resources/assets/extrabees/textures/items/triggers/PowerLow.png new file mode 100644 index 00000000..1ec4830a Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/triggers/PowerLow.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/triggers/PowerMedium.png b/src/main/resources/assets/extrabees/textures/items/triggers/PowerMedium.png new file mode 100644 index 00000000..e70f119c Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/triggers/PowerMedium.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/triggers/PowerNone.png b/src/main/resources/assets/extrabees/textures/items/triggers/PowerNone.png new file mode 100644 index 00000000..4ef4e852 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/triggers/PowerNone.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/triggers/SerumEmpty.png b/src/main/resources/assets/extrabees/textures/items/triggers/SerumEmpty.png new file mode 100644 index 00000000..7950ed81 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/triggers/SerumEmpty.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/triggers/SerumFull.png b/src/main/resources/assets/extrabees/textures/items/triggers/SerumFull.png new file mode 100644 index 00000000..e3dcc0c6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/triggers/SerumFull.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/triggers/SerumPure.png b/src/main/resources/assets/extrabees/textures/items/triggers/SerumPure.png new file mode 100644 index 00000000..90090f22 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/triggers/SerumPure.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/validator/mutator.0.png b/src/main/resources/assets/extrabees/textures/items/validator/mutator.0.png new file mode 100644 index 00000000..9c2333b6 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/validator/mutator.0.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/validator/mutator.1.png b/src/main/resources/assets/extrabees/textures/items/validator/mutator.1.png new file mode 100644 index 00000000..07f54c00 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/validator/mutator.1.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/validator/serum.0.png b/src/main/resources/assets/extrabees/textures/items/validator/serum.0.png new file mode 100644 index 00000000..91fc177e Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/validator/serum.0.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/validator/serum.1.png b/src/main/resources/assets/extrabees/textures/items/validator/serum.1.png new file mode 100644 index 00000000..d1be50b8 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/validator/serum.1.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/validator/template.0.png b/src/main/resources/assets/extrabees/textures/items/validator/template.0.png new file mode 100644 index 00000000..28b9e1c4 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/validator/template.0.png differ diff --git a/src/main/resources/assets/extrabees/textures/items/validator/template.1.png b/src/main/resources/assets/extrabees/textures/items/validator/template.1.png new file mode 100644 index 00000000..66060d0d Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/items/validator/template.1.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/Acclimatiser.png b/src/main/resources/assets/extrabees/textures/tile/Acclimatiser.png new file mode 100644 index 00000000..518c510b Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/Acclimatiser.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/AdvancedGeneticMachine.png b/src/main/resources/assets/extrabees/textures/tile/AdvancedGeneticMachine.png new file mode 100644 index 00000000..55f34a61 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/AdvancedGeneticMachine.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/AdvancedIndexer.png b/src/main/resources/assets/extrabees/textures/tile/AdvancedIndexer.png new file mode 100644 index 00000000..91f6db36 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/AdvancedIndexer.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/ApiaristDatabank.png b/src/main/resources/assets/extrabees/textures/tile/ApiaristDatabank.png new file mode 100644 index 00000000..6175b3d4 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/ApiaristDatabank.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/ApiaristMachine.png b/src/main/resources/assets/extrabees/textures/tile/ApiaristMachine.png new file mode 100644 index 00000000..e8a5ee85 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/ApiaristMachine.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/Genepool.png b/src/main/resources/assets/extrabees/textures/tile/Genepool.png new file mode 100644 index 00000000..9a3b6768 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/Genepool.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/GeneticMachine.png b/src/main/resources/assets/extrabees/textures/tile/GeneticMachine.png new file mode 100644 index 00000000..9a6f6816 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/GeneticMachine.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/Indexer.png b/src/main/resources/assets/extrabees/textures/tile/Indexer.png new file mode 100644 index 00000000..6f980b36 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/Indexer.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/IndustrialAlveary.png b/src/main/resources/assets/extrabees/textures/tile/IndustrialAlveary.png new file mode 100644 index 00000000..455d5eae Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/IndustrialAlveary.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/Inoculator.png b/src/main/resources/assets/extrabees/textures/tile/Inoculator.png new file mode 100644 index 00000000..8bb21ade Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/Inoculator.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/Isolator.png b/src/main/resources/assets/extrabees/textures/tile/Isolator.png new file mode 100644 index 00000000..a2e7d808 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/Isolator.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/Purifier.png b/src/main/resources/assets/extrabees/textures/tile/Purifier.png new file mode 100644 index 00000000..14f7fb2b Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/Purifier.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/Replicator.png b/src/main/resources/assets/extrabees/textures/tile/Replicator.png new file mode 100644 index 00000000..52bca4d3 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/Replicator.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/Sequencer.png b/src/main/resources/assets/extrabees/textures/tile/Sequencer.png new file mode 100644 index 00000000..13b9cf7e Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/Sequencer.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/Splicer.png b/src/main/resources/assets/extrabees/textures/tile/Splicer.png new file mode 100644 index 00000000..9c2e7a6e Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/Splicer.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/Synthesizer.png b/src/main/resources/assets/extrabees/textures/tile/Synthesizer.png new file mode 100644 index 00000000..2ffb39f4 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/Synthesizer.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyFrame.png b/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyFrame.png new file mode 100644 index 00000000..366c0497 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyFrame.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyHatchery.png b/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyHatchery.png new file mode 100644 index 00000000..aa85364f Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyHatchery.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyLighting.png b/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyLighting.png new file mode 100644 index 00000000..b06625c7 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyLighting.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyMutator.png b/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyMutator.png new file mode 100644 index 00000000..b670d9d2 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyMutator.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyNovaBlock.png b/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyNovaBlock.png new file mode 100644 index 00000000..31d03322 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyNovaBlock.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyRainShield.png b/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyRainShield.png new file mode 100644 index 00000000..b10086b8 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyRainShield.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyStimulator.png b/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyStimulator.png new file mode 100644 index 00000000..0754f396 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyStimulator.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyTransmission.png b/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyTransmission.png new file mode 100644 index 00000000..ca8eac7a Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/alveary/AlvearyTransmission.png differ diff --git a/src/main/resources/assets/extrabees/textures/tile/logo.png b/src/main/resources/assets/extrabees/textures/tile/logo.png new file mode 100644 index 00000000..c16f2b24 Binary files /dev/null and b/src/main/resources/assets/extrabees/textures/tile/logo.png differ diff --git a/src/main/resources/assets/extratrees/lang/en_GB.lang b/src/main/resources/assets/extratrees/lang/en_GB.lang new file mode 100644 index 00000000..b3d24654 --- /dev/null +++ b/src/main/resources/assets/extratrees/lang/en_GB.lang @@ -0,0 +1,458 @@ +################################################## +## Machines + +extratrees.machine.kitchen.bar=Bar +extratrees.machine.kitchen.bottleRack=Bottle Rack + +extratrees.machine.machine.brewery=Brewery +extratrees.machine.machine.brewery.info=The Brewery uses yeasts, juices and grains to make many kinds of Wines and Beers. +extratrees.machine.machine.distillery=Distillery +extratrees.machine.machine.distillery.info=The Distillery can single, double or triple distil certain alcohols to give brandies, liquors and other spirits. +extratrees.machine.machine.press=Fruit Press +extratrees.machine.machine.press.info=The Press squeezes fruit to give various fruit juices. It can be powered or run manually by right clicking. +extratrees.machine.machine.lumbermill=Lumbermill +extratrees.machine.machine.lumbermill.info=The Lumbermill converts logs into planks at an increased rate, as well as giving by-products such as sawdust and bark. +extratrees.machine.machine.nursery=Nursery +extratrees.machine.machine.woodworker=Woodworker +extratrees.machine.machine.woodworker.info=The Woodworker creates patterned wooden tiles from two different woods. +extratrees.machine.machine.panelworker=Panelworker +extratrees.machine.machine.panelworker.info=The Panelworker creates patterned wooden panels from two different woods. +extratrees.machine.machine.glassworker=Glassworker +extratrees.machine.machine.glassworker.info=The Glassworker creates patterned stained glass. +extratrees.machine.machine.tileworker=Tileworker +extratrees.machine.machine.tileworker.info=The Tileworker creates patterned ceramic tiles. + + + +extratrees.block.planks.fir=Fir +extratrees.block.planks.cedar=Cedar +extratrees.block.planks.hemlock=Hemlock +extratrees.block.planks.cypress=Cypress +extratrees.block.planks.fig=Fig +extratrees.block.planks.beech=Beech +extratrees.block.planks.alder=Alder +extratrees.block.planks.hazel=Hazel +extratrees.block.planks.hornbeam=Hornbeam +extratrees.block.planks.box=Box +extratrees.block.planks.butternut=Butternut +extratrees.block.planks.hickory=Hickory +extratrees.block.planks.whitebeam=Whitebeam +extratrees.block.planks.elm=Elm +extratrees.block.planks.apple=Apple +extratrees.block.planks.yew=Yew +extratrees.block.planks.pear=Pear +extratrees.block.planks.hawthorn=Hawthorn +extratrees.block.planks.rowan=Rowan +extratrees.block.planks.elder=Elder +extratrees.block.planks.maclura=Maclura +extratrees.block.planks.syzgium=Syzgium +extratrees.block.planks.brazilwood=Brazilwood +extratrees.block.planks.logwood=Logwood +extratrees.block.planks.iroko=Iroko +extratrees.block.planks.locust=Locust +extratrees.block.planks.eucalyptus=Eucalyptus +extratrees.block.planks.purpleheart=Purpleheart +extratrees.block.planks.ash=Ash +extratrees.block.planks.holly=Holly +extratrees.block.planks.olive=Olive +extratrees.block.planks.sweetgum=Sweetgum +extratrees.block.planks.rosewood=Rosewood +extratrees.block.planks.gingko=Gingko +extratrees.block.planks.pinkivory=Pink Ivory + +extratrees.block.planks.vanilla.oak=Oak +extratrees.block.planks.vanilla.spruce=Spruce +extratrees.block.planks.vanilla.birch=Birch +extratrees.block.planks.vanilla.jungle=Jungle +extratrees.block.planks.vanilla.darkoak=Dark Oak +extratrees.block.planks.vanilla.acacia=Acacia + +extratrees.block.planks.forestry.larch=Larch +extratrees.block.planks.forestry.teak=Teak +extratrees.block.planks.forestry.acacia=Desert Acacia +extratrees.block.planks.forestry.lime=Lime +extratrees.block.planks.forestry.chestnut=Chestnut +extratrees.block.planks.forestry.wenge=Wenge +extratrees.block.planks.forestry.baobab=Baobab +extratrees.block.planks.forestry.sequoia=Sequoia +extratrees.block.planks.forestry.kapok=Kapok +extratrees.block.planks.forestry.ebony=Ebony +extratrees.block.planks.forestry.mahogany=Mahogany +extratrees.block.planks.forestry.balsa=Balsa +extratrees.block.planks.forestry.willow=Willow +extratrees.block.planks.forestry.walnut=Walnut +extratrees.block.planks.forestry.greenheart=Greenheart +extratrees.block.planks.forestry.cherry=Cherry +extratrees.block.planks.forestry.mahoe=Mahoe +extratrees.block.planks.forestry.poplar=Poplar +extratrees.block.planks.forestry.palm=Palm +extratrees.block.planks.forestry.papaya=Papaya +extratrees.block.planks.forestry.pine=Pine +extratrees.block.planks.forestry.plum=Plum +extratrees.block.planks.forestry.maple=Maple +extratrees.block.planks.forestry.citrus=Citrus +extratrees.block.planks.forestry.giganteum=Giant Sequoia +extratrees.block.planks.forestry.ipe=Ipe +extratrees.block.planks.forestry.padauk=Padauk +extratrees.block.planks.forestry.cocobolo=Cocobolo +extratrees.block.planks.forestry.zebrawood=Zebrawood + +extratrees.block.planks.ebxl.redwood=Redwood +extratrees.block.planks.ebxl.fir=Scottish Fir +extratrees.block.planks.ebxl.acacia=Excel Acacia + + + +extratrees.block.planks.fir.desc=A good sturdy conifer wood.|Lumber Jack +extratrees.block.planks.cedar.desc=A red tinged softwood.|Lumber Jack +extratrees.block.planks.hemlock.desc=Hemlock gives a green hued conifer wood.|Lumber Jack +extratrees.block.planks.cypress.desc=A conifer wood with a slight yellow colouring.|Lumber Jack +extratrees.block.planks.fig.desc=Generally not considered a viable construction wood, nonetheless a useful wood.|Lumber Jack +extratrees.block.planks.beech.desc=A slightly lighter wood, pretty average.|Lumber Jack +extratrees.block.planks.alder.desc=A darker hardwood, doesn't have many discerning properties.|Lumber Jack +extratrees.block.planks.hazel.desc=A lovely pale wood, similar in colour to Birch.|Lumber Jack +extratrees.block.planks.hornbeam.desc=Another average wood, without many interesting properties.|Lumber Jack +extratrees.block.planks.box.desc=One of the palest woods available, but only found on the short box shrub.|Lumber Jack +extratrees.block.planks.butternut.desc=A creamy hued wood, though the tree is more known for its nuts.|Lumber Jack +extratrees.block.planks.hickory.desc=A not particularly remarkable hardwood.|Lumber Jack +extratrees.block.planks.whitebeam.desc=Despite it's name whitebeam has a rather subdued colour.|Lumber Jack +extratrees.block.planks.elm.desc=A rather bright peachy wood.|Lumber Jack +extratrees.block.planks.apple.desc=A very dark wood, making apple trees a very useful cultivar.|Lumber Jack +extratrees.block.planks.yew.desc=A rather attractively hued conifer wood.|Lumber Jack +extratrees.block.planks.pear.desc=Unlike Apple wood, pear wood is not particularly unique.|Lumber Jack +extratrees.block.planks.hawthorn.desc=An average softwood.|Lumber Jack +extratrees.block.planks.rowan.desc=A more subdued wood with nice contrast between the planks.|Lumber Jack +extratrees.block.planks.elder.desc=A average plank without much fanfare.|Lumber Jack +extratrees.block.planks.maclura.desc=A very rich orange hue makes Maclura wood very desirable.|Lumber Jack +extratrees.block.planks.syzgium.desc=With a tinge of pink Syzgium is a very unique wood.|Lumber Jack +extratrees.block.planks.brazilwood.desc=Brazilwood is known for its deep purple shade.|Lumber Jack +extratrees.block.planks.logwood.desc=Logwood is one of the closest you can get to a red wood.|Lumber Jack +extratrees.block.planks.iroko.desc=This attractive dark wood would make a lovely lintel.|Lumber Jack +extratrees.block.planks.locust.desc=Totally unrelated to the devouring insect plague.|Lumber Jack +extratrees.block.planks.eucalyptus.desc=A pinkish wood, more commonly converted to wood pulp.|Lumber Jack +extratrees.block.planks.purpleheart.desc=A deep shade of purple makes this tree aptly named.|Lumber Jack +extratrees.block.planks.ash.desc=Gotta catch 'em all!|Ash Ketchum +extratrees.block.planks.holly.desc=The whitest wood available, just avoid the pointy leaves to get to it.|Lumber Jack +extratrees.block.planks.olive.desc=Coloured in the same way as its fruits, an attractive subdued green.|Lumber Jack +extratrees.block.planks.sweetgum.desc=Yet another average wood, but has a certain character.|Lumber Jack +extratrees.block.planks.rosewood.desc=Used to make chess pieces, this is another strongly hued wood.|Lumber Jack +extratrees.block.planks.gingko.desc=Similar to Boxwood, Gingko wood is very pale.|Lumber Jack +extratrees.block.planks.pinkivory.desc=What can I say. It's very pink.|Lumber Jack + +extratrees.block.planks.vanilla.oak.desc= +extratrees.block.planks.vanilla.spruce.desc= +extratrees.block.planks.vanilla.birch.desc= +extratrees.block.planks.vanilla.jungle.desc= +extratrees.block.planks.vanilla.darkoak.desc= +extratrees.block.planks.vanilla.acacia.desc= + +extratrees.block.planks.forestry.larch.desc= +extratrees.block.planks.forestry.teak.desc= +extratrees.block.planks.forestry.acacia.desc= +extratrees.block.planks.forestry.lime.desc= +extratrees.block.planks.forestry.chestnut.desc= +extratrees.block.planks.forestry.wenge.desc= +extratrees.block.planks.forestry.baobab.desc= +extratrees.block.planks.forestry.sequoia.desc= +extratrees.block.planks.forestry.kapok.desc= +extratrees.block.planks.forestry.ebony.desc= +extratrees.block.planks.forestry.mahogany.desc= +extratrees.block.planks.forestry.balsa.desc= +extratrees.block.planks.forestry.willow.desc= +extratrees.block.planks.forestry.walnut.desc= +extratrees.block.planks.forestry.greenheart.desc= +extratrees.block.planks.forestry.cherry.desc= +extratrees.block.planks.forestry.mahoe.desc= +extratrees.block.planks.forestry.poplar.desc= +extratrees.block.planks.forestry.palm.desc= +extratrees.block.planks.forestry.papaya.desc= +extratrees.block.planks.forestry.pine.desc= +extratrees.block.planks.forestry.plum.desc= +extratrees.block.planks.forestry.maple.desc= +extratrees.block.planks.forestry.citrus.desc= + +< %1$s is name of wood used for door > +extratrees.block.door.name=%1$s Wood Door + +< %1$s is name of wood used for door, %2$s is type of door > +extratrees.block.door.name.adv=%2$s %1$s Wood Door +extratrees.block.door.type.standard= +extratrees.block.door.type.solid=Solid +extratrees.block.door.type.double=Split +extratrees.block.door.type.full=Full + +< %1$s is name of the wood> +extratrees.block.plank.name=%1$s Wood Planks + +< %1$s is name of wood > +extratrees.block.log.name=%1$s Wood + +extratrees.species.orchardapple.name=Orchard Apple +extratrees.species.sweetcrabapple.name=Sweet Crab Apple +extratrees.species.floweringcrabapple.name=Flowering Crab Apple +extratrees.species.prairiecrabapple.name=Prairie Crab Apple +extratrees.species.blackthorn.name=Blackthorn +extratrees.species.cherryplum.name=Cherry Plum +extratrees.species.peach.name=Peach +extratrees.species.nectarine.name=Nectarine +extratrees.species.apricot.name=Apricot +extratrees.species.almond.name=Almond +extratrees.species.wildcherry.name=Wild Cherry +extratrees.species.sourcherry.name=Sour Cherry +extratrees.species.blackcherry.name=Black Cherry +extratrees.species.orange.name=Orange +extratrees.species.manderin.name=Mandarin +extratrees.species.satsuma.name=Satsuma +extratrees.species.tangerine.name=Tangerine +extratrees.species.lime.name=Lime +extratrees.species.keylime.name=Key Lime +extratrees.species.fingerlime.name=Finger Lime +extratrees.species.pomelo.name=Pomelo +extratrees.species.grapefruit.name=Grapefruit +extratrees.species.kumquat.name=Kumquat +extratrees.species.citron.name=Citron +extratrees.species.buddhahand.name=Buddha's Hand +extratrees.species.banana.name=Banana +extratrees.species.redbanana.name=Red Banana +extratrees.species.plantain.name=Plantain +extratrees.species.butternut.name=Butternut +extratrees.species.rowan.name=Common Rowan +extratrees.species.hemlock.name=Western Hemlock +extratrees.species.ash.name=Common Ash +extratrees.species.alder.name=Common Alder +extratrees.species.alder.desc=A common tree in wet places and marshes.|Arborist Manual +extratrees.species.beech.name=Common Beech +extratrees.species.beech.desc=An elegant tree with small inedible nuts, used in the manufacture of seed oil.|Arborist Manual +extratrees.species.copperbeech.name=Copper Beech +extratrees.species.copperbeech.desc=Beautiful purple brown leaves make this tree a favourite of gardeners.|Arborist Manual +extratrees.species.aspen.name=Aspen +extratrees.species.yew.name=Common Yew +extratrees.species.cypress.name=Lawson Cypress +extratrees.species.douglasfir.name=Douglas-fir +extratrees.species.hazel.name=Common Hazel +extratrees.species.sycamore.name=Sycamore Fig +extratrees.species.whitebeam.name=Whitebeam +extratrees.species.hawthorn.name=Common Hawthorn +extratrees.species.pecan.name=Pecan +extratrees.species.elm.name=Common Elm +extratrees.species.elder.name=Elderberry +extratrees.species.holly.name=Common Holly +extratrees.species.hornbeam.name=Common Hornbeam +extratrees.species.sallow.name=Great Sallow +extratrees.species.acornoak.name=Acorn Oak +extratrees.species.fir.name=Silver Fir +extratrees.species.cedar.name=Great Cedar +extratrees.species.olive.name=Olive +extratrees.species.redmaple.name=Red Maple +extratrees.species.balsamfir.name=Balsam Fir +extratrees.species.loblollypine.name=Loblolly Pine +extratrees.species.sweetgum.name=Sweetgum +extratrees.species.locust.name=Black Locust +extratrees.species.pear.name=Cultivated Pear +extratrees.species.osangeosange.name=Osage-Orange +extratrees.species.oldfustic.name=Old Fustic +extratrees.species.brazilwood.name=Brazilwood +extratrees.species.logwood.name=Logwood +extratrees.species.rosewood.name=Rosewood +extratrees.species.purpleheart.name=Purpleheart +extratrees.species.iroko.name=Iroko +extratrees.species.gingko.name=Ginkgo +extratrees.species.brazilnut.name=Brazil Nut +extratrees.species.rosegum.name=Rose Gum +extratrees.species.swampgum.name=Swamp Gum +extratrees.species.box.name=Boxwood +extratrees.species.clove.name=Clove +extratrees.species.coffee.name=Coffee +extratrees.species.monkeypuzzle.name=Monkey Puzzle +extratrees.species.rainbowgum.name=Rainbow Gum +extratrees.species.pinkivory.name=Pink Ivory +extratrees.species.blackcurrant.name=Blackcurrant +extratrees.species.redcurrant.name=Redcurrant +extratrees.species.blackberry.name=Blackberry +extratrees.species.raspberry.name=Raspberry +extratrees.species.blueberry.name=Blueberry +extratrees.species.cranberry.name=Cranberry +extratrees.species.juniper.name=Juniper +extratrees.species.gooseberry.name=Gooseberry +extratrees.species.goldenraspberry.name=Golden Raspberry +extratrees.species.cinnamon.name=Cinnamon +extratrees.species.coconut.name=Coconut +extratrees.species.cashew.name=Cashew +extratrees.species.avacado.name=Avocado +extratrees.species.nutmeg.name=Nutmeg +extratrees.species.allspice.name=Allspice +extratrees.species.chilli.name=Chilli Pepper +extratrees.species.staranise.name=Star Anise +extratrees.species.mango.name=Mango +extratrees.species.starfruit.name=Starfruit +extratrees.species.candlenut.name=Candlenut +extratrees.species.dwarfhazel.name=Dwarf Hazel + + + +extratrees.item.food.apple=Apple +extratrees.item.food.crabapple=Crab Apple +extratrees.item.food.orange=Orange +extratrees.item.food.kumquat=Kumquat +extratrees.item.food.lime=Lime +extratrees.item.food.wildcherry=Wild Cherry +extratrees.item.food.sourcherry=Sour Cherry +extratrees.item.food.blackcherry=Black Cherry +extratrees.item.food.blackthorn=Blackthorn +extratrees.item.food.cherryplum=Cherry Plum +extratrees.item.food.almond=Almond +extratrees.item.food.apricot=Apricot +extratrees.item.food.grapefruit=Grapefruit +extratrees.item.food.peach=Peach +extratrees.item.food.satsuma=Satsuma +extratrees.item.food.buddhahand=Buddha’s Hand +extratrees.item.food.citron=Citron +extratrees.item.food.fingerlime=Finger Lime +extratrees.item.food.keylime=Key Lime +extratrees.item.food.manderin=Mandarin +extratrees.item.food.nectarine=Nectarine +extratrees.item.food.pomelo=Pomelo +extratrees.item.food.tangerine=Tangerine +extratrees.item.food.pear=Pear +extratrees.item.food.sandpear=Sand Pear +extratrees.item.food.hazelnut=Hazelnut +extratrees.item.food.butternut=Butternut +extratrees.item.food.beechnut=Beechnut +extratrees.item.food.pecan=Pecan Nut +extratrees.item.food.banana=Banana +extratrees.item.food.redbanana=Red Banana +extratrees.item.food.plantain=Plantain +extratrees.item.food.brazilnut=Brazil Nut +extratrees.item.food.fig=Fig +extratrees.item.food.acorn=Acorn +extratrees.item.food.elderberry=Elderberry +extratrees.item.food.olive=Olive +extratrees.item.food.gingkonut=Gingko Nut +extratrees.item.food.coffee=Coffee +extratrees.item.food.osangeorange=Osage Orange +extratrees.item.food.clove=Clove +extratrees.item.food.papayimar=Papayimar +extratrees.item.food.blackcurrant=Blackcurrant +extratrees.item.food.redcurrant=Redcurrant +extratrees.item.food.blackberry=Blackberry +extratrees.item.food.raspberry=Raspberry +extratrees.item.food.blueberry=Blueberry +extratrees.item.food.cranberry=Cranberry +extratrees.item.food.juniper=Juniper +extratrees.item.food.gooseberry=Gooseberry +extratrees.item.food.goldenraspberry=Golden Raspberry +extratrees.item.food.coconut=Coconut +extratrees.item.food.cashew=Cashew +extratrees.item.food.avacado=Avocado +extratrees.item.food.nutmeg=Nutmeg +extratrees.item.food.allspice=Allspice +extratrees.item.food.chilli=Chilli +extratrees.item.food.staranise=Star Anise +extratrees.item.food.mango=Mango +extratrees.item.food.starfruit=Starfruit +extratrees.item.food.candlenut=Candlenut + +extratrees.item.glassware.beermug=Beer Mug +extratrees.item.glassware.pint=Pint Glass +extratrees.item.glassware.snifter=Snifter Glass +extratrees.item.glassware.cocktail=Cocktail Glass +extratrees.item.glassware.cordial=Cordial Glass +extratrees.item.glassware.collins=Collins Glass +extratrees.item.glassware.highball=Highball Glass +extratrees.item.glassware.hurricane=Hurricane Glass +extratrees.item.glassware.margarita=Margarita Glass +extratrees.item.glassware.oldfashioned=Old Fashioned Glass +extratrees.item.glassware.wine=Wine Glass +extratrees.item.glassware.shot=Shot Glass +extratrees.item.glassware.sherry=Sherry Glass +extratrees.item.glassware.coupe=Coupe Glass + +< %1$s is name of fluid > +extratrees.item.glassware.beermug.usage=Mug of %1$s +extratrees.item.glassware.pint.usage=Glass of %1$s +extratrees.item.glassware.snifter.usage=Glass of %1$s +extratrees.item.glassware.cocktail.usage=Glass of %1$s +extratrees.item.glassware.cordial.usage=Glass of %1$s +extratrees.item.glassware.collins.usage=Glass of %1$s +extratrees.item.glassware.highball.usage=Glass of %1$s +extratrees.item.glassware.hurricane.usage=Glass of %1$s +extratrees.item.glassware.margarita.usage=Glass of %1$s +extratrees.item.glassware.oldfashioned.usage=Glass of %1$s +extratrees.item.glassware.wine.usage=Glass of %1$s +extratrees.item.glassware.shot.usage=%1$s Shot +extratrees.item.glassware.sherry.usage=Glass of %1$s +extratrees.item.glassware.coupe.usage=Glass of %1$s + +extratrees.fluid.alcohol.apple=Cider +extratrees.fluid.alcohol.apricot=Apricot Wine +extratrees.fluid.alcohol.banana=Banana Wine +extratrees.fluid.alcohol.cherry=Cherry Wine +extratrees.fluid.alcohol.elderberry=Elderberry Wine +extratrees.fluid.alcohol.peach=Peach Cider +extratrees.fluid.alcohol.pear=Pear Cider +extratrees.fluid.alcohol.plum=Plum Wine +extratrees.fluid.alcohol.carrot=Carrot Wine +extratrees.fluid.alcohol.whitewine=White Wine +extratrees.fluid.alcohol.redwine=Red Wine +extratrees.fluid.alcohol.sparklingwine=Sparkling Wine +extratrees.fluid.alcohol.agave=Agave Wine +extratrees.fluid.alcohol.potato=Fermented Potatoes +extratrees.fluid.alcohol.citrus=Citrus Wine +extratrees.fluid.alcohol.cranberry=Cranberry Wine +extratrees.fluid.alcohol.pineapple=Pineapple Wine +extratrees.fluid.alcohol.tomato=Tomato Wine +extratrees.fluid.alcohol.fruit=Fruit Wine +extratrees.fluid.alcohol.ale=Ale +extratrees.fluid.alcohol.lager=Lager +extratrees.fluid.alcohol.wheatbeer=Wheat Beer +extratrees.fluid.alcohol.ryebeer=Rye Beer +extratrees.fluid.alcohol.cornbeer=Corn Beer +extratrees.fluid.alcohol.stout=Stout +extratrees.fluid.alcohol.barley=Fermented Grain Mash +extratrees.fluid.alcohol.wheat=Fermented Wheat Mash +extratrees.fluid.alcohol.rye=Fermented Rye Mash +extratrees.fluid.alcohol.corn=Fermented Corn Mash + + + +extratrees.gui.database.planks.use=Can make: + +extratrees.gui.database.mode.fruit=Fruit +extratrees.gui.database.mode.wood=Wood +extratrees.gui.database.mode.planks=Planks + +extratrees.gui.database.tab.species.overview=Overview +extratrees.gui.database.tab.species.genome=Genome +extratrees.gui.database.tab.species.classification=Classification +extratrees.gui.database.tab.species.resultant=Resultant Mutations +extratrees.gui.database.tab.species.further=Further Mutations + +extratrees.gui.database.tab.branches.overview=Overview +extratrees.gui.database.tab.branches.species=Species + +extratrees.gui.database.tab.breeder.breeder=Breeder + + +extratrees.gui.database.tab.fruit.natural=Natural Trees +extratrees.gui.database.tab.fruit.natura.help=List of trees that naturally produce this fruit +extratrees.gui.database.tab.fruit.potential=Potential Trees +extratrees.gui.database.tab.fruit.potential.help=List of trees that can produce this fruit if they possess the right allele +extratrees.gui.database.tab.wood.natural=Natural Trees +extratrees.gui.database.tab.wood.natural.help=List of trees that are made of this wood +extratrees.gui.database.tab.planks.overview=Overview +extratrees.gui.database.tab.planks.overview.help=Description and possible uses +extratrees.gui.database.tab.planks.natural=Natural Trees +extratrees.gui.database.tab.planks.natural.help=List of trees that produce logs that can be crafted into this plank + + +extratrees.gui.database.tab.butterfly.species.overview=Overview +extratrees.gui.database.tab.butterfly.species.classification=Classification +extratrees.gui.database.tab.butterfly.species.specimen=Specimen +extratrees.gui.database.tab.butterfly.species.resultant=Resultant Mutations +extratrees.gui.database.tab.butterfly.species.further=Further Mutations +extratrees.gui.database.tab.butterfly.branches.overview=Overview +extratrees.gui.database.tab.butterfly.branches.species=Species +extratrees.gui.database.tab.butterfly.breeder=Breeder + +extratrees.gui.database.log=Log +extratrees.gui.database.leaves=Leaves diff --git a/src/main/resources/assets/extratrees/lang/en_US.lang b/src/main/resources/assets/extratrees/lang/en_US.lang new file mode 100644 index 00000000..84105091 --- /dev/null +++ b/src/main/resources/assets/extratrees/lang/en_US.lang @@ -0,0 +1,470 @@ +################################################## +## Machines + +extratrees.machine.kitchen.bar=Bar +extratrees.machine.kitchen.bottleRack=Bottle Rack + +extratrees.machine.machine.brewery=Brewery +extratrees.machine.machine.brewery.info=The Brewery uses yeasts, juices and grains to make many kinds of Wines and Beers. +extratrees.machine.machine.distillery=Distillery +extratrees.machine.machine.distillery.info=The Distillery can single, double or triple distill certain alcohols to give brandies, liquors and other spirits. +extratrees.machine.machine.press=Fruit Press +extratrees.machine.machine.press.info=The Fruit Press squeezes fruit to give various fruit juices. It can be run using power or manually by right clicking. +extratrees.machine.machine.lumbermill=Lumbermill +extratrees.machine.machine.lumbermill.info=The Lumbermill converts logs into planks at an increased rate, and produces byproducts such as sawdust and bark. +extratrees.machine.machine.nursery=Nursery +extratrees.machine.machine.woodworker=Woodworker +extratrees.machine.machine.woodworker.info=The Woodworker creates patterned wooden tiles from two different woods. +extratrees.machine.machine.panelworker=Panelworker +extratrees.machine.machine.panelworker.info=The Panelworker creates patterned wooden panels from two different woods. +extratrees.machine.machine.glassworker=Glassworker +extratrees.machine.machine.glassworker.info=The Glassworker creates patterned stained glass. +extratrees.machine.machine.tileworker=Tileworker +extratrees.machine.machine.tileworker.info=The Tileworker creates patterned ceramic tiles. + + + +extratrees.block.planks.fir=Fir +extratrees.block.planks.cedar=Cedar +extratrees.block.planks.hemlock=Hemlock +extratrees.block.planks.cypress=Cypress +extratrees.block.planks.fig=Fig +extratrees.block.planks.beech=Beech +extratrees.block.planks.alder=Alder +extratrees.block.planks.hazel=Hazel +extratrees.block.planks.hornbeam=Hornbeam +extratrees.block.planks.box=Box +extratrees.block.planks.butternut=Butternut +extratrees.block.planks.hickory=Hickory +extratrees.block.planks.whitebeam=Whitebeam +extratrees.block.planks.elm=Elm +extratrees.block.planks.apple=Apple +extratrees.block.planks.yew=Yew +extratrees.block.planks.pear=Pear +extratrees.block.planks.hawthorn=Hawthorn +extratrees.block.planks.rowan=Rowan +extratrees.block.planks.elder=Elder +extratrees.block.planks.maclura=Maclura +extratrees.block.planks.syzgium=Syzgium +extratrees.block.planks.brazilwood=Brazilwood +extratrees.block.planks.logwood=Logwood +extratrees.block.planks.iroko=Iroko +extratrees.block.planks.locust=Locust +extratrees.block.planks.eucalyptus=Eucalyptus +extratrees.block.planks.purpleheart=Purpleheart +extratrees.block.planks.ash=Ash +extratrees.block.planks.holly=Holly +extratrees.block.planks.olive=Olive +extratrees.block.planks.sweetgum=Sweetgum +extratrees.block.planks.rosewood=Rosewood +extratrees.block.planks.gingko=Gingko +extratrees.block.planks.pinkivory=Pink Ivory + +extratrees.block.planks.vanilla.oak=Oak +extratrees.block.planks.vanilla.spruce=Spruce +extratrees.block.planks.vanilla.birch=Birch +extratrees.block.planks.vanilla.jungle=Jungle +extratrees.block.planks.vanilla.darkoak=Dark Oak +extratrees.block.planks.vanilla.acacia=Acacia + +extratrees.block.planks.forestry.larch=Larch +extratrees.block.planks.forestry.teak=Teak +extratrees.block.planks.forestry.acacia=Desert Acacia +extratrees.block.planks.forestry.lime=Lime +extratrees.block.planks.forestry.chestnut=Chestnut +extratrees.block.planks.forestry.wenge=Wenge +extratrees.block.planks.forestry.baobab=Baobab +extratrees.block.planks.forestry.sequoia=Sequoia +extratrees.block.planks.forestry.kapok=Kapok +extratrees.block.planks.forestry.ebony=Ebony +extratrees.block.planks.forestry.mahogany=Mahogany +extratrees.block.planks.forestry.balsa=Balsa +extratrees.block.planks.forestry.willow=Willow +extratrees.block.planks.forestry.walnut=Walnut +extratrees.block.planks.forestry.greenheart=Greenheart +extratrees.block.planks.forestry.cherry=Cherry +extratrees.block.planks.forestry.mahoe=Mahoe +extratrees.block.planks.forestry.poplar=Poplar +extratrees.block.planks.forestry.palm=Palm +extratrees.block.planks.forestry.papaya=Papaya +extratrees.block.planks.forestry.pine=Pine +extratrees.block.planks.forestry.plum=Plum +extratrees.block.planks.forestry.maple=Maple +extratrees.block.planks.forestry.citrus=Citrus +extratrees.block.planks.forestry.giganteum=Giant Sequoia +extratrees.block.planks.forestry.ipe=Ipe +extratrees.block.planks.forestry.padauk=Padauk +extratrees.block.planks.forestry.cocobolo=Cocobolo +extratrees.block.planks.forestry.zebrawood=Zebrawood + +extratrees.block.planks.ebxl.redwood=Redwood +extratrees.block.planks.ebxl.fir=Scottish Fir +extratrees.block.planks.ebxl.acacia=Excel Acacia + + + +extratrees.block.planks.fir.desc=A good sturdy conifer wood.|Lumber Jack +extratrees.block.planks.cedar.desc=A red tinged softwood.|Lumber Jack +extratrees.block.planks.hemlock.desc=Hemlock gives a green hued conifer wood.|Lumber Jack +extratrees.block.planks.cypress.desc=A conifer wood with a sligh yellow colouring.|Lumber Jack +extratrees.block.planks.fig.desc=Generally not considered a viable construction wood, nonetheless a useful wood.|Lumber Jack +extratrees.block.planks.beech.desc=A slightly lighter wood, pretty average.|Lumber Jack +extratrees.block.planks.alder.desc=A darker hardwood, doesn't have many discerning properties.|Lumber Jack +extratrees.block.planks.hazel.desc=A lovely pale wood, similar in colour to Birch.|Lumber Jack +extratrees.block.planks.hornbeam.desc=Another average wood, without many interesting properties.|Lumber Jack +extratrees.block.planks.box.desc=One of the palest woods avaiable, but only found on the short box shrub.|Lumber Jack +extratrees.block.planks.butternut.desc=A creamy hued wood, though the tree is more known for its nuts.|Lumber Jack +extratrees.block.planks.hickory.desc=A not particularly remarkable hardwood.|Lumber Jack +extratrees.block.planks.whitebeam.desc=Despite it's name whitebeam has a rather subdued colour.|Lumber Jack +extratrees.block.planks.elm.desc=A rather brigh peachy wood.|Lumber Jack +extratrees.block.planks.apple.desc=A very dark wood, making apple trees a very useful cultivar.|Lumber Jack +extratrees.block.planks.yew.desc=A rather attractively hued conifer wood.|Lumber Jack +extratrees.block.planks.pear.desc=Unlike Apple wood, pear wood is not particularly unique.|Lumber Jack +extratrees.block.planks.hawthorn.desc=An average softwood.|Lumber Jack +extratrees.block.planks.rowan.desc=A more subdued wood with nice contrast between the planks.|Lumber Jack +extratrees.block.planks.elder.desc=A average plank without much fanfare.|Lumber Jack +extratrees.block.planks.maclura.desc=A very rich orange hue makes Maclura wood very desirable.|Lumber Jack +extratrees.block.planks.syzgium.desc=With a tinge of pink Syzgium is a very unique wood.|Lumber Jack +extratrees.block.planks.brazilwood.desc=Brazilwood is known for its deep purple shade.|Lumber Jack +extratrees.block.planks.logwood.desc=Logwood is one of the closest you can get to a red wood.|Lumber Jack +extratrees.block.planks.iroko.desc=This attractive dark wood would make a lovely lintel.|Lumber Jack +extratrees.block.planks.locust.desc=Totally unrelated to the devouring insect plague.|Lumber Jack +extratrees.block.planks.eucalyptus.desc=A pinkish wood, more commonly converted to wood pulp.|Lumber Jack +extratrees.block.planks.purpleheart.desc=A deep shade of purple makes this tree aptly named.|Lumber Jack +extratrees.block.planks.ash.desc=Gotta catch 'em all!|Ash Ketchum +extratrees.block.planks.holly.desc=The whitest wood available, just avoid the pointy leaves to get to it.|Lumber Jack +extratrees.block.planks.olive.desc=Coloured in the same way as its fruits, an attractive subdued green.|Lumber Jack +extratrees.block.planks.sweetgum.desc=Yet another average wood, but has a certain character.|Lumber Jack +extratrees.block.planks.rosewood.desc=Used to make chess pieces, this is another strongly hued wood.|Lumber Jack +extratrees.block.planks.gingko.desc=Similar to Boxwood, Gingko wood is very pale.|Lumber Jack +extratrees.block.planks.pinkivory.desc=What can I say. It's very pink.|Lumber Jack + +extratrees.block.planks.vanilla.oak.desc= +extratrees.block.planks.vanilla.spruce.desc= +extratrees.block.planks.vanilla.birch.desc= +extratrees.block.planks.vanilla.jungle.desc= +extratrees.block.planks.vanilla.darkoak.desc= +extratrees.block.planks.vanilla.acacia.desc= + +extratrees.block.planks.forestry.larch.desc= +extratrees.block.planks.forestry.teak.desc= +extratrees.block.planks.forestry.acacia.desc= +extratrees.block.planks.forestry.lime.desc= +extratrees.block.planks.forestry.chestnut.desc= +extratrees.block.planks.forestry.wenge.desc= +extratrees.block.planks.forestry.baobab.desc= +extratrees.block.planks.forestry.sequoia.desc= +extratrees.block.planks.forestry.kapok.desc= +extratrees.block.planks.forestry.ebony.desc= +extratrees.block.planks.forestry.mahogany.desc= +extratrees.block.planks.forestry.balsa.desc= +extratrees.block.planks.forestry.willow.desc= +extratrees.block.planks.forestry.walnut.desc= +extratrees.block.planks.forestry.greenheart.desc= +extratrees.block.planks.forestry.cherry.desc= +extratrees.block.planks.forestry.mahoe.desc= +extratrees.block.planks.forestry.poplar.desc= +extratrees.block.planks.forestry.palm.desc= +extratrees.block.planks.forestry.papaya.desc= +extratrees.block.planks.forestry.pine.desc= +extratrees.block.planks.forestry.plum.desc= +extratrees.block.planks.forestry.maple.desc= +extratrees.block.planks.forestry.citrus.desc= + +< %1$s is name of wood used for door > +extratrees.block.door.name=%1$s Wood Door + +< %1$s is name of wood used for door, %2$s is type of door > +extratrees.block.door.name.adv=%2$s %1$s Wood Door +extratrees.block.door.type.standard= +extratrees.block.door.type.solid=Solid +extratrees.block.door.type.double=Split +extratrees.block.door.type.full=Full + +< %1$s is name of the wood> +extratrees.block.plank.name=%1$s Wood Planks +extratrees.block.log.name=%1$s Wood +extratrees.block.woodslab.name=%1$s Wood Slab +extratrees.block.woodstairs.name=%1$s Stairs +extratrees.block.woodfence.name=%1$s Fence +extratrees.block.woodgate.name=%1$s Gate + +< %1$s is the adjective for the fence type, %2$s is the name of the wood > +extratrees.block.multifence.name=%2$s %1$s Gate +< %3$s is the name of the second wood > +extratrees.block.multifence.name2=%2$s %1$s & $2$s Gate + +< %1$s is name of the design > +extratrees.block.woodentile.name=%1$s Wooden Tile +extratrees.block.woodenpanel.name=%1$s Wooden Panel +extratrees.block.stainedglass.name=%1$s Stained Glass + +extratrees.species.orchardapple.name=Orchard Apple +extratrees.species.sweetcrabapple.name=Sweet Crabapple +extratrees.species.floweringcrabapple.name=Flowering Crabapple +extratrees.species.prairiecrabapple.name=Prairie Crabapple +extratrees.species.blackthorn.name=Blackthorn +extratrees.species.cherryplum.name=Cherry Plum +extratrees.species.peach.name=Peach +extratrees.species.nectarine.name=Nectarine +extratrees.species.apricot.name=Apricot +extratrees.species.almond.name=Almond +extratrees.species.wildcherry.name=Wild Cherry +extratrees.species.sourcherry.name=Sour Cherry +extratrees.species.blackcherry.name=Black Cherry +extratrees.species.orange.name=Orange +extratrees.species.manderin.name=Manderine +extratrees.species.satsuma.name=Satsuma +extratrees.species.tangerine.name=Tangerine +extratrees.species.lime.name=Lime +extratrees.species.keylime.name=Key Lime +extratrees.species.fingerlime.name=Finger Lime +extratrees.species.pomelo.name=Pomelo +extratrees.species.grapefruit.name=Grapefruit +extratrees.species.kumquat.name=Kumquat +extratrees.species.citron.name=Citron +extratrees.species.buddhahand.name=Buddha's Hand +extratrees.species.banana.name=Banana +extratrees.species.redbanana.name=Red Banana +extratrees.species.plantain.name=Plantain +extratrees.species.butternut.name=Butternut +extratrees.species.rowan.name=Common Rowan +extratrees.species.hemlock.name=Western Hemlock +extratrees.species.ash.name=Common Ash +extratrees.species.alder.name=Common Alder +extratrees.species.alder.desc=A common tree in wet places and marshes.|Arborist Manual +extratrees.species.beech.name=Common Beech +extratrees.species.beech.desc=An elegant tree with small inedible nuts, used in the manufacture of seed oil.|Arborist Manual +extratrees.species.copperbeech.name=Copper Beech +extratrees.species.copperbeech.desc=Beautiful purple brown leaves make this tree a favourite of gardeners.|Arborist Manual +extratrees.species.aspen.name=Aspen +extratrees.species.yew.name=Common Yew +extratrees.species.cypress.name=Lawson Cypress +extratrees.species.douglasfir.name=Douglas-fir +extratrees.species.hazel.name=Common Hazel +extratrees.species.sycamore.name=Sycamore Fig +extratrees.species.whitebeam.name=Whitebeam +extratrees.species.hawthorn.name=Common Hawthorn +extratrees.species.pecan.name=Pecan +extratrees.species.elm.name=Common Elm +extratrees.species.elder.name=Elderberry +extratrees.species.holly.name=Common Holly +extratrees.species.hornbeam.name=Common Hornbeam +extratrees.species.sallow.name=Great Sallow +extratrees.species.acornoak.name=Acorn Oak +extratrees.species.fir.name=Silver Fir +extratrees.species.cedar.name=Great Cedar +extratrees.species.olive.name=Olive +extratrees.species.redmaple.name=Red Maple +extratrees.species.balsamfir.name=Balsam Fir +extratrees.species.loblollypine.name=Loblolly Pine +extratrees.species.sweetgum.name=Sweetgum +extratrees.species.locust.name=Black Locust +extratrees.species.pear.name=Cultivated Pear +extratrees.species.osangeosange.name=Osange-Orange +extratrees.species.oldfustic.name=Old Fustic +extratrees.species.brazilwood.name=Brazilwood +extratrees.species.logwood.name=Logwood +extratrees.species.rosewood.name=Rosewood +extratrees.species.purpleheart.name=Purpleheart +extratrees.species.iroko.name=Iroko +extratrees.species.gingko.name=Ginkgo +extratrees.species.brazilnut.name=Brazil Nut +extratrees.species.rosegum.name=Rose Gum +extratrees.species.swampgum.name=Swamp Gum +extratrees.species.box.name=Boxwood +extratrees.species.clove.name=Clove +extratrees.species.coffee.name=Coffee +extratrees.species.monkeypuzzle.name=Monkey Puzzle +extratrees.species.rainbowgum.name=Rainbow Gum +extratrees.species.pinkivory.name=Pink Ivory +extratrees.species.blackcurrant.name=Blackcurrant +extratrees.species.redcurrant.name=Redcurrant +extratrees.species.blackberry.name=Blackberry +extratrees.species.raspberry.name=Raspberry +extratrees.species.blueberry.name=Blueberry +extratrees.species.cranberry.name=Cranberry +extratrees.species.juniper.name=Juniper +extratrees.species.gooseberry.name=Gooseberry +extratrees.species.goldenraspberry.name=Golden Raspberry +extratrees.species.cinnamon.name=Cinnamon +extratrees.species.coconut.name=Coconut +extratrees.species.cashew.name=Cashew +extratrees.species.avacado.name=Avacado +extratrees.species.nutmeg.name=Nutmeg +extratrees.species.allspice.name=Allspice +extratrees.species.chilli.name=Chilli Pepper +extratrees.species.staranise.name=Star Anise +extratrees.species.mango.name=Mango +extratrees.species.starfruit.name=Starfruit +extratrees.species.candlenut.name=Candlenut +extratrees.species.dwarfhazel.name=Dwarf Hazel + + + +extratrees.item.food.apple=Apple +extratrees.item.food.crabapple=Crabapple +extratrees.item.food.orange=Orange +extratrees.item.food.kumquat=Kumquat +extratrees.item.food.lime=Lime +extratrees.item.food.wildcherry=Wild Cherry +extratrees.item.food.sourcherry=Sour Cherry +extratrees.item.food.blackcherry=Black Cherry +extratrees.item.food.blackthorn=Blackthorn +extratrees.item.food.cherryplum=Cherry Plum +extratrees.item.food.almond=Almond +extratrees.item.food.apricot=Apricot +extratrees.item.food.grapefruit=Grapefruit +extratrees.item.food.peach=Peach +extratrees.item.food.satsuma=Satsuma +extratrees.item.food.buddhahand=Buddhas Hand +extratrees.item.food.citron=Citron +extratrees.item.food.fingerlime=Finger Lime +extratrees.item.food.keylime=Key Lime +extratrees.item.food.manderin=Manderin +extratrees.item.food.nectarine=Nectarine +extratrees.item.food.pomelo=Pomelo +extratrees.item.food.tangerine=Tangerine +extratrees.item.food.pear=Pear +extratrees.item.food.sandpear=Sand Pear +extratrees.item.food.hazelnut=Hazelnut +extratrees.item.food.butternut=Butternut +extratrees.item.food.beechnut=Beechnut +extratrees.item.food.pecan=Pecan Nut +extratrees.item.food.banana=Banana +extratrees.item.food.redbanana=Red Banana +extratrees.item.food.plantain=Plantain +extratrees.item.food.brazilnut=Brazil Nut +extratrees.item.food.fig=Fig +extratrees.item.food.acorn=Acorn +extratrees.item.food.elderberry=Elderberry +extratrees.item.food.olive=Olive +extratrees.item.food.gingkonut=Gingko Nut +extratrees.item.food.coffee=Coffee +extratrees.item.food.osangeorange=Osange Orange +extratrees.item.food.clove=Clove +extratrees.item.food.papayimar=Papayimar +extratrees.item.food.blackcurrant=Blackcurrant +extratrees.item.food.redcurrant=Redcurrant +extratrees.item.food.blackberry=Blackberry +extratrees.item.food.raspberry=Raspberry +extratrees.item.food.blueberry=Blueberry +extratrees.item.food.cranberry=Cranberry +extratrees.item.food.juniper=Juniper +extratrees.item.food.gooseberry=Gooseberry +extratrees.item.food.goldenraspberry=Golden Raspberry +extratrees.item.food.coconut=Coconut +extratrees.item.food.cashew=Cashew +extratrees.item.food.avacado=Avacado +extratrees.item.food.nutmeg=Nutmeg +extratrees.item.food.allspice=Allspice +extratrees.item.food.chilli=Chilli +extratrees.item.food.staranise=Star Anise +extratrees.item.food.mango=Mango +extratrees.item.food.starfruit=Starfruit +extratrees.item.food.candlenut=Candlenut + +extratrees.item.glassware.beermug=Beer Mug +extratrees.item.glassware.pint=Pint Glass +extratrees.item.glassware.snifter=Snifter Glass +extratrees.item.glassware.cocktail=Cocktail Glass +extratrees.item.glassware.cordial=Cordial Glass +extratrees.item.glassware.collins=Collins Glass +extratrees.item.glassware.highball=Highball Glass +extratrees.item.glassware.hurricane=Hurricane Glass +extratrees.item.glassware.margarita=Margarita Glass +extratrees.item.glassware.oldfashioned=Old Fashioned Glass +extratrees.item.glassware.wine=Wine Glass +extratrees.item.glassware.shot=Shot Glass +extratrees.item.glassware.sherry=Sherry Glass +extratrees.item.glassware.coupe=Coupe Glass + +< %1$s is name of fluid > +extratrees.item.glassware.beermug.usage=Mug of %1$s +extratrees.item.glassware.pint.usage=Glass of %1$s +extratrees.item.glassware.snifter.usage=Glass of %1$s +extratrees.item.glassware.cocktail.usage=Glass of %1$s +extratrees.item.glassware.cordial.usage=Glass of %1$s +extratrees.item.glassware.collins.usage=Glass of %1$s +extratrees.item.glassware.highball.usage=Glass of %1$s +extratrees.item.glassware.hurricane.usage=Glass of %1$s +extratrees.item.glassware.margarita.usage=Glass of %1$s +extratrees.item.glassware.oldfashioned.usage=Glass of %1$s +extratrees.item.glassware.wine.usage=Glass of %1$s +extratrees.item.glassware.shot.usage=%1$s Shot +extratrees.item.glassware.sherry.usage=Glass of %1$s +extratrees.item.glassware.coupe.usage=Glass of %1$s + +extratrees.fluid.alcohol.apple=Cider +extratrees.fluid.alcohol.apricot=Apricot Wine +extratrees.fluid.alcohol.banana=Banana Wine +extratrees.fluid.alcohol.cherry=Cherry Wine +extratrees.fluid.alcohol.elderberry=Elderberry Wine +extratrees.fluid.alcohol.peach=Peach Cider +extratrees.fluid.alcohol.pear=Pear Cider +extratrees.fluid.alcohol.plum=Plum Wine +extratrees.fluid.alcohol.carrot=Carrot Wine +extratrees.fluid.alcohol.whitewine=White Wine +extratrees.fluid.alcohol.redwine=Red Wine +extratrees.fluid.alcohol.sparklingwine=Sparkling Wine +extratrees.fluid.alcohol.agave=Agave Wine +extratrees.fluid.alcohol.potato=Fermented Potatoes +extratrees.fluid.alcohol.citrus=Citrus Wine +extratrees.fluid.alcohol.cranberry=Cranberry Wine +extratrees.fluid.alcohol.pineapple=Pineapple Wine +extratrees.fluid.alcohol.tomato=Tomato Wine +extratrees.fluid.alcohol.fruit=Fruit Wine +extratrees.fluid.alcohol.ale=Ale +extratrees.fluid.alcohol.lager=Lager +extratrees.fluid.alcohol.wheatbeer=Wheat Beer +extratrees.fluid.alcohol.ryebeer=Rye Beer +extratrees.fluid.alcohol.cornbeer=Corn Beer +extratrees.fluid.alcohol.stout=Stout +extratrees.fluid.alcohol.barley=Fermented Grain Mash +extratrees.fluid.alcohol.wheat=Fermented Wheat Mash +extratrees.fluid.alcohol.rye=Fermented Rye Mash +extratrees.fluid.alcohol.corn=Fermented Corn Mash + + + +extratrees.gui.database.planks.use=Can make: + +extratrees.gui.database.mode.fruit=Fruit +extratrees.gui.database.mode.wood=Wood +extratrees.gui.database.mode.planks=Planks + +extratrees.gui.database.tab.species.overview=Overview +extratrees.gui.database.tab.species.genome=Genome +extratrees.gui.database.tab.species.classification=Classification +extratrees.gui.database.tab.species.resultant=Resultant Mutations +extratrees.gui.database.tab.species.further=Further Mutations + +extratrees.gui.database.tab.branches.overview=Overview +extratrees.gui.database.tab.branches.species=Species + +extratrees.gui.database.tab.breeder.breeder=Breeder + + +extratrees.gui.database.tab.fruit.natural=Natural Trees +extratrees.gui.database.tab.fruit.natura.help=List of trees that naturally produce this fruit +extratrees.gui.database.tab.fruit.potential=Potential Trees +extratrees.gui.database.tab.fruit.potential.help=List of trees that can produce this fruit if they possess the right allele +extratrees.gui.database.tab.wood.natural=Natural Trees +extratrees.gui.database.tab.wood.natural.help=List of trees that are made of this wood +extratrees.gui.database.tab.planks.overview=Overview +extratrees.gui.database.tab.planks.overview.help=Description and possible uses +extratrees.gui.database.tab.planks.natural=Natural Trees +extratrees.gui.database.tab.planks.natural.help=List of trees that produce logs that can be crafted into this plank + + +extratrees.gui.database.tab.butterfly.species.overview=Overview +extratrees.gui.database.tab.butterfly.species.classification=Classification +extratrees.gui.database.tab.butterfly.species.specimen=Specimen +extratrees.gui.database.tab.butterfly.species.resultant=Resultant Mutations +extratrees.gui.database.tab.butterfly.species.further=Further Mutations +extratrees.gui.database.tab.butterfly.branches.overview=Overview +extratrees.gui.database.tab.butterfly.branches.species=Species +extratrees.gui.database.tab.butterfly.breeder=Breeder + +extratrees.gui.database.log=Log +extratrees.gui.database.leaves=Leaves diff --git a/src/main/resources/assets/extratrees/textures/blocks/door.double.lower.png b/src/main/resources/assets/extratrees/textures/blocks/door.double.lower.png new file mode 100644 index 00000000..a46e7620 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/door.double.lower.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/door.double.upper.png b/src/main/resources/assets/extratrees/textures/blocks/door.double.upper.png new file mode 100644 index 00000000..0cfe4b96 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/door.double.upper.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/door.full.lower.png b/src/main/resources/assets/extratrees/textures/blocks/door.full.lower.png new file mode 100644 index 00000000..15ddd837 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/door.full.lower.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/door.full.upper.png b/src/main/resources/assets/extratrees/textures/blocks/door.full.upper.png new file mode 100644 index 00000000..7b06fec9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/door.full.upper.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/door.solid.lower.png b/src/main/resources/assets/extratrees/textures/blocks/door.solid.lower.png new file mode 100644 index 00000000..a6339c5a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/door.solid.lower.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/door.solid.upper.png b/src/main/resources/assets/extratrees/textures/blocks/door.solid.upper.png new file mode 100644 index 00000000..77a18c8a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/door.solid.upper.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/door.standard.lower.png b/src/main/resources/assets/extratrees/textures/blocks/door.standard.lower.png new file mode 100644 index 00000000..a6339c5a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/door.standard.lower.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/door.standard.upper.png b/src/main/resources/assets/extratrees/textures/blocks/door.standard.upper.png new file mode 100644 index 00000000..0cfe4b96 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/door.standard.upper.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/fruit/average.png b/src/main/resources/assets/extratrees/textures/blocks/fruit/average.png new file mode 100644 index 00000000..e59c1c6d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/fruit/average.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/fruit/large.png b/src/main/resources/assets/extratrees/textures/blocks/fruit/large.png new file mode 100644 index 00000000..233c444a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/fruit/large.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/fruit/larger.png b/src/main/resources/assets/extratrees/textures/blocks/fruit/larger.png new file mode 100644 index 00000000..fe27542d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/fruit/larger.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/fruit/pear.png b/src/main/resources/assets/extratrees/textures/blocks/fruit/pear.png new file mode 100644 index 00000000..fdb7c88c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/fruit/pear.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/fruit/small.png b/src/main/resources/assets/extratrees/textures/blocks/fruit/small.png new file mode 100644 index 00000000..3189ed51 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/fruit/small.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/fruit/tiny.png b/src/main/resources/assets/extratrees/textures/blocks/fruit/tiny.png new file mode 100644 index 00000000..246afa6d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/fruit/tiny.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barred.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barred.0.png new file mode 100644 index 00000000..ea6b9d9c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barred.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barred.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barred.1.png new file mode 100644 index 00000000..f54a87f5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barred.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barred2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barred2.0.png new file mode 100644 index 00000000..d6e67f16 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barred2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barred2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barred2.1.png new file mode 100644 index 00000000..519c6202 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barred2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner.0.png new file mode 100644 index 00000000..4b40847e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner.1.png new file mode 100644 index 00000000..52ce6ee0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner2.0.png new file mode 100644 index 00000000..619e70f7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner2.1.png new file mode 100644 index 00000000..bcab95d8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner3.0.png new file mode 100644 index 00000000..e8f38d02 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner3.1.png new file mode 100644 index 00000000..e6600228 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner4.0.png new file mode 100644 index 00000000..48734148 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner4.1.png new file mode 100644 index 00000000..2de03507 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner.0.png new file mode 100644 index 00000000..bd3a44f0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner.1.png new file mode 100644 index 00000000..dc410a93 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner2.0.png new file mode 100644 index 00000000..71f6bb38 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner2.1.png new file mode 100644 index 00000000..ca93d969 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner3.0.png new file mode 100644 index 00000000..da02a2e3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner3.1.png new file mode 100644 index 00000000..5044f9d1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner4.0.png new file mode 100644 index 00000000..7b1b77d5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner4.1.png new file mode 100644 index 00000000..b677c105 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredcurvedcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredend.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredend.0.png new file mode 100644 index 00000000..6435a227 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredend.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredend.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredend.1.png new file mode 100644 index 00000000..f206eeb4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredend.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredend2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredend2.0.png new file mode 100644 index 00000000..0866e513 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredend2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredend2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredend2.1.png new file mode 100644 index 00000000..0d64ce3f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredend2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredend3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredend3.0.png new file mode 100644 index 00000000..c7100b99 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredend3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredend3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredend3.1.png new file mode 100644 index 00000000..f3f4ad74 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredend3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredend4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredend4.0.png new file mode 100644 index 00000000..fb46511a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredend4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/barredend4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/barredend4.1.png new file mode 100644 index 00000000..4a687f93 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/barredend4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/blank.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/blank.0.png new file mode 100644 index 00000000..964fc3a4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/blank.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/blank.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/blank.1.png new file mode 100644 index 00000000..96729e15 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/blank.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/chequered.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/chequered.0.png new file mode 100644 index 00000000..8d9c12b8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/chequered.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/chequered.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/chequered.1.png new file mode 100644 index 00000000..08395da4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/chequered.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/circle.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/circle.0.png new file mode 100644 index 00000000..b252baa9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/circle.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/circle.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/circle.1.png new file mode 100644 index 00000000..8ca59b65 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/circle.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/corner.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/corner.0.png new file mode 100644 index 00000000..7aa036c4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/corner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/corner.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/corner.1.png new file mode 100644 index 00000000..26ea7281 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/corner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/corner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/corner2.0.png new file mode 100644 index 00000000..66ceb729 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/corner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/corner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/corner2.1.png new file mode 100644 index 00000000..e7bfe8fc Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/corner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/corner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/corner3.0.png new file mode 100644 index 00000000..43e63cd4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/corner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/corner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/corner3.1.png new file mode 100644 index 00000000..d44036df Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/corner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/corner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/corner4.0.png new file mode 100644 index 00000000..51c36d3f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/corner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/corner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/corner4.1.png new file mode 100644 index 00000000..be6ee584 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/corner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/creeper.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/creeper.0.png new file mode 100644 index 00000000..e615b46d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/creeper.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/creeper.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/creeper.1.png new file mode 100644 index 00000000..378ec587 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/creeper.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/creeper2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/creeper2.0.png new file mode 100644 index 00000000..0424006b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/creeper2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/creeper2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/creeper2.1.png new file mode 100644 index 00000000..d78eba39 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/creeper2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/creeper3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/creeper3.0.png new file mode 100644 index 00000000..4bbfe460 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/creeper3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/creeper3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/creeper3.1.png new file mode 100644 index 00000000..ec18ec93 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/creeper3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/creeper4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/creeper4.0.png new file mode 100644 index 00000000..0366b391 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/creeper4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/creeper4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/creeper4.1.png new file mode 100644 index 00000000..e5a9cc79 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/creeper4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/crossed.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/crossed.0.png new file mode 100644 index 00000000..48675b3a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/crossed.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/crossed.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/crossed.1.png new file mode 100644 index 00000000..d8cf8f12 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/crossed.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner.0.png new file mode 100644 index 00000000..b2412bfa Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner.1.png new file mode 100644 index 00000000..d5625db3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner2.0.png new file mode 100644 index 00000000..ee975a76 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner2.1.png new file mode 100644 index 00000000..1564c76b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner3.0.png new file mode 100644 index 00000000..1c8fad79 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner3.1.png new file mode 100644 index 00000000..ed57834b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner4.0.png new file mode 100644 index 00000000..7bda8e0b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner4.1.png new file mode 100644 index 00000000..15e17db1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner.0.png new file mode 100644 index 00000000..15c4e249 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner.1.png new file mode 100644 index 00000000..06e0b709 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner2.0.png new file mode 100644 index 00000000..6e5c565d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner2.1.png new file mode 100644 index 00000000..2bb33a72 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner3.0.png new file mode 100644 index 00000000..51feba51 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner3.1.png new file mode 100644 index 00000000..7c2c9764 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner4.0.png new file mode 100644 index 00000000..b61b5be2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner4.1.png new file mode 100644 index 00000000..47515ff1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedsplitbarredcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection.0.png new file mode 100644 index 00000000..a3a76c54 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection.1.png new file mode 100644 index 00000000..0e796d0e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection2.0.png new file mode 100644 index 00000000..c582e6b2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection2.1.png new file mode 100644 index 00000000..f991f086 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection3.0.png new file mode 100644 index 00000000..2f160237 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection3.1.png new file mode 100644 index 00000000..955a14a0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection4.0.png new file mode 100644 index 00000000..c8a3b84c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection4.1.png new file mode 100644 index 00000000..58b8c6f7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/curvedtsection4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal.0.png new file mode 100644 index 00000000..cece1160 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal.1.png new file mode 100644 index 00000000..cebefa9b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged.0.png new file mode 100644 index 00000000..24db9a48 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged.1.png new file mode 100644 index 00000000..51169ce7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged2.0.png new file mode 100644 index 00000000..e3ef7ec3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged2.1.png new file mode 100644 index 00000000..936f8e04 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged3.0.png new file mode 100644 index 00000000..f622130e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged3.1.png new file mode 100644 index 00000000..e34a35a2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged4.0.png new file mode 100644 index 00000000..25e39999 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged4.1.png new file mode 100644 index 00000000..64bd1a1b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal1edged4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal2.0.png new file mode 100644 index 00000000..fd93ef68 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal2.1.png new file mode 100644 index 00000000..32b1350c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal2edged.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal2edged.0.png new file mode 100644 index 00000000..f703676a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal2edged.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal2edged.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal2edged.1.png new file mode 100644 index 00000000..ad9cbe86 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal2edged.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal2edged2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal2edged2.0.png new file mode 100644 index 00000000..9191b8e2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal2edged2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal2edged2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal2edged2.1.png new file mode 100644 index 00000000..0040a4ee Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal2edged2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged.0.png new file mode 100644 index 00000000..f24ed85d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged.1.png new file mode 100644 index 00000000..0f7f5f21 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged2.0.png new file mode 100644 index 00000000..523a7b6f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged2.1.png new file mode 100644 index 00000000..e00840c3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged3.0.png new file mode 100644 index 00000000..350de5d8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged3.1.png new file mode 100644 index 00000000..5249cf39 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged4.0.png new file mode 100644 index 00000000..44c8e335 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged4.1.png new file mode 100644 index 00000000..c731c6fd Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal3edged4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal4edged.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal4edged.0.png new file mode 100644 index 00000000..894d6531 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal4edged.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal4edged.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal4edged.1.png new file mode 100644 index 00000000..0ff949c3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonal4edged.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner.0.png new file mode 100644 index 00000000..59e979fe Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner.1.png new file mode 100644 index 00000000..b6d394d4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner2.0.png new file mode 100644 index 00000000..99a938be Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner2.1.png new file mode 100644 index 00000000..4c6ebb11 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner3.0.png new file mode 100644 index 00000000..e1cf3861 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner3.1.png new file mode 100644 index 00000000..f6d52f6d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner4.0.png new file mode 100644 index 00000000..175c815c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner4.1.png new file mode 100644 index 00000000..515a81f7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner.0.png new file mode 100644 index 00000000..6e615b0c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner.1.png new file mode 100644 index 00000000..c111b70f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner2.0.png new file mode 100644 index 00000000..6180534a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner2.1.png new file mode 100644 index 00000000..cf223378 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner3.0.png new file mode 100644 index 00000000..7cb00cbe Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner3.1.png new file mode 100644 index 00000000..57f0ac2e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner4.0.png new file mode 100644 index 00000000..dd48f1bb Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner4.1.png new file mode 100644 index 00000000..840b41ca Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection.0.png new file mode 100644 index 00000000..ab3e4e9b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection.1.png new file mode 100644 index 00000000..4b980284 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection2.0.png new file mode 100644 index 00000000..9408e72d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection2.1.png new file mode 100644 index 00000000..9d811e06 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection3.0.png new file mode 100644 index 00000000..acda5f94 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection3.1.png new file mode 100644 index 00000000..4c967e3b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection4.0.png new file mode 100644 index 00000000..c8be077b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection4.1.png new file mode 100644 index 00000000..61a75cfe Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalcurvedtsection4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalhalved.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalhalved.0.png new file mode 100644 index 00000000..919c0ece Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalhalved.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalhalved.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalhalved.1.png new file mode 100644 index 00000000..03cacc73 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalhalved.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalhalved2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalhalved2.0.png new file mode 100644 index 00000000..fa8bf063 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalhalved2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalhalved2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalhalved2.1.png new file mode 100644 index 00000000..9458ad43 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalhalved2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalstriped.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalstriped.0.png new file mode 100644 index 00000000..d93072bd Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalstriped.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalstriped.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalstriped.1.png new file mode 100644 index 00000000..3cb06bc8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalstriped.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalstriped2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalstriped2.0.png new file mode 100644 index 00000000..126342f1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalstriped2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalstriped2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalstriped2.1.png new file mode 100644 index 00000000..58bb5c68 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonalstriped2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection.0.png new file mode 100644 index 00000000..02c04ef0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection.1.png new file mode 100644 index 00000000..78684f29 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection2.0.png new file mode 100644 index 00000000..c7bd5135 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection2.1.png new file mode 100644 index 00000000..01d0d5e5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection3.0.png new file mode 100644 index 00000000..92daea0d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection3.1.png new file mode 100644 index 00000000..24c18708 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection4.0.png new file mode 100644 index 00000000..692bfcb5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection4.1.png new file mode 100644 index 00000000..97682741 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diagonaltsection4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diamond.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diamond.0.png new file mode 100644 index 00000000..3c591405 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diamond.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/diamond.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/diamond.1.png new file mode 100644 index 00000000..975854b4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/diamond.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/edged.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/edged.0.png new file mode 100644 index 00000000..89471e1f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/edged.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/edged.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/edged.1.png new file mode 100644 index 00000000..e999d146 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/edged.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/edged2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/edged2.0.png new file mode 100644 index 00000000..26d6b2bd Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/edged2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/edged2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/edged2.1.png new file mode 100644 index 00000000..f923905a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/edged2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/edged3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/edged3.0.png new file mode 100644 index 00000000..5f70d918 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/edged3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/edged3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/edged3.1.png new file mode 100644 index 00000000..f70c6227 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/edged3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/edged4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/edged4.0.png new file mode 100644 index 00000000..47d278c2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/edged4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/edged4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/edged4.1.png new file mode 100644 index 00000000..1ecbfa5f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/edged4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/emblem1.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/emblem1.0.png new file mode 100644 index 00000000..3fe090fd Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/emblem1.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/emblem1.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/emblem1.1.png new file mode 100644 index 00000000..6e0443bf Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/emblem1.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/emblem2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/emblem2.0.png new file mode 100644 index 00000000..200e4d06 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/emblem2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/emblem2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/emblem2.1.png new file mode 100644 index 00000000..289e7d1b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/emblem2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/emblem3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/emblem3.0.png new file mode 100644 index 00000000..672180a5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/emblem3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/emblem3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/emblem3.1.png new file mode 100644 index 00000000..9b546d90 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/emblem3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/emblem4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/emblem4.0.png new file mode 100644 index 00000000..b33b1a73 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/emblem4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/emblem4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/emblem4.1.png new file mode 100644 index 00000000..9ba7860d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/emblem4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/emblem5.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/emblem5.0.png new file mode 100644 index 00000000..5df7f7d4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/emblem5.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/emblem5.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/emblem5.1.png new file mode 100644 index 00000000..8df911f5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/emblem5.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/halved.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/halved.0.png new file mode 100644 index 00000000..b1eebc30 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/halved.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/halved.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/halved.1.png new file mode 100644 index 00000000..852f2174 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/halved.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/halved2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/halved2.0.png new file mode 100644 index 00000000..a3832a3f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/halved2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/halved2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/halved2.1.png new file mode 100644 index 00000000..bed58be1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/halved2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/lettera.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/lettera.0.png new file mode 100644 index 00000000..0d7ab853 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/lettera.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/lettera.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/lettera.1.png new file mode 100644 index 00000000..db3fe41b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/lettera.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/lettera2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/lettera2.0.png new file mode 100644 index 00000000..8dececb1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/lettera2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/lettera2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/lettera2.1.png new file mode 100644 index 00000000..b55e442b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/lettera2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/lettera3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/lettera3.0.png new file mode 100644 index 00000000..4077e7f5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/lettera3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/lettera3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/lettera3.1.png new file mode 100644 index 00000000..09a6af6e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/lettera3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/lettera4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/lettera4.0.png new file mode 100644 index 00000000..72029404 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/lettera4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/lettera4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/lettera4.1.png new file mode 100644 index 00000000..545af9cf Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/lettera4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letterb.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letterb.0.png new file mode 100644 index 00000000..c2c6c628 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letterb.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letterb.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letterb.1.png new file mode 100644 index 00000000..ccff9b3c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letterb.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letterb2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letterb2.0.png new file mode 100644 index 00000000..b43f3224 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letterb2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letterb2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letterb2.1.png new file mode 100644 index 00000000..0655229b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letterb2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letterb3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letterb3.0.png new file mode 100644 index 00000000..356b1047 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letterb3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letterb3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letterb3.1.png new file mode 100644 index 00000000..6c95c3e0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letterb3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letterb4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letterb4.0.png new file mode 100644 index 00000000..f22b71e2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letterb4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letterb4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letterb4.1.png new file mode 100644 index 00000000..cb2ee099 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letterb4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letterf.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letterf.0.png new file mode 100644 index 00000000..5f7e2bc9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letterf.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letterf.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letterf.1.png new file mode 100644 index 00000000..b3aeb71e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letterf.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letterf2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letterf2.0.png new file mode 100644 index 00000000..b56e33b8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letterf2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letterf2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letterf2.1.png new file mode 100644 index 00000000..92f8c247 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letterf2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letterf3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letterf3.0.png new file mode 100644 index 00000000..5fdf881f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letterf3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letterf3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letterf3.1.png new file mode 100644 index 00000000..d2928739 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letterf3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letterf4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letterf4.0.png new file mode 100644 index 00000000..29b782c1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letterf4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letterf4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letterf4.1.png new file mode 100644 index 00000000..9a275249 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letterf4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letters.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letters.0.png new file mode 100644 index 00000000..3d512483 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letters.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letters.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letters.1.png new file mode 100644 index 00000000..d3f06c64 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letters.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letters2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letters2.0.png new file mode 100644 index 00000000..188fc2c7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letters2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letters2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letters2.1.png new file mode 100644 index 00000000..a5a57168 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letters2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letters3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letters3.0.png new file mode 100644 index 00000000..86b252de Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letters3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letters3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letters3.1.png new file mode 100644 index 00000000..b587b695 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letters3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letters4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letters4.0.png new file mode 100644 index 00000000..3d512483 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letters4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/letters4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/letters4.1.png new file mode 100644 index 00000000..d3f06c64 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/letters4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/lettert.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/lettert.0.png new file mode 100644 index 00000000..486c57c6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/lettert.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/lettert.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/lettert.1.png new file mode 100644 index 00000000..132c390d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/lettert.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/lettert2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/lettert2.0.png new file mode 100644 index 00000000..1c4f12f8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/lettert2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/lettert2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/lettert2.1.png new file mode 100644 index 00000000..d8d9d87a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/lettert2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/lettert3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/lettert3.0.png new file mode 100644 index 00000000..1651f021 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/lettert3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/lettert3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/lettert3.1.png new file mode 100644 index 00000000..f855d148 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/lettert3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/lettert4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/lettert4.0.png new file mode 100644 index 00000000..828a3414 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/lettert4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/lettert4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/lettert4.1.png new file mode 100644 index 00000000..fea9ec78 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/lettert4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/multiply.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/multiply.0.png new file mode 100644 index 00000000..757a352c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/multiply.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/multiply.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/multiply.1.png new file mode 100644 index 00000000..c1e2cbc4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/multiply.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/octagon.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/octagon.0.png new file mode 100644 index 00000000..829ef97f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/octagon.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/octagon.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/octagon.1.png new file mode 100644 index 00000000..76ec10b8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/octagon.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/ornatebarred.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatebarred.0.png new file mode 100644 index 00000000..b7e48263 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatebarred.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/ornatebarred.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatebarred.1.png new file mode 100644 index 00000000..407cb9f8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatebarred.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/ornatebarred2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatebarred2.0.png new file mode 100644 index 00000000..f97ac84f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatebarred2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/ornatebarred2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatebarred2.1.png new file mode 100644 index 00000000..2369b816 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatebarred2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner.0.png new file mode 100644 index 00000000..bc1b75dd Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner.1.png new file mode 100644 index 00000000..91a38d4d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner2.0.png new file mode 100644 index 00000000..f8fb37f6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner2.1.png new file mode 100644 index 00000000..b863d1ba Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner3.0.png new file mode 100644 index 00000000..701555d2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner3.1.png new file mode 100644 index 00000000..ff427f52 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner4.0.png new file mode 100644 index 00000000..bee8018e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner4.1.png new file mode 100644 index 00000000..555523ae Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatestripedcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/ornatethinbarred.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatethinbarred.0.png new file mode 100644 index 00000000..a918e7f0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatethinbarred.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/ornatethinbarred.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatethinbarred.1.png new file mode 100644 index 00000000..61f5444f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatethinbarred.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/ornatethinbarred2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatethinbarred2.0.png new file mode 100644 index 00000000..3369d28c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatethinbarred2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/ornatethinbarred2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatethinbarred2.1.png new file mode 100644 index 00000000..7bd146c1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/ornatethinbarred2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedbarred.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedbarred.0.png new file mode 100644 index 00000000..48675b3a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedbarred.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedbarred.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedbarred.1.png new file mode 100644 index 00000000..d8cf8f12 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedbarred.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedbarred2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedbarred2.0.png new file mode 100644 index 00000000..48675b3a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedbarred2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedbarred2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedbarred2.1.png new file mode 100644 index 00000000..d8cf8f12 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedbarred2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedsplitbarred.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedsplitbarred.0.png new file mode 100644 index 00000000..be5d9846 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedsplitbarred.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedsplitbarred.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedsplitbarred.1.png new file mode 100644 index 00000000..2566c0c3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedsplitbarred.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedsplitbarred2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedsplitbarred2.0.png new file mode 100644 index 00000000..be5d9846 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedsplitbarred2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedsplitbarred2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedsplitbarred2.1.png new file mode 100644 index 00000000..2566c0c3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/overlappedsplitbarred2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/plus.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/plus.0.png new file mode 100644 index 00000000..e0be0db6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/plus.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/plus.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/plus.1.png new file mode 100644 index 00000000..b29a9503 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/plus.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/ringed.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/ringed.0.png new file mode 100644 index 00000000..988f86c1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/ringed.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/ringed.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/ringed.1.png new file mode 100644 index 00000000..ec7d87ab Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/ringed.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend.0.png new file mode 100644 index 00000000..f6ec808f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend.1.png new file mode 100644 index 00000000..32c364f5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend2.0.png new file mode 100644 index 00000000..87341200 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend2.1.png new file mode 100644 index 00000000..d01df435 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend3.0.png new file mode 100644 index 00000000..764edfb8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend3.1.png new file mode 100644 index 00000000..4686ff9d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend4.0.png new file mode 100644 index 00000000..8460a9cb Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend4.1.png new file mode 100644 index 00000000..18bc6a71 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/roundedbarredend4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/saltire.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/saltire.0.png new file mode 100644 index 00000000..13f87cb3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/saltire.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/saltire.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/saltire.1.png new file mode 100644 index 00000000..881378cd Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/saltire.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarred.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarred.0.png new file mode 100644 index 00000000..a0c5f7a6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarred.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarred.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarred.1.png new file mode 100644 index 00000000..29d865dd Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarred.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarred2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarred2.0.png new file mode 100644 index 00000000..93bc25af Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarred2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarred2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarred2.1.png new file mode 100644 index 00000000..d7327586 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarred2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner.0.png new file mode 100644 index 00000000..5cc61596 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner.1.png new file mode 100644 index 00000000..dcf4ff1c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner2.0.png new file mode 100644 index 00000000..cac53546 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner2.1.png new file mode 100644 index 00000000..d3f6f171 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner3.0.png new file mode 100644 index 00000000..1bd3bbb9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner3.1.png new file mode 100644 index 00000000..cd1271b5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner4.0.png new file mode 100644 index 00000000..7e60b5a8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner4.1.png new file mode 100644 index 00000000..f1b27cb1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend.0.png new file mode 100644 index 00000000..b702af20 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend.1.png new file mode 100644 index 00000000..4f934b9e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend2.0.png new file mode 100644 index 00000000..9c4bd93c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend2.1.png new file mode 100644 index 00000000..c307bc47 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend3.0.png new file mode 100644 index 00000000..4a0f912e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend3.1.png new file mode 100644 index 00000000..e7c939c9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend4.0.png new file mode 100644 index 00000000..fe1bbf4a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend4.1.png new file mode 100644 index 00000000..9df732c1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredend4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection.0.png new file mode 100644 index 00000000..7eced03b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection.1.png new file mode 100644 index 00000000..a0dc9a8e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection2.0.png new file mode 100644 index 00000000..20eb9c10 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection2.1.png new file mode 100644 index 00000000..7b79afcd Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection3.0.png new file mode 100644 index 00000000..242f7afe Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection3.1.png new file mode 100644 index 00000000..aaabc08e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection4.0.png new file mode 100644 index 00000000..21952aaa Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection4.1.png new file mode 100644 index 00000000..6f549bcc Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitbarredtsection4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitcrossed.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitcrossed.0.png new file mode 100644 index 00000000..be5d9846 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitcrossed.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/splitcrossed.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/splitcrossed.1.png new file mode 100644 index 00000000..2566c0c3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/splitcrossed.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/squared.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/squared.0.png new file mode 100644 index 00000000..10203870 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/squared.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/squared.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/squared.1.png new file mode 100644 index 00000000..79d44005 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/squared.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/striped.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/striped.0.png new file mode 100644 index 00000000..bddea94a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/striped.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/striped.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/striped.1.png new file mode 100644 index 00000000..f5759346 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/striped.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/striped2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/striped2.0.png new file mode 100644 index 00000000..9768ef62 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/striped2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/striped2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/striped2.1.png new file mode 100644 index 00000000..0c93ecd0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/striped2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner.0.png new file mode 100644 index 00000000..9647ac38 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner.1.png new file mode 100644 index 00000000..799935b8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner2.0.png new file mode 100644 index 00000000..f320ed9d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner2.1.png new file mode 100644 index 00000000..228b4f44 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner3.0.png new file mode 100644 index 00000000..8bc13ceb Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner3.1.png new file mode 100644 index 00000000..855f1956 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner4.0.png new file mode 100644 index 00000000..077b140d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner4.1.png new file mode 100644 index 00000000..51d0d4c1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/stripedcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarred.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarred.0.png new file mode 100644 index 00000000..a9992e66 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarred.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarred.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarred.1.png new file mode 100644 index 00000000..07a3c961 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarred.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarred2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarred2.0.png new file mode 100644 index 00000000..73ab2b7d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarred2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarred2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarred2.1.png new file mode 100644 index 00000000..485cb11d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarred2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner.0.png new file mode 100644 index 00000000..e28e4e83 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner.1.png new file mode 100644 index 00000000..0cf50c25 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner2.0.png new file mode 100644 index 00000000..d3e02ab5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner2.1.png new file mode 100644 index 00000000..cc396f5c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner3.0.png new file mode 100644 index 00000000..27cac4f0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner3.1.png new file mode 100644 index 00000000..c564b4c7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner4.0.png new file mode 100644 index 00000000..7447ca76 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner4.1.png new file mode 100644 index 00000000..e327164b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend.0.png new file mode 100644 index 00000000..ab572320 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend.1.png new file mode 100644 index 00000000..0253b05e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend2.0.png new file mode 100644 index 00000000..3976b646 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend2.1.png new file mode 100644 index 00000000..06e7ba76 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend3.0.png new file mode 100644 index 00000000..96046ec9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend3.1.png new file mode 100644 index 00000000..21541ee9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend4.0.png new file mode 100644 index 00000000..55724a90 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend4.1.png new file mode 100644 index 00000000..ea0e5f94 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickbarredend4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner.0.png new file mode 100644 index 00000000..0fd29989 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner.1.png new file mode 100644 index 00000000..c6768b2e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner2.0.png new file mode 100644 index 00000000..73afd0ac Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner2.1.png new file mode 100644 index 00000000..42104b54 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner3.0.png new file mode 100644 index 00000000..c40e1689 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner3.1.png new file mode 100644 index 00000000..32bf611e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner4.0.png new file mode 100644 index 00000000..26487ab8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner4.1.png new file mode 100644 index 00000000..a192d0c4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickcrossed.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickcrossed.0.png new file mode 100644 index 00000000..e6e049e4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickcrossed.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickcrossed.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickcrossed.1.png new file mode 100644 index 00000000..ae1d9eab Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickcrossed.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal.0.png new file mode 100644 index 00000000..b55a7ab1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal.1.png new file mode 100644 index 00000000..96b4421d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged.0.png new file mode 100644 index 00000000..00f1f301 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged.1.png new file mode 100644 index 00000000..ab4b3dc4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged2.0.png new file mode 100644 index 00000000..258bda97 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged2.1.png new file mode 100644 index 00000000..c9c90fa1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged3.0.png new file mode 100644 index 00000000..6d562226 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged3.1.png new file mode 100644 index 00000000..25e10cf7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged4.0.png new file mode 100644 index 00000000..21653350 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged4.1.png new file mode 100644 index 00000000..a9d7b9eb Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal1edged4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal2.0.png new file mode 100644 index 00000000..6f60edd7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal2.1.png new file mode 100644 index 00000000..99883b07 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal2edged.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal2edged.0.png new file mode 100644 index 00000000..ad9cbe86 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal2edged.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal2edged.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal2edged.1.png new file mode 100644 index 00000000..f703676a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal2edged.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal2edged2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal2edged2.0.png new file mode 100644 index 00000000..0040a4ee Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal2edged2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal2edged2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal2edged2.1.png new file mode 100644 index 00000000..9191b8e2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal2edged2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged.0.png new file mode 100644 index 00000000..f24ed85d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged.1.png new file mode 100644 index 00000000..0f7f5f21 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged2.0.png new file mode 100644 index 00000000..523a7b6f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged2.1.png new file mode 100644 index 00000000..e00840c3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged3.0.png new file mode 100644 index 00000000..350de5d8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged3.1.png new file mode 100644 index 00000000..5249cf39 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged4.0.png new file mode 100644 index 00000000..44c8e335 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged4.1.png new file mode 100644 index 00000000..c731c6fd Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal3edged4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal4edged.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal4edged.0.png new file mode 100644 index 00000000..894d6531 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal4edged.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal4edged.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal4edged.1.png new file mode 100644 index 00000000..0ff949c3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickdiagonal4edged.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend.0.png new file mode 100644 index 00000000..3c81c607 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend.1.png new file mode 100644 index 00000000..0e543f0e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend2.0.png new file mode 100644 index 00000000..c1abea62 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend2.1.png new file mode 100644 index 00000000..ee80ab12 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend3.0.png new file mode 100644 index 00000000..79fb3a87 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend3.1.png new file mode 100644 index 00000000..82f35959 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend4.0.png new file mode 100644 index 00000000..df12d642 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend4.1.png new file mode 100644 index 00000000..ebe63525 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thickroundedbarredend4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thicksaltire.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thicksaltire.0.png new file mode 100644 index 00000000..adee37ee Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thicksaltire.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thicksaltire.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thicksaltire.1.png new file mode 100644 index 00000000..73933de7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thicksaltire.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection.0.png new file mode 100644 index 00000000..4567c24b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection.1.png new file mode 100644 index 00000000..462ec0cb Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection2.0.png new file mode 100644 index 00000000..d64094c6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection2.1.png new file mode 100644 index 00000000..ce8ba98a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection3.0.png new file mode 100644 index 00000000..0911bb3f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection3.1.png new file mode 100644 index 00000000..3927c24f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection4.0.png new file mode 100644 index 00000000..4f39e630 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection4.1.png new file mode 100644 index 00000000..912f0084 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thicktsection4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarred.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarred.0.png new file mode 100644 index 00000000..c6d63716 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarred.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarred.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarred.1.png new file mode 100644 index 00000000..90d7b55b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarred.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarred2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarred2.0.png new file mode 100644 index 00000000..56a9629f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarred2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarred2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarred2.1.png new file mode 100644 index 00000000..54211ee2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarred2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner.0.png new file mode 100644 index 00000000..229bc0a6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner.1.png new file mode 100644 index 00000000..810f18a9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner2.0.png new file mode 100644 index 00000000..74387162 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner2.1.png new file mode 100644 index 00000000..119d0a35 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner3.0.png new file mode 100644 index 00000000..373fac8c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner3.1.png new file mode 100644 index 00000000..6b3ef6d6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner4.0.png new file mode 100644 index 00000000..26b6f825 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner4.1.png new file mode 100644 index 00000000..4d5e5307 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend.0.png new file mode 100644 index 00000000..9fa3fbcf Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend.1.png new file mode 100644 index 00000000..18bd58a6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend2.0.png new file mode 100644 index 00000000..eb0edd2d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend2.1.png new file mode 100644 index 00000000..ce1f376b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend3.0.png new file mode 100644 index 00000000..e77c9c1e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend3.1.png new file mode 100644 index 00000000..aede69c0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend4.0.png new file mode 100644 index 00000000..e3d7612f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend4.1.png new file mode 100644 index 00000000..59ab71fc Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinbarredend4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner.0.png new file mode 100644 index 00000000..6faf1a00 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner.1.png new file mode 100644 index 00000000..274fb721 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner2.0.png new file mode 100644 index 00000000..f2d96129 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner2.1.png new file mode 100644 index 00000000..4e1f0e93 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner3.0.png new file mode 100644 index 00000000..d7c027e5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner3.1.png new file mode 100644 index 00000000..26ddea6e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner4.0.png new file mode 100644 index 00000000..5d8b7ec9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner4.1.png new file mode 100644 index 00000000..5c648590 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincrossed.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincrossed.0.png new file mode 100644 index 00000000..f30646f0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincrossed.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincrossed.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincrossed.1.png new file mode 100644 index 00000000..1ba2e93a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincrossed.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner.0.png new file mode 100644 index 00000000..24246cc2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner.1.png new file mode 100644 index 00000000..dac71dd6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner2.0.png new file mode 100644 index 00000000..d7c0acf4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner2.1.png new file mode 100644 index 00000000..16c8247d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner3.0.png new file mode 100644 index 00000000..60e57ec4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner3.1.png new file mode 100644 index 00000000..0650c17d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner4.0.png new file mode 100644 index 00000000..7da5a1ff Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner4.1.png new file mode 100644 index 00000000..c3995678 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedbarredcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner.0.png new file mode 100644 index 00000000..5ba66da2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner.1.png new file mode 100644 index 00000000..db293ded Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner2.0.png new file mode 100644 index 00000000..1714bbe8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner2.1.png new file mode 100644 index 00000000..6340c874 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner3.0.png new file mode 100644 index 00000000..38011da1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner3.1.png new file mode 100644 index 00000000..1383ab3e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner4.0.png new file mode 100644 index 00000000..e100e192 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner4.1.png new file mode 100644 index 00000000..f1a028ee Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcrossed.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcrossed.0.png new file mode 100644 index 00000000..bd58c68c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcrossed.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcrossed.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcrossed.1.png new file mode 100644 index 00000000..32d3db23 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedcrossed.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection.0.png new file mode 100644 index 00000000..b85360e0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection.1.png new file mode 100644 index 00000000..be2a07bf Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection2.0.png new file mode 100644 index 00000000..7cfd9816 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection2.1.png new file mode 100644 index 00000000..98cc070f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection3.0.png new file mode 100644 index 00000000..8719be14 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection3.1.png new file mode 100644 index 00000000..8fe7d956 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection4.0.png new file mode 100644 index 00000000..4de16475 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection4.1.png new file mode 100644 index 00000000..3b6fe211 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thincurvedtsection4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thindiagonalstriped.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thindiagonalstriped.0.png new file mode 100644 index 00000000..c716b387 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thindiagonalstriped.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thindiagonalstriped.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thindiagonalstriped.1.png new file mode 100644 index 00000000..71ae56dc Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thindiagonalstriped.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thindiagonalstriped2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thindiagonalstriped2.0.png new file mode 100644 index 00000000..dd7ac712 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thindiagonalstriped2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thindiagonalstriped2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thindiagonalstriped2.1.png new file mode 100644 index 00000000..d6253299 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thindiagonalstriped2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged.0.png new file mode 100644 index 00000000..545174df Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged.1.png new file mode 100644 index 00000000..719b2172 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged2.0.png new file mode 100644 index 00000000..dc9dd8e8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged2.1.png new file mode 100644 index 00000000..3a7a2662 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged3.0.png new file mode 100644 index 00000000..05863d68 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged3.1.png new file mode 100644 index 00000000..cba64992 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged4.0.png new file mode 100644 index 00000000..b2835275 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged4.1.png new file mode 100644 index 00000000..493001c3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinedged4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinsaltire.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinsaltire.0.png new file mode 100644 index 00000000..4a04abf6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinsaltire.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinsaltire.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinsaltire.1.png new file mode 100644 index 00000000..0e2ac7db Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinsaltire.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinstriped.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstriped.0.png new file mode 100644 index 00000000..7f4486bc Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstriped.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinstriped.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstriped.1.png new file mode 100644 index 00000000..82a85710 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstriped.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinstriped2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstriped2.0.png new file mode 100644 index 00000000..e69c9cb0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstriped2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinstriped2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstriped2.1.png new file mode 100644 index 00000000..c29c847f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstriped2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner.0.png new file mode 100644 index 00000000..b693c31f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner.1.png new file mode 100644 index 00000000..bba63b31 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner2.0.png new file mode 100644 index 00000000..c0bc05e3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner2.1.png new file mode 100644 index 00000000..9787a8a5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner3.0.png new file mode 100644 index 00000000..766b99bb Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner3.1.png new file mode 100644 index 00000000..437e0e6d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner4.0.png new file mode 100644 index 00000000..db28551c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner4.1.png new file mode 100644 index 00000000..f17f5124 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thinstripedcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection.0.png new file mode 100644 index 00000000..0c6aec42 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection.1.png new file mode 100644 index 00000000..8952391b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection2.0.png new file mode 100644 index 00000000..e7fc7a7a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection2.1.png new file mode 100644 index 00000000..04048991 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection3.0.png new file mode 100644 index 00000000..54e1c596 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection3.1.png new file mode 100644 index 00000000..5c4a8064 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection4.0.png new file mode 100644 index 00000000..ffbf852f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection4.1.png new file mode 100644 index 00000000..c123aae1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/thintsection4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/tiled.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/tiled.0.png new file mode 100644 index 00000000..2756ae7f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/tiled.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/tiled.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/tiled.1.png new file mode 100644 index 00000000..02bc4e13 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/tiled.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/tsection.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/tsection.0.png new file mode 100644 index 00000000..88acdc92 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/tsection.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/tsection.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/tsection.1.png new file mode 100644 index 00000000..3db0213a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/tsection.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/tsection2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/tsection2.0.png new file mode 100644 index 00000000..ca261e23 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/tsection2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/tsection2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/tsection2.1.png new file mode 100644 index 00000000..67437d31 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/tsection2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/tsection3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/tsection3.0.png new file mode 100644 index 00000000..b29d423f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/tsection3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/tsection3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/tsection3.1.png new file mode 100644 index 00000000..1e4ac271 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/tsection3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/tsection4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/tsection4.0.png new file mode 100644 index 00000000..fc1e56c0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/tsection4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/tsection4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/tsection4.1.png new file mode 100644 index 00000000..276bc08a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/tsection4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner.0.png new file mode 100644 index 00000000..44057de1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner.1.png new file mode 100644 index 00000000..963f5b50 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner2.0.png new file mode 100644 index 00000000..ded79b5e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner2.1.png new file mode 100644 index 00000000..10f04f56 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner3.0.png new file mode 100644 index 00000000..fa48862e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner3.1.png new file mode 100644 index 00000000..bd3e6d5a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner4.0.png new file mode 100644 index 00000000..85754f65 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner4.1.png new file mode 100644 index 00000000..2115b6ed Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/verythincorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarred.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarred.0.png new file mode 100644 index 00000000..36308bb3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarred.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarred.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarred.1.png new file mode 100644 index 00000000..803c53e2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarred.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarred2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarred2.0.png new file mode 100644 index 00000000..1d25075a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarred2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarred2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarred2.1.png new file mode 100644 index 00000000..943ab57a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarred2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarredalt.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarredalt.0.png new file mode 100644 index 00000000..3be39bf8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarredalt.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarredalt.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarredalt.1.png new file mode 100644 index 00000000..06ec4287 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarredalt.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarredalt2.0.png b/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarredalt2.0.png new file mode 100644 index 00000000..22063e39 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarredalt2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarredalt2.1.png b/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarredalt2.1.png new file mode 100644 index 00000000..c7a2c0a8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/glass/wavybarredalt2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/kitchen/plain.png b/src/main/resources/assets/extratrees/textures/blocks/kitchen/plain.png new file mode 100644 index 00000000..1384df54 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/kitchen/plain.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/liquids/latex.png b/src/main/resources/assets/extratrees/textures/blocks/liquids/latex.png new file mode 100644 index 00000000..7740c338 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/liquids/latex.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/liquids/latex.png.mcmeta b/src/main/resources/assets/extratrees/textures/blocks/liquids/latex.png.mcmeta new file mode 100644 index 00000000..0c36dcaa --- /dev/null +++ b/src/main/resources/assets/extratrees/textures/blocks/liquids/latex.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":32,"frametime":1,"frames":[{"index":0,"time":2},{"index":1,"time":2},{"index":2,"time":2},{"index":3,"time":2},{"index":4,"time":2},{"index":5,"time":2},{"index":6,"time":2},{"index":7,"time":2},{"index":8,"time":2},{"index":9,"time":2},{"index":10,"time":2},{"index":11,"time":2},{"index":12,"time":2},{"index":13,"time":2},{"index":14,"time":2},{"index":15,"time":2},{"index":16,"time":2},{"index":17,"time":2},{"index":18,"time":2},{"index":19,"time":2},{"index":20,"time":2},{"index":21,"time":2},{"index":22,"time":2},{"index":23,"time":2},{"index":24,"time":2},{"index":25,"time":2},{"index":26,"time":2},{"index":27,"time":2},{"index":28,"time":2},{"index":29,"time":2},{"index":30,"time":2},{"index":31,"time":2}]}} \ No newline at end of file diff --git a/src/main/resources/assets/extratrees/textures/blocks/liquids/latex.txt b/src/main/resources/assets/extratrees/textures/blocks/liquids/latex.txt new file mode 100644 index 00000000..d8fe765a --- /dev/null +++ b/src/main/resources/assets/extratrees/textures/blocks/liquids/latex.txt @@ -0,0 +1,32 @@ +0*2 +1*2 +2*2 +3*2 +4*2 +5*2 +6*2 +7*2 +8*2 +9*2 +10*2 +11*2 +12*2 +13*2 +14*2 +15*2 +16*2 +17*2 +18*2 +19*2 +20*2 +21*2 +22*2 +23*2 +24*2 +25*2 +26*2 +27*2 +28*2 +29*2 +30*2 +31*2 diff --git a/src/main/resources/assets/extratrees/textures/blocks/liquids/liquid.png b/src/main/resources/assets/extratrees/textures/blocks/liquids/liquid.png new file mode 100644 index 00000000..760304f2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/liquids/liquid.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/liquids/liquid.png.mcmeta b/src/main/resources/assets/extratrees/textures/blocks/liquids/liquid.png.mcmeta new file mode 100644 index 00000000..0c36dcaa --- /dev/null +++ b/src/main/resources/assets/extratrees/textures/blocks/liquids/liquid.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":32,"frametime":1,"frames":[{"index":0,"time":2},{"index":1,"time":2},{"index":2,"time":2},{"index":3,"time":2},{"index":4,"time":2},{"index":5,"time":2},{"index":6,"time":2},{"index":7,"time":2},{"index":8,"time":2},{"index":9,"time":2},{"index":10,"time":2},{"index":11,"time":2},{"index":12,"time":2},{"index":13,"time":2},{"index":14,"time":2},{"index":15,"time":2},{"index":16,"time":2},{"index":17,"time":2},{"index":18,"time":2},{"index":19,"time":2},{"index":20,"time":2},{"index":21,"time":2},{"index":22,"time":2},{"index":23,"time":2},{"index":24,"time":2},{"index":25,"time":2},{"index":26,"time":2},{"index":27,"time":2},{"index":28,"time":2},{"index":29,"time":2},{"index":30,"time":2},{"index":31,"time":2}]}} \ No newline at end of file diff --git a/src/main/resources/assets/extratrees/textures/blocks/liquids/liquid2.png b/src/main/resources/assets/extratrees/textures/blocks/liquids/liquid2.png new file mode 100644 index 00000000..3b1ae36a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/liquids/liquid2.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/liquids/resin.png b/src/main/resources/assets/extratrees/textures/blocks/liquids/resin.png new file mode 100644 index 00000000..c05de8b4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/liquids/resin.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/liquids/resin.png.mcmeta b/src/main/resources/assets/extratrees/textures/blocks/liquids/resin.png.mcmeta new file mode 100644 index 00000000..7099588d --- /dev/null +++ b/src/main/resources/assets/extratrees/textures/blocks/liquids/resin.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":32,"frametime":1,"frames":[{"index":0,"time":6},{"index":1,"time":6},{"index":2,"time":6},{"index":3,"time":6},{"index":4,"time":6},{"index":5,"time":6},{"index":6,"time":6},{"index":7,"time":6},{"index":8,"time":6},{"index":9,"time":6},{"index":10,"time":6},{"index":11,"time":6},{"index":12,"time":6},{"index":13,"time":6},{"index":14,"time":6},{"index":15,"time":6},{"index":16,"time":6},{"index":17,"time":6},{"index":18,"time":6},{"index":19,"time":6},{"index":20,"time":6},{"index":21,"time":6},{"index":22,"time":6},{"index":23,"time":6},{"index":24,"time":6},{"index":25,"time":6},{"index":26,"time":6},{"index":27,"time":6},{"index":28,"time":6},{"index":29,"time":6},{"index":30,"time":6},{"index":31,"time":6}]}} \ No newline at end of file diff --git a/src/main/resources/assets/extratrees/textures/blocks/liquids/resin.txt b/src/main/resources/assets/extratrees/textures/blocks/liquids/resin.txt new file mode 100644 index 00000000..495a62a3 --- /dev/null +++ b/src/main/resources/assets/extratrees/textures/blocks/liquids/resin.txt @@ -0,0 +1,32 @@ +0*6 +1*6 +2*6 +3*6 +4*6 +5*6 +6*6 +7*6 +8*6 +9*6 +10*6 +11*6 +12*6 +13*6 +14*6 +15*6 +16*6 +17*6 +18*6 +19*6 +20*6 +21*6 +22*6 +23*6 +24*6 +25*6 +26*6 +27*6 +28*6 +29*6 +30*6 +31*6 diff --git a/src/main/resources/assets/extratrees/textures/blocks/liquids/sap.png b/src/main/resources/assets/extratrees/textures/blocks/liquids/sap.png new file mode 100644 index 00000000..1fd2e6af Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/liquids/sap.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/liquids/sap.png.mcmeta b/src/main/resources/assets/extratrees/textures/blocks/liquids/sap.png.mcmeta new file mode 100644 index 00000000..c57ae75a --- /dev/null +++ b/src/main/resources/assets/extratrees/textures/blocks/liquids/sap.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":32,"frametime":1,"frames":[{"index":0,"time":4},{"index":1,"time":4},{"index":2,"time":4},{"index":3,"time":4},{"index":4,"time":4},{"index":5,"time":4},{"index":6,"time":4},{"index":7,"time":4},{"index":8,"time":4},{"index":9,"time":4},{"index":10,"time":4},{"index":11,"time":4},{"index":12,"time":4},{"index":13,"time":4},{"index":14,"time":4},{"index":15,"time":4},{"index":16,"time":4},{"index":17,"time":4},{"index":18,"time":4},{"index":19,"time":4},{"index":20,"time":4},{"index":21,"time":4},{"index":22,"time":4},{"index":23,"time":4},{"index":24,"time":4},{"index":25,"time":4},{"index":26,"time":4},{"index":27,"time":4},{"index":28,"time":4},{"index":29,"time":4},{"index":30,"time":4},{"index":31,"time":4}]}} \ No newline at end of file diff --git a/src/main/resources/assets/extratrees/textures/blocks/liquids/sap.txt b/src/main/resources/assets/extratrees/textures/blocks/liquids/sap.txt new file mode 100644 index 00000000..371ff436 --- /dev/null +++ b/src/main/resources/assets/extratrees/textures/blocks/liquids/sap.txt @@ -0,0 +1,32 @@ +0*4 +1*4 +2*4 +3*4 +4*4 +5*4 +6*4 +7*4 +8*4 +9*4 +10*4 +11*4 +12*4 +13*4 +14*4 +15*4 +16*4 +17*4 +18*4 +19*4 +20*4 +21*4 +22*4 +23*4 +24*4 +25*4 +26*4 +27*4 +28*4 +29*4 +30*4 +31*4 diff --git a/src/main/resources/assets/extratrees/textures/blocks/liquids/turpentine.png b/src/main/resources/assets/extratrees/textures/blocks/liquids/turpentine.png new file mode 100644 index 00000000..20030180 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/liquids/turpentine.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/liquids/turpentine.png.mcmeta b/src/main/resources/assets/extratrees/textures/blocks/liquids/turpentine.png.mcmeta new file mode 100644 index 00000000..0c36dcaa --- /dev/null +++ b/src/main/resources/assets/extratrees/textures/blocks/liquids/turpentine.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":32,"frametime":1,"frames":[{"index":0,"time":2},{"index":1,"time":2},{"index":2,"time":2},{"index":3,"time":2},{"index":4,"time":2},{"index":5,"time":2},{"index":6,"time":2},{"index":7,"time":2},{"index":8,"time":2},{"index":9,"time":2},{"index":10,"time":2},{"index":11,"time":2},{"index":12,"time":2},{"index":13,"time":2},{"index":14,"time":2},{"index":15,"time":2},{"index":16,"time":2},{"index":17,"time":2},{"index":18,"time":2},{"index":19,"time":2},{"index":20,"time":2},{"index":21,"time":2},{"index":22,"time":2},{"index":23,"time":2},{"index":24,"time":2},{"index":25,"time":2},{"index":26,"time":2},{"index":27,"time":2},{"index":28,"time":2},{"index":29,"time":2},{"index":30,"time":2},{"index":31,"time":2}]}} \ No newline at end of file diff --git a/src/main/resources/assets/extratrees/textures/blocks/liquids/turpentine.txt b/src/main/resources/assets/extratrees/textures/blocks/liquids/turpentine.txt new file mode 100644 index 00000000..d8fe765a --- /dev/null +++ b/src/main/resources/assets/extratrees/textures/blocks/liquids/turpentine.txt @@ -0,0 +1,32 @@ +0*2 +1*2 +2*2 +3*2 +4*2 +5*2 +6*2 +7*2 +8*2 +9*2 +10*2 +11*2 +12*2 +13*2 +14*2 +15*2 +16*2 +17*2 +18*2 +19*2 +20*2 +21*2 +22*2 +23*2 +24*2 +25*2 +26*2 +27*2 +28*2 +29*2 +30*2 +31*2 diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/alderBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/alderBark.png new file mode 100644 index 00000000..f00e4f9a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/alderBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/alderTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/alderTrunk.png new file mode 100644 index 00000000..edb5613e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/alderTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/appleBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/appleBark.png new file mode 100644 index 00000000..f1eca661 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/appleBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/appleTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/appleTrunk.png new file mode 100644 index 00000000..d97251c8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/appleTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/ashBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/ashBark.png new file mode 100644 index 00000000..5c8af18d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/ashBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/ashTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/ashTrunk.png new file mode 100644 index 00000000..b1e93571 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/ashTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/bananaBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/bananaBark.png new file mode 100644 index 00000000..fb1af6ad Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/bananaBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/bananaTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/bananaTrunk.png new file mode 100644 index 00000000..3e3389c0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/bananaTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/beechBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/beechBark.png new file mode 100644 index 00000000..338f15fd Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/beechBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/beechTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/beechTrunk.png new file mode 100644 index 00000000..09cb077a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/beechTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/boxBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/boxBark.png new file mode 100644 index 00000000..50bbce23 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/boxBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/boxTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/boxTrunk.png new file mode 100644 index 00000000..ee760319 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/boxTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/brazilwoodBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/brazilwoodBark.png new file mode 100644 index 00000000..510c3f5c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/brazilwoodBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/brazilwoodTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/brazilwoodTrunk.png new file mode 100644 index 00000000..d1cdcfed Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/brazilwoodTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/butternutBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/butternutBark.png new file mode 100644 index 00000000..5ce2051e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/butternutBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/butternutTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/butternutTrunk.png new file mode 100644 index 00000000..7d2b85c0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/butternutTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/cedarBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/cedarBark.png new file mode 100644 index 00000000..d937e018 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/cedarBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/cedarTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/cedarTrunk.png new file mode 100644 index 00000000..e6463659 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/cedarTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/cherryBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/cherryBark.png new file mode 100644 index 00000000..b6c7b1c1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/cherryBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/cherryTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/cherryTrunk.png new file mode 100644 index 00000000..8e597105 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/cherryTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/cinnamonBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/cinnamonBark.png new file mode 100644 index 00000000..fa443aa3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/cinnamonBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/cinnamonTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/cinnamonTrunk.png new file mode 100644 index 00000000..814ecc37 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/cinnamonTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/cypressBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/cypressBark.png new file mode 100644 index 00000000..16f0e944 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/cypressBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/cypressTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/cypressTrunk.png new file mode 100644 index 00000000..e05a4bf2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/cypressTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/elderBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/elderBark.png new file mode 100644 index 00000000..4f41e79d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/elderBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/elderTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/elderTrunk.png new file mode 100644 index 00000000..f4d0afa6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/elderTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/elmBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/elmBark.png new file mode 100644 index 00000000..a118907c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/elmBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/elmTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/elmTrunk.png new file mode 100644 index 00000000..5ee14606 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/elmTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/eucalyptus2Bark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/eucalyptus2Bark.png new file mode 100644 index 00000000..782520f3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/eucalyptus2Bark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/eucalyptus2Trunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/eucalyptus2Trunk.png new file mode 100644 index 00000000..01185a5c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/eucalyptus2Trunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/eucalyptus3Bark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/eucalyptus3Bark.png new file mode 100644 index 00000000..5bf6640d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/eucalyptus3Bark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/eucalyptus3Trunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/eucalyptus3Trunk.png new file mode 100644 index 00000000..a5f87b87 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/eucalyptus3Trunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/eucalyptusBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/eucalyptusBark.png new file mode 100644 index 00000000..f32fbc95 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/eucalyptusBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/eucalyptusTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/eucalyptusTrunk.png new file mode 100644 index 00000000..82cfeaa7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/eucalyptusTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/figBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/figBark.png new file mode 100644 index 00000000..706a52cb Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/figBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/figTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/figTrunk.png new file mode 100644 index 00000000..418cc07f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/figTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/firBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/firBark.png new file mode 100644 index 00000000..5edecab7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/firBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/firTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/firTrunk.png new file mode 100644 index 00000000..246051a8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/firTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/gingkoBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/gingkoBark.png new file mode 100644 index 00000000..72a93b4b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/gingkoBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/gingkoTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/gingkoTrunk.png new file mode 100644 index 00000000..e29535ca Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/gingkoTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/hawthornBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/hawthornBark.png new file mode 100644 index 00000000..fe338451 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/hawthornBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/hawthornTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/hawthornTrunk.png new file mode 100644 index 00000000..2bb39af8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/hawthornTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/hazelBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/hazelBark.png new file mode 100644 index 00000000..184e2d0c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/hazelBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/hazelTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/hazelTrunk.png new file mode 100644 index 00000000..137f6bb5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/hazelTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/hemlockBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/hemlockBark.png new file mode 100644 index 00000000..15ecece8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/hemlockBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/hemlockTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/hemlockTrunk.png new file mode 100644 index 00000000..8358a570 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/hemlockTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/hickoryBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/hickoryBark.png new file mode 100644 index 00000000..0c335dd4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/hickoryBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/hickoryTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/hickoryTrunk.png new file mode 100644 index 00000000..29b09fbf Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/hickoryTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/hollyBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/hollyBark.png new file mode 100644 index 00000000..2a132091 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/hollyBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/hollyTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/hollyTrunk.png new file mode 100644 index 00000000..e0baa78c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/hollyTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/hornbeamBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/hornbeamBark.png new file mode 100644 index 00000000..63ae99c2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/hornbeamBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/hornbeamTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/hornbeamTrunk.png new file mode 100644 index 00000000..729bb408 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/hornbeamTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/irokoBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/irokoBark.png new file mode 100644 index 00000000..230c7c03 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/irokoBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/irokoTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/irokoTrunk.png new file mode 100644 index 00000000..6ac23bf1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/irokoTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/locustBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/locustBark.png new file mode 100644 index 00000000..dd7db8e2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/locustBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/locustTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/locustTrunk.png new file mode 100644 index 00000000..677b9a57 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/locustTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/logwoodBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/logwoodBark.png new file mode 100644 index 00000000..d295e32a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/logwoodBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/logwoodTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/logwoodTrunk.png new file mode 100644 index 00000000..802f8901 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/logwoodTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/macluraBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/macluraBark.png new file mode 100644 index 00000000..a68ca222 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/macluraBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/macluraTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/macluraTrunk.png new file mode 100644 index 00000000..abd6808c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/macluraTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/mapleBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/mapleBark.png new file mode 100644 index 00000000..5dd5bc7f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/mapleBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/mapleTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/mapleTrunk.png new file mode 100644 index 00000000..c934db69 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/mapleTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/oliveBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/oliveBark.png new file mode 100644 index 00000000..d9fa0a15 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/oliveBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/oliveTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/oliveTrunk.png new file mode 100644 index 00000000..834031c2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/oliveTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/pearBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/pearBark.png new file mode 100644 index 00000000..5a5dc781 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/pearBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/pearTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/pearTrunk.png new file mode 100644 index 00000000..df03aa7e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/pearTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/pinkivoryBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/pinkivoryBark.png new file mode 100644 index 00000000..e7a0297a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/pinkivoryBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/pinkivoryTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/pinkivoryTrunk.png new file mode 100644 index 00000000..901b0ea8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/pinkivoryTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/purpleheartBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/purpleheartBark.png new file mode 100644 index 00000000..a541141b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/purpleheartBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/purpleheartTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/purpleheartTrunk.png new file mode 100644 index 00000000..55e7528a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/purpleheartTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/rosewoodBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/rosewoodBark.png new file mode 100644 index 00000000..a94b507f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/rosewoodBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/rosewoodTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/rosewoodTrunk.png new file mode 100644 index 00000000..d9f7f333 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/rosewoodTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/rowanBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/rowanBark.png new file mode 100644 index 00000000..adaf783b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/rowanBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/rowanTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/rowanTrunk.png new file mode 100644 index 00000000..9d1b7142 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/rowanTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/sweetgumBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/sweetgumBark.png new file mode 100644 index 00000000..e50b2bb0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/sweetgumBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/sweetgumTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/sweetgumTrunk.png new file mode 100644 index 00000000..b96070ae Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/sweetgumTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/syzgiumBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/syzgiumBark.png new file mode 100644 index 00000000..47a14327 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/syzgiumBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/syzgiumTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/syzgiumTrunk.png new file mode 100644 index 00000000..45a6d6b9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/syzgiumTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/whitebeamBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/whitebeamBark.png new file mode 100644 index 00000000..eb0fccbc Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/whitebeamBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/whitebeamTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/whitebeamTrunk.png new file mode 100644 index 00000000..46e6ec5f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/whitebeamTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/yewBark.png b/src/main/resources/assets/extratrees/textures/blocks/logs/yewBark.png new file mode 100644 index 00000000..00d64a0b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/yewBark.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/logs/yewTrunk.png b/src/main/resources/assets/extratrees/textures/blocks/logs/yewTrunk.png new file mode 100644 index 00000000..23cecab1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/logs/yewTrunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barred.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barred.0.png new file mode 100644 index 00000000..a5f05b95 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barred.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barred.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barred.1.png new file mode 100644 index 00000000..74f3c13e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barred.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barred2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barred2.0.png new file mode 100644 index 00000000..0eac2fec Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barred2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barred2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barred2.1.png new file mode 100644 index 00000000..386e5aa8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barred2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner.0.png new file mode 100644 index 00000000..0e97231f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner.1.png new file mode 100644 index 00000000..07e5ff0d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner2.0.png new file mode 100644 index 00000000..42a653ca Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner2.1.png new file mode 100644 index 00000000..1ce10939 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner3.0.png new file mode 100644 index 00000000..e954f530 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner3.1.png new file mode 100644 index 00000000..ab104029 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner4.0.png new file mode 100644 index 00000000..13843369 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner4.1.png new file mode 100644 index 00000000..b915cee4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner.0.png new file mode 100644 index 00000000..4068db82 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner.1.png new file mode 100644 index 00000000..6d196257 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner2.0.png new file mode 100644 index 00000000..7961fa2a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner2.1.png new file mode 100644 index 00000000..7ab4480a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner3.0.png new file mode 100644 index 00000000..532cfef2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner3.1.png new file mode 100644 index 00000000..a2460ba9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner4.0.png new file mode 100644 index 00000000..30e05801 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner4.1.png new file mode 100644 index 00000000..eb0f6879 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredcurvedcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend.0.png new file mode 100644 index 00000000..5beec7fc Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend.1.png new file mode 100644 index 00000000..fae124b8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend2.0.png new file mode 100644 index 00000000..fc380817 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend2.1.png new file mode 100644 index 00000000..abf82b53 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend3.0.png new file mode 100644 index 00000000..8b86c945 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend3.1.png new file mode 100644 index 00000000..6fa68e43 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend4.0.png new file mode 100644 index 00000000..d786696c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend4.1.png new file mode 100644 index 00000000..d9ed9ff4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/barredend4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/blank.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/blank.0.png new file mode 100644 index 00000000..1733fb3b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/blank.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/blank.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/blank.1.png new file mode 100644 index 00000000..96729e15 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/blank.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/bottom.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/bottom.0.png new file mode 100644 index 00000000..2553ac2c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/bottom.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/bottom.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/bottom.1.png new file mode 100644 index 00000000..2553ac2c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/bottom.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/chequered.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/chequered.0.png new file mode 100644 index 00000000..543b3acc Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/chequered.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/chequered.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/chequered.1.png new file mode 100644 index 00000000..21aa7fc0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/chequered.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/circle.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/circle.0.png new file mode 100644 index 00000000..1fee6b31 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/circle.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/circle.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/circle.1.png new file mode 100644 index 00000000..ae97fd5a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/circle.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/corner.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/corner.0.png new file mode 100644 index 00000000..1d4059d1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/corner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/corner.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/corner.1.png new file mode 100644 index 00000000..90472abd Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/corner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/corner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/corner2.0.png new file mode 100644 index 00000000..20051117 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/corner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/corner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/corner2.1.png new file mode 100644 index 00000000..bc87d730 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/corner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/corner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/corner3.0.png new file mode 100644 index 00000000..40704078 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/corner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/corner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/corner3.1.png new file mode 100644 index 00000000..6564f4d2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/corner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/corner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/corner4.0.png new file mode 100644 index 00000000..0bd9126b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/corner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/corner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/corner4.1.png new file mode 100644 index 00000000..8d46d0e8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/corner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper.0.png new file mode 100644 index 00000000..e35f9317 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper.1.png new file mode 100644 index 00000000..663b2dcc Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper2.0.png new file mode 100644 index 00000000..9e233919 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper2.1.png new file mode 100644 index 00000000..c52b3567 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper3.0.png new file mode 100644 index 00000000..f3d01845 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper3.1.png new file mode 100644 index 00000000..67e12626 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper4.0.png new file mode 100644 index 00000000..e4ad49ba Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper4.1.png new file mode 100644 index 00000000..2a409c57 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/creeper4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/crossed.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/crossed.0.png new file mode 100644 index 00000000..366bfb12 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/crossed.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/crossed.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/crossed.1.png new file mode 100644 index 00000000..0f78c977 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/crossed.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner.0.png new file mode 100644 index 00000000..4e8c3e64 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner.1.png new file mode 100644 index 00000000..b4452328 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner2.0.png new file mode 100644 index 00000000..bbd96723 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner2.1.png new file mode 100644 index 00000000..a50e4c46 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner3.0.png new file mode 100644 index 00000000..3507f43c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner3.1.png new file mode 100644 index 00000000..6e06c627 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner4.0.png new file mode 100644 index 00000000..155693ed Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner4.1.png new file mode 100644 index 00000000..0833d71f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner.0.png new file mode 100644 index 00000000..e53d769f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner.1.png new file mode 100644 index 00000000..4a0f1fc8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner2.0.png new file mode 100644 index 00000000..bf19d3bf Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner2.1.png new file mode 100644 index 00000000..e1e4aa29 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner3.0.png new file mode 100644 index 00000000..6372b700 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner3.1.png new file mode 100644 index 00000000..dbb055f3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner4.0.png new file mode 100644 index 00000000..4ed0cebc Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner4.1.png new file mode 100644 index 00000000..1d850c9c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedsplitbarredcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection.0.png new file mode 100644 index 00000000..d9866e87 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection.1.png new file mode 100644 index 00000000..ae6180e0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection2.0.png new file mode 100644 index 00000000..6db9b9f8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection2.1.png new file mode 100644 index 00000000..21ac922d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection3.0.png new file mode 100644 index 00000000..b1c4da10 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection3.1.png new file mode 100644 index 00000000..89b4af19 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection4.0.png new file mode 100644 index 00000000..052c7f7e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection4.1.png new file mode 100644 index 00000000..837a1748 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/curvedtsection4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal.0.png new file mode 100644 index 00000000..eeddb3cf Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal.1.png new file mode 100644 index 00000000..b1a757c9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged.0.png new file mode 100644 index 00000000..22104bd9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged.1.png new file mode 100644 index 00000000..8b9bf8da Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged2.0.png new file mode 100644 index 00000000..28d3684f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged2.1.png new file mode 100644 index 00000000..315f384e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged3.0.png new file mode 100644 index 00000000..279faa2d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged3.1.png new file mode 100644 index 00000000..b90f93fb Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged4.0.png new file mode 100644 index 00000000..8913beb8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged4.1.png new file mode 100644 index 00000000..9c9bef13 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal1edged4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal2.0.png new file mode 100644 index 00000000..d2b3e8e3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal2.1.png new file mode 100644 index 00000000..b511db7d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal2edged.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal2edged.0.png new file mode 100644 index 00000000..e60a9ec1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal2edged.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal2edged.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal2edged.1.png new file mode 100644 index 00000000..c5d052b3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal2edged.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal2edged2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal2edged2.0.png new file mode 100644 index 00000000..b324d318 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal2edged2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal2edged2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal2edged2.1.png new file mode 100644 index 00000000..f9cb45ba Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal2edged2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged.0.png new file mode 100644 index 00000000..5fa5cb3f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged.1.png new file mode 100644 index 00000000..380cedd7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged2.0.png new file mode 100644 index 00000000..7fe928c2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged2.1.png new file mode 100644 index 00000000..7d7ee1c2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged3.0.png new file mode 100644 index 00000000..84fa50b8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged3.1.png new file mode 100644 index 00000000..6fd2c1f6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged4.0.png new file mode 100644 index 00000000..e54067c3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged4.1.png new file mode 100644 index 00000000..16cb6660 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal3edged4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal4edged.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal4edged.0.png new file mode 100644 index 00000000..a0ccb007 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal4edged.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal4edged.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal4edged.1.png new file mode 100644 index 00000000..6c2891e6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonal4edged.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend.0.png new file mode 100644 index 00000000..b464cf8c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend.1.png new file mode 100644 index 00000000..d52fe969 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend2.0.png new file mode 100644 index 00000000..c6b1237d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend2.1.png new file mode 100644 index 00000000..e8aaece9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend3.0.png new file mode 100644 index 00000000..9554595c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend3.1.png new file mode 100644 index 00000000..b2d0dc2c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend4.0.png new file mode 100644 index 00000000..11f18fd5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend4.1.png new file mode 100644 index 00000000..ff307ee7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalbend4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner.0.png new file mode 100644 index 00000000..df0dec56 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner.1.png new file mode 100644 index 00000000..4b1a7ec2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner2.0.png new file mode 100644 index 00000000..ccd52154 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner2.1.png new file mode 100644 index 00000000..5908c78f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner3.0.png new file mode 100644 index 00000000..ec1cf14e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner3.1.png new file mode 100644 index 00000000..93a93cfb Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner4.0.png new file mode 100644 index 00000000..dc043711 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner4.1.png new file mode 100644 index 00000000..49056244 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner.0.png new file mode 100644 index 00000000..4d52e876 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner.1.png new file mode 100644 index 00000000..e265c10e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner2.0.png new file mode 100644 index 00000000..b7fc180e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner2.1.png new file mode 100644 index 00000000..64d3bfa0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner3.0.png new file mode 100644 index 00000000..19cf0aa0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner3.1.png new file mode 100644 index 00000000..de59ca95 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner4.0.png new file mode 100644 index 00000000..3fd33895 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner4.1.png new file mode 100644 index 00000000..22ff3b6c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection.0.png new file mode 100644 index 00000000..7d5b086b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection.1.png new file mode 100644 index 00000000..e1106847 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection2.0.png new file mode 100644 index 00000000..15192736 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection2.1.png new file mode 100644 index 00000000..45b26f71 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection3.0.png new file mode 100644 index 00000000..4f546b2e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection3.1.png new file mode 100644 index 00000000..43d7da34 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection4.0.png new file mode 100644 index 00000000..dfbe0084 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection4.1.png new file mode 100644 index 00000000..3a075de0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalcurvedtsection4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalhalved.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalhalved.0.png new file mode 100644 index 00000000..eb02bda7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalhalved.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalhalved.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalhalved.1.png new file mode 100644 index 00000000..8b621b6b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalhalved.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalhalved2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalhalved2.0.png new file mode 100644 index 00000000..99aa3cbc Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalhalved2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalhalved2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalhalved2.1.png new file mode 100644 index 00000000..2e96b75c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalhalved2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalstriped.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalstriped.0.png new file mode 100644 index 00000000..b6556c6c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalstriped.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalstriped.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalstriped.1.png new file mode 100644 index 00000000..04f8b0cc Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalstriped.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalstriped2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalstriped2.0.png new file mode 100644 index 00000000..e21fd805 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalstriped2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalstriped2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalstriped2.1.png new file mode 100644 index 00000000..6e94db29 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonalstriped2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection.0.png new file mode 100644 index 00000000..01d615e0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection.1.png new file mode 100644 index 00000000..655ce19f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection2.0.png new file mode 100644 index 00000000..75a918d0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection2.1.png new file mode 100644 index 00000000..c08cd67b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection3.0.png new file mode 100644 index 00000000..6ed3b974 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection3.1.png new file mode 100644 index 00000000..76aa3894 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection4.0.png new file mode 100644 index 00000000..91eb2e1c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection4.1.png new file mode 100644 index 00000000..b85ad0c5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diagonaltsection4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diamond.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diamond.0.png new file mode 100644 index 00000000..429aa5d8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diamond.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/diamond.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/diamond.1.png new file mode 100644 index 00000000..59bd6ad2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/diamond.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/east.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/east.0.png new file mode 100644 index 00000000..5a74aa21 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/east.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/east.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/east.1.png new file mode 100644 index 00000000..5a74aa21 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/east.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/edged.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/edged.0.png new file mode 100644 index 00000000..e40d629e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/edged.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/edged.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/edged.1.png new file mode 100644 index 00000000..30ba69b4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/edged.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/edged2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/edged2.0.png new file mode 100644 index 00000000..6c46a445 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/edged2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/edged2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/edged2.1.png new file mode 100644 index 00000000..b2f7cac1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/edged2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/edged3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/edged3.0.png new file mode 100644 index 00000000..02d47c24 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/edged3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/edged3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/edged3.1.png new file mode 100644 index 00000000..0cb54f72 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/edged3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/edged4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/edged4.0.png new file mode 100644 index 00000000..7a44bfd7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/edged4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/edged4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/edged4.1.png new file mode 100644 index 00000000..19d8a0e3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/edged4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem1.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem1.0.png new file mode 100644 index 00000000..a4f71247 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem1.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem1.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem1.1.png new file mode 100644 index 00000000..bd49dc01 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem1.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem2.0.png new file mode 100644 index 00000000..6d60b4f3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem2.1.png new file mode 100644 index 00000000..44d1c998 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem3.0.png new file mode 100644 index 00000000..e367cf2b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem3.1.png new file mode 100644 index 00000000..31b29a0a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem4.0.png new file mode 100644 index 00000000..19800482 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem4.1.png new file mode 100644 index 00000000..12655f3e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem5.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem5.0.png new file mode 100644 index 00000000..d86f4161 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem5.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem5.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem5.1.png new file mode 100644 index 00000000..a6ebecd2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/emblem5.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/halved.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/halved.0.png new file mode 100644 index 00000000..a45a43ed Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/halved.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/halved.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/halved.1.png new file mode 100644 index 00000000..35d01fff Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/halved.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/halved2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/halved2.0.png new file mode 100644 index 00000000..02e03b82 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/halved2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/halved2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/halved2.1.png new file mode 100644 index 00000000..6b572097 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/halved2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera.0.png new file mode 100644 index 00000000..3695c89d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera.1.png new file mode 100644 index 00000000..12bc55a3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera2.0.png new file mode 100644 index 00000000..90068cf3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera2.1.png new file mode 100644 index 00000000..2dc84344 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera3.0.png new file mode 100644 index 00000000..42a937ba Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera3.1.png new file mode 100644 index 00000000..625e7317 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera4.0.png new file mode 100644 index 00000000..da49d526 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera4.1.png new file mode 100644 index 00000000..b2f97186 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettera4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb.0.png new file mode 100644 index 00000000..212b40cf Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb.1.png new file mode 100644 index 00000000..15108bb4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb2.0.png new file mode 100644 index 00000000..565f1285 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb2.1.png new file mode 100644 index 00000000..297c205b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb3.0.png new file mode 100644 index 00000000..e61eb016 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb3.1.png new file mode 100644 index 00000000..6f322d6c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb4.0.png new file mode 100644 index 00000000..08bd3f78 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb4.1.png new file mode 100644 index 00000000..5e4ecf1c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterb4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf.0.png new file mode 100644 index 00000000..9160374a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf.1.png new file mode 100644 index 00000000..e542872d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf2.0.png new file mode 100644 index 00000000..577222c4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf2.1.png new file mode 100644 index 00000000..0f25ce11 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf3.0.png new file mode 100644 index 00000000..87e85bb8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf3.1.png new file mode 100644 index 00000000..a8f2234e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf4.0.png new file mode 100644 index 00000000..d90016c9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf4.1.png new file mode 100644 index 00000000..d2722e93 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letterf4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letters.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letters.0.png new file mode 100644 index 00000000..0758e5a8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letters.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letters.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letters.1.png new file mode 100644 index 00000000..85f963fc Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letters.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letters2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letters2.0.png new file mode 100644 index 00000000..6065bd3a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letters2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letters2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letters2.1.png new file mode 100644 index 00000000..4254eb97 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letters2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letters3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letters3.0.png new file mode 100644 index 00000000..e379cca2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letters3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letters3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letters3.1.png new file mode 100644 index 00000000..744ae2f3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letters3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letters4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letters4.0.png new file mode 100644 index 00000000..2ad89ab4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letters4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/letters4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/letters4.1.png new file mode 100644 index 00000000..1708afd8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/letters4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert.0.png new file mode 100644 index 00000000..c25d9049 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert.1.png new file mode 100644 index 00000000..d5c7ae79 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert2.0.png new file mode 100644 index 00000000..da9ec02c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert2.1.png new file mode 100644 index 00000000..e8139132 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert3.0.png new file mode 100644 index 00000000..53a04687 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert3.1.png new file mode 100644 index 00000000..12fcca98 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert4.0.png new file mode 100644 index 00000000..b116dd4d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert4.1.png new file mode 100644 index 00000000..f08531cd Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/lettert4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/multiply.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/multiply.0.png new file mode 100644 index 00000000..9f82ef0e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/multiply.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/multiply.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/multiply.1.png new file mode 100644 index 00000000..e5a7c9e0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/multiply.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/north.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/north.0.png new file mode 100644 index 00000000..c150bc1b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/north.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/north.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/north.1.png new file mode 100644 index 00000000..c150bc1b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/north.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/octagon.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/octagon.0.png new file mode 100644 index 00000000..f20d0eb8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/octagon.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/octagon.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/octagon.1.png new file mode 100644 index 00000000..9e83d0e1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/octagon.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatebarred.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatebarred.0.png new file mode 100644 index 00000000..e30fc56a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatebarred.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatebarred.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatebarred.1.png new file mode 100644 index 00000000..95c4970b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatebarred.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatebarred2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatebarred2.0.png new file mode 100644 index 00000000..a6ebdfd7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatebarred2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatebarred2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatebarred2.1.png new file mode 100644 index 00000000..33206b9e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatebarred2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner.0.png new file mode 100644 index 00000000..a65826cf Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner.1.png new file mode 100644 index 00000000..2ce3f1ca Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner2.0.png new file mode 100644 index 00000000..d80ac441 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner2.1.png new file mode 100644 index 00000000..da43f8dd Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner3.0.png new file mode 100644 index 00000000..b808ce07 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner3.1.png new file mode 100644 index 00000000..ce177c69 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner4.0.png new file mode 100644 index 00000000..e83985c4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner4.1.png new file mode 100644 index 00000000..20a263f6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatestripedcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatethinbarred.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatethinbarred.0.png new file mode 100644 index 00000000..9a55e69f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatethinbarred.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatethinbarred.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatethinbarred.1.png new file mode 100644 index 00000000..c32b4d61 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatethinbarred.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatethinbarred2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatethinbarred2.0.png new file mode 100644 index 00000000..cbc6a897 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatethinbarred2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatethinbarred2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatethinbarred2.1.png new file mode 100644 index 00000000..518ee307 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/ornatethinbarred2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedbarred.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedbarred.0.png new file mode 100644 index 00000000..abfd7311 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedbarred.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedbarred.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedbarred.1.png new file mode 100644 index 00000000..b284042e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedbarred.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedbarred2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedbarred2.0.png new file mode 100644 index 00000000..babdb060 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedbarred2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedbarred2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedbarred2.1.png new file mode 100644 index 00000000..76b98dbb Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedbarred2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedsplitbarred.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedsplitbarred.0.png new file mode 100644 index 00000000..204a5106 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedsplitbarred.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedsplitbarred.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedsplitbarred.1.png new file mode 100644 index 00000000..90ee9352 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedsplitbarred.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedsplitbarred2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedsplitbarred2.0.png new file mode 100644 index 00000000..8f849832 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedsplitbarred2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedsplitbarred2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedsplitbarred2.1.png new file mode 100644 index 00000000..a6090828 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/overlappedsplitbarred2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/plus.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/plus.0.png new file mode 100644 index 00000000..06f33bc8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/plus.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/plus.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/plus.1.png new file mode 100644 index 00000000..05d59ef2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/plus.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/ringed.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/ringed.0.png new file mode 100644 index 00000000..07e04144 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/ringed.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/ringed.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/ringed.1.png new file mode 100644 index 00000000..4ce3a664 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/ringed.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend.0.png new file mode 100644 index 00000000..e9d533c4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend.1.png new file mode 100644 index 00000000..2c877c1a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend2.0.png new file mode 100644 index 00000000..1ec17be3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend2.1.png new file mode 100644 index 00000000..de0c61a5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend3.0.png new file mode 100644 index 00000000..adf4239c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend3.1.png new file mode 100644 index 00000000..9002bad7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend4.0.png new file mode 100644 index 00000000..a75359ca Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend4.1.png new file mode 100644 index 00000000..421f473e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/roundedbarredend4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/saltire.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/saltire.0.png new file mode 100644 index 00000000..8c9597a0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/saltire.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/saltire.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/saltire.1.png new file mode 100644 index 00000000..75d2579d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/saltire.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/south.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/south.0.png new file mode 100644 index 00000000..1bde7758 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/south.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/south.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/south.1.png new file mode 100644 index 00000000..1bde7758 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/south.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarred.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarred.0.png new file mode 100644 index 00000000..31235274 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarred.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarred.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarred.1.png new file mode 100644 index 00000000..a3f127c5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarred.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarred2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarred2.0.png new file mode 100644 index 00000000..6333807f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarred2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarred2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarred2.1.png new file mode 100644 index 00000000..435b0d13 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarred2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner.0.png new file mode 100644 index 00000000..94d710da Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner.1.png new file mode 100644 index 00000000..776167e7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner2.0.png new file mode 100644 index 00000000..6526fd81 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner2.1.png new file mode 100644 index 00000000..512a44e6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner3.0.png new file mode 100644 index 00000000..539b44b4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner3.1.png new file mode 100644 index 00000000..10c7e71e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner4.0.png new file mode 100644 index 00000000..4566c764 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner4.1.png new file mode 100644 index 00000000..a2e13534 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend.0.png new file mode 100644 index 00000000..c34c3ac6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend.1.png new file mode 100644 index 00000000..851d19c7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend2.0.png new file mode 100644 index 00000000..d2bc7c69 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend2.1.png new file mode 100644 index 00000000..e2bd876e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend3.0.png new file mode 100644 index 00000000..ef4c34c1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend3.1.png new file mode 100644 index 00000000..cde10d01 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend4.0.png new file mode 100644 index 00000000..d1fedcac Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend4.1.png new file mode 100644 index 00000000..68f5c571 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredend4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection.0.png new file mode 100644 index 00000000..3c14906e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection.1.png new file mode 100644 index 00000000..e06665d4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection2.0.png new file mode 100644 index 00000000..5678b59d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection2.1.png new file mode 100644 index 00000000..9df13ddc Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection3.0.png new file mode 100644 index 00000000..316f1096 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection3.1.png new file mode 100644 index 00000000..290d028f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection4.0.png new file mode 100644 index 00000000..3d4e01d6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection4.1.png new file mode 100644 index 00000000..f82d7340 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitbarredtsection4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitcrossed.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitcrossed.0.png new file mode 100644 index 00000000..f7409d5d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitcrossed.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/splitcrossed.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitcrossed.1.png new file mode 100644 index 00000000..d852ddee Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/splitcrossed.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/squared.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/squared.0.png new file mode 100644 index 00000000..45704977 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/squared.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/squared.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/squared.1.png new file mode 100644 index 00000000..8086f75b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/squared.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/striped.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/striped.0.png new file mode 100644 index 00000000..22668fba Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/striped.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/striped.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/striped.1.png new file mode 100644 index 00000000..92b7cd75 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/striped.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/striped.base.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/striped.base.png new file mode 100644 index 00000000..31c60107 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/striped.base.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/striped2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/striped2.0.png new file mode 100644 index 00000000..56e1ba34 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/striped2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/striped2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/striped2.1.png new file mode 100644 index 00000000..65421ab6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/striped2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/striped2.base.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/striped2.base.png new file mode 100644 index 00000000..12845fa4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/striped2.base.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner.0.png new file mode 100644 index 00000000..60ed3cce Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner.1.png new file mode 100644 index 00000000..68cc131d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner2.0.png new file mode 100644 index 00000000..f6cd92ff Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner2.1.png new file mode 100644 index 00000000..a5d08d4e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner3.0.png new file mode 100644 index 00000000..85e2b434 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner3.1.png new file mode 100644 index 00000000..84e17382 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner4.0.png new file mode 100644 index 00000000..0686b82e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner4.1.png new file mode 100644 index 00000000..827bb3e7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/stripedcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarred.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarred.0.png new file mode 100644 index 00000000..d5cb16d4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarred.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarred.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarred.1.png new file mode 100644 index 00000000..83962df8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarred.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarred2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarred2.0.png new file mode 100644 index 00000000..4683570e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarred2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarred2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarred2.1.png new file mode 100644 index 00000000..132221b5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarred2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner.0.png new file mode 100644 index 00000000..130a49f8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner.1.png new file mode 100644 index 00000000..32530d9d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner2.0.png new file mode 100644 index 00000000..8b8e12df Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner2.1.png new file mode 100644 index 00000000..3c4fb3b8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner3.0.png new file mode 100644 index 00000000..6b912ef5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner3.1.png new file mode 100644 index 00000000..61a8fc63 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner4.0.png new file mode 100644 index 00000000..8aa561b7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner4.1.png new file mode 100644 index 00000000..fb3e6a35 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend.0.png new file mode 100644 index 00000000..b8538632 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend.1.png new file mode 100644 index 00000000..90ef6375 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend2.0.png new file mode 100644 index 00000000..810771c2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend2.1.png new file mode 100644 index 00000000..9bc7af14 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend3.0.png new file mode 100644 index 00000000..f217145e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend3.1.png new file mode 100644 index 00000000..9edde590 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend4.0.png new file mode 100644 index 00000000..a3272055 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend4.1.png new file mode 100644 index 00000000..79b0ff18 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickbarredend4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner.0.png new file mode 100644 index 00000000..ec57250d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner.1.png new file mode 100644 index 00000000..4df5f7d9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner2.0.png new file mode 100644 index 00000000..08d6a4a3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner2.1.png new file mode 100644 index 00000000..b585a5f3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner3.0.png new file mode 100644 index 00000000..063ddf87 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner3.1.png new file mode 100644 index 00000000..d14b8420 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner4.0.png new file mode 100644 index 00000000..e9a98259 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner4.1.png new file mode 100644 index 00000000..803721e9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcrossed.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcrossed.0.png new file mode 100644 index 00000000..eae6e2f6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcrossed.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcrossed.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcrossed.1.png new file mode 100644 index 00000000..3669c74e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickcrossed.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal.0.png new file mode 100644 index 00000000..02cb5c65 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal.1.png new file mode 100644 index 00000000..14fedfdf Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged.0.png new file mode 100644 index 00000000..6806d037 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged.1.png new file mode 100644 index 00000000..933a0e9e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged2.0.png new file mode 100644 index 00000000..f36d4ae6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged2.1.png new file mode 100644 index 00000000..efd2740a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged3.0.png new file mode 100644 index 00000000..ae45f76b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged3.1.png new file mode 100644 index 00000000..ac97adbf Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged4.0.png new file mode 100644 index 00000000..4820c4bb Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged4.1.png new file mode 100644 index 00000000..f9b58623 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal1edged4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal2.0.png new file mode 100644 index 00000000..fb923561 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal2.1.png new file mode 100644 index 00000000..5dbb2f77 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal2edged.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal2edged.0.png new file mode 100644 index 00000000..9eec62b9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal2edged.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal2edged.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal2edged.1.png new file mode 100644 index 00000000..a6ae2d8d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal2edged.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal2edged2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal2edged2.0.png new file mode 100644 index 00000000..0ac11c08 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal2edged2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal2edged2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal2edged2.1.png new file mode 100644 index 00000000..e2087dca Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal2edged2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged.0.png new file mode 100644 index 00000000..d94aefd9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged.1.png new file mode 100644 index 00000000..186bbeb8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged2.0.png new file mode 100644 index 00000000..9832bc58 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged2.1.png new file mode 100644 index 00000000..b5d61aee Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged3.0.png new file mode 100644 index 00000000..f699661b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged3.1.png new file mode 100644 index 00000000..7a71d0be Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged4.0.png new file mode 100644 index 00000000..db2833d0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged4.1.png new file mode 100644 index 00000000..baae0f9a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal3edged4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal4edged.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal4edged.0.png new file mode 100644 index 00000000..b7a3efbd Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal4edged.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal4edged.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal4edged.1.png new file mode 100644 index 00000000..746d0f0e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickdiagonal4edged.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend.0.png new file mode 100644 index 00000000..3a0ce4b1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend.1.png new file mode 100644 index 00000000..bbef5b18 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend2.0.png new file mode 100644 index 00000000..7d10b142 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend2.1.png new file mode 100644 index 00000000..47d67aea Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend3.0.png new file mode 100644 index 00000000..5a436787 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend3.1.png new file mode 100644 index 00000000..e9ca4176 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend4.0.png new file mode 100644 index 00000000..de775612 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend4.1.png new file mode 100644 index 00000000..c91d0a7d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thickroundedbarredend4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thicksaltire.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thicksaltire.0.png new file mode 100644 index 00000000..1f5b4836 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thicksaltire.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thicksaltire.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thicksaltire.1.png new file mode 100644 index 00000000..3065c4e2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thicksaltire.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection.0.png new file mode 100644 index 00000000..497b8ae2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection.1.png new file mode 100644 index 00000000..d8c80b3d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection2.0.png new file mode 100644 index 00000000..c0ba5d3b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection2.1.png new file mode 100644 index 00000000..cf608e9f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection3.0.png new file mode 100644 index 00000000..b0d2fcb7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection3.1.png new file mode 100644 index 00000000..90d38254 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection4.0.png new file mode 100644 index 00000000..af8ed205 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection4.1.png new file mode 100644 index 00000000..0c561177 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thicktsection4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarred.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarred.0.png new file mode 100644 index 00000000..da70b75b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarred.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarred.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarred.1.png new file mode 100644 index 00000000..0cf17a5f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarred.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarred2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarred2.0.png new file mode 100644 index 00000000..d63d32d5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarred2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarred2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarred2.1.png new file mode 100644 index 00000000..29ba4a12 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarred2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner.0.png new file mode 100644 index 00000000..027b2c2a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner.1.png new file mode 100644 index 00000000..2c675282 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner2.0.png new file mode 100644 index 00000000..ab1c5271 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner2.1.png new file mode 100644 index 00000000..dc430036 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner3.0.png new file mode 100644 index 00000000..1d3dc7c9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner3.1.png new file mode 100644 index 00000000..3b51465b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner4.0.png new file mode 100644 index 00000000..a50bafcb Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner4.1.png new file mode 100644 index 00000000..974326a1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend.0.png new file mode 100644 index 00000000..c6080c8f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend.1.png new file mode 100644 index 00000000..92954593 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend2.0.png new file mode 100644 index 00000000..0b0be1ed Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend2.1.png new file mode 100644 index 00000000..da9cf95c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend3.0.png new file mode 100644 index 00000000..7dde3f51 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend3.1.png new file mode 100644 index 00000000..eac37e5f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend4.0.png new file mode 100644 index 00000000..698c42a9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend4.1.png new file mode 100644 index 00000000..9550c3d2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinbarredend4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner.0.png new file mode 100644 index 00000000..286f9d6b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner.1.png new file mode 100644 index 00000000..a5f511b9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner2.0.png new file mode 100644 index 00000000..112760e8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner2.1.png new file mode 100644 index 00000000..dbb27af5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner3.0.png new file mode 100644 index 00000000..67149565 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner3.1.png new file mode 100644 index 00000000..b2dc23d4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner4.0.png new file mode 100644 index 00000000..e3a32a46 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner4.1.png new file mode 100644 index 00000000..59797079 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincrossed.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincrossed.0.png new file mode 100644 index 00000000..04980560 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincrossed.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincrossed.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincrossed.1.png new file mode 100644 index 00000000..a4eb1dba Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincrossed.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner.0.png new file mode 100644 index 00000000..ffe44a18 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner.1.png new file mode 100644 index 00000000..4d25dc61 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner2.0.png new file mode 100644 index 00000000..0c2ff91d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner2.1.png new file mode 100644 index 00000000..6ca8dbc6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner3.0.png new file mode 100644 index 00000000..d5676bd6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner3.1.png new file mode 100644 index 00000000..74e0edb8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner4.0.png new file mode 100644 index 00000000..68bba8db Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner4.1.png new file mode 100644 index 00000000..08f6f4a9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedbarredcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner.0.png new file mode 100644 index 00000000..53dc6e70 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner.1.png new file mode 100644 index 00000000..a5d1cfd9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner2.0.png new file mode 100644 index 00000000..84732a9b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner2.1.png new file mode 100644 index 00000000..87f44299 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner3.0.png new file mode 100644 index 00000000..06c04f7b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner3.1.png new file mode 100644 index 00000000..ea6b86ea Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner4.0.png new file mode 100644 index 00000000..fdb11bf8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner4.1.png new file mode 100644 index 00000000..75b05fa3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcrossed.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcrossed.0.png new file mode 100644 index 00000000..997073ab Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcrossed.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcrossed.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcrossed.1.png new file mode 100644 index 00000000..96b05b81 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedcrossed.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection.0.png new file mode 100644 index 00000000..a590c3b3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection.1.png new file mode 100644 index 00000000..4d4f4927 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection2.0.png new file mode 100644 index 00000000..e8e0fb65 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection2.1.png new file mode 100644 index 00000000..9c286141 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection3.0.png new file mode 100644 index 00000000..2e292976 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection3.1.png new file mode 100644 index 00000000..c4aa6ff2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection4.0.png new file mode 100644 index 00000000..f6a1ad0c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection4.1.png new file mode 100644 index 00000000..67abbd2c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thincurvedtsection4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thindiagonalstriped.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thindiagonalstriped.0.png new file mode 100644 index 00000000..6cf7fa93 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thindiagonalstriped.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thindiagonalstriped.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thindiagonalstriped.1.png new file mode 100644 index 00000000..8579e880 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thindiagonalstriped.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thindiagonalstriped2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thindiagonalstriped2.0.png new file mode 100644 index 00000000..21c7ec0d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thindiagonalstriped2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thindiagonalstriped2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thindiagonalstriped2.1.png new file mode 100644 index 00000000..62a129e2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thindiagonalstriped2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged.0.png new file mode 100644 index 00000000..c9059fa6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged.1.png new file mode 100644 index 00000000..9e18acc2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged2.0.png new file mode 100644 index 00000000..6c14cadf Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged2.1.png new file mode 100644 index 00000000..e1378002 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged3.0.png new file mode 100644 index 00000000..dfe9e3ba Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged3.1.png new file mode 100644 index 00000000..4897b0d5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged4.0.png new file mode 100644 index 00000000..3fb266df Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged4.1.png new file mode 100644 index 00000000..3dc273a1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinedged4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinsaltire.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinsaltire.0.png new file mode 100644 index 00000000..ab1b643e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinsaltire.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinsaltire.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinsaltire.1.png new file mode 100644 index 00000000..4e3bfae8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinsaltire.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstriped.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstriped.0.png new file mode 100644 index 00000000..b9247171 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstriped.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstriped.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstriped.1.png new file mode 100644 index 00000000..7aef5d49 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstriped.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstriped.base.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstriped.base.png new file mode 100644 index 00000000..68d5db7e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstriped.base.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstriped2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstriped2.0.png new file mode 100644 index 00000000..9656ecda Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstriped2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstriped2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstriped2.1.png new file mode 100644 index 00000000..bdb80859 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstriped2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstriped2.base.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstriped2.base.png new file mode 100644 index 00000000..395e04ee Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstriped2.base.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner.0.png new file mode 100644 index 00000000..e46fad96 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner.1.png new file mode 100644 index 00000000..288746e0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner2.0.png new file mode 100644 index 00000000..a159c69f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner2.1.png new file mode 100644 index 00000000..46720e2f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner3.0.png new file mode 100644 index 00000000..8f5783d4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner3.1.png new file mode 100644 index 00000000..d3b5d884 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner4.0.png new file mode 100644 index 00000000..026f7da9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner4.1.png new file mode 100644 index 00000000..d52009bc Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thinstripedcorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection.0.png new file mode 100644 index 00000000..d32b3ae1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection.1.png new file mode 100644 index 00000000..b9ff5f52 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection2.0.png new file mode 100644 index 00000000..5bef3fdf Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection2.1.png new file mode 100644 index 00000000..65ca1bde Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection3.0.png new file mode 100644 index 00000000..da5764c4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection3.1.png new file mode 100644 index 00000000..ca774a7e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection4.0.png new file mode 100644 index 00000000..188e91f0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection4.1.png new file mode 100644 index 00000000..7a45bfff Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/thintsection4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/tiled.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/tiled.0.png new file mode 100644 index 00000000..c62abc1a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/tiled.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/tiled.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/tiled.1.png new file mode 100644 index 00000000..9dca53cb Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/tiled.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/top.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/top.0.png new file mode 100644 index 00000000..583337c9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/top.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/top.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/top.1.png new file mode 100644 index 00000000..583337c9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/top.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection.0.png new file mode 100644 index 00000000..cbdbfad4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection.1.png new file mode 100644 index 00000000..53c0fc43 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection2.0.png new file mode 100644 index 00000000..12484027 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection2.1.png new file mode 100644 index 00000000..5d947ccb Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection3.0.png new file mode 100644 index 00000000..56182a11 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection3.1.png new file mode 100644 index 00000000..8c436513 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection4.0.png new file mode 100644 index 00000000..a4327cc9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection4.1.png new file mode 100644 index 00000000..6bfcb994 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/tsection4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner.0.png new file mode 100644 index 00000000..e62e8edd Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner.1.png new file mode 100644 index 00000000..974231dc Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner2.0.png new file mode 100644 index 00000000..7c50bbc7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner2.1.png new file mode 100644 index 00000000..de164d75 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner3.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner3.0.png new file mode 100644 index 00000000..ea4458df Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner3.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner3.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner3.1.png new file mode 100644 index 00000000..17a62805 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner3.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner4.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner4.0.png new file mode 100644 index 00000000..6b41abed Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner4.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner4.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner4.1.png new file mode 100644 index 00000000..d704b18c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/verythincorner4.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarred.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarred.0.png new file mode 100644 index 00000000..6a26940f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarred.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarred.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarred.1.png new file mode 100644 index 00000000..f821ac4f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarred.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarred2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarred2.0.png new file mode 100644 index 00000000..c9ca0b3f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarred2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarred2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarred2.1.png new file mode 100644 index 00000000..f44ba10f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarred2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarredalt.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarredalt.0.png new file mode 100644 index 00000000..4f14f5ed Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarredalt.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarredalt.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarredalt.1.png new file mode 100644 index 00000000..c25a0ef8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarredalt.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarredalt2.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarredalt2.0.png new file mode 100644 index 00000000..b8557c8c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarredalt2.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarredalt2.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarredalt2.1.png new file mode 100644 index 00000000..3cf45dcf Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/wavybarredalt2.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/west.0.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/west.0.png new file mode 100644 index 00000000..0cd3c4c7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/west.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/patterns/west.1.png b/src/main/resources/assets/extratrees/textures/blocks/patterns/west.1.png new file mode 100644 index 00000000..0cd3c4c7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/patterns/west.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Alder.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Alder.png new file mode 100644 index 00000000..c287ed45 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Alder.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Apple.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Apple.png new file mode 100644 index 00000000..8d2e07e8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Apple.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Ash.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Ash.png new file mode 100644 index 00000000..5a32f9ee Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Ash.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Beech.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Beech.png new file mode 100644 index 00000000..443f65b3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Beech.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Box.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Box.png new file mode 100644 index 00000000..a5f324aa Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Box.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Brazilwood.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Brazilwood.png new file mode 100644 index 00000000..25b180ce Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Brazilwood.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Butternut.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Butternut.png new file mode 100644 index 00000000..d9440948 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Butternut.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Cedar.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Cedar.png new file mode 100644 index 00000000..49cc16de Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Cedar.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Citrus.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Citrus.png new file mode 100644 index 00000000..c18d7cd5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Citrus.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Cypress.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Cypress.png new file mode 100644 index 00000000..109aced8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Cypress.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Elder.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Elder.png new file mode 100644 index 00000000..7f1cb32e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Elder.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Elm.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Elm.png new file mode 100644 index 00000000..0164e9ca Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Elm.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Eucalyptus.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Eucalyptus.png new file mode 100644 index 00000000..c6a3ce1d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Eucalyptus.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Fig.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Fig.png new file mode 100644 index 00000000..4f7c8816 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Fig.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Fir.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Fir.png new file mode 100644 index 00000000..ef0a3e07 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Fir.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Gingko.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Gingko.png new file mode 100644 index 00000000..e26410d2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Gingko.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Hawthorn.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Hawthorn.png new file mode 100644 index 00000000..be7c1a54 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Hawthorn.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Hazel.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Hazel.png new file mode 100644 index 00000000..08a9ed18 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Hazel.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Hemlock.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Hemlock.png new file mode 100644 index 00000000..4634150b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Hemlock.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Hickory.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Hickory.png new file mode 100644 index 00000000..87160984 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Hickory.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Holly.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Holly.png new file mode 100644 index 00000000..07ec9b0e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Holly.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Hornbeam.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Hornbeam.png new file mode 100644 index 00000000..9a0d976f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Hornbeam.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Iroko.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Iroko.png new file mode 100644 index 00000000..d9147364 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Iroko.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Locust.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Locust.png new file mode 100644 index 00000000..326f044f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Locust.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Logwood.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Logwood.png new file mode 100644 index 00000000..5fa6db24 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Logwood.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Maclura.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Maclura.png new file mode 100644 index 00000000..2b8351f6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Maclura.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Maple.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Maple.png new file mode 100644 index 00000000..7c689b17 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Maple.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Olive.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Olive.png new file mode 100644 index 00000000..7dd6a597 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Olive.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Pear.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Pear.png new file mode 100644 index 00000000..21cdcb99 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Pear.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Pine.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Pine.png new file mode 100644 index 00000000..f565be27 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Pine.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/PinkIvory.png b/src/main/resources/assets/extratrees/textures/blocks/planks/PinkIvory.png new file mode 100644 index 00000000..550f6d4b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/PinkIvory.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Plum.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Plum.png new file mode 100644 index 00000000..afaddd4c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Plum.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Purpleheart.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Purpleheart.png new file mode 100644 index 00000000..3f7c331e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Purpleheart.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Rosewood.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Rosewood.png new file mode 100644 index 00000000..d4d4371a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Rosewood.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Rowan.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Rowan.png new file mode 100644 index 00000000..0265cae1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Rowan.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Sweetgum.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Sweetgum.png new file mode 100644 index 00000000..ce73f312 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Sweetgum.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Syzgium.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Syzgium.png new file mode 100644 index 00000000..de35b5b4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Syzgium.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Whitebeam.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Whitebeam.png new file mode 100644 index 00000000..7b1f8247 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Whitebeam.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/planks/Yew.png b/src/main/resources/assets/extratrees/textures/blocks/planks/Yew.png new file mode 100644 index 00000000..49eba77d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/planks/Yew.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/pods/banana.0.png b/src/main/resources/assets/extratrees/textures/blocks/pods/banana.0.png new file mode 100644 index 00000000..fe5c1cd5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/pods/banana.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/pods/banana.1.png b/src/main/resources/assets/extratrees/textures/blocks/pods/banana.1.png new file mode 100644 index 00000000..62fecaa3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/pods/banana.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/pods/banana.2.png b/src/main/resources/assets/extratrees/textures/blocks/pods/banana.2.png new file mode 100644 index 00000000..ff919349 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/pods/banana.2.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/pods/brazil.0.png b/src/main/resources/assets/extratrees/textures/blocks/pods/brazil.0.png new file mode 100644 index 00000000..7cfe0348 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/pods/brazil.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/pods/brazil.1.png b/src/main/resources/assets/extratrees/textures/blocks/pods/brazil.1.png new file mode 100644 index 00000000..2da7120e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/pods/brazil.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/pods/brazil.2.png b/src/main/resources/assets/extratrees/textures/blocks/pods/brazil.2.png new file mode 100644 index 00000000..7170229d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/pods/brazil.2.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/pods/coconut.0.png b/src/main/resources/assets/extratrees/textures/blocks/pods/coconut.0.png new file mode 100644 index 00000000..3354be7c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/pods/coconut.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/pods/coconut.1.png b/src/main/resources/assets/extratrees/textures/blocks/pods/coconut.1.png new file mode 100644 index 00000000..d6f822d9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/pods/coconut.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/pods/coconut.2.png b/src/main/resources/assets/extratrees/textures/blocks/pods/coconut.2.png new file mode 100644 index 00000000..4cbbae1c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/pods/coconut.2.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/pods/plantain.0.png b/src/main/resources/assets/extratrees/textures/blocks/pods/plantain.0.png new file mode 100644 index 00000000..0943d032 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/pods/plantain.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/pods/plantain.1.png b/src/main/resources/assets/extratrees/textures/blocks/pods/plantain.1.png new file mode 100644 index 00000000..7ce668e4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/pods/plantain.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/pods/plantain.2.png b/src/main/resources/assets/extratrees/textures/blocks/pods/plantain.2.png new file mode 100644 index 00000000..e2cf1c7c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/pods/plantain.2.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/pods/redbanana.0.png b/src/main/resources/assets/extratrees/textures/blocks/pods/redbanana.0.png new file mode 100644 index 00000000..f6097439 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/pods/redbanana.0.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/pods/redbanana.1.png b/src/main/resources/assets/extratrees/textures/blocks/pods/redbanana.1.png new file mode 100644 index 00000000..c61deb9d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/pods/redbanana.1.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/pods/redbanana.2.png b/src/main/resources/assets/extratrees/textures/blocks/pods/redbanana.2.png new file mode 100644 index 00000000..261b121b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/pods/redbanana.2.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/saplings/conifer.leaves.png b/src/main/resources/assets/extratrees/textures/blocks/saplings/conifer.leaves.png new file mode 100644 index 00000000..905f13bf Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/saplings/conifer.leaves.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/saplings/conifer.trunk.png b/src/main/resources/assets/extratrees/textures/blocks/saplings/conifer.trunk.png new file mode 100644 index 00000000..f2388039 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/saplings/conifer.trunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/saplings/default.leaves.png b/src/main/resources/assets/extratrees/textures/blocks/saplings/default.leaves.png new file mode 100644 index 00000000..46299192 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/saplings/default.leaves.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/saplings/default.png b/src/main/resources/assets/extratrees/textures/blocks/saplings/default.png new file mode 100644 index 00000000..50e60305 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/saplings/default.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/saplings/default.trunk.png b/src/main/resources/assets/extratrees/textures/blocks/saplings/default.trunk.png new file mode 100644 index 00000000..aa99c09b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/saplings/default.trunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/saplings/fruit.leaves.png b/src/main/resources/assets/extratrees/textures/blocks/saplings/fruit.leaves.png new file mode 100644 index 00000000..3e830b18 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/saplings/fruit.leaves.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/saplings/fruit.trunk.png b/src/main/resources/assets/extratrees/textures/blocks/saplings/fruit.trunk.png new file mode 100644 index 00000000..526934b3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/saplings/fruit.trunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/saplings/jungle.leaves.png b/src/main/resources/assets/extratrees/textures/blocks/saplings/jungle.leaves.png new file mode 100644 index 00000000..2e71e0e5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/saplings/jungle.leaves.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/saplings/jungle.trunk.png b/src/main/resources/assets/extratrees/textures/blocks/saplings/jungle.trunk.png new file mode 100644 index 00000000..61d14e50 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/saplings/jungle.trunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/saplings/palm.leaves.png b/src/main/resources/assets/extratrees/textures/blocks/saplings/palm.leaves.png new file mode 100644 index 00000000..623750b2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/saplings/palm.leaves.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/saplings/palm.trunk.png b/src/main/resources/assets/extratrees/textures/blocks/saplings/palm.trunk.png new file mode 100644 index 00000000..0ff847c2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/saplings/palm.trunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/saplings/poplar.leaves.png b/src/main/resources/assets/extratrees/textures/blocks/saplings/poplar.leaves.png new file mode 100644 index 00000000..11310987 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/saplings/poplar.leaves.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/saplings/poplar.trunk.png b/src/main/resources/assets/extratrees/textures/blocks/saplings/poplar.trunk.png new file mode 100644 index 00000000..d71d2864 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/saplings/poplar.trunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/saplings/sapling.treeAcacia.png b/src/main/resources/assets/extratrees/textures/blocks/saplings/sapling.treeAcacia.png new file mode 100644 index 00000000..52199964 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/saplings/sapling.treeAcacia.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/saplings/sapling.treePoplar.png b/src/main/resources/assets/extratrees/textures/blocks/saplings/sapling.treePoplar.png new file mode 100644 index 00000000..8f4a62dd Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/saplings/sapling.treePoplar.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/saplings/shrub.leaves.png b/src/main/resources/assets/extratrees/textures/blocks/saplings/shrub.leaves.png new file mode 100644 index 00000000..7c2e0a5b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/saplings/shrub.leaves.png differ diff --git a/src/main/resources/assets/extratrees/textures/blocks/saplings/shrub.trunk.png b/src/main/resources/assets/extratrees/textures/blocks/saplings/shrub.trunk.png new file mode 100644 index 00000000..06776a05 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/blocks/saplings/shrub.trunk.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/CamberwellBeauty.png b/src/main/resources/assets/extratrees/textures/entities/CamberwellBeauty.png new file mode 100644 index 00000000..51d1c1c7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/CamberwellBeauty.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/CrimsonRose.png b/src/main/resources/assets/extratrees/textures/entities/CrimsonRose.png new file mode 100644 index 00000000..f3b45db4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/CrimsonRose.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/Gatekeeper.png b/src/main/resources/assets/extratrees/textures/entities/Gatekeeper.png new file mode 100644 index 00000000..e4401219 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/Gatekeeper.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/GoldenBirdwing.png b/src/main/resources/assets/extratrees/textures/entities/GoldenBirdwing.png new file mode 100644 index 00000000..abffeacf Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/GoldenBirdwing.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/KaiserIHind.png b/src/main/resources/assets/extratrees/textures/entities/KaiserIHind.png new file mode 100644 index 00000000..5068d068 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/KaiserIHind.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/MarbledWhite.png b/src/main/resources/assets/extratrees/textures/entities/MarbledWhite.png new file mode 100644 index 00000000..abc84f93 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/MarbledWhite.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/MarshFritillary.png b/src/main/resources/assets/extratrees/textures/entities/MarshFritillary.png new file mode 100644 index 00000000..ef2579ab Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/MarshFritillary.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/MeadowBrown.png b/src/main/resources/assets/extratrees/textures/entities/MeadowBrown.png new file mode 100644 index 00000000..5751b541 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/MeadowBrown.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/Monarch.png b/src/main/resources/assets/extratrees/textures/entities/Monarch.png new file mode 100644 index 00000000..75ea315e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/Monarch.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/PaintedLady.png b/src/main/resources/assets/extratrees/textures/entities/PaintedLady.png new file mode 100644 index 00000000..4de57da4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/PaintedLady.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/Peacock.png b/src/main/resources/assets/extratrees/textures/entities/Peacock.png new file mode 100644 index 00000000..68141aba Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/Peacock.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/PearlBorderedFritillary.png b/src/main/resources/assets/extratrees/textures/entities/PearlBorderedFritillary.png new file mode 100644 index 00000000..5da6d6f3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/PearlBorderedFritillary.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/PurpleEmperor.png b/src/main/resources/assets/extratrees/textures/entities/PurpleEmperor.png new file mode 100644 index 00000000..a10a7776 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/PurpleEmperor.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/QueenOfSpainFritillary.png b/src/main/resources/assets/extratrees/textures/entities/QueenOfSpainFritillary.png new file mode 100644 index 00000000..318daf80 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/QueenOfSpainFritillary.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/RedAdmiral.png b/src/main/resources/assets/extratrees/textures/entities/RedAdmiral.png new file mode 100644 index 00000000..8f9faf4e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/RedAdmiral.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/Ringlet.png b/src/main/resources/assets/extratrees/textures/entities/Ringlet.png new file mode 100644 index 00000000..b08db99e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/Ringlet.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/ScotchAngus.png b/src/main/resources/assets/extratrees/textures/entities/ScotchAngus.png new file mode 100644 index 00000000..35cc3fb9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/ScotchAngus.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/SmallHeath.png b/src/main/resources/assets/extratrees/textures/entities/SmallHeath.png new file mode 100644 index 00000000..4cf01249 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/SmallHeath.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/SmallTortoiseshell.png b/src/main/resources/assets/extratrees/textures/entities/SmallTortoiseshell.png new file mode 100644 index 00000000..4b283517 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/SmallTortoiseshell.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/SpeckledWood.png b/src/main/resources/assets/extratrees/textures/entities/SpeckledWood.png new file mode 100644 index 00000000..2e0b71e0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/SpeckledWood.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/Wall.png b/src/main/resources/assets/extratrees/textures/entities/Wall.png new file mode 100644 index 00000000..58079e93 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/Wall.png differ diff --git a/src/main/resources/assets/extratrees/textures/entities/WhiteAdmiral.png b/src/main/resources/assets/extratrees/textures/entities/WhiteAdmiral.png new file mode 100644 index 00000000..ed9d3612 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/entities/WhiteAdmiral.png differ diff --git a/src/main/resources/assets/extratrees/textures/gui/Lumbermill.png b/src/main/resources/assets/extratrees/textures/gui/Lumbermill.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/gui/Lumbermill.png differ diff --git a/src/main/resources/assets/extratrees/textures/gui/Lumbermill2.png b/src/main/resources/assets/extratrees/textures/gui/Lumbermill2.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/gui/Lumbermill2.png differ diff --git a/src/main/resources/assets/extratrees/textures/gui/MothDatabase.png b/src/main/resources/assets/extratrees/textures/gui/MothDatabase.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/gui/MothDatabase.png differ diff --git a/src/main/resources/assets/extratrees/textures/gui/MothDatabase2.png b/src/main/resources/assets/extratrees/textures/gui/MothDatabase2.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/gui/MothDatabase2.png differ diff --git a/src/main/resources/assets/extratrees/textures/gui/TreeDatabase.png b/src/main/resources/assets/extratrees/textures/gui/TreeDatabase.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/gui/TreeDatabase.png differ diff --git a/src/main/resources/assets/extratrees/textures/gui/TreeDatabase2.png b/src/main/resources/assets/extratrees/textures/gui/TreeDatabase2.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/gui/TreeDatabase2.png differ diff --git a/src/main/resources/assets/extratrees/textures/gui/Woodworker.png b/src/main/resources/assets/extratrees/textures/gui/Woodworker.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/gui/Woodworker.png differ diff --git a/src/main/resources/assets/extratrees/textures/gui/Woodworker2.png b/src/main/resources/assets/extratrees/textures/gui/Woodworker2.png new file mode 100644 index 00000000..5396d5f6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/gui/Woodworker2.png differ diff --git a/src/main/resources/assets/extratrees/textures/gui/gui.png b/src/main/resources/assets/extratrees/textures/gui/gui.png new file mode 100644 index 00000000..18542808 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/gui/gui.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/arboristDatabase.png b/src/main/resources/assets/extratrees/textures/items/arboristDatabase.png new file mode 100644 index 00000000..e06b7769 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/arboristDatabase.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/bark.png b/src/main/resources/assets/extratrees/textures/items/bark.png new file mode 100644 index 00000000..bb4f9abf Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/bark.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/carpentryHammer.png b/src/main/resources/assets/extratrees/textures/items/carpentryHammer.png new file mode 100644 index 00000000..b5667de8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/carpentryHammer.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/door.double.png b/src/main/resources/assets/extratrees/textures/items/door.double.png new file mode 100644 index 00000000..aeeb15af Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/door.double.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/door.full.png b/src/main/resources/assets/extratrees/textures/items/door.full.png new file mode 100644 index 00000000..881fc47d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/door.full.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/door.solid.png b/src/main/resources/assets/extratrees/textures/items/door.solid.png new file mode 100644 index 00000000..050ce03e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/door.solid.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/door.standard.png b/src/main/resources/assets/extratrees/textures/items/door.standard.png new file mode 100644 index 00000000..ab56d011 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/door.standard.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/durableHammer.png b/src/main/resources/assets/extratrees/textures/items/durableHammer.png new file mode 100644 index 00000000..1bdee738 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/durableHammer.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Abiu.png b/src/main/resources/assets/extratrees/textures/items/food/Abiu.png new file mode 100644 index 00000000..a6f5ddd1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Abiu.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Acorn.png b/src/main/resources/assets/extratrees/textures/items/food/Acorn.png new file mode 100644 index 00000000..aae01a31 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Acorn.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Allspice.png b/src/main/resources/assets/extratrees/textures/items/food/Allspice.png new file mode 100644 index 00000000..acbe4b88 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Allspice.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Almond.png b/src/main/resources/assets/extratrees/textures/items/food/Almond.png new file mode 100644 index 00000000..d9cca42d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Almond.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Amla.png b/src/main/resources/assets/extratrees/textures/items/food/Amla.png new file mode 100644 index 00000000..5e61c6f6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Amla.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Apricot.png b/src/main/resources/assets/extratrees/textures/items/food/Apricot.png new file mode 100644 index 00000000..afdca253 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Apricot.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Avacado.png b/src/main/resources/assets/extratrees/textures/items/food/Avacado.png new file mode 100644 index 00000000..382a6375 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Avacado.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Bael.png b/src/main/resources/assets/extratrees/textures/items/food/Bael.png new file mode 100644 index 00000000..d79645bd Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Bael.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Banana.png b/src/main/resources/assets/extratrees/textures/items/food/Banana.png new file mode 100644 index 00000000..bdeebdf3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Banana.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Bay Laurel.png b/src/main/resources/assets/extratrees/textures/items/food/Bay Laurel.png new file mode 100644 index 00000000..e177f837 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Bay Laurel.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Bay Rum Berry.png b/src/main/resources/assets/extratrees/textures/items/food/Bay Rum Berry.png new file mode 100644 index 00000000..112c13ab Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Bay Rum Berry.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Beechnut.png b/src/main/resources/assets/extratrees/textures/items/food/Beechnut.png new file mode 100644 index 00000000..11dfdbf6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Beechnut.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Ber.png b/src/main/resources/assets/extratrees/textures/items/food/Ber.png new file mode 100644 index 00000000..6f06169a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Ber.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Black Walnut.png b/src/main/resources/assets/extratrees/textures/items/food/Black Walnut.png new file mode 100644 index 00000000..dc2114f4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Black Walnut.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/BlackCherry.png b/src/main/resources/assets/extratrees/textures/items/food/BlackCherry.png new file mode 100644 index 00000000..018d7b17 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/BlackCherry.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Blackberry.png b/src/main/resources/assets/extratrees/textures/items/food/Blackberry.png new file mode 100644 index 00000000..5dbe092a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Blackberry.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Blackcurrant.png b/src/main/resources/assets/extratrees/textures/items/food/Blackcurrant.png new file mode 100644 index 00000000..f95da7e3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Blackcurrant.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Blackthorn.png b/src/main/resources/assets/extratrees/textures/items/food/Blackthorn.png new file mode 100644 index 00000000..6e2aab87 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Blackthorn.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Blueberry.png b/src/main/resources/assets/extratrees/textures/items/food/Blueberry.png new file mode 100644 index 00000000..9cf65f6b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Blueberry.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/BrazilNut.png b/src/main/resources/assets/extratrees/textures/items/food/BrazilNut.png new file mode 100644 index 00000000..514980b1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/BrazilNut.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/BuddhaHand.png b/src/main/resources/assets/extratrees/textures/items/food/BuddhaHand.png new file mode 100644 index 00000000..5a1a6954 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/BuddhaHand.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Bunya nut001.png b/src/main/resources/assets/extratrees/textures/items/food/Bunya nut001.png new file mode 100644 index 00000000..c355c27e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Bunya nut001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Butternut.png b/src/main/resources/assets/extratrees/textures/items/food/Butternut.png new file mode 100644 index 00000000..6054488c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Butternut.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Candlenut.png b/src/main/resources/assets/extratrees/textures/items/food/Candlenut.png new file mode 100644 index 00000000..adbc5b0d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Candlenut.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Cashew.png b/src/main/resources/assets/extratrees/textures/items/food/Cashew.png new file mode 100644 index 00000000..044d0e1f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Cashew.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/CherryPlum.png b/src/main/resources/assets/extratrees/textures/items/food/CherryPlum.png new file mode 100644 index 00000000..cadeedcf Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/CherryPlum.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Chilli.png b/src/main/resources/assets/extratrees/textures/items/food/Chilli.png new file mode 100644 index 00000000..22956704 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Chilli.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Citron.png b/src/main/resources/assets/extratrees/textures/items/food/Citron.png new file mode 100644 index 00000000..b8192691 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Citron.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Clove.png b/src/main/resources/assets/extratrees/textures/items/food/Clove.png new file mode 100644 index 00000000..1dffe2a6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Clove.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Coconut.png b/src/main/resources/assets/extratrees/textures/items/food/Coconut.png new file mode 100644 index 00000000..b94e2ac7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Coconut.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Coffee.png b/src/main/resources/assets/extratrees/textures/items/food/Coffee.png new file mode 100644 index 00000000..ab57acb9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Coffee.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Crabapple.png b/src/main/resources/assets/extratrees/textures/items/food/Crabapple.png new file mode 100644 index 00000000..bcf14424 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Crabapple.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Cranberry.png b/src/main/resources/assets/extratrees/textures/items/food/Cranberry.png new file mode 100644 index 00000000..4a88c5c2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Cranberry.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Curry Leaf001.png b/src/main/resources/assets/extratrees/textures/items/food/Curry Leaf001.png new file mode 100644 index 00000000..fabd2084 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Curry Leaf001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/DamsonPlum.png b/src/main/resources/assets/extratrees/textures/items/food/DamsonPlum.png new file mode 100644 index 00000000..d57104f1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/DamsonPlum.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Elderberry.png b/src/main/resources/assets/extratrees/textures/items/food/Elderberry.png new file mode 100644 index 00000000..c220f5d1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Elderberry.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Fig.png b/src/main/resources/assets/extratrees/textures/items/food/Fig.png new file mode 100644 index 00000000..d714624a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Fig.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Finger Lime Green 001.png b/src/main/resources/assets/extratrees/textures/items/food/Finger Lime Green 001.png new file mode 100644 index 00000000..37daf3db Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Finger Lime Green 001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Finger Lime Yellow001.png b/src/main/resources/assets/extratrees/textures/items/food/Finger Lime Yellow001.png new file mode 100644 index 00000000..0294f03f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Finger Lime Yellow001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Finger Lime orange 001.png b/src/main/resources/assets/extratrees/textures/items/food/Finger Lime orange 001.png new file mode 100644 index 00000000..f4fec8f9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Finger Lime orange 001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Finger lime blackish001.png b/src/main/resources/assets/extratrees/textures/items/food/Finger lime blackish001.png new file mode 100644 index 00000000..ec90effe Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Finger lime blackish001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/FingerLime.png b/src/main/resources/assets/extratrees/textures/items/food/FingerLime.png new file mode 100644 index 00000000..a1d4614a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/FingerLime.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Fruit progress.PNG b/src/main/resources/assets/extratrees/textures/items/food/Fruit progress.PNG new file mode 100644 index 00000000..7d641e59 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Fruit progress.PNG differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/GingkoNut.png b/src/main/resources/assets/extratrees/textures/items/food/GingkoNut.png new file mode 100644 index 00000000..d6bb9e45 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/GingkoNut.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/GoldenRaspberry.png b/src/main/resources/assets/extratrees/textures/items/food/GoldenRaspberry.png new file mode 100644 index 00000000..fd04c327 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/GoldenRaspberry.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Gooseberry.png b/src/main/resources/assets/extratrees/textures/items/food/Gooseberry.png new file mode 100644 index 00000000..f3848a1a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Gooseberry.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Grapefruit.png b/src/main/resources/assets/extratrees/textures/items/food/Grapefruit.png new file mode 100644 index 00000000..e08fc9ae Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Grapefruit.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Hazelnut.png b/src/main/resources/assets/extratrees/textures/items/food/Hazelnut.png new file mode 100644 index 00000000..3974db81 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Hazelnut.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Heartnut001.png b/src/main/resources/assets/extratrees/textures/items/food/Heartnut001.png new file mode 100644 index 00000000..9af4f8b8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Heartnut001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/HickoryNut.png b/src/main/resources/assets/extratrees/textures/items/food/HickoryNut.png new file mode 100644 index 00000000..c4ef8ea2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/HickoryNut.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Hickory_Nut_003.png b/src/main/resources/assets/extratrees/textures/items/food/Hickory_Nut_003.png new file mode 100644 index 00000000..800aa13f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Hickory_Nut_003.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Ice Cream Bean002.png b/src/main/resources/assets/extratrees/textures/items/food/Ice Cream Bean002.png new file mode 100644 index 00000000..72008f50 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Ice Cream Bean002.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Jackfruit001.png b/src/main/resources/assets/extratrees/textures/items/food/Jackfruit001.png new file mode 100644 index 00000000..45f7b482 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Jackfruit001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Jujube001.png b/src/main/resources/assets/extratrees/textures/items/food/Jujube001.png new file mode 100644 index 00000000..1d08c19f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Jujube001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Juniper.png b/src/main/resources/assets/extratrees/textures/items/food/Juniper.png new file mode 100644 index 00000000..e019bc01 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Juniper.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Kaki.png b/src/main/resources/assets/extratrees/textures/items/food/Kaki.png new file mode 100644 index 00000000..c1f3c72d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Kaki.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/KeyLime.png b/src/main/resources/assets/extratrees/textures/items/food/KeyLime.png new file mode 100644 index 00000000..488ab3e1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/KeyLime.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Kola nut001.png b/src/main/resources/assets/extratrees/textures/items/food/Kola nut001.png new file mode 100644 index 00000000..2938f11b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Kola nut001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Kukui Nut001.png b/src/main/resources/assets/extratrees/textures/items/food/Kukui Nut001.png new file mode 100644 index 00000000..a698324a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Kukui Nut001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Kumquat.png b/src/main/resources/assets/extratrees/textures/items/food/Kumquat.png new file mode 100644 index 00000000..9f76c989 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Kumquat.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Lemon2_006.png b/src/main/resources/assets/extratrees/textures/items/food/Lemon2_006.png new file mode 100644 index 00000000..d05f0594 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Lemon2_006.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Lime.png b/src/main/resources/assets/extratrees/textures/items/food/Lime.png new file mode 100644 index 00000000..d48308a9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Lime.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Longan001.png b/src/main/resources/assets/extratrees/textures/items/food/Longan001.png new file mode 100644 index 00000000..b054762f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Longan001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Loquat001.png b/src/main/resources/assets/extratrees/textures/items/food/Loquat001.png new file mode 100644 index 00000000..7af968a5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Loquat001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Lychee001.png b/src/main/resources/assets/extratrees/textures/items/food/Lychee001.png new file mode 100644 index 00000000..3fec878d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Lychee001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Macadamia.png b/src/main/resources/assets/extratrees/textures/items/food/Macadamia.png new file mode 100644 index 00000000..635362b7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Macadamia.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Manderin.png b/src/main/resources/assets/extratrees/textures/items/food/Manderin.png new file mode 100644 index 00000000..81dd0223 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Manderin.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Mango.png b/src/main/resources/assets/extratrees/textures/items/food/Mango.png new file mode 100644 index 00000000..dd5fc21f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Mango.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Mongongo001.png b/src/main/resources/assets/extratrees/textures/items/food/Mongongo001.png new file mode 100644 index 00000000..d197c1a1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Mongongo001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/MonkeyPuzzleNut.png b/src/main/resources/assets/extratrees/textures/items/food/MonkeyPuzzleNut.png new file mode 100644 index 00000000..49bdd12c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/MonkeyPuzzleNut.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Nectarine.png b/src/main/resources/assets/extratrees/textures/items/food/Nectarine.png new file mode 100644 index 00000000..0be0901d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Nectarine.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Nutmeg.png b/src/main/resources/assets/extratrees/textures/items/food/Nutmeg.png new file mode 100644 index 00000000..050b74ee Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Nutmeg.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Ohia ai001.png b/src/main/resources/assets/extratrees/textures/items/food/Ohia ai001.png new file mode 100644 index 00000000..d5e269b4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Ohia ai001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Olive.png b/src/main/resources/assets/extratrees/textures/items/food/Olive.png new file mode 100644 index 00000000..9b0e0bb4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Olive.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Orange.png b/src/main/resources/assets/extratrees/textures/items/food/Orange.png new file mode 100644 index 00000000..65f2f76b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Orange.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/OsangeOrange.png b/src/main/resources/assets/extratrees/textures/items/food/OsangeOrange.png new file mode 100644 index 00000000..f68680d1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/OsangeOrange.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Papayimar.png b/src/main/resources/assets/extratrees/textures/items/food/Papayimar.png new file mode 100644 index 00000000..69fd4ecf Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Papayimar.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Paradise nut001.png b/src/main/resources/assets/extratrees/textures/items/food/Paradise nut001.png new file mode 100644 index 00000000..bdcfea0d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Paradise nut001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Peach.png b/src/main/resources/assets/extratrees/textures/items/food/Peach.png new file mode 100644 index 00000000..325eac5f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Peach.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Pear.png b/src/main/resources/assets/extratrees/textures/items/food/Pear.png new file mode 100644 index 00000000..6a15b39a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Pear.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Pecan.png b/src/main/resources/assets/extratrees/textures/items/food/Pecan.png new file mode 100644 index 00000000..340a84b5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Pecan.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Peruvian pepper001.png b/src/main/resources/assets/extratrees/textures/items/food/Peruvian pepper001.png new file mode 100644 index 00000000..3e1aa3b4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Peruvian pepper001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Pine nut001.png b/src/main/resources/assets/extratrees/textures/items/food/Pine nut001.png new file mode 100644 index 00000000..f08898f4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Pine nut001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Pistachio001.png b/src/main/resources/assets/extratrees/textures/items/food/Pistachio001.png new file mode 100644 index 00000000..0a6adea6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Pistachio001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Plantain.png b/src/main/resources/assets/extratrees/textures/items/food/Plantain.png new file mode 100644 index 00000000..ca9db7d1 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Plantain.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Pomelo.png b/src/main/resources/assets/extratrees/textures/items/food/Pomelo.png new file mode 100644 index 00000000..c287851d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Pomelo.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Quince.png b/src/main/resources/assets/extratrees/textures/items/food/Quince.png new file mode 100644 index 00000000..4ebe426c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Quince.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/RainierCherry.png b/src/main/resources/assets/extratrees/textures/items/food/RainierCherry.png new file mode 100644 index 00000000..5b4256f6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/RainierCherry.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Raspberry.png b/src/main/resources/assets/extratrees/textures/items/food/Raspberry.png new file mode 100644 index 00000000..5e0a6e62 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Raspberry.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/RedBanana.png b/src/main/resources/assets/extratrees/textures/items/food/RedBanana.png new file mode 100644 index 00000000..e47eecca Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/RedBanana.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Redcurrant.png b/src/main/resources/assets/extratrees/textures/items/food/Redcurrant.png new file mode 100644 index 00000000..e04cbd34 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Redcurrant.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/SandPear.png b/src/main/resources/assets/extratrees/textures/items/food/SandPear.png new file mode 100644 index 00000000..846b87ae Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/SandPear.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Sapodilla001.png b/src/main/resources/assets/extratrees/textures/items/food/Sapodilla001.png new file mode 100644 index 00000000..8665bb0b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Sapodilla001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Satsuma.png b/src/main/resources/assets/extratrees/textures/items/food/Satsuma.png new file mode 100644 index 00000000..f4b8273a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Satsuma.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/SourCherry.png b/src/main/resources/assets/extratrees/textures/items/food/SourCherry.png new file mode 100644 index 00000000..7834d0b0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/SourCherry.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Soursop001.png b/src/main/resources/assets/extratrees/textures/items/food/Soursop001.png new file mode 100644 index 00000000..f86bc0ba Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Soursop001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/StarAnise.png b/src/main/resources/assets/extratrees/textures/items/food/StarAnise.png new file mode 100644 index 00000000..83b46928 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/StarAnise.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Starfruit.png b/src/main/resources/assets/extratrees/textures/items/food/Starfruit.png new file mode 100644 index 00000000..84885ad5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Starfruit.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Tamarillo001.png b/src/main/resources/assets/extratrees/textures/items/food/Tamarillo001.png new file mode 100644 index 00000000..96eb5c55 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Tamarillo001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Tangerine.png b/src/main/resources/assets/extratrees/textures/items/food/Tangerine.png new file mode 100644 index 00000000..1c642dc9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Tangerine.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/Tropical Apricot001.png b/src/main/resources/assets/extratrees/textures/items/food/Tropical Apricot001.png new file mode 100644 index 00000000..55b60cc4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/Tropical Apricot001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/WildCherry.png b/src/main/resources/assets/extratrees/textures/items/food/WildCherry.png new file mode 100644 index 00000000..8667cc79 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/WildCherry.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/breadnut001.PNG b/src/main/resources/assets/extratrees/textures/items/food/breadnut001.PNG new file mode 100644 index 00000000..21d7066a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/breadnut001.PNG differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/cinnamon sticks001.png b/src/main/resources/assets/extratrees/textures/items/food/cinnamon sticks001.png new file mode 100644 index 00000000..512b8ad4 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/cinnamon sticks001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/guava001.png b/src/main/resources/assets/extratrees/textures/items/food/guava001.png new file mode 100644 index 00000000..ea251160 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/guava001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/kluwak001.png b/src/main/resources/assets/extratrees/textures/items/food/kluwak001.png new file mode 100644 index 00000000..3927d448 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/kluwak001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/mamey sapote001.png b/src/main/resources/assets/extratrees/textures/items/food/mamey sapote001.png new file mode 100644 index 00000000..07814af2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/mamey sapote001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/mangosteen001.png b/src/main/resources/assets/extratrees/textures/items/food/mangosteen001.png new file mode 100644 index 00000000..064d2874 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/mangosteen001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/passion fruit001.png b/src/main/resources/assets/extratrees/textures/items/food/passion fruit001.png new file mode 100644 index 00000000..e447ef51 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/passion fruit001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/food/pomegranate001.png b/src/main/resources/assets/extratrees/textures/items/food/pomegranate001.png new file mode 100644 index 00000000..d79ab7ab Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/food/pomegranate001.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassFitting.png b/src/main/resources/assets/extratrees/textures/items/glassFitting.png new file mode 100644 index 00000000..46130c35 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassFitting.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/beermug.contents.png b/src/main/resources/assets/extratrees/textures/items/glassware/beermug.contents.png new file mode 100644 index 00000000..08243e70 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/beermug.contents.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/beermug.glass.png b/src/main/resources/assets/extratrees/textures/items/glassware/beermug.glass.png new file mode 100644 index 00000000..6842823e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/beermug.glass.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/beermug.png b/src/main/resources/assets/extratrees/textures/items/glassware/beermug.png new file mode 100644 index 00000000..43a11e87 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/beermug.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/cocktail.contents.png b/src/main/resources/assets/extratrees/textures/items/glassware/cocktail.contents.png new file mode 100644 index 00000000..e3678590 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/cocktail.contents.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/cocktail.glass.png b/src/main/resources/assets/extratrees/textures/items/glassware/cocktail.glass.png new file mode 100644 index 00000000..b4fc01c6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/cocktail.glass.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/cocktail.png b/src/main/resources/assets/extratrees/textures/items/glassware/cocktail.png new file mode 100644 index 00000000..193743ec Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/cocktail.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/collins.contents.png b/src/main/resources/assets/extratrees/textures/items/glassware/collins.contents.png new file mode 100644 index 00000000..1d475dae Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/collins.contents.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/collins.glass.png b/src/main/resources/assets/extratrees/textures/items/glassware/collins.glass.png new file mode 100644 index 00000000..97ee913d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/collins.glass.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/collins.png b/src/main/resources/assets/extratrees/textures/items/glassware/collins.png new file mode 100644 index 00000000..8556b11e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/collins.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/cordial.contents.png b/src/main/resources/assets/extratrees/textures/items/glassware/cordial.contents.png new file mode 100644 index 00000000..855d3a27 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/cordial.contents.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/cordial.glass.png b/src/main/resources/assets/extratrees/textures/items/glassware/cordial.glass.png new file mode 100644 index 00000000..60bd9d95 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/cordial.glass.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/cordial.png b/src/main/resources/assets/extratrees/textures/items/glassware/cordial.png new file mode 100644 index 00000000..ba0931dd Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/cordial.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/coupe.contents.png b/src/main/resources/assets/extratrees/textures/items/glassware/coupe.contents.png new file mode 100644 index 00000000..1109e7a6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/coupe.contents.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/coupe.glass.png b/src/main/resources/assets/extratrees/textures/items/glassware/coupe.glass.png new file mode 100644 index 00000000..35c3bbe5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/coupe.glass.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/coupe.png b/src/main/resources/assets/extratrees/textures/items/glassware/coupe.png new file mode 100644 index 00000000..3656d115 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/coupe.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/flute.contents.png b/src/main/resources/assets/extratrees/textures/items/glassware/flute.contents.png new file mode 100644 index 00000000..2c3ca654 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/flute.contents.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/flute.glass.png b/src/main/resources/assets/extratrees/textures/items/glassware/flute.glass.png new file mode 100644 index 00000000..a6f211d7 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/flute.glass.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/flute.png b/src/main/resources/assets/extratrees/textures/items/glassware/flute.png new file mode 100644 index 00000000..2a714a90 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/flute.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/highball.contents.png b/src/main/resources/assets/extratrees/textures/items/glassware/highball.contents.png new file mode 100644 index 00000000..04dd86ad Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/highball.contents.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/highball.glass.png b/src/main/resources/assets/extratrees/textures/items/glassware/highball.glass.png new file mode 100644 index 00000000..1147499e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/highball.glass.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/highball.png b/src/main/resources/assets/extratrees/textures/items/glassware/highball.png new file mode 100644 index 00000000..ff8a00ad Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/highball.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/hurricane.contents.png b/src/main/resources/assets/extratrees/textures/items/glassware/hurricane.contents.png new file mode 100644 index 00000000..bccfe335 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/hurricane.contents.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/hurricane.glass.png b/src/main/resources/assets/extratrees/textures/items/glassware/hurricane.glass.png new file mode 100644 index 00000000..4a2dd8c0 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/hurricane.glass.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/hurricane.png b/src/main/resources/assets/extratrees/textures/items/glassware/hurricane.png new file mode 100644 index 00000000..12d99be8 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/hurricane.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/margarita.contents.png b/src/main/resources/assets/extratrees/textures/items/glassware/margarita.contents.png new file mode 100644 index 00000000..ff1039c6 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/margarita.contents.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/margarita.glass.png b/src/main/resources/assets/extratrees/textures/items/glassware/margarita.glass.png new file mode 100644 index 00000000..7e5574a3 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/margarita.glass.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/margarita.png b/src/main/resources/assets/extratrees/textures/items/glassware/margarita.png new file mode 100644 index 00000000..3fae677f Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/margarita.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/oldfashioned.contents.png b/src/main/resources/assets/extratrees/textures/items/glassware/oldfashioned.contents.png new file mode 100644 index 00000000..73a76493 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/oldfashioned.contents.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/oldfashioned.glass.png b/src/main/resources/assets/extratrees/textures/items/glassware/oldfashioned.glass.png new file mode 100644 index 00000000..63494a3e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/oldfashioned.glass.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/oldfashioned.png b/src/main/resources/assets/extratrees/textures/items/glassware/oldfashioned.png new file mode 100644 index 00000000..62769ce5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/oldfashioned.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/pint.contents.png b/src/main/resources/assets/extratrees/textures/items/glassware/pint.contents.png new file mode 100644 index 00000000..f7caf6dc Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/pint.contents.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/pint.glass.png b/src/main/resources/assets/extratrees/textures/items/glassware/pint.glass.png new file mode 100644 index 00000000..1e4df59d Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/pint.glass.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/pint.png b/src/main/resources/assets/extratrees/textures/items/glassware/pint.png new file mode 100644 index 00000000..f399e4da Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/pint.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/sherry.contents.png b/src/main/resources/assets/extratrees/textures/items/glassware/sherry.contents.png new file mode 100644 index 00000000..7da75a3c Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/sherry.contents.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/sherry.glass.png b/src/main/resources/assets/extratrees/textures/items/glassware/sherry.glass.png new file mode 100644 index 00000000..ea343ce2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/sherry.glass.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/sherry.png b/src/main/resources/assets/extratrees/textures/items/glassware/sherry.png new file mode 100644 index 00000000..80a99b27 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/sherry.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/shot.contents.png b/src/main/resources/assets/extratrees/textures/items/glassware/shot.contents.png new file mode 100644 index 00000000..cd730da2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/shot.contents.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/shot.glass.png b/src/main/resources/assets/extratrees/textures/items/glassware/shot.glass.png new file mode 100644 index 00000000..38fe25dd Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/shot.glass.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/shot.png b/src/main/resources/assets/extratrees/textures/items/glassware/shot.png new file mode 100644 index 00000000..de5557f2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/shot.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/snifter.contents.png b/src/main/resources/assets/extratrees/textures/items/glassware/snifter.contents.png new file mode 100644 index 00000000..7322f121 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/snifter.contents.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/snifter.glass.png b/src/main/resources/assets/extratrees/textures/items/glassware/snifter.glass.png new file mode 100644 index 00000000..06c0c4f2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/snifter.glass.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/snifter.png b/src/main/resources/assets/extratrees/textures/items/glassware/snifter.png new file mode 100644 index 00000000..777358d5 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/snifter.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/wine.contents.png b/src/main/resources/assets/extratrees/textures/items/glassware/wine.contents.png new file mode 100644 index 00000000..170acc61 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/wine.contents.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/wine.glass.png b/src/main/resources/assets/extratrees/textures/items/glassware/wine.glass.png new file mode 100644 index 00000000..5ca2b168 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/wine.glass.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/glassware/wine.png b/src/main/resources/assets/extratrees/textures/items/glassware/wine.png new file mode 100644 index 00000000..f2fb6312 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/glassware/wine.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/grainBarley.png b/src/main/resources/assets/extratrees/textures/items/grainBarley.png new file mode 100644 index 00000000..58c88788 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/grainBarley.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/grainCorn.png b/src/main/resources/assets/extratrees/textures/items/grainCorn.png new file mode 100644 index 00000000..8ad4f582 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/grainCorn.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/grainRoasted.png b/src/main/resources/assets/extratrees/textures/items/grainRoasted.png new file mode 100644 index 00000000..0742f35a Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/grainRoasted.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/grainRye.png b/src/main/resources/assets/extratrees/textures/items/grainRye.png new file mode 100644 index 00000000..39a83789 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/grainRye.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/grainWheat.png b/src/main/resources/assets/extratrees/textures/items/grainWheat.png new file mode 100644 index 00000000..ba218433 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/grainWheat.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/hops.png b/src/main/resources/assets/extratrees/textures/items/hops.png new file mode 100644 index 00000000..5e0f30ba Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/hops.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/icon/discoveredMoth.png b/src/main/resources/assets/extratrees/textures/items/icon/discoveredMoth.png new file mode 100644 index 00000000..3b4eb950 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/icon/discoveredMoth.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/icon/discoveredTree.png b/src/main/resources/assets/extratrees/textures/items/icon/discoveredTree.png new file mode 100644 index 00000000..faef1776 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/icon/discoveredTree.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/icon/undiscoveredMoth.png b/src/main/resources/assets/extratrees/textures/items/icon/undiscoveredMoth.png new file mode 100644 index 00000000..22cbb763 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/icon/undiscoveredMoth.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/icon/undiscoveredTree.png b/src/main/resources/assets/extratrees/textures/items/icon/undiscoveredTree.png new file mode 100644 index 00000000..a4086b08 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/icon/undiscoveredTree.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/lepiDatabase.png b/src/main/resources/assets/extratrees/textures/items/lepiDatabase.png new file mode 100644 index 00000000..1a44391e Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/lepiDatabase.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/masterArboristDatabase.png b/src/main/resources/assets/extratrees/textures/items/masterArboristDatabase.png new file mode 100644 index 00000000..ac9abc37 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/masterArboristDatabase.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/masterLepiDatabase.png b/src/main/resources/assets/extratrees/textures/items/masterLepiDatabase.png new file mode 100644 index 00000000..f51ea672 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/masterLepiDatabase.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/provenGear.png b/src/main/resources/assets/extratrees/textures/items/provenGear.png new file mode 100644 index 00000000..3f23e7ee Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/provenGear.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/sawdust.png b/src/main/resources/assets/extratrees/textures/items/sawdust.png new file mode 100644 index 00000000..ea31e4d2 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/sawdust.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/setSquare0.png b/src/main/resources/assets/extratrees/textures/items/setSquare0.png new file mode 100644 index 00000000..7433d6cb Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/setSquare0.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/setSquare1.png b/src/main/resources/assets/extratrees/textures/items/setSquare1.png new file mode 100644 index 00000000..680814b9 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/setSquare1.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/setSquare2.png b/src/main/resources/assets/extratrees/textures/items/setSquare2.png new file mode 100644 index 00000000..9d8230dd Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/setSquare2.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/woodWax.png b/src/main/resources/assets/extratrees/textures/items/woodWax.png new file mode 100644 index 00000000..0997da2b Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/woodWax.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/yeast.png b/src/main/resources/assets/extratrees/textures/items/yeast.png new file mode 100644 index 00000000..2128cc50 Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/yeast.png differ diff --git a/src/main/resources/assets/extratrees/textures/items/yeastLager.png b/src/main/resources/assets/extratrees/textures/items/yeastLager.png new file mode 100644 index 00000000..47d56bcc Binary files /dev/null and b/src/main/resources/assets/extratrees/textures/items/yeastLager.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/Nursery.png b/src/main/resources/assets/forestry/textures/tile/extratrees/Nursery.png new file mode 100644 index 00000000..e92e6e15 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/Nursery.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/NurseryOccupied.png b/src/main/resources/assets/forestry/textures/tile/extratrees/NurseryOccupied.png new file mode 100644 index 00000000..74a18233 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/NurseryOccupied.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/brewery_base.png b/src/main/resources/assets/forestry/textures/tile/extratrees/brewery_base.png new file mode 100644 index 00000000..fe34cd98 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/brewery_base.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/brewery_tank_product_empty.png b/src/main/resources/assets/forestry/textures/tile/extratrees/brewery_tank_product_empty.png new file mode 100644 index 00000000..a2a973c7 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/brewery_tank_product_empty.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/brewery_tank_resource_empty.png b/src/main/resources/assets/forestry/textures/tile/extratrees/brewery_tank_resource_empty.png new file mode 100644 index 00000000..da850afc Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/brewery_tank_resource_empty.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/carpenter_base.png b/src/main/resources/assets/forestry/textures/tile/extratrees/carpenter_base.png new file mode 100644 index 00000000..032040b8 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/carpenter_base.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/carpenter_tank_product_empty.png b/src/main/resources/assets/forestry/textures/tile/extratrees/carpenter_tank_product_empty.png new file mode 100644 index 00000000..008e9f41 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/carpenter_tank_product_empty.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/carpenter_tank_resource_empty.png b/src/main/resources/assets/forestry/textures/tile/extratrees/carpenter_tank_resource_empty.png new file mode 100644 index 00000000..bac9590c Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/carpenter_tank_resource_empty.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/distillery_base.png b/src/main/resources/assets/forestry/textures/tile/extratrees/distillery_base.png new file mode 100644 index 00000000..d5b0f41e Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/distillery_base.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/distillery_tank_product_empty.png b/src/main/resources/assets/forestry/textures/tile/extratrees/distillery_tank_product_empty.png new file mode 100644 index 00000000..8e7c6475 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/distillery_tank_product_empty.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/distillery_tank_resource_empty.png b/src/main/resources/assets/forestry/textures/tile/extratrees/distillery_tank_resource_empty.png new file mode 100644 index 00000000..d2203333 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/distillery_tank_resource_empty.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/incubator_base.png b/src/main/resources/assets/forestry/textures/tile/extratrees/incubator_base.png new file mode 100644 index 00000000..d5b3b853 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/incubator_base.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/incubator_tank_product_empty.png b/src/main/resources/assets/forestry/textures/tile/extratrees/incubator_tank_product_empty.png new file mode 100644 index 00000000..627cd644 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/incubator_tank_product_empty.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/incubator_tank_resource_empty.png b/src/main/resources/assets/forestry/textures/tile/extratrees/incubator_tank_resource_empty.png new file mode 100644 index 00000000..d9f97b53 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/incubator_tank_resource_empty.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/infuser_base.png b/src/main/resources/assets/forestry/textures/tile/extratrees/infuser_base.png new file mode 100644 index 00000000..9aabf943 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/infuser_base.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/infuser_tank_product_empty.png b/src/main/resources/assets/forestry/textures/tile/extratrees/infuser_tank_product_empty.png new file mode 100644 index 00000000..a4f36928 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/infuser_tank_product_empty.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/infuser_tank_resource_empty.png b/src/main/resources/assets/forestry/textures/tile/extratrees/infuser_tank_resource_empty.png new file mode 100644 index 00000000..b9b3db81 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/infuser_tank_resource_empty.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/paneler_base.png b/src/main/resources/assets/forestry/textures/tile/extratrees/paneler_base.png new file mode 100644 index 00000000..7956f95d Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/paneler_base.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/paneler_tank_product_empty.png b/src/main/resources/assets/forestry/textures/tile/extratrees/paneler_tank_product_empty.png new file mode 100644 index 00000000..d8021216 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/paneler_tank_product_empty.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/paneler_tank_resource_empty.png b/src/main/resources/assets/forestry/textures/tile/extratrees/paneler_tank_resource_empty.png new file mode 100644 index 00000000..e74b07c4 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/paneler_tank_resource_empty.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/press_base.png b/src/main/resources/assets/forestry/textures/tile/extratrees/press_base.png new file mode 100644 index 00000000..3c883303 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/press_base.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/press_tank_product_empty.png b/src/main/resources/assets/forestry/textures/tile/extratrees/press_tank_product_empty.png new file mode 100644 index 00000000..8b7b5c94 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/press_tank_product_empty.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/press_tank_resource_empty.png b/src/main/resources/assets/forestry/textures/tile/extratrees/press_tank_resource_empty.png new file mode 100644 index 00000000..ad712a4a Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/press_tank_resource_empty.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/sawmill_base.png b/src/main/resources/assets/forestry/textures/tile/extratrees/sawmill_base.png new file mode 100644 index 00000000..7ab24444 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/sawmill_base.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/sawmill_tank_product_empty.png b/src/main/resources/assets/forestry/textures/tile/extratrees/sawmill_tank_product_empty.png new file mode 100644 index 00000000..7ae2cf73 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/sawmill_tank_product_empty.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/sawmill_tank_resource_empty.png b/src/main/resources/assets/forestry/textures/tile/extratrees/sawmill_tank_resource_empty.png new file mode 100644 index 00000000..9aa1e7c8 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/sawmill_tank_resource_empty.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/sawmill_tank_resource_high.png b/src/main/resources/assets/forestry/textures/tile/extratrees/sawmill_tank_resource_high.png new file mode 100644 index 00000000..4edc74cf Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/sawmill_tank_resource_high.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/sawmill_tank_resource_low.png b/src/main/resources/assets/forestry/textures/tile/extratrees/sawmill_tank_resource_low.png new file mode 100644 index 00000000..1e3b7e4e Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/sawmill_tank_resource_low.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/sawmill_tank_resource_maximum.png b/src/main/resources/assets/forestry/textures/tile/extratrees/sawmill_tank_resource_maximum.png new file mode 100644 index 00000000..af019c28 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/sawmill_tank_resource_maximum.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/sawmill_tank_resource_medium.png b/src/main/resources/assets/forestry/textures/tile/extratrees/sawmill_tank_resource_medium.png new file mode 100644 index 00000000..8cd44b09 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/sawmill_tank_resource_medium.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/tileworker_base.png b/src/main/resources/assets/forestry/textures/tile/extratrees/tileworker_base.png new file mode 100644 index 00000000..dc915188 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/tileworker_base.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/tileworker_tank_product_empty.png b/src/main/resources/assets/forestry/textures/tile/extratrees/tileworker_tank_product_empty.png new file mode 100644 index 00000000..c1ab214d Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/tileworker_tank_product_empty.png differ diff --git a/src/main/resources/assets/forestry/textures/tile/extratrees/tileworker_tank_resource_empty.png b/src/main/resources/assets/forestry/textures/tile/extratrees/tileworker_tank_resource_empty.png new file mode 100644 index 00000000..dd6e3763 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/tile/extratrees/tileworker_tank_resource_empty.png differ diff --git a/src/main/resources/assets/genetics/lang/en_GB.lang b/src/main/resources/assets/genetics/lang/en_GB.lang new file mode 100644 index 00000000..ad86e939 --- /dev/null +++ b/src/main/resources/assets/genetics/lang/en_GB.lang @@ -0,0 +1,43 @@ +################################################## +## Machines + +genetics.machine.machine.isolator=Isolator +genetics.machine.machine.isolator.info=The Isolator takes a random allele from a bee, tree or other individual and copies it into an empty sequence vial. This requires the use of ethanol as a solvent and an enzyme to cut up the DNA. The unsequenced serums can then be amplified in a Polymeriser and sequenced in a Sequencer. + +genetics.machine.machine.sequencer=Sequencer +genetics.machine.machine.sequencer.info=The Sequencer takes unsequenced serums and determines which allele is present in them. This requires the use of fluorescent dye and has a long computational time. + +genetics.machine.machine.polymeriser=Polymeriser +genetics.machine.machine.polymeriser.info=The Polymeriser takes serums and refills them using Raw DNA and replicating bacteria. This can be accelerated using gold nuggets. + +genetics.machine.machine.inoculator=Inoculator +genetics.machine.machine.inoculator.info=The Inoculator uses serums to add genes to breedable individuals. This process takes a very long time and requires a Bacteria Vector, but is 100% successful. + +genetics.machine.labMachine.genepool=Genepool +genetics.machine.labMachine.genepool.info=The Genepool uses enzymes and ethanol to break down living things into DNA. All genetic information is lost and the source of the DNA is destroyed. + + +genetics.machine.labMachine.labMachine=Lab Stand + +genetics.machine.labMachine.analyser=Analyser +genetics.machine.labMachine.analyser.info=The Analyser takes breedable individuals and DNA sequencers and analyses them to determine the genes present. This requires DNA Dye, created from purple dye and glowstone + +genetics.machine.labMachine.incubator=Incubator +genetics.machine.labMachine.incubator.info=The Incubator combines liquids and items and allows them to sit at an ideal temperature to encourage bacterial growth. + +genetics.machine.labMachine.acclimatiser=Acclimatiser + +genetics.machine.advMachine.splicer=Splicer +genetics.machine.advMachine.splicer.info=The Splicer is an incredibly powerful machine to insert genes into individuals. It is fast, but needs insane amounts of power. + + + + +genetics.item.sequence=DNA Sequence + +genetics.item.sequence.0=Very Faint +genetics.item.sequence.1=Faint +genetics.item.sequence.2=Weak +genetics.item.sequence.3=Average +genetics.item.sequence.4=Strong +genetics.item.sequence.5=Very Strong diff --git a/src/main/resources/assets/genetics/lang/en_US.lang b/src/main/resources/assets/genetics/lang/en_US.lang new file mode 100644 index 00000000..7e49de52 --- /dev/null +++ b/src/main/resources/assets/genetics/lang/en_US.lang @@ -0,0 +1,43 @@ +################################################## +## Machines + +genetics.machine.machine.isolator=Isolator +genetics.machine.machine.isolator.info=The Isolator takes a random allele from a bee, tree or other individual and copies it into an empty sequence vial. This requires the use of ethanol as a solvent and an enzyme to cut up the DNA. The unsequenced serums can then be amplified in a Polymeriser and sequenced in a Sequencer. + +genetics.machine.machine.sequencer=Sequencer +genetics.machine.machine.sequencer.info=The Sequencer takes unsequenced serums and determines which allele is present in them. This process is slow and requires the use of fluorescent dye. + +genetics.machine.machine.polymeriser=Polymeriser +genetics.machine.machine.polymeriser.info=The Polymeriser fills empty serums with Raw DNA and replicating bacteria. This process can be accelerated using gold nuggets. + +genetics.machine.machine.inoculator=Inoculator +genetics.machine.machine.inoculator.info=The Inoculator uses serums to add genes to breedable individuals. This process is very slow and requires a Bacteria Vector, but is always successful. + +genetics.machine.labMachine.genepool=Genepool +genetics.machine.labMachine.genepool.info=The Genepool uses enzymes and ethanol to break down living things into DNA. During this process, all genetic information is lost and the source of the DNA is destroyed. + + +genetics.machine.labMachine.labMachine=Lab Stand + +genetics.machine.labMachine.analyser=Analyser +genetics.machine.labMachine.analyser.info=The Analyser takes breedable individuals and DNA sequencers and analyses them to determine the genes present. This requires DNA Dye, created from purple dye and glowstone + +genetics.machine.labMachine.incubator=Incubator +genetics.machine.labMachine.incubator.info=The Incubator combines liquids and items and allows them to sit at an ideal temperature to encourage bacterial growth. + +genetics.machine.labMachine.acclimatiser=Acclimatiser + +genetics.machine.advMachine.splicer=Splicer +genetics.machine.advMachine.splicer.info=The Splicer is an incredibly powerful machine that is used to insert genes into individuals. This process is fast, but requires monumental amounts of power. + + + + +genetics.item.sequence=DNA Sequence + +genetics.item.sequence.0=Very Faint +genetics.item.sequence.1=Faint +genetics.item.sequence.2=Weak +genetics.item.sequence.3=Average +genetics.item.sequence.4=Strong +genetics.item.sequence.5=Very Strong diff --git a/src/main/resources/assets/genetics/textures/blocks/alveary.png b/src/main/resources/assets/genetics/textures/blocks/alveary.png new file mode 100644 index 00000000..3a5a153a Binary files /dev/null and b/src/main/resources/assets/genetics/textures/blocks/alveary.png differ diff --git a/src/main/resources/assets/genetics/textures/blocks/fx/sequencer.a.png b/src/main/resources/assets/genetics/textures/blocks/fx/sequencer.a.png new file mode 100644 index 00000000..1b085557 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/blocks/fx/sequencer.a.png differ diff --git a/src/main/resources/assets/genetics/textures/blocks/fx/sequencer.c.png b/src/main/resources/assets/genetics/textures/blocks/fx/sequencer.c.png new file mode 100644 index 00000000..154a4873 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/blocks/fx/sequencer.c.png differ diff --git a/src/main/resources/assets/genetics/textures/blocks/fx/sequencer.g.png b/src/main/resources/assets/genetics/textures/blocks/fx/sequencer.g.png new file mode 100644 index 00000000..5e654b83 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/blocks/fx/sequencer.g.png differ diff --git a/src/main/resources/assets/genetics/textures/blocks/fx/sequencer.t.png b/src/main/resources/assets/genetics/textures/blocks/fx/sequencer.t.png new file mode 100644 index 00000000..5a7b2b88 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/blocks/fx/sequencer.t.png differ diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/bacteria.pdn b/src/main/resources/assets/genetics/textures/blocks/liquids/bacteria.pdn new file mode 100644 index 00000000..73537fbe Binary files /dev/null and b/src/main/resources/assets/genetics/textures/blocks/liquids/bacteria.pdn differ diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/bacteria.png b/src/main/resources/assets/genetics/textures/blocks/liquids/bacteria.png new file mode 100644 index 00000000..9e54ccbd Binary files /dev/null and b/src/main/resources/assets/genetics/textures/blocks/liquids/bacteria.png differ diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/bacteria.png.mcmeta b/src/main/resources/assets/genetics/textures/blocks/liquids/bacteria.png.mcmeta new file mode 100644 index 00000000..0c36dcaa --- /dev/null +++ b/src/main/resources/assets/genetics/textures/blocks/liquids/bacteria.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":32,"frametime":1,"frames":[{"index":0,"time":2},{"index":1,"time":2},{"index":2,"time":2},{"index":3,"time":2},{"index":4,"time":2},{"index":5,"time":2},{"index":6,"time":2},{"index":7,"time":2},{"index":8,"time":2},{"index":9,"time":2},{"index":10,"time":2},{"index":11,"time":2},{"index":12,"time":2},{"index":13,"time":2},{"index":14,"time":2},{"index":15,"time":2},{"index":16,"time":2},{"index":17,"time":2},{"index":18,"time":2},{"index":19,"time":2},{"index":20,"time":2},{"index":21,"time":2},{"index":22,"time":2},{"index":23,"time":2},{"index":24,"time":2},{"index":25,"time":2},{"index":26,"time":2},{"index":27,"time":2},{"index":28,"time":2},{"index":29,"time":2},{"index":30,"time":2},{"index":31,"time":2}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/bacteriaPoly.png b/src/main/resources/assets/genetics/textures/blocks/liquids/bacteriaPoly.png new file mode 100644 index 00000000..1ae4f791 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/blocks/liquids/bacteriaPoly.png differ diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/bacteriaPoly.png.mcmeta b/src/main/resources/assets/genetics/textures/blocks/liquids/bacteriaPoly.png.mcmeta new file mode 100644 index 00000000..0c36dcaa --- /dev/null +++ b/src/main/resources/assets/genetics/textures/blocks/liquids/bacteriaPoly.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":32,"frametime":1,"frames":[{"index":0,"time":2},{"index":1,"time":2},{"index":2,"time":2},{"index":3,"time":2},{"index":4,"time":2},{"index":5,"time":2},{"index":6,"time":2},{"index":7,"time":2},{"index":8,"time":2},{"index":9,"time":2},{"index":10,"time":2},{"index":11,"time":2},{"index":12,"time":2},{"index":13,"time":2},{"index":14,"time":2},{"index":15,"time":2},{"index":16,"time":2},{"index":17,"time":2},{"index":18,"time":2},{"index":19,"time":2},{"index":20,"time":2},{"index":21,"time":2},{"index":22,"time":2},{"index":23,"time":2},{"index":24,"time":2},{"index":25,"time":2},{"index":26,"time":2},{"index":27,"time":2},{"index":28,"time":2},{"index":29,"time":2},{"index":30,"time":2},{"index":31,"time":2}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/bacteriaVector.png b/src/main/resources/assets/genetics/textures/blocks/liquids/bacteriaVector.png new file mode 100644 index 00000000..e064168a Binary files /dev/null and b/src/main/resources/assets/genetics/textures/blocks/liquids/bacteriaVector.png differ diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/bacteriaVector.png.mcmeta b/src/main/resources/assets/genetics/textures/blocks/liquids/bacteriaVector.png.mcmeta new file mode 100644 index 00000000..0c36dcaa --- /dev/null +++ b/src/main/resources/assets/genetics/textures/blocks/liquids/bacteriaVector.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":32,"frametime":1,"frames":[{"index":0,"time":2},{"index":1,"time":2},{"index":2,"time":2},{"index":3,"time":2},{"index":4,"time":2},{"index":5,"time":2},{"index":6,"time":2},{"index":7,"time":2},{"index":8,"time":2},{"index":9,"time":2},{"index":10,"time":2},{"index":11,"time":2},{"index":12,"time":2},{"index":13,"time":2},{"index":14,"time":2},{"index":15,"time":2},{"index":16,"time":2},{"index":17,"time":2},{"index":18,"time":2},{"index":19,"time":2},{"index":20,"time":2},{"index":21,"time":2},{"index":22,"time":2},{"index":23,"time":2},{"index":24,"time":2},{"index":25,"time":2},{"index":26,"time":2},{"index":27,"time":2},{"index":28,"time":2},{"index":29,"time":2},{"index":30,"time":2},{"index":31,"time":2}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/dna.impure.png b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.impure.png new file mode 100644 index 00000000..76e2cec8 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.impure.png differ diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/dna.impure.png.mcmeta b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.impure.png.mcmeta new file mode 100644 index 00000000..d54a6c5e --- /dev/null +++ b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.impure.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":32,"frametime":1,"frames":[{"index":0,"time":5},{"index":1,"time":3},{"index":2,"time":5},{"index":3,"time":3},{"index":4,"time":5},{"index":5,"time":3},{"index":6,"time":5},{"index":7,"time":3},{"index":8,"time":5},{"index":9,"time":3},{"index":10,"time":5},{"index":11,"time":3},{"index":12,"time":5},{"index":13,"time":3},{"index":14,"time":5},{"index":15,"time":3},{"index":16,"time":5},{"index":17,"time":3},{"index":18,"time":5},{"index":19,"time":3},{"index":20,"time":5},{"index":21,"time":3},{"index":22,"time":5},{"index":23,"time":3},{"index":24,"time":5},{"index":25,"time":3},{"index":26,"time":5},{"index":27,"time":3},{"index":28,"time":5},{"index":29,"time":3},{"index":30,"time":5},{"index":31,"time":3}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/dna.impure.txt b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.impure.txt new file mode 100644 index 00000000..acb88088 --- /dev/null +++ b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.impure.txt @@ -0,0 +1,32 @@ +0*5 +1*3 +2*5 +3*3 +4*5 +5*3 +6*5 +7*3 +8*5 +9*3 +10*5 +11*3 +12*5 +13*3 +14*5 +15*3 +16*5 +17*3 +18*5 +19*3 +20*5 +21*3 +22*5 +23*3 +24*5 +25*3 +26*5 +27*3 +28*5 +29*3 +30*5 +31*3 diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/dna.pure.png b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.pure.png new file mode 100644 index 00000000..7ac55f6c Binary files /dev/null and b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.pure.png differ diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/dna.pure.png.mcmeta b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.pure.png.mcmeta new file mode 100644 index 00000000..d54a6c5e --- /dev/null +++ b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.pure.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":32,"frametime":1,"frames":[{"index":0,"time":5},{"index":1,"time":3},{"index":2,"time":5},{"index":3,"time":3},{"index":4,"time":5},{"index":5,"time":3},{"index":6,"time":5},{"index":7,"time":3},{"index":8,"time":5},{"index":9,"time":3},{"index":10,"time":5},{"index":11,"time":3},{"index":12,"time":5},{"index":13,"time":3},{"index":14,"time":5},{"index":15,"time":3},{"index":16,"time":5},{"index":17,"time":3},{"index":18,"time":5},{"index":19,"time":3},{"index":20,"time":5},{"index":21,"time":3},{"index":22,"time":5},{"index":23,"time":3},{"index":24,"time":5},{"index":25,"time":3},{"index":26,"time":5},{"index":27,"time":3},{"index":28,"time":5},{"index":29,"time":3},{"index":30,"time":5},{"index":31,"time":3}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/dna.pure.txt b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.pure.txt new file mode 100644 index 00000000..acb88088 --- /dev/null +++ b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.pure.txt @@ -0,0 +1,32 @@ +0*5 +1*3 +2*5 +3*3 +4*5 +5*3 +6*5 +7*3 +8*5 +9*3 +10*5 +11*3 +12*5 +13*3 +14*5 +15*3 +16*5 +17*3 +18*5 +19*3 +20*5 +21*3 +22*5 +23*3 +24*5 +25*3 +26*5 +27*3 +28*5 +29*3 +30*5 +31*3 diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/dna.raw.png b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.raw.png new file mode 100644 index 00000000..7a563d6e Binary files /dev/null and b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.raw.png differ diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/dna.raw.png.mcmeta b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.raw.png.mcmeta new file mode 100644 index 00000000..d54a6c5e --- /dev/null +++ b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.raw.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":32,"frametime":1,"frames":[{"index":0,"time":5},{"index":1,"time":3},{"index":2,"time":5},{"index":3,"time":3},{"index":4,"time":5},{"index":5,"time":3},{"index":6,"time":5},{"index":7,"time":3},{"index":8,"time":5},{"index":9,"time":3},{"index":10,"time":5},{"index":11,"time":3},{"index":12,"time":5},{"index":13,"time":3},{"index":14,"time":5},{"index":15,"time":3},{"index":16,"time":5},{"index":17,"time":3},{"index":18,"time":5},{"index":19,"time":3},{"index":20,"time":5},{"index":21,"time":3},{"index":22,"time":5},{"index":23,"time":3},{"index":24,"time":5},{"index":25,"time":3},{"index":26,"time":5},{"index":27,"time":3},{"index":28,"time":5},{"index":29,"time":3},{"index":30,"time":5},{"index":31,"time":3}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/dna.raw.txt b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.raw.txt new file mode 100644 index 00000000..acb88088 --- /dev/null +++ b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.raw.txt @@ -0,0 +1,32 @@ +0*5 +1*3 +2*5 +3*3 +4*5 +5*3 +6*5 +7*3 +8*5 +9*3 +10*5 +11*3 +12*5 +13*3 +14*5 +15*3 +16*5 +17*3 +18*5 +19*3 +20*5 +21*3 +22*5 +23*3 +24*5 +25*3 +26*5 +27*3 +28*5 +29*3 +30*5 +31*3 diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/dna.refined.png b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.refined.png new file mode 100644 index 00000000..b8f8b831 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.refined.png differ diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/dna.refined.png.mcmeta b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.refined.png.mcmeta new file mode 100644 index 00000000..d54a6c5e --- /dev/null +++ b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.refined.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":32,"frametime":1,"frames":[{"index":0,"time":5},{"index":1,"time":3},{"index":2,"time":5},{"index":3,"time":3},{"index":4,"time":5},{"index":5,"time":3},{"index":6,"time":5},{"index":7,"time":3},{"index":8,"time":5},{"index":9,"time":3},{"index":10,"time":5},{"index":11,"time":3},{"index":12,"time":5},{"index":13,"time":3},{"index":14,"time":5},{"index":15,"time":3},{"index":16,"time":5},{"index":17,"time":3},{"index":18,"time":5},{"index":19,"time":3},{"index":20,"time":5},{"index":21,"time":3},{"index":22,"time":5},{"index":23,"time":3},{"index":24,"time":5},{"index":25,"time":3},{"index":26,"time":5},{"index":27,"time":3},{"index":28,"time":5},{"index":29,"time":3},{"index":30,"time":5},{"index":31,"time":3}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/dna.refined.txt b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.refined.txt new file mode 100644 index 00000000..acb88088 --- /dev/null +++ b/src/main/resources/assets/genetics/textures/blocks/liquids/dna.refined.txt @@ -0,0 +1,32 @@ +0*5 +1*3 +2*5 +3*3 +4*5 +5*3 +6*5 +7*3 +8*5 +9*3 +10*5 +11*3 +12*5 +13*3 +14*5 +15*3 +16*5 +17*3 +18*5 +19*3 +20*5 +21*3 +22*5 +23*3 +24*5 +25*3 +26*5 +27*3 +28*5 +29*3 +30*5 +31*3 diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/gm.bee.png b/src/main/resources/assets/genetics/textures/blocks/liquids/gm.bee.png new file mode 100644 index 00000000..7a563d6e Binary files /dev/null and b/src/main/resources/assets/genetics/textures/blocks/liquids/gm.bee.png differ diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/growthMedium.png b/src/main/resources/assets/genetics/textures/blocks/liquids/growthMedium.png new file mode 100644 index 00000000..9a9fd21a Binary files /dev/null and b/src/main/resources/assets/genetics/textures/blocks/liquids/growthMedium.png differ diff --git a/src/main/resources/assets/genetics/textures/blocks/liquids/growthMedium.png.mcmeta b/src/main/resources/assets/genetics/textures/blocks/liquids/growthMedium.png.mcmeta new file mode 100644 index 00000000..0c36dcaa --- /dev/null +++ b/src/main/resources/assets/genetics/textures/blocks/liquids/growthMedium.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":32,"frametime":1,"frames":[{"index":0,"time":2},{"index":1,"time":2},{"index":2,"time":2},{"index":3,"time":2},{"index":4,"time":2},{"index":5,"time":2},{"index":6,"time":2},{"index":7,"time":2},{"index":8,"time":2},{"index":9,"time":2},{"index":10,"time":2},{"index":11,"time":2},{"index":12,"time":2},{"index":13,"time":2},{"index":14,"time":2},{"index":15,"time":2},{"index":16,"time":2},{"index":17,"time":2},{"index":18,"time":2},{"index":19,"time":2},{"index":20,"time":2},{"index":21,"time":2},{"index":22,"time":2},{"index":23,"time":2},{"index":24,"time":2},{"index":25,"time":2},{"index":26,"time":2},{"index":27,"time":2},{"index":28,"time":2},{"index":29,"time":2},{"index":30,"time":2},{"index":31,"time":2}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/gui/process.png b/src/main/resources/assets/genetics/textures/gui/process.png new file mode 100644 index 00000000..7cb84269 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/gui/process.png differ diff --git a/src/main/resources/assets/genetics/textures/gui/process2.png b/src/main/resources/assets/genetics/textures/gui/process2.png new file mode 100644 index 00000000..fb6eae99 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/gui/process2.png differ diff --git a/src/main/resources/assets/genetics/textures/items/analyst.png b/src/main/resources/assets/genetics/textures/items/analyst.png new file mode 100644 index 00000000..813b2b8d Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/analyst.png differ diff --git a/src/main/resources/assets/genetics/textures/items/bacteria.png b/src/main/resources/assets/genetics/textures/items/bacteria.png new file mode 100644 index 00000000..e7fbf372 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/bacteria.png differ diff --git a/src/main/resources/assets/genetics/textures/items/bacteria.png.mcmeta b/src/main/resources/assets/genetics/textures/items/bacteria.png.mcmeta new file mode 100644 index 00000000..2b4bbfc7 --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/bacteria.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":5,"frametime":1,"frames":[{"index":0,"time":5},{"index":1,"time":3},{"index":2,"time":5},{"index":3,"time":3},{"index":4,"time":5},{"index":2,"time":3},{"index":0,"time":5},{"index":4,"time":3},{"index":1,"time":5},{"index":3,"time":3}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/bacteria.txt b/src/main/resources/assets/genetics/textures/items/bacteria.txt new file mode 100644 index 00000000..c532effc --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/bacteria.txt @@ -0,0 +1,10 @@ +0*5 +1*3 +2*5 +3*3 +4*5 +2*3 +0*5 +4*3 +1*5 +3*3 \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/bacteriaBee.png b/src/main/resources/assets/genetics/textures/items/bacteriaBee.png new file mode 100644 index 00000000..2bc288f9 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/bacteriaBee.png differ diff --git a/src/main/resources/assets/genetics/textures/items/bacteriaBee.png.mcmeta b/src/main/resources/assets/genetics/textures/items/bacteriaBee.png.mcmeta new file mode 100644 index 00000000..2b4bbfc7 --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/bacteriaBee.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":5,"frametime":1,"frames":[{"index":0,"time":5},{"index":1,"time":3},{"index":2,"time":5},{"index":3,"time":3},{"index":4,"time":5},{"index":2,"time":3},{"index":0,"time":5},{"index":4,"time":3},{"index":1,"time":5},{"index":3,"time":3}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/bacteriaBee.txt b/src/main/resources/assets/genetics/textures/items/bacteriaBee.txt new file mode 100644 index 00000000..c532effc --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/bacteriaBee.txt @@ -0,0 +1,10 @@ +0*5 +1*3 +2*5 +3*3 +4*5 +2*3 +0*5 +4*3 +1*5 +3*3 \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/bacteriaButterfly.png b/src/main/resources/assets/genetics/textures/items/bacteriaButterfly.png new file mode 100644 index 00000000..f6c3eb9c Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/bacteriaButterfly.png differ diff --git a/src/main/resources/assets/genetics/textures/items/bacteriaButterfly.png.mcmeta b/src/main/resources/assets/genetics/textures/items/bacteriaButterfly.png.mcmeta new file mode 100644 index 00000000..2b4bbfc7 --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/bacteriaButterfly.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":5,"frametime":1,"frames":[{"index":0,"time":5},{"index":1,"time":3},{"index":2,"time":5},{"index":3,"time":3},{"index":4,"time":5},{"index":2,"time":3},{"index":0,"time":5},{"index":4,"time":3},{"index":1,"time":5},{"index":3,"time":3}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/bacteriaButterfly.txt b/src/main/resources/assets/genetics/textures/items/bacteriaButterfly.txt new file mode 100644 index 00000000..c532effc --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/bacteriaButterfly.txt @@ -0,0 +1,10 @@ +0*5 +1*3 +2*5 +3*3 +4*5 +2*3 +0*5 +4*3 +1*5 +3*3 \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/bacteriaDNA.png b/src/main/resources/assets/genetics/textures/items/bacteriaDNA.png new file mode 100644 index 00000000..54252b09 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/bacteriaDNA.png differ diff --git a/src/main/resources/assets/genetics/textures/items/bacteriaDNA.png.mcmeta b/src/main/resources/assets/genetics/textures/items/bacteriaDNA.png.mcmeta new file mode 100644 index 00000000..2b4bbfc7 --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/bacteriaDNA.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":5,"frametime":1,"frames":[{"index":0,"time":5},{"index":1,"time":3},{"index":2,"time":5},{"index":3,"time":3},{"index":4,"time":5},{"index":2,"time":3},{"index":0,"time":5},{"index":4,"time":3},{"index":1,"time":5},{"index":3,"time":3}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/bacteriaDNA.txt b/src/main/resources/assets/genetics/textures/items/bacteriaDNA.txt new file mode 100644 index 00000000..c532effc --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/bacteriaDNA.txt @@ -0,0 +1,10 @@ +0*5 +1*3 +2*5 +3*3 +4*5 +2*3 +0*5 +4*3 +1*5 +3*3 \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/bacteriaEnzyme.png b/src/main/resources/assets/genetics/textures/items/bacteriaEnzyme.png new file mode 100644 index 00000000..df7e1b81 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/bacteriaEnzyme.png differ diff --git a/src/main/resources/assets/genetics/textures/items/bacteriaEnzyme.png.mcmeta b/src/main/resources/assets/genetics/textures/items/bacteriaEnzyme.png.mcmeta new file mode 100644 index 00000000..2b4bbfc7 --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/bacteriaEnzyme.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":5,"frametime":1,"frames":[{"index":0,"time":5},{"index":1,"time":3},{"index":2,"time":5},{"index":3,"time":3},{"index":4,"time":5},{"index":2,"time":3},{"index":0,"time":5},{"index":4,"time":3},{"index":1,"time":5},{"index":3,"time":3}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/bacteriaEnzyme.txt b/src/main/resources/assets/genetics/textures/items/bacteriaEnzyme.txt new file mode 100644 index 00000000..c532effc --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/bacteriaEnzyme.txt @@ -0,0 +1,10 @@ +0*5 +1*3 +2*5 +3*3 +4*5 +2*3 +0*5 +4*3 +1*5 +3*3 \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/bacteriaFermenter.png b/src/main/resources/assets/genetics/textures/items/bacteriaFermenter.png new file mode 100644 index 00000000..23905fed Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/bacteriaFermenter.png differ diff --git a/src/main/resources/assets/genetics/textures/items/bacteriaFermenter.png.mcmeta b/src/main/resources/assets/genetics/textures/items/bacteriaFermenter.png.mcmeta new file mode 100644 index 00000000..2b4bbfc7 --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/bacteriaFermenter.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":5,"frametime":1,"frames":[{"index":0,"time":5},{"index":1,"time":3},{"index":2,"time":5},{"index":3,"time":3},{"index":4,"time":5},{"index":2,"time":3},{"index":0,"time":5},{"index":4,"time":3},{"index":1,"time":5},{"index":3,"time":3}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/bacteriaFermenter.txt b/src/main/resources/assets/genetics/textures/items/bacteriaFermenter.txt new file mode 100644 index 00000000..c532effc --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/bacteriaFermenter.txt @@ -0,0 +1,10 @@ +0*5 +1*3 +2*5 +3*3 +4*5 +2*3 +0*5 +4*3 +1*5 +3*3 \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/bacteriaTree.png b/src/main/resources/assets/genetics/textures/items/bacteriaTree.png new file mode 100644 index 00000000..1788d380 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/bacteriaTree.png differ diff --git a/src/main/resources/assets/genetics/textures/items/bacteriaTree.png.mcmeta b/src/main/resources/assets/genetics/textures/items/bacteriaTree.png.mcmeta new file mode 100644 index 00000000..2b4bbfc7 --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/bacteriaTree.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":5,"frametime":1,"frames":[{"index":0,"time":5},{"index":1,"time":3},{"index":2,"time":5},{"index":3,"time":3},{"index":4,"time":5},{"index":2,"time":3},{"index":0,"time":5},{"index":4,"time":3},{"index":1,"time":5},{"index":3,"time":3}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/bacteriaTree.txt b/src/main/resources/assets/genetics/textures/items/bacteriaTree.txt new file mode 100644 index 00000000..c532effc --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/bacteriaTree.txt @@ -0,0 +1,10 @@ +0*5 +1*3 +2*5 +3*3 +4*5 +2*3 +0*5 +4*3 +1*5 +3*3 \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/casingCircuit.png b/src/main/resources/assets/genetics/textures/items/casingCircuit.png new file mode 100644 index 00000000..74baf486 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/casingCircuit.png differ diff --git a/src/main/resources/assets/genetics/textures/items/casingCircuit.png.mcmeta b/src/main/resources/assets/genetics/textures/items/casingCircuit.png.mcmeta new file mode 100644 index 00000000..67f3bce0 --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/casingCircuit.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":2,"frametime":1,"frames":[{"index":0,"time":5},{"index":1,"time":5}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/casingEtched.png b/src/main/resources/assets/genetics/textures/items/casingEtched.png new file mode 100644 index 00000000..cbc433fd Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/casingEtched.png differ diff --git a/src/main/resources/assets/genetics/textures/items/casingIron.png b/src/main/resources/assets/genetics/textures/items/casingIron.png new file mode 100644 index 00000000..7cc242c6 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/casingIron.png differ diff --git a/src/main/resources/assets/genetics/textures/items/cylinderEmpty.png b/src/main/resources/assets/genetics/textures/items/cylinderEmpty.png new file mode 100644 index 00000000..a986220e Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/cylinderEmpty.png differ diff --git a/src/main/resources/assets/genetics/textures/items/dish.png b/src/main/resources/assets/genetics/textures/items/dish.png new file mode 100644 index 00000000..0e40eda6 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/dish.png differ diff --git a/src/main/resources/assets/genetics/textures/items/dna.0.png b/src/main/resources/assets/genetics/textures/items/dna.0.png new file mode 100644 index 00000000..180c4baf Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/dna.0.png differ diff --git a/src/main/resources/assets/genetics/textures/items/dna.1.png b/src/main/resources/assets/genetics/textures/items/dna.1.png new file mode 100644 index 00000000..b07164e0 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/dna.1.png differ diff --git a/src/main/resources/assets/genetics/textures/items/dna.png b/src/main/resources/assets/genetics/textures/items/dna.png new file mode 100644 index 00000000..9920d7e0 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/dna.png differ diff --git a/src/main/resources/assets/genetics/textures/items/dnaDye.png b/src/main/resources/assets/genetics/textures/items/dnaDye.png new file mode 100644 index 00000000..78e04832 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/dnaDye.png differ diff --git a/src/main/resources/assets/genetics/textures/items/dyeFluor.png b/src/main/resources/assets/genetics/textures/items/dyeFluor.png new file mode 100644 index 00000000..af76b0ee Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/dyeFluor.png differ diff --git a/src/main/resources/assets/genetics/textures/items/dyeFluor.png.mcmeta b/src/main/resources/assets/genetics/textures/items/dyeFluor.png.mcmeta new file mode 100644 index 00000000..be097f82 --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/dyeFluor.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":5,"frametime":1,"frames":[{"index":0,"time":15},{"index":1,"time":3},{"index":2,"time":3},{"index":3,"time":3},{"index":4,"time":3},{"index":3,"time":3},{"index":2,"time":3},{"index":1,"time":3}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/enzyme.png b/src/main/resources/assets/genetics/textures/items/enzyme.png new file mode 100644 index 00000000..b4f7e08f Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/enzyme.png differ diff --git a/src/main/resources/assets/genetics/textures/items/fieldGlass.png b/src/main/resources/assets/genetics/textures/items/fieldGlass.png new file mode 100644 index 00000000..c945c2c7 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/fieldGlass.png differ diff --git a/src/main/resources/assets/genetics/textures/items/fieldKit.png b/src/main/resources/assets/genetics/textures/items/fieldKit.png new file mode 100644 index 00000000..34a7d62d Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/fieldKit.png differ diff --git a/src/main/resources/assets/genetics/textures/items/gearGoldEtched.png b/src/main/resources/assets/genetics/textures/items/gearGoldEtched.png new file mode 100644 index 00000000..a9eca6a5 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/gearGoldEtched.png differ diff --git a/src/main/resources/assets/genetics/textures/items/gearIronEtched.png b/src/main/resources/assets/genetics/textures/items/gearIronEtched.png new file mode 100644 index 00000000..30d75873 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/gearIronEtched.png differ diff --git a/src/main/resources/assets/genetics/textures/items/geneDatabase.png b/src/main/resources/assets/genetics/textures/items/geneDatabase.png new file mode 100644 index 00000000..eff1a111 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/geneDatabase.png differ diff --git a/src/main/resources/assets/genetics/textures/items/genomeEmpty.png b/src/main/resources/assets/genetics/textures/items/genomeEmpty.png new file mode 100644 index 00000000..9c7db1a9 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/genomeEmpty.png differ diff --git a/src/main/resources/assets/genetics/textures/items/growthMedium.png b/src/main/resources/assets/genetics/textures/items/growthMedium.png new file mode 100644 index 00000000..927dc6b6 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/growthMedium.png differ diff --git a/src/main/resources/assets/genetics/textures/items/integratedCPU.png b/src/main/resources/assets/genetics/textures/items/integratedCPU.png new file mode 100644 index 00000000..ffa5c780 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/integratedCPU.png differ diff --git a/src/main/resources/assets/genetics/textures/items/integratedCPU.png.mcmeta b/src/main/resources/assets/genetics/textures/items/integratedCPU.png.mcmeta new file mode 100644 index 00000000..1c6a8f9d --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/integratedCPU.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":9,"frametime":1,"frames":[{"index":0,"time":5},{"index":1,"time":5},{"index":2,"time":5},{"index":3,"time":5},{"index":4,"time":5},{"index":5,"time":5},{"index":6,"time":5},{"index":7,"time":5},{"index":8,"time":5},{"index":9,"time":5},{"index":4,"time":5},{"index":5,"time":5},{"index":0,"time":5},{"index":6,"time":5},{"index":1,"time":5},{"index":9,"time":5},{"index":8,"time":5},{"index":4,"time":5},{"index":6,"time":5},{"index":2,"time":5},{"index":9,"time":5},{"index":7,"time":5},{"index":4,"time":5},{"index":2,"time":5},{"index":5,"time":5},{"index":4,"time":5},{"index":9,"time":5},{"index":3,"time":5},{"index":7,"time":5},{"index":4,"time":5}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/integratedCircuit.png b/src/main/resources/assets/genetics/textures/items/integratedCircuit.png new file mode 100644 index 00000000..10fa8b1a Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/integratedCircuit.png differ diff --git a/src/main/resources/assets/genetics/textures/items/integratedCircuit.png.mcmeta b/src/main/resources/assets/genetics/textures/items/integratedCircuit.png.mcmeta new file mode 100644 index 00000000..67f3bce0 --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/integratedCircuit.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":2,"frametime":1,"frames":[{"index":0,"time":5},{"index":1,"time":5}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/machines/genome.cap.png b/src/main/resources/assets/genetics/textures/items/machines/genome.cap.png new file mode 100644 index 00000000..fc0d442f Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/machines/genome.cap.png differ diff --git a/src/main/resources/assets/genetics/textures/items/machines/genome.dna.png b/src/main/resources/assets/genetics/textures/items/machines/genome.dna.png new file mode 100644 index 00000000..0431ee4b Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/machines/genome.dna.png differ diff --git a/src/main/resources/assets/genetics/textures/items/machines/genome.dna.png.mcmeta b/src/main/resources/assets/genetics/textures/items/machines/genome.dna.png.mcmeta new file mode 100644 index 00000000..dff3f78a --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/machines/genome.dna.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":5,"frametime":1,"frames":[{"index":0,"time":5},{"index":1,"time":5},{"index":2,"time":5},{"index":3,"time":5},{"index":4,"time":5}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/machines/genome.edges.png b/src/main/resources/assets/genetics/textures/items/machines/genome.edges.png new file mode 100644 index 00000000..6606fe73 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/machines/genome.edges.png differ diff --git a/src/main/resources/assets/genetics/textures/items/machines/genome.empty.png b/src/main/resources/assets/genetics/textures/items/machines/genome.empty.png new file mode 100644 index 00000000..9df645c9 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/machines/genome.empty.png differ diff --git a/src/main/resources/assets/genetics/textures/items/machines/genome.glass.png b/src/main/resources/assets/genetics/textures/items/machines/genome.glass.png new file mode 100644 index 00000000..4b762db9 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/machines/genome.glass.png differ diff --git a/src/main/resources/assets/genetics/textures/items/machines/serum.cap.png b/src/main/resources/assets/genetics/textures/items/machines/serum.cap.png new file mode 100644 index 00000000..5ef394b3 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/machines/serum.cap.png differ diff --git a/src/main/resources/assets/genetics/textures/items/machines/serum.dna.png b/src/main/resources/assets/genetics/textures/items/machines/serum.dna.png new file mode 100644 index 00000000..1fe638f8 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/machines/serum.dna.png differ diff --git a/src/main/resources/assets/genetics/textures/items/machines/serum.dna.png.mcmeta b/src/main/resources/assets/genetics/textures/items/machines/serum.dna.png.mcmeta new file mode 100644 index 00000000..dff3f78a --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/machines/serum.dna.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":5,"frametime":1,"frames":[{"index":0,"time":5},{"index":1,"time":5},{"index":2,"time":5},{"index":3,"time":5},{"index":4,"time":5}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/machines/serum.dna.txt b/src/main/resources/assets/genetics/textures/items/machines/serum.dna.txt new file mode 100644 index 00000000..d5f71f49 --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/machines/serum.dna.txt @@ -0,0 +1,5 @@ +0*5 +1*5 +2*5 +3*5 +4*5 \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/machines/serum.edges.png b/src/main/resources/assets/genetics/textures/items/machines/serum.edges.png new file mode 100644 index 00000000..9c5908d0 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/machines/serum.edges.png differ diff --git a/src/main/resources/assets/genetics/textures/items/machines/serum.empty.png b/src/main/resources/assets/genetics/textures/items/machines/serum.empty.png new file mode 100644 index 00000000..54fa8ea0 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/machines/serum.empty.png differ diff --git a/src/main/resources/assets/genetics/textures/items/machines/serum.glass.png b/src/main/resources/assets/genetics/textures/items/machines/serum.glass.png new file mode 100644 index 00000000..aff64bfd Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/machines/serum.glass.png differ diff --git a/src/main/resources/assets/genetics/textures/items/masterGeneDatabase.png b/src/main/resources/assets/genetics/textures/items/masterGeneDatabase.png new file mode 100644 index 00000000..397bd10f Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/masterGeneDatabase.png differ diff --git a/src/main/resources/assets/genetics/textures/items/masterRegistry.png b/src/main/resources/assets/genetics/textures/items/masterRegistry.png new file mode 100644 index 00000000..18a0a203 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/masterRegistry.png differ diff --git a/src/main/resources/assets/genetics/textures/items/panelEtched.png b/src/main/resources/assets/genetics/textures/items/panelEtched.png new file mode 100644 index 00000000..5e83b9d4 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/panelEtched.png differ diff --git a/src/main/resources/assets/genetics/textures/items/registry.png b/src/main/resources/assets/genetics/textures/items/registry.png new file mode 100644 index 00000000..4a353c5b Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/registry.png differ diff --git a/src/main/resources/assets/genetics/textures/items/sequencer.png b/src/main/resources/assets/genetics/textures/items/sequencer.png new file mode 100644 index 00000000..2b330c16 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/sequencer.png differ diff --git a/src/main/resources/assets/genetics/textures/items/sequencer.png.mcmeta b/src/main/resources/assets/genetics/textures/items/sequencer.png.mcmeta new file mode 100644 index 00000000..2b4bbfc7 --- /dev/null +++ b/src/main/resources/assets/genetics/textures/items/sequencer.png.mcmeta @@ -0,0 +1 @@ +{"animation":{"width":1,"height":5,"frametime":1,"frames":[{"index":0,"time":5},{"index":1,"time":3},{"index":2,"time":5},{"index":3,"time":3},{"index":4,"time":5},{"index":2,"time":3},{"index":0,"time":5},{"index":4,"time":3},{"index":1,"time":5},{"index":3,"time":3}]}} \ No newline at end of file diff --git a/src/main/resources/assets/genetics/textures/items/sequencerEmpty.png b/src/main/resources/assets/genetics/textures/items/sequencerEmpty.png new file mode 100644 index 00000000..4c3a6070 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/sequencerEmpty.png differ diff --git a/src/main/resources/assets/genetics/textures/items/serumEmpty.png b/src/main/resources/assets/genetics/textures/items/serumEmpty.png new file mode 100644 index 00000000..a64ba769 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/serumEmpty.png differ diff --git a/src/main/resources/assets/genetics/textures/items/serumSpray.png b/src/main/resources/assets/genetics/textures/items/serumSpray.png new file mode 100644 index 00000000..9e47ec05 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/serumSpray.png differ diff --git a/src/main/resources/assets/genetics/textures/items/sterilisedDish.png b/src/main/resources/assets/genetics/textures/items/sterilisedDish.png new file mode 100644 index 00000000..61f4a41b Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/sterilisedDish.png differ diff --git a/src/main/resources/assets/genetics/textures/items/validator/bacteria.0.png b/src/main/resources/assets/genetics/textures/items/validator/bacteria.0.png new file mode 100644 index 00000000..93edf81e Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/validator/bacteria.0.png differ diff --git a/src/main/resources/assets/genetics/textures/items/validator/bacteria.1.png b/src/main/resources/assets/genetics/textures/items/validator/bacteria.1.png new file mode 100644 index 00000000..50e9c4f3 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/validator/bacteria.1.png differ diff --git a/src/main/resources/assets/genetics/textures/items/validator/dye.0.png b/src/main/resources/assets/genetics/textures/items/validator/dye.0.png new file mode 100644 index 00000000..f5de4266 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/validator/dye.0.png differ diff --git a/src/main/resources/assets/genetics/textures/items/validator/dye.1.png b/src/main/resources/assets/genetics/textures/items/validator/dye.1.png new file mode 100644 index 00000000..342dac81 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/validator/dye.1.png differ diff --git a/src/main/resources/assets/genetics/textures/items/validator/enzyme.0.png b/src/main/resources/assets/genetics/textures/items/validator/enzyme.0.png new file mode 100644 index 00000000..777c39fb Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/validator/enzyme.0.png differ diff --git a/src/main/resources/assets/genetics/textures/items/validator/enzyme.1.png b/src/main/resources/assets/genetics/textures/items/validator/enzyme.1.png new file mode 100644 index 00000000..bfd18f92 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/validator/enzyme.1.png differ diff --git a/src/main/resources/assets/genetics/textures/items/validator/individual.0.png b/src/main/resources/assets/genetics/textures/items/validator/individual.0.png new file mode 100644 index 00000000..da0d80a4 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/validator/individual.0.png differ diff --git a/src/main/resources/assets/genetics/textures/items/validator/individual.1.png b/src/main/resources/assets/genetics/textures/items/validator/individual.1.png new file mode 100644 index 00000000..7e05629e Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/validator/individual.1.png differ diff --git a/src/main/resources/assets/genetics/textures/items/validator/nugget.0.png b/src/main/resources/assets/genetics/textures/items/validator/nugget.0.png new file mode 100644 index 00000000..dc35536e Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/validator/nugget.0.png differ diff --git a/src/main/resources/assets/genetics/textures/items/validator/nugget.1.png b/src/main/resources/assets/genetics/textures/items/validator/nugget.1.png new file mode 100644 index 00000000..1568df5d Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/validator/nugget.1.png differ diff --git a/src/main/resources/assets/genetics/textures/items/validator/sequencer.0.png b/src/main/resources/assets/genetics/textures/items/validator/sequencer.0.png new file mode 100644 index 00000000..c4bd4d02 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/validator/sequencer.0.png differ diff --git a/src/main/resources/assets/genetics/textures/items/validator/sequencer.1.png b/src/main/resources/assets/genetics/textures/items/validator/sequencer.1.png new file mode 100644 index 00000000..d83562a8 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/validator/sequencer.1.png differ diff --git a/src/main/resources/assets/genetics/textures/items/validator/serum.0.png b/src/main/resources/assets/genetics/textures/items/validator/serum.0.png new file mode 100644 index 00000000..86b18c07 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/validator/serum.0.png differ diff --git a/src/main/resources/assets/genetics/textures/items/validator/serum.1.png b/src/main/resources/assets/genetics/textures/items/validator/serum.1.png new file mode 100644 index 00000000..1a0a63f3 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/items/validator/serum.1.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/Acclimatiser.png b/src/main/resources/assets/genetics/textures/tile/Acclimatiser.png new file mode 100644 index 00000000..925ea00c Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/Acclimatiser.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/AdvGeneticMachine.png b/src/main/resources/assets/genetics/textures/tile/AdvGeneticMachine.png new file mode 100644 index 00000000..3e65a962 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/AdvGeneticMachine.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/Analyser.png b/src/main/resources/assets/genetics/textures/tile/Analyser.png new file mode 100644 index 00000000..f90ae978 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/Analyser.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/ApiaristDatabase.png b/src/main/resources/assets/genetics/textures/tile/ApiaristDatabase.png new file mode 100644 index 00000000..afdae792 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/ApiaristDatabase.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/ApiaristIndexer.png b/src/main/resources/assets/genetics/textures/tile/ApiaristIndexer.png new file mode 100644 index 00000000..b8aa92ef Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/ApiaristIndexer.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/ArboristDatabase.png b/src/main/resources/assets/genetics/textures/tile/ArboristDatabase.png new file mode 100644 index 00000000..2e52a6e9 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/ArboristDatabase.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/ArboristIndexer.png b/src/main/resources/assets/genetics/textures/tile/ArboristIndexer.png new file mode 100644 index 00000000..edb14557 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/ArboristIndexer.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/Assembler.png b/src/main/resources/assets/genetics/textures/tile/Assembler.png new file mode 100644 index 00000000..9d3a4808 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/Assembler.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/Genepool.png b/src/main/resources/assets/genetics/textures/tile/Genepool.png new file mode 100644 index 00000000..9e26c50c Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/Genepool.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/GeneticMachine.png b/src/main/resources/assets/genetics/textures/tile/GeneticMachine.png new file mode 100644 index 00000000..f17d8fa0 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/GeneticMachine.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/Incubator.png b/src/main/resources/assets/genetics/textures/tile/Incubator.png new file mode 100644 index 00000000..09441266 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/Incubator.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/Inoculator.png b/src/main/resources/assets/genetics/textures/tile/Inoculator.png new file mode 100644 index 00000000..6101091f Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/Inoculator.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/Isolator.png b/src/main/resources/assets/genetics/textures/tile/Isolator.png new file mode 100644 index 00000000..e2e5c4bb Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/Isolator.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/IsolatorProgress.png b/src/main/resources/assets/genetics/textures/tile/IsolatorProgress.png new file mode 100644 index 00000000..9bbfa88c Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/IsolatorProgress.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/Items.png b/src/main/resources/assets/genetics/textures/tile/Items.png new file mode 100644 index 00000000..6792677f Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/Items.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/LabMachine.png b/src/main/resources/assets/genetics/textures/tile/LabMachine.png new file mode 100644 index 00000000..04017c96 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/LabMachine.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/LabMachineBase.png b/src/main/resources/assets/genetics/textures/tile/LabMachineBase.png new file mode 100644 index 00000000..ee1f7a82 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/LabMachineBase.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/Machine.png b/src/main/resources/assets/genetics/textures/tile/Machine.png new file mode 100644 index 00000000..4ce15dc2 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/Machine.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/MachineGlow.png b/src/main/resources/assets/genetics/textures/tile/MachineGlow.png new file mode 100644 index 00000000..a53fe684 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/MachineGlow.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/MasterGeneticMachine.png b/src/main/resources/assets/genetics/textures/tile/MasterGeneticMachine.png new file mode 100644 index 00000000..06a0bedf Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/MasterGeneticMachine.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/Polymeriser.png b/src/main/resources/assets/genetics/textures/tile/Polymeriser.png new file mode 100644 index 00000000..addf184c Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/Polymeriser.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/Purifier.png b/src/main/resources/assets/genetics/textures/tile/Purifier.png new file mode 100644 index 00000000..fa015557 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/Purifier.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/Sequencer.png b/src/main/resources/assets/genetics/textures/tile/Sequencer.png new file mode 100644 index 00000000..4e4db6ef Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/Sequencer.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/Splicer.png b/src/main/resources/assets/genetics/textures/tile/Splicer.png new file mode 100644 index 00000000..86578c2a Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/Splicer.png differ diff --git a/src/main/resources/assets/genetics/textures/tile/Synthesizer.png b/src/main/resources/assets/genetics/textures/tile/Synthesizer.png new file mode 100644 index 00000000..d83bf911 Binary files /dev/null and b/src/main/resources/assets/genetics/textures/tile/Synthesizer.png differ diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info new file mode 100644 index 00000000..cfdaca2f --- /dev/null +++ b/src/main/resources/mcmod.info @@ -0,0 +1,75 @@ +[ + { + "modid": "BinnieCore", + "name": "Binnie Core", + "description": "Base mod for Binnie's Mods, with lots of common code.", + "version": "2.0-pre14", + "mcversion": "1.7.10", + "url": "http://minecraft.curseforge.com/mc-mods/223525-binnies-mods", + "updateUrl": "", + "authorList": [ "Binnie" ], + "credits": "Thanks to Sengir, MysteriousAges, Xizzzy and many others", + "logoFile": "/assets/binniecore/logo.png", + "parent": "", + "requiredMods": [ "Forestry" ], + "dependencies": [ "Forestry" ], + "dependants" : [ ], + "useDependencyInformation" : true + }, + { + "modid": "ExtraBees", + "name": "Extra Bees", + "description": "Adds new bees and products to expand the bee breeding in Forestry.", + "version": "2.0-pre14", + "mcversion": "1.7.10", + "url": "http://minecraft.curseforge.com/mc-mods/223525-binnies-mods", + "updateUrl": "", + "authorList": [ "Binnie" ], + "credits": "Thanks to Sengir, MysteriousAges, Xizzzy and many others", + "logoFile": "/assets/extrabees/logo.png", + "parent": "", + "dependencies": [ "BinnieCore" ] + }, + { + "modid": "ExtraTrees", + "name": "Extra Trees", + "description": "Adds new trees, aesthetic blocks and alcohol production.", + "version": "2.0-pre14", + "mcversion": "1.7.10", + "url": "http://minecraft.curseforge.com/mc-mods/223525-binnies-mods", + "updateUrl": "", + "authorList": [ "Binnie" ], + "credits": "Thanks to Sengir, MysteriousAges, Xizzzy and many others", + "logoFile": "/assets/extratrees/logo.png", + "parent": "", + "dependencies": [ "BinnieCore" ] + }, + { + "modid": "Botany", + "name": "Botany", + "description": "Adds breedable flowers.", + "version": "2.0-pre14", + "mcversion": "1.7.10", + "url": "http://minecraft.curseforge.com/mc-mods/223525-binnies-mods", + "updateUrl": "", + "authorList": [ "Binnie" ], + "credits": "Thanks to Sengir, MysteriousAges, Xizzzy and many others", + "logoFile": "/assets/botany/logo.png", + "parent": "", + "dependencies": [ "BinnieCore" ] + }, + { + "modid": "Genetics", + "name": "Genetics", + "description": "Adds genetic manipulation for bees, trees, butterflies and flowers.", + "version": "2.0-pre14", + "mcversion": "1.7.10", + "url": "http://minecraft.curseforge.com/mc-mods/223525-binnies-mods", + "updateUrl": "", + "authorList": [ "Binnie" ], + "credits": "Thanks to Sengir, MysteriousAges, Xizzzy and many others", + "logoFile": "/assets/genetics/logo.png", + "parent": "", + "dependencies": [ "BinnieCore" ] + } + ]