diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..12f864471 --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +# eclipse +bin +*.launch +.settings +.metadata +.classpath +.project + +# idea +out +*.ipr +*.iws +*.iml +.idea + +# gradle +build +.gradle + +# other +eclipse +run + +# Files from Forge MDK +forge*changelog.txt diff --git a/build.gradle b/build.gradle new file mode 100644 index 000000000..d7b8e98d9 --- /dev/null +++ b/build.gradle @@ -0,0 +1,118 @@ +buildscript { + repositories { + maven { url = 'https://maven.minecraftforge.net' } + maven { url = 'https://repo.spongepowered.org/maven' } + mavenCentral() + } + dependencies { + classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '4.1.+', changing: true + classpath 'org.spongepowered:mixingradle:0.7-SNAPSHOT' + } +} +repositories { + maven { + name = "Progwml6 maven" + url = "https://dvs1.progwml6.com/files/maven/" + } + maven { + name = "ModMaven" + url = "https://modmaven.k-4u.nl/" + } +} +repositories { + maven { + url = "https://www.cursemaven.com" + } +} +apply plugin: 'net.minecraftforge.gradle' +apply plugin: 'eclipse' +apply plugin: 'org.spongepowered.mixin' + +version = '1.0' +group = 'com.yourname.modid' +archivesBaseName = 'modid' + +java.toolchain.languageVersion = JavaLanguageVersion.of(8) + +minecraft { + mappings channel: 'snapshot', version: '20201028-1.16.3' + accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') + + runs { + client { + workingDirectory project.file('run') + + property 'forge.logging.markers', 'REGISTRIES' + property 'forge.logging.console.level', 'debug' + arg "-mixin.config=boss_tools.mixin.json" + + mods { + examplemod { + source sourceSets.main + } + } + } + + server { + workingDirectory project.file('run') + + property 'forge.logging.markers', 'REGISTRIES' + property 'forge.logging.console.level', 'debug' + arg "-mixin.config=boss_tools.mixin.json" + + mods { + examplemod { + source sourceSets.main + } + } + } + } +} + +dependencies { + minecraft 'net.minecraftforge:forge:1.16.5-36.2.0' + + //Mixin + if (System.getProperty("idea.sync.active") != "true") { + annotationProcessor 'org.spongepowered:mixin:0.8.2:processor' + } + + //JEI + compileOnly fg.deobf("mezz.jei:jei-1.16.5:7.7.1.137:api") + runtimeOnly fg.deobf("mezz.jei:jei-1.16.5:7.7.1.137") + + //TConstruct + compile fg.deobf("curse.maven:mantle-74924:3439180") + compile fg.deobf("curse.maven:tinkers-construct-74072:3439200") + + //The One Probe + compile fg.deobf("curse.maven:the-one-probe-245211:3319255") + + //Hwyla + compile fg.deobf("curse.maven:hwyla-253449:3033593") + + //Mekanism + compile fg.deobf("mekanism:Mekanism:1.16.5-10.0.20.447") + runtimeOnly fg.deobf("mekanism:Mekanism:1.16.5-10.0.20.447:additions") + runtimeOnly fg.deobf("mekanism:Mekanism:1.16.5-10.0.20.447:generators") + runtimeOnly fg.deobf("mekanism:Mekanism:1.16.5-10.0.20.447:tools") +} + +mixin { + add sourceSets.main, "boss_tools.mixin-refmap.json" +} + +jar { + manifest { + attributes([ + "Specification-Title": "boss_tools", + "Specification-Vendor": "MrScautHD", + "Specification-Version": "1", // We are version 1 of ourselves + "Implementation-Title": project.name, + "Implementation-Version": "${version}", + "Implementation-Vendor" :"MrScautHD", + "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), + "MixinConfigs" : "boss_tools.mixin.json" + ]) + } +} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 000000000..e708b1c02 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 000000000..549d84424 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 000000000..cccdd3d51 --- /dev/null +++ b/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# 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 +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 000000000..f9553162f --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem 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= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +: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=%* + +: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/src/main/java/net/mrscauthd/boss_tools/BossToolsMod.java b/src/main/java/net/mrscauthd/boss_tools/BossToolsMod.java new file mode 100644 index 000000000..32aa216d7 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/BossToolsMod.java @@ -0,0 +1,109 @@ +package net.mrscauthd.boss_tools; + +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; +import net.minecraftforge.fml.event.lifecycle.InterModProcessEvent; +import net.mrscauthd.boss_tools.compat.CompatibleManager; +import net.mrscauthd.boss_tools.gui.screens.planetselection.PlanetSelectionGui; +import net.mrscauthd.boss_tools.keybind.KeyBindings; +import net.mrscauthd.boss_tools.machines.OxygenBubbleDistributorBlock; +import net.mrscauthd.boss_tools.world.oregen.OreGeneration; +import net.mrscauthd.boss_tools.world.structure.configuration.STStructures; +import net.mrscauthd.boss_tools.world.structure.configuration.STStructures2; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; + +import net.minecraftforge.fml.network.simple.SimpleChannel; +import net.minecraftforge.fml.network.NetworkEvent; +import net.minecraftforge.fml.network.NetworkRegistry; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.common.MinecraftForge; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.network.PacketBuffer; + +import java.util.function.BiConsumer; +import java.util.function.Function; +import java.util.function.Supplier; + +@Mod(BossToolsMod.ModId) +public class BossToolsMod { + + public static final Logger LOGGER = LogManager.getLogger(BossToolsMod.class); + + public static final String ModId = "boss_tools"; + + private static final String PROTOCOL_VERSION = "1"; + public static final SimpleChannel PACKET_HANDLER = NetworkRegistry.newSimpleChannel(new ResourceLocation(BossToolsMod.ModId, BossToolsMod.ModId), () -> PROTOCOL_VERSION, PROTOCOL_VERSION::equals, PROTOCOL_VERSION::equals); + private static int messageID; + + public BossToolsMod() { + + IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); + IEventBus forgeBus = MinecraftForge.EVENT_BUS; + + // Register the setup method for modloading + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup); + + // Register the enqueueIMC method for modloading + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::enqueueIMC); + + // Register the processIMC method for modloading + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::processIMC); + + bus.register(this); + + //MobInnet + ModInnet.ENTITYS.register(bus); + ModInnet.ITEMS.register(bus); + ModInnet.BLOCKS.register(bus); + ModInnet.TILE_ENTITYS.register(bus); + ModInnet.SOUNDS.register(bus); + ModInnet.SENSOR.register(bus); + ModInnet.FLUIDS.register(bus); + ModInnet.RECIPE_SERIALIZERS.register(bus); + ModInnet.ROCKET_PARTS.register(bus); + ModInnet.EFFECTS.register(bus); + ModInnet.GUIS.register(bus); + ModInnet.PARTICLES.register(bus); + + //bus.addListener(ModInnet::setup); + forgeBus.addListener(EventPriority.NORMAL, ModInnet::addDimensionalSpacing); + forgeBus.addListener(EventPriority.HIGH, ModInnet::biomeModification); + + // Structures + STStructures2.DEFERRED_REGISTRY_STRUCTURE.register(bus); + STStructures.DEFERRED_REGISTRY_STRUCTURE.register(bus); + + forgeBus.addListener(EventPriority.HIGH, ModInnet::biomesLoading); + forgeBus.addListener(EventPriority.HIGH, OreGeneration::biomesLoading); + + // KeyBindings + KeyBindings.registerMessages(); + + //Networker + BossToolsMod.addNetworkMessage(OxygenBubbleDistributorBlock.ChangeRangeMessage.class, OxygenBubbleDistributorBlock.ChangeRangeMessage::encode, OxygenBubbleDistributorBlock.ChangeRangeMessage::decode, OxygenBubbleDistributorBlock.ChangeRangeMessage::handle); + BossToolsMod.addNetworkMessage(OxygenBubbleDistributorBlock.ChangeWorkingAreaVisibleMessage.class, OxygenBubbleDistributorBlock.ChangeWorkingAreaVisibleMessage::encode, OxygenBubbleDistributorBlock.ChangeWorkingAreaVisibleMessage::decode, OxygenBubbleDistributorBlock.ChangeWorkingAreaVisibleMessage::handle); + BossToolsMod.addNetworkMessage(PlanetSelectionGui.NetworkMessage.class, PlanetSelectionGui.NetworkMessage::encode, PlanetSelectionGui.NetworkMessage::decode, PlanetSelectionGui.NetworkMessage::handle); + + + CompatibleManager.loadAll(); + } + + private void setup(final FMLCommonSetupEvent event) { + } + + private void enqueueIMC(final InterModEnqueueEvent event) { + } + + private void processIMC(final InterModProcessEvent event) { + } + + public static void addNetworkMessage(Class messageType, BiConsumer encoder, Function decoder, BiConsumer> messageConsumer) { + PACKET_HANDLER.registerMessage(messageID, messageType, encoder, decoder, messageConsumer); + messageID++; + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/ModInnet.java b/src/main/java/net/mrscauthd/boss_tools/ModInnet.java new file mode 100644 index 000000000..ccb0d04ce --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/ModInnet.java @@ -0,0 +1,639 @@ +package net.mrscauthd.boss_tools; + +import com.mojang.serialization.Codec; +import net.minecraft.block.*; +import net.minecraft.block.material.Material; +import net.minecraft.block.material.MaterialColor; +import net.minecraft.entity.ai.brain.sensor.SensorType; +import net.minecraft.fluid.FlowingFluid; +import net.minecraft.fluid.Fluid; +import net.minecraft.inventory.container.ContainerType; +import net.minecraft.item.*; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.particles.BasicParticleType; +import net.minecraft.particles.ParticleType; +import net.minecraft.potion.Effect; +import net.minecraft.potion.EffectType; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.*; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.registry.WorldGenRegistries; +import net.minecraft.world.World; +import net.minecraft.world.gen.ChunkGenerator; +import net.minecraft.world.gen.FlatChunkGenerator; +import net.minecraft.world.gen.GenerationStage; +import net.minecraft.world.gen.feature.*; +import net.minecraft.world.gen.feature.structure.Structure; +import net.minecraft.world.gen.placement.Placement; +import net.minecraft.world.gen.settings.DimensionStructuresSettings; +import net.minecraft.world.gen.settings.StructureSeparationSettings; +import net.minecraft.world.gen.surfacebuilders.DefaultSurfaceBuilder; +import net.minecraft.world.gen.surfacebuilders.ISurfaceBuilderConfig; +import net.minecraft.world.gen.surfacebuilders.SurfaceBuilder; +import net.minecraft.world.gen.surfacebuilders.SurfaceBuilderConfig; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.common.ToolType; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.event.world.BiomeLoadingEvent; +import net.minecraftforge.event.world.WorldEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.ObfuscationReflectionHelper; +import net.mrscauthd.boss_tools.armor.SpaceSuit; +import net.mrscauthd.boss_tools.block.*; +import net.mrscauthd.boss_tools.capability.CapabilityOxygen; +import net.mrscauthd.boss_tools.crafting.BlastingRecipeSerializer; +import net.mrscauthd.boss_tools.crafting.BossToolsRecipeTypes; +import net.mrscauthd.boss_tools.crafting.CompressingRecipeSerializer; +import net.mrscauthd.boss_tools.crafting.FuelRefiningRecipeSerializer; +import net.mrscauthd.boss_tools.crafting.GeneratingRecipeSerializer; +import net.mrscauthd.boss_tools.crafting.OxygenBubbleDistributorRecipeSerializer; +import net.mrscauthd.boss_tools.crafting.OxygenLoaderRecipeSerializer; +import net.mrscauthd.boss_tools.crafting.WorkbenchingRecipeSerializer; +import net.mrscauthd.boss_tools.crafting.RocketPart; +import net.mrscauthd.boss_tools.effects.OxygenEffect; +import net.mrscauthd.boss_tools.entity.*; +import net.mrscauthd.boss_tools.feature.DesertSurfaceBuilder; +import net.mrscauthd.boss_tools.flag.FlagTileEntity; +import net.mrscauthd.boss_tools.fluid.OilFluid; +import net.mrscauthd.boss_tools.gui.screens.blastfurnace.BlastFurnaceGui; +import net.mrscauthd.boss_tools.gui.screens.coalgenerator.CoalGeneratorGui; +import net.mrscauthd.boss_tools.gui.screens.compressor.CompressorGui; +import net.mrscauthd.boss_tools.gui.screens.fuelrefinery.FuelRefineryGui; +import net.mrscauthd.boss_tools.gui.screens.lander.LanderGui; +import net.mrscauthd.boss_tools.gui.screens.nasaworkbench.NasaWorkbenchGui; +import net.mrscauthd.boss_tools.gui.screens.oxygenbubbledistributor.OxygenBubbleDistributorGui; +import net.mrscauthd.boss_tools.gui.screens.oxygenloader.OxygenLoaderGui; +import net.mrscauthd.boss_tools.gui.screens.planetselection.PlanetSelectionGui; +import net.mrscauthd.boss_tools.gui.screens.rocket.RocketGui; +import net.mrscauthd.boss_tools.gui.screens.rover.RoverGui; +import net.mrscauthd.boss_tools.gui.screens.solarpanel.SolarPanelGui; +import net.mrscauthd.boss_tools.gui.screens.waterpump.WaterPumpGui; +import net.mrscauthd.boss_tools.item.*; +import net.mrscauthd.boss_tools.itemtiers.SteelItemTier; +import net.mrscauthd.boss_tools.machines.*; +import net.mrscauthd.boss_tools.machines.tile.WaterPumpTileEntity; +import net.mrscauthd.boss_tools.spawneggs.ModSpawnEggs; +import net.mrscauthd.boss_tools.entity.pygro.PygroEntity; +import net.mrscauthd.boss_tools.flag.*; +import net.mrscauthd.boss_tools.fluid.FuelFluid; +import net.mrscauthd.boss_tools.armor.NetheriteSpaceSuit; +import net.mrscauthd.boss_tools.world.biomes.BiomeRegistry; +import net.mrscauthd.boss_tools.events.Config; +import net.mrscauthd.boss_tools.feature.MarsIceSpikeFeature; +import net.mrscauthd.boss_tools.feature.VenusDeltas; +import net.mrscauthd.boss_tools.entity.alien.AlienEntity; + +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.IForgeRegistry; +import net.minecraftforge.registries.RegistryBuilder; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.RegistryObject; +import net.minecraftforge.fml.DeferredWorkQueue; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.mrscauthd.boss_tools.itemgroup.BossToolsItemGroups; +import net.mrscauthd.boss_tools.entity.pygro.PygroMobsSensor; + +import net.minecraft.entity.ai.attributes.GlobalEntityTypeAttributes; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.EntityClassification; +import net.minecraft.entity.CreatureEntity; +import net.mrscauthd.boss_tools.world.structure.configuration.STConfiguredStructures; +import net.mrscauthd.boss_tools.world.structure.configuration.STStructures; +import net.mrscauthd.boss_tools.world.structure.configuration.STStructures2; + +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId, bus = Mod.EventBusSubscriber.Bus.MOD) +public class ModInnet { + + public static final DeferredRegister> ENTITYS = DeferredRegister.create(ForgeRegistries.ENTITIES, BossToolsMod.ModId); + + public static final DeferredRegister> TILE_ENTITYS = DeferredRegister.create(ForgeRegistries.TILE_ENTITIES, BossToolsMod.ModId); + + public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, BossToolsMod.ModId); + + public static final DeferredRegister FLUIDS = DeferredRegister.create(ForgeRegistries.FLUIDS, BossToolsMod.ModId); + + public static final DeferredRegister SOUNDS = DeferredRegister.create(ForgeRegistries.SOUND_EVENTS, BossToolsMod.ModId); + + public static final DeferredRegister EFFECTS = DeferredRegister.create(ForgeRegistries.POTIONS, BossToolsMod.ModId); + + public static final DeferredRegister> PARTICLES = DeferredRegister.create(ForgeRegistries.PARTICLE_TYPES, BossToolsMod.ModId); + + public static final DeferredRegister> GUIS = DeferredRegister.create(ForgeRegistries.CONTAINERS, BossToolsMod.ModId); + + public static DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, BossToolsMod.ModId); + + //Vehicle Items + public static final RegistryObject TIER_1_ROCKET_ITEM = ITEMS.register("rocket_t1", () -> new Tier1RocketItem(new Item.Properties().group(BossToolsItemGroups.tab_normal).maxStackSize(1))); + public static final RegistryObject TIER_2_ROCKET_ITEM = ITEMS.register("rocket_t2", () -> new Tier2RocketItem(new Item.Properties().group(BossToolsItemGroups.tab_normal).maxStackSize(1))); + public static final RegistryObject TIER_3_ROCKET_ITEM = ITEMS.register("rocket_t3", () -> new Tier3RocketItem(new Item.Properties().group(BossToolsItemGroups.tab_normal).maxStackSize(1))); + public static final RegistryObject ROVER_ITEM = ITEMS.register("rover", () -> new RoverItem(new Item.Properties().group(BossToolsItemGroups.tab_normal).maxStackSize(1))); + + //Entitys + public static RegistryObject> ALIEN = ENTITYS.register("alien", () -> EntityType.Builder.create(AlienEntity::new, EntityClassification.CREATURE).size(0.75f, 2.5f).build(new ResourceLocation("boss_tools", "alien").toString())); + public static RegistryObject> ALIEN_ZOMBIE = ENTITYS.register("alien_zombie", () -> EntityType.Builder.create(AlienZombieEntity::new, EntityClassification.MONSTER).size(0.6f, 2.4f).build(new ResourceLocation("boss_tools", "alien_zombie").toString())); + public static RegistryObject> STAR_CRAWLER = ENTITYS.register("star_crawler", () -> EntityType.Builder.create(StarCrawlerEntity::new, EntityClassification.MONSTER).size(1.3f, 1f).build(new ResourceLocation("boss_tools", "star_crawler").toString())); + public static RegistryObject> PYGRO = ENTITYS.register("pygro", () -> EntityType.Builder.create(PygroEntity::new, EntityClassification.MONSTER).immuneToFire().size(0.6f, 1.8f).build(new ResourceLocation("boss_tools", "pygro").toString())); + public static RegistryObject> MOGLER = ENTITYS.register("mogler", () -> EntityType.Builder.create(MoglerEntity::new, EntityClassification.MONSTER).size(1.4f, 1.4f).build(new ResourceLocation("boss_tools", "mogler").toString())); + + //VEHICLES + public static RegistryObject> TIER_1_ROCKET = ENTITYS.register("rocket_t1", () -> EntityType.Builder.create(RocketTier1Entity::new, EntityClassification.MISC).size(1.1f, 4.4f).immuneToFire().build(new ResourceLocation("boss_tools", "rocket_t1").toString())); + public static RegistryObject> TIER_2_ROCKET = ENTITYS.register("rocket_t2", () -> EntityType.Builder.create(RocketTier2Entity::new, EntityClassification.MISC).size(1.1f, 4.6f).immuneToFire().build(new ResourceLocation("boss_tools", "rocket_t2").toString())); + public static RegistryObject> TIER_3_ROCKET = ENTITYS.register("rocket_t3", () -> EntityType.Builder.create(RocketTier3Entity::new, EntityClassification.MISC).size(1.1f, 4.8f).immuneToFire().build(new ResourceLocation("boss_tools", "rocket_t3").toString())); + public static RegistryObject> LANDER = ENTITYS.register("lander", () -> EntityType.Builder.create(LanderEntity::new, EntityClassification.MISC).size(0.6f, 2.0f).immuneToFire().build(new ResourceLocation("boss_tools", "lander").toString())); + public static RegistryObject> ROVER = ENTITYS.register("rover", () -> EntityType.Builder.create(RoverEntity::new, EntityClassification.MISC).size(2.5f, 1.0f).immuneToFire().build(new ResourceLocation("boss_tools", "rover").toString())); + + //Rocket Launch Pad + public static final RegistryObject ROCKET_LAUNCH_PAD = BLOCKS.register("rocket_launch_pad", () -> new RocketLaunchPad(AbstractBlock.Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(5f, 2.5f).harvestTool(ToolType.PICKAXE).setRequiresTool())); + + + //Alien Spit Entity + public static RegistryObject> ALIEN_SPIT_ENTITY = ENTITYS.register("alien_spit_entity", () -> EntityType.Builder.create(AlienSpitEntity::new, EntityClassification.MISC).size(0.5f, 0.5f).build(new ResourceLocation("boss_tools", "alien_spit_entity").toString())); + + //pygro + public static final DeferredRegister> SENSOR = DeferredRegister.create(ForgeRegistries.SENSOR_TYPES, BossToolsMod.ModId); + public static final RegistryObject> PYGRO_SENSOR = SENSOR.register("pygro_sensor", ()->new SensorType<>(PygroMobsSensor::new)); + + //Sounds + public static RegistryObject ROCKET_SOUND = SOUNDS.register("rocket_fly",() -> new SoundEvent(new ResourceLocation(BossToolsMod.ModId, "rocket_fly"))); + + //Blocks + public static RegistryObject COAL_TORCH_BLOCK = BLOCKS.register("coal_torch",() -> new CoalTorchBlock(AbstractBlock.Properties.create(Material.MISCELLANEOUS).doesNotBlockMovement().zeroHardnessAndResistance().sound(SoundType.WOOD))); + public static RegistryObject WALL_COAL_TORCH_BLOCK = BLOCKS.register("wall_coal_torch",() -> new WallCoalTorchBlock(AbstractBlock.Properties.create(Material.MISCELLANEOUS).doesNotBlockMovement().zeroHardnessAndResistance().sound(SoundType.WOOD).lootFrom(COAL_TORCH_BLOCK.get()))); + public static RegistryObject COAL_LANTERN_BLOCK = BLOCKS.register("coal_lantern",() -> new CoalLanternBlock(AbstractBlock.Properties.create(Material.IRON).setRequiresTool().hardnessAndResistance(3.5F).sound(SoundType.LANTERN).notSolid())); + + + //Flag Blocks + public static RegistryObject FLAG_BLOCK = BLOCKS.register("flag",() -> new FlagBlock(AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(1.0F, 1.0F).sound(SoundType.STONE).notSolid().setLightLevel(s -> 1).setOpaque((bs, br, bp) -> false).harvestTool(ToolType.PICKAXE))); + public static RegistryObject FLAG_BLUE_BLOCK = BLOCKS.register("flag_blue",() -> new FlagBlock(AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(1.0F, 1.0F).sound(SoundType.STONE).notSolid().setLightLevel(s -> 1).setOpaque((bs, br, bp) -> false).harvestTool(ToolType.PICKAXE))); + public static RegistryObject FLAG_BROWN_BLOCK = BLOCKS.register("flag_brown",() -> new FlagBlock(AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(1.0F, 1.0F).sound(SoundType.STONE).notSolid().setLightLevel(s -> 1).setOpaque((bs, br, bp) -> false).harvestTool(ToolType.PICKAXE))); + public static RegistryObject FLAG_CYAN_BLOCK = BLOCKS.register("flag_cyan",() -> new FlagBlock(AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(1.0F, 1.0F).sound(SoundType.STONE).notSolid().setLightLevel(s -> 1).setOpaque((bs, br, bp) -> false).harvestTool(ToolType.PICKAXE))); + public static RegistryObject FLAG_GRAY_BLOCK = BLOCKS.register("flag_gray",() -> new FlagBlock(AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(1.0F, 1.0F).sound(SoundType.STONE).notSolid().setLightLevel(s -> 1).setOpaque((bs, br, bp) -> false).harvestTool(ToolType.PICKAXE))); + public static RegistryObject FLAG_GREEN_BLOCK = BLOCKS.register("flag_green",() -> new FlagBlock(AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(1.0F, 1.0F).sound(SoundType.STONE).notSolid().setLightLevel(s -> 1).setOpaque((bs, br, bp) -> false).harvestTool(ToolType.PICKAXE))); + public static RegistryObject FLAG_LIGHT_BLUE_BLOCK = BLOCKS.register("flag_light_blue",() -> new FlagBlock(AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(1.0F, 1.0F).sound(SoundType.STONE).notSolid().setLightLevel(s -> 1).setOpaque((bs, br, bp) -> false).harvestTool(ToolType.PICKAXE))); + public static RegistryObject FLAG_LIME_BLOCK = BLOCKS.register("flag_lime",() -> new FlagBlock(AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(1.0F, 1.0F).sound(SoundType.STONE).notSolid().setLightLevel(s -> 1).setOpaque((bs, br, bp) -> false).harvestTool(ToolType.PICKAXE))); + public static RegistryObject FLAG_MAGENTA_BLOCk = BLOCKS.register("flag_magenta",() -> new FlagBlock(AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(1.0F, 1.0F).sound(SoundType.STONE).notSolid().setLightLevel(s -> 1).setOpaque((bs, br, bp) -> false).harvestTool(ToolType.PICKAXE))); + public static RegistryObject FLAG_ORANGE_BLOCK = BLOCKS.register("flag_orange",() -> new FlagBlock(AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(1.0F, 1.0F).sound(SoundType.STONE).notSolid().setLightLevel(s -> 1).setOpaque((bs, br, bp) -> false).harvestTool(ToolType.PICKAXE))); + public static RegistryObject FLAG_PINK_BLOCK = BLOCKS.register("flag_pink",() -> new FlagBlock(AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(1.0F, 1.0F).sound(SoundType.STONE).notSolid().setLightLevel(s -> 1).setOpaque((bs, br, bp) -> false).harvestTool(ToolType.PICKAXE))); + public static RegistryObject FLAG_PURPLE_BLOCK = BLOCKS.register("flag_purple",() -> new FlagBlock(AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(1.0F, 1.0F).sound(SoundType.STONE).notSolid().setLightLevel(s -> 1).setOpaque((bs, br, bp) -> false).harvestTool(ToolType.PICKAXE))); + public static RegistryObject FLAG_RED_BLOCK = BLOCKS.register("flag_red",() -> new FlagBlock(AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(1.0F, 1.0F).sound(SoundType.STONE).notSolid().setLightLevel(s -> 1).setOpaque((bs, br, bp) -> false).harvestTool(ToolType.PICKAXE))); + public static RegistryObject FLAG_YELLOW_BLOCK = BLOCKS.register("flag_yellow",() -> new FlagBlock(AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(1.0F, 1.0F).sound(SoundType.STONE).notSolid().setLightLevel(s -> 1).setOpaque((bs, br, bp) -> false).harvestTool(ToolType.PICKAXE))); + + //Tile Entity RegistryObject + public static final RegistryObject> FUEL_REFINERY = TILE_ENTITYS.register("fuel_refinery", () -> TileEntityType.Builder.create(FuelRefineryBlock.CustomTileEntity::new,ModInnet.FUEL_REFINERY_BLOCK.get()).build(null)); + public static final RegistryObject> BLAST_FURNACE = TILE_ENTITYS.register("blast_furnace", () -> TileEntityType.Builder.create(BlastingFurnaceBlock.CustomTileEntity::new,ModInnet.BLAST_FURNACE_BLOCK.get()).build(null)); + public static final RegistryObject> COMPRESSOR = TILE_ENTITYS.register("compressor", () -> TileEntityType.Builder.create(CompressorBlock.CustomTileEntity::new,ModInnet.COMPRESSOR_BLOCK.get()).build(null)); + public static final RegistryObject> COAL_GENERATOR = TILE_ENTITYS.register("coal_generator", () -> TileEntityType.Builder.create(CoalGeneratorBlock.CustomTileEntity::new,ModInnet.COAL_GENERATOR_BLOCK.get()).build(null)); + public static final RegistryObject> OXYGEN_LOADER = TILE_ENTITYS.register("oxygen_loader", () -> TileEntityType.Builder.create(OxygenLoaderBlock.CustomTileEntity::new,ModInnet.OXYGEN_LOADER_BLOCK.get()).build(null)); + public static final RegistryObject> SOLAR_PANEL = TILE_ENTITYS.register("solar_panel", () -> TileEntityType.Builder.create(SolarPanelBlock.CustomTileEntity::new,ModInnet.SOLAR_PANEL_BLOCK.get()).build(null)); + public static final RegistryObject> NASA_WORKBENCH = TILE_ENTITYS.register("nasa_workbench", () -> TileEntityType.Builder.create(NASAWorkbenchBlock.CustomTileEntity::new,ModInnet.NASA_WORKBENCH_BLOCK.get()).build(null)); + public static final RegistryObject> OXYGEN_BUBBLE_DISTRIBUTOR = TILE_ENTITYS.register("oxygen_bubble_distributor", () -> TileEntityType.Builder.create(OxygenBubbleDistributorBlock.CustomTileEntity::new,ModInnet.OXYGEN_BUBBLE_DISTRIBUTOR_BLOCK.get()).build(null)); + public static final RegistryObject> WATER_PUMP = TILE_ENTITYS.register("water_pump", () -> TileEntityType.Builder.create(WaterPumpTileEntity::new,ModInnet.WATER_PUMP_BLOCK.get()).build(null)); + + + //Tile Entitys Flags + public static final RegistryObject> FLAG = TILE_ENTITYS.register("flag", () -> TileEntityType.Builder.create(FlagTileEntity::new,ModInnet.FLAG_BLOCK.get(), ModInnet.FLAG_BLUE_BLOCK.get(), ModInnet.FLAG_BROWN_BLOCK.get(), ModInnet.FLAG_CYAN_BLOCK.get(),ModInnet.FLAG_GRAY_BLOCK.get(),ModInnet.FLAG_GRAY_BLOCK.get(),ModInnet.FLAG_GREEN_BLOCK.get(),ModInnet.FLAG_LIGHT_BLUE_BLOCK.get(),ModInnet.FLAG_LIME_BLOCK.get(),ModInnet.FLAG_MAGENTA_BLOCk.get(),ModInnet.FLAG_ORANGE_BLOCK.get(),ModInnet.FLAG_PINK_BLOCK.get(),ModInnet.FLAG_PURPLE_BLOCK.get(),ModInnet.FLAG_RED_BLOCK.get(),ModInnet.FLAG_YELLOW_BLOCK.get()).build(null)); + + //Machines + public static RegistryObject FUEL_REFINERY_BLOCK = BLOCKS.register("fuel_refinery",() -> new FuelRefineryBlock.CustomBlock()); + public static RegistryObject BLAST_FURNACE_BLOCK = BLOCKS.register("blast_furnace",() -> new BlastingFurnaceBlock.CustomBlock()); + public static RegistryObject COMPRESSOR_BLOCK = BLOCKS.register("compressor",() -> new CompressorBlock.CustomBlock()); + public static RegistryObject COAL_GENERATOR_BLOCK = BLOCKS.register("coal_generator",() -> new CoalGeneratorBlock.CustomBlock()); + public static RegistryObject OXYGEN_LOADER_BLOCK = BLOCKS.register("oxygen_loader",() -> new OxygenLoaderBlock.CustomBlock()); + public static RegistryObject SOLAR_PANEL_BLOCK = BLOCKS.register("solar_panel",() -> new SolarPanelBlock.CustomBlock()); + public static RegistryObject NASA_WORKBENCH_BLOCK = BLOCKS.register("nasa_workbench",() -> new NASAWorkbenchBlock.CustomBlock()); + public static RegistryObject OXYGEN_BUBBLE_DISTRIBUTOR_BLOCK = BLOCKS.register("oxygen_bubble_distributor",() -> new OxygenBubbleDistributorBlock.CustomBlock()); + public static RegistryObject WATER_PUMP_BLOCK = BLOCKS.register("water_pump",() -> new WaterPump(AbstractBlock.Properties.create(Material.IRON).sound(SoundType.METAL).notSolid().hardnessAndResistance(5f, 1f).setLightLevel(s -> 0).harvestLevel(1).harvestTool(ToolType.PICKAXE).setRequiresTool())); + + + //Block Item + public static final RegistryObject NASA_WORKBENCH_ITEM = ITEMS.register("nasa_workbench", () -> new BlockItem(ModInnet.NASA_WORKBENCH_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_machines))); + public static final RegistryObject SOLAR_PANEL_ITEM = ITEMS.register("solar_panel", () -> new BlockItem(ModInnet.SOLAR_PANEL_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_machines))); + public static final RegistryObject COAL_GENERATOR_ITEM = ITEMS.register("coal_generator", () -> new BlockItem(ModInnet.COAL_GENERATOR_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_machines))); + public static final RegistryObject BLAST_FURNACE_ITEM = ITEMS.register("blast_furnace", () -> new BlockItem(ModInnet.BLAST_FURNACE_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_machines))); + public static final RegistryObject COMPRESSOR_ITEM = ITEMS.register("compressor", () -> new BlockItem(ModInnet.COMPRESSOR_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_machines))); + public static final RegistryObject FUEL_REFINERY_ITEM = ITEMS.register("fuel_refinery", () -> new BlockItem(ModInnet.FUEL_REFINERY_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_machines))); + public static final RegistryObject OXYGEN_LOADER_ITEM = ITEMS.register("oxygen_loader", () -> new BlockItem(ModInnet.OXYGEN_LOADER_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_machines))); + public static final RegistryObject OXYGEN_BUBBLE_DISTRIBUTOR_ITEM = ITEMS.register("oxygen_bubble_distributor", () -> new BlockItem(ModInnet.OXYGEN_BUBBLE_DISTRIBUTOR_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_machines))); + public static final RegistryObject WATER_PUMP_ITEM = ITEMS.register("water_pump", () -> new BlockItem(ModInnet.WATER_PUMP_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_machines))); + + //Tools + public static final RegistryObject STEEL_SWORD = ITEMS.register("steel_sword", + () -> new SwordItem(SteelItemTier.ITEM_TIER,3,-2.4f,new Item.Properties().group(BossToolsItemGroups.tab_basics).isImmuneToFire())); + + public static final RegistryObject STEEL_SHOVEL = ITEMS.register("steel_shovel", + () -> new ShovelItem(SteelItemTier.ITEM_TIER,1.5f,-3f,new Item.Properties().group(BossToolsItemGroups.tab_basics).isImmuneToFire())); + + public static final RegistryObject STEEL_PICKAXE = ITEMS.register("steel_pickaxe", + () -> new PickaxeItem(SteelItemTier.ITEM_TIER,1,-2.8f,new Item.Properties().group(BossToolsItemGroups.tab_basics).isImmuneToFire())); + + public static final RegistryObject STEEL_AXE = ITEMS.register("steel_axe", + () -> new AxeItem(SteelItemTier.ITEM_TIER,6,-3f,new Item.Properties().group(BossToolsItemGroups.tab_basics).isImmuneToFire())); + + public static final RegistryObject STEEL_HOE = ITEMS.register("steel_hoe", + () -> new HoeItem(SteelItemTier.ITEM_TIER,-2,0f,new Item.Properties().group(BossToolsItemGroups.tab_basics).isImmuneToFire())); + + //Fuel Fluid + public static final RegistryObject FLOWING_FUEL = FLUIDS.register("flowing_fuel", ()-> new FuelFluid.Flowing()); + public static final RegistryObject FUEL_STILL = FLUIDS.register("fuel", ()-> new FuelFluid.Source()); + public static RegistryObject FUEL_BLOCK = BLOCKS.register("fuel",() -> new FlowingFluidBlock(ModInnet.FUEL_STILL, Block.Properties.create(Material.WATER).doesNotBlockMovement().hardnessAndResistance(100f).noDrops())); + public static final RegistryObject FUEL_BUCKET = ITEMS.register("fuel_bucket", () -> new BucketItem(ModInnet.FUEL_STILL, new Item.Properties().containerItem(Items.BUCKET).maxStackSize(1).group(BossToolsItemGroups.tab_normal))); + + public static final ResourceLocation FLUID_VEHICLE_FUEL_TAG = new ResourceLocation("boss_tools", "vehicle_fuel"); + + //Oil Fluid + public static final RegistryObject FLOWING_OIL = FLUIDS.register("flowing_oil", ()-> new OilFluid.Flowing()); + public static final RegistryObject OIL_STILL = FLUIDS.register("oil", ()-> new OilFluid.Source()); + public static RegistryObject OIL_BLOCK = BLOCKS.register("oil",() -> new FlowingFluidBlock(ModInnet.OIL_STILL, Block.Properties.create(Material.WATER).doesNotBlockMovement().hardnessAndResistance(100f).noDrops())); + public static final RegistryObject OIL_BUCKET = ITEMS.register("oil_bucket", () -> new BucketItem(ModInnet.OIL_STILL, new Item.Properties().containerItem(Items.BUCKET).maxStackSize(1).group(BossToolsItemGroups.tab_normal))); + + public static final ResourceLocation OIL_FLUID_TAG = new ResourceLocation("boss_tools", "oil"); + + //Item + public static final RegistryObject COAL_TORCH_ITEM = ITEMS.register("coal_torch", () -> new CoalTorchItem(COAL_TORCH_BLOCK.get(), WALL_COAL_TORCH_BLOCK.get(),new Item.Properties().group(BossToolsItemGroups.tab_basics))); + //Lanterns + public static final RegistryObject COAL_LANTERN_ITEM = ITEMS.register("coal_lantern", () -> new BlockItem(ModInnet.COAL_LANTERN_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_basics))); + + //Spawn Eggs + public static final RegistryObject ALIEN_SPAWN_EGG = ITEMS.register("alien_spawn_egg", () -> new ModSpawnEggs(ALIEN, -13382401, -11650781, new Item.Properties().group(BossToolsItemGroups.tab_spawn_eggs))); + public static final RegistryObject PYGRO_SPAWN_EGG = ITEMS.register("pygro_spawn_egg",() -> new ModSpawnEggs(PYGRO, -3381760, -6750208, new Item.Properties().group(BossToolsItemGroups.tab_spawn_eggs))); + public static final RegistryObject MOGLER_SPAWN_EGG = ITEMS.register("mogler_spawn_egg",() -> new ModSpawnEggs(MOGLER, -13312, -3407872, new Item.Properties().group(BossToolsItemGroups.tab_spawn_eggs))); + public static final RegistryObject ALIEN_ZOMBIE_SPAWN_EGG = ITEMS.register("alien_zombie_spawn_egg",() -> new ModSpawnEggs(ALIEN_ZOMBIE, -14804199, -16740159, new Item.Properties().group(BossToolsItemGroups.tab_spawn_eggs))); + public static final RegistryObject STAR_CRAWLER_SPAWN_EGG = ITEMS.register("star_crawler_spawn_egg",() -> new ModSpawnEggs(STAR_CRAWLER, -13421773, -16724788, new Item.Properties().group(BossToolsItemGroups.tab_spawn_eggs))); + + //Generel Items + public static final RegistryObject CHESE = ITEMS.register("chesse", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_normal).food((new Food.Builder()).hunger(4).saturation(3f).build()))); + public static final RegistryObject HAMMER = ITEMS.register("hammer", () -> new HammerItem(new Item.Properties().group(BossToolsItemGroups.tab_basics).maxDamage(9).setNoRepair())); + public static final RegistryObject IRON_STICK = ITEMS.register("iron_stick", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_basics))); + public static final RegistryObject OXYGEN_GEAR = ITEMS.register("oxygen_gear", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_basics))); + public static final RegistryObject OXYGEN_TANK = ITEMS.register("oxygen_tank", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_basics))); + public static final RegistryObject WHEEL = ITEMS.register("wheel", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_basics))); + public static final RegistryObject ENGINE_FRAME = ITEMS.register("engine_frame", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_basics))); + public static final RegistryObject ENGINE_FAN = ITEMS.register("engine_fan", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_basics))); + public static final RegistryObject ROCKET_NOSE_CONE = ITEMS.register("rocket_nose_cone", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_basics))); + public static final RegistryObject DIAMOND_ENGINE = ITEMS.register("diamond_engine", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_basics))); + public static final RegistryObject IRON_ENGINE = ITEMS.register("iron_engine", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_basics))); + public static final RegistryObject GOLDEN_ENGINE = ITEMS.register("golden_engine", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_basics))); + public static final RegistryObject IRON_TANK = ITEMS.register("iron_tank", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_basics))); + public static final RegistryObject GOLDEN_TANK = ITEMS.register("golden_tank", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_basics))); + public static final RegistryObject DIAMOND_TANK = ITEMS.register("diamond_tank", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_basics))); + public static final RegistryObject ROCKET_FIN = ITEMS.register("rocket_fin", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_basics))); + + public static final RegistryObject STEEL_INGOT = ITEMS.register("steel_ingot", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_materials))); + public static final RegistryObject DESH_INGOT = ITEMS.register("desh_ingot", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_materials))); + public static final RegistryObject SILICON_INGOT = ITEMS.register("silicon_ingot", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_materials))); + + public static final RegistryObject IRON_PLATE = ITEMS.register("iron_plate", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_materials))); + public static final RegistryObject DESH_PLATE = ITEMS.register("desh_plate", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_materials))); + + public static final RegistryObject COMPRESSED_STEEL = ITEMS.register("compressed_steel", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_materials))); + public static final RegistryObject COMPRESSED_DESH = ITEMS.register("compressed_desh", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_materials))); + public static final RegistryObject COMPRESSED_SILICON = ITEMS.register("compressed_silicon", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_materials))); + + public static final RegistryObject ICE_SHARD = ITEMS.register("ice_shard", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_materials))); + + public static final RegistryObject STEEL_NUGGET = ITEMS.register("steel_nugget", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_materials))); + public static final RegistryObject DESH_NUGGET = ITEMS.register("desh_nugget", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_materials))); + public static final RegistryObject SILICON_NUGGET = ITEMS.register("silicon_nugget", () -> new Item(new Item.Properties().group(BossToolsItemGroups.tab_materials))); + + //Generel Blocks + public static final RegistryObject STEEL_BLOCK = BLOCKS.register("steel_block", () -> new Block(AbstractBlock.Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(5f, 2.5f).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject DESH_BLOCK = BLOCKS.register("desh_block", () -> new Block(AbstractBlock.Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(5f, 2.5f).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject SILICON_BLOCK = BLOCKS.register("silicon_block", () -> new Block(AbstractBlock.Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(5f, 2.5f).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject IRON_PLATING_BLOCK = BLOCKS.register("iron_plating_block", () -> new Block(AbstractBlock.Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(5f, 2.5f).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject RUSTED_IRON_PILLAR_BLOCK = BLOCKS.register("rusted_iron_pillar_block", () -> new RotatedPillarBlock(AbstractBlock.Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(5f, 2.5f).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject RUSTED_IRON_PLATING_BLOCK = BLOCKS.register("rusted_iron_plating_block", () -> new Block(AbstractBlock.Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(5f, 2.5f).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject BLUE_IRON_PLATING_BLOCK = BLOCKS.register("blue_iron_plating_block", () -> new RotatedPillarBlock(AbstractBlock.Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(5f, 2.5f).harvestTool(ToolType.PICKAXE).setLightLevel(state -> 15).setRequiresTool())); + public static final RegistryObject IRON_MARK_BLOCK = BLOCKS.register("iron_mark_block", () -> new RotatedPillarBlock(AbstractBlock.Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(5f, 2.5f).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject CRACKED_MOON_BRICKS = BLOCKS.register("cracked_moon_bricks", () -> new Block(AbstractBlock.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(1.5f, 1f).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject CRACKED_MOON_BRICK_SALB = BLOCKS.register("cracked_moon_brick_slab", () -> new SlabBlock(AbstractBlock.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(1.5f, 1f).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject CRACKED_MOON_BRICK_STAIRS = BLOCKS.register("cracked_moon_brick_stairs", () -> new StairsBlock(() -> ModInnet.CRACKED_MOON_BRICKS.get().getDefaultState(), AbstractBlock.Properties.from(ModInnet.CRACKED_MOON_BRICKS.get()))); + public static final RegistryObject MOON_BRICKS = BLOCKS.register("moon_bricks", () -> new Block(AbstractBlock.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(1.5f, 1f).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject MOON_BRICK_SLAB = BLOCKS.register("moon_brick_slab", () -> new SlabBlock(AbstractBlock.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(1.5f, 1f).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject MOON_BRICK_STAIRS = BLOCKS.register("moon_brick_stairs", () -> new StairsBlock(() -> ModInnet.CRACKED_MOON_BRICKS.get().getDefaultState(), AbstractBlock.Properties.from(ModInnet.MOON_BRICKS.get()))); + public static final RegistryObject SKY_STONE = BLOCKS.register("sky_stone", () -> new Block(AbstractBlock.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(1.5f, 1f).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject MARS_STONE = BLOCKS.register("mars_stone", () -> new Block(AbstractBlock.Properties.create(Material.ROCK, MaterialColor.ORANGE_TERRACOTTA).sound(SoundType.STONE).hardnessAndResistance(1.5f, 1f).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject MERCURY_STONE = BLOCKS.register("mercury_stone", () -> new Block(AbstractBlock.Properties.create(Material.ROCK, MaterialColor.PURPLE).sound(SoundType.STONE).hardnessAndResistance(1.5f, 1f).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject MOON_STONE = BLOCKS.register("moon_stone", () -> new Block(AbstractBlock.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(1.5f, 1f).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject MERCURY_COBBLESTONE = BLOCKS.register("mercury_cobblestone", () -> new Block(AbstractBlock.Properties.create(Material.ROCK, MaterialColor.PURPLE).sound(SoundType.STONE).hardnessAndResistance(1.5f, 1f).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject VENUS_SANDSTONE = BLOCKS.register("venus_sandstone", () -> new Block(AbstractBlock.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(1.5f, 1f).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject VENUS_STONE = BLOCKS.register("venus_stone", () -> new Block(AbstractBlock.Properties.create(Material.ROCK, MaterialColor.ORANGE_TERRACOTTA).sound(SoundType.STONE).hardnessAndResistance(1.5f, 1f).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject INFERNAL_SPIRE_BLOCK = BLOCKS.register("infernal_spire_block", () -> new Block(AbstractBlock.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(1.5f, 1f).harvestTool(ToolType.PICKAXE).setRequiresTool())); + + + //Faling Block + public static final RegistryObject MOON_SAND = BLOCKS.register("moon_sand", () -> new FallingBlock(AbstractBlock.Properties.create(Material.SAND, MaterialColor.GRAY).sound(SoundType.SAND).hardnessAndResistance(0.5f, 0.5f).harvestTool(ToolType.SHOVEL))); + public static final RegistryObject MARS_SAND = BLOCKS.register("mars_sand", () -> new FallingBlock(AbstractBlock.Properties.create(Material.SAND, MaterialColor.ORANGE_TERRACOTTA).sound(SoundType.SAND).hardnessAndResistance(0.5f, 0.5f).harvestTool(ToolType.SHOVEL))); + public static final RegistryObject VENUS_SAND = BLOCKS.register("venus_sand", () -> new FallingBlock(AbstractBlock.Properties.create(Material.SAND, MaterialColor.ORANGE_TERRACOTTA).sound(SoundType.SAND).hardnessAndResistance(0.5f, 0.5f).harvestTool(ToolType.SHOVEL))); + + + //ORES + public static final RegistryObject MOON_CHESSE_ORE = BLOCKS.register("moon_cheese_ore", () -> new Block(AbstractBlock.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(3.0F, 3.0F).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject MOON_DESH_ORE = BLOCKS.register("moon_desh_ore", () -> new Block(AbstractBlock.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(3.0F, 3.0F).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject MOON_GLOWSTONE_ORE = BLOCKS.register("moon_glowstone_ore", () -> new Block(AbstractBlock.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(3.0F, 3.0F).harvestTool(ToolType.PICKAXE).setLightLevel(state -> 15).setRequiresTool())); + public static final RegistryObject MOON_IRON_ORE = BLOCKS.register("moon_iron_ore", () -> new Block(AbstractBlock.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(3.0F, 3.0F).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject MARS_ICE_SHARD_ORE = BLOCKS.register("mars_ice_shard_ore", () -> new Block(AbstractBlock.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(3.0F, 3.0F).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject MARS_IRON_ORE = BLOCKS.register("mars_iron_ore", () -> new Block(AbstractBlock.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(3.0F, 3.0F).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject MARS_DIAMOND_ORE = BLOCKS.register("mars_diamond_ore", () -> new Block(AbstractBlock.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(3.0F, 3.0F).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject MARS_SILICON_ORE = BLOCKS.register("mars_silicon_ore", () -> new Block(AbstractBlock.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(3.0F, 3.0F).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject MERCURY_IRON_ORE = BLOCKS.register("mercury_iron_ore", () -> new Block(AbstractBlock.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(3.0F, 3.0F).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject VENUS_COAL_ORE = BLOCKS.register("venus_coal_ore", () -> new Block(AbstractBlock.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(3.0F, 3.0F).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject VENUS_DIAMOND_ORE = BLOCKS.register("venus_diamond_ore", () -> new Block(AbstractBlock.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(3.0F, 3.0F).harvestTool(ToolType.PICKAXE).setRequiresTool())); + public static final RegistryObject VENUS_GOLD_ORE = BLOCKS.register("venus_gold_ore", () -> new Block(AbstractBlock.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(3.0F, 3.0F).harvestTool(ToolType.PICKAXE).setRequiresTool())); + + //Generel Block Items + public static final RegistryObject STEEL_BLOCK_ITEM = ITEMS.register("steel_block", () -> new BlockItem(ModInnet.STEEL_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject DESH_BLOCK_ITEM = ITEMS.register("desh_block", () -> new BlockItem(ModInnet.DESH_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject SILICON_BLOCK_ITEM = ITEMS.register("silicon_block", () -> new BlockItem(ModInnet.SILICON_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject IRON_PLATING_BLOCK_ITEM = ITEMS.register("iron_plating_block", () -> new BlockItem(ModInnet.IRON_PLATING_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject RUSTED_IRON_PILLAR_BLOCK_ITEM = ITEMS.register("rusted_iron_pillar_block", () -> new BlockItem(ModInnet.RUSTED_IRON_PILLAR_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject RUSTED_IRON_PLATING_BLOCK_ITEM = ITEMS.register("rusted_iron_plating_block", () -> new BlockItem(ModInnet.RUSTED_IRON_PLATING_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject BLUE_IRON_PLATING_BLOCK_ITEM = ITEMS.register("blue_iron_plating_block", () -> new BlockItem(ModInnet.BLUE_IRON_PLATING_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject INFERNAL_SPIRE_BLOCK_ITEM = ITEMS.register("infernal_spire_block", () -> new BlockItem(ModInnet.INFERNAL_SPIRE_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject IRON_MARK_BLOCK_ITEM = ITEMS.register("iron_mark_block", () -> new BlockItem(ModInnet.IRON_MARK_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject MARS_STONE_ITEM = ITEMS.register("mars_stone", () -> new BlockItem(ModInnet.MARS_STONE.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject MERCURY_STONE_ITEM = ITEMS.register("mercury_stone", () -> new BlockItem(ModInnet.MERCURY_STONE.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject SKY_STONE_ITEM = ITEMS.register("sky_stone", () -> new BlockItem(ModInnet.SKY_STONE.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject MOON_BRICKS_ITEM = ITEMS.register("moon_bricks", () -> new BlockItem(ModInnet.MOON_BRICKS.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject MOON_BRICK_SLAB_ITEM = ITEMS.register("moon_brick_slab", () -> new BlockItem(ModInnet.MOON_BRICK_SLAB.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject MOON_BRICK_STAIRS_ITEM = ITEMS.register("moon_brick_stairs", () -> new BlockItem(ModInnet.MOON_BRICK_STAIRS.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject CRACKED_MOON_BRICKS_ITEM = ITEMS.register("cracked_moon_bricks", () -> new BlockItem(ModInnet.CRACKED_MOON_BRICKS.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject CRACKED_MOON_BRICK_SLAB_ITEM = ITEMS.register("cracked_moon_brick_slab", () -> new BlockItem(ModInnet.CRACKED_MOON_BRICK_SALB.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject CRACKED_MOON_BRICK_STAIRS_ITEM = ITEMS.register("cracked_moon_brick_stairs", () -> new BlockItem(ModInnet.CRACKED_MOON_BRICK_STAIRS.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject MOON_STONE_ITEM = ITEMS.register("moon_stone", () -> new BlockItem(ModInnet.MOON_STONE.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject MERCURY_COBBLESTONE_ITEM = ITEMS.register("mercury_cobblestone", () -> new BlockItem(ModInnet.MERCURY_COBBLESTONE.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject VENUS_SANDSTONE_ITEM = ITEMS.register("venus_sandstone", () -> new BlockItem(ModInnet.VENUS_SANDSTONE.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject VENUS_STONE_ITEM = ITEMS.register("venus_stone", () -> new BlockItem(ModInnet.VENUS_STONE.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + + public static final RegistryObject ROCKET_LAUNCH_PAD_ITEM = ITEMS.register("rocket_launch_pad", () -> new BlockItem(ModInnet.ROCKET_LAUNCH_PAD.get(), new Item.Properties().group(BossToolsItemGroups.tab_normal))); + + public static final RegistryObject MOON_SAND_ITEM = ITEMS.register("moon_sand", () -> new BlockItem(ModInnet.MOON_SAND.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject MARS_SAND_ITEM = ITEMS.register("mars_sand", () -> new BlockItem(ModInnet.MARS_SAND.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject VENUS_SAND_ITEM = ITEMS.register("venus_sand", () -> new BlockItem(ModInnet.VENUS_SAND.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + + public static final RegistryObject MOON_CHESSE_ORE_ITEM = ITEMS.register("moon_cheese_ore", () -> new BlockItem(ModInnet.MOON_CHESSE_ORE.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject MOON_DESH_ORE_ITEM = ITEMS.register("moon_desh_ore", () -> new BlockItem(ModInnet.MOON_DESH_ORE.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject MOON_GLOWSTONE_ITEM = ITEMS.register("moon_glowstone_ore", () -> new BlockItem(ModInnet.MOON_GLOWSTONE_ORE.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject MOON_IRON_ORE_ITEM = ITEMS.register("moon_iron_ore", () -> new BlockItem(ModInnet.MOON_IRON_ORE.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject MARS_ICE_SHARD_ORE_ITEM = ITEMS.register("mars_ice_shard_ore", () -> new BlockItem(ModInnet.MARS_ICE_SHARD_ORE.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject MARS_IRON_ORE_ITEM = ITEMS.register("mars_iron_ore", () -> new BlockItem(ModInnet.MARS_IRON_ORE.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject MARS_DIAMOND_ORE_ITEM = ITEMS.register("mars_diamond_ore", () -> new BlockItem(ModInnet.MARS_DIAMOND_ORE.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject MARS_SILICON_ORE_ITEM = ITEMS.register("mars_silicon_ore", () -> new BlockItem(ModInnet.MARS_SILICON_ORE.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject MERCURY_IRON_ORE_ITEM = ITEMS.register("mercury_iron_ore", () -> new BlockItem(ModInnet.MERCURY_IRON_ORE.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject VENUS_COAL_ORE_ITEM = ITEMS.register("venus_coal_ore", () -> new BlockItem(ModInnet.VENUS_COAL_ORE.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject VENUS_DIAMOND_ORE_ITEM = ITEMS.register("venus_diamond_ore", () -> new BlockItem(ModInnet.VENUS_DIAMOND_ORE.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + public static final RegistryObject VENUS_GOLD_ORE_ITEM = ITEMS.register("venus_gold_ore", () -> new BlockItem(ModInnet.VENUS_GOLD_ORE.get(), new Item.Properties().group(BossToolsItemGroups.tab_blocks))); + + //Effects + public static final RegistryObject OXYGEN_EFFECT = EFFECTS.register("oxygen_bubble_effect", () -> new OxygenEffect(EffectType.BENEFICIAL,3035801)); + + //Space Suit Items + public static final RegistryObject OXYGEN_MASK = ITEMS.register("oxygen_mask", () -> SpaceSuit.OXYGEN_MASK); + public static final RegistryObject SPACE_SUIT = ITEMS.register("space_suit", () -> SpaceSuit.SPACE_SUIT); + public static final RegistryObject SPACE_PANTS = ITEMS.register("space_pants", () -> SpaceSuit.SPACE_PANTS); + public static final RegistryObject SPACE_BOOTS = ITEMS.register("space_boots", () -> SpaceSuit.SPACE_BOOTS); + + + //Netherite Space Suit Items + public static final RegistryObject NETHERITE_OXYGEN_MASK = ITEMS.register("netherite_oxygen_mask", () -> NetheriteSpaceSuit.NETHERITE_OXYGEN_MASK); + public static final RegistryObject NETHERITE_SPACE_SUIT = ITEMS.register("netherite_space_suit", () -> NetheriteSpaceSuit.NETHERITE_SPACE_SUIT); + public static final RegistryObject NETHERITE_SPACE_PANTS = ITEMS.register("netherite_space_pants", () -> NetheriteSpaceSuit.NETHERITE_SPACE_PANTS); + public static final RegistryObject NETHERITE_SPACE_BOOTS = ITEMS.register("netherite_space_boots", () -> NetheriteSpaceSuit.NETHERITE_SPACE_BOOTS); + + //Flag Items + public static final RegistryObject FLAG_ITEM = ITEMS.register("flag", () -> new TallBlockItem(FLAG_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_flags))); + public static final RegistryObject FLAG_BLUE_ITEM = ITEMS.register("flag_blue", () -> new TallBlockItem(FLAG_BLUE_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_flags))); + public static final RegistryObject FLAG_BROWN_ITEM = ITEMS.register("flag_brown", () -> new TallBlockItem(FLAG_BROWN_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_flags))); + public static final RegistryObject FLAG_CYAN_ITEM = ITEMS.register("flag_cyan", () -> new TallBlockItem(FLAG_CYAN_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_flags))); + public static final RegistryObject FLAG_GRAY_ITEM = ITEMS.register("flag_gray", () -> new TallBlockItem(FLAG_GRAY_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_flags))); + public static final RegistryObject FLAG_GREEN_ITEM = ITEMS.register("flag_green", () -> new TallBlockItem(FLAG_GREEN_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_flags))); + public static final RegistryObject FLAG_LIGHT_BLUE_ITEM = ITEMS.register("flag_light_blue", () -> new TallBlockItem(FLAG_LIGHT_BLUE_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_flags))); + public static final RegistryObject FLAG_LIME_ITEM = ITEMS.register("flag_lime", () -> new TallBlockItem(FLAG_LIME_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_flags))); + public static final RegistryObject FLAG_MAGENTA_ITEM = ITEMS.register("flag_magenta", () -> new TallBlockItem(FLAG_MAGENTA_BLOCk.get(), new Item.Properties().group(BossToolsItemGroups.tab_flags))); + public static final RegistryObject FLAG_ORANGE_ITEM = ITEMS.register("flag_orange", () -> new TallBlockItem(FLAG_ORANGE_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_flags))); + public static final RegistryObject FLAG_PINK_ITEM = ITEMS.register("flag_pink", () -> new TallBlockItem(FLAG_PINK_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_flags))); + public static final RegistryObject FLAG_PURPLE_ITEM = ITEMS.register("flag_purple", () -> new TallBlockItem(FLAG_PURPLE_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_flags))); + public static final RegistryObject FLAG_RED_ITEM = ITEMS.register("flag_red", () -> new TallBlockItem(FLAG_RED_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_flags))); + public static final RegistryObject FLAG_YELLOW_ITEM = ITEMS.register("flag_yellow", () -> new TallBlockItem(FLAG_YELLOW_BLOCK.get(), new Item.Properties().group(BossToolsItemGroups.tab_flags))); + + //GUIS + public static final RegistryObject> ROCKET_GUI = GUIS.register("rocket_gui", () -> new ContainerType<>(new RocketGui.GuiContainerFactory())); + public static final RegistryObject> BLAST_FURNACE_GUI = GUIS.register("blast_furnace_gui", () -> new ContainerType<>(new BlastFurnaceGui.GuiContainerFactory())); + public static final RegistryObject> COMPRESSOR_GUI = GUIS.register("compressor_gui", () -> new ContainerType<>(new CompressorGui.GuiContainerFactory())); + public static final RegistryObject> FUEL_REFINERY_GUI = GUIS.register("fuel_refinery_gui", () -> new ContainerType<>(new FuelRefineryGui.GuiContainerFactory())); + public static final RegistryObject> COAL_GENERATOR_GUI = GUIS.register("coal_generator_gui", () -> new ContainerType<>(new CoalGeneratorGui.GuiContainerFactory())); + public static final RegistryObject> NASA_WORKBENCH_GUI = GUIS.register("nasa_workbench_gui", () -> new ContainerType<>(new NasaWorkbenchGui.GuiContainerFactory())); + public static final RegistryObject> OXYGEN_LOADER_GUI = GUIS.register("oxygen_loader_gui", () -> new ContainerType<>(new OxygenLoaderGui.GuiContainerFactory())); + public static final RegistryObject> SOLAR_PANEL_GUI = GUIS.register("solar_panel_gui", () -> new ContainerType<>(new SolarPanelGui.GuiContainerFactory())); + public static final RegistryObject> WATER_PUMP_GUI = GUIS.register("water_pump_gui", () -> new ContainerType<>(new WaterPumpGui.GuiContainerFactory())); + public static final RegistryObject> OXYGEN_BUBBLE_DISTRIBUTOR_GUI = GUIS.register("oxygen_bubble_distributor_gui", () -> new ContainerType<>(new OxygenBubbleDistributorGui.GuiContainerFactory())); + public static final RegistryObject> LANDER_GUI = GUIS.register("lander_gui", () -> new ContainerType<>(new LanderGui.GuiContainerFactory())); + public static final RegistryObject> ROVER_GUI = GUIS.register("rover_gui", () -> new ContainerType<>(new RoverGui.GuiContainerFactory())); + public static final RegistryObject> PLANET_SELECTION_GUI = GUIS.register("planet_selection_gui", () -> new ContainerType<>(new PlanetSelectionGui.GuiContainerFactory())); + + + //Particle + public static final RegistryObject> VENUS_RAIN_PARTICLE = PARTICLES.register("venus_rain", () -> new BasicParticleType(true)); + public static final RegistryObject> LARGE_FLAME_PARTICLE = PARTICLES.register("large_flame", () -> new BasicParticleType(true)); + public static final RegistryObject> SMOKE_PARTICLE = PARTICLES.register("smoke", () -> new BasicParticleType(true)); + + + //Recpies + public static final DeferredRegister> RECIPE_SERIALIZERS = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, BossToolsMod.ModId); + public static final RegistryObject> RECIPE_SERIALIZER_BLASTING = RECIPE_SERIALIZERS.register("blasting", () -> new BlastingRecipeSerializer()); + public static final RegistryObject> RECIPE_SERIALIZER_COMPRESSING = RECIPE_SERIALIZERS.register("compressing", () -> new CompressingRecipeSerializer()); + public static final RegistryObject> RECIPE_SERIALIZER_GENERATING = RECIPE_SERIALIZERS.register("generating", () -> new GeneratingRecipeSerializer()); + public static final RegistryObject> RECIPE_SERIALIZER_OXYGENLOADER = RECIPE_SERIALIZERS.register("oxygenloader", () -> new OxygenLoaderRecipeSerializer()); + public static final RegistryObject> RECIPE_SERIALIZER_OXYGENBUBBLEDISTRIBUTOR = RECIPE_SERIALIZERS.register("oxygenbubbledistributor", () -> new OxygenBubbleDistributorRecipeSerializer()); + public static final RegistryObject> RECIPE_SERIALIZER_WORKBENCHING = RECIPE_SERIALIZERS.register("workbenching", () -> new WorkbenchingRecipeSerializer()); + public static final RegistryObject> RECIPE_SERIALIZER_FUELREFINING = RECIPE_SERIALIZERS.register("fuelrefining", () -> new FuelRefiningRecipeSerializer()); + + //RocketParts + public static final IForgeRegistry ROCKET_PARTS_REGISTRY = new RegistryBuilder().setType(RocketPart.class).setName(new ResourceLocation(BossToolsMod.ModId, "rocket_part")).create(); + public static final DeferredRegister ROCKET_PARTS = DeferredRegister.create(ROCKET_PARTS_REGISTRY, BossToolsMod.ModId); + + public static final RegistryObject ROCKET_PART_EMPTY = ROCKET_PARTS.register("emtpy", () -> RocketPart.EMPTY); + public static final RegistryObject ROCKET_PART_NOSE = ROCKET_PARTS.register("nose", () -> new RocketPart(1)); + public static final RegistryObject ROCKET_PART_BODY = ROCKET_PARTS.register("body", () -> new RocketPart(6)); + public static final RegistryObject ROCKET_PART_TANK = ROCKET_PARTS.register("tank", () -> new RocketPart(2)); + public static final RegistryObject ROCKET_PART_FIN_LEFT = ROCKET_PARTS.register("fin_left", () -> new RocketPart(2)); + public static final RegistryObject ROCKET_PART_FIN_RIGHT = ROCKET_PARTS.register("fin_right", () -> new RocketPart(2)); + public static final RegistryObject ROCKET_PART_ENGINE = ROCKET_PARTS.register("engine", () -> new RocketPart(1)); + + //DamgeSources + public static final DamageSource DAMAGE_SOURCE_OXYGEN = new DamageSource("oxygen").setDamageBypassesArmor(); + public static final DamageSource DAMAGE_SOURCE_ACID_RAIN = new DamageSource("venus.acid").setDamageBypassesArmor(); + + //ICE SPIKE + public static ConfiguredFeature ICE_SPIKE; + public static MarsIceSpikeFeature MARS_ICE_SPIKE; + + //VENUS DELTAS + public static ConfiguredFeature DELTAS; + public static ConfiguredFeature DELTAS2; + public static VenusDeltas VENUS_DELTAS; + + //Desert Builder + public static SurfaceBuilder DESERT_SURFACE_BUILDER; + + @SubscribeEvent + public static void RegistryFeature(RegistryEvent.Register> feature) { + MARS_ICE_SPIKE = new MarsIceSpikeFeature(NoFeatureConfig.field_236558_a_); + MARS_ICE_SPIKE.setRegistryName(BossToolsMod.ModId, "mars_ice_spike"); + feature.getRegistry().register(MARS_ICE_SPIKE); + + //VENUS DELTAS + VENUS_DELTAS = new VenusDeltas(ColumnConfig.CODEC); + VENUS_DELTAS.setRegistryName(BossToolsMod.ModId, "venus_deltas"); + feature.getRegistry().register(VENUS_DELTAS); + } + + @SubscribeEvent + public static void RegistrySurfaceBuilder(RegistryEvent.Register> event) { + //Desert Builder + DESERT_SURFACE_BUILDER = new DesertSurfaceBuilder(SurfaceBuilderConfig.field_237203_a_); + DESERT_SURFACE_BUILDER.setRegistryName(BossToolsMod.ModId, "desert_surface_builder"); + event.getRegistry().register(DESERT_SURFACE_BUILDER); + } + + public static ConfiguredFeature registerFeature(String key, ConfiguredFeature configuredFeature) { + return Registry.register(WorldGenRegistries.CONFIGURED_FEATURE, key, configuredFeature); + } + + @SubscribeEvent + public static void setup(final FMLCommonSetupEvent event) { + event.enqueueWork(() -> { + STStructures.setupStructures(); + STStructures2.setupStructures(); + STConfiguredStructures.registerConfiguredStructures(); + }); + } + + public static void biomeModification(final BiomeLoadingEvent event) { + RegistryKey.getOrCreateKey(Registry.BIOME_KEY, event.getName()); + if (event.getName().equals(new ResourceLocation(BossToolsMod.ModId ,"moon")) && Config.AlienVillageStructure) { + event.getGeneration().getStructures().add(() -> STConfiguredStructures.ALIEN_VILLAGE); + } + if (event.getName().equals(new ResourceLocation("plains")) && Config.MeteorStructure) { + event.getGeneration().getStructures().add(() -> STConfiguredStructures.METEOR); + } + if (event.getName().equals(new ResourceLocation("snowy_tundra")) && Config.MeteorStructure) { + event.getGeneration().getStructures().add(() -> STConfiguredStructures.METEOR); + } + if (event.getName().equals(new ResourceLocation("forest")) && Config.MeteorStructure) { + event.getGeneration().getStructures().add(() -> STConfiguredStructures.METEOR); + } + if (event.getName().equals(new ResourceLocation("desert")) && Config.MeteorStructure) { + event.getGeneration().getStructures().add(() -> STConfiguredStructures.METEOR); + } + if (event.getName().equals(new ResourceLocation(BossToolsMod.ModId ,"venus")) && Config.VenusBulletStructure) { + event.getGeneration().getStructures().add(() -> STConfiguredStructures.VENUS_BULLET); + } + if (event.getName().equals(new ResourceLocation(BossToolsMod.ModId ,"venus")) && Config.VenusTowerStructure) { + event.getGeneration().getStructures().add(() -> STConfiguredStructures.VENUS_TOWER); + } + if (event.getName().equals(new ResourceLocation(BossToolsMod.ModId ,"venus")) && Config.CrimsonVillageStructure) { + event.getGeneration().getStructures().add(() -> STConfiguredStructures.CRIMSON); + } + if (event.getName().equals(new ResourceLocation("ocean")) && Config.OILWellStructure) { + event.getGeneration().getStructures().add(() -> STConfiguredStructures.OIL); + } + if (event.getName().equals(new ResourceLocation("deep_cold_ocean")) && Config.OILWellStructure) { + event.getGeneration().getStructures().add(() -> STConfiguredStructures.OIL); + } + if (event.getName().equals(new ResourceLocation("deep_ocean")) && Config.OILWellStructure) { + event.getGeneration().getStructures().add(() -> STConfiguredStructures.OIL); + } + if (event.getName().equals(new ResourceLocation("lukewarm_ocean")) && Config.OILWellStructure) { + event.getGeneration().getStructures().add(() -> STConfiguredStructures.OIL); + } + } + + private static Method GETCODEC_METHOD; + + public static void addDimensionalSpacing(final WorldEvent.Load event) { + if (event.getWorld() instanceof ServerWorld) { + ServerWorld serverWorld = (ServerWorld) event.getWorld(); + try { + if (GETCODEC_METHOD == null) + GETCODEC_METHOD = ObfuscationReflectionHelper.findMethod(ChunkGenerator.class, "func_230347_a_"); + ResourceLocation cgRL = Registry.CHUNK_GENERATOR_CODEC.getKey((Codec) GETCODEC_METHOD.invoke(serverWorld.getChunkProvider().generator)); + if (cgRL != null && cgRL.getNamespace().equals("terraforged")) return; + } catch (Exception e) { + + } + if(serverWorld.getChunkProvider().getChunkGenerator() instanceof FlatChunkGenerator || serverWorld.getDimensionType().equals(World.OVERWORLD)){ + return; + } + Map, StructureSeparationSettings> tempMap = new HashMap<>(serverWorld.getChunkProvider().generator.func_235957_b_().func_236195_a_()); + tempMap.putIfAbsent(STStructures.ALIEN_VILLAGE.get(), DimensionStructuresSettings.field_236191_b_.get(STStructures.ALIEN_VILLAGE.get())); + serverWorld.getChunkProvider().generator.func_235957_b_().field_236193_d_ = tempMap; + + Map, StructureSeparationSettings> tempMap1 = new HashMap<>(serverWorld.getChunkProvider().generator.func_235957_b_().func_236195_a_()); + tempMap1.putIfAbsent(STStructures.METEOR.get(), DimensionStructuresSettings.field_236191_b_.get(STStructures.METEOR.get())); + serverWorld.getChunkProvider().generator.func_235957_b_().field_236193_d_ = tempMap1; + + Map, StructureSeparationSettings> tempMap2 = new HashMap<>(serverWorld.getChunkProvider().generator.func_235957_b_().func_236195_a_()); + tempMap2.putIfAbsent(STStructures2.VENUS_BULLET.get(), DimensionStructuresSettings.field_236191_b_.get(STStructures2.VENUS_BULLET.get())); + serverWorld.getChunkProvider().generator.func_235957_b_().field_236193_d_ = tempMap2; + + Map, StructureSeparationSettings> tempMap3 = new HashMap<>(serverWorld.getChunkProvider().generator.func_235957_b_().func_236195_a_()); + tempMap3.putIfAbsent(STStructures2.VENUS_TOWER.get(), DimensionStructuresSettings.field_236191_b_.get(STStructures2.VENUS_TOWER.get())); + serverWorld.getChunkProvider().generator.func_235957_b_().field_236193_d_ = tempMap3; + + Map, StructureSeparationSettings> tempMap4 = new HashMap<>(serverWorld.getChunkProvider().generator.func_235957_b_().func_236195_a_()); + tempMap4.putIfAbsent(STStructures.OIL.get(), DimensionStructuresSettings.field_236191_b_.get(STStructures.OIL.get())); + serverWorld.getChunkProvider().generator.func_235957_b_().field_236193_d_ = tempMap4; + + Map, StructureSeparationSettings> tempMap5 = new HashMap<>(serverWorld.getChunkProvider().generator.func_235957_b_().func_236195_a_()); + tempMap5.putIfAbsent(STStructures2.CRIMSON.get(), DimensionStructuresSettings.field_236191_b_.get(STStructures2.CRIMSON.get())); + serverWorld.getChunkProvider().generator.func_235957_b_().field_236193_d_ = tempMap5; + } + } + + @SubscribeEvent + public static void init(final FMLCommonSetupEvent event) { + DeferredWorkQueue.runLater(() -> { + GlobalEntityTypeAttributes.put((EntityType) ALIEN.get(), AlienEntity.setCustomAttributes().create()); + GlobalEntityTypeAttributes.put((EntityType) PYGRO.get(), PygroEntity.setCustomAttributes().create()); + GlobalEntityTypeAttributes.put((EntityType) MOGLER.get(), MoglerEntity.setCustomAttributes().create()); + GlobalEntityTypeAttributes.put((EntityType) ALIEN_ZOMBIE.get(), AlienZombieEntity.setCustomAttributes().create()); + GlobalEntityTypeAttributes.put((EntityType) STAR_CRAWLER.get(), StarCrawlerEntity.setCustomAttributes().create()); + GlobalEntityTypeAttributes.put((EntityType) TIER_1_ROCKET.get(), RocketTier1Entity.setCustomAttributes().create()); + GlobalEntityTypeAttributes.put((EntityType) TIER_2_ROCKET.get(), RocketTier2Entity.setCustomAttributes().create()); + GlobalEntityTypeAttributes.put((EntityType) TIER_3_ROCKET.get(), RocketTier3Entity.setCustomAttributes().create()); + GlobalEntityTypeAttributes.put((EntityType) LANDER.get(), LanderEntity.setCustomAttributes().create()); + GlobalEntityTypeAttributes.put((EntityType) ROVER.get(), RoverEntity.setCustomAttributes().create()); + }); + event.enqueueWork(() -> { + + BossToolsRecipeTypes.init(); + CapabilityOxygen.register(); + + ICE_SPIKE = registerFeature("mars_ice_spike", ModInnet.MARS_ICE_SPIKE.withConfiguration(IFeatureConfig.NO_FEATURE_CONFIG).withPlacement(Features.Placements.HEIGHTMAP_PLACEMENT).func_242731_b(2)); + //Venus Deltas + DELTAS = registerFeature("venus_deltas_1", ModInnet.VENUS_DELTAS.withConfiguration(new ColumnConfig(FeatureSpread.func_242252_a(1), FeatureSpread.func_242253_a(1, 8))).withPlacement(Placement.COUNT_MULTILAYER.configure(new FeatureSpreadConfig(4)))); + //Venus Deltas2 + DELTAS2 = registerFeature("venus_deltas_2", ModInnet.VENUS_DELTAS.withConfiguration(new ColumnConfig(FeatureSpread.func_242253_a(2, 1), FeatureSpread.func_242253_a(5, 6))).withPlacement(Placement.COUNT_MULTILAYER.configure(new FeatureSpreadConfig(1)))); + }); + } + + public static void biomesLoading(final BiomeLoadingEvent event) { + if (event.getName().getPath().equals(BiomeRegistry.mars_ice_spike.getRegistryName().getPath())){ + event.getGeneration().withFeature(GenerationStage.Decoration.SURFACE_STRUCTURES, ICE_SPIKE); + } + //Venus Deltas + if (event.getName().getPath().equals(BiomeRegistry.infernal_venus_barrens.getRegistryName().getPath())){ + event.getGeneration().withFeature(GenerationStage.Decoration.SURFACE_STRUCTURES, DELTAS); + event.getGeneration().withFeature(GenerationStage.Decoration.SURFACE_STRUCTURES, DELTAS2); + } + //Desert Structure Builder + if (event.getName().getPath().equals(BiomeRegistry.venus.getRegistryName().getPath())){ + event.getGeneration().withSurfaceBuilder(ModInnet.DESERT_SURFACE_BUILDER.func_242929_a(new SurfaceBuilderConfig(ModInnet.VENUS_SAND.get().getDefaultState(), ModInnet.VENUS_SAND.get().getDefaultState(), ModInnet.VENUS_SANDSTONE.get().getDefaultState()))); + } + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/armor/NetheriteSpaceSuit.java b/src/main/java/net/mrscauthd/boss_tools/armor/NetheriteSpaceSuit.java new file mode 100644 index 000000000..21c862c32 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/armor/NetheriteSpaceSuit.java @@ -0,0 +1,128 @@ +package net.mrscauthd.boss_tools.armor; + +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.armormaterial.SpaceSuitNetheriteArmorMaterial; +import net.mrscauthd.boss_tools.entity.renderer.spacesuit.SpaceSuitModel; +import net.mrscauthd.boss_tools.events.Methodes; +import net.mrscauthd.boss_tools.capability.IOxygenStorage; +import net.mrscauthd.boss_tools.capability.OxygenUtil; +import net.mrscauthd.boss_tools.capability.SpaceSuitCapabilityProvider; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.itemgroup.BossToolsItemGroups; + +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.world.World; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Item; +import net.minecraft.item.ArmorItem; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.Entity; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.client.renderer.entity.model.BipedModel; + +import java.util.List; + +public class NetheriteSpaceSuit { + + public static ArmorItem NETHERITE_OXYGEN_MASK = new ArmorItem(SpaceSuitNetheriteArmorMaterial.ARMOR_MATERIAL, EquipmentSlotType.HEAD, new Item.Properties().group(BossToolsItemGroups.tab_normal).isImmuneToFire()) { + @Override + @OnlyIn(Dist.CLIENT) + public BipedModel getArmorModel(LivingEntity living, ItemStack stack, EquipmentSlotType slot, BipedModel defaultModel) { + BipedModel armorModel = new BipedModel(1); + armorModel.bipedHead = new SpaceSuitModel.SPACE_SUIT_P1().Head; + armorModel.isSneak = living.isSneaking(); + armorModel.isSitting = defaultModel.isSitting; + armorModel.isChild = living.isChild(); + return armorModel; + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlotType slot, String type) { + return BossToolsMod.ModId + ":textures/models/armor/netherite_space_suit_head.png"; + } + }; + + public static ArmorItem NETHERITE_SPACE_SUIT = new ArmorItem(SpaceSuitNetheriteArmorMaterial.ARMOR_MATERIAL, EquipmentSlotType.CHEST, new Item.Properties().group(BossToolsItemGroups.tab_normal).isImmuneToFire()) { + @Override + @OnlyIn(Dist.CLIENT) + public BipedModel getArmorModel(LivingEntity living, ItemStack stack, EquipmentSlotType slot, BipedModel defaultModel) { + BipedModel armorModel = new BipedModel(1); + armorModel.bipedBody = new SpaceSuitModel.SPACE_SUIT_P1().Body; + armorModel.bipedLeftArm = new SpaceSuitModel.SPACE_SUIT_P1().ArmLeft; + armorModel.bipedRightArm = new SpaceSuitModel.SPACE_SUIT_P1().ArmRight; + armorModel.isSneak = living.isSneaking(); + armorModel.isSitting = defaultModel.isSitting; + armorModel.isChild = living.isChild(); + return armorModel; + } + + @Override + public ICapabilityProvider initCapabilities(ItemStack stack, CompoundNBT nbt) { + return new SpaceSuitCapabilityProvider(stack, 48000); + } + + @Override + public void addInformation(ItemStack itemstack, World world, List list, ITooltipFlag flag) { + super.addInformation(itemstack, world, list, flag); + IOxygenStorage oxygenStorage = OxygenUtil.getItemStackOxygenStorage(itemstack); + list.add(GaugeTextHelper.buildSpacesuitOxygenTooltip(oxygenStorage)); + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlotType slot, String type) { + return BossToolsMod.ModId + ":textures/models/armor/netherite_space_suit.png"; + } + + private double OXYGEN_TIMER = 0; + + @Override + public void onArmorTick(ItemStack itemstack, World world, PlayerEntity player) { + Methodes.extractArmorOxygenUsingTimer(itemstack, player); + } + }; + + public static ArmorItem NETHERITE_SPACE_PANTS = new ArmorItem(SpaceSuitNetheriteArmorMaterial.ARMOR_MATERIAL, EquipmentSlotType.LEGS, new Item.Properties().group(BossToolsItemGroups.tab_normal).isImmuneToFire()) { + @Override + @OnlyIn(Dist.CLIENT) + public BipedModel getArmorModel(LivingEntity living, ItemStack stack, EquipmentSlotType slot, BipedModel defaultModel) { + BipedModel armorModel = new BipedModel(1); + armorModel.bipedLeftLeg = new SpaceSuitModel.SPACE_SUIT_P2().LegLeft; + armorModel.bipedRightLeg = new SpaceSuitModel.SPACE_SUIT_P2().LegRight; + armorModel.isSneak = living.isSneaking(); + armorModel.isSitting = defaultModel.isSitting; + armorModel.isChild = living.isChild(); + return armorModel; + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlotType slot, String type) { + return BossToolsMod.ModId + ":textures/models/armor/netherite_space_suit_legs.png"; + } + }; + + public static ArmorItem NETHERITE_SPACE_BOOTS = new ArmorItem(SpaceSuitNetheriteArmorMaterial.ARMOR_MATERIAL, EquipmentSlotType.FEET, new Item.Properties().group(BossToolsItemGroups.tab_normal).isImmuneToFire()) { + @Override + @OnlyIn(Dist.CLIENT) + public BipedModel getArmorModel(LivingEntity living, ItemStack stack, EquipmentSlotType slot, BipedModel defaultModel) { + BipedModel armorModel = new BipedModel(1); + armorModel.bipedLeftLeg = new SpaceSuitModel.SPACE_SUIT_P1().FootLeft; + armorModel.bipedRightLeg = new SpaceSuitModel.SPACE_SUIT_P1().FootRight; + armorModel.isSneak = living.isSneaking(); + armorModel.isSitting = defaultModel.isSitting; + armorModel.isChild = living.isChild(); + return armorModel; + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlotType slot, String type) { + return BossToolsMod.ModId + ":textures/models/armor/netherite_space_suit.png"; + } + }; +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/armor/SpaceSuit.java b/src/main/java/net/mrscauthd/boss_tools/armor/SpaceSuit.java new file mode 100644 index 000000000..d9311688f --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/armor/SpaceSuit.java @@ -0,0 +1,129 @@ +package net.mrscauthd.boss_tools.armor; + +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.armormaterial.SpaceSuitArmorMaterial; +import net.mrscauthd.boss_tools.entity.renderer.spacesuit.SpaceSuitModel; +import net.mrscauthd.boss_tools.events.Methodes; +import net.mrscauthd.boss_tools.capability.IOxygenStorage; +import net.mrscauthd.boss_tools.capability.OxygenUtil; +import net.mrscauthd.boss_tools.capability.SpaceSuitCapabilityProvider; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.itemgroup.BossToolsItemGroups; + +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.world.World; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Item; +import net.minecraft.item.ArmorItem; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.Entity; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.client.renderer.entity.model.BipedModel; + +import java.util.List; + +public class SpaceSuit { + + public static ArmorItem OXYGEN_MASK = new ArmorItem(SpaceSuitArmorMaterial.ArmorMaterial, EquipmentSlotType.HEAD, new Item.Properties().group(BossToolsItemGroups.tab_normal)) { + @Override + @OnlyIn(Dist.CLIENT) + public BipedModel getArmorModel(LivingEntity living, ItemStack stack, EquipmentSlotType slot, BipedModel defaultModel) { + BipedModel armorModel = new BipedModel(1); + armorModel.bipedHead = new SpaceSuitModel.SPACE_SUIT_P1().Head; + armorModel.isSneak = living.isSneaking(); + armorModel.isSitting = defaultModel.isSitting; + armorModel.isChild = living.isChild(); + return armorModel; + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlotType slot, String type) { + return BossToolsMod.ModId + ":textures/models/armor/space_suit_head.png"; + } + }; + + public static ArmorItem SPACE_SUIT = new ArmorItem(SpaceSuitArmorMaterial.ArmorMaterial, EquipmentSlotType.CHEST, new Item.Properties().group(BossToolsItemGroups.tab_normal)) { + @Override + @OnlyIn(Dist.CLIENT) + public BipedModel getArmorModel(LivingEntity living, ItemStack stack, EquipmentSlotType slot, BipedModel defaultModel) { + BipedModel armorModel = new BipedModel(1); + armorModel.bipedBody = new SpaceSuitModel.SPACE_SUIT_P1().Body; + armorModel.bipedLeftArm = new SpaceSuitModel.SPACE_SUIT_P1().ArmLeft; + armorModel.bipedRightArm = new SpaceSuitModel.SPACE_SUIT_P1().ArmRight; + armorModel.isSneak = living.isSneaking(); + armorModel.isSitting = defaultModel.isSitting; + armorModel.isChild = living.isChild(); + return armorModel; + } + + @Override + public ICapabilityProvider initCapabilities(ItemStack stack, CompoundNBT nbt) { + return new SpaceSuitCapabilityProvider(stack, 48000); + } + + @Override + public void addInformation(ItemStack itemstack, World world, List list, ITooltipFlag flag) { + super.addInformation(itemstack, world, list, flag); + IOxygenStorage oxygenStorage = OxygenUtil.getItemStackOxygenStorage(itemstack); + list.add(GaugeTextHelper.buildSpacesuitOxygenTooltip(oxygenStorage)); + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlotType slot, String type) { + return BossToolsMod.ModId + ":textures/models/armor/space_suit.png"; + } + + private double OXYGEN_TIMER = 0; + + @Override + public void onArmorTick(ItemStack itemstack, World world, PlayerEntity player) { + Methodes.extractArmorOxygenUsingTimer(itemstack, player); + } + + }; + + public static ArmorItem SPACE_PANTS = new ArmorItem(SpaceSuitArmorMaterial.ArmorMaterial, EquipmentSlotType.LEGS, new Item.Properties().group(BossToolsItemGroups.tab_normal)) { + @Override + @OnlyIn(Dist.CLIENT) + public BipedModel getArmorModel(LivingEntity living, ItemStack stack, EquipmentSlotType slot, BipedModel defaultModel) { + BipedModel armorModel = new BipedModel(1); + armorModel.bipedLeftLeg = new SpaceSuitModel.SPACE_SUIT_P2().LegLeft; + armorModel.bipedRightLeg = new SpaceSuitModel.SPACE_SUIT_P2().LegRight; + armorModel.isSneak = living.isSneaking(); + armorModel.isSitting = defaultModel.isSitting; + armorModel.isChild = living.isChild(); + return armorModel; + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlotType slot, String type) { + return BossToolsMod.ModId + ":textures/models/armor/space_suit_legs.png"; + } + }; + + public static ArmorItem SPACE_BOOTS = new ArmorItem(SpaceSuitArmorMaterial.ArmorMaterial, EquipmentSlotType.FEET, new Item.Properties().group(BossToolsItemGroups.tab_normal)) { + @Override + @OnlyIn(Dist.CLIENT) + public BipedModel getArmorModel(LivingEntity living, ItemStack stack, EquipmentSlotType slot, BipedModel defaultModel) { + BipedModel armorModel = new BipedModel(1); + armorModel.bipedLeftLeg = new SpaceSuitModel.SPACE_SUIT_P1().FootLeft; + armorModel.bipedRightLeg = new SpaceSuitModel.SPACE_SUIT_P1().FootRight; + armorModel.isSneak = living.isSneaking(); + armorModel.isSitting = defaultModel.isSitting; + armorModel.isChild = living.isChild(); + return armorModel; + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlotType slot, String type) { + return BossToolsMod.ModId + ":textures/models/armor/space_suit.png"; + } + }; +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/armormaterial/SpaceSuitArmorMaterial.java b/src/main/java/net/mrscauthd/boss_tools/armormaterial/SpaceSuitArmorMaterial.java new file mode 100644 index 000000000..926ab3f63 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/armormaterial/SpaceSuitArmorMaterial.java @@ -0,0 +1,54 @@ +package net.mrscauthd.boss_tools.armormaterial; + +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.IArmorMaterial; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.registries.ForgeRegistries; + +public class SpaceSuitArmorMaterial { + public static IArmorMaterial ArmorMaterial = new IArmorMaterial() { + @Override + public int getDurability(EquipmentSlotType slot) { + return new int[]{15, 18, 16, 14}[slot.getIndex()] * 10; + } + + @Override + public int getDamageReductionAmount(EquipmentSlotType slot) { + return new int[]{4, 5, 4, 4}[slot.getIndex()]; + } + + @Override + public int getEnchantability() { + return 0; + } + + @Override + public net.minecraft.util.SoundEvent getSoundEvent() { + return ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("item.armor.equip_leather")); + } + + @Override + public Ingredient getRepairMaterial() { + return Ingredient.EMPTY; + } + + @OnlyIn(Dist.CLIENT) + @Override + public String getName() { + return "space_suit"; + } + + @Override + public float getToughness() { + return 0f; + } + + @Override + public float getKnockbackResistance() { + return 0f; + } + }; +} diff --git a/src/main/java/net/mrscauthd/boss_tools/armormaterial/SpaceSuitNetheriteArmorMaterial.java b/src/main/java/net/mrscauthd/boss_tools/armormaterial/SpaceSuitNetheriteArmorMaterial.java new file mode 100644 index 000000000..70fd9f68d --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/armormaterial/SpaceSuitNetheriteArmorMaterial.java @@ -0,0 +1,54 @@ +package net.mrscauthd.boss_tools.armormaterial; + +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.IArmorMaterial; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.registries.ForgeRegistries; + +public class SpaceSuitNetheriteArmorMaterial { + public static IArmorMaterial ARMOR_MATERIAL = new IArmorMaterial() { + @Override + public int getDurability(EquipmentSlotType slot) { + return new int[]{48, 55, 60, 40}[slot.getIndex()] * 10; + } + + @Override + public int getDamageReductionAmount(EquipmentSlotType slot) { + return new int[]{3, 6, 8, 3}[slot.getIndex()]; + } + + @Override + public int getEnchantability() { + return 0; + } + + @Override + public net.minecraft.util.SoundEvent getSoundEvent() { + return ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("item.armor.equip_leather")); + } + + @Override + public Ingredient getRepairMaterial() { + return Ingredient.EMPTY; + } + + @OnlyIn(Dist.CLIENT) + @Override + public String getName() { + return "netherite_space_suit"; + } + + @Override + public float getToughness() { + return 0f; + } + + @Override + public float getKnockbackResistance() { + return 0f; + } + }; +} diff --git a/src/main/java/net/mrscauthd/boss_tools/block/CoalLanternBlock.java b/src/main/java/net/mrscauthd/boss_tools/block/CoalLanternBlock.java new file mode 100644 index 000000000..c8eafe82e --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/block/CoalLanternBlock.java @@ -0,0 +1,25 @@ +package net.mrscauthd.boss_tools.block; + +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.BlockState; +import net.minecraft.block.LanternBlock; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.world.World; + +public class CoalLanternBlock extends LanternBlock { + public CoalLanternBlock(AbstractBlock.Properties properties) { + super(properties); + this.setDefaultState(this.stateContainer.getBaseState().with(HANGING, Boolean.valueOf(false)).with(WATERLOGGED, Boolean.valueOf(false))); + } + + @Override + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity entity, Hand hand, BlockRayTraceResult hit) { + super.onBlockActivated(state, world, pos, entity, hand, hit); + return ActionResultType.SUCCESS; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/block/CoalTorchBlock.java b/src/main/java/net/mrscauthd/boss_tools/block/CoalTorchBlock.java new file mode 100644 index 000000000..fbf05ed62 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/block/CoalTorchBlock.java @@ -0,0 +1,44 @@ +package net.mrscauthd.boss_tools.block; + +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.entity.player.PlayerEntity; + +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; + +public class CoalTorchBlock extends Block { + protected static final VoxelShape SHAPE = Block.makeCuboidShape(6.0D, 0.0D, 6.0D, 10.0D, 10.0D, 10.0D); + + public CoalTorchBlock(AbstractBlock.Properties properties) { + super(properties); + } + @Override + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity entity, Hand hand, BlockRayTraceResult hit) { + super.onBlockActivated(state, world, pos, entity, hand, hit); + return ActionResultType.SUCCESS; + } + + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { + return SHAPE; + } + + public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) { + return facing == Direction.DOWN && !this.isValidPosition(stateIn, worldIn, currentPos) ? Blocks.AIR.getDefaultState() : super.updatePostPlacement(stateIn, facing, facingState, worldIn, currentPos, facingPos); + } + + public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) { + return hasEnoughSolidSide(worldIn, pos.down(), Direction.UP); + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/block/RocketLaunchPad.java b/src/main/java/net/mrscauthd/boss_tools/block/RocketLaunchPad.java new file mode 100644 index 000000000..a6c90d70e --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/block/RocketLaunchPad.java @@ -0,0 +1,149 @@ +package net.mrscauthd.boss_tools.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.IWaterLoggable; +import net.minecraft.fluid.FluidState; +import net.minecraft.fluid.Fluids; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.pathfinding.PathType; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.StateContainer; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class RocketLaunchPad extends Block implements IWaterLoggable { + + public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; + public static final BooleanProperty STAGE = BlockStateProperties.LIT; + + public RocketLaunchPad(Properties properties) { + super(properties); + this.setDefaultState(this.stateContainer.getBaseState().with(WATERLOGGED, false).with(STAGE, false)); + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + boolean flag = context.getWorld().getFluidState(context.getPos()).getFluid() == Fluids.WATER; + return this.getDefaultState().with(WATERLOGGED, flag); + } + + @Override + public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) { + if (stateIn.get(WATERLOGGED)) { + worldIn.getPendingFluidTicks().scheduleTick(currentPos, Fluids.WATER, Fluids.WATER.getTickRate(worldIn)); + } + return super.updatePostPlacement(stateIn, facing, facingState, worldIn, currentPos, facingPos); + } + + @Override + public FluidState getFluidState(BlockState state) { + return state.get(WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) : super.getFluidState(state); + } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) { + builder.add(WATERLOGGED, STAGE); + } + + @Override + public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) { + if (worldIn.getBlockState(new BlockPos(pos.getX(), pos.getY() - 1, pos.getZ())).getBlock() != this.getDefaultState().getBlock()) { + return true; + } + return false; + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext context) { + Vector3d offset = state.getOffset(world, pos); + if (state.get(STAGE)) { + return VoxelShapes.or(makeCuboidShape(0, 0, 0, 16, 4, 16)).withOffset(offset.x, offset.y, offset.z); + } else { + return VoxelShapes.or(makeCuboidShape(0, 0, 0, 16, 3, 16)).withOffset(offset.x, offset.y, offset.z); + } + } + + @Override + public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean moving) { + super.onBlockAdded(state, world, pos, oldState, moving); + world.getPendingBlockTicks().scheduleTick(pos, this, 1); + } + + @Override + public void tick(BlockState state, ServerWorld world, BlockPos pos, Random random) { + List x = new ArrayList(); + x.add(new Integer[]{0,1}); + x.add(new Integer[]{1,1}); + x.add(new Integer[]{1,0}); + x.add(new Integer[]{-1,0}); + x.add(new Integer[]{-1,-1}); + x.add(new Integer[]{0,-1}); + x.add(new Integer[]{1,-1}); + x.add(new Integer[]{-1,1}); + + List y = new ArrayList(); + y.add(new Integer[]{0,2}); + y.add(new Integer[]{0,-2}); + y.add(new Integer[]{2,0}); + y.add(new Integer[]{-2,0}); + y.add(new Integer[]{-2,1}); + y.add(new Integer[]{-2,-1}); + y.add(new Integer[]{2,1}); + y.add(new Integer[]{1,-2}); + y.add(new Integer[]{2,-2}); + y.add(new Integer[]{-2,-2}); + y.add(new Integer[]{-1,-1}); + y.add(new Integer[]{3,1}); + y.add(new Integer[]{1,2}); + y.add(new Integer[]{2,2}); + + boolean canEdit = true; + + for (Integer[] value : x) { + BlockPos bp = new BlockPos(pos.getX()+value[0],pos.getY(),pos.getZ()+value[1]); + + if (!(world.getBlockState(bp).getBlock() instanceof RocketLaunchPad && !world.getBlockState(bp).get(STAGE))) { + canEdit = false; + } + } + + for (Integer[] val : y) { + BlockPos bp = new BlockPos(pos.getX()+val[0],pos.getY(),pos.getZ()+val[1]); + + if (!(!(world.getBlockState(bp).getBlock() instanceof RocketLaunchPad) || world.getBlockState(bp).getBlock() instanceof RocketLaunchPad && !world.getBlockState(bp).get(STAGE))) { + canEdit = false; + } + } + + if (canEdit) { + world.setBlockState(pos, state.with(STAGE, true), 2); + world.updateComparatorOutputLevel(pos, this); + } else if (state.get(STAGE)){ + world.setBlockState(pos, state.with(STAGE, false), 2); + world.updateComparatorOutputLevel(pos, this); + } + + world.getPendingBlockTicks().scheduleTick(new BlockPos(pos.getX(), pos.getY(), pos.getZ()), this, 1); + } + + @Override + public boolean allowsMovement(BlockState state, IBlockReader worldIn, BlockPos pos, PathType type) { + return false; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/block/WallCoalTorchBlock.java b/src/main/java/net/mrscauthd/boss_tools/block/WallCoalTorchBlock.java new file mode 100644 index 000000000..3ff36de6f --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/block/WallCoalTorchBlock.java @@ -0,0 +1,100 @@ +package net.mrscauthd.boss_tools.block; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; +import java.util.Map; +import javax.annotation.Nullable; + +import net.minecraft.block.*; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.particles.IParticleData; +import net.minecraft.state.DirectionProperty; +import net.minecraft.state.EnumProperty; +import net.minecraft.state.StateContainer; +import net.minecraft.util.*; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.registry.Registry; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; +import net.minecraftforge.registries.ForgeRegistries; +import net.mrscauthd.boss_tools.block.CoalTorchBlock; + +public class WallCoalTorchBlock extends CoalTorchBlock { + public static final DirectionProperty HORIZONTAL_FACING = HorizontalBlock.HORIZONTAL_FACING; + private static final Map SHAPES = Maps.newEnumMap(ImmutableMap.of(Direction.NORTH, Block.makeCuboidShape(5.5D, 3.0D, 11.0D, 10.5D, 13.0D, 16.0D), Direction.SOUTH, Block.makeCuboidShape(5.5D, 3.0D, 0.0D, 10.5D, 13.0D, 5.0D), Direction.WEST, Block.makeCuboidShape(11.0D, 3.0D, 5.5D, 16.0D, 13.0D, 10.5D), Direction.EAST, Block.makeCuboidShape(0.0D, 3.0D, 5.5D, 5.0D, 13.0D, 10.5D))); + + public WallCoalTorchBlock(AbstractBlock.Properties properties) { + super(properties); + this.setDefaultState(this.stateContainer.getBaseState().with(HORIZONTAL_FACING, Direction.NORTH)); + } + + @Override + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity entity, Hand hand, BlockRayTraceResult hit) { + super.onBlockActivated(state, world, pos, entity, hand, hit); + return ActionResultType.SUCCESS; + } + + public String getTranslationKey() { + return this.asItem().getTranslationKey(); + } + + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { + return getShapeForState(state); + } + + public static VoxelShape getShapeForState(BlockState state) { + return SHAPES.get(state.get(HORIZONTAL_FACING)); + } + + public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) { + Direction direction = state.get(HORIZONTAL_FACING); + BlockPos blockpos = pos.offset(direction.getOpposite()); + BlockState blockstate = worldIn.getBlockState(blockpos); + return blockstate.isSolidSide(worldIn, blockpos, direction); + } + + @Nullable + public BlockState getStateForPlacement(BlockItemUseContext context) { + BlockState blockstate = this.getDefaultState(); + IWorldReader iworldreader = context.getWorld(); + BlockPos blockpos = context.getPos(); + Direction[] adirection = context.getNearestLookingDirections(); + + for(Direction direction : adirection) { + if (direction.getAxis().isHorizontal()) { + Direction direction1 = direction.getOpposite(); + blockstate = blockstate.with(HORIZONTAL_FACING, direction1); + if (blockstate.isValidPosition(iworldreader, blockpos)) { + return blockstate; + } + } + } + + return null; + } + + public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) { + return facing.getOpposite() == stateIn.get(HORIZONTAL_FACING) && !stateIn.isValidPosition(worldIn, currentPos) ? Blocks.AIR.getDefaultState() : stateIn; + } + + public BlockState rotate(BlockState state, Rotation rot) { + return state.with(HORIZONTAL_FACING, rot.rotate(state.get(HORIZONTAL_FACING))); + } + + public BlockState mirror(BlockState state, Mirror mirrorIn) { + return state.rotate(mirrorIn.toRotation(state.get(HORIZONTAL_FACING))); + } + + protected void fillStateContainer(StateContainer.Builder builder) { + builder.add(HORIZONTAL_FACING); + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/capability/CapabilityOxygen.java b/src/main/java/net/mrscauthd/boss_tools/capability/CapabilityOxygen.java new file mode 100644 index 000000000..f55adac98 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/capability/CapabilityOxygen.java @@ -0,0 +1,35 @@ +package net.mrscauthd.boss_tools.capability; + +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.INBT; +import net.minecraft.util.Direction; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.Capability.IStorage; +import net.minecraftforge.common.capabilities.CapabilityInject; +import net.minecraftforge.common.capabilities.CapabilityManager; + +public class CapabilityOxygen { + @CapabilityInject(IOxygenStorage.class) + public static Capability OXYGEN = null; + + public static void register() { + CapabilityManager.INSTANCE.register(IOxygenStorage.class, new IStorage() { + @Override + public void readNBT(Capability capability, IOxygenStorage instance, Direction direction, INBT nbt) { + if (nbt instanceof CompoundNBT) { + CompoundNBT compound = (CompoundNBT) nbt; + instance.setOxygenStored(compound.getInt("oxygen")); + } + } + + @Override + public INBT writeNBT(Capability capability, IOxygenStorage instance, Direction direction) { + CompoundNBT compound = new CompoundNBT(); + compound.putInt("oxygen", instance.getOxygenStored()); + return compound; + } + }, () -> { + return new OxygenStorage(null, 1000); + }); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/capability/EnergyStorageBasic.java b/src/main/java/net/mrscauthd/boss_tools/capability/EnergyStorageBasic.java new file mode 100644 index 000000000..1178592aa --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/capability/EnergyStorageBasic.java @@ -0,0 +1,97 @@ +package net.mrscauthd.boss_tools.capability; + +import java.util.Optional; + +import net.minecraft.nbt.CompoundNBT; +import net.minecraftforge.common.util.INBTSerializable; +import net.minecraftforge.energy.EnergyStorage; + +public class EnergyStorageBasic extends EnergyStorage implements INBTSerializable { + + private final IEnergyStorageHolder holder; + + public EnergyStorageBasic(IEnergyStorageHolder holder, int capacity, int maxReceive, int maxExtract, int energy) { + super(capacity, maxReceive, maxExtract, energy); + this.holder = holder; + } + + public EnergyStorageBasic(IEnergyStorageHolder holder, int capacity, int maxReceive, int maxExtract) { + super(capacity, maxReceive, maxExtract); + this.holder = holder; + } + + public EnergyStorageBasic(IEnergyStorageHolder holder, int capacity, int maxTransfer) { + super(capacity, maxTransfer); + this.holder = holder; + } + + public EnergyStorageBasic(IEnergyStorageHolder holder, int capacity) { + super(capacity); + this.holder = holder; + } + + @Override + public int receiveEnergy(int maxReceive, boolean simulate) { + if (!this.canReceive()) { + return 0; + } else { + int energyReceived = Math.min(this.getMaxEnergyStored() - this.getEnergyStored(), maxReceive); + if (!simulate && energyReceived > 0) { + this.energy += energyReceived; + Optional.ofNullable(this.getHolder()).ifPresent(h -> h.onEnergyChanged(this, +energyReceived)); + } + + return energyReceived; + } + } + + @Override + public int extractEnergy(int maxExtract, boolean simulate) { + if (!this.canExtract()) { + return 0; + } else { + int energyExtracted = Math.min(this.getEnergyStored(), maxExtract); + if (!simulate && energyExtracted > 0) { + this.energy -= energyExtracted; + Optional.ofNullable(this.getHolder()).ifPresent(h -> h.onEnergyChanged(this, -energyExtracted)); + } + + return energyExtracted; + } + } + + public int getMaxExtract() { + return this.maxExtract; + } + + @Override + public boolean canExtract() { + return this.getMaxExtract() > 0; + } + + public int getMaxReceive() { + return this.maxReceive; + } + + @Override + public boolean canReceive() { + return this.getMaxReceive() > 0; + } + + public IEnergyStorageHolder getHolder() { + return this.holder; + } + + @Override + public CompoundNBT serializeNBT() { + CompoundNBT compound = new CompoundNBT(); + compound.putInt("energy", this.energy); + return compound; + } + + @Override + public void deserializeNBT(CompoundNBT compound) { + this.energy = compound.getInt("energy"); + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/capability/EnergyStorageExtractaOnly.java b/src/main/java/net/mrscauthd/boss_tools/capability/EnergyStorageExtractaOnly.java new file mode 100644 index 000000000..7697f4282 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/capability/EnergyStorageExtractaOnly.java @@ -0,0 +1,53 @@ +package net.mrscauthd.boss_tools.capability; + +import net.minecraftforge.energy.IEnergyStorage; + +public class EnergyStorageExtractaOnly implements IEnergyStorage { + + private IEnergyStorage parent; + private int maxExtract; + + public EnergyStorageExtractaOnly(IEnergyStorage parent, int maxExtract) { + this.parent = parent; + this.maxExtract = maxExtract; + } + + @Override + public int receiveEnergy(int maxReceive, boolean simulate) { + return 0; + } + + @Override + public int extractEnergy(int maxExtract, boolean simulate) { + return this.getParent().extractEnergy(maxExtract, simulate); + } + + public IEnergyStorage getParent() { + return this.parent; + } + + @Override + public int getEnergyStored() { + return this.getParent().getEnergyStored(); + } + + @Override + public int getMaxEnergyStored() { + return this.getParent().getMaxEnergyStored(); + } + + @Override + public boolean canExtract() { + return this.getMaxExtract() > 0; + } + + public int getMaxExtract() { + return this.maxExtract; + } + + @Override + public boolean canReceive() { + return false; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/capability/FluidHandlerWrapper.java b/src/main/java/net/mrscauthd/boss_tools/capability/FluidHandlerWrapper.java new file mode 100644 index 000000000..a5bd98621 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/capability/FluidHandlerWrapper.java @@ -0,0 +1,85 @@ +package net.mrscauthd.boss_tools.capability; + +import javax.annotation.Nonnull; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; + +public class FluidHandlerWrapper implements IFluidHandler { + private final IFluidHandler parent; + private final boolean canDrain; + private final boolean canFill; + + public FluidHandlerWrapper(IFluidHandler parent) { + this(parent, true, true); + } + + public FluidHandlerWrapper(IFluidHandler parent, boolean canDrain, boolean canFill) { + this.parent = parent; + this.canDrain = canDrain; + this.canFill = canFill; + } + + public final IFluidHandler getParent() { + return this.parent; + } + + public final boolean isCanDrain() { + return this.canDrain; + } + + public final boolean isCanFill() { + return this.canFill; + } + + @Override + public int getTanks() { + return this.getParent().getTanks(); + } + + @Nonnull + @Override + public FluidStack getFluidInTank(int var1) { + return this.getParent().getFluidInTank(var1); + } + + @Override + public int getTankCapacity(int var1) { + return this.getParent().getTankCapacity(var1); + } + + @Override + public boolean isFluidValid(int var1, @Nonnull FluidStack var2) { + return this.getParent().isFluidValid(var1, var2); + } + + @Override + public int fill(FluidStack var1, FluidAction var2) { + if (this.isCanFill()) { + return this.getParent().fill(var1, var2); + } else { + return 0; + } + } + + @Nonnull + @Override + public FluidStack drain(FluidStack var1, FluidAction var2) { + if (this.isCanDrain()) { + return this.getParent().drain(var1, var2); + } else { + return FluidStack.EMPTY; + } + } + + @Nonnull + @Override + public FluidStack drain(int var1, FluidAction var2) { + if (this.isCanDrain()) { + return this.getParent().drain(var1, var2); + } else { + return FluidStack.EMPTY; + } + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/capability/IEnergyStorageHolder.java b/src/main/java/net/mrscauthd/boss_tools/capability/IEnergyStorageHolder.java new file mode 100644 index 000000000..939f7548e --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/capability/IEnergyStorageHolder.java @@ -0,0 +1,9 @@ +package net.mrscauthd.boss_tools.capability; + +import net.minecraftforge.energy.IEnergyStorage; + +public interface IEnergyStorageHolder { + + void onEnergyChanged(IEnergyStorage energyStorage, int energyDelta); + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/capability/IOxygenStorage.java b/src/main/java/net/mrscauthd/boss_tools/capability/IOxygenStorage.java new file mode 100644 index 000000000..b7b25a0a4 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/capability/IOxygenStorage.java @@ -0,0 +1,18 @@ +package net.mrscauthd.boss_tools.capability; + +public interface IOxygenStorage { + + int receiveOxygen(int maxReceive, boolean simulate); + + int extractOxygen(int maxExtract, boolean simulate); + + int getOxygenStored(); + + void setOxygenStored(int oxygen); + + int getMaxOxygenStored(); + + public default double getOxygenStoredRatio() { + return (double) this.getOxygenStored() / (double) this.getMaxOxygenStored(); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/capability/IOxygenStorageHolder.java b/src/main/java/net/mrscauthd/boss_tools/capability/IOxygenStorageHolder.java new file mode 100644 index 000000000..b9a4eedd7 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/capability/IOxygenStorageHolder.java @@ -0,0 +1,5 @@ +package net.mrscauthd.boss_tools.capability; + +public interface IOxygenStorageHolder { + void onOxygenChanged(IOxygenStorage oxygenStorage, int oxygenDelta); +} diff --git a/src/main/java/net/mrscauthd/boss_tools/capability/OxygenStorage.java b/src/main/java/net/mrscauthd/boss_tools/capability/OxygenStorage.java new file mode 100644 index 000000000..7443527c1 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/capability/OxygenStorage.java @@ -0,0 +1,67 @@ +package net.mrscauthd.boss_tools.capability; + +import java.util.Optional; + +public class OxygenStorage implements IOxygenStorage { + private IOxygenStorageHolder holder; + protected int oxygen; + protected int capacity; + + public OxygenStorage(IOxygenStorageHolder holder, int capacity) { + this(holder, capacity, 0); + } + + public OxygenStorage(IOxygenStorageHolder holder, int capacity, int oxygen) { + this.holder = holder; + this.capacity = capacity; + this.oxygen = Math.max(0, Math.min(capacity, oxygen)); + } + + public int receiveOxygen(int maxReceive, boolean simulate) { + int oxygen = this.getOxygenStored(); + int oxygenReceived = Math.min(this.getMaxOxygenStored() - oxygen, Math.max(0, maxReceive)); + + if (!simulate) { + this.setOxygenStored(oxygen + oxygenReceived); + } + + return oxygenReceived; + } + + public int extractOxygen(int maxExtract, boolean simulate) { + int oxygen = this.getOxygenStored(); + int oxygenExtracted = Math.min(oxygen, Math.max(0, maxExtract)); + + if (!simulate) { + this.setOxygenStored(oxygen - oxygenExtracted); + } + + return oxygenExtracted; + } + + public IOxygenStorageHolder getHolder() { + return this.holder; + } + + public int getOxygenStored() { + return this.oxygen; + } + + @Override + public void setOxygenStored(int oxygen) { + oxygen = Math.max(Math.min(oxygen, this.getMaxOxygenStored()), 0); + int oxygenPrev = this.getOxygenStored(); + + if (oxygenPrev != oxygen) { + this.oxygen = oxygen; + + int delta = oxygen - oxygenPrev; + Optional.ofNullable(this.getHolder()).ifPresent(h -> h.onOxygenChanged(this, delta)); + } + } + + public int getMaxOxygenStored() { + return this.capacity; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/capability/OxygenUtil.java b/src/main/java/net/mrscauthd/boss_tools/capability/OxygenUtil.java new file mode 100644 index 000000000..c58271f02 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/capability/OxygenUtil.java @@ -0,0 +1,129 @@ +package net.mrscauthd.boss_tools.capability; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.mrscauthd.boss_tools.compat.CompatibleManager; +import net.mrscauthd.boss_tools.compat.mekanism.MekanismHelper; + +public class OxygenUtil { + + public static IOxygenStorage getItemStackOxygenStorage(ItemStack itemStack) { + IOxygenStorage oxygenStorage = itemStack.getCapability(CapabilityOxygen.OXYGEN).orElse(null); + + if (oxygenStorage != null) { + return oxygenStorage; + } + + if (CompatibleManager.MEKANISM.isLoaded()) { + IOxygenStorage adapter = MekanismHelper.getItemStackOxygenAdapter(itemStack); + + if (adapter != null) { + return adapter; + } + } + + return null; + } + + /** + * test receive oxygen to itemstack + * + * @param itemStack + * @param fluid + * @return + */ + public static boolean canReceive(ItemStack itemStack) { + if (itemStack.isEmpty()) { + return false; + } + + IOxygenStorage storageInItemStack = getItemStackOxygenStorage(itemStack); + return storageInItemStack != null && storageInItemStack.receiveOxygen(1, true) > 0; + } + + /** + * test extract oxygen from itemstack + * + * @param itemStack + * @param fluid + * @return + */ + public static boolean canExtract(ItemStack itemStack) { + if (itemStack.isEmpty()) { + return false; + } + + IOxygenStorage storageInItemStack = getItemStackOxygenStorage(itemStack); + return storageInItemStack != null && storageInItemStack.extractOxygen(1, true) > 0; + } + + public static ItemStack makeFull(ItemStack itemStack) { + if (itemStack.isEmpty()) { + return itemStack; + } + + IOxygenStorage storageInItemStack = getItemStackOxygenStorage(itemStack); + + if (storageInItemStack != null) { + storageInItemStack.receiveOxygen(storageInItemStack.getMaxOxygenStored(), false); + } + + return itemStack; + } + + public static boolean fillSink(IItemHandlerModifiable itemHandler, int sinkItemSlot, IOxygenStorage source, int transfer) { + ItemStack sinkItemStack = itemHandler.getStackInSlot(sinkItemSlot); + + if (fillSinkCapability(source, sinkItemStack, transfer) > 0) { + return true; + } else { + return false; + } + } + + public static int fillSinkCapability(IOxygenStorage source, ItemStack sinkItemStack, int transfer) { + IOxygenStorage sink = getItemStackOxygenStorage(sinkItemStack); + return tryTransfer(sink, source, transfer); + } + + public static boolean drainSource(IItemHandlerModifiable itemHandler, int sourceItemSlot, IOxygenStorage sink, int transfer) { + ItemStack sourceItemStack = itemHandler.getStackInSlot(sourceItemSlot); + + if (drainSourceCapability(sink, sourceItemStack, transfer) > 0) { + return true; + } else { + return false; + } + } + + public static int drainSourceCapability(IOxygenStorage sink, ItemStack sourceItemStack, int transfer) { + IOxygenStorage source = getItemStackOxygenStorage(sourceItemStack); + return tryTransfer(sink, source, transfer); + } + + public static int tryTransfer(IOxygenStorage sink, IOxygenStorage source, int transfer) { + int received = 0; + + if (sink != null && source != null && transfer > 0) { + int extractableAmount = source.extractOxygen(transfer, true); + + if (extractableAmount > 0) { + int receivableAmount = sink.receiveOxygen(extractableAmount, true); + + if (receivableAmount > 0) { + int extracted = source.extractOxygen(receivableAmount, false); + + if (extracted > 0) { + received = sink.receiveOxygen(extracted, false); + } + } + } + } + + return received; + } + + private OxygenUtil() { + + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/capability/SpaceSuitCapabilityProvider.java b/src/main/java/net/mrscauthd/boss_tools/capability/SpaceSuitCapabilityProvider.java new file mode 100644 index 000000000..419719d6b --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/capability/SpaceSuitCapabilityProvider.java @@ -0,0 +1,66 @@ +package net.mrscauthd.boss_tools.capability; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.Direction; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.common.util.LazyOptional; +import net.mrscauthd.boss_tools.compat.CompatibleManager; +import net.mrscauthd.boss_tools.compat.mekanism.MekanismHelper; +import net.mrscauthd.boss_tools.compat.mekanism.OxygenStorageGasAdapter; + +public class SpaceSuitCapabilityProvider implements ICapabilityProvider, IOxygenStorageHolder { + + public static final String KEY_OXYGEN = "Energy"; // for compatible other code + + private ItemStack itemStack; + private IOxygenStorage oxygenStorage; + + public SpaceSuitCapabilityProvider(ItemStack itemStack, int capacity) { + this.itemStack = itemStack; + this.oxygenStorage = new OxygenStorage(this, capacity); + + this.readOxygen(); + } + + private void readOxygen() { + CompoundNBT compound = this.getItemStack().getOrCreateTag(); + this.getOxygenStorage().setOxygenStored(compound.getInt(KEY_OXYGEN)); + } + + public void writeOxygen() { + CompoundNBT compound = this.getItemStack().getOrCreateTag(); + compound.putInt(KEY_OXYGEN, this.getOxygenStorage().getOxygenStored()); + } + + @Override + public LazyOptional getCapability(Capability capability, Direction direction) { + if (capability == CapabilityOxygen.OXYGEN) { + this.readOxygen(); + return LazyOptional.of(this::getOxygenStorage).cast(); + } + + if (CompatibleManager.MEKANISM.isLoaded()) { + if (capability == MekanismHelper.getGasHandlerCapability()) { + return LazyOptional.of(() -> new OxygenStorageGasAdapter(this.getCapability(CapabilityOxygen.OXYGEN, direction).orElse(null), true, true)).cast(); + } + } + + return LazyOptional.empty(); + } + + @Override + public void onOxygenChanged(IOxygenStorage oxygenStorage, int oxygenDelta) { + this.writeOxygen(); + } + + public ItemStack getItemStack() { + return this.itemStack; + } + + public IOxygenStorage getOxygenStorage() { + return this.oxygenStorage; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/compat/CompatibleManager.java b/src/main/java/net/mrscauthd/boss_tools/compat/CompatibleManager.java new file mode 100644 index 000000000..22884c9cf --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/compat/CompatibleManager.java @@ -0,0 +1,35 @@ +package net.mrscauthd.boss_tools.compat; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import net.mrscauthd.boss_tools.compat.hwyla.HwylaCompat; +import net.mrscauthd.boss_tools.compat.mekanism.MekanismCompat; +import net.mrscauthd.boss_tools.compat.theoneprobe.TOPCompat; +import net.mrscauthd.boss_tools.compat.tinkers.TinkersCompat; + +public class CompatibleManager { + + public static final List MODS; + public static final TinkersCompat TINKERS; + public static final TOPCompat TOP; + public static final HwylaCompat HWYLA; + public static final MekanismCompat MEKANISM; + + static { + List mods = new ArrayList<>(); + mods.add(TINKERS = new TinkersCompat()); + mods.add(TOP = new TOPCompat()); + mods.add(HWYLA = new HwylaCompat()); + mods.add(MEKANISM = new MekanismCompat()); + + MODS = Collections.unmodifiableList(mods); + } + + public static void loadAll() { + for (CompatibleMod mod : MODS) { + mod.tryLoad(); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/compat/CompatibleMod.java b/src/main/java/net/mrscauthd/boss_tools/compat/CompatibleMod.java new file mode 100644 index 000000000..c6033922e --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/compat/CompatibleMod.java @@ -0,0 +1,30 @@ +package net.mrscauthd.boss_tools.compat; + +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.ModList; + +public abstract class CompatibleMod { + + private boolean isLoaded; + + public abstract String getModID(); + + public void tryLoad() { + if (ModList.get().isLoaded(this.getModID())) { + this.isLoaded = true; + + this.onLoad(); + } + + } + + protected abstract void onLoad(); + + public boolean isLoaded() { + return this.isLoaded; + } + + public ResourceLocation getLocation(String path) { + return new ResourceLocation(this.getModID(), path); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/compat/hwyla/HwylaCompat.java b/src/main/java/net/mrscauthd/boss_tools/compat/hwyla/HwylaCompat.java new file mode 100644 index 000000000..cf5a6c926 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/compat/hwyla/HwylaCompat.java @@ -0,0 +1,23 @@ +package net.mrscauthd.boss_tools.compat.hwyla; + +import net.minecraft.util.ResourceLocation; +import net.mrscauthd.boss_tools.compat.CompatibleMod; + +public class HwylaCompat extends CompatibleMod { + public static final String MODID = "waila"; + + public static ResourceLocation rl(String path) { + return new ResourceLocation(MODID, path); + } + + @Override + public String getModID() { + return MODID; + } + + @Override + protected void onLoad() { + + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/compat/hwyla/HwylaPlugin.java b/src/main/java/net/mrscauthd/boss_tools/compat/hwyla/HwylaPlugin.java new file mode 100644 index 000000000..ea23c8bad --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/compat/hwyla/HwylaPlugin.java @@ -0,0 +1,22 @@ +package net.mrscauthd.boss_tools.compat.hwyla; + +import mcp.mobius.waila.api.IRegistrar; +import mcp.mobius.waila.api.IWailaPlugin; +import mcp.mobius.waila.api.TooltipPosition; +import mcp.mobius.waila.api.WailaPlugin; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.mrscauthd.boss_tools.BossToolsMod; + +@WailaPlugin +public class HwylaPlugin implements IWailaPlugin { + + public static final ResourceLocation TOOLTIP = new ResourceLocation(BossToolsMod.ModId, "hwlya_tooltip"); + + @Override + public void register(IRegistrar registrar) { + registrar.registerBlockDataProvider(ServerDataProvider.INSTANCE, TileEntity.class); + registrar.registerComponentProvider(TooltipRenderer.INSTANCE, TooltipPosition.BODY, TileEntity.class); + registrar.registerTooltipRenderer(TOOLTIP, TooltipRenderer.INSTANCE); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/compat/hwyla/ServerDataProvider.java b/src/main/java/net/mrscauthd/boss_tools/compat/hwyla/ServerDataProvider.java new file mode 100644 index 000000000..2f732c46e --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/compat/hwyla/ServerDataProvider.java @@ -0,0 +1,66 @@ +package net.mrscauthd.boss_tools.compat.hwyla; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import mcp.mobius.waila.api.IServerDataProvider; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.ListNBT; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.common.util.Constants.NBT; +import net.minecraftforge.energy.CapabilityEnergy; +import net.minecraftforge.energy.IEnergyStorage; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; +import net.mrscauthd.boss_tools.gauge.GaugeValueSerializer; +import net.mrscauthd.boss_tools.gauge.IGaugeValue; +import net.mrscauthd.boss_tools.machines.tile.AbstractMachineTileEntity; + +public class ServerDataProvider implements IServerDataProvider { + + public static final ResourceLocation DATA_KEY = new ResourceLocation(BossToolsMod.ModId, "datakey"); + public static final ServerDataProvider INSTANCE = new ServerDataProvider(); + + public static ListNBT write(List list) { + ListNBT nbt = new ListNBT(); + list.stream().map(GaugeValueSerializer.Serializer::serialize).forEach(nbt::add); + return nbt; + } + + public static List read(ListNBT nbt) { + List list = new ArrayList<>(); + nbt.stream().map(h -> (CompoundNBT) h).map(GaugeValueSerializer.Serializer::deserialize).forEach(list::add); + return list; + } + + public static ListNBT get(CompoundNBT compound) { + return compound.getList(DATA_KEY.toString(), NBT.TAG_COMPOUND); + } + + public static void put(CompoundNBT compound, ListNBT nbt) { + compound.put(DATA_KEY.toString(), nbt); + } + + @Override + public void appendServerData(CompoundNBT data, ServerPlayerEntity player, World world, TileEntity t) { + if (t instanceof AbstractMachineTileEntity) { + AbstractMachineTileEntity machineTileEntity = (AbstractMachineTileEntity) t; + + IEnergyStorage energyStorage = machineTileEntity.getCapability(CapabilityEnergy.ENERGY).orElse(null); + List list = new ArrayList<>(); + + if (energyStorage != null) { + list.add(GaugeValueHelper.getEnergy(energyStorage)); + } + + list.addAll(machineTileEntity.getGaugeValues()); + machineTileEntity.getFluidHandlers().values().stream().map(machineTileEntity::getFluidHandlerGaugeValues).flatMap(Collection::stream).forEach(list::add); + + put(data, write(list)); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/compat/hwyla/TooltipRenderer.java b/src/main/java/net/mrscauthd/boss_tools/compat/hwyla/TooltipRenderer.java new file mode 100644 index 000000000..74715f778 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/compat/hwyla/TooltipRenderer.java @@ -0,0 +1,57 @@ +package net.mrscauthd.boss_tools.compat.hwyla; + +import java.awt.Dimension; +import java.util.List; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import mcp.mobius.waila.api.ICommonAccessor; +import mcp.mobius.waila.api.IComponentProvider; +import mcp.mobius.waila.api.IDataAccessor; +import mcp.mobius.waila.api.IPluginConfig; +import mcp.mobius.waila.api.ITooltipRenderer; +import mcp.mobius.waila.api.RenderableTextComponent; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.ListNBT; +import net.minecraft.util.text.ITextComponent; +import net.mrscauthd.boss_tools.gauge.GaugeValueRenderer; +import net.mrscauthd.boss_tools.gauge.GaugeValueSerializer; +import net.mrscauthd.boss_tools.gauge.IGaugeValue; + +public class TooltipRenderer implements IComponentProvider, ITooltipRenderer { + + public static final TooltipRenderer INSTANCE = new TooltipRenderer(); + + @Override + public void appendBody(List tooltip, IDataAccessor accessor, IPluginConfig config) { + IComponentProvider.super.appendBody(tooltip, accessor, config); + + CompoundNBT serverData = accessor.getServerData(); + ListNBT list = ServerDataProvider.get(serverData); + + if (list.size() > 0) { + CompoundNBT compound = new CompoundNBT(); + ServerDataProvider.put(compound, list); + tooltip.add(new RenderableTextComponent(HwylaPlugin.TOOLTIP, compound)); + } + + } + + @Override + public Dimension getSize(CompoundNBT compound, ICommonAccessor accessor) { + return new Dimension(102, 15 * ServerDataProvider.get(compound).size()); + } + + @Override + public void draw(CompoundNBT compound, ICommonAccessor accessor, int x, int y) { + ListNBT list = ServerDataProvider.get(compound); + MatrixStack matrix = new MatrixStack(); + + for (int i = 0; i < list.size(); i++) { + IGaugeValue value = GaugeValueSerializer.Serializer.deserialize(list.getCompound(i)); + GaugeValueRenderer renderer = new GaugeValueRenderer(value); + renderer.render(matrix, x + 1, y); + y += renderer.getHeight() + 1; + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/compat/mekanism/GasHandlerOxygenAdapter.java b/src/main/java/net/mrscauthd/boss_tools/compat/mekanism/GasHandlerOxygenAdapter.java new file mode 100644 index 000000000..8d418b80a --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/compat/mekanism/GasHandlerOxygenAdapter.java @@ -0,0 +1,120 @@ +package net.mrscauthd.boss_tools.compat.mekanism; + +import mekanism.api.Action; +import mekanism.api.chemical.gas.Gas; +import mekanism.api.chemical.gas.GasStack; +import mekanism.api.chemical.gas.IGasHandler; +import mekanism.common.registries.MekanismGases; +import net.mrscauthd.boss_tools.capability.IOxygenStorage; + +public class GasHandlerOxygenAdapter implements IOxygenStorage { + + private IGasHandler gasHandler; + private boolean canExtract; + private boolean canReceive; + + public GasHandlerOxygenAdapter(IGasHandler gasHandler) { + this(gasHandler, true, true); + } + + public GasHandlerOxygenAdapter(IGasHandler gasHandler, boolean canExtract, boolean canReceive) { + this.gasHandler = gasHandler; + this.canExtract = canExtract; + this.canReceive = canReceive; + } + + public Gas getGas() { + return MekanismGases.OXYGEN.get(); + } + + protected GasStack createGasStack(int amount) { + return new GasStack(this.getGas(), amount); + } + + @Override + public int receiveOxygen(int maxReceive, boolean simulate) { + if (!this.isCanReceive()) { + return 0; + } + + GasStack toInsert = this.createGasStack(maxReceive); + GasStack remain = this.getGasHandler().insertChemical(toInsert, Action.get(!simulate)); + + if (remain.isEmpty()) { + return maxReceive; + } else { + return (int) (maxReceive - remain.getAmount()); + } + + } + + @Override + public int extractOxygen(int maxExtract, boolean simulate) { + if (!this.isCanExtract()) { + return 0; + } + + return (int) this.getGasHandler().extractChemical(maxExtract, Action.get(!simulate)).getAmount(); + } + + @Override + public int getOxygenStored() { + long stored = 0; + IGasHandler gasHandler = this.getGasHandler(); + int tanks = gasHandler.getTanks(); + + for (int i = 0; i < tanks; i++) { + GasStack stack = gasHandler.getChemicalInTank(i); + + if (stack.getType() == this.getGas()) { + stored = Math.max(stored + Math.max(stack.getAmount(), Integer.MAX_VALUE), Integer.MAX_VALUE); + } + } + + return (int) stored; + } + + @Override + public void setOxygenStored(int oxygen) { + IGasHandler gasHandler = this.getGasHandler(); + int tanks = gasHandler.getTanks(); + + for (int i = 0; i < tanks; i++) { + GasStack stack = gasHandler.getChemicalInTank(i); + + if (stack.getType() == this.getGas()) { + gasHandler.setChemicalInTank(i, GasStack.EMPTY); + } + } + + gasHandler.insertChemical(this.createGasStack(tanks), Action.EXECUTE); + } + + @Override + public int getMaxOxygenStored() { + long capacity = 0; + IGasHandler gasHandler = this.getGasHandler(); + int tanks = gasHandler.getTanks(); + + for (int i = 0; i < tanks; i++) { + if (gasHandler.isValid(i, this.createGasStack(1))) { + capacity = Math.max(capacity + Math.max(gasHandler.getTankCapacity(i), Integer.MAX_VALUE), Integer.MAX_VALUE); + } + } + + return (int) capacity; + } + + public IGasHandler getGasHandler() { + return this.gasHandler; + } + + public boolean isCanExtract() { + return this.canExtract; + } + + public boolean isCanReceive() { + return this.canReceive; + } + +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/compat/mekanism/MekanismCompat.java b/src/main/java/net/mrscauthd/boss_tools/compat/mekanism/MekanismCompat.java new file mode 100644 index 000000000..528b2a544 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/compat/mekanism/MekanismCompat.java @@ -0,0 +1,23 @@ +package net.mrscauthd.boss_tools.compat.mekanism; + +import net.minecraft.util.ResourceLocation; +import net.mrscauthd.boss_tools.compat.CompatibleMod; + +public class MekanismCompat extends CompatibleMod { + public static final String MODID = "mekanism"; + + public static ResourceLocation rl(String path) { + return new ResourceLocation(MODID, path); + } + + @Override + public String getModID() { + return MODID; + } + + @Override + protected void onLoad() { + + } + +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/compat/mekanism/MekanismHelper.java b/src/main/java/net/mrscauthd/boss_tools/compat/mekanism/MekanismHelper.java new file mode 100644 index 000000000..ce0d8035f --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/compat/mekanism/MekanismHelper.java @@ -0,0 +1,49 @@ +package net.mrscauthd.boss_tools.compat.mekanism; + +import java.util.ArrayList; +import java.util.List; + +import mekanism.api.chemical.gas.IGasHandler; +import mekanism.common.capabilities.Capabilities; +import mekanism.common.integration.lookingat.theoneprobe.TOPChemicalElement; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.capabilities.Capability; +import net.mrscauthd.boss_tools.capability.IOxygenStorage; + +public class MekanismHelper { + public static Capability getGasHandlerCapability() { + return Capabilities.GAS_HANDLER_CAPABILITY; + } + + public static IGasHandler getItemStackGasHandler(ItemStack itemStack) { + if (itemStack.isEmpty()) { + return null; + } + + return itemStack.getCapability(getGasHandlerCapability()).orElse(null); + } + + public static IOxygenStorage getItemStackOxygenAdapter(ItemStack itemStack) { + IGasHandler gasHandler = getItemStackGasHandler(itemStack); + + if (gasHandler != null) { + return new GasHandlerOxygenAdapter(gasHandler, true, true); + } else { + return null; + } + } + + public static List createGasGaugeDataElement(IGasHandler gasHandler) { + List list = new ArrayList<>(); + + if (gasHandler != null) { + int tanks = gasHandler.getTanks(); + + for (int i = 0; i < tanks; i++) { + list.add(new TOPChemicalElement.GasElement(gasHandler.getChemicalInTank(i), gasHandler.getTankCapacity(i))); + } + } + + return list; + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/compat/mekanism/OxygenStorageGasAdapter.java b/src/main/java/net/mrscauthd/boss_tools/compat/mekanism/OxygenStorageGasAdapter.java new file mode 100644 index 000000000..db91b2473 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/compat/mekanism/OxygenStorageGasAdapter.java @@ -0,0 +1,94 @@ +package net.mrscauthd.boss_tools.compat.mekanism; + +import mekanism.api.Action; +import mekanism.api.chemical.gas.Gas; +import mekanism.api.chemical.gas.GasStack; +import mekanism.api.chemical.gas.IGasHandler; +import mekanism.common.registries.MekanismGases; +import net.mrscauthd.boss_tools.capability.IOxygenStorage; + +public class OxygenStorageGasAdapter implements IGasHandler { + + private IOxygenStorage oxygenStorage; + private boolean canExtract; + private boolean canInsert; + + public OxygenStorageGasAdapter(IOxygenStorage oxygenStorage) { + this(oxygenStorage, true, true); + } + + public OxygenStorageGasAdapter(IOxygenStorage oxygenStorage, boolean canExtract, boolean canInsert) { + this.oxygenStorage = oxygenStorage; + this.canExtract = canExtract; + this.canInsert = canInsert; + } + + public Gas getGas() { + return MekanismGases.OXYGEN.get(); + } + + protected GasStack createGasStack(long amount) { + return new GasStack(this.getGas(), amount); + } + + @Override + public GasStack extractChemical(int var1, long var2, Action var4) { + if (this.isCanExtract()) { + int extractOxygen = this.getOxygenStorage().extractOxygen((int) var2, var4.simulate()); + return this.createGasStack(extractOxygen); + } else { + return GasStack.EMPTY; + } + } + + @Override + public GasStack getChemicalInTank(int var1) { + return this.createGasStack(this.getOxygenStorage().getOxygenStored()); + } + + @Override + public long getTankCapacity(int var1) { + return this.getOxygenStorage().getMaxOxygenStored(); + } + + @Override + public int getTanks() { + return 1; + } + + @Override + public GasStack insertChemical(int var1, GasStack var2, Action var3) { + if (this.isCanInsert() && this.isValid(var1, var2)) { + int amount = (int) Math.min(var2.getAmount(), Integer.MAX_VALUE); + int receiveOxygen = this.getOxygenStorage().receiveOxygen(amount, var3.simulate()); + return this.createGasStack(var2.getAmount() - receiveOxygen); + } else { + return var2; + } + } + + @Override + public void setChemicalInTank(int var1, GasStack var2) { + if (this.isCanInsert() && this.isValid(var1, var2)) { + this.getOxygenStorage().setOxygenStored((int) var2.getAmount()); + } + } + + @Override + public boolean isValid(int var1, GasStack var2) { + return var2.getType() == this.getGas(); + } + + public IOxygenStorage getOxygenStorage() { + return this.oxygenStorage; + } + + public boolean isCanExtract() { + return this.canExtract; + } + + public boolean isCanInsert() { + return this.canInsert; + } + +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/compat/theoneprobe/GaugeValueElement.java b/src/main/java/net/mrscauthd/boss_tools/compat/theoneprobe/GaugeValueElement.java new file mode 100644 index 000000000..4b461427b --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/compat/theoneprobe/GaugeValueElement.java @@ -0,0 +1,23 @@ +package net.mrscauthd.boss_tools.compat.theoneprobe; + +import mcjty.theoneprobe.api.IElement; +import net.minecraft.network.PacketBuffer; +import net.mrscauthd.boss_tools.gauge.GaugeValueRenderer; +import net.mrscauthd.boss_tools.gauge.IGaugeValue; + +public class GaugeValueElement extends GaugeValueRenderer implements IElement { + + public GaugeValueElement(IGaugeValue value) { + super(value); + } + + public GaugeValueElement(PacketBuffer buffer) { + super(buffer); + } + + @Override + public int getID() { + return ProbeInfoProvider.ELEMENT_ID; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/compat/theoneprobe/ProbeConfigProvider.java b/src/main/java/net/mrscauthd/boss_tools/compat/theoneprobe/ProbeConfigProvider.java new file mode 100644 index 000000000..43a639190 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/compat/theoneprobe/ProbeConfigProvider.java @@ -0,0 +1,26 @@ +package net.mrscauthd.boss_tools.compat.theoneprobe; + +import mcjty.theoneprobe.api.IProbeConfig; +import mcjty.theoneprobe.api.IProbeConfigProvider; +import mcjty.theoneprobe.api.IProbeHitData; +import mcjty.theoneprobe.api.IProbeHitEntityData; +import net.minecraft.block.BlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.world.World; + +public class ProbeConfigProvider implements IProbeConfigProvider { + + public static final ProbeConfigProvider INSTANCE = new ProbeConfigProvider(); + + @Override + public void getProbeConfig(IProbeConfig var1, PlayerEntity var2, World var3, Entity var4, IProbeHitEntityData var5) { + + } + + @Override + public void getProbeConfig(IProbeConfig var1, PlayerEntity var2, World var3, BlockState var4, IProbeHitData var5) { + + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/compat/theoneprobe/ProbeInfoProvider.java b/src/main/java/net/mrscauthd/boss_tools/compat/theoneprobe/ProbeInfoProvider.java new file mode 100644 index 000000000..cb6acdbb5 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/compat/theoneprobe/ProbeInfoProvider.java @@ -0,0 +1,65 @@ +package net.mrscauthd.boss_tools.compat.theoneprobe; + +import java.util.Collection; +import java.util.List; +import java.util.function.Function; + +import mcjty.theoneprobe.api.IElement; +import mcjty.theoneprobe.api.IProbeHitData; +import mcjty.theoneprobe.api.IProbeInfo; +import mcjty.theoneprobe.api.IProbeInfoProvider; +import mcjty.theoneprobe.api.ITheOneProbe; +import mcjty.theoneprobe.api.ProbeMode; +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.mrscauthd.boss_tools.compat.CompatibleManager; +import net.mrscauthd.boss_tools.compat.mekanism.MekanismHelper; +import net.mrscauthd.boss_tools.machines.tile.AbstractMachineTileEntity; + +public class ProbeInfoProvider implements IProbeInfoProvider, Function { + + public static int ELEMENT_ID; + + public ProbeInfoProvider() { + + } + + @Override + public Void apply(ITheOneProbe top) { + top.registerProvider(this); + top.registerProbeConfigProvider(ProbeConfigProvider.INSTANCE); + ELEMENT_ID = top.registerElementFactory(GaugeValueElement::new); + + return null; + } + + @Override + public void addProbeInfo(ProbeMode probeMod, IProbeInfo probeInfo, PlayerEntity player, World world, BlockState blockState, IProbeHitData hitData) { + TileEntity tileEntity = world.getTileEntity(hitData.getPos()); + + if (tileEntity instanceof AbstractMachineTileEntity) { + AbstractMachineTileEntity machineTileEntity = (AbstractMachineTileEntity) tileEntity; + + if (probeMod != ProbeMode.EXTENDED) + { + machineTileEntity.getFluidHandlers().values().stream().map(machineTileEntity::getFluidHandlerGaugeValues).flatMap(Collection::stream).forEach(g -> probeInfo.element(new GaugeValueElement(g))); + + if (CompatibleManager.MEKANISM.isLoaded()) { + List elements = MekanismHelper.createGasGaugeDataElement(machineTileEntity.getCapability(MekanismHelper.getGasHandlerCapability()).orElse(null)); + elements.forEach(element -> probeInfo.element(element)); + } + + } + + machineTileEntity.getGaugeValues().forEach(g -> probeInfo.element(new GaugeValueElement(g))); + } + } + + @Override + public String getID() { + return new ResourceLocation("boss_tools", "top").toString(); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/compat/theoneprobe/TOPCompat.java b/src/main/java/net/mrscauthd/boss_tools/compat/theoneprobe/TOPCompat.java new file mode 100644 index 000000000..2287a4847 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/compat/theoneprobe/TOPCompat.java @@ -0,0 +1,31 @@ +package net.mrscauthd.boss_tools.compat.theoneprobe; + +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.InterModComms; +import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.mrscauthd.boss_tools.compat.CompatibleMod; + +public class TOPCompat extends CompatibleMod { + public static final String MODID = "theoneprobe"; + + public static ResourceLocation rl(String path) { + return new ResourceLocation(MODID, path); + } + + @Override + public String getModID() { + return MODID; + } + + @Override + protected void onLoad() { + IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); + bus.addListener(this::imcQueue); + } + + private void imcQueue(InterModEnqueueEvent event) { + InterModComms.sendTo(MODID, "getTheOneProbe", ProbeInfoProvider::new); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/compat/tinkers/BossToolsSmelteryCompat.java b/src/main/java/net/mrscauthd/boss_tools/compat/tinkers/BossToolsSmelteryCompat.java new file mode 100644 index 000000000..53d94cd4e --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/compat/tinkers/BossToolsSmelteryCompat.java @@ -0,0 +1,53 @@ +package net.mrscauthd.boss_tools.compat.tinkers; + +import java.util.Locale; + +import net.minecraft.item.Item; +import net.minecraftforge.fluids.ForgeFlowingFluid; +import slimeknights.mantle.registration.object.FluidObject; +import slimeknights.tconstruct.smeltery.data.Byproduct; + +public enum BossToolsSmelteryCompat { + DESH(TinkersBossToolsFluids.moltenDesh, true), + SILICON(TinkersBossToolsFluids.moltenSilicon, true), + // EOL + ; + + private final String name = this.name().toLowerCase(Locale.US); + private final FluidObject fluid; + private final boolean isOre; + private final Byproduct[] byproducts; + + BossToolsSmelteryCompat(FluidObject fluid, boolean isOre, Byproduct... byproducts) + { + this.fluid = fluid; + this.isOre = isOre; + this.byproducts = byproducts; + } + + public String getName() + { + return this.name; + } + + public FluidObject getFluid() + { + return this.fluid; + } + + public Item getBucket() + { + return this.fluid.asItem(); + } + + public boolean isOre() + { + return this.isOre; + } + + public Byproduct[] getByproducts() + { + return this.byproducts; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/compat/tinkers/TinkersBossToolsFluids.java b/src/main/java/net/mrscauthd/boss_tools/compat/tinkers/TinkersBossToolsFluids.java new file mode 100644 index 000000000..57b27b79a --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/compat/tinkers/TinkersBossToolsFluids.java @@ -0,0 +1,24 @@ +package net.mrscauthd.boss_tools.compat.tinkers; + +import net.minecraft.block.material.Material; +import net.minecraft.util.SoundEvents; +import net.minecraftforge.fluids.FluidAttributes; +import net.minecraftforge.fluids.ForgeFlowingFluid; +import net.mrscauthd.boss_tools.BossToolsMod; +import slimeknights.mantle.registration.ModelFluidAttributes; +import slimeknights.mantle.registration.object.FluidObject; +import slimeknights.tconstruct.common.registration.FluidDeferredRegisterExtension; + +public class TinkersBossToolsFluids +{ + protected static final FluidDeferredRegisterExtension FLUIDS = new FluidDeferredRegisterExtension(BossToolsMod.ModId); + public static final FluidObject moltenDesh = FLUIDS.register("molten_desh", hotBuilder().temperature(800), Material.LAVA, 12); + public static final FluidObject moltenSilicon = FLUIDS.register("molten_silicon", hotBuilder().temperature(800), Material.LAVA, 12); + + /** Creates a builder for a hot fluid */ + private static FluidAttributes.Builder hotBuilder() + { + return ModelFluidAttributes.builder().density(2000).viscosity(10000).temperature(1000).sound(SoundEvents.ITEM_BUCKET_FILL_LAVA, SoundEvents.ITEM_BUCKET_EMPTY_LAVA); + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/compat/tinkers/TinkersCompat.java b/src/main/java/net/mrscauthd/boss_tools/compat/tinkers/TinkersCompat.java new file mode 100644 index 000000000..4e4f6bb69 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/compat/tinkers/TinkersCompat.java @@ -0,0 +1,25 @@ +package net.mrscauthd.boss_tools.compat.tinkers; + +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.mrscauthd.boss_tools.compat.CompatibleMod; + +public class TinkersCompat extends CompatibleMod { + public static final String MODID = "tconstruct"; + + public static ResourceLocation rl(String path) { + return new ResourceLocation(MODID, path); + } + + @Override + public String getModID() { + return MODID; + } + + @Override + protected void onLoad() { + IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); + TinkersBossToolsFluids.FLUIDS.register(bus); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/BlastingRecipe.java b/src/main/java/net/mrscauthd/boss_tools/crafting/BlastingRecipe.java new file mode 100644 index 000000000..814a028e1 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/BlastingRecipe.java @@ -0,0 +1,37 @@ +package net.mrscauthd.boss_tools.crafting; + +import com.google.gson.JsonObject; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; +import net.mrscauthd.boss_tools.ModInnet; + +public class BlastingRecipe extends ItemStackToItemStackRecipe { + + public BlastingRecipe(ResourceLocation id, JsonObject json) { + super(id, json); + } + + public BlastingRecipe(ResourceLocation id, PacketBuffer buffer) { + super(id, buffer); + } + + public BlastingRecipe(ResourceLocation id, Ingredient ingredient, ItemStack output, int cookTime) { + super(id, ingredient, output, cookTime); + } + + @Override + public IRecipeSerializer getSerializer() { + return ModInnet.RECIPE_SERIALIZER_BLASTING.get(); + } + + @Override + public IRecipeType getType() { + return BossToolsRecipeTypes.BLASTING; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/BlastingRecipeSerializer.java b/src/main/java/net/mrscauthd/boss_tools/crafting/BlastingRecipeSerializer.java new file mode 100644 index 000000000..c09148f8a --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/BlastingRecipeSerializer.java @@ -0,0 +1,25 @@ +package net.mrscauthd.boss_tools.crafting; + +import com.google.gson.JsonObject; + +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; + +public class BlastingRecipeSerializer extends BossToolsRecipeSerializer { + + @Override + public BlastingRecipe read(ResourceLocation id, JsonObject json) { + return new BlastingRecipe(id, json); + } + + @Override + public BlastingRecipe read(ResourceLocation id, PacketBuffer buffer) { + return new BlastingRecipe(id, buffer); + } + + @Override + public void write(PacketBuffer buffer, BlastingRecipe recipe) { + recipe.write(buffer); + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/BossToolsRecipe.java b/src/main/java/net/mrscauthd/boss_tools/crafting/BossToolsRecipe.java new file mode 100644 index 000000000..03f5cbb39 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/BossToolsRecipe.java @@ -0,0 +1,72 @@ +package net.mrscauthd.boss_tools.crafting; + +import com.google.gson.JsonObject; + +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; + +public abstract class BossToolsRecipe implements IRecipe { + + private final ResourceLocation id; + + public BossToolsRecipe(ResourceLocation id, JsonObject json) { + this.id = id; + } + + public BossToolsRecipe(ResourceLocation id, PacketBuffer buffer) { + this.id = id; + } + + public BossToolsRecipe(ResourceLocation id) { + this.id = id; + } + + public void write(PacketBuffer buffer) { + + } + + @Override + public final ResourceLocation getId() { + return this.id; + } + + @Override + public String getGroup() { + return this.getSerializer().getRegistryType().toString(); + } + + /** + * Don't use this + */ + @Override + @Deprecated + public ItemStack getCraftingResult(IInventory var1) { + // Don't use this + return ItemStack.EMPTY; + } + + /** + * Don't use this + */ + @Override + @Deprecated + public ItemStack getRecipeOutput() { + // Don't use this + return ItemStack.EMPTY; + } + + /** + * Don't use this + */ + @Override + @Deprecated + public boolean matches(IInventory var1, World var2) { + // Don't use this + return true; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/BossToolsRecipeSerializer.java b/src/main/java/net/mrscauthd/boss_tools/crafting/BossToolsRecipeSerializer.java new file mode 100644 index 000000000..af7b898d5 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/BossToolsRecipeSerializer.java @@ -0,0 +1,9 @@ +package net.mrscauthd.boss_tools.crafting; + +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraftforge.registries.ForgeRegistryEntry; + +public abstract class BossToolsRecipeSerializer> extends ForgeRegistryEntry> implements IRecipeSerializer { + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/BossToolsRecipeType.java b/src/main/java/net/mrscauthd/boss_tools/crafting/BossToolsRecipeType.java new file mode 100644 index 000000000..c2549156b --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/BossToolsRecipeType.java @@ -0,0 +1,42 @@ +package net.mrscauthd.boss_tools.crafting; + +import java.util.List; +import java.util.function.Predicate; +import java.util.stream.Stream; + +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.item.crafting.RecipeManager; +import net.minecraft.world.World; + +public class BossToolsRecipeType implements IRecipeType { + private final String name; + private List cached; + + public BossToolsRecipeType(String name) { + this.name = name; + this.cached = null; + } + + public String getName() { + return this.name; + } + + public Stream filter(World world, Predicate filter) { + return this.getRecipes(world).stream().filter(filter); + } + + public T findFirst(World world, Predicate filter) { + return this.filter(world, filter).findFirst().orElse(null); + } + + public List getRecipes(World world) { + this.cached = null; + if (this.cached == null) { + RecipeManager recipeManager = world.getRecipeManager(); + this.cached = recipeManager.getRecipesForType(this); + } + + return this.cached; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/BossToolsRecipeTypes.java b/src/main/java/net/mrscauthd/boss_tools/crafting/BossToolsRecipeTypes.java new file mode 100644 index 000000000..6a5db64ba --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/BossToolsRecipeTypes.java @@ -0,0 +1,28 @@ +package net.mrscauthd.boss_tools.crafting; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.registry.Registry; +import net.mrscauthd.boss_tools.BossToolsMod; + +public class BossToolsRecipeTypes { + public static final ItemStackToItemStackRecipeType BLASTING = create(new ItemStackToItemStackRecipeType<>("blasting")); + public static final ItemStackToItemStackRecipeType COMPRESSING = create(new ItemStackToItemStackRecipeType<>("compressing")); + public static final BossToolsRecipeType GENERATING = create(new BossToolsRecipeType<>("generating")); + public static final BossToolsRecipeType OXYGENLOADER = create(new BossToolsRecipeType<>("oxygenloader")); + public static final BossToolsRecipeType OXYGENBUBBLEDISTRIBUTOR = create(new BossToolsRecipeType<>("oxygenbubbledistributor")); + public static final BossToolsRecipeType WORKBENCHING = create(new BossToolsRecipeType<>("workbenching")); + public static final BossToolsRecipeType FUELREFINING = create(new BossToolsRecipeType<>("fuelrefining")); + + /** + * for initialize static final fields + */ + public static void init() { + + } + + private static > T create(T value) { + Registry.register(Registry.RECIPE_TYPE, new ResourceLocation(BossToolsMod.ModId, value.getName()), value); + return value; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/CompressingRecipe.java b/src/main/java/net/mrscauthd/boss_tools/crafting/CompressingRecipe.java new file mode 100644 index 000000000..cef7f5388 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/CompressingRecipe.java @@ -0,0 +1,37 @@ +package net.mrscauthd.boss_tools.crafting; + +import com.google.gson.JsonObject; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; +import net.mrscauthd.boss_tools.ModInnet; + +public class CompressingRecipe extends ItemStackToItemStackRecipe { + + public CompressingRecipe(ResourceLocation id, JsonObject json) { + super(id, json); + } + + public CompressingRecipe(ResourceLocation id, PacketBuffer buffer) { + super(id, buffer); + } + + public CompressingRecipe(ResourceLocation id, Ingredient ingredient, ItemStack output, int cookTime) { + super(id, ingredient, output, cookTime); + } + + @Override + public IRecipeSerializer getSerializer() { + return ModInnet.RECIPE_SERIALIZER_COMPRESSING.get(); + } + + @Override + public IRecipeType getType() { + return BossToolsRecipeTypes.COMPRESSING; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/CompressingRecipeSerializer.java b/src/main/java/net/mrscauthd/boss_tools/crafting/CompressingRecipeSerializer.java new file mode 100644 index 000000000..eacef1af3 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/CompressingRecipeSerializer.java @@ -0,0 +1,25 @@ +package net.mrscauthd.boss_tools.crafting; + +import com.google.gson.JsonObject; + +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; + +public class CompressingRecipeSerializer extends BossToolsRecipeSerializer { + + @Override + public CompressingRecipe read(ResourceLocation id, JsonObject json) { + return new CompressingRecipe(id, json); + } + + @Override + public CompressingRecipe read(ResourceLocation id, PacketBuffer buffer) { + return new CompressingRecipe(id, buffer); + } + + @Override + public void write(PacketBuffer buffer, CompressingRecipe recipe) { + recipe.write(buffer); + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/FluidIngredient.java b/src/main/java/net/mrscauthd/boss_tools/crafting/FluidIngredient.java new file mode 100644 index 000000000..c90defbac --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/FluidIngredient.java @@ -0,0 +1,184 @@ +package net.mrscauthd.boss_tools.crafting; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import com.google.common.collect.Lists; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +import net.minecraft.fluid.Fluid; +import net.minecraft.network.PacketBuffer; +import net.minecraft.tags.ITag; +import net.minecraft.tags.TagCollectionManager; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.registries.ForgeRegistries; + +public abstract class FluidIngredient implements Predicate { + public static final FluidIngredient EMPTY = new Empty(); + + public static final int MINAMOUNT = 1; + public static final String KEY_AMOUNT = "amount"; + public static final String KEY_TAG = "tag"; + public static final String KEY_NAME = "name"; + public static final String KEY_NAMES = "names"; + + private List cachedFluids; + private int amount; + + private FluidIngredient(int amount) { + this.amount = amount; + } + + public boolean test(FluidStack stack) { + return this.getFluids().stream().anyMatch(f -> f.isEquivalentTo(stack.getFluid())) && stack.getAmount() >= this.amount; + } + + public List getFluids() { + if (this.cachedFluids == null) { + this.cachedFluids = Collections.unmodifiableList(ForgeRegistries.FLUIDS.getValues().stream().filter(this::testFluid).collect(Collectors.toList())); + } + + return this.cachedFluids; + } + + public List toStacks() { + return this.getFluids().stream().map(f -> new FluidStack(f, this.getAmount())).collect(Collectors.toList()); + } + + public FluidStack toStack() { + List fluids = this.getFluids(); + return fluids.size() == 0 ? FluidStack.EMPTY : new FluidStack(fluids.get(0), this.getAmount()); + } + + public int getAmount() { + return this.amount; + } + + public void write(PacketBuffer buffer) { + List fluids = this.getFluids(); + int size = fluids.size(); + buffer.writeInt(size); + + for (int i = 0; i < size; i++) { + buffer.writeRegistryId(fluids.get(i)); + } + + buffer.writeInt(this.getAmount()); + } + + public static FluidIngredient deserialize(JsonObject json) { + int amount = JSONUtils.getInt(json, KEY_AMOUNT); + + if (json.has(KEY_TAG)) { + String tagName = JSONUtils.getString(json, KEY_TAG); + return of(TagCollectionManager.getManager().getFluidTags().get(new ResourceLocation(tagName)), amount); + } else if (json.has(KEY_NAME)) { + JsonElement nameJson = json.get(KEY_NAME); + + if (nameJson.isJsonArray()) { + List fluids = Lists.newArrayList(nameJson.getAsJsonArray()).stream().map(j -> ForgeRegistries.FLUIDS.getValue(new ResourceLocation(j.getAsString()))).collect(Collectors.toList()); + return of(fluids, amount); + } else { + return of(ForgeRegistries.FLUIDS.getValue(new ResourceLocation(nameJson.getAsString())), amount); + } + } + + return EMPTY; + } + + public static FluidIngredient read(PacketBuffer buffer) { + int size = buffer.readInt(); + List fluids = new ArrayList<>(); + + for (int i = 0; i < size; i++) { + fluids.add(buffer.readRegistryId()); + } + + int amount = buffer.readInt(); + return of(fluids, amount); + } + + public static FluidIngredient of(Fluid fluid) { + return new FluidMatch(fluid, MINAMOUNT); + } + + public static FluidIngredient of(Fluid fluid, int amount) { + return new FluidMatch(fluid, amount); + } + + public static FluidIngredient of(FluidStack stack) { + return new FluidMatch(stack.getFluid(), stack.getAmount()); + } + + public static FluidIngredient of(List fluids, int amount) { + return new FluidMatch(fluids, amount); + } + + public static FluidIngredient of(ITag tag) { + return new TagMatch(tag, MINAMOUNT); + } + + public static FluidIngredient of(ITag tag, int amount) { + return new TagMatch(tag, amount); + } + + public abstract boolean testFluid(Fluid fluid); + + public static class Empty extends FluidIngredient { + public Empty() { + super(0); + } + + @Override + public boolean testFluid(Fluid fluid) { + return false; + } + } + + public static class FluidMatch extends FluidIngredient { + private final List fluids; + + public FluidMatch(Fluid fluid, int amount) { + this(Lists.newArrayList(fluid), amount); + } + + public FluidMatch(List fluids, int amount) { + super(amount); + this.fluids = Collections.unmodifiableList(fluids); + } + + @Override + public boolean testFluid(Fluid fluid) { + return this.fluids.stream().anyMatch(f -> f.isEquivalentTo(fluid)); + } + + public List getFluids() { + return fluids; + } + } + + public static class TagMatch extends FluidIngredient { + private final ITag tag; + + public TagMatch(ITag tag, int amount) { + super(amount); + this.tag = tag; + } + + @Override + public boolean testFluid(Fluid fluid) { + return this.tag.getAllElements().contains(fluid); + } + + public ITag getTag() { + return this.tag; + } + + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/FuelRefiningRecipe.java b/src/main/java/net/mrscauthd/boss_tools/crafting/FuelRefiningRecipe.java new file mode 100644 index 000000000..27b4a3bf9 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/FuelRefiningRecipe.java @@ -0,0 +1,76 @@ +package net.mrscauthd.boss_tools.crafting; + +import java.util.function.Predicate; + +import com.google.gson.JsonObject; + +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidStack; +import net.mrscauthd.boss_tools.ModInnet; + +public class FuelRefiningRecipe extends BossToolsRecipe implements Predicate{ + private FluidIngredient input; + private FluidIngredient output; + + public FuelRefiningRecipe(ResourceLocation id, JsonObject json) { + super(id, json); + + this.input = FluidIngredient.deserialize(JSONUtils.getJsonObject(json, "input")); + this.output = FluidIngredient.deserialize(JSONUtils.getJsonObject(json, "output")); + } + + public FuelRefiningRecipe(ResourceLocation id, PacketBuffer buffer) { + super(id, buffer); + + this.input = FluidIngredient.read(buffer); + this.output = FluidIngredient.read(buffer); + } + + public FuelRefiningRecipe(ResourceLocation id, FluidIngredient input, FluidIngredient output) { + super(id); + + this.input = input; + this.output = output; + } + + @Override + public void write(PacketBuffer buffer) { + super.write(buffer); + + this.input.write(buffer); + this.output.write(buffer); + } + + @Override + public boolean test(FluidStack stack) { + return this.input.test(stack); + } + + @Override + public boolean canFit(int var1, int var2) { + return false; + } + + public FluidIngredient getInput() { + return this.input; + } + + public FluidIngredient getOutput() { + return this.output; + } + + @Override + public IRecipeSerializer getSerializer() { + return ModInnet.RECIPE_SERIALIZER_FUELREFINING.get(); + } + + @Override + public IRecipeType getType() { + return BossToolsRecipeTypes.FUELREFINING; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/FuelRefiningRecipeSerializer.java b/src/main/java/net/mrscauthd/boss_tools/crafting/FuelRefiningRecipeSerializer.java new file mode 100644 index 000000000..a1c837d3e --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/FuelRefiningRecipeSerializer.java @@ -0,0 +1,25 @@ +package net.mrscauthd.boss_tools.crafting; + +import com.google.gson.JsonObject; + +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; + +public class FuelRefiningRecipeSerializer extends BossToolsRecipeSerializer { + + @Override + public FuelRefiningRecipe read(ResourceLocation id, JsonObject json) { + return new FuelRefiningRecipe(id, json); + } + + @Override + public FuelRefiningRecipe read(ResourceLocation id, PacketBuffer buffer) { + return new FuelRefiningRecipe(id, buffer); + } + + @Override + public void write(PacketBuffer buffer, FuelRefiningRecipe recipe) { + recipe.write(buffer); + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/GeneratingRecipe.java b/src/main/java/net/mrscauthd/boss_tools/crafting/GeneratingRecipe.java new file mode 100644 index 000000000..eed8e63d2 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/GeneratingRecipe.java @@ -0,0 +1,93 @@ +package net.mrscauthd.boss_tools.crafting; + +import java.util.function.Predicate; + +import com.google.gson.JsonObject; + +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.mrscauthd.boss_tools.ModInnet; + +public class GeneratingRecipe extends BossToolsRecipe implements Predicate { + + public static final int SLOT_FUEL = 0; + + private final Ingredient ingredient; + private final int burnTime; + + public GeneratingRecipe(ResourceLocation id, JsonObject json) { + super(id, json); + JsonObject inputJson = JSONUtils.getJsonObject(json, "input"); + this.ingredient = Ingredient.deserialize(JSONUtils.getJsonObject(inputJson, "ingredient")); + this.burnTime = JSONUtils.getInt(json, "burnTime"); + } + + public GeneratingRecipe(ResourceLocation id, PacketBuffer buffer) { + super(id, buffer); + + this.ingredient = Ingredient.read(buffer); + this.burnTime = buffer.readInt(); + } + + public GeneratingRecipe(ResourceLocation id, Ingredient ingredient, int burnTime) { + super(id); + this.ingredient = ingredient; + this.burnTime = burnTime; + } + + @Override + public void write(PacketBuffer buffer) { + super.write(buffer); + + this.getIngredient().write(buffer); + buffer.writeInt(this.getBurnTime()); + } + + @Override + public boolean canFit(int var1, int var2) { + return true; + } + + @Override + public IRecipeSerializer getSerializer() { + return ModInnet.RECIPE_SERIALIZER_GENERATING.get(); + } + + @Override + public IRecipeType getType() { + return BossToolsRecipeTypes.GENERATING; + } + + public int getFuelSlot(IInventory inventory, World world) { + return SLOT_FUEL; + } + + @Override + public boolean test(ItemStack ingredient) { + return this.ingredient.test(ingredient); + } + + public Ingredient getIngredient() { + return this.ingredient; + } + + @Override + public NonNullList getIngredients() { + NonNullList list = super.getIngredients(); + list.add(this.getIngredient()); + return list; + } + + public int getBurnTime() { + return this.burnTime; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/GeneratingRecipeSerializer.java b/src/main/java/net/mrscauthd/boss_tools/crafting/GeneratingRecipeSerializer.java new file mode 100644 index 000000000..0b7f8954d --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/GeneratingRecipeSerializer.java @@ -0,0 +1,25 @@ +package net.mrscauthd.boss_tools.crafting; + +import com.google.gson.JsonObject; + +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; + +public class GeneratingRecipeSerializer extends BossToolsRecipeSerializer { + + @Override + public GeneratingRecipe read(ResourceLocation id, JsonObject json) { + return new GeneratingRecipe(id, json); + } + + @Override + public GeneratingRecipe read(ResourceLocation id, PacketBuffer buffer) { + return new GeneratingRecipe(id, buffer); + } + + @Override + public void write(PacketBuffer buffer, GeneratingRecipe recipe) { + recipe.write(buffer); + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/ItemStackToItemStackRecipe.java b/src/main/java/net/mrscauthd/boss_tools/crafting/ItemStackToItemStackRecipe.java new file mode 100644 index 000000000..791bb29cf --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/ItemStackToItemStackRecipe.java @@ -0,0 +1,80 @@ +package net.mrscauthd.boss_tools.crafting; + +import java.util.function.Predicate; + +import com.google.gson.JsonObject; + +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.mrscauthd.boss_tools.machines.tile.ItemStackToItemStackTileEntity; + +public abstract class ItemStackToItemStackRecipe extends BossToolsRecipe implements Predicate { + private final Ingredient ingredient; + private final ItemStack output; + private final int cookTime; + + public ItemStackToItemStackRecipe(ResourceLocation id, JsonObject json) { + super(id, json); + JsonObject inputJson = JSONUtils.getJsonObject(json, "input"); + this.ingredient = Ingredient.deserialize(JSONUtils.getJsonObject(inputJson, "ingredient")); + this.output = CraftingHelper.getItemStack(JSONUtils.getJsonObject(json, "output"), true); + this.cookTime = JSONUtils.getInt(json, "cookTime"); + } + + public ItemStackToItemStackRecipe(ResourceLocation id, PacketBuffer buffer) { + super(id, buffer); + this.ingredient = Ingredient.read(buffer); + this.output = buffer.readItemStack(); + this.cookTime = buffer.readInt(); + } + + public ItemStackToItemStackRecipe(ResourceLocation id, Ingredient ingredient, ItemStack output, int cookTime) { + super(id); + this.ingredient = ingredient; + this.output = output.copy(); + this.cookTime = cookTime; + } + + public void write(PacketBuffer buffer) { + this.getIngredient().write(buffer); + buffer.writeItemStack(this.getOutput()); + buffer.writeInt(this.getCookTime()); + } + + @Override + public boolean test(ItemStack stack) { + return this.ingredient.test(stack); + } + + @Override + public boolean canFit(int var1, int var2) { + return true; + } + + public ItemStack getOutput() { + return this.output.copy(); + } + + @Override + public NonNullList getIngredients() { + NonNullList list = super.getIngredients(); + list.add(this.getIngredient()); + return list; + } + + public Ingredient getIngredient() { + return this.ingredient; + } + + public int getCookTime() { + return this.cookTime; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/ItemStackToItemStackRecipeType.java b/src/main/java/net/mrscauthd/boss_tools/crafting/ItemStackToItemStackRecipeType.java new file mode 100644 index 000000000..cff47c49c --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/ItemStackToItemStackRecipeType.java @@ -0,0 +1,9 @@ +package net.mrscauthd.boss_tools.crafting; + +public class ItemStackToItemStackRecipeType extends BossToolsRecipeType { + + public ItemStackToItemStackRecipeType(String name) { + super(name); + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/OxygenBubbleDistributorRecipe.java b/src/main/java/net/mrscauthd/boss_tools/crafting/OxygenBubbleDistributorRecipe.java new file mode 100644 index 000000000..f91cd9f19 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/OxygenBubbleDistributorRecipe.java @@ -0,0 +1,35 @@ +package net.mrscauthd.boss_tools.crafting; + +import com.google.gson.JsonObject; + +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; +import net.mrscauthd.boss_tools.ModInnet; + +public class OxygenBubbleDistributorRecipe extends OxygenMakingRecipeAbstract { + + public OxygenBubbleDistributorRecipe(ResourceLocation id, JsonObject json) { + super(id, json); + } + + public OxygenBubbleDistributorRecipe(ResourceLocation id, PacketBuffer buffer) { + super(id, buffer); + } + + public OxygenBubbleDistributorRecipe(ResourceLocation id, FluidIngredient ingredient, int oxygen) { + super(id, ingredient, oxygen); + } + + @Override + public IRecipeSerializer getSerializer() { + return ModInnet.RECIPE_SERIALIZER_OXYGENBUBBLEDISTRIBUTOR.get(); + } + + @Override + public IRecipeType getType() { + return BossToolsRecipeTypes.OXYGENBUBBLEDISTRIBUTOR; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/OxygenBubbleDistributorRecipeSerializer.java b/src/main/java/net/mrscauthd/boss_tools/crafting/OxygenBubbleDistributorRecipeSerializer.java new file mode 100644 index 000000000..c354f42dd --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/OxygenBubbleDistributorRecipeSerializer.java @@ -0,0 +1,25 @@ +package net.mrscauthd.boss_tools.crafting; + +import com.google.gson.JsonObject; + +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; + +public class OxygenBubbleDistributorRecipeSerializer extends BossToolsRecipeSerializer { + + @Override + public OxygenBubbleDistributorRecipe read(ResourceLocation id, JsonObject json) { + return new OxygenBubbleDistributorRecipe(id, json); + } + + @Override + public OxygenBubbleDistributorRecipe read(ResourceLocation id, PacketBuffer buffer) { + return new OxygenBubbleDistributorRecipe(id, buffer); + } + + @Override + public void write(PacketBuffer buffer, OxygenBubbleDistributorRecipe recipe) { + recipe.write(buffer); + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/OxygenLoaderRecipe.java b/src/main/java/net/mrscauthd/boss_tools/crafting/OxygenLoaderRecipe.java new file mode 100644 index 000000000..861a5ba99 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/OxygenLoaderRecipe.java @@ -0,0 +1,35 @@ +package net.mrscauthd.boss_tools.crafting; + +import com.google.gson.JsonObject; + +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; +import net.mrscauthd.boss_tools.ModInnet; + +public class OxygenLoaderRecipe extends OxygenMakingRecipeAbstract { + + public OxygenLoaderRecipe(ResourceLocation id, JsonObject json) { + super(id, json); + } + + public OxygenLoaderRecipe(ResourceLocation id, PacketBuffer buffer) { + super(id, buffer); + } + + public OxygenLoaderRecipe(ResourceLocation id, FluidIngredient ingredient, int oxygen) { + super(id, ingredient, oxygen); + } + + @Override + public IRecipeSerializer getSerializer() { + return ModInnet.RECIPE_SERIALIZER_OXYGENLOADER.get(); + } + + @Override + public IRecipeType getType() { + return BossToolsRecipeTypes.OXYGENLOADER; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/OxygenLoaderRecipeSerializer.java b/src/main/java/net/mrscauthd/boss_tools/crafting/OxygenLoaderRecipeSerializer.java new file mode 100644 index 000000000..8d144fe2a --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/OxygenLoaderRecipeSerializer.java @@ -0,0 +1,25 @@ +package net.mrscauthd.boss_tools.crafting; + +import com.google.gson.JsonObject; + +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; + +public class OxygenLoaderRecipeSerializer extends BossToolsRecipeSerializer { + + @Override + public OxygenLoaderRecipe read(ResourceLocation id, JsonObject json) { + return new OxygenLoaderRecipe(id, json); + } + + @Override + public OxygenLoaderRecipe read(ResourceLocation id, PacketBuffer buffer) { + return new OxygenLoaderRecipe(id, buffer); + } + + @Override + public void write(PacketBuffer buffer, OxygenLoaderRecipe recipe) { + recipe.write(buffer); + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/OxygenMakingRecipeAbstract.java b/src/main/java/net/mrscauthd/boss_tools/crafting/OxygenMakingRecipeAbstract.java new file mode 100644 index 000000000..c1f5e72d7 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/OxygenMakingRecipeAbstract.java @@ -0,0 +1,73 @@ +package net.mrscauthd.boss_tools.crafting; + +import java.util.function.Predicate; + +import com.google.gson.JsonObject; + +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidStack; + +public abstract class OxygenMakingRecipeAbstract extends BossToolsRecipe implements Predicate { + + private final FluidIngredient input; + private final int oxygen; + + public OxygenMakingRecipeAbstract(ResourceLocation id, JsonObject json) { + super(id, json); + + this.input = FluidIngredient.deserialize(JSONUtils.getJsonObject(json, "input")); + this.oxygen = JSONUtils.getInt(json, "oxygen"); + } + + public OxygenMakingRecipeAbstract(ResourceLocation id, PacketBuffer buffer) { + super(id, buffer); + + this.input = FluidIngredient.read(buffer); + this.oxygen = buffer.readInt(); + + } + + public OxygenMakingRecipeAbstract(ResourceLocation id, FluidIngredient ingredient, int oxygen) { + super(id); + + this.input = ingredient; + this.oxygen = oxygen; + } + + @Override + public void write(PacketBuffer buffer) { + super.write(buffer); + + this.getInput().write(buffer); + buffer.writeInt(this.getOxygen()); + } + + @Override + public boolean canFit(int var1, int var2) { + return true; + } + + @Override + public boolean test(FluidStack fluidStack) { + return this.input.test(fluidStack); + } + + public FluidIngredient getInput() { + return this.input; + } + + public int getOxygen() { + return this.oxygen; + } + + @Override + public abstract IRecipeSerializer getSerializer(); + + @Override + public abstract IRecipeType getType(); + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/RocketPart.java b/src/main/java/net/mrscauthd/boss_tools/crafting/RocketPart.java new file mode 100644 index 000000000..5b34e5a6b --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/RocketPart.java @@ -0,0 +1,21 @@ +package net.mrscauthd.boss_tools.crafting; + +import javax.annotation.Nonnull; + +import net.minecraftforge.registries.ForgeRegistryEntry; + +public class RocketPart extends ForgeRegistryEntry { + + @Nonnull + public static final RocketPart EMPTY = new RocketPart(0); + + private final int slots; + + public RocketPart(int slots) { + this.slots = slots; + } + + public int getSlots() { + return this.slots; + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/WorkbenchingRecipe.java b/src/main/java/net/mrscauthd/boss_tools/crafting/WorkbenchingRecipe.java new file mode 100644 index 000000000..6564c51fb --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/WorkbenchingRecipe.java @@ -0,0 +1,172 @@ +package net.mrscauthd.boss_tools.crafting; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.function.BiPredicate; +import java.util.stream.Collectors; + +import com.google.common.collect.Lists; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.inventory.RocketPartsItemHandler; + +public class WorkbenchingRecipe extends BossToolsRecipe implements BiPredicate { + + private final Map> parts; + private final ItemStack output; + + public WorkbenchingRecipe(ResourceLocation id, JsonObject json) { + super(id, json); + JsonObject inputJson = JSONUtils.getJsonObject(json, "input"); + JsonObject partsJson = JSONUtils.getJsonObject(inputJson, "parts"); + + Map> map = new HashMap<>(); + + for (Entry entry : partsJson.entrySet()) { + RocketPart part = ModInnet.ROCKET_PARTS_REGISTRY.getValue(new ResourceLocation(entry.getKey())); + JsonArray slotsJson = entry.getValue().getAsJsonArray(); + List ingredients = Lists.newArrayList(slotsJson).stream().map(js -> Ingredient.deserialize(js)).collect(Collectors.toList()); + map.put(part, Collections.unmodifiableList(ingredients)); + } + + this.parts = Collections.unmodifiableMap(map); + this.output = CraftingHelper.getItemStack(JSONUtils.getJsonObject(json, "output"), true); + } + + public WorkbenchingRecipe(ResourceLocation id, PacketBuffer buffer) { + super(id, buffer); + + int partsSize = buffer.readInt(); + Map> map = new HashMap<>(); + + for (int i = 0; i < partsSize; i++) { + RocketPart part = buffer.readRegistryId(); + int ingredientsSize = buffer.readInt(); + List ingredients = Arrays.stream(new Ingredient[ingredientsSize]).map(e -> Ingredient.read(buffer)).collect(Collectors.toList()); + map.put(part, Collections.unmodifiableList(ingredients)); + } + + this.parts = Collections.unmodifiableMap(map); + this.output = buffer.readItemStack(); + } + + public WorkbenchingRecipe(ResourceLocation id, Map> parts, ItemStack output) { + super(id); + + Map> map = new HashMap<>(); + + for (Entry> entry : parts.entrySet()) { + map.put(entry.getKey(), Collections.unmodifiableList(entry.getValue())); + } + + this.parts = Collections.unmodifiableMap(map); + this.output = output.copy(); + } + + @Override + public void write(PacketBuffer buffer) { + super.write(buffer); + + buffer.writeInt(this.parts.size()); + + for (Entry> entry : this.parts.entrySet()) { + buffer.writeRegistryId(entry.getKey()); + + List ingredients = entry.getValue(); + buffer.writeInt(ingredients.size()); + ingredients.forEach(i -> i.write(buffer)); + } + + buffer.writeItemStack(this.output); + } + + @Override + public NonNullList getIngredients() { + NonNullList ingredients = super.getIngredients(); + ingredients.addAll(this.parts.values().stream().flatMap(l -> l.stream()).collect(Collectors.toList())); + return ingredients; + } + + @Override + public boolean canFit(int var1, int var2) { + return false; + } + + public ItemStack getOutput() { + return this.output.copy(); + } + + public Map> getParts() { + return this.parts; + } + + @Override + public IRecipeSerializer getSerializer() { + return ModInnet.RECIPE_SERIALIZER_WORKBENCHING.get(); + } + + @Override + public IRecipeType getType() { + return BossToolsRecipeTypes.WORKBENCHING; + } + + /** + * Part order is not important in find recipe + */ + public boolean test(RocketPartsItemHandler itemHandler) { + return this.test(itemHandler, false); + } + + /** + * Part order is not important in find recipe + */ + @Override + public boolean test(RocketPartsItemHandler itemHandler, Boolean ignoreAir) { + for (Entry> entry : this.getParts().entrySet()) { + RocketPart part = entry.getKey(); + IItemHandlerModifiable subHandler = itemHandler.getSubHandlers().get(part); + + if (subHandler == null) { + return false; + } + + int subHandlerSlots = subHandler.getSlots(); + List ingredients = entry.getValue(); + + if (subHandlerSlots < ingredients.size()) { + return false; + } + + for (int i = 0; i < subHandlerSlots; i++) { + ItemStack stack = subHandler.getStackInSlot(i); + Ingredient ingredient = ingredients.get(i); + + if (ignoreAir && stack.isEmpty()) { + continue; + } else if (!ingredient.test(stack)) { + return false; + } + } + } + + return true; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/crafting/WorkbenchingRecipeSerializer.java b/src/main/java/net/mrscauthd/boss_tools/crafting/WorkbenchingRecipeSerializer.java new file mode 100644 index 000000000..5226370b3 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/crafting/WorkbenchingRecipeSerializer.java @@ -0,0 +1,25 @@ +package net.mrscauthd.boss_tools.crafting; + +import com.google.gson.JsonObject; + +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; + +public class WorkbenchingRecipeSerializer extends BossToolsRecipeSerializer { + + @Override + public WorkbenchingRecipe read(ResourceLocation id, JsonObject json) { + return new WorkbenchingRecipe(id, json); + } + + @Override + public WorkbenchingRecipe read(ResourceLocation id, PacketBuffer buffer) { + return new WorkbenchingRecipe(id, buffer); + } + + @Override + public void write(PacketBuffer buffer, WorkbenchingRecipe recipe) { + recipe.write(buffer); + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/effects/OxygenEffect.java b/src/main/java/net/mrscauthd/boss_tools/effects/OxygenEffect.java new file mode 100644 index 000000000..babfff321 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/effects/OxygenEffect.java @@ -0,0 +1,21 @@ +package net.mrscauthd.boss_tools.effects; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.potion.Effect; +import net.minecraft.potion.EffectType; + +public class OxygenEffect extends Effect { + public OxygenEffect(EffectType typeIn, int liquidColorIn) { + super(typeIn, liquidColorIn); + } + + @Override + public void performEffect(LivingEntity entity, int amplifier) { + entity.setAir(300); + } + + @Override + public boolean isReady(int duration, int amplifier) { + return true; + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/AlienSpitEntity.java b/src/main/java/net/mrscauthd/boss_tools/entity/AlienSpitEntity.java new file mode 100644 index 000000000..045648636 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/AlienSpitEntity.java @@ -0,0 +1,96 @@ +package net.mrscauthd.boss_tools.entity; + +import net.minecraft.particles.ParticleTypes; +import net.minecraft.util.SoundEvent; + +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.fml.network.NetworkHooks; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.world.World; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.ResourceLocation; +import net.minecraft.network.IPacket; +import net.minecraft.item.ItemStack; +import net.minecraft.entity.projectile.AbstractArrowEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.IRendersAsItem; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.Entity; +import net.mrscauthd.boss_tools.ModInnet; + +import java.util.Random; + +@OnlyIn(value = Dist.CLIENT, _interface = IRendersAsItem.class) +public class AlienSpitEntity extends AbstractArrowEntity implements IRendersAsItem { + public AlienSpitEntity(EntityType type, World world) { + super(type, world); + } + + public AlienSpitEntity(EntityType type, LivingEntity entity, World world) { + super(type, entity, world); + } + + @Override + public IPacket createSpawnPacket() { + return NetworkHooks.getEntitySpawningPacket(this); + } + + @Override + @OnlyIn(Dist.CLIENT) + public ItemStack getItem() { + return new ItemStack(ModInnet.ICE_SHARD.get(), 1); + } + + @Override + protected ItemStack getArrowStack() { + return null; + } + + @Override + protected SoundEvent getHitEntitySound() { + return ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("")); + } + + @Override + protected void arrowHit(LivingEntity entity) { + super.arrowHit(entity); + entity.setArrowCountInEntity(entity.getArrowCountInEntity() - 1); + } + + @Override + public void tick() { + super.tick(); + double x = this.getPosX(); + double y = this.getPosY(); + double z = this.getPosZ(); + World world = this.world; + Entity entity = this.func_234616_v_(); + world.addParticle(ParticleTypes.SPIT, x, y, z, 0, 0.001, 0); + world.addParticle(ParticleTypes.ITEM_SNOWBALL, x, y, z, 0, 0.001, 0); + if (this.inGround) { + this.remove(); + } + } + + public static AlienSpitEntity shoot(LivingEntity entity, LivingEntity target, int damage) { + AlienSpitEntity entityarrow = new AlienSpitEntity(ModInnet.ALIEN_SPIT_ENTITY.get(), entity, entity.world); + double d0 = target.getPosY() + (double) target.getEyeHeight() - 1.1; + double d1 = target.getPosX() - entity.getPosX(); + double d3 = target.getPosZ() - entity.getPosZ(); + entityarrow.shoot(d1, d0 - entityarrow.getPosY() + (double) MathHelper.sqrt(d1 * d1 + d3 * d3) * 0.2F, d3, 0.7f * 2, 12.0F); + entityarrow.setSilent(true); + entityarrow.setDamage(damage); + entityarrow.setKnockbackStrength(1); + entityarrow.setIsCritical(false); + entity.world.addEntity(entityarrow); + double x = entity.getPosX(); + double y = entity.getPosY(); + double z = entity.getPosZ(); + entity.world.playSound(null, x, y, z, ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("entity.blaze.shoot")), SoundCategory.PLAYERS, 1, 1f / (new Random().nextFloat() * 0.5f + 1)); + return entityarrow; + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/AlienZombieEntity.java b/src/main/java/net/mrscauthd/boss_tools/entity/AlienZombieEntity.java new file mode 100644 index 000000000..871d5b183 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/AlienZombieEntity.java @@ -0,0 +1,85 @@ +package net.mrscauthd.boss_tools.entity; + +import net.minecraft.entity.*; +import net.minecraft.entity.ai.attributes.AttributeModifierMap; +import net.minecraft.entity.ai.attributes.Attributes; +import net.minecraft.entity.ai.goal.*; +import net.minecraft.util.SoundEvent; +import net.mrscauthd.boss_tools.entity.alien.AlienEntity; +import net.mrscauthd.boss_tools.events.Config; + +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.fml.network.NetworkHooks; + +import net.minecraft.world.World; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.DamageSource; +import net.minecraft.network.IPacket; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.monster.MonsterEntity; + +public class AlienZombieEntity extends MonsterEntity implements IRangedAttackMob { + public AlienZombieEntity(EntityType type, World world) { + super(type, world); + this.experienceValue = 5; + } + + public static AttributeModifierMap.MutableAttribute setCustomAttributes() { + return MobEntity.func_233666_p_() + .createMutableAttribute(Attributes.MOVEMENT_SPEED, 0.3) + .createMutableAttribute(Attributes.MAX_HEALTH, 20) + .createMutableAttribute(Attributes.ATTACK_DAMAGE, 3); + } + + @Override + public IPacket createSpawnPacket() { + return NetworkHooks.getEntitySpawningPacket(this); + } + + @Override + protected void registerGoals() { + super.registerGoals(); + this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.2, false)); + this.targetSelector.addGoal(2, new HurtByTargetGoal(this)); + this.goalSelector.addGoal(3, new RandomWalkingGoal(this, 0.8)); + this.goalSelector.addGoal(4, new LookRandomlyGoal(this)); + this.targetSelector.addGoal(5, new NearestAttackableTargetGoal(this, PlayerEntity.class, false, false)); + this.targetSelector.addGoal(6, new NearestAttackableTargetGoal(this, AlienEntity.class, false, false)); + this.goalSelector.addGoal(1, new RangedAttackGoal(this, 1.25, 20, 15) { + @Override + public boolean shouldContinueExecuting() { + return this.shouldExecute(); + } + }); + } + + @Override + public CreatureAttribute getCreatureAttribute() { + return CreatureAttribute.UNDEAD; + } + + @Override + public SoundEvent getHurtSound(DamageSource ds) { + return ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("entity.pillager.hurt")); + } + + @Override + public SoundEvent getDeathSound() { + return ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("entity.pillager.death")); + } + + @Override + public void attackEntityWithRangedAttack(LivingEntity target, float flval) { + AlienSpitEntity.shoot(this, target, 2); + } + + @Override + public void tick() { + super.tick(); + if (!Config.AlienZombieSpawn) { + if (!this.world.isRemote()) { + this.remove(); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/LanderEntity.java b/src/main/java/net/mrscauthd/boss_tools/entity/LanderEntity.java new file mode 100644 index 000000000..ca7cd44f2 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/LanderEntity.java @@ -0,0 +1,242 @@ +package net.mrscauthd.boss_tools.entity; + +import net.minecraft.entity.*; +import net.minecraft.util.*; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.EntityEvent; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.mrscauthd.boss_tools.events.Events; +import net.mrscauthd.boss_tools.gui.screens.lander.LanderGui; + +import net.minecraftforge.items.wrapper.EntityHandsInvWrapper; +import net.minecraftforge.items.wrapper.EntityArmorInvWrapper; +import net.minecraftforge.items.wrapper.CombinedInvWrapper; +import net.minecraftforge.items.ItemStackHandler; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.fml.network.NetworkHooks; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.world.World; +import net.minecraft.world.Explosion; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.IPacket; +import net.minecraft.nbt.INBT; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.item.ItemStack; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.inventory.container.Container; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.ai.attributes.Attributes; +import net.minecraft.entity.ai.attributes.AttributeModifierMap; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.client.settings.PointOfView; +import net.minecraft.client.Minecraft; + +import javax.annotation.Nullable; +import javax.annotation.Nonnull; + +import io.netty.buffer.Unpooled; + +import java.awt.*; + +public class LanderEntity extends CreatureEntity { + + public static AttributeModifierMap.MutableAttribute setCustomAttributes() { + return MobEntity.func_233666_p_().createMutableAttribute(Attributes.MAX_HEALTH, 20); + } + + public LanderEntity(EntityType type, World world) { + super(type, world); + } + + @Override + public IPacket createSpawnPacket() { + return NetworkHooks.getEntitySpawningPacket(this); + } + + @Override + public boolean canBeLeashedTo(PlayerEntity player) { + return false; + } + + public boolean canBePushed() { + return false; + } + + @Override + public boolean func_241845_aY() { + return true; + } + + @Override + protected void collideWithEntity(Entity p_82167_1_) { + } + + @Override + public void applyEntityCollision(Entity entityIn) { + } + + @Deprecated + public boolean canBeRiddenInWater() { + return true; + } + + public boolean canBeHitWithPotion() { + return false; + } + + @Override + protected boolean canTriggerWalking() { + return false; + } + + @Override + protected void registerGoals() { + super.registerGoals(); + } + + @Override + public CreatureAttribute getCreatureAttribute() { + return CreatureAttribute.UNDEFINED; + } + + @Override + public boolean canDespawn(double distanceToClosestPlayer) { + return false; + } + + @Override + public SoundEvent getHurtSound(DamageSource ds) { + return null; + } + + @Override + public SoundEvent getDeathSound() { + return null; + } + + @Override + public double getMountedYOffset() { + return super.getMountedYOffset() - 0.25; + } + + @Override + public void onKillCommand() { + dropInventory(); + this.remove(); + } + + @Override + public AxisAlignedBB getRenderBoundingBox() { + return new AxisAlignedBB(this.getPosX(),this.getPosY(),this.getPosZ(),this.getPosX(),this.getPosY(), this.getPosZ()).grow(3,3,3); + } + + @Override + public boolean attackEntityFrom(DamageSource source, float amount) { + if (source.getDamageType().equals("fall")) { + if (!this.world.isRemote) { + this.world.createExplosion(null, this.getPosX(), this.getPosY(), this.getPosZ(), 10, Explosion.Mode.BREAK); + } + dropInventory(); + this.remove(); + return true; + } + + if (!source.isProjectile() && source.getTrueSource() != null && source.getTrueSource().isSneaking() && !this.isBeingRidden()) { + dropInventory(); + this.remove(); + } + + return false; + } + + @Override + protected void dropInventory() { + super.dropInventory(); + for (int i = 0; i < inventory.getSlots(); ++i) { + ItemStack itemstack = inventory.getStackInSlot(i); + if (!itemstack.isEmpty() && !EnchantmentHelper.hasVanishingCurse(itemstack)) { + this.entityDropItem(itemstack); + } + } + } + + private final ItemStackHandler inventory = new ItemStackHandler(2) { + @Override + public int getSlotLimit(int slot) { + return 64; + } + }; + + private final CombinedInvWrapper combined = new CombinedInvWrapper(inventory, new EntityHandsInvWrapper(this), new EntityArmorInvWrapper(this)); + + @Override + public LazyOptional getCapability(@Nonnull Capability capability, @Nullable Direction side) { + if (this.isAlive() && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY && side == null) { + return LazyOptional.of(() -> combined).cast(); + } + return super.getCapability(capability, side); + } + + public IItemHandlerModifiable getItemHandler() { + return (IItemHandlerModifiable) this.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null).resolve().get(); + } + + @Override + public void writeAdditional(CompoundNBT compound) { + super.writeAdditional(compound); + compound.put("InventoryCustom", inventory.serializeNBT()); + } + + @Override + public void readAdditional(CompoundNBT compound) { + super.readAdditional(compound); + INBT inventoryCustom = compound.get("InventoryCustom"); + if (inventoryCustom instanceof CompoundNBT) { + inventory.deserializeNBT((CompoundNBT) inventoryCustom); + } + } + + @Override + public ActionResultType func_230254_b_(PlayerEntity sourceentity, Hand hand) { + super.func_230254_b_(sourceentity, hand); + ActionResultType retval = ActionResultType.func_233537_a_(this.world.isRemote()); + + if (sourceentity instanceof ServerPlayerEntity && sourceentity.isSneaking()) { + + NetworkHooks.openGui((ServerPlayerEntity) sourceentity, new INamedContainerProvider() { + @Override + public ITextComponent getDisplayName() { + return new StringTextComponent("Lander"); + } + + @Override + public Container createMenu(int id, PlayerInventory inventory, PlayerEntity player) { + PacketBuffer packetBuffer = new PacketBuffer(Unpooled.buffer()); + packetBuffer.writeVarInt(LanderEntity.this.getEntityId()); + return new LanderGui.GuiContainer(id, inventory, packetBuffer); + } + }, buf -> { + buf.writeVarInt(this.getEntityId()); + }); + + return retval; + } + + sourceentity.startRiding(this); + return retval; + } + + public ItemStackHandler getInventory() { + return inventory; + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/MoglerEntity.java b/src/main/java/net/mrscauthd/boss_tools/entity/MoglerEntity.java new file mode 100644 index 000000000..193014a65 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/MoglerEntity.java @@ -0,0 +1,55 @@ +package net.mrscauthd.boss_tools.entity; + +import net.minecraft.entity.*; +import net.minecraft.entity.ai.attributes.AttributeModifierMap; +import net.minecraft.entity.ai.attributes.Attributes; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.fml.network.NetworkHooks; + +import net.minecraft.world.World; +import net.minecraft.network.IPacket; +import net.minecraft.entity.monster.HoglinEntity; +import net.mrscauthd.boss_tools.ModInnet; + +import javax.annotation.Nullable; + +public class MoglerEntity extends HoglinEntity { + public MoglerEntity(EntityType type, World world) { + super(type, world); + } + + public static AttributeModifierMap.MutableAttribute setCustomAttributes() { + return MobEntity.func_233666_p_() + .createMutableAttribute(Attributes.MOVEMENT_SPEED, 0.3) + .createMutableAttribute(Attributes.MAX_HEALTH, 40) + .createMutableAttribute(Attributes.KNOCKBACK_RESISTANCE, 0.6) + .createMutableAttribute(Attributes.ATTACK_KNOCKBACK, 0.6) + .createMutableAttribute(Attributes.ATTACK_DAMAGE, 6); + } + + @Override + public IPacket createSpawnPacket() { + return NetworkHooks.getEntitySpawningPacket(this); + } + + @Override + public CreatureAttribute getCreatureAttribute() { + return CreatureAttribute.UNDEAD; + } + + @Override + public boolean canDespawn(double distanceToClosestPlayer) { + return false; + } + + @Nullable + @Override + public AgeableEntity func_241840_a(ServerWorld p_241840_1_, AgeableEntity p_241840_2_) { + MoglerEntity moglerentity = (MoglerEntity) ModInnet.MOGLER.get().create(p_241840_1_); + if (moglerentity != null) { + moglerentity.enablePersistence(); + } + + return moglerentity; + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/RocketTier1Entity.java b/src/main/java/net/mrscauthd/boss_tools/entity/RocketTier1Entity.java new file mode 100644 index 000000000..d236692e8 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/RocketTier1Entity.java @@ -0,0 +1,403 @@ +package net.mrscauthd.boss_tools.entity; + +import com.google.common.collect.Sets; +import net.minecraft.block.BlockState; +import net.minecraft.entity.*; +import net.minecraft.item.Items; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.particles.IParticleData; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.tags.FluidTags; +import net.minecraft.util.*; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.block.RocketLaunchPad; +import net.mrscauthd.boss_tools.events.Methodes; +import net.mrscauthd.boss_tools.fluid.FluidUtil2; +import net.mrscauthd.boss_tools.gui.screens.rocket.RocketGui; + +import net.minecraftforge.items.wrapper.EntityHandsInvWrapper; +import net.minecraftforge.items.wrapper.EntityArmorInvWrapper; +import net.minecraftforge.items.wrapper.CombinedInvWrapper; +import net.minecraftforge.items.ItemStackHandler; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.fml.network.NetworkHooks; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.common.capabilities.Capability; + +import net.minecraft.world.World; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.IPacket; +import net.minecraft.nbt.INBT; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.item.ItemStack; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.inventory.container.Container; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.entity.ai.attributes.Attributes; +import net.minecraft.entity.ai.attributes.AttributeModifierMap; +import net.minecraft.enchantment.EnchantmentHelper; + +import javax.annotation.Nullable; +import javax.annotation.Nonnull; + +import io.netty.buffer.Unpooled; + +import java.util.Set; + +public class RocketTier1Entity extends CreatureEntity { + public double ar = 0; + public double ay = 0; + public double ap = 0; + + public static final DataParameter ROCKET_START = EntityDataManager.createKey(RocketTier1Entity.class, DataSerializers.BOOLEAN); + public static final DataParameter BUCKET = EntityDataManager.createKey(RocketTier1Entity.class, DataSerializers.BOOLEAN); + public static final DataParameter FUEL = EntityDataManager.createKey(RocketTier1Entity.class, DataSerializers.VARINT); + public static final DataParameter START_TIMER = EntityDataManager.createKey(RocketTier1Entity.class, DataSerializers.VARINT); + + public static final int FUEL_BUCKETS = 1; + + public RocketTier1Entity(EntityType type, World world) { + super(type, world); + this.dataManager.register(ROCKET_START, false); + this.dataManager.register(BUCKET, false); + this.dataManager.register(FUEL, 0); + this.dataManager.register(START_TIMER, 0); + } + + public static AttributeModifierMap.MutableAttribute setCustomAttributes() { + return MobEntity.func_233666_p_().createMutableAttribute(Attributes.MAX_HEALTH, 20); + } + + @Override + public IPacket createSpawnPacket() { + return NetworkHooks.getEntitySpawningPacket(this); + } + + @Override + public boolean canBeLeashedTo(PlayerEntity player) { + return false; + } + + public boolean canBePushed() { + return false; + } + + @Override + protected void collideWithEntity(Entity p_82167_1_) { + } + + @Override + public void applyEntityCollision(Entity entityIn) { + } + + public boolean canBeHitWithPotion() { + return false; + } + + @Override + protected boolean canTriggerWalking() { + return false; + } + + @Override + protected void registerGoals() { + super.registerGoals(); + } + + @Override + public CreatureAttribute getCreatureAttribute() { + return CreatureAttribute.UNDEFINED; + } + + @Override + public boolean canDespawn(double distanceToClosestPlayer) { + return false; + } + + @Override + public ItemStack getPickedResult(RayTraceResult target) { + ItemStack itemStack = new ItemStack(ModInnet.TIER_1_ROCKET_ITEM.get(), 1); + itemStack.getOrCreateTag().putInt(BossToolsMod.ModId + ":fuel", this.getDataManager().get(FUEL)); + itemStack.getOrCreateTag().putBoolean(BossToolsMod.ModId + ":bucket", this.getDataManager().get(BUCKET)); + + return itemStack; + } + + @Override + public double getMountedYOffset() { + return super.getMountedYOffset() -2.35; + } + + @Override + public SoundEvent getHurtSound(DamageSource ds) { + return null; + } + + @Override + public SoundEvent getDeathSound() { + return null; + } + + //Save Entity Dismount + @Override + public Vector3d func_230268_c_(LivingEntity livingEntity) { + Vector3d[] avector3d = new Vector3d[]{func_233559_a_((double)this.getWidth(), (double)livingEntity.getWidth(), livingEntity.rotationYaw), func_233559_a_((double)this.getWidth(), (double)livingEntity.getWidth(), livingEntity.rotationYaw - 22.5F), func_233559_a_((double)this.getWidth(), (double)livingEntity.getWidth(), livingEntity.rotationYaw + 22.5F), func_233559_a_((double)this.getWidth(), (double)livingEntity.getWidth(), livingEntity.rotationYaw - 45.0F), func_233559_a_((double)this.getWidth(), (double)livingEntity.getWidth(), livingEntity.rotationYaw + 45.0F)}; + Set set = Sets.newLinkedHashSet(); + double d0 = this.getBoundingBox().maxY; + double d1 = this.getBoundingBox().minY - 0.5D; + BlockPos.Mutable blockpos$mutable = new BlockPos.Mutable(); + + for(Vector3d vector3d : avector3d) { + blockpos$mutable.setPos(this.getPosX() + vector3d.x, d0, this.getPosZ() + vector3d.z); + + for(double d2 = d0; d2 > d1; --d2) { + set.add(blockpos$mutable.toImmutable()); + blockpos$mutable.move(Direction.DOWN); + } + } + + for(BlockPos blockpos : set) { + if (!this.world.getFluidState(blockpos).isTagged(FluidTags.LAVA)) { + double d3 = this.world.func_242403_h(blockpos); + if (TransportationHelper.func_234630_a_(d3)) { + Vector3d vector3d1 = Vector3d.copyCenteredWithVerticalOffset(blockpos, d3); + + for(Pose pose : livingEntity.getAvailablePoses()) { + AxisAlignedBB axisalignedbb = livingEntity.getPoseAABB(pose); + if (TransportationHelper.func_234631_a_(this.world, livingEntity, axisalignedbb.offset(vector3d1))) { + livingEntity.setPose(pose); + return vector3d1; + } + } + } + } + } + + return new Vector3d(this.getPosX(), this.getBoundingBox().maxY, this.getPosZ()); + } + + @Override + public void onKillCommand() { + this.dropInventory(); + this.spawnRocketItem(); + this.remove(); + } + + @Override + public boolean attackEntityFrom(DamageSource source, float amount) { + Entity sourceentity = source.getTrueSource(); + + if (!source.isProjectile() && sourceentity != null && sourceentity.isSneaking() && !this.isBeingRidden()) { + + this.spawnRocketItem(); + this.dropInventory(); + this.remove(); + + } + return false; + } + + protected void spawnRocketItem() { + if (!world.isRemote()) { + ItemStack itemStack = new ItemStack(ModInnet.TIER_1_ROCKET_ITEM.get(), 1); + itemStack.getOrCreateTag().putInt(BossToolsMod.ModId + ":fuel", this.getDataManager().get(FUEL)); + itemStack.getOrCreateTag().putBoolean(BossToolsMod.ModId + ":bucket", this.getDataManager().get(BUCKET)); + + ItemEntity entityToSpawn = new ItemEntity(world, this.getPosX(), this.getPosY(), this.getPosZ(), itemStack); + entityToSpawn.setPickupDelay(10); + world.addEntity(entityToSpawn); + } + } + + @Override + protected void dropInventory() { + super.dropInventory(); + for (int i = 0; i < inventory.getSlots(); ++i) { + ItemStack itemstack = inventory.getStackInSlot(i); + if (!itemstack.isEmpty() && !EnchantmentHelper.hasVanishingCurse(itemstack)) { + this.entityDropItem(itemstack); + } + } + } + + private final ItemStackHandler inventory = new ItemStackHandler(1) { + @Override + public int getSlotLimit(int slot) { + return 64; + } + }; + + public ItemStackHandler getInventory() { + return inventory; + } + + private final CombinedInvWrapper combined = new CombinedInvWrapper(inventory, new EntityHandsInvWrapper(this), new EntityArmorInvWrapper(this)); + + @Override + public LazyOptional getCapability(@Nonnull Capability capability, @Nullable Direction side) { + if (this.isAlive() && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY && side == null) { + return LazyOptional.of(() -> combined).cast(); + } + return super.getCapability(capability, side); + } + + public IItemHandlerModifiable getItemHandler() { + return (IItemHandlerModifiable) this.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null).resolve().get(); + } + + @Override + public void writeAdditional(CompoundNBT compound) { + super.writeAdditional(compound); + compound.put("InventoryCustom", inventory.serializeNBT()); + + compound.putBoolean("rocket_start", this.dataManager.get(ROCKET_START)); + compound.putBoolean("bucket", this.dataManager.get(BUCKET)); + compound.putInt("fuel", this.dataManager.get(FUEL)); + compound.putInt("start_timer", this.dataManager.get(START_TIMER)); + } + + @Override + public void readAdditional(CompoundNBT compound) { + super.readAdditional(compound); + INBT inventoryCustom = compound.get("InventoryCustom"); + if (inventoryCustom instanceof CompoundNBT) { + inventory.deserializeNBT((CompoundNBT) inventoryCustom); + } + + this.dataManager.set(ROCKET_START, compound.getBoolean("rocket_start")); + this.dataManager.set(BUCKET, compound.getBoolean("bucket")); + this.dataManager.set(FUEL, compound.getInt("fuel")); + this.dataManager.set(START_TIMER, compound.getInt("start_timer")); + } + + @Override + public ActionResultType func_230254_b_(PlayerEntity sourceentity, Hand hand) { + super.func_230254_b_(sourceentity, hand); + ActionResultType retval = ActionResultType.func_233537_a_(this.world.isRemote()); + + if (sourceentity instanceof ServerPlayerEntity && sourceentity.isSneaking()) { + + NetworkHooks.openGui((ServerPlayerEntity) sourceentity, new INamedContainerProvider() { + @Override + public ITextComponent getDisplayName() { + return new StringTextComponent("Tier 1 Rocket"); + } + + @Override + public Container createMenu(int id, PlayerInventory inventory, PlayerEntity player) { + PacketBuffer packetBuffer = new PacketBuffer(Unpooled.buffer()); + packetBuffer.writeVarInt(RocketTier1Entity.this.getEntityId()); + return new RocketGui.GuiContainer(id, inventory, packetBuffer); + } + }, buf -> { + buf.writeVarInt(this.getEntityId()); + }); + + return retval; + } + sourceentity.startRiding(this); + + return retval; + } + + @Override + public void baseTick() { + super.baseTick(); + double x = this.getPosX(); + double y = this.getPosY(); + double z = this.getPosZ(); + + if (this.dataManager.get(ROCKET_START)) { + + //Rocket Animation + ar = ar + 1; + if (ar == 1) { + ay = ay + 0.006; + ap = ap + 0.006; + } + if (ar == 2) { + ar = 0; + ay = 0; + ap = 0; + } + + if (this.dataManager.get(START_TIMER) < 200) { + this.dataManager.set(START_TIMER, this.dataManager.get(START_TIMER) + 1); + } + + if (this.dataManager.get(START_TIMER) == 200) { + if (this.getMotion().getY() < 0.5) { + this.setMotion(this.getMotion().getX(), this.getMotion().getY() + 0.1, this.getMotion().getZ()); + } else { + this.setMotion(this.getMotion().getX(), 0.63, this.getMotion().getZ()); + } + } + + if (y > 600 && !this.getPassengers().isEmpty()) { + Entity pass = this.getPassengers().get(0); + + pass.getPersistentData().putBoolean(BossToolsMod.ModId + ":planet_selection_gui_open", true); + pass.getPersistentData().putString(BossToolsMod.ModId + ":rocket_type", this.getType().toString()); + pass.getPersistentData().putString(BossToolsMod.ModId + ":slot0", this.inventory.getStackInSlot(0).getItem().getRegistryName().toString()); + pass.setNoGravity(true); + + this.remove(); + } else if (y > 600 && this.getPassengers().isEmpty()) { + this.remove(); + } + + //Particle Spawn + if (this.dataManager.get(START_TIMER) == 200) { + if (world instanceof ServerWorld) { + for (ServerPlayerEntity p : ((ServerWorld) world).getPlayers()) { + ((ServerWorld) world).spawnParticle(p, (IParticleData) ModInnet.LARGE_FLAME_PARTICLE.get(), true, this.getPosX(), this.getPosY() - 2.2, this.getPosZ(), 20, 0.1, 0.1, 0.1, 0.001); + ((ServerWorld) world).spawnParticle(p, (IParticleData) ModInnet.SMOKE_PARTICLE.get(), true, this.getPosX(), this.getPosY() - 3.2, this.getPosZ(), 10, 0.1, 0.1, 0.1, 0.04); + } + } + } else { + if (world instanceof ServerWorld) { + for (ServerPlayerEntity p : ((ServerWorld) world).getPlayers()) { + ((ServerWorld) world).spawnParticle(p, ParticleTypes.CAMPFIRE_COSY_SMOKE, true, this.getPosX(), this.getPosY() - 0.1, this.getPosZ(), 6, 0.1, 0.1, 0.1, 0.023); + } + } + } + + } + + if (Methodes.tagCheck(FluidUtil2.findBucketFluid(this.inventory.getStackInSlot(0).getItem()), ModInnet.FLUID_VEHICLE_FUEL_TAG) && !this.dataManager.get(BUCKET)) { + this.inventory.setStackInSlot(0, new ItemStack(Items.BUCKET)); + this.getDataManager().set(BUCKET, true); + } + + if (this.dataManager.get(BUCKET) && this.dataManager.get(FUEL) < 300) { + this.getDataManager().set(FUEL, this.dataManager.get(FUEL) + 1); + } + + if (this.isOnGround() || this.isInWater()) { + + BlockState state = world.getBlockState(new BlockPos(Math.floor(x), y - 0.1, Math.floor(z))); + + if (!world.isAirBlock(new BlockPos(Math.floor(x), y - 0.01, Math.floor(z))) && state.getBlock() instanceof RocketLaunchPad && !state.get(RocketLaunchPad.STAGE) + || world.getBlockState(new BlockPos(Math.floor(x), Math.floor(y), Math.floor(z))).getBlock() != ModInnet.ROCKET_LAUNCH_PAD.get().getDefaultState().getBlock()) { + + this.dropInventory(); + this.spawnRocketItem(); + this.remove(); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/RocketTier2Entity.java b/src/main/java/net/mrscauthd/boss_tools/entity/RocketTier2Entity.java new file mode 100644 index 000000000..3bcca76cd --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/RocketTier2Entity.java @@ -0,0 +1,419 @@ +package net.mrscauthd.boss_tools.entity; + +import com.google.common.collect.Sets; +import net.minecraft.block.BlockState; +import net.minecraft.entity.*; +import net.minecraft.item.Items; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.particles.IParticleData; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.tags.FluidTags; +import net.minecraft.util.*; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; + +import net.minecraftforge.items.wrapper.EntityHandsInvWrapper; +import net.minecraftforge.items.wrapper.EntityArmorInvWrapper; +import net.minecraftforge.items.wrapper.CombinedInvWrapper; +import net.minecraftforge.items.ItemStackHandler; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.fml.network.NetworkHooks; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.common.capabilities.Capability; + +import net.minecraft.world.World; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.IPacket; +import net.minecraft.nbt.INBT; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.item.ItemStack; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.inventory.container.Container; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.entity.ai.attributes.Attributes; +import net.minecraft.entity.ai.attributes.AttributeModifierMap; +import net.minecraft.enchantment.EnchantmentHelper; + +import javax.annotation.Nullable; +import javax.annotation.Nonnull; + +import io.netty.buffer.Unpooled; +import net.mrscauthd.boss_tools.block.RocketLaunchPad; +import net.mrscauthd.boss_tools.events.Methodes; +import net.mrscauthd.boss_tools.fluid.FluidUtil2; +import net.mrscauthd.boss_tools.gui.screens.rocket.RocketGui; + +import java.util.Set; + +public class RocketTier2Entity extends CreatureEntity { + public double ar = 0; + public double ay = 0; + public double ap = 0; + + public static final DataParameter ROCKET_START = EntityDataManager.createKey(RocketTier1Entity.class, DataSerializers.BOOLEAN); + public static final DataParameter BUCKETS = EntityDataManager.createKey(RocketTier1Entity.class, DataSerializers.VARINT); + public static final DataParameter FUEL = EntityDataManager.createKey(RocketTier1Entity.class, DataSerializers.VARINT); + public static final DataParameter START_TIMER = EntityDataManager.createKey(RocketTier1Entity.class, DataSerializers.VARINT); + + public static final int FUEL_BUCKETS = 3; + + public RocketTier2Entity(EntityType type, World world) { + super(type, world); + this.dataManager.register(ROCKET_START, false); + this.dataManager.register(BUCKETS, 0); + this.dataManager.register(FUEL, 0); + this.dataManager.register(START_TIMER, 0); + } + + public static AttributeModifierMap.MutableAttribute setCustomAttributes() { + return MobEntity.func_233666_p_().createMutableAttribute(Attributes.MAX_HEALTH, 20); + } + + @Override + public IPacket createSpawnPacket() { + return NetworkHooks.getEntitySpawningPacket(this); + } + + @Override + public boolean canBeLeashedTo(PlayerEntity player) { + return false; + } + + public boolean canBePushed() { + return false; + } + + @Override + protected void collideWithEntity(Entity p_82167_1_) { + } + + @Override + public void applyEntityCollision(Entity entityIn) { + } + + public boolean canBeHitWithPotion() { + return false; + } + + @Override + protected boolean canTriggerWalking() { + return false; + } + + @Override + protected void registerGoals() { + super.registerGoals(); + } + + @Override + public CreatureAttribute getCreatureAttribute() { + return CreatureAttribute.UNDEFINED; + } + + @Override + public boolean canDespawn(double distanceToClosestPlayer) { + return false; + } + + @Override + public ItemStack getPickedResult(RayTraceResult target) { + ItemStack itemStack = new ItemStack(ModInnet.TIER_2_ROCKET_ITEM.get(), 1); + itemStack.getOrCreateTag().putInt(BossToolsMod.ModId + ":fuel", this.getDataManager().get(FUEL)); + itemStack.getOrCreateTag().putInt(BossToolsMod.ModId + ":buckets", this.getDataManager().get(BUCKETS)); + + return itemStack; + } + + @Override + public double getMountedYOffset() { + return super.getMountedYOffset() -2.5; + } + + @Override + public SoundEvent getHurtSound(DamageSource ds) { + return null; + } + + @Override + public SoundEvent getDeathSound() { + return null; + } + + //Save Entity Dismount + @Override + public Vector3d func_230268_c_(LivingEntity livingEntity) { + Vector3d[] avector3d = new Vector3d[]{func_233559_a_((double)this.getWidth(), (double)livingEntity.getWidth(), livingEntity.rotationYaw), func_233559_a_((double)this.getWidth(), (double)livingEntity.getWidth(), livingEntity.rotationYaw - 22.5F), func_233559_a_((double)this.getWidth(), (double)livingEntity.getWidth(), livingEntity.rotationYaw + 22.5F), func_233559_a_((double)this.getWidth(), (double)livingEntity.getWidth(), livingEntity.rotationYaw - 45.0F), func_233559_a_((double)this.getWidth(), (double)livingEntity.getWidth(), livingEntity.rotationYaw + 45.0F)}; + Set set = Sets.newLinkedHashSet(); + double d0 = this.getBoundingBox().maxY; + double d1 = this.getBoundingBox().minY - 0.5D; + BlockPos.Mutable blockpos$mutable = new BlockPos.Mutable(); + + for(Vector3d vector3d : avector3d) { + blockpos$mutable.setPos(this.getPosX() + vector3d.x, d0, this.getPosZ() + vector3d.z); + + for(double d2 = d0; d2 > d1; --d2) { + set.add(blockpos$mutable.toImmutable()); + blockpos$mutable.move(Direction.DOWN); + } + } + + for(BlockPos blockpos : set) { + if (!this.world.getFluidState(blockpos).isTagged(FluidTags.LAVA)) { + double d3 = this.world.func_242403_h(blockpos); + if (TransportationHelper.func_234630_a_(d3)) { + Vector3d vector3d1 = Vector3d.copyCenteredWithVerticalOffset(blockpos, d3); + + for(Pose pose : livingEntity.getAvailablePoses()) { + AxisAlignedBB axisalignedbb = livingEntity.getPoseAABB(pose); + if (TransportationHelper.func_234631_a_(this.world, livingEntity, axisalignedbb.offset(vector3d1))) { + livingEntity.setPose(pose); + return vector3d1; + } + } + } + } + } + + return new Vector3d(this.getPosX(), this.getBoundingBox().maxY, this.getPosZ()); + } + + @Override + public void onKillCommand() { + this.dropInventory(); + this.spawnRocketItem(); + this.remove(); + } + + @Override + public boolean attackEntityFrom(DamageSource source, float amount) { + Entity sourceentity = source.getTrueSource(); + + if (!source.isProjectile() && sourceentity != null && sourceentity.isSneaking() && !this.isBeingRidden()) { + + this.dropInventory(); + this.spawnRocketItem(); + this.remove(); + + } + return false; + } + + protected void spawnRocketItem() { + if (!world.isRemote()) { + ItemStack itemStack = new ItemStack(ModInnet.TIER_2_ROCKET_ITEM.get(), 1); + itemStack.getOrCreateTag().putInt(BossToolsMod.ModId + ":fuel", this.getDataManager().get(FUEL)); + itemStack.getOrCreateTag().putInt(BossToolsMod.ModId + ":buckets", this.getDataManager().get(BUCKETS)); + + ItemEntity entityToSpawn = new ItemEntity(world, this.getPosX(), this.getPosY(), this.getPosZ(), itemStack); + entityToSpawn.setPickupDelay(10); + world.addEntity(entityToSpawn); + } + } + + @Override + protected void dropInventory() { + super.dropInventory(); + for (int i = 0; i < inventory.getSlots(); ++i) { + ItemStack itemstack = inventory.getStackInSlot(i); + if (!itemstack.isEmpty() && !EnchantmentHelper.hasVanishingCurse(itemstack)) { + this.entityDropItem(itemstack); + } + } + } + + private final ItemStackHandler inventory = new ItemStackHandler(1) { + @Override + public int getSlotLimit(int slot) { + return 64; + } + }; + + private final CombinedInvWrapper combined = new CombinedInvWrapper(inventory, new EntityHandsInvWrapper(this), new EntityArmorInvWrapper(this)); + + @Override + public LazyOptional getCapability(@Nonnull Capability capability, @Nullable Direction side) { + if (this.isAlive() && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY && side == null) { + return LazyOptional.of(() -> combined).cast(); + } + return super.getCapability(capability, side); + } + + public IItemHandlerModifiable getItemHandler() { + return (IItemHandlerModifiable) this.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null).resolve().get(); + } + + @Override + public void writeAdditional(CompoundNBT compound) { + super.writeAdditional(compound); + compound.put("InventoryCustom", inventory.serializeNBT()); + + compound.putBoolean("rocket_start", this.dataManager.get(ROCKET_START)); + compound.putInt("buckets", this.dataManager.get(BUCKETS)); + compound.putInt("fuel", this.dataManager.get(FUEL)); + compound.putInt("start_timer", this.dataManager.get(START_TIMER)); + } + + @Override + public void readAdditional(CompoundNBT compound) { + super.readAdditional(compound); + INBT inventoryCustom = compound.get("InventoryCustom"); + if (inventoryCustom instanceof CompoundNBT) { + inventory.deserializeNBT((CompoundNBT) inventoryCustom); + } + + this.dataManager.set(ROCKET_START, compound.getBoolean("rocket_start")); + this.dataManager.set(BUCKETS, compound.getInt("buckets")); + this.dataManager.set(FUEL, compound.getInt("fuel")); + this.dataManager.set(START_TIMER, compound.getInt("start_timer")); + } + + @Override + public ActionResultType func_230254_b_(PlayerEntity sourceentity, Hand hand) { + super.func_230254_b_(sourceentity, hand); + ActionResultType retval = ActionResultType.func_233537_a_(this.world.isRemote()); + + if (sourceentity instanceof ServerPlayerEntity && sourceentity.isSneaking()) { + + NetworkHooks.openGui((ServerPlayerEntity) sourceentity, new INamedContainerProvider() { + @Override + public ITextComponent getDisplayName() { + return new StringTextComponent("Tier 2 Rocket"); + } + + @Override + public Container createMenu(int id, PlayerInventory inventory, PlayerEntity player) { + PacketBuffer packetBuffer = new PacketBuffer(Unpooled.buffer()); + packetBuffer.writeVarInt(RocketTier2Entity.this.getEntityId()); + return new RocketGui.GuiContainer(id, inventory, packetBuffer); + } + }, buf -> { + buf.writeVarInt(this.getEntityId()); + }); + + return retval; + } + + sourceentity.startRiding(this); + return retval; + } + + @Override + public void baseTick() { + super.baseTick(); + double x = this.getPosX(); + double y = this.getPosY(); + double z = this.getPosZ(); + + if (this.dataManager.get(ROCKET_START)) { + + //Rocket Animation + ar = ar + 1; + if (ar == 1) { + ay = ay + 0.006; + ap = ap + 0.006; + } + if (ar == 2) { + ar = 0; + ay = 0; + ap = 0; + } + + if (this.dataManager.get(START_TIMER) < 200) { + this.dataManager.set(START_TIMER, this.dataManager.get(START_TIMER) + 1); + } + + if (this.dataManager.get(START_TIMER) == 200) { + if (this.getMotion().getY() < 0.5) { + this.setMotion(this.getMotion().getX(), this.getMotion().getY() + 0.1, this.getMotion().getZ()); + } else { + this.setMotion(this.getMotion().getX(), 0.63, this.getMotion().getZ()); + } + } + + if (y > 600 && !this.getPassengers().isEmpty()) { + Entity pass = this.getPassengers().get(0); + + pass.getPersistentData().putBoolean(BossToolsMod.ModId + ":planet_selection_gui_open", true); + pass.getPersistentData().putString(BossToolsMod.ModId + ":rocket_type", this.getType().toString()); + pass.getPersistentData().putString(BossToolsMod.ModId + ":slot0", this.inventory.getStackInSlot(0).getItem().getRegistryName().toString()); + pass.setNoGravity(true); + + this.remove(); + } else if (y > 600 && this.getPassengers().isEmpty()) { + this.remove(); + } + + //Particle Spawn + if (this.dataManager.get(START_TIMER) == 200) { + if (world instanceof ServerWorld) { + for (ServerPlayerEntity p : ((ServerWorld) world).getPlayers()) { + ((ServerWorld) world).spawnParticle(p, (IParticleData) ModInnet.LARGE_FLAME_PARTICLE.get(), true, this.getPosX(), this.getPosY() - 2.2, this.getPosZ(), 20, 0.1, 0.1, 0.1, 0.001); + ((ServerWorld) world).spawnParticle(p, (IParticleData) ModInnet.SMOKE_PARTICLE.get(), true, this.getPosX(), this.getPosY() - 3.2, this.getPosZ(), 10, 0.1, 0.1, 0.1, 0.04); + } + } + } else { + if (world instanceof ServerWorld) { + for (ServerPlayerEntity p : ((ServerWorld) world).getPlayers()) { + ((ServerWorld) world).spawnParticle(p, ParticleTypes.CAMPFIRE_COSY_SMOKE, true, this.getPosX(), this.getPosY() - 0.1, this.getPosZ(), 6, 0.1, 0.1, 0.1, 0.023); + } + } + } + + } + + //Fuel Load up + if (Methodes.tagCheck(FluidUtil2.findBucketFluid(this.inventory.getStackInSlot(0).getItem()), ModInnet.FLUID_VEHICLE_FUEL_TAG) && this.dataManager.get(BUCKETS) < 3) { + + if (this.dataManager.get(FUEL) == 0 && this.dataManager.get(BUCKETS) == 0) { + + this.inventory.setStackInSlot(0, new ItemStack(Items.BUCKET)); + this.getDataManager().set(BUCKETS, this.getDataManager().get(BUCKETS) + 1); + } else if (this.dataManager.get(FUEL) == 100 && this.dataManager.get(BUCKETS) == 1) { + + this.inventory.setStackInSlot(0, new ItemStack(Items.BUCKET)); + this.getDataManager().set(BUCKETS, this.getDataManager().get(BUCKETS) + 1); + } else if (this.dataManager.get(FUEL) == 200 && this.dataManager.get(BUCKETS) == 2) { + + this.inventory.setStackInSlot(0, new ItemStack(Items.BUCKET)); + this.getDataManager().set(BUCKETS, this.getDataManager().get(BUCKETS) + 1); + } + } + + if (this.dataManager.get(BUCKETS) == 1 && this.dataManager.get(FUEL) < 100) { + this.getDataManager().set(FUEL, this.dataManager.get(FUEL) + 1); + + } else if (this.dataManager.get(BUCKETS) == 2 && this.dataManager.get(FUEL) < 200) { + this.getDataManager().set(FUEL, this.dataManager.get(FUEL) + 1); + + } else if (this.dataManager.get(BUCKETS) == 3 && this.dataManager.get(FUEL) < 300) { + this.getDataManager().set(FUEL, this.dataManager.get(FUEL) + 1); + } + + if (this.isOnGround() || this.isInWater()) { + + BlockState state = world.getBlockState(new BlockPos(Math.floor(x), y - 0.1, Math.floor(z))); + + if (!world.isAirBlock(new BlockPos(Math.floor(x), y - 0.01, Math.floor(z))) && state.getBlock() instanceof RocketLaunchPad && !state.get(RocketLaunchPad.STAGE) + || world.getBlockState(new BlockPos(Math.floor(x), Math.floor(y), Math.floor(z))).getBlock() != ModInnet.ROCKET_LAUNCH_PAD.get().getDefaultState().getBlock()) { + + this.dropInventory(); + this.spawnRocketItem(); + this.remove(); + } + } + } + +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/RocketTier3Entity.java b/src/main/java/net/mrscauthd/boss_tools/entity/RocketTier3Entity.java new file mode 100644 index 000000000..211daa0fd --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/RocketTier3Entity.java @@ -0,0 +1,417 @@ +package net.mrscauthd.boss_tools.entity; + +import com.google.common.collect.Sets; +import net.minecraft.block.BlockState; +import net.minecraft.entity.*; +import net.minecraft.item.Items; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.particles.IParticleData; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.tags.FluidTags; +import net.minecraft.util.*; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; + +import net.minecraftforge.items.wrapper.EntityHandsInvWrapper; +import net.minecraftforge.items.wrapper.EntityArmorInvWrapper; +import net.minecraftforge.items.wrapper.CombinedInvWrapper; +import net.minecraftforge.items.ItemStackHandler; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.fml.network.NetworkHooks; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.common.capabilities.Capability; + +import net.minecraft.world.World; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.IPacket; +import net.minecraft.nbt.INBT; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.item.ItemStack; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.inventory.container.Container; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.entity.ai.attributes.Attributes; +import net.minecraft.entity.ai.attributes.AttributeModifierMap; +import net.minecraft.enchantment.EnchantmentHelper; + +import javax.annotation.Nullable; +import javax.annotation.Nonnull; + +import io.netty.buffer.Unpooled; +import net.mrscauthd.boss_tools.block.RocketLaunchPad; +import net.mrscauthd.boss_tools.events.Methodes; +import net.mrscauthd.boss_tools.fluid.FluidUtil2; +import net.mrscauthd.boss_tools.gui.screens.rocket.RocketGui; + +import java.util.Set; + +public class RocketTier3Entity extends CreatureEntity { + public double ar = 0; + public double ay = 0; + public double ap = 0; + + public static final DataParameter ROCKET_START = EntityDataManager.createKey(RocketTier1Entity.class, DataSerializers.BOOLEAN); + public static final DataParameter BUCKETS = EntityDataManager.createKey(RocketTier1Entity.class, DataSerializers.VARINT); + public static final DataParameter FUEL = EntityDataManager.createKey(RocketTier1Entity.class, DataSerializers.VARINT); + public static final DataParameter START_TIMER = EntityDataManager.createKey(RocketTier1Entity.class, DataSerializers.VARINT); + + public static final int FUEL_BUCKETS = 3; + + public RocketTier3Entity(EntityType type, World world) { + super(type, world); + this.dataManager.register(ROCKET_START, false); + this.dataManager.register(BUCKETS, 0); + this.dataManager.register(FUEL, 0); + this.dataManager.register(START_TIMER, 0); + } + + public static AttributeModifierMap.MutableAttribute setCustomAttributes() { + return MobEntity.func_233666_p_().createMutableAttribute(Attributes.MAX_HEALTH, 20); + } + + @Override + public IPacket createSpawnPacket() { + return NetworkHooks.getEntitySpawningPacket(this); + } + + @Override + public boolean canBeLeashedTo(PlayerEntity player) { + return false; + } + + public boolean canBePushed() { + return false; + } + + @Override + protected void collideWithEntity(Entity p_82167_1_) { + } + + @Override + public void applyEntityCollision(Entity entityIn) { + } + + public boolean canBeHitWithPotion() { + return false; + } + + @Override + protected boolean canTriggerWalking() { + return false; + } + + @Override + protected void registerGoals() { + super.registerGoals(); + } + + @Override + public CreatureAttribute getCreatureAttribute() { + return CreatureAttribute.UNDEFINED; + } + + @Override + public boolean canDespawn(double distanceToClosestPlayer) { + return false; + } + + @Override + public ItemStack getPickedResult(RayTraceResult target) { + ItemStack itemStack = new ItemStack(ModInnet.TIER_3_ROCKET_ITEM.get(), 1); + itemStack.getOrCreateTag().putInt(BossToolsMod.ModId + ":fuel", this.getDataManager().get(FUEL)); + itemStack.getOrCreateTag().putInt(BossToolsMod.ModId + ":buckets", this.getDataManager().get(BUCKETS)); + + return itemStack; + } + + @Override + public double getMountedYOffset() { + return super.getMountedYOffset() -2.65; + } + + @Override + public SoundEvent getHurtSound(DamageSource ds) { + return null; + } + + @Override + public SoundEvent getDeathSound() { + return null; + } + + //Save Entity Dismount + @Override + public Vector3d func_230268_c_(LivingEntity livingEntity) { + Vector3d[] avector3d = new Vector3d[]{func_233559_a_((double)this.getWidth(), (double)livingEntity.getWidth(), livingEntity.rotationYaw), func_233559_a_((double)this.getWidth(), (double)livingEntity.getWidth(), livingEntity.rotationYaw - 22.5F), func_233559_a_((double)this.getWidth(), (double)livingEntity.getWidth(), livingEntity.rotationYaw + 22.5F), func_233559_a_((double)this.getWidth(), (double)livingEntity.getWidth(), livingEntity.rotationYaw - 45.0F), func_233559_a_((double)this.getWidth(), (double)livingEntity.getWidth(), livingEntity.rotationYaw + 45.0F)}; + Set set = Sets.newLinkedHashSet(); + double d0 = this.getBoundingBox().maxY; + double d1 = this.getBoundingBox().minY - 0.5D; + BlockPos.Mutable blockpos$mutable = new BlockPos.Mutable(); + + for(Vector3d vector3d : avector3d) { + blockpos$mutable.setPos(this.getPosX() + vector3d.x, d0, this.getPosZ() + vector3d.z); + + for(double d2 = d0; d2 > d1; --d2) { + set.add(blockpos$mutable.toImmutable()); + blockpos$mutable.move(Direction.DOWN); + } + } + + for(BlockPos blockpos : set) { + if (!this.world.getFluidState(blockpos).isTagged(FluidTags.LAVA)) { + double d3 = this.world.func_242403_h(blockpos); + if (TransportationHelper.func_234630_a_(d3)) { + Vector3d vector3d1 = Vector3d.copyCenteredWithVerticalOffset(blockpos, d3); + + for(Pose pose : livingEntity.getAvailablePoses()) { + AxisAlignedBB axisalignedbb = livingEntity.getPoseAABB(pose); + if (TransportationHelper.func_234631_a_(this.world, livingEntity, axisalignedbb.offset(vector3d1))) { + livingEntity.setPose(pose); + return vector3d1; + } + } + } + } + } + + return new Vector3d(this.getPosX(), this.getBoundingBox().maxY, this.getPosZ()); + } + + @Override + public void onKillCommand() { + this.dropInventory(); + this.spawnRocketItem(); + this.remove(); + } + + @Override + public boolean attackEntityFrom(DamageSource source, float amount) { + Entity sourceentity = source.getTrueSource(); + + if (!source.isProjectile() && sourceentity != null && sourceentity.isSneaking() && !this.isBeingRidden()) { + this.dropInventory(); + this.spawnRocketItem(); + this.remove(); + + } + return false; + } + + protected void spawnRocketItem() { + if (!world.isRemote()) { + ItemStack itemStack = new ItemStack(ModInnet.TIER_3_ROCKET_ITEM.get(), 1); + itemStack.getOrCreateTag().putInt(BossToolsMod.ModId + ":fuel", this.getDataManager().get(FUEL)); + itemStack.getOrCreateTag().putInt(BossToolsMod.ModId + ":buckets", this.getDataManager().get(BUCKETS)); + + ItemEntity entityToSpawn = new ItemEntity(world, this.getPosX(), this.getPosY(), this.getPosZ(), itemStack); + entityToSpawn.setPickupDelay(10); + world.addEntity(entityToSpawn); + } + } + + @Override + protected void dropInventory() { + super.dropInventory(); + for (int i = 0; i < inventory.getSlots(); ++i) { + ItemStack itemstack = inventory.getStackInSlot(i); + if (!itemstack.isEmpty() && !EnchantmentHelper.hasVanishingCurse(itemstack)) { + this.entityDropItem(itemstack); + } + } + } + + private final ItemStackHandler inventory = new ItemStackHandler(1) { + @Override + public int getSlotLimit(int slot) { + return 64; + } + }; + + private final CombinedInvWrapper combined = new CombinedInvWrapper(inventory, new EntityHandsInvWrapper(this), new EntityArmorInvWrapper(this)); + + @Override + public LazyOptional getCapability(@Nonnull Capability capability, @Nullable Direction side) { + if (this.isAlive() && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY && side == null) { + return LazyOptional.of(() -> combined).cast(); + } + return super.getCapability(capability, side); + } + + public IItemHandlerModifiable getItemHandler() { + return (IItemHandlerModifiable) this.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null).resolve().get(); + } + + @Override + public void writeAdditional(CompoundNBT compound) { + super.writeAdditional(compound); + compound.put("InventoryCustom", inventory.serializeNBT()); + + compound.putBoolean("rocket_start", this.dataManager.get(ROCKET_START)); + compound.putInt("buckets", this.dataManager.get(BUCKETS)); + compound.putInt("fuel", this.dataManager.get(FUEL)); + compound.putInt("start_timer", this.dataManager.get(START_TIMER)); + } + + @Override + public void readAdditional(CompoundNBT compound) { + super.readAdditional(compound); + INBT inventoryCustom = compound.get("InventoryCustom"); + if (inventoryCustom instanceof CompoundNBT) { + inventory.deserializeNBT((CompoundNBT) inventoryCustom); + } + + this.dataManager.set(ROCKET_START, compound.getBoolean("rocket_start")); + this.dataManager.set(BUCKETS, compound.getInt("buckets")); + this.dataManager.set(FUEL, compound.getInt("fuel")); + this.dataManager.set(START_TIMER, compound.getInt("start_timer")); + } + + @Override + public ActionResultType func_230254_b_(PlayerEntity sourceentity, Hand hand) { + super.func_230254_b_(sourceentity, hand); + ActionResultType retval = ActionResultType.func_233537_a_(this.world.isRemote()); + + if (sourceentity instanceof ServerPlayerEntity && sourceentity.isSneaking()) { + + NetworkHooks.openGui((ServerPlayerEntity) sourceentity, new INamedContainerProvider() { + @Override + public ITextComponent getDisplayName() { + return new StringTextComponent("Tier 3 Rocket"); + } + + @Override + public Container createMenu(int id, PlayerInventory inventory, PlayerEntity player) { + PacketBuffer packetBuffer = new PacketBuffer(Unpooled.buffer()); + packetBuffer.writeVarInt(RocketTier3Entity.this.getEntityId()); + return new RocketGui.GuiContainer(id, inventory, packetBuffer); + } + }, buf -> { + buf.writeVarInt(this.getEntityId()); + }); + + return retval; + } + + sourceentity.startRiding(this); + return retval; + } + + @Override + public void baseTick() { + super.baseTick(); + double x = this.getPosX(); + double y = this.getPosY(); + double z = this.getPosZ(); + + if (this.dataManager.get(ROCKET_START)) { + + //Rocket Animation + ar = ar + 1; + if (ar == 1) { + ay = ay + 0.006; + ap = ap + 0.006; + } + if (ar == 2) { + ar = 0; + ay = 0; + ap = 0; + } + + if (this.dataManager.get(START_TIMER) < 200) { + this.dataManager.set(START_TIMER, this.dataManager.get(START_TIMER) + 1); + } + + if (this.dataManager.get(START_TIMER) == 200) { + if (this.getMotion().getY() < 0.5) { + this.setMotion(this.getMotion().getX(), this.getMotion().getY() + 0.1, this.getMotion().getZ()); + } else { + this.setMotion(this.getMotion().getX(), 0.63, this.getMotion().getZ()); + } + } + + if (y > 600 && this.getPassengers().isEmpty() == false) { + Entity pass = this.getPassengers().get(0); + + pass.getPersistentData().putBoolean(BossToolsMod.ModId + ":planet_selection_gui_open", true); + pass.getPersistentData().putString(BossToolsMod.ModId + ":rocket_type", this.getType().toString()); + pass.getPersistentData().putString(BossToolsMod.ModId + ":slot0", this.inventory.getStackInSlot(0).getItem().getRegistryName().toString()); + pass.setNoGravity(true); + + this.remove(); + } else if (y > 600 && this.getPassengers().isEmpty() == true) { + this.remove(); + } + + //Particle Spawn + if (this.dataManager.get(START_TIMER) == 200) { + if (world instanceof ServerWorld) { + for (ServerPlayerEntity p : ((ServerWorld) world).getPlayers()) { + ((ServerWorld) world).spawnParticle(p, (IParticleData) ModInnet.LARGE_FLAME_PARTICLE.get(), true, this.getPosX(), this.getPosY() - 2.2, this.getPosZ(), 20, 0.1, 0.1, 0.1, 0.001); + ((ServerWorld) world).spawnParticle(p, (IParticleData) ModInnet.SMOKE_PARTICLE.get(), true, this.getPosX(), this.getPosY() - 3.2, this.getPosZ(), 10, 0.1, 0.1, 0.1, 0.04); + } + } + } else { + if (world instanceof ServerWorld) { + for (ServerPlayerEntity p : ((ServerWorld) world).getPlayers()) { + ((ServerWorld) world).spawnParticle(p, ParticleTypes.CAMPFIRE_COSY_SMOKE, true, this.getPosX(), this.getPosY() - 0.1, this.getPosZ(), 6, 0.1, 0.1, 0.1, 0.023); + } + } + } + + } + + //Fuel Load up + if (Methodes.tagCheck(FluidUtil2.findBucketFluid(this.inventory.getStackInSlot(0).getItem()), ModInnet.FLUID_VEHICLE_FUEL_TAG) && this.dataManager.get(BUCKETS) < 3) { + if (this.dataManager.get(FUEL) == 0 && this.dataManager.get(BUCKETS) == 0) { + + this.inventory.setStackInSlot(0, new ItemStack(Items.BUCKET)); + this.getDataManager().set(BUCKETS, this.getDataManager().get(BUCKETS) + 1); + } else if (this.dataManager.get(FUEL) == 100 && this.dataManager.get(BUCKETS) == 1) { + + this.inventory.setStackInSlot(0, new ItemStack(Items.BUCKET)); + this.getDataManager().set(BUCKETS, this.getDataManager().get(BUCKETS) + 1); + } else if (this.dataManager.get(FUEL) == 200 && this.dataManager.get(BUCKETS) == 2) { + + this.inventory.setStackInSlot(0, new ItemStack(Items.BUCKET)); + this.getDataManager().set(BUCKETS, this.getDataManager().get(BUCKETS) + 1); + } + } + + if (this.dataManager.get(BUCKETS) == 1 && this.dataManager.get(FUEL) < 100) { + this.getDataManager().set(FUEL, this.dataManager.get(FUEL) + 1); + + } else if (this.dataManager.get(BUCKETS) == 2 && this.dataManager.get(FUEL) < 200) { + this.getDataManager().set(FUEL, this.dataManager.get(FUEL) + 1); + + } else if (this.dataManager.get(BUCKETS) == 3 && this.dataManager.get(FUEL) < 300) { + this.getDataManager().set(FUEL, this.dataManager.get(FUEL) + 1); + } + + if (this.isOnGround() || this.isInWater()) { + + BlockState state = world.getBlockState(new BlockPos(Math.floor(x), y - 0.1, Math.floor(z))); + + if (!world.isAirBlock(new BlockPos(Math.floor(x), y - 0.01, Math.floor(z))) && state.getBlock() instanceof RocketLaunchPad && !state.get(RocketLaunchPad.STAGE) + || world.getBlockState(new BlockPos(Math.floor(x), Math.floor(y), Math.floor(z))).getBlock() != ModInnet.ROCKET_LAUNCH_PAD.get().getDefaultState().getBlock()) { + + this.dropInventory(); + this.spawnRocketItem(); + this.remove(); + } + } + } + +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/RoverEntity.java b/src/main/java/net/mrscauthd/boss_tools/entity/RoverEntity.java new file mode 100644 index 000000000..fb34ea3e2 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/RoverEntity.java @@ -0,0 +1,451 @@ +package net.mrscauthd.boss_tools.entity; + +import com.google.common.collect.Sets; +import io.netty.buffer.Unpooled; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.*; +import net.minecraft.entity.ai.attributes.AttributeModifierMap; +import net.minecraft.entity.ai.attributes.Attributes; +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.entity.passive.AnimalEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.INBT; +import net.minecraft.network.IPacket; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.tags.FluidTags; +import net.minecraft.util.*; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fml.network.NetworkHooks; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.ItemStackHandler; +import net.minecraftforge.items.wrapper.CombinedInvWrapper; +import net.minecraftforge.items.wrapper.EntityArmorInvWrapper; +import net.minecraftforge.items.wrapper.EntityHandsInvWrapper; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.events.Methodes; +import net.mrscauthd.boss_tools.fluid.FluidUtil2; +import net.mrscauthd.boss_tools.gui.screens.rover.RoverGui; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.Set; + +public class RoverEntity extends CreatureEntity { + private double speed = 0; + private boolean forward = false; + + public static final DataParameter FUEL = EntityDataManager.createKey(RocketTier1Entity.class, DataSerializers.VARINT); + + public static final int FUEL_BUCKETS = 3; + + public RoverEntity(EntityType type, World worldIn) { + super(type, worldIn); + this.dataManager.register(FUEL, 0); + } + + public static AttributeModifierMap.MutableAttribute setCustomAttributes() { + return MobEntity.func_233666_p_().createMutableAttribute(Attributes.MAX_HEALTH, 20); + } + + @Override + public IPacket createSpawnPacket() { + return NetworkHooks.getEntitySpawningPacket(this); + } + + + @Override + public boolean canBeLeashedTo(PlayerEntity player) { + return false; + } + + public boolean canBePushed() { + return false; + } + + @Override + protected void collideWithEntity(Entity p_82167_1_) { + } + + @Override + public void applyEntityCollision(Entity entityIn) { + } + + @Deprecated + public boolean canBeRiddenInWater() { + return true; + } + + public boolean canBeHitWithPotion() { + return false; + } + + @Override + protected boolean canTriggerWalking() { + return false; + } + + @Override + protected void registerGoals() { + super.registerGoals(); + } + + @Override + public CreatureAttribute getCreatureAttribute() { + return CreatureAttribute.UNDEFINED; + } + + @Override + public boolean canDespawn(double distanceToClosestPlayer) { + return false; + } + + @Override + public SoundEvent getHurtSound(DamageSource ds) { + return null; + } + + @Override + public SoundEvent getDeathSound() { + return null; + } + + @OnlyIn(Dist.CLIENT) + public void applyOrientationToEntity(Entity entityToUpdate) { + this.applyYawToEntity(entityToUpdate); + } + + //Save Entity Dismount + @Override + public Vector3d func_230268_c_(LivingEntity livingEntity) { + Vector3d[] avector3d = new Vector3d[]{func_233559_a_((double)this.getWidth(), (double)livingEntity.getWidth(), livingEntity.rotationYaw), func_233559_a_((double)this.getWidth(), (double)livingEntity.getWidth(), livingEntity.rotationYaw - 22.5F), func_233559_a_((double)this.getWidth(), (double)livingEntity.getWidth(), livingEntity.rotationYaw + 22.5F), func_233559_a_((double)this.getWidth(), (double)livingEntity.getWidth(), livingEntity.rotationYaw - 45.0F), func_233559_a_((double)this.getWidth(), (double)livingEntity.getWidth(), livingEntity.rotationYaw + 45.0F)}; + Set set = Sets.newLinkedHashSet(); + double d0 = this.getBoundingBox().maxY; + double d1 = this.getBoundingBox().minY - 0.5D; + BlockPos.Mutable blockpos$mutable = new BlockPos.Mutable(); + + for(Vector3d vector3d : avector3d) { + blockpos$mutable.setPos(this.getPosX() + vector3d.x, d0, this.getPosZ() + vector3d.z); + + for(double d2 = d0; d2 > d1; --d2) { + set.add(blockpos$mutable.toImmutable()); + blockpos$mutable.move(Direction.DOWN); + } + } + + for(BlockPos blockpos : set) { + if (!this.world.getFluidState(blockpos).isTagged(FluidTags.LAVA)) { + double d3 = this.world.func_242403_h(blockpos); + if (TransportationHelper.func_234630_a_(d3)) { + Vector3d vector3d1 = Vector3d.copyCenteredWithVerticalOffset(blockpos, d3); + + for(Pose pose : livingEntity.getAvailablePoses()) { + AxisAlignedBB axisalignedbb = livingEntity.getPoseAABB(pose); + if (TransportationHelper.func_234631_a_(this.world, livingEntity, axisalignedbb.offset(vector3d1))) { + livingEntity.setPose(pose); + return vector3d1; + } + } + } + } + } + + return new Vector3d(this.getPosX(), this.getBoundingBox().maxY, this.getPosZ()); + } + + protected void applyYawToEntity(Entity entityToUpdate) { + entityToUpdate.setRenderYawOffset(this.rotationYaw); + float f = MathHelper.wrapDegrees(entityToUpdate.rotationYaw - this.rotationYaw); + float f1 = MathHelper.clamp(f, -105.0F, 105.0F); + entityToUpdate.prevRotationYaw += f1 - f; + entityToUpdate.rotationYaw += f1 - f; + entityToUpdate.setRotationYawHead(entityToUpdate.rotationYaw); + } + + @Override + protected void removePassenger(Entity passenger) { + if (passenger.isSneaking() && !passenger.world.isRemote) { + if (passenger instanceof ServerPlayerEntity) { + this.setAIMoveSpeed(0f); + } + } + super.removePassenger(passenger); + } + + @Override + public ItemStack getPickedResult(RayTraceResult target) { + ItemStack itemStack = new ItemStack(ModInnet.ROVER_ITEM.get(), 1); + itemStack.getOrCreateTag().putInt(BossToolsMod.ModId + ":fuel", this.getDataManager().get(FUEL)); + + return itemStack; + } + + @Override + public double getMountedYOffset() { + return super.getMountedYOffset() - 0.15; + } + + @Override + public void onKillCommand() { + this.spawnRoverItem(); + this.dropInventory(); + this.remove(); + } + + @Override + public AxisAlignedBB getRenderBoundingBox() { + return new AxisAlignedBB(this.getPosX(),this.getPosY(),this.getPosZ(),this.getPosX(),this.getPosY(), this.getPosZ()).grow(4.5,4.5,4.5); + } + + @Override + public boolean attackEntityFrom(DamageSource source, float amount) { + if (!source.isProjectile() && source.getTrueSource() != null && source.getTrueSource().isSneaking() && !this.isBeingRidden()) { + this.spawnRoverItem(); + this.dropInventory(); + this.remove(); + } + + return false; + } + + protected void spawnRoverItem() { + if (!world.isRemote()) { + ItemStack itemStack = new ItemStack(ModInnet.ROVER_ITEM.get(), 1); + itemStack.getOrCreateTag().putInt(BossToolsMod.ModId + ":fuel", this.getDataManager().get(FUEL)); + + ItemEntity entityToSpawn = new ItemEntity(world, this.getPosX(), this.getPosY(), this.getPosZ(), itemStack); + entityToSpawn.setPickupDelay(10); + world.addEntity(entityToSpawn); + } + } + + @Override + protected void dropInventory() { + super.dropInventory(); + for (int i = 0; i < inventory.getSlots(); ++i) { + ItemStack itemstack = inventory.getStackInSlot(i); + if (!itemstack.isEmpty() && !EnchantmentHelper.hasVanishingCurse(itemstack)) { + this.entityDropItem(itemstack); + } + } + } + + private final ItemStackHandler inventory = new ItemStackHandler(9) { + @Override + public int getSlotLimit(int slot) { + return 64; + } + }; + + private final CombinedInvWrapper combined = new CombinedInvWrapper(inventory, new EntityHandsInvWrapper(this), new EntityArmorInvWrapper(this)); + + @Override + public LazyOptional getCapability(@Nonnull Capability capability, @Nullable Direction side) { + if (this.isAlive() && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY && side == null) { + return LazyOptional.of(() -> combined).cast(); + } + return super.getCapability(capability, side); + } + + public IItemHandlerModifiable getItemHandler() { + return (IItemHandlerModifiable) this.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null).resolve().get(); + } + + @Override + public void writeAdditional(CompoundNBT compound) { + super.writeAdditional(compound); + compound.put("InventoryCustom", inventory.serializeNBT()); + + compound.putInt("fuel", this.dataManager.get(FUEL)); + } + + @Override + public void readAdditional(CompoundNBT compound) { + super.readAdditional(compound); + INBT inventoryCustom = compound.get("InventoryCustom"); + if (inventoryCustom instanceof CompoundNBT) { + inventory.deserializeNBT((CompoundNBT) inventoryCustom); + } + + this.dataManager.set(FUEL, compound.getInt("fuel")); + } + + @Override + public ActionResultType func_230254_b_(PlayerEntity sourceentity, Hand hand) { + super.func_230254_b_(sourceentity, hand); + ActionResultType retval = ActionResultType.func_233537_a_(this.world.isRemote()); + + if (sourceentity instanceof ServerPlayerEntity && sourceentity.isSneaking()) { + + NetworkHooks.openGui((ServerPlayerEntity) sourceentity, new INamedContainerProvider() { + @Override + public ITextComponent getDisplayName() { + return RoverEntity.this.getDisplayName(); + } + + @Override + public Container createMenu(int id, PlayerInventory inventory, PlayerEntity player) { + PacketBuffer packetBuffer = new PacketBuffer(Unpooled.buffer()); + packetBuffer.writeVarInt(RoverEntity.this.getEntityId()); + return new RoverGui.GuiContainer(id, inventory, packetBuffer); + } + }, buf -> { + buf.writeVarInt(this.getEntityId()); + }); + + return retval; + } + + sourceentity.startRiding(this); + return retval; + } + + public boolean getforward() { + return forward; + } + + @Override + public void baseTick() { + super.baseTick(); + + //Fuel Load up + if (Methodes.tagCheck(FluidUtil2.findBucketFluid(this.inventory.getStackInSlot(0).getItem()), ModInnet.FLUID_VEHICLE_FUEL_TAG)) { + + if (this.dataManager.get(FUEL) <= 2000) { + this.getDataManager().set(FUEL, this.getDataManager().get(FUEL) + 1000); + this.inventory.setStackInSlot(0, new ItemStack(Items.BUCKET)); + } + } + + if (this.getPassengers().isEmpty()) { + return; + } + + if (!(this.getPassengers().get(0) instanceof PlayerEntity)) { + return; + } + + if (this.areEyesInFluid(FluidTags.WATER)) { + return; + } + + PlayerEntity passanger = (PlayerEntity) this.getPassengers().get(0); + + if (passanger.moveForward > 0.01 && this.getDataManager().get(FUEL) != 0) { + + this.dataManager.set(FUEL, this.getDataManager().get(FUEL) - 1); + forward = true; + } else if (passanger.moveForward < -0.01 && this.getDataManager().get(FUEL) != 0) { + + this.dataManager.set(FUEL, this.getDataManager().get(FUEL) - 1); + forward = false; + } + } + + @Override + public void travel(Vector3d dir) { + + if (!this.getPassengers().isEmpty() && this.getPassengers().get(0) instanceof PlayerEntity) { + + PlayerEntity passanger = (PlayerEntity) this.getPassengers().get(0); + + this.jumpMovementFactor = this.getAIMoveSpeed() * 0.15F; + this.stepHeight = 1.0F; + + double pmovement = passanger.moveForward; + + if (pmovement == 0 || this.getDataManager().get(FUEL) == 0 || this.areEyesInFluid(FluidTags.WATER)) { + pmovement = 0; + this.setAIMoveSpeed(0f); + + if (speed != 0) { + if (speed > 0.02) { + speed = speed - 0.02; + } + } + } + + if (this.forward && this.getDataManager().get(FUEL) != 0) { + if (this.getAIMoveSpeed() >= 0.01) { + if (speed <= 0.32) { + speed = speed + 0.02; + } + } + + if (this.getAIMoveSpeed() < 0.25) { + this.setAIMoveSpeed(this.getAIMoveSpeed() + 0.02F); + } + + } + + if (!this.forward) { + + if (this.getDataManager().get(FUEL) != 0 && !this.areEyesInFluid(FluidTags.WATER)) { + + if (this.getAIMoveSpeed() <= 0.04) { + this.setAIMoveSpeed(this.getAIMoveSpeed() + 0.02f); + } + } + + if (this.getAIMoveSpeed() >= 0.08) { + this.setAIMoveSpeed(0f); + } + } + + if (this.forward) { + this.setWellRotationPlus(4.0f, 0.4f); + } else { + this.setWellRotationMinus(8.0f, 0.8f); + } + + super.travel(new Vector3d(0, 0, pmovement)); + return; + } + + super.travel(new Vector3d(0, 0, 0)); + } + + public void setWellRotationMinus(float rotation1, float rotation2) { + this.prevLimbSwingAmount = this.limbSwingAmount; + double d1 = this.getPosX() - this.prevPosX; + double d0 = this.getPosZ() - this.prevPosZ; + float f1 = -MathHelper.sqrt(d1 * d1 + d0 * d0) * rotation1; + if (f1 > 1.0F) + f1 = 1.0F; + this.limbSwingAmount += (f1 - this.limbSwingAmount) * rotation2; + this.limbSwing += this.limbSwingAmount; + } + + public void setWellRotationPlus(float rotation1, float rotation2) { + this.prevLimbSwingAmount = this.limbSwingAmount; + double d1 = this.getPosX() - this.prevPosX; + double d0 = this.getPosZ() - this.prevPosZ; + float f1 = MathHelper.sqrt(d1 * d1 + d0 * d0) * rotation1; + if (f1 > 1.0F) + f1 = 1.0F; + this.limbSwingAmount += (f1 - this.limbSwingAmount) * rotation2; + this.limbSwing += this.limbSwingAmount; + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/StarCrawlerEntity.java b/src/main/java/net/mrscauthd/boss_tools/entity/StarCrawlerEntity.java new file mode 100644 index 000000000..b2712008a --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/StarCrawlerEntity.java @@ -0,0 +1,87 @@ +package net.mrscauthd.boss_tools.entity; + +import net.minecraft.entity.projectile.ArrowEntity; +import net.minecraft.entity.projectile.SpectralArrowEntity; +import net.minecraft.util.SoundEvent; +import net.mrscauthd.boss_tools.events.Config; + +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.fml.network.NetworkHooks; + +import net.minecraft.world.World; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.DamageSource; +import net.minecraft.network.IPacket; +import net.minecraft.entity.monster.MonsterEntity; +import net.minecraft.entity.ai.goal.RandomWalkingGoal; +import net.minecraft.entity.ai.goal.MeleeAttackGoal; +import net.minecraft.entity.ai.goal.LookRandomlyGoal; +import net.minecraft.entity.ai.goal.HurtByTargetGoal; +import net.minecraft.entity.ai.attributes.Attributes; +import net.minecraft.entity.ai.attributes.AttributeModifierMap; +import net.minecraft.entity.MobEntity; +import net.minecraft.entity.EntityType; + +public class StarCrawlerEntity extends MonsterEntity { + public StarCrawlerEntity(EntityType type, World world) { + super(type, world); + this.experienceValue = 5; + } + + public static AttributeModifierMap.MutableAttribute setCustomAttributes() { + return MobEntity.func_233666_p_() + .createMutableAttribute(Attributes.MOVEMENT_SPEED, 0.4) + .createMutableAttribute(Attributes.MAX_HEALTH, 40) + .createMutableAttribute(Attributes.ATTACK_DAMAGE, 9); + } + + @Override + protected void registerGoals() { + super.registerGoals(); + this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 0.8, false)); + this.goalSelector.addGoal(2, new RandomWalkingGoal(this, 0.6)); + this.targetSelector.addGoal(3, new HurtByTargetGoal(this)); + this.goalSelector.addGoal(4, new LookRandomlyGoal(this)); + } + + @Override + public IPacket createSpawnPacket() { + return NetworkHooks.getEntitySpawningPacket(this); + } + + @Override + protected boolean isDespawnPeaceful() { + return false; + } + + @Override + public SoundEvent getHurtSound(DamageSource ds) { + return ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("entity.turtle.hurt")); + } + + @Override + public SoundEvent getDeathSound() { + return ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("entity.turtle.death")); + } + + @Override + public boolean attackEntityFrom(DamageSource source, float amount) { + if (source.getImmediateSource() instanceof SpectralArrowEntity) + return false; + if (source.getImmediateSource() instanceof ArrowEntity) + return false; + if (source == DamageSource.CACTUS) + return false; + return super.attackEntityFrom(source, amount); + } + + @Override + public void baseTick() { + super.baseTick(); + if (!Config.StarCrawlerSpawn) { + if (!this.world.isRemote()) { + this.remove(); + } + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/alien/AlienEntity.java b/src/main/java/net/mrscauthd/boss_tools/entity/alien/AlienEntity.java new file mode 100644 index 000000000..0536da333 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/alien/AlienEntity.java @@ -0,0 +1,276 @@ +package net.mrscauthd.boss_tools.entity.alien; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; +import com.mojang.datafixers.util.Pair; +import com.mojang.serialization.Dynamic; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import net.minecraft.entity.*; +import net.minecraft.entity.ai.brain.Brain; +import net.minecraft.entity.ai.brain.memory.MemoryModuleStatus; +import net.minecraft.entity.ai.brain.memory.MemoryModuleType; +import net.minecraft.entity.ai.brain.schedule.Activity; +import net.minecraft.entity.ai.brain.schedule.Schedule; +import net.minecraft.entity.ai.brain.task.*; +import net.minecraft.entity.ai.goal.AvoidEntityGoal; +import net.minecraft.entity.effect.LightningBoltEntity; +import net.minecraft.entity.merchant.IMerchant; +import net.minecraft.entity.merchant.villager.VillagerData; +import net.minecraft.entity.merchant.villager.VillagerEntity; +import net.minecraft.entity.merchant.villager.VillagerProfession; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.villager.VillagerType; +import net.minecraft.item.ItemStack; +import net.minecraft.item.MerchantOffer; +import net.minecraft.item.MerchantOffers; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.potion.EffectInstance; +import net.minecraft.potion.Effects; +import net.minecraft.stats.Stats; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.DamageSource; +import net.minecraft.util.Hand; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.MathHelper; +import net.minecraft.village.PointOfInterestType; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.IServerWorld; +import net.minecraft.world.server.ServerWorld; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.entity.AlienZombieEntity; +import net.mrscauthd.boss_tools.events.Config; + + +import net.minecraft.world.World; +import net.minecraft.entity.ai.attributes.Attributes; +import net.minecraft.entity.ai.attributes.AttributeModifierMap; + +import javax.annotation.Nullable; +import java.util.Optional; +import java.util.Random; +import java.util.Set; + +public class AlienEntity extends VillagerEntity implements IMerchant, INPC { + public static ImmutableList>> core(VillagerProfession profession, float p_220638_1_) { + return ImmutableList.of(Pair.of(0, new SwimTask(0.8F)), Pair.of(0, new InteractWithDoorTask()), Pair.of(0, new LookTask(45, 90)), Pair.of(0, new PanicTask()), Pair.of(0, new WakeUpTask()), Pair.of(0, new HideFromRaidOnBellRingTask()), Pair.of(0, new BeginRaidTask()), Pair.of(0, new ExpirePOITask(profession.getPointOfInterest(), MemoryModuleType.JOB_SITE)), Pair.of(0, new ExpirePOITask(profession.getPointOfInterest(), MemoryModuleType.POTENTIAL_JOB_SITE)), Pair.of(1, new WalkToTargetTask()), Pair.of(2, new SwitchVillagerJobTask(profession)), Pair.of(3, new TradeTask(p_220638_1_)), Pair.of(5, new PickupWantedItemTask(p_220638_1_, false, 4)), Pair.of(6, new GatherPOITask(profession.getPointOfInterest(), MemoryModuleType.JOB_SITE, MemoryModuleType.POTENTIAL_JOB_SITE, true, Optional.empty())), Pair.of(7, new FindPotentialJobTask(p_220638_1_)), Pair.of(8, new FindJobTask(p_220638_1_)), Pair.of(10, new GatherPOITask(PointOfInterestType.HOME, MemoryModuleType.HOME, false, Optional.of((byte)14))), Pair.of(10, new GatherPOITask(PointOfInterestType.MEETING, MemoryModuleType.MEETING_POINT, true, Optional.of((byte)14)))); + } + + public static AttributeModifierMap.MutableAttribute setCustomAttributes(){ + return MobEntity.func_233666_p_() + .createMutableAttribute(Attributes.MAX_HEALTH, 20) + .createMutableAttribute(Attributes.MOVEMENT_SPEED,0.5D) + .createMutableAttribute(Attributes.FOLLOW_RANGE, 48.0D); + } + + public AlienEntity(EntityType type, World worldIn) { + super(type, worldIn); + } + + @Override + public AlienEntity func_241840_a(ServerWorld p_241840_1_, AgeableEntity p_241840_2_) { + + AlienEntity alienentity = new AlienEntity((EntityType) ModInnet.ALIEN.get(),this.world); + alienentity.onInitialSpawn(p_241840_1_, p_241840_1_.getDifficultyForLocation(alienentity.getPosition()), SpawnReason.BREEDING, (ILivingEntityData)null, (CompoundNBT)null); + return alienentity; + } + + @Override + public void func_241841_a(ServerWorld p_241841_1_, LightningBoltEntity p_241841_2_) { + this.forceFireTicks(this.getFireTimer() + 1); + if (this.getFireTimer() == 0) { + this.setFire(8); + } + + this.attackEntityFrom(DamageSource.LIGHTNING_BOLT, p_241841_2_.getDamage()); + } + + @Override + public ActionResultType func_230254_b_(PlayerEntity p_230254_1_, Hand p_230254_2_) { + ItemStack itemstack = p_230254_1_.getHeldItem(p_230254_2_); + if (itemstack.getItem() != ModInnet.ALIEN_SPAWN_EGG.get() && this.isAlive() && !this.hasCustomer() && !this.isSleeping() && !p_230254_1_.isSecondaryUseActive()) { + if (this.isChild()) { + this.shakeHead(); + return ActionResultType.func_233537_a_(this.world.isRemote); + } else { + boolean flag = this.getOffers().isEmpty(); + if (p_230254_2_ == Hand.MAIN_HAND) { + if (flag && !this.world.isRemote) { + this.shakeHead(); + } + + p_230254_1_.addStat(Stats.TALKED_TO_VILLAGER); + } + + if (flag) { + return ActionResultType.func_233537_a_(this.world.isRemote); + } else { + if (!this.world.isRemote && !this.offers.isEmpty()) { + this.displayMerchantGui(p_230254_1_); + } + + return ActionResultType.func_233537_a_(this.world.isRemote); + } + } + } else { + return ActionResultType.PASS; + } + } + + private void displayMerchantGui(PlayerEntity player) { + this.recalculateSpecialPricesFor(player); + this.setCustomer(player); + this.openMerchantContainer(player, this.getDisplayName(), this.getVillagerData().getLevel()); + } + + private void recalculateSpecialPricesFor(PlayerEntity playerIn) { + int i = this.getPlayerReputation(playerIn); + if (i != 0) { + for(MerchantOffer merchantoffer : this.getOffers()) { + merchantoffer.increaseSpecialPrice(-MathHelper.floor((float)i * merchantoffer.getPriceMultiplier())); + } + } + + if (playerIn.isPotionActive(Effects.HERO_OF_THE_VILLAGE)) { + EffectInstance effectinstance = playerIn.getActivePotionEffect(Effects.HERO_OF_THE_VILLAGE); + int k = effectinstance.getAmplifier(); + + for(MerchantOffer merchantoffer1 : this.getOffers()) { + double d0 = 0.3D + 0.0625D * (double)k; + int j = (int)Math.floor(d0 * (double)merchantoffer1.getBuyingStackFirst().getCount()); + merchantoffer1.increaseSpecialPrice(-Math.max(j, 1)); + } + } + + } + + private void shakeHead() { + this.setShakeHeadTicks(40); + if (!this.world.isRemote()) { + this.playSound(SoundEvents.ENTITY_VILLAGER_NO, this.getSoundVolume(), this.getSoundPitch()); + } + + } + + @Override + protected Brain createBrain(Dynamic dynamicIn) { + Brain brain = this.getBrainCodec().deserialize(dynamicIn); + this.initBrain(brain); + return brain; + } + + @Override + public void resetBrain(ServerWorld serverWorldIn) { + Brain brain = this.getBrain(); + brain.stopAllTasks(serverWorldIn, this); + this.brain = brain.copy(); + this.initBrain(this.getBrain()); + } + + @Override + protected void registerGoals() { + super.registerGoals(); + this.goalSelector.addGoal(1, new AvoidEntityGoal<>(this, AlienZombieEntity.class, 15.0F, 0.5F, 0.5F)); + } + + private void initBrain(Brain villagerBrain) { + VillagerProfession villagerprofession = this.getVillagerData().getProfession(); + if (this.isChild()) { + villagerBrain.setSchedule(Schedule.VILLAGER_BABY); + villagerBrain.registerActivity(Activity.PLAY, VillagerTasks.play(0.5F)); + } else { + villagerBrain.setSchedule(Schedule.VILLAGER_DEFAULT); + villagerBrain.registerActivity(Activity.WORK, VillagerTasks.work(villagerprofession, 0.5F), ImmutableSet.of(Pair.of(MemoryModuleType.JOB_SITE, MemoryModuleStatus.VALUE_PRESENT))); + } + + villagerBrain.registerActivity(Activity.CORE, AlienEntity.core(villagerprofession, 0.5F)); + villagerBrain.registerActivity(Activity.REST, VillagerTasks.rest(villagerprofession, 0.5F)); + villagerBrain.registerActivity(Activity.IDLE, VillagerTasks.idle(villagerprofession, 0.5F)); + villagerBrain.registerActivity(Activity.PANIC, VillagerTasks.panic(villagerprofession, 0.5F)); + villagerBrain.registerActivity(Activity.PRE_RAID, VillagerTasks.preRaid(villagerprofession, 0.5F)); + villagerBrain.registerActivity(Activity.RAID, VillagerTasks.raid(villagerprofession, 0.5F)); + villagerBrain.registerActivity(Activity.HIDE, VillagerTasks.hide(villagerprofession, 0.5F)); + villagerBrain.setDefaultActivities(ImmutableSet.of(Activity.CORE)); + villagerBrain.setFallbackActivity(Activity.IDLE); + villagerBrain.switchTo(Activity.IDLE); + villagerBrain.updateActivity(this.world.getDayTime(), this.world.getGameTime()); + } + + @Nullable + @Override + public ILivingEntityData onInitialSpawn(IServerWorld worldIn, DifficultyInstance difficultyIn, SpawnReason reason, @Nullable ILivingEntityData spawnDataIn, @Nullable CompoundNBT dataTag) { + + if (reason == SpawnReason.COMMAND || reason == SpawnReason.SPAWN_EGG || reason == SpawnReason.SPAWNER || reason == SpawnReason.DISPENSER) { + this.setVillagerData(this.getVillagerData().withType(VillagerType.func_242371_a(worldIn.func_242406_i(this.getPosition())))); + } + + if (reason == SpawnReason.STRUCTURE) { + this.assignProfessionWhenSpawned = true; + } + + if (spawnDataIn == null) { + spawnDataIn = new AgeableEntity.AgeableData(false); + } + + int max = 13; + int min = 1; + + for (int i = 0; i < new Random().nextInt((max+1)-min)+min; i++) { + + AlienJobs j = AlienJobs.values()[i]; + + this.setVillagerData(this.getVillagerData().withProfession(j.getAlienJobs())); + } + + return spawnDataIn; + } + + @Override + public void func_242367_a(ServerWorld p_242367_1_, long p_242367_2_, int p_242367_4_) { + } + + @Override + protected void populateTradeData() { + VillagerData villagerdata = this.getVillagerData(); + Int2ObjectMap int2objectmap = AlienTrade.VILLAGER_DEFAULT_TRADES.get(villagerdata.getProfession()); + if (int2objectmap != null && !int2objectmap.isEmpty()) { + AlienTrade.ITrade[] avillagertrades$itrade = int2objectmap.get(villagerdata.getLevel()); + if (avillagertrades$itrade != null) { + MerchantOffers merchantoffers = this.getOffers(); + this.addTrades(merchantoffers, avillagertrades$itrade, 6); + } + } + } + + protected void addTrades(MerchantOffers givenMerchantOffers, AlienTrade.ITrade[] newTrades, int maxNumbers) { + Set set = Sets.newHashSet(); + if (newTrades.length > maxNumbers) { + while(set.size() < maxNumbers) { + set.add(this.rand.nextInt(newTrades.length)); + } + } else { + for(int i = 0; i < newTrades.length; ++i) { + set.add(i); + } + } + + for(Integer integer : set) { + AlienTrade.ITrade villagertrades$itrade = newTrades[integer]; + MerchantOffer merchantoffer = villagertrades$itrade.getOffer(this, this.rand); + if (merchantoffer != null) { + givenMerchantOffers.add(merchantoffer); + } + } + + } + + @Override + public void baseTick() { + super.baseTick(); + + if (!Config.AlienSpawn) { + this.remove(); + } + } + +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/alien/AlienJobs.java b/src/main/java/net/mrscauthd/boss_tools/entity/alien/AlienJobs.java new file mode 100644 index 000000000..8a6700450 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/alien/AlienJobs.java @@ -0,0 +1,30 @@ +package net.mrscauthd.boss_tools.entity.alien; + +import net.minecraft.entity.merchant.villager.VillagerProfession; + +public enum AlienJobs { + JOB1(VillagerProfession.FARMER), + JOB2(VillagerProfession.FISHERMAN), + JOB3(VillagerProfession.SHEPHERD), + JOB4(VillagerProfession.FLETCHER), + JOB5(VillagerProfession.LIBRARIAN), + JOB6(VillagerProfession.CARTOGRAPHER), + JOB7(VillagerProfession.CLERIC), + JOB8(VillagerProfession.ARMORER), + JOB9(VillagerProfession.WEAPONSMITH), + JOB10(VillagerProfession.TOOLSMITH), + JOB11(VillagerProfession.BUTCHER), + JOB12(VillagerProfession.LEATHERWORKER), + JOB13(VillagerProfession.MASON); + + public VillagerProfession profession; + + private AlienJobs(VillagerProfession profession){ + this.profession = profession; + } + + public VillagerProfession getAlienJobs() { + return profession; + } + +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/alien/AlienTrade.java b/src/main/java/net/mrscauthd/boss_tools/entity/alien/AlienTrade.java new file mode 100644 index 000000000..c99ee9c26 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/alien/AlienTrade.java @@ -0,0 +1,382 @@ +package net.mrscauthd.boss_tools.entity.alien; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Random; +import java.util.stream.Collectors; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.Blocks; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentData; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.merchant.villager.VillagerProfession; +import net.minecraft.entity.villager.IVillagerDataHolder; +import net.minecraft.entity.villager.VillagerType; +import net.minecraft.item.DyeColor; +import net.minecraft.item.DyeItem; +import net.minecraft.item.DyeableArmorItem; +import net.minecraft.item.EnchantedBookItem; +import net.minecraft.item.FilledMapItem; +import net.minecraft.item.IDyeableArmorItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.item.MerchantOffer; +import net.minecraft.item.SuspiciousStewItem; +import net.minecraft.potion.Effect; +import net.minecraft.potion.Effects; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionBrewing; +import net.minecraft.potion.PotionUtils; +import net.minecraft.util.IItemProvider; +import net.minecraft.util.Util; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.gen.feature.structure.Structure; +import net.minecraft.world.server.ServerWorld; +import net.minecraft.world.storage.MapData; +import net.minecraft.world.storage.MapDecoration; +import net.mrscauthd.boss_tools.ModInnet; + +public class AlienTrade { + public static int maxUseIn = 9999999; + + public static final Map> VILLAGER_DEFAULT_TRADES = Util.make(Maps.newHashMap(), (p_221237_0_) -> { + p_221237_0_.put(VillagerProfession.FARMER, gatAsIntMap(ImmutableMap.of(1, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.WHEAT, 20, 16, 2), new AlienTrade.EmeraldForItemsTrade(Items.POTATO, 26, 16, 2), new AlienTrade.EmeraldForItemsTrade(Items.CARROT, 22, 16, 2), new AlienTrade.EmeraldForItemsTrade(Items.BEETROOT, 15, 16, 2), new AlienTrade.ItemsForEmeraldsTrade(ModInnet.CHESE.get(), 1, 6, 16, 1)}, 2, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Blocks.PUMPKIN, 6, 12, 10), new AlienTrade.ItemsForEmeraldsTrade(Items.PUMPKIN_PIE, 1, 4, 5), new AlienTrade.ItemsForEmeraldsTrade(Items.APPLE, 1, 4, 16, 5)}, 3, new AlienTrade.ITrade[]{new AlienTrade.ItemsForEmeraldsTrade(Items.COOKIE, 3, 18, 10), new AlienTrade.EmeraldForItemsTrade(Blocks.MELON, 4, 12, 20)}, 4, new AlienTrade.ITrade[]{new AlienTrade.ItemsForEmeraldsTrade(Blocks.CAKE, 1, 1, 12, 15), new AlienTrade.SuspiciousStewForEmeraldTrade(Effects.NIGHT_VISION, 100, 15), new AlienTrade.SuspiciousStewForEmeraldTrade(Effects.JUMP_BOOST, 160, 15), new AlienTrade.SuspiciousStewForEmeraldTrade(Effects.WEAKNESS, 140, 15), new AlienTrade.SuspiciousStewForEmeraldTrade(Effects.BLINDNESS, 120, 15), new AlienTrade.SuspiciousStewForEmeraldTrade(Effects.POISON, 280, 15), new AlienTrade.SuspiciousStewForEmeraldTrade(Effects.SATURATION, 7, 15)}, 5, new AlienTrade.ITrade[]{new AlienTrade.ItemsForEmeraldsTrade(Items.GOLDEN_CARROT, 3, 3, 30), new AlienTrade.ItemsForEmeraldsTrade(Items.GLISTERING_MELON_SLICE, 4, 3, 30)}))); + p_221237_0_.put(VillagerProfession.FISHERMAN, gatAsIntMap(ImmutableMap.of(1, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.STRING, 20, 16, 2), new AlienTrade.EmeraldForItemsTrade(Items.COAL, 10, 16, 2), new AlienTrade.ItemsForEmeraldsAndItemsTrade(Items.COD, 6, Items.COOKED_COD, 6, 16, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.COD_BUCKET, 3, 1, 16, 1)}, 2, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.COD, 15, 16, 10), new AlienTrade.ItemsForEmeraldsAndItemsTrade(Items.SALMON, 6, Items.COOKED_SALMON, 6, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Items.CAMPFIRE, 2, 1, 5)}, 3, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.SALMON, 13, 16, 20), new AlienTrade.EnchantedItemForEmeraldsTrade(Items.FISHING_ROD, 3, 3, 10, 0.2F)}, 4, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.TROPICAL_FISH, 6, 12, 30)}, 5, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.PUFFERFISH, 4, 12, 30), new AlienTrade.EmeraldForVillageTypeItemTrade(1, 12, 30, ImmutableMap.builder().put(VillagerType.PLAINS, Items.OAK_BOAT).put(VillagerType.TAIGA, Items.SPRUCE_BOAT).put(VillagerType.SNOW, Items.SPRUCE_BOAT).put(VillagerType.DESERT, Items.JUNGLE_BOAT).put(VillagerType.JUNGLE, Items.JUNGLE_BOAT).put(VillagerType.SAVANNA, Items.ACACIA_BOAT).put(VillagerType.SWAMP, Items.DARK_OAK_BOAT).build())}))); + p_221237_0_.put(VillagerProfession.SHEPHERD, gatAsIntMap(ImmutableMap.of(1, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Blocks.WHITE_WOOL, 18, 16, 2), new AlienTrade.EmeraldForItemsTrade(Blocks.BROWN_WOOL, 18, 16, 2), new AlienTrade.EmeraldForItemsTrade(Blocks.BLACK_WOOL, 18, 16, 2), new AlienTrade.EmeraldForItemsTrade(Blocks.GRAY_WOOL, 18, 16, 2), new AlienTrade.ItemsForEmeraldsTrade(ModInnet.FLAG_RED_ITEM.get(), 2, 1, 1)}, 2, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.WHITE_DYE, 12, 16, 10), new AlienTrade.EmeraldForItemsTrade(Items.GRAY_DYE, 12, 16, 10), new AlienTrade.EmeraldForItemsTrade(Items.BLACK_DYE, 12, 16, 10), new AlienTrade.EmeraldForItemsTrade(Items.LIGHT_BLUE_DYE, 12, 16, 10), new AlienTrade.EmeraldForItemsTrade(Items.LIME_DYE, 12, 16, 10), new AlienTrade.ItemsForEmeraldsTrade(Blocks.WHITE_WOOL, 1, 1, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.ORANGE_WOOL, 1, 1, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.MAGENTA_WOOL, 1, 1, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.LIGHT_BLUE_WOOL, 1, 1, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.YELLOW_WOOL, 1, 1, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.LIME_WOOL, 1, 1, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.PINK_WOOL, 1, 1, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.GRAY_WOOL, 1, 1, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.LIGHT_GRAY_WOOL, 1, 1, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.CYAN_WOOL, 1, 1, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.PURPLE_WOOL, 1, 1, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.BLUE_WOOL, 1, 1, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.BROWN_WOOL, 1, 1, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.GREEN_WOOL, 1, 1, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.RED_WOOL, 1, 1, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.BLACK_WOOL, 1, 1, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.WHITE_CARPET, 1, 4, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.ORANGE_CARPET, 1, 4, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.MAGENTA_CARPET, 1, 4, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.LIGHT_BLUE_CARPET, 1, 4, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.YELLOW_CARPET, 1, 4, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.LIME_CARPET, 1, 4, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.PINK_CARPET, 1, 4, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.GRAY_CARPET, 1, 4, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.LIGHT_GRAY_CARPET, 1, 4, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.CYAN_CARPET, 1, 4, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.PURPLE_CARPET, 1, 4, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.BLUE_CARPET, 1, 4, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.BROWN_CARPET, 1, 4, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.GREEN_CARPET, 1, 4, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.RED_CARPET, 1, 4, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Blocks.BLACK_CARPET, 1, 4, 16, 5)}, 3, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.YELLOW_DYE, 12, 16, 20), new AlienTrade.EmeraldForItemsTrade(Items.LIGHT_GRAY_DYE, 12, 16, 20), new AlienTrade.EmeraldForItemsTrade(Items.ORANGE_DYE, 12, 16, 20), new AlienTrade.EmeraldForItemsTrade(Items.RED_DYE, 12, 16, 20), new AlienTrade.EmeraldForItemsTrade(Items.PINK_DYE, 12, 16, 20), new AlienTrade.ItemsForEmeraldsTrade(Blocks.WHITE_BED, 3, 1, 12, 10), new AlienTrade.ItemsForEmeraldsTrade(Blocks.YELLOW_BED, 3, 1, 12, 10), new AlienTrade.ItemsForEmeraldsTrade(Blocks.RED_BED, 3, 1, 12, 10), new AlienTrade.ItemsForEmeraldsTrade(Blocks.BLACK_BED, 3, 1, 12, 10), new AlienTrade.ItemsForEmeraldsTrade(Blocks.BLUE_BED, 3, 1, 12, 10), new AlienTrade.ItemsForEmeraldsTrade(Blocks.BROWN_BED, 3, 1, 12, 10), new AlienTrade.ItemsForEmeraldsTrade(Blocks.CYAN_BED, 3, 1, 12, 10), new AlienTrade.ItemsForEmeraldsTrade(Blocks.GRAY_BED, 3, 1, 12, 10), new AlienTrade.ItemsForEmeraldsTrade(Blocks.GREEN_BED, 3, 1, 12, 10), new AlienTrade.ItemsForEmeraldsTrade(Blocks.LIGHT_BLUE_BED, 3, 1, 12, 10), new AlienTrade.ItemsForEmeraldsTrade(Blocks.LIGHT_GRAY_BED, 3, 1, 12, 10), new AlienTrade.ItemsForEmeraldsTrade(Blocks.LIME_BED, 3, 1, 12, 10), new AlienTrade.ItemsForEmeraldsTrade(Blocks.MAGENTA_BED, 3, 1, 12, 10), new AlienTrade.ItemsForEmeraldsTrade(Blocks.ORANGE_BED, 3, 1, 12, 10), new AlienTrade.ItemsForEmeraldsTrade(Blocks.PINK_BED, 3, 1, 12, 10), new AlienTrade.ItemsForEmeraldsTrade(Blocks.PURPLE_BED, 3, 1, 12, 10)}, 4, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.BROWN_DYE, 12, 16, 30), new AlienTrade.EmeraldForItemsTrade(Items.PURPLE_DYE, 12, 16, 30), new AlienTrade.EmeraldForItemsTrade(Items.BLUE_DYE, 12, 16, 30), new AlienTrade.EmeraldForItemsTrade(Items.GREEN_DYE, 12, 16, 30), new AlienTrade.EmeraldForItemsTrade(Items.MAGENTA_DYE, 12, 16, 30), new AlienTrade.EmeraldForItemsTrade(Items.CYAN_DYE, 12, 16, 30), new AlienTrade.ItemsForEmeraldsTrade(Items.WHITE_BANNER, 3, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.BLUE_BANNER, 3, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.LIGHT_BLUE_BANNER, 3, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.RED_BANNER, 3, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.PINK_BANNER, 3, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.GREEN_BANNER, 3, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.LIME_BANNER, 3, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.GRAY_BANNER, 3, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.BLACK_BANNER, 3, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.PURPLE_BANNER, 3, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.MAGENTA_BANNER, 3, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.CYAN_BANNER, 3, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.BROWN_BANNER, 3, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.YELLOW_BANNER, 3, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.ORANGE_BANNER, 3, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.LIGHT_GRAY_BANNER, 3, 1, 12, 15)}, 5, new AlienTrade.ITrade[]{new AlienTrade.ItemsForEmeraldsTrade(Items.PAINTING, 2, 3, 30)}))); + p_221237_0_.put(VillagerProfession.FLETCHER, gatAsIntMap(ImmutableMap.of(1, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.STICK, 32, 16, 2), new AlienTrade.ItemsForEmeraldsTrade(Items.ARROW, 1, 16, 1), new AlienTrade.ItemsForEmeraldsAndItemsTrade(Blocks.GRAVEL, 10, Items.FLINT, 10, 12, 1)}, 2, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.FLINT, 26, 12, 10), new AlienTrade.ItemsForEmeraldsTrade(Items.BOW, 2, 1, 5)}, 3, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.STRING, 14, 16, 20), new AlienTrade.ItemsForEmeraldsTrade(Items.CROSSBOW, 3, 1, 10)}, 4, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.FEATHER, 24, 16, 30), new AlienTrade.EnchantedItemForEmeraldsTrade(Items.BOW, 2, 3, 15)}, 5, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.TRIPWIRE_HOOK, 8, 12, 30), new AlienTrade.EnchantedItemForEmeraldsTrade(Items.CROSSBOW, 3, 3, 15), new AlienTrade.ItemWithPotionForEmeraldsAndItemsTrade(Items.ARROW, 5, Items.TIPPED_ARROW, 5, 2, 12, 30)}))); + p_221237_0_.put(VillagerProfession.LIBRARIAN, gatAsIntMap(ImmutableMap.builder().put(1, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.PAPER, 24, 16, 2), new AlienTrade.EnchantedBookForEmeraldsTrade(1), new AlienTrade.ItemsForEmeraldsTrade(Blocks.BOOKSHELF, 9, 1, 12, 1)}).put(2, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.BOOK, 4, 12, 10), new AlienTrade.EnchantedBookForEmeraldsTrade(5), new AlienTrade.ItemsForEmeraldsTrade(Items.LANTERN, 1, 1, 5)}).put(3, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.INK_SAC, 5, 12, 20), new AlienTrade.EnchantedBookForEmeraldsTrade(10), new AlienTrade.ItemsForEmeraldsTrade(Items.GLASS, 1, 4, 10)}).put(4, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.WRITABLE_BOOK, 2, 12, 30), new AlienTrade.EnchantedBookForEmeraldsTrade(15), new AlienTrade.ItemsForEmeraldsTrade(Items.CLOCK, 5, 1, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.COMPASS, 4, 1, 15)}).put(5, new AlienTrade.ITrade[]{new AlienTrade.ItemsForEmeraldsTrade(Items.NAME_TAG, 20, 1, 30)}).build())); + p_221237_0_.put(VillagerProfession.CARTOGRAPHER, gatAsIntMap(ImmutableMap.of(1, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.PAPER, 24, 16, 2), new AlienTrade.ItemsForEmeraldsTrade(Items.MAP, 7, 1, 1)}, 2, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.GLASS_PANE, 11, 16, 10), new AlienTrade.EmeraldForMapTrade(13, Structure.MONUMENT, MapDecoration.Type.MONUMENT, 12, 5)}, 3, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.COMPASS, 1, 12, 20), new AlienTrade.EmeraldForMapTrade(14, Structure.WOODLAND_MANSION, MapDecoration.Type.MANSION, 12, 10)}, 4, new AlienTrade.ITrade[]{new AlienTrade.ItemsForEmeraldsTrade(Items.ITEM_FRAME, 7, 1, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.WHITE_BANNER, 3, 1, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.BLUE_BANNER, 3, 1, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.LIGHT_BLUE_BANNER, 3, 1, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.RED_BANNER, 3, 1, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.PINK_BANNER, 3, 1, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.GREEN_BANNER, 3, 1, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.LIME_BANNER, 3, 1, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.GRAY_BANNER, 3, 1, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.BLACK_BANNER, 3, 1, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.PURPLE_BANNER, 3, 1, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.MAGENTA_BANNER, 3, 1, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.CYAN_BANNER, 3, 1, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.BROWN_BANNER, 3, 1, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.YELLOW_BANNER, 3, 1, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.ORANGE_BANNER, 3, 1, 15), new AlienTrade.ItemsForEmeraldsTrade(Items.LIGHT_GRAY_BANNER, 3, 1, 15)}, 5, new AlienTrade.ITrade[]{new AlienTrade.ItemsForEmeraldsTrade(Items.GLOBE_BANNER_PATTERN, 8, 1, 30)}))); + p_221237_0_.put(VillagerProfession.CLERIC, gatAsIntMap(ImmutableMap.of(1, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.ROTTEN_FLESH, 32, 16, 2), new AlienTrade.ItemsForEmeraldsTrade(Items.REDSTONE, 1, 2, 1)}, 2, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.GOLD_INGOT, 3, 12, 10), new AlienTrade.ItemsForEmeraldsTrade(Items.LAPIS_LAZULI, 1, 1, 5)}, 3, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.RABBIT_FOOT, 2, 12, 20), new AlienTrade.ItemsForEmeraldsTrade(Blocks.GLOWSTONE, 4, 1, 12, 10)}, 4, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.SCUTE, 4, 12, 30), new AlienTrade.EmeraldForItemsTrade(Items.GLASS_BOTTLE, 9, 12, 30), new AlienTrade.ItemsForEmeraldsTrade(Items.ENDER_PEARL, 5, 1, 15)}, 5, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.NETHER_WART, 22, 12, 30), new AlienTrade.ItemsForEmeraldsTrade(Items.EXPERIENCE_BOTTLE, 3, 1, 30)}))); + p_221237_0_.put(VillagerProfession.ARMORER, gatAsIntMap(ImmutableMap.of(1, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(ModInnet.STEEL_INGOT.get(), 15, 16, 2), new AlienTrade.ItemsForEmeraldsTrade(new ItemStack(Items.CHAINMAIL_CHESTPLATE), 7, 1, 12, 1, 0.2F), new AlienTrade.ItemsForEmeraldsTrade(new ItemStack(Items.IRON_BOOTS), 4, 1, 12, 1, 0.2F), new AlienTrade.ItemsForEmeraldsTrade(new ItemStack(Items.IRON_HELMET), 5, 1, 12, 1, 0.2F), new AlienTrade.ItemsForEmeraldsTrade(new ItemStack(Items.IRON_CHESTPLATE), 9, 1, 12, 1, 0.2F)}, 2, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(ModInnet.STEEL_INGOT.get(), 4, 12, 10), new AlienTrade.ItemsForEmeraldsTrade(new ItemStack(Items.BELL), 36, 1, 12, 5, 0.2F), new AlienTrade.ItemsForEmeraldsTrade(new ItemStack(Items.CHAINMAIL_BOOTS), 1, 1, 12, 5, 0.2F), new AlienTrade.ItemsForEmeraldsTrade(new ItemStack(Items.CHAINMAIL_LEGGINGS), 3, 1, 12, 5, 0.2F)}, 3, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.LAVA_BUCKET, 1, 12, 20), new AlienTrade.EmeraldForItemsTrade(Items.DIAMOND, 1, 12, 20), new AlienTrade.ItemsForEmeraldsTrade(new ItemStack(Items.CHAINMAIL_HELMET), 1, 1, 12, 10, 0.2F), new AlienTrade.ItemsForEmeraldsTrade(new ItemStack(Items.CHAINMAIL_CHESTPLATE), 4, 1, 12, 10, 0.2F), new AlienTrade.ItemsForEmeraldsTrade(new ItemStack(Items.SHIELD), 5, 1, 12, 10, 0.2F)}, 4, new AlienTrade.ITrade[]{new AlienTrade.EnchantedItemForEmeraldsTrade(Items.DIAMOND_LEGGINGS, 14, 3, 15, 0.2F), new AlienTrade.EnchantedItemForEmeraldsTrade(Items.DIAMOND_BOOTS, 8, 3, 15, 0.2F)}, 5, new AlienTrade.ITrade[]{new AlienTrade.EnchantedItemForEmeraldsTrade(Items.DIAMOND_HELMET, 8, 3, 30, 0.2F), new AlienTrade.EnchantedItemForEmeraldsTrade(Items.DIAMOND_CHESTPLATE, 16, 3, 30, 0.2F)}))); + p_221237_0_.put(VillagerProfession.WEAPONSMITH, gatAsIntMap(ImmutableMap.of(1, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(ModInnet.STEEL_SWORD.get(), 15, 16, 2), new AlienTrade.ItemsForEmeraldsTrade(new ItemStack(Items.IRON_AXE), 3, 1, 12, 1, 0.2F), new AlienTrade.EnchantedItemForEmeraldsTrade(Items.IRON_SWORD, 2, 3, 1)}, 2, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.IRON_INGOT, 4, 12, 10), new AlienTrade.ItemsForEmeraldsTrade(new ItemStack(Items.BELL), 36, 1, 12, 5, 0.2F)}, 3, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.FLINT, 24, 12, 20)}, 4, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.DIAMOND, 1, 12, 30), new AlienTrade.EnchantedItemForEmeraldsTrade(Items.DIAMOND_AXE, 12, 3, 15, 0.2F)}, 5, new AlienTrade.ITrade[]{new AlienTrade.EnchantedItemForEmeraldsTrade(ModInnet.STEEL_AXE.get(), 8, 3, 30, 0.2F)}))); + p_221237_0_.put(VillagerProfession.TOOLSMITH, gatAsIntMap(ImmutableMap.of(1, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.COAL, 15, 16, 2), new AlienTrade.ItemsForEmeraldsTrade(new ItemStack(Items.STONE_AXE), 1, 1, 12, 1, 0.2F), new AlienTrade.ItemsForEmeraldsTrade(new ItemStack(Items.STONE_SHOVEL), 1, 1, 12, 1, 0.2F), new AlienTrade.ItemsForEmeraldsTrade(new ItemStack(Items.STONE_PICKAXE), 1, 1, 12, 1, 0.2F), new AlienTrade.ItemsForEmeraldsTrade(new ItemStack(Items.STONE_HOE), 1, 1, 12, 1, 0.2F)}, 2, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(ModInnet.STEEL_INGOT.get(), 4, 12, 10), new AlienTrade.ItemsForEmeraldsTrade(new ItemStack(Items.BELL), 36, 1, 12, 5, 0.2F)}, 3, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.FLINT, 30, 12, 20), new AlienTrade.EnchantedItemForEmeraldsTrade(Items.IRON_AXE, 1, 3, 10, 0.2F), new AlienTrade.EnchantedItemForEmeraldsTrade(Items.IRON_SHOVEL, 2, 3, 10, 0.2F), new AlienTrade.EnchantedItemForEmeraldsTrade(Items.IRON_PICKAXE, 3, 3, 10, 0.2F), new AlienTrade.ItemsForEmeraldsTrade(new ItemStack(Items.DIAMOND_HOE), 4, 1, 3, 10, 0.2F)}, 4, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.DIAMOND, 1, 12, 30), new AlienTrade.EnchantedItemForEmeraldsTrade(Items.DIAMOND_AXE, 12, 3, 15, 0.2F), new AlienTrade.EnchantedItemForEmeraldsTrade(Items.DIAMOND_SHOVEL, 5, 3, 15, 0.2F)}, 5, new AlienTrade.ITrade[]{new AlienTrade.EnchantedItemForEmeraldsTrade(Items.DIAMOND_PICKAXE, 13, 3, 30, 0.2F)}))); + p_221237_0_.put(VillagerProfession.BUTCHER, gatAsIntMap(ImmutableMap.of(1, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.CHICKEN, 14, 16, 2), new AlienTrade.EmeraldForItemsTrade(Items.PORKCHOP, 7, 16, 2), new AlienTrade.EmeraldForItemsTrade(Items.RABBIT, 4, 16, 2), new AlienTrade.ItemsForEmeraldsTrade(Items.RABBIT_STEW, 1, 1, 1)}, 2, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.COAL, 15, 16, 2), new AlienTrade.ItemsForEmeraldsTrade(Items.COOKED_PORKCHOP, 1, 5, 16, 5), new AlienTrade.ItemsForEmeraldsTrade(Items.COOKED_CHICKEN, 1, 8, 16, 5)}, 3, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.MUTTON, 7, 16, 20), new AlienTrade.EmeraldForItemsTrade(Items.BEEF, 10, 16, 20)}, 4, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.DRIED_KELP_BLOCK, 10, 12, 30)}, 5, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.SWEET_BERRIES, 10, 12, 30)}))); + p_221237_0_.put(VillagerProfession.LEATHERWORKER, gatAsIntMap(ImmutableMap.of(1, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.LEATHER, 6, 16, 2), new AlienTrade.DyedArmorForEmeraldsTrade(Items.LEATHER_LEGGINGS, 3), new AlienTrade.DyedArmorForEmeraldsTrade(Items.LEATHER_CHESTPLATE, 7)}, 2, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.FLINT, 26, 12, 10), new AlienTrade.DyedArmorForEmeraldsTrade(Items.LEATHER_HELMET, 5, 12, 5), new AlienTrade.DyedArmorForEmeraldsTrade(Items.LEATHER_BOOTS, 4, 12, 5)}, 3, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.RABBIT_HIDE, 9, 12, 20), new AlienTrade.DyedArmorForEmeraldsTrade(Items.LEATHER_CHESTPLATE, 7)}, 4, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.SCUTE, 4, 12, 30), new AlienTrade.DyedArmorForEmeraldsTrade(Items.LEATHER_HORSE_ARMOR, 6, 12, 15)}, 5, new AlienTrade.ITrade[]{new AlienTrade.ItemsForEmeraldsTrade(new ItemStack(Items.SADDLE), 6, 1, 12, 30, 0.2F), new AlienTrade.DyedArmorForEmeraldsTrade(Items.LEATHER_HELMET, 5, 12, 30)}))); + p_221237_0_.put(VillagerProfession.MASON, gatAsIntMap(ImmutableMap.of(1, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.CLAY_BALL, 10, 16, 2), new AlienTrade.ItemsForEmeraldsTrade(Items.BRICK, 1, 10, 16, 1)}, 2, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Blocks.STONE, 20, 16, 10), new AlienTrade.ItemsForEmeraldsTrade(Blocks.CHISELED_STONE_BRICKS, 1, 4, 16, 5)}, 3, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Blocks.GRANITE, 16, 16, 20), new AlienTrade.EmeraldForItemsTrade(Blocks.ANDESITE, 16, 16, 20), new AlienTrade.EmeraldForItemsTrade(Blocks.DIORITE, 16, 16, 20), new AlienTrade.ItemsForEmeraldsTrade(Blocks.POLISHED_ANDESITE, 1, 4, 16, 10), new AlienTrade.ItemsForEmeraldsTrade(Blocks.POLISHED_DIORITE, 1, 4, 16, 10), new AlienTrade.ItemsForEmeraldsTrade(Blocks.POLISHED_GRANITE, 1, 4, 16, 10)}, 4, new AlienTrade.ITrade[]{new AlienTrade.EmeraldForItemsTrade(Items.QUARTZ, 12, 12, 30), new AlienTrade.ItemsForEmeraldsTrade(Blocks.ORANGE_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.WHITE_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.BLUE_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.LIGHT_BLUE_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.GRAY_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.LIGHT_GRAY_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.BLACK_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.RED_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.PINK_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.MAGENTA_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.LIME_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.GREEN_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.CYAN_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.PURPLE_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.YELLOW_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.BROWN_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.ORANGE_GLAZED_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.WHITE_GLAZED_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.BLUE_GLAZED_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.LIGHT_BLUE_GLAZED_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.GRAY_GLAZED_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.LIGHT_GRAY_GLAZED_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.BLACK_GLAZED_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.RED_GLAZED_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.PINK_GLAZED_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.MAGENTA_GLAZED_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.LIME_GLAZED_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.GREEN_GLAZED_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.CYAN_GLAZED_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.PURPLE_GLAZED_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.YELLOW_GLAZED_TERRACOTTA, 1, 1, 12, 15), new AlienTrade.ItemsForEmeraldsTrade(Blocks.BROWN_GLAZED_TERRACOTTA, 1, 1, 12, 15)}, 5, new AlienTrade.ITrade[]{new AlienTrade.ItemsForEmeraldsTrade(Blocks.QUARTZ_PILLAR, 1, 1, 12, 30), new AlienTrade.ItemsForEmeraldsTrade(Blocks.QUARTZ_BLOCK, 1, 1, 12, 30)}))); + }); + public static final Int2ObjectMap field_221240_b = gatAsIntMap(ImmutableMap.of(1, new AlienTrade.ITrade[]{new AlienTrade.ItemsForEmeraldsTrade(Items.SEA_PICKLE, 2, 1, 5, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.SLIME_BALL, 4, 1, 5, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.GLOWSTONE, 2, 1, 5, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.NAUTILUS_SHELL, 5, 1, 5, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.FERN, 1, 1, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.SUGAR_CANE, 1, 1, 8, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.PUMPKIN, 1, 1, 4, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.KELP, 3, 1, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.CACTUS, 3, 1, 8, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.DANDELION, 1, 1, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.POPPY, 1, 1, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.BLUE_ORCHID, 1, 1, 8, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.ALLIUM, 1, 1, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.AZURE_BLUET, 1, 1, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.RED_TULIP, 1, 1, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.ORANGE_TULIP, 1, 1, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.WHITE_TULIP, 1, 1, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.PINK_TULIP, 1, 1, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.OXEYE_DAISY, 1, 1, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.CORNFLOWER, 1, 1, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.LILY_OF_THE_VALLEY, 1, 1, 7, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.WHEAT_SEEDS, 1, 1, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.BEETROOT_SEEDS, 1, 1, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.PUMPKIN_SEEDS, 1, 1, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.MELON_SEEDS, 1, 1, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.ACACIA_SAPLING, 5, 1, 8, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.BIRCH_SAPLING, 5, 1, 8, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.DARK_OAK_SAPLING, 5, 1, 8, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.JUNGLE_SAPLING, 5, 1, 8, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.OAK_SAPLING, 5, 1, 8, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.SPRUCE_SAPLING, 5, 1, 8, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.RED_DYE, 1, 3, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.WHITE_DYE, 1, 3, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.BLUE_DYE, 1, 3, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.PINK_DYE, 1, 3, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.BLACK_DYE, 1, 3, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.GREEN_DYE, 1, 3, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.LIGHT_GRAY_DYE, 1, 3, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.MAGENTA_DYE, 1, 3, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.YELLOW_DYE, 1, 3, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.GRAY_DYE, 1, 3, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.PURPLE_DYE, 1, 3, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.LIGHT_BLUE_DYE, 1, 3, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.LIME_DYE, 1, 3, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.ORANGE_DYE, 1, 3, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.BROWN_DYE, 1, 3, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.CYAN_DYE, 1, 3, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.BRAIN_CORAL_BLOCK, 3, 1, 8, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.BUBBLE_CORAL_BLOCK, 3, 1, 8, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.FIRE_CORAL_BLOCK, 3, 1, 8, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.HORN_CORAL_BLOCK, 3, 1, 8, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.TUBE_CORAL_BLOCK, 3, 1, 8, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.VINE, 1, 1, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.BROWN_MUSHROOM, 1, 1, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.RED_MUSHROOM, 1, 1, 12, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.LILY_PAD, 1, 2, 5, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.SAND, 1, 8, 8, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.RED_SAND, 1, 4, 6, 1)}, 2, new AlienTrade.ITrade[]{new AlienTrade.ItemsForEmeraldsTrade(Items.TROPICAL_FISH_BUCKET, 5, 1, 4, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.PUFFERFISH_BUCKET, 5, 1, 4, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.PACKED_ICE, 3, 1, 6, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.BLUE_ICE, 6, 1, 6, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.GUNPOWDER, 1, 1, 8, 1), new AlienTrade.ItemsForEmeraldsTrade(Items.PODZOL, 3, 3, 6, 1)})); + + private static Int2ObjectMap gatAsIntMap(ImmutableMap p_221238_0_) { + return new Int2ObjectOpenHashMap<>(p_221238_0_); + } + + static class DyedArmorForEmeraldsTrade implements AlienTrade.ITrade { + private final Item tradeItem; + private final int price; + private final int maxUses; + private final int xpValue; + + public DyedArmorForEmeraldsTrade(Item itemIn, int priceIn) { + this(itemIn, priceIn, maxUseIn, 1); + } + + public DyedArmorForEmeraldsTrade(Item tradeItemIn, int priceIn, int maxUsesIn, int xpValueIn) { + this.tradeItem = tradeItemIn; + this.price = priceIn; + this.maxUses = maxUsesIn; + this.xpValue = xpValueIn; + } + + public MerchantOffer getOffer(Entity trader, Random rand) { + ItemStack itemstack = new ItemStack(Items.EMERALD, this.price); + ItemStack itemstack1 = new ItemStack(this.tradeItem); + if (this.tradeItem instanceof DyeableArmorItem) { + List list = Lists.newArrayList(); + list.add(getRandomDyeItem(rand)); + if (rand.nextFloat() > 0.7F) { + list.add(getRandomDyeItem(rand)); + } + + if (rand.nextFloat() > 0.8F) { + list.add(getRandomDyeItem(rand)); + } + + itemstack1 = IDyeableArmorItem.dyeItem(itemstack1, list); + } + + return new MerchantOffer(itemstack, itemstack1, maxUseIn, this.xpValue, 0.2F); + } + + private static DyeItem getRandomDyeItem(Random p_221232_0_) { + return DyeItem.getItem(DyeColor.byId(p_221232_0_.nextInt(16))); + } + } + + static class EmeraldForItemsTrade implements AlienTrade.ITrade { + private final Item tradeItem; + private final int count; + private final int maxUses; + private final int xpValue; + private final float priceMultiplier; + + public EmeraldForItemsTrade(IItemProvider tradeItemIn, int countIn, int maxUsesIn, int xpValueIn) { + this.tradeItem = tradeItemIn.asItem(); + this.count = countIn; + this.maxUses = maxUsesIn; + this.xpValue = xpValueIn; + this.priceMultiplier = 0.05F; + } + + public MerchantOffer getOffer(Entity trader, Random rand) { + ItemStack itemstack = new ItemStack(this.tradeItem, this.count); + return new MerchantOffer(itemstack, new ItemStack(Items.EMERALD), maxUseIn, this.xpValue, this.priceMultiplier); + } + } + + static class EmeraldForMapTrade implements AlienTrade.ITrade { + private final int count; + private final Structure structureName; + private final MapDecoration.Type mapDecorationType; + private final int maxUses; + private final int xpValue; + + public EmeraldForMapTrade(int count, Structure structureName, MapDecoration.Type mapDecorationType, int maxUses, int xpValue) { + this.count = count; + this.structureName = structureName; + this.mapDecorationType = mapDecorationType; + this.maxUses = maxUses; + this.xpValue = xpValue; + } + + @Nullable + public MerchantOffer getOffer(Entity trader, Random rand) { + if (!(trader.world instanceof ServerWorld)) { + return null; + } else { + ServerWorld serverworld = (ServerWorld)trader.world; + BlockPos blockpos = serverworld.func_241117_a_(this.structureName, trader.getPosition(), 100, true); + if (blockpos != null) { + ItemStack itemstack = FilledMapItem.setupNewMap(serverworld, blockpos.getX(), blockpos.getZ(), (byte)2, true, true); + FilledMapItem.func_226642_a_(serverworld, itemstack); + MapData.addTargetDecoration(itemstack, blockpos, "+", this.mapDecorationType); + itemstack.setDisplayName(new TranslationTextComponent("filled_map." + this.structureName.getStructureName().toLowerCase(Locale.ROOT))); + return new MerchantOffer(new ItemStack(Items.EMERALD, this.count), new ItemStack(Items.COMPASS), itemstack, maxUseIn, this.xpValue, 0.2F); + } else { + return null; + } + } + } + } + + static class EmeraldForVillageTypeItemTrade implements AlienTrade.ITrade { + private final Map villagerTypeItems; + private final int count; + private final int maxUses; + private final int xpValue; + + public EmeraldForVillageTypeItemTrade(int count, int maxUsesIn, int xpValueIn, Map villagerTypeItemsIn) { + Registry.VILLAGER_TYPE.stream().filter((villagerType) -> { + return !villagerTypeItemsIn.containsKey(villagerType); + }).findAny().ifPresent((villagerType) -> { + + }); + this.villagerTypeItems = villagerTypeItemsIn; + this.count = count; + this.maxUses = maxUsesIn; + this.xpValue = xpValueIn; + } + + @Nullable + public MerchantOffer getOffer(Entity trader, Random rand) { + if (trader instanceof IVillagerDataHolder) { + ItemStack itemstack = new ItemStack(this.villagerTypeItems.get(((IVillagerDataHolder)trader).getVillagerData().getType()), this.count); + return new MerchantOffer(itemstack, new ItemStack(Items.EMERALD), maxUseIn, this.xpValue, 0.05F); + } else { + return null; + } + } + } + + static class EnchantedBookForEmeraldsTrade implements AlienTrade.ITrade { + private final int xpValue; + + public EnchantedBookForEmeraldsTrade(int xpValueIn) { + this.xpValue = xpValueIn; + } + + public MerchantOffer getOffer(Entity trader, Random rand) { + List list = Registry.ENCHANTMENT.stream().filter(Enchantment::canVillagerTrade).collect(Collectors.toList()); + Enchantment enchantment = list.get(rand.nextInt(list.size())); + int i = MathHelper.nextInt(rand, enchantment.getMinLevel(), enchantment.getMaxLevel()); + ItemStack itemstack = EnchantedBookItem.getEnchantedItemStack(new EnchantmentData(enchantment, i)); + int j = 2 + rand.nextInt(5 + i * 10) + 3 * i; + if (enchantment.isTreasureEnchantment()) { + j *= 2; + } + + if (j > 64) { + j = 64; + } + + return new MerchantOffer(new ItemStack(Items.EMERALD, j), new ItemStack(Items.BOOK), itemstack, maxUseIn, this.xpValue, 0.2F); + } + } + + static class EnchantedItemForEmeraldsTrade implements AlienTrade.ITrade { + private final ItemStack sellingStack; + private final int emeraldCount; + private final int maxUses; + private final int xpValue; + private final float priceMultiplier; + + public EnchantedItemForEmeraldsTrade(Item p_i50535_1_, int emeraldCount, int maxUses, int xpValue) { + this(p_i50535_1_, emeraldCount, maxUseIn, xpValue, 0.05F); + } + + public EnchantedItemForEmeraldsTrade(Item sellItem, int emeraldCount, int maxUses, int xpValue, float priceMultiplier) { + this.sellingStack = new ItemStack(sellItem); + this.emeraldCount = emeraldCount; + this.maxUses = maxUses; + this.xpValue = xpValue; + this.priceMultiplier = priceMultiplier; + } + + public MerchantOffer getOffer(Entity trader, Random rand) { + int i = 5 + rand.nextInt(15); + ItemStack itemstack = EnchantmentHelper.addRandomEnchantment(rand, new ItemStack(this.sellingStack.getItem()), i, false); + int j = Math.min(this.emeraldCount + i, 64); + ItemStack itemstack1 = new ItemStack(Items.EMERALD, j); + return new MerchantOffer(itemstack1, itemstack, maxUseIn, this.xpValue, this.priceMultiplier); + } + } + + public interface ITrade { + @Nullable + MerchantOffer getOffer(Entity trader, Random rand); + } + + static class ItemWithPotionForEmeraldsAndItemsTrade implements AlienTrade.ITrade { + /** An ItemStack that can have potion effects written to it. */ + private final ItemStack potionStack; + private final int potionCount; + private final int emeraldCount; + private final int maxUses; + private final int xpValue; + private final Item buyingItem; + private final int buyingItemCount; + private final float priceMultiplier; + + public ItemWithPotionForEmeraldsAndItemsTrade(Item buyingItem, int buyingItemCount, Item p_i50526_3_, int p_i50526_4_, int emeralds, int maxUses, int xpValue) { + this.potionStack = new ItemStack(p_i50526_3_); + this.emeraldCount = emeralds; + this.maxUses = maxUses; + this.xpValue = xpValue; + this.buyingItem = buyingItem; + this.buyingItemCount = buyingItemCount; + this.potionCount = p_i50526_4_; + this.priceMultiplier = 0.05F; + } + + public MerchantOffer getOffer(Entity trader, Random rand) { + ItemStack itemstack = new ItemStack(Items.EMERALD, this.emeraldCount); + List list = Registry.POTION.stream().filter((potion) -> { + return !potion.getEffects().isEmpty() && PotionBrewing.isBrewablePotion(potion); + }).collect(Collectors.toList()); + Potion potion = list.get(rand.nextInt(list.size())); + ItemStack itemstack1 = PotionUtils.addPotionToItemStack(new ItemStack(this.potionStack.getItem(), this.potionCount), potion); + return new MerchantOffer(itemstack, new ItemStack(this.buyingItem, this.buyingItemCount), itemstack1, maxUseIn, this.xpValue, this.priceMultiplier); + } + } + + static class ItemsForEmeraldsAndItemsTrade implements AlienTrade.ITrade { + private final ItemStack buyingItem; + private final int buyingItemCount; + private final int emeraldCount; + private final ItemStack sellingItem; + private final int sellingItemCount; + private final int maxUses; + private final int xpValue; + private final float priceMultiplier; + + public ItemsForEmeraldsAndItemsTrade(IItemProvider buyingItem, int buyingItemCount, Item sellingItem, int sellingItemCount, int maxUses, int xpValue) { + this(buyingItem, buyingItemCount, 1, sellingItem, sellingItemCount, maxUseIn, xpValue); + } + + public ItemsForEmeraldsAndItemsTrade(IItemProvider buyingItem, int buyingItemCount, int emeraldCount, Item sellingItem, int sellingItemCount, int maxUses, int xpValue) { + this.buyingItem = new ItemStack(buyingItem); + this.buyingItemCount = buyingItemCount; + this.emeraldCount = emeraldCount; + this.sellingItem = new ItemStack(sellingItem); + this.sellingItemCount = sellingItemCount; + this.maxUses = maxUses; + this.xpValue = xpValue; + this.priceMultiplier = 0.05F; + } + + @Nullable + public MerchantOffer getOffer(Entity trader, Random rand) { + return new MerchantOffer(new ItemStack(Items.EMERALD, this.emeraldCount), new ItemStack(this.buyingItem.getItem(), this.buyingItemCount), new ItemStack(this.sellingItem.getItem(), this.sellingItemCount), maxUseIn, this.xpValue, this.priceMultiplier); + } + } + + static class ItemsForEmeraldsTrade implements AlienTrade.ITrade { + private final ItemStack sellingItem; + private final int emeraldCount; + private final int sellingItemCount; + private final int maxUses; + private final int xpValue; + private final float priceMultiplier; + + public ItemsForEmeraldsTrade(Block sellingItem, int emeraldCount, int sellingItemCount, int maxUses, int xpValue) { + this(new ItemStack(sellingItem), emeraldCount, sellingItemCount, maxUseIn, xpValue); + } + + public ItemsForEmeraldsTrade(Item sellingItem, int emeraldCount, int sellingItemCount, int xpValue) { + this(new ItemStack(sellingItem), emeraldCount, sellingItemCount, maxUseIn, xpValue); + } + + public ItemsForEmeraldsTrade(Item sellingItem, int emeraldCount, int sellingItemCount, int maxUses, int xpValue) { + this(new ItemStack(sellingItem), emeraldCount, sellingItemCount, maxUseIn, xpValue); + } + + public ItemsForEmeraldsTrade(ItemStack sellingItem, int emeraldCount, int sellingItemCount, int maxUses, int xpValue) { + this(sellingItem, emeraldCount, sellingItemCount, maxUseIn, xpValue, 0.05F); + } + + public ItemsForEmeraldsTrade(ItemStack sellingItem, int emeraldCount, int sellingItemCount, int maxUses, int xpValue, float priceMultiplier) { + this.sellingItem = sellingItem; + this.emeraldCount = emeraldCount; + this.sellingItemCount = sellingItemCount; + this.maxUses = maxUses; + this.xpValue = xpValue; + this.priceMultiplier = priceMultiplier; + } + + public MerchantOffer getOffer(Entity trader, Random rand) { + return new MerchantOffer(new ItemStack(Items.EMERALD, this.emeraldCount), new ItemStack(this.sellingItem.getItem(), this.sellingItemCount), maxUseIn, this.xpValue, this.priceMultiplier); + } + } + + static class SuspiciousStewForEmeraldTrade implements AlienTrade.ITrade { + final Effect effect; + final int duration; + final int xpValue; + private final float priceMultiplier; + + public SuspiciousStewForEmeraldTrade(Effect effectIn, int durationIn, int xpValue) { + this.effect = effectIn; + this.duration = durationIn; + this.xpValue = xpValue; + this.priceMultiplier = 0.05F; + } + + @Nullable + public MerchantOffer getOffer(Entity trader, Random rand) { + ItemStack itemstack = new ItemStack(Items.SUSPICIOUS_STEW, 1); + SuspiciousStewItem.addEffect(itemstack, this.effect, this.duration); + return new MerchantOffer(new ItemStack(Items.EMERALD, 1), itemstack, maxUseIn, this.xpValue, this.priceMultiplier); + } + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/pygro/PygroEntity.java b/src/main/java/net/mrscauthd/boss_tools/entity/pygro/PygroEntity.java new file mode 100644 index 000000000..b71a36972 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/pygro/PygroEntity.java @@ -0,0 +1,53 @@ +package net.mrscauthd.boss_tools.entity.pygro; + +import com.google.common.collect.ImmutableList; +import net.minecraft.entity.ai.brain.Brain; +import net.minecraft.entity.ai.brain.memory.MemoryModuleType; +import net.minecraft.entity.ai.brain.sensor.Sensor; +import net.minecraft.entity.ai.brain.sensor.SensorType; +import net.minecraft.entity.monster.piglin.PiglinEntity; +import net.mrscauthd.boss_tools.ModInnet; + +import net.minecraftforge.fml.network.NetworkHooks; +import net.minecraft.world.World; +import net.minecraft.network.IPacket; +import net.minecraft.entity.ai.attributes.Attributes; +import net.minecraft.entity.ai.attributes.AttributeModifierMap; +import net.minecraft.entity.MobEntity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.CreatureAttribute; + +public class PygroEntity extends PiglinEntity { + protected static final ImmutableList>> field_234405_b_ = ImmutableList.of(SensorType.NEAREST_LIVING_ENTITIES, SensorType.NEAREST_PLAYERS, SensorType.NEAREST_ITEMS, SensorType.HURT_BY, ModInnet.PYGRO_SENSOR.get() /*SensorType.PIGLIN_SPECIFIC_SENSOR*/); + protected static final ImmutableList> field_234414_c_ = ImmutableList.of(MemoryModuleType.LOOK_TARGET, MemoryModuleType.OPENED_DOORS, MemoryModuleType.MOBS, MemoryModuleType.VISIBLE_MOBS, MemoryModuleType.NEAREST_VISIBLE_PLAYER, MemoryModuleType.NEAREST_VISIBLE_TARGETABLE_PLAYER, MemoryModuleType.NEAREST_VISIBLE_ADULT_PIGLINS, MemoryModuleType.NEAREST_ADULT_PIGLINS, MemoryModuleType.NEAREST_VISIBLE_WANTED_ITEM, MemoryModuleType.HURT_BY, MemoryModuleType.HURT_BY_ENTITY, MemoryModuleType.WALK_TARGET, MemoryModuleType.CANT_REACH_WALK_TARGET_SINCE, MemoryModuleType.ATTACK_TARGET, MemoryModuleType.ATTACK_COOLING_DOWN, MemoryModuleType.INTERACTION_TARGET, MemoryModuleType.PATH, MemoryModuleType.ANGRY_AT, MemoryModuleType.UNIVERSAL_ANGER, MemoryModuleType.AVOID_TARGET, MemoryModuleType.ADMIRING_ITEM, MemoryModuleType.TIME_TRYING_TO_REACH_ADMIRE_ITEM, MemoryModuleType.ADMIRING_DISABLED, MemoryModuleType.DISABLE_WALK_TO_ADMIRE_ITEM, MemoryModuleType.CELEBRATE_LOCATION, MemoryModuleType.DANCING, MemoryModuleType.HUNTED_RECENTLY, MemoryModuleType.NEAREST_VISIBLE_BABY_HOGLIN, MemoryModuleType.NEAREST_VISIBLE_NEMESIS, MemoryModuleType.NEAREST_VISIBLE_ZOMBIFIED, MemoryModuleType.RIDE_TARGET, MemoryModuleType.VISIBLE_ADULT_PIGLIN_COUNT, MemoryModuleType.VISIBLE_ADULT_HOGLIN_COUNT, MemoryModuleType.NEAREST_VISIBLE_HUNTABLE_HOGLIN/*, MemoryModuleType.NEAREST_TARGETABLE_PLAYER_NOT_WEARING_GOLD*/, MemoryModuleType.NEAREST_PLAYER_HOLDING_WANTED_ITEM, MemoryModuleType.ATE_RECENTLY, MemoryModuleType.NEAREST_REPELLENT); + public PygroEntity(EntityType type, World world) { + super(type, world); + } + + public static AttributeModifierMap.MutableAttribute setCustomAttributes() { + return MobEntity.func_233666_p_() + .createMutableAttribute(Attributes.MOVEMENT_SPEED, 0.35) + .createMutableAttribute(Attributes.MAX_HEALTH, 16) + .createMutableAttribute(Attributes.ATTACK_DAMAGE, 5); + } + + @Override + protected Brain.BrainCodec getBrainCodec() { + return Brain.createCodec(field_234414_c_, field_234405_b_); + } + + @Override + public IPacket createSpawnPacket() { + return NetworkHooks.getEntitySpawningPacket(this); + } + + @Override + public CreatureAttribute getCreatureAttribute() { + return CreatureAttribute.UNDEAD; + } + + @Override + public boolean canDespawn(double distanceToClosestPlayer) { + return false; + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/pygro/PygroMobsSensor.java b/src/main/java/net/mrscauthd/boss_tools/entity/pygro/PygroMobsSensor.java new file mode 100644 index 000000000..ceeb40fec --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/pygro/PygroMobsSensor.java @@ -0,0 +1,116 @@ +package net.mrscauthd.boss_tools.entity.pygro; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.CampfireBlock; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.MobEntity; +import net.minecraft.entity.ai.brain.Brain; +import net.minecraft.entity.ai.brain.memory.MemoryModuleType; +import net.minecraft.entity.ai.brain.sensor.Sensor; +import net.minecraft.entity.boss.WitherEntity; +import net.minecraft.entity.monster.HoglinEntity; +import net.minecraft.entity.monster.WitherSkeletonEntity; +import net.minecraft.entity.monster.piglin.AbstractPiglinEntity; +import net.minecraft.entity.monster.piglin.PiglinBruteEntity; +import net.minecraft.entity.monster.piglin.PiglinEntity; +import net.minecraft.entity.monster.piglin.PiglinTasks; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.server.ServerWorld; + +public class PygroMobsSensor extends Sensor { + public Set> getUsedMemories() { + return ImmutableSet.of(MemoryModuleType.VISIBLE_MOBS, MemoryModuleType.MOBS, MemoryModuleType.NEAREST_VISIBLE_NEMESIS, MemoryModuleType.NEAREST_TARGETABLE_PLAYER_NOT_WEARING_GOLD, MemoryModuleType.NEAREST_PLAYER_HOLDING_WANTED_ITEM, MemoryModuleType.NEAREST_VISIBLE_HUNTABLE_HOGLIN, MemoryModuleType.NEAREST_VISIBLE_BABY_HOGLIN, MemoryModuleType.NEAREST_VISIBLE_ADULT_PIGLINS, MemoryModuleType.NEAREST_ADULT_PIGLINS, MemoryModuleType.VISIBLE_ADULT_PIGLIN_COUNT, MemoryModuleType.VISIBLE_ADULT_HOGLIN_COUNT, MemoryModuleType.NEAREST_REPELLENT); + } + + protected void update(ServerWorld worldIn, LivingEntity entityIn) { + Brain brain = entityIn.getBrain(); + brain.setMemory(MemoryModuleType.NEAREST_REPELLENT, findNearestRepellent(worldIn, entityIn)); + Optional optional = Optional.empty(); + Optional optional1 = Optional.empty(); + Optional optional2 = Optional.empty(); + Optional optional3 = Optional.empty(); + Optional optional4 = Optional.empty(); + Optional optional5 = Optional.empty(); + Optional optional6 = Optional.empty(); + int i = 0; + List list = Lists.newArrayList(); + List list1 = Lists.newArrayList(); + + for(LivingEntity livingentity : brain.getMemory(MemoryModuleType.VISIBLE_MOBS).orElse(ImmutableList.of())) { + if (livingentity instanceof HoglinEntity) { + HoglinEntity hoglinentity = (HoglinEntity)livingentity; + if (hoglinentity.isChild() && !optional2.isPresent()) { + optional2 = Optional.of(hoglinentity); + } else if (hoglinentity.func_234363_eJ_()) { + ++i; + if (!optional1.isPresent() && hoglinentity.func_234365_eM_()) { + optional1 = Optional.of(hoglinentity); + } + } + } else if (livingentity instanceof PiglinBruteEntity) { + list.add((PiglinBruteEntity)livingentity); + } else if (livingentity instanceof PiglinEntity) { + PiglinEntity piglinentity = (PiglinEntity)livingentity; + if (piglinentity.isChild() && !optional3.isPresent()) { + optional3 = Optional.of(piglinentity); + } else if (piglinentity.func_242337_eM()) { + list.add(piglinentity); + } + } else if (livingentity instanceof PlayerEntity) { + PlayerEntity playerentity = (PlayerEntity)livingentity; + // if (!optional5.isPresent() && EntityPredicates.CAN_HOSTILE_AI_TARGET.test(livingentity) && !PiglinTasks.func_234460_a_(playerentity) ) { + if (!optional5.isPresent() && false && !PiglinTasks.func_234460_a_(playerentity)) { + optional5 = Optional.of(playerentity); + } + + if (!optional6.isPresent() && !playerentity.isSpectator() && PiglinTasks.func_234482_b_(playerentity)) { + optional6 = Optional.of(playerentity); + } + } else if (optional.isPresent() || !(livingentity instanceof WitherSkeletonEntity) && !(livingentity instanceof WitherEntity)) { + if (!optional4.isPresent() && PiglinTasks.func_234459_a_(livingentity.getType())) { + optional4 = Optional.of(livingentity); + } + } else { + optional = Optional.of((MobEntity)livingentity); + } + } + + for(LivingEntity livingentity1 : brain.getMemory(MemoryModuleType.MOBS).orElse(ImmutableList.of())) { + if (livingentity1 instanceof AbstractPiglinEntity && ((AbstractPiglinEntity)livingentity1).func_242337_eM()) { + list1.add((AbstractPiglinEntity)livingentity1); + } + } + + brain.setMemory(MemoryModuleType.NEAREST_VISIBLE_NEMESIS, optional); + brain.setMemory(MemoryModuleType.NEAREST_VISIBLE_HUNTABLE_HOGLIN, optional1); + brain.setMemory(MemoryModuleType.NEAREST_VISIBLE_BABY_HOGLIN, optional2); + brain.setMemory(MemoryModuleType.NEAREST_VISIBLE_ZOMBIFIED, optional4); + brain.setMemory(MemoryModuleType.NEAREST_TARGETABLE_PLAYER_NOT_WEARING_GOLD, optional5); + brain.setMemory(MemoryModuleType.NEAREST_PLAYER_HOLDING_WANTED_ITEM, optional6); + brain.setMemory(MemoryModuleType.NEAREST_ADULT_PIGLINS, list1); + brain.setMemory(MemoryModuleType.NEAREST_VISIBLE_ADULT_PIGLINS, list); + brain.setMemory(MemoryModuleType.VISIBLE_ADULT_PIGLIN_COUNT, list.size()); + brain.setMemory(MemoryModuleType.VISIBLE_ADULT_HOGLIN_COUNT, i); + } + + private static Optional findNearestRepellent(ServerWorld world, LivingEntity livingEntity) { + return BlockPos.getClosestMatchingPosition(livingEntity.getPosition(), 8, 4, (pos) -> { + return isRepellent(world, pos); + }); + } + + private static boolean isRepellent(ServerWorld world, BlockPos pos) { + BlockState blockstate = world.getBlockState(pos); + boolean flag = blockstate.isIn(BlockTags.PIGLIN_REPELLENTS); + return flag && blockstate.isIn(Blocks.SOUL_CAMPFIRE) ? CampfireBlock.isLit(blockstate) : flag; + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/TileEntityBoxRenderer.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/TileEntityBoxRenderer.java new file mode 100644 index 000000000..b1e0b2da9 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/TileEntityBoxRenderer.java @@ -0,0 +1,193 @@ +package net.mrscauthd.boss_tools.entity.renderer; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexConsumer; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.tileentity.TileEntityRenderer; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; + +import net.minecraft.client.settings.GraphicsFanciness; +import net.minecraft.inventory.container.PlayerContainer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Matrix3f; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.mrscauthd.boss_tools.machines.OxygenBubbleDistributorBlock; + +@OnlyIn(Dist.CLIENT) +public class TileEntityBoxRenderer extends TileEntityRenderer { + + public static TextureAtlasSprite atlass = null; + + public TileEntityBoxRenderer(TileEntityRendererDispatcher rendererDispatcherIn) { + super(rendererDispatcherIn); + } + + @Override + public boolean isGlobalRenderer(OxygenBubbleDistributorBlock.CustomTileEntity te) { + return true; + } + + @Override + public void render(OxygenBubbleDistributorBlock.CustomTileEntity tileEntityIn, float partialTicks, MatrixStack matrix, IRenderTypeBuffer bufferIn, int combinedLightIn, int combinedOverlayIn) { + + if (tileEntityIn.isWorkingAreaVisible()) { + IVertexConsumer builder = (IVertexConsumer) bufferIn.getBuffer(RenderType.getLines()); + AxisAlignedBB workingArea = tileEntityIn.getWorkingArea(BlockPos.ZERO, tileEntityIn.getRange()); + + Matrix3f normal = matrix.getLast().getNormal(); + Matrix4f matrix4f = matrix.getLast().getMatrix(); + + float startX = (float) workingArea.minX - 0.005F; + float topY = (float) workingArea.minY - 0.005F; + float startZ = (float) workingArea.minZ - 0.005F; + + float endX = (float) workingArea.maxX + 0.005F; + float botY = (float) workingArea.maxY + 0.005F; + float endZ = (float) workingArea.maxZ + 0.005F; + + //255 is default + int rl = 78; + int gl = 197; + int bl = 231; + + int r = 255; + int g = 255; + int b = 255; + + //Bottom frame + drawShapeOutline(builder, matrix4f, normal, startX, botY, startZ, endX, botY, startZ, rl, gl, bl); + drawShapeOutline(builder, matrix4f, normal, startX, botY, endZ, endX, botY, endZ, rl, gl, bl); + drawShapeOutline(builder, matrix4f, normal, startX, botY, startZ, startX, botY, endZ, rl, gl, bl); + drawShapeOutline(builder, matrix4f, normal, endX, botY, startZ, endX, botY, endZ, rl, gl, bl); + + //Top frame + drawShapeOutline(builder, matrix4f, normal, startX, topY, startZ, endX, topY, startZ, rl, gl, bl); + drawShapeOutline(builder, matrix4f, normal, startX, topY, endZ, endX, topY, endZ, rl, gl, bl); + drawShapeOutline(builder, matrix4f, normal, startX, topY, startZ, startX, topY, endZ, rl, gl, bl); + drawShapeOutline(builder, matrix4f, normal, endX, topY, startZ, endX, topY, endZ, rl, gl, bl); + + //Vertical lines + drawShapeOutline(builder, matrix4f, normal, startX, botY, startZ, startX, topY, startZ, rl, gl, bl); + drawShapeOutline(builder, matrix4f, normal, startX, botY, endZ, startX, topY, endZ, rl, gl, bl); + drawShapeOutline(builder, matrix4f, normal, endX, botY, startZ, endX, topY, startZ, rl, gl, bl); + drawShapeOutline(builder, matrix4f, normal, endX, botY, endZ, endX, topY, endZ, rl, gl, bl); + + drawSurfaces(bufferIn,matrix4f, normal, startX, startZ, endX, endZ, botY, topY,r,g,b); + } + + } + + private void drawShapeOutline(IVertexConsumer builder, Matrix4f matrix, Matrix3f normal, float x1, float y1, float z1, float x2, float y2, float z2, int r, int g, int b) { + float nX = (float)(x2 - x1); + float nY = (float)(y2 - y1); + float nZ = (float)(z2 - z1); + float sqrt = (float) Math.sqrt(nX * nX + nY * nY + nZ * nZ); + nX = nX / sqrt; + nY = nY / sqrt; + nZ = nZ / sqrt; + + builder.pos(matrix, x1, y1, z1).color(r, g, b, 0xFF).normal(normal, nX, nY, nZ).endVertex(); + builder.pos(matrix, x2, y2, z2).color(r, g, b, 0xFF).normal(normal, nX, nY, nZ).endVertex(); + } + + private void drawSurfaces(IRenderTypeBuffer buffer, Matrix4f matrix, Matrix3f normal, float startX, float startZ, float endX, float endZ, float botY, float topY, int r, int g, int b) { + IVertexConsumer builder; + GraphicsFanciness graphicsFanciness = Minecraft.getInstance().gameSettings.graphicFanciness; + + if (graphicsFanciness == GraphicsFanciness.FABULOUS) { + builder = (IVertexConsumer) buffer.getBuffer(RenderType.getTranslucentMovingBlock()); + } else { + builder = (IVertexConsumer) buffer.getBuffer(RenderType.getTranslucentNoCrumbling()); + } + + if (atlass == null) { + atlass = Minecraft.getInstance().getAtlasSpriteGetter(PlayerContainer.LOCATION_BLOCKS_TEXTURE).apply(new ResourceLocation("boss_tools", "entities/tile_entity_box_oxygen_generator")); + } + + float maxU = atlass.getMaxU(); + float minU = atlass.getMinU(); + float maxV = atlass.getMaxV(); + float minV = atlass.getMinV(); + + //Down + builder.pos(matrix, startX, botY, startZ).color(r, g, b, 0xAA).tex(minU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, -1, 0).endVertex(); + builder.pos(matrix, endX, botY, startZ).color(r, g, b, 0xAA).tex(maxU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, -1, 0).endVertex(); + builder.pos(matrix, endX, botY, endZ).color(r, g, b, 0xAA).tex(maxU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, -1, 0).endVertex(); + builder.pos(matrix, startX, botY, endZ).color(r, g, b, 0xAA).tex(minU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, -1, 0).endVertex(); + + //Top + builder.pos(matrix, endX, topY, startZ).color(r, g, b, 0xAA).tex(minU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 1, 0).endVertex(); + builder.pos(matrix, startX, topY, startZ).color(r, g, b, 0xAA).tex(maxU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 1, 0).endVertex(); + builder.pos(matrix, startX, topY, endZ).color(r, g, b, 0xAA).tex(maxU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 1, 0).endVertex(); + builder.pos(matrix, endX, topY, endZ).color(r, g, b, 0xAA).tex(minU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 1, 0).endVertex(); + + //North + builder.pos(matrix, startX, botY, startZ).color(r, g, b, 0xAA).tex(minU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 0, -1).endVertex(); + builder.pos(matrix, startX, topY, startZ).color(r, g, b, 0xAA).tex(minU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 0, -1).endVertex(); + builder.pos(matrix, endX, topY, startZ).color(r, g, b, 0xAA).tex(maxU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 0, -1).endVertex(); + builder.pos(matrix, endX, botY, startZ).color(r, g, b, 0xAA).tex(maxU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 0, -1).endVertex(); + + //South + builder.pos(matrix, endX, botY, endZ).color(r, g, b, 0xAA).tex(minU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 0, 1).endVertex(); + builder.pos(matrix, endX, topY, endZ).color(r, g, b, 0xAA).tex(minU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 0, 1).endVertex(); + builder.pos(matrix, startX, topY, endZ).color(r, g, b, 0xAA).tex(maxU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 0, 1).endVertex(); + builder.pos(matrix, startX, botY, endZ).color(r, g, b, 0xAA).tex(maxU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 0, 1).endVertex(); + + //West + builder.pos(matrix, startX, botY, endZ).color(r, g, b, 0xAA).tex(minU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, -1, 0, 0).endVertex(); + builder.pos(matrix, startX, topY, endZ).color(r, g, b, 0xAA).tex(minU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, -1, 0, 0).endVertex(); + builder.pos(matrix, startX, topY, startZ).color(r, g, b, 0xAA).tex(maxU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, -1, 0, 0).endVertex(); + builder.pos(matrix, startX, botY, startZ).color(r, g, b, 0xAA).tex(maxU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, -1, 0, 0).endVertex(); + + //East + builder.pos(matrix, endX, botY, startZ).color(r, g, b, 0xAA).tex(minU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 1, 0, 0).endVertex(); + builder.pos(matrix, endX, topY, startZ).color(r, g, b, 0xAA).tex(minU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 1, 0, 0).endVertex(); + builder.pos(matrix, endX, topY, endZ).color(r, g, b, 0xAA).tex(maxU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 1, 0, 0).endVertex(); + builder.pos(matrix, endX, botY, endZ).color(r, g, b, 0xAA).tex(maxU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 1, 0, 0).endVertex(); + + //Inside + + //Down + builder.pos(matrix, endX, botY, startZ).color(r, g, b, 0xAA).tex(minU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, -1, 0).endVertex(); + builder.pos(matrix, startX, botY, startZ).color(r, g, b, 0xAA).tex(maxU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, -1, 0).endVertex(); + builder.pos(matrix, startX, botY, endZ).color(r, g, b, 0xAA).tex(maxU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, -1, 0).endVertex(); + builder.pos(matrix, endX, botY, endZ).color(r, g, b, 0xAA).tex(minU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, -1, 0).endVertex(); + + //Top + builder.pos(matrix, startX, topY, startZ).color(r, g, b, 0xAA).tex(minU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 1, 0).endVertex(); + builder.pos(matrix, endX, topY, startZ).color(r, g, b, 0xAA).tex(maxU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 1, 0).endVertex(); + builder.pos(matrix, endX, topY, endZ).color(r, g, b, 0xAA).tex(maxU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 1, 0).endVertex(); + builder.pos(matrix, startX, topY, endZ).color(r, g, b, 0xAA).tex(minU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 1, 0).endVertex(); + + //North + builder.pos(matrix, endX, botY, startZ).color(r, g, b, 0xAA).tex(minU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 0, -1).endVertex(); + builder.pos(matrix, endX, topY, startZ).color(r, g, b, 0xAA).tex(minU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 0, -1).endVertex(); + builder.pos(matrix, startX, topY, startZ).color(r, g, b, 0xAA).tex(maxU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 0, -1).endVertex(); + builder.pos(matrix, startX, botY, startZ).color(r, g, b, 0xAA).tex(maxU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 0, -1).endVertex(); + + //South + builder.pos(matrix, startX, botY, endZ).color(r, g, b, 0xAA).tex(minU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 0, 1).endVertex(); + builder.pos(matrix, startX, topY, endZ).color(r, g, b, 0xAA).tex(minU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 0, 1).endVertex(); + builder.pos(matrix, endX, topY, endZ).color(r, g, b, 0xAA).tex(maxU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 0, 1).endVertex(); + builder.pos(matrix, endX, botY, endZ).color(r, g, b, 0xAA).tex(maxU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 0, 0, 1).endVertex(); + + //West + builder.pos(matrix, endX, botY, endZ).color(r, g, b, 0xAA).tex(minU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, -1, 0, 0).endVertex(); + builder.pos(matrix, endX, topY, endZ).color(r, g, b, 0xAA).tex(minU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, -1, 0, 0).endVertex(); + builder.pos(matrix, endX, topY, startZ).color(r, g, b, 0xAA).tex(maxU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, -1, 0, 0).endVertex(); + builder.pos(matrix, endX, botY, startZ).color(r, g, b, 0xAA).tex(maxU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, -1, 0, 0).endVertex(); + + //East + builder.pos(matrix, startX, botY, startZ).color(r, g, b, 0xAA).tex(minU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 1, 0, 0).endVertex(); + builder.pos(matrix, startX, topY, startZ).color(r, g, b, 0xAA).tex(minU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 1, 0, 0).endVertex(); + builder.pos(matrix, startX, topY, endZ).color(r, g, b, 0xAA).tex(maxU, maxV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 1, 0, 0).endVertex(); + builder.pos(matrix, startX, botY, endZ).color(r, g, b, 0xAA).tex(maxU, minV).overlay(OverlayTexture.NO_OVERLAY).lightmap(240).normal(normal, 1, 0, 0).endVertex(); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/alien/AlienModel.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/alien/AlienModel.java new file mode 100644 index 000000000..da80818d0 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/alien/AlienModel.java @@ -0,0 +1,85 @@ +package net.mrscauthd.boss_tools.entity.renderer.alien; + +import net.mrscauthd.boss_tools.entity.alien.AlienEntity; + +import net.minecraft.util.math.MathHelper; +import net.minecraft.client.renderer.model.ModelRenderer; +import net.minecraft.client.renderer.entity.model.EntityModel; + +import com.mojang.blaze3d.vertex.IVertexBuilder; +import com.mojang.blaze3d.matrix.MatrixStack; + +// Made with Blockbench 3.6.6 +// Exported for Minecraft version 1.15 +// Paste this class into your mod and generate all required imports +public class AlienModel extends EntityModel { + private final ModelRenderer head; + private final ModelRenderer body; + private final ModelRenderer leg0; + private final ModelRenderer leg1; + private final ModelRenderer arms; + private final ModelRenderer head2; + public AlienModel() { + textureWidth = 128; + textureHeight = 128; + + head = new ModelRenderer(this); + head.setRotationPoint(0.0F, 0.0F, 0.0F); + head.setTextureOffset(0, 0).addBox(-4.0F, -9.0F, -4.0F, 8.0F, 9.0F, 8.0F, 0.0F, true); + head.setTextureOffset(32, 0).addBox(-4.5F, -19.0F, -4.5F, 9.0F, 10.0F, 9.0F, 0.0F, true); + head.setTextureOffset(16, 64).addBox(-8.0F, -15.0F, -8.0F, 16.0F, 0.0F, 16.0F, 0.0F, true); + head.setTextureOffset(70, 2).addBox(-6.0F, -16.0F, -6.0F, 12.0F, 0.0F, 12.0F, 0.0F, true); + head.setTextureOffset(24, 0).addBox(-1.0F, -3.0F, -6.0F, 2.0F, 4.0F, 2.0F, 0.0F, true); + + body = new ModelRenderer(this); + body.setRotationPoint(0.0F, 0.0F, 0.0F); + body.setTextureOffset(16, 20).addBox(-4.0F, 0.0F, -3.0F, 8.0F, 12.0F, 6.0F, 0.0F, true); + body.setTextureOffset(0, 38).addBox(-4.0F, 0.0F, -3.0F, 8.0F, 18.0F, 6.0F, 0.5F, true); + + leg0 = new ModelRenderer(this); + leg0.setRotationPoint(2.0F, 12.0F, 0.0F); + leg0.setTextureOffset(0, 22).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, 0.0F, true); + + leg1 = new ModelRenderer(this); + leg1.setRotationPoint(-2.0F, 12.0F, 0.0F); + leg1.setTextureOffset(0, 22).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, 0.0F, true); + + arms = new ModelRenderer(this); + arms.setRotationPoint(0.0F, 2.0F, 0.0F); + setRotationAngle(arms, -0.7854F, 0.0F, 0.0F); + arms.setTextureOffset(40, 38).addBox(-4.0F, 2.0F, -2.0F, 8.0F, 4.0F, 4.0F, 0.0F, true); + arms.setTextureOffset(44, 22).addBox(4.0F, -2.0F, -2.0F, 4.0F, 8.0F, 4.0F, 0.0F, true); + arms.setTextureOffset(44, 22).addBox(-8.0F, -2.0F, -2.0F, 4.0F, 8.0F, 4.0F, 0.0F, true); + + head2 = new ModelRenderer(this); + head2.setRotationPoint(0.0F, -10.0F, 0.0F); + } + + @Override + public void render(MatrixStack matrixStack, IVertexBuilder buffer, int packedLight, int packedOverlay, float red, float green, float blue, + float alpha) { + if (isChild) { + matrixStack.scale(0.5f, 0.5f, 0.5f); + matrixStack.translate(0, 1.5f, 0); + } + head.render(matrixStack, buffer, packedLight, packedOverlay); + body.render(matrixStack, buffer, packedLight, packedOverlay); + leg0.render(matrixStack, buffer, packedLight, packedOverlay); + leg1.render(matrixStack, buffer, packedLight, packedOverlay); + arms.render(matrixStack, buffer, packedLight, packedOverlay); + head2.render(matrixStack, buffer, packedLight, packedOverlay); + } + + public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } + + public void setRotationAngles(AlienEntity e, float f, float f1, float f2, float f3, float f4) { + this.head.rotateAngleY = f3 / (180F / (float) Math.PI); + this.head.rotateAngleX = f4 / (180F / (float) Math.PI); + this.leg0.rotateAngleX = MathHelper.cos(f * 1.0F) * -1.0F * f1; + this.leg1.rotateAngleX = MathHelper.cos(f * 1.0F) * 1.0F * f1; + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/alien/AlienRenderer.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/alien/AlienRenderer.java new file mode 100644 index 000000000..8a8331110 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/alien/AlienRenderer.java @@ -0,0 +1,60 @@ +package net.mrscauthd.boss_tools.entity.renderer.alien; + + +import net.minecraft.client.renderer.entity.EntityRendererManager; +import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.entity.merchant.villager.VillagerProfession; +import net.minecraft.util.ResourceLocation; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.entity.alien.AlienEntity; + +public class AlienRenderer extends MobRenderer> { + public AlienRenderer(EntityRendererManager renderManagerIn) { + super(renderManagerIn, new AlienModel<>(), 0.5f); + } + + @Override + public ResourceLocation getEntityTexture(AlienEntity entity) { + if (entity.getVillagerData().getProfession() == VillagerProfession.FARMER) { + return new ResourceLocation(BossToolsMod.ModId,"textures/entities/alien/entity_alien1.png"); + } + if (entity.getVillagerData().getProfession() == VillagerProfession.FISHERMAN) { + return new ResourceLocation(BossToolsMod.ModId,"textures/entities/alien/entity_alien2.png"); + } + if (entity.getVillagerData().getProfession() == VillagerProfession.SHEPHERD) { + return new ResourceLocation(BossToolsMod.ModId,"textures/entities/alien/entity_alien3.png"); + } + if (entity.getVillagerData().getProfession() == VillagerProfession.FLETCHER) { + return new ResourceLocation(BossToolsMod.ModId,"textures/entities/alien/entity_alien4.png"); + } + if (entity.getVillagerData().getProfession() == VillagerProfession.LIBRARIAN) { + return new ResourceLocation(BossToolsMod.ModId,"textures/entities/alien/entity_alien5.png"); + } + if (entity.getVillagerData().getProfession() == VillagerProfession.CARTOGRAPHER) { + return new ResourceLocation(BossToolsMod.ModId,"textures/entities/alien/entity_alien6.png"); + } + if (entity.getVillagerData().getProfession() == VillagerProfession.CLERIC) { + return new ResourceLocation(BossToolsMod.ModId,"textures/entities/alien/entity_alien7.png"); + } + if (entity.getVillagerData().getProfession() == VillagerProfession.ARMORER) { + return new ResourceLocation(BossToolsMod.ModId,"textures/entities/alien/entity_alien8.png"); + } + if (entity.getVillagerData().getProfession() == VillagerProfession.WEAPONSMITH) { + return new ResourceLocation(BossToolsMod.ModId,"textures/entities/alien/entity_alien9.png"); + } + if (entity.getVillagerData().getProfession() == VillagerProfession.TOOLSMITH) { + return new ResourceLocation(BossToolsMod.ModId,"textures/entities/alien/entity_alien10.png"); + } + if (entity.getVillagerData().getProfession() == VillagerProfession.BUTCHER) { + return new ResourceLocation(BossToolsMod.ModId,"textures/entities/alien/entity_alien11.png"); + } + if (entity.getVillagerData().getProfession() == VillagerProfession.LEATHERWORKER) { + return new ResourceLocation(BossToolsMod.ModId,"textures/entities/alien/entity_alien12.png"); + } + if (entity.getVillagerData().getProfession() == VillagerProfession.MASON) { + return new ResourceLocation(BossToolsMod.ModId,"textures/entities/alien/entity_alien13.png"); + } + + return new ResourceLocation(BossToolsMod.ModId,"textures/entities/alien/entity_alien.png"); + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/alienzombie/AlienZombieModel.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/alienzombie/AlienZombieModel.java new file mode 100644 index 000000000..9c52867b4 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/alienzombie/AlienZombieModel.java @@ -0,0 +1,199 @@ +package net.mrscauthd.boss_tools.entity.renderer.alienzombie; + +import net.minecraft.entity.MobEntity; + +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.util.math.MathHelper; +import net.minecraft.client.renderer.model.ModelRenderer; +import net.minecraft.client.renderer.entity.model.EntityModel; + +import com.mojang.blaze3d.vertex.IVertexBuilder; +import com.mojang.blaze3d.matrix.MatrixStack; + +@OnlyIn(Dist.CLIENT) +public class AlienZombieModel extends EntityModel { + private final ModelRenderer head; + private final ModelRenderer nose_r1; + private final ModelRenderer cube_r1; + private final ModelRenderer cube_r2; + private final ModelRenderer cube_r3; + private final ModelRenderer head_r1; + private final ModelRenderer head_r2; + private final ModelRenderer body; + private final ModelRenderer leg0; + private final ModelRenderer leg1; + private final ModelRenderer arm2; + private final ModelRenderer arms; + private final ModelRenderer monsterarm1; + private final ModelRenderer cube_r4; + private final ModelRenderer monsterarm2; + private final ModelRenderer cube_r5; + private final ModelRenderer monsterarm3; + private final ModelRenderer cube_r6; + private final ModelRenderer monsterarm4; + private final ModelRenderer cube_r7; + public AlienZombieModel() { + textureWidth = 96; + textureHeight = 64; + + head = new ModelRenderer(this); + head.setRotationPoint(-0.0084F, 0.023F, -2.9621F); + setRotationAngle(head, -0.2182F, 0.0F, 0.0F); + head.setTextureOffset(0, 0).addBox(-3.9916F, -7.4559F, -5.0853F, 8.0F, 9.0F, 8.0F, 0.0F, true); + + nose_r1 = new ModelRenderer(this); + nose_r1.setRotationPoint(0.0084F, -0.8556F, -6.2184F); + head.addChild(nose_r1); + setRotationAngle(nose_r1, -1.0036F, 0.0F, 0.0F); + nose_r1.setTextureOffset(24, 0).addBox(-1.0F, -2.0F, -1.0F, 2.0F, 4.0F, 2.0F, 0.0F, true); + + cube_r1 = new ModelRenderer(this); + cube_r1.setRotationPoint(1.897F, 5.0235F, -7.2107F); + head.addChild(cube_r1); + setRotationAngle(cube_r1, 1.0036F, 0.48F, -0.8727F); + cube_r1.setTextureOffset(88, 59).addBox(-1.0F, -1.5F, -1.0F, 2.0F, 3.0F, 2.0F, 0.0F, true); + + cube_r2 = new ModelRenderer(this); + cube_r2.setRotationPoint(-1.939F, 5.0505F, -7.2254F); + head.addChild(cube_r2); + setRotationAngle(cube_r2, 1.0036F, -0.48F, 0.8727F); + cube_r2.setTextureOffset(88, 59).addBox(-1.0F, -1.5F, -1.0F, 2.0F, 3.0F, 2.0F, 0.0F, false); + + cube_r3 = new ModelRenderer(this); + cube_r3.setRotationPoint(0.0084F, 3.0701F, -8.6546F); + head.addChild(cube_r3); + setRotationAngle(cube_r3, -0.3927F, 0.0F, 0.0F); + cube_r3.setTextureOffset(88, 54).addBox(-1.5F, -1.5F, -0.5F, 3.0F, 3.0F, 1.0F, 0.0F, false); + + head_r1 = new ModelRenderer(this); + head_r1.setRotationPoint(0.0084F, -11.4255F, -0.113F); + head.addChild(head_r1); + setRotationAngle(head_r1, -0.1745F, 0.0F, 0.0F); + head_r1.setTextureOffset(33, 0).addBox(-4.5F, -5.0F, -4.5F, 9.0F, 10.0F, 9.0F, 0.0F, true); + + head_r2 = new ModelRenderer(this); + head_r2.setRotationPoint(0.0084F, 2.093F, -4.4925F); + head.addChild(head_r2); + setRotationAngle(head_r2, -1.0036F, 0.0F, 0.0F); + head_r2.setTextureOffset(40, 53).addBox(-3.5F, -3.0F, -2.5F, 7.0F, 6.0F, 5.0F, 0.0F, true); + + body = new ModelRenderer(this); + body.setRotationPoint(0.0F, 0.0F, -3.0F); + setRotationAngle(body, 0.2182F, 0.0F, 0.0F); + body.setTextureOffset(16, 20).addBox(-4.0F, 0.0F, -3.0F, 8.0F, 12.0F, 6.0F, 0.0F, true); + body.setTextureOffset(0, 38).addBox(-4.0F, 0.0F, -3.0F, 8.0F, 20.0F, 6.0F, 0.5F, true); + + leg0 = new ModelRenderer(this); + leg0.setRotationPoint(2.0F, 12.0F, 0.0F); + leg0.setTextureOffset(0, 22).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, 0.0F, true); + + leg1 = new ModelRenderer(this); + leg1.setRotationPoint(-2.0F, 12.0F, 0.0F); + leg1.setTextureOffset(0, 22).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, 0.0F, true); + + arm2 = new ModelRenderer(this); + arm2.setRotationPoint(4.0F, 2.0F, -1.5F); + arm2.setTextureOffset(44, 22).addBox(0.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, 0.0F, true); + + arms = new ModelRenderer(this); + arms.setRotationPoint(-4.0F, 2.0F, -1.5F); + setRotationAngle(arms, 0.0436F, 0.0F, 0.0F); + arms.setTextureOffset(44, 22).addBox(-4.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, 0.0F, true); + + monsterarm1 = new ModelRenderer(this); + monsterarm1.setRotationPoint(-4.0F, 0.0F, -2.0F); + setRotationAngle(monsterarm1, 0.0F, 0.0F, 0.9599F); + monsterarm1.setTextureOffset(30, 46).addBox(-17.0F, -1.0F, -1.0F, 17.0F, 2.0F, 2.0F, 0.0F, false); + + cube_r4 = new ModelRenderer(this); + cube_r4.setRotationPoint(-16.25F, 0.0F, 0.75F); + monsterarm1.addChild(cube_r4); + setRotationAngle(cube_r4, 0.0F, -1.1345F, 0.0F); + cube_r4.setTextureOffset(34, 46).addBox(-15.0F, -1.0F, -1.0F, 15.0F, 2.0F, 2.0F, -0.1F, false); + + monsterarm2 = new ModelRenderer(this); + monsterarm2.setRotationPoint(-3.0F, -0.25F, -3.0F); + setRotationAngle(monsterarm2, 0.0F, 0.0F, -0.3927F); + monsterarm2.setTextureOffset(30, 46).addBox(-17.0F, -1.0F, -1.0F, 17.0F, 2.0F, 2.0F, 0.0F, false); + + cube_r5 = new ModelRenderer(this); + cube_r5.setRotationPoint(-16.25F, 0.0F, 0.75F); + monsterarm2.addChild(cube_r5); + setRotationAngle(cube_r5, 0.0F, -1.1345F, 0.0F); + cube_r5.setTextureOffset(34, 46).addBox(-15.0F, -1.0F, -1.0F, 15.0F, 2.0F, 2.0F, -0.1F, false); + + monsterarm3 = new ModelRenderer(this); + monsterarm3.setRotationPoint(4.0F, 0.0F, -2.0F); + setRotationAngle(monsterarm3, 0.0F, 0.0F, 2.1817F); + monsterarm3.setTextureOffset(30, 46).addBox(-17.0F, -1.0F, -1.0F, 17.0F, 2.0F, 2.0F, 0.0F, false); + + cube_r6 = new ModelRenderer(this); + cube_r6.setRotationPoint(-16.25F, 0.0F, 0.75F); + monsterarm3.addChild(cube_r6); + setRotationAngle(cube_r6, 0.0F, -1.1345F, 0.0F); + cube_r6.setTextureOffset(34, 46).addBox(-15.0F, -1.0F, -1.0F, 15.0F, 2.0F, 2.0F, -0.1F, false); + + monsterarm4 = new ModelRenderer(this); + monsterarm4.setRotationPoint(3.0F, -0.25F, -3.0F); + setRotationAngle(monsterarm4, 0.0F, 0.0F, -2.7489F); + monsterarm4.setTextureOffset(30, 46).addBox(-17.0F, -1.0F, -1.0F, 17.0F, 2.0F, 2.0F, 0.0F, false); + + cube_r7 = new ModelRenderer(this); + cube_r7.setRotationPoint(-16.25F, 0.0F, 0.75F); + monsterarm4.addChild(cube_r7); + setRotationAngle(cube_r7, 0.0F, -1.1345F, 0.0F); + cube_r7.setTextureOffset(30, 46).addBox(-15.0F, -1.0F, -1.0F, 15.0F, 2.0F, 2.0F, -0.1F, false); + } + + @Override + public void setRotationAngles(T entityIn, float f, float f1, float f2, float f3, float f4) { + //base + this.arm2.rotateAngleY = 0.0F; + this.arms.rotateAngleY = 0.0F; + this.arm2.rotateAngleZ = 0.0F; + this.arms.rotateAngleZ = 0.0F; + this.arm2.rotateAngleX = 0.0F; + this.arms.rotateAngleX = 0.0F; + + this.arm2.rotateAngleZ -= MathHelper.cos(f2 * 0.04F) * 0.04F + 0.04F; + this.arms.rotateAngleZ += MathHelper.cos(f2 * 0.04F) * 0.04F + 0.04F; + + //base end + + this.head.rotateAngleY = f3 / (180F / (float) Math.PI); + this.head.rotateAngleX = f4 / (180F / (float) Math.PI); + this.leg0.rotateAngleX = MathHelper.cos(f * 1.0F) * -1.0F * f1; + this.leg1.rotateAngleX = MathHelper.cos(f * 1.0F) * 1.0F * f1; + this.monsterarm1.rotateAngleY = MathHelper.cos(f * 0.3662F + (float) Math.PI) * f1 / 2; + this.monsterarm4.rotateAngleY = MathHelper.cos(f * 0.3662F + (float) Math.PI) * f1 / 2; + this.monsterarm3.rotateAngleY = MathHelper.cos(f * 0.3662F + (float) Math.PI) * f1 / 2; + this.monsterarm2.rotateAngleY = MathHelper.cos(f * 0.3662F + (float) Math.PI) * f1 / 2; + this.arms.rotateAngleX = 30f; + this.arm2.rotateAngleX = 30f; + + this.arm2.rotateAngleX -= MathHelper.cos(f2 * 0.04F) * 0.04F + 0.04F; + this.arms.rotateAngleX += MathHelper.cos(f2 * 0.04F) * 0.04F + 0.04F; + } + + @Override + public void render(MatrixStack matrixStack, IVertexBuilder buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + head.render(matrixStack, buffer, packedLight, packedOverlay); + body.render(matrixStack, buffer, packedLight, packedOverlay); + leg0.render(matrixStack, buffer, packedLight, packedOverlay); + leg1.render(matrixStack, buffer, packedLight, packedOverlay); + arm2.render(matrixStack, buffer, packedLight, packedOverlay); + arms.render(matrixStack, buffer, packedLight, packedOverlay); + monsterarm1.render(matrixStack, buffer, packedLight, packedOverlay); + monsterarm2.render(matrixStack, buffer, packedLight, packedOverlay); + monsterarm3.render(matrixStack, buffer, packedLight, packedOverlay); + monsterarm4.render(matrixStack, buffer, packedLight, packedOverlay); + } + + public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/alienzombie/AlienZombieRenderer.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/alienzombie/AlienZombieRenderer.java new file mode 100644 index 000000000..d155a9ad2 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/alienzombie/AlienZombieRenderer.java @@ -0,0 +1,21 @@ +package net.mrscauthd.boss_tools.entity.renderer.alienzombie; + +import net.minecraft.client.renderer.entity.EntityRendererManager; +import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.entity.MobEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.mrscauthd.boss_tools.BossToolsMod; + +@OnlyIn(Dist.CLIENT) +public class AlienZombieRenderer extends MobRenderer> { + public AlienZombieRenderer(EntityRendererManager entityRendererManager) { + super(entityRendererManager, new AlienZombieModel(), 0.5f); + } + + @Override + public ResourceLocation getEntityTexture(MobEntity entity) { + return new ResourceLocation(BossToolsMod.ModId, "textures/entities/alien_zombie.png"); + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/flagtileentity/TileEntityHeadModel.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/flagtileentity/TileEntityHeadModel.java new file mode 100644 index 000000000..270c6f221 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/flagtileentity/TileEntityHeadModel.java @@ -0,0 +1,38 @@ +package net.mrscauthd.boss_tools.entity.renderer.flagtileentity; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.model.Model; +import net.minecraft.client.renderer.model.ModelRenderer; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class TileEntityHeadModel extends Model { + protected final ModelRenderer field_217105_a; + + public TileEntityHeadModel() { + this(0, 35, 64, 64); + } + + public TileEntityHeadModel(int p_i51060_1_, int p_i51060_2_, int p_i51060_3_, int p_i51060_4_) { + super(RenderType::getEntityTranslucent); + this.textureWidth = p_i51060_3_; + this.textureHeight = p_i51060_4_; + this.field_217105_a = new ModelRenderer(this, p_i51060_1_, p_i51060_2_); + + this.field_217105_a.setTextureOffset(8, 8).addBox(-3.0F, -11.0F, 3.980F, 8.0F, 8.0F, 0.020F, 0.0F, false); + + this.field_217105_a.setTextureOffset(0, 8).addBox(-3.0F, -11.0F, 4.002F, 8.0F, 8.0F, 0.010F, 0.0F, false); + } + + public void func_225603_a_(float p_225603_1_, float p_225603_2_, float p_225603_3_) { + this.field_217105_a.rotateAngleY = p_225603_2_ * ((float)Math.PI / 180F); + this.field_217105_a.rotateAngleX = p_225603_3_ * ((float)Math.PI / 180F); + } + + public void render(MatrixStack matrixStackIn, IVertexBuilder bufferIn, int packedLightIn, int packedOverlayIn, float red, float green, float blue, float alpha) { + this.field_217105_a.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, red, green, blue, alpha); + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/flagtileentity/TileEntityHeadRenderer.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/flagtileentity/TileEntityHeadRenderer.java new file mode 100644 index 000000000..06f00d8fb --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/flagtileentity/TileEntityHeadRenderer.java @@ -0,0 +1,82 @@ +package net.mrscauthd.boss_tools.entity.renderer.flagtileentity; + +import com.google.common.collect.Maps; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.minecraft.MinecraftProfileTexture; +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; +import net.minecraft.block.BlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.client.renderer.tileentity.TileEntityRenderer; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.client.resources.DefaultPlayerSkin; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.state.properties.DoubleBlockHalf; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Util; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.mrscauthd.boss_tools.flag.FlagBlock; +import net.mrscauthd.boss_tools.flag.FlagTileEntity; + +import javax.annotation.Nullable; +import java.util.Map; + +@OnlyIn(Dist.CLIENT) +public class TileEntityHeadRenderer extends TileEntityRenderer { + + private static final Map MODELS = Util.make(Maps.newHashMap(), (p_209262_0_) -> { + TileEntityHeadModel genericheadmodel1 = new TileEntityHeadModel(); + p_209262_0_.put(FlagBlock.Types.PLAYER, genericheadmodel1); + }); + + private static final Map SKINS = Util.make(Maps.newHashMap(), (p_209263_0_) -> { + p_209263_0_.put(FlagBlock.Types.PLAYER, DefaultPlayerSkin.getDefaultSkinLegacy()); + }); + + public TileEntityHeadRenderer(TileEntityRendererDispatcher p_i226015_1_) { + super(p_i226015_1_); + } + + public void render(FlagTileEntity tileEntityIn, float partialTicks, MatrixStack matrixStackIn, IRenderTypeBuffer bufferIn, int combinedLightIn, int combinedOverlayIn) { + if (tileEntityIn.getBlockState().get(FlagBlock.HALF) == DoubleBlockHalf.UPPER) { + + BlockState blockstate = tileEntityIn.getBlockState(); + boolean flag = blockstate.getBlock() instanceof FlagBlock; + Direction direction = flag ? blockstate.get(FlagBlock.FACING) : null; + render(direction, blockstate.get(FlagBlock.FACING).getHorizontalAngle(), ((FlagBlock) blockstate.getBlock()).getSkullType(), tileEntityIn.getPlayerProfile(), 0, matrixStackIn, bufferIn, combinedLightIn); + } + } + + public static void render(@Nullable Direction directionIn, float p_228879_1_, FlagBlock.ISkullType skullType, @Nullable GameProfile gameProfileIn, float animationProgress, MatrixStack matrixStackIn, IRenderTypeBuffer buffer, int combinedLight) { + TileEntityHeadModel genericheadmodel = MODELS.get(skullType); + matrixStackIn.push(); + if (directionIn == null) { + matrixStackIn.translate(0.5D, 0.0D, 0.5D); + } else { + float f = 0.25F; + matrixStackIn.translate((double) (0.5F - (float) directionIn.getXOffset() * 0.25F), 0.25D, (double) (0.5F - (float) directionIn.getZOffset() * 0.25F)); + } + + matrixStackIn.scale(-1.0F, -1.0F, 1.0F); + IVertexBuilder ivertexbuilder = buffer.getBuffer(getRenderType(skullType, gameProfileIn)); + genericheadmodel.func_225603_a_(animationProgress, p_228879_1_, 0.0F); + genericheadmodel.render(matrixStackIn, ivertexbuilder, combinedLight, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); + matrixStackIn.pop(); + } + + private static RenderType getRenderType(FlagBlock.ISkullType skullType, @Nullable GameProfile gameProfileIn) { + ResourceLocation resourcelocation = SKINS.get(skullType); + if (skullType == FlagBlock.Types.PLAYER && gameProfileIn != null) { + Minecraft minecraft = Minecraft.getInstance(); + Map map = minecraft.getSkinManager().loadSkinFromCache(gameProfileIn); + return map.containsKey(MinecraftProfileTexture.Type.SKIN) ? RenderType.getEntityTranslucent(minecraft.getSkinManager().loadSkin(map.get(MinecraftProfileTexture.Type.SKIN), MinecraftProfileTexture.Type.SKIN)) : RenderType.getEntityCutoutNoCull(DefaultPlayerSkin.getDefaultSkin(PlayerEntity.getUUID(gameProfileIn))); + } else { + return RenderType.getEntityCutoutNoCullZOffset(resourcelocation); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/lander/LanderModel.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/lander/LanderModel.java new file mode 100644 index 000000000..41d4ba11e --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/lander/LanderModel.java @@ -0,0 +1,308 @@ +package net.mrscauthd.boss_tools.entity.renderer.lander; + +import net.mrscauthd.boss_tools.entity.LanderEntity; + +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.client.renderer.model.ModelRenderer; +import net.minecraft.client.renderer.entity.model.EntityModel; + +import com.mojang.blaze3d.vertex.IVertexBuilder; +import com.mojang.blaze3d.matrix.MatrixStack; + +@OnlyIn(Dist.CLIENT) +public class LanderModel extends EntityModel { + private final ModelRenderer leg1; + private final ModelRenderer cube_r1; + private final ModelRenderer cube_r2; + private final ModelRenderer cube_r3; + private final ModelRenderer cube_r4; + private final ModelRenderer leg2; + private final ModelRenderer cube_r5; + private final ModelRenderer cube_r6; + private final ModelRenderer cube_r7; + private final ModelRenderer cube_r8; + private final ModelRenderer cube_r9; + private final ModelRenderer leg3; + private final ModelRenderer cube_r10; + private final ModelRenderer cube_r11; + private final ModelRenderer cube_r12; + private final ModelRenderer cube_r13; + private final ModelRenderer cube_r14; + private final ModelRenderer leg4; + private final ModelRenderer cube_r15; + private final ModelRenderer cube_r16; + private final ModelRenderer cube_r17; + private final ModelRenderer cube_r18; + private final ModelRenderer cube_r19; + private final ModelRenderer bb_main; + private final ModelRenderer cube_r20; + private final ModelRenderer cube_r21; + private final ModelRenderer cube_r22; + private final ModelRenderer cube_r23; + private final ModelRenderer cube_r24; + private final ModelRenderer cube_r25; + private final ModelRenderer cube_r26; + private final ModelRenderer cube_r27; + private final ModelRenderer cube_r28; + private final ModelRenderer cube_r29; + private final ModelRenderer cube_r30; + private final ModelRenderer cube_r31; + private final ModelRenderer cube_r32; + private final ModelRenderer cube_r33; + private final ModelRenderer cube_r34; + private final ModelRenderer cube_r35; + private final ModelRenderer cube_r36; + public LanderModel() { + textureWidth = 256; + textureHeight = 256; + + leg1 = new ModelRenderer(this); + leg1.setRotationPoint(-11.0F, 8.1414F, 10.7143F); + leg1.setTextureOffset(0, 144).addBox(-10.0F, 14.8586F, 0.2857F, 10.0F, 1.0F, 10.0F, 0.0F, false); + cube_r1 = new ModelRenderer(this); + cube_r1.setRotationPoint(11.0F, 11.8586F, -10.7143F); + leg1.addChild(cube_r1); + setRotationAngle(cube_r1, -0.6981F, -0.7854F, 0.0F); + cube_r1.setTextureOffset(116, 44).addBox(-1.0F, -12.5F, 16.5F, 2.0F, 1.0F, 3.0F, 0.0F, false); + cube_r2 = new ModelRenderer(this); + cube_r2.setRotationPoint(11.0F, 11.8586F, -10.7143F); + leg1.addChild(cube_r2); + setRotationAngle(cube_r2, 0.0F, 0.7854F, 0.0F); + cube_r2.setTextureOffset(116, 37).addBox(-21.0F, 0.99F, -2.0F, 4.0F, 2.0F, 4.0F, 0.0F, false); + cube_r3 = new ModelRenderer(this); + cube_r3.setRotationPoint(11.0F, 11.8586F, -10.7143F); + leg1.addChild(cube_r3); + setRotationAngle(cube_r3, 0.6109F, -0.7854F, 0.0F); + cube_r3.setTextureOffset(64, 26).addBox(-2.0F, -2.0F, 18.0F, 4.0F, 4.0F, 3.0F, 0.0F, false); + cube_r3.setTextureOffset(42, 26).addBox(-3.0F, -3.0F, 14.0F, 6.0F, 6.0F, 5.0F, 0.0F, false); + cube_r4 = new ModelRenderer(this); + cube_r4.setRotationPoint(11.0F, 11.8586F, -10.7143F); + leg1.addChild(cube_r4); + setRotationAngle(cube_r4, 0.3927F, -0.7854F, 0.0F); + cube_r4.setTextureOffset(48, 46).addBox(-1.5F, -2.0F, 15.0F, 3.0F, 12.0F, 3.0F, -0.5F, false); + cube_r4.setTextureOffset(104, 37).addBox(-1.5F, -2.0F, 15.0F, 3.0F, 11.0F, 3.0F, 0.0F, false); + leg2 = new ModelRenderer(this); + leg2.setRotationPoint(-10.0F, 8.1414F, -10.2857F); + cube_r5 = new ModelRenderer(this); + cube_r5.setRotationPoint(10.0F, 11.8586F, 10.2857F); + leg2.addChild(cube_r5); + setRotationAngle(cube_r5, 0.6109F, -2.3562F, 0.0F); + cube_r5.setTextureOffset(42, 26).addBox(-3.0F, -3.0F, 14.0F, 6.0F, 6.0F, 5.0F, 0.0F, false); + cube_r5.setTextureOffset(64, 26).addBox(-2.0F, -2.0F, 18.0F, 4.0F, 4.0F, 3.0F, 0.0F, false); + cube_r6 = new ModelRenderer(this); + cube_r6.setRotationPoint(10.0F, 11.8586F, 10.2857F); + leg2.addChild(cube_r6); + setRotationAngle(cube_r6, 0.3927F, -2.3562F, 0.0F); + cube_r6.setTextureOffset(48, 46).addBox(-1.5F, -2.0F, 15.0F, 3.0F, 12.0F, 3.0F, -0.5F, false); + cube_r6.setTextureOffset(104, 37).addBox(-1.5F, -2.0F, 15.0F, 3.0F, 11.0F, 3.0F, 0.0F, false); + cube_r7 = new ModelRenderer(this); + cube_r7.setRotationPoint(10.0F, 11.8586F, 10.2857F); + leg2.addChild(cube_r7); + setRotationAngle(cube_r7, 0.0F, -1.5708F, 0.0F); + cube_r7.setTextureOffset(0, 144).addBox(-21.0F, 3.0F, 11.0F, 10.0F, 1.0F, 10.0F, 0.0F, false); + cube_r8 = new ModelRenderer(this); + cube_r8.setRotationPoint(10.0F, 11.8586F, 10.2857F); + leg2.addChild(cube_r8); + setRotationAngle(cube_r8, 0.0F, -0.7854F, 0.0F); + cube_r8.setTextureOffset(116, 37).addBox(-21.0F, 0.99F, -2.0F, 4.0F, 2.0F, 4.0F, 0.0F, false); + cube_r9 = new ModelRenderer(this); + cube_r9.setRotationPoint(10.0F, 11.8586F, 10.2857F); + leg2.addChild(cube_r9); + setRotationAngle(cube_r9, -0.6981F, -2.3562F, 0.0F); + cube_r9.setTextureOffset(116, 44).addBox(-1.0F, -12.5F, 16.5F, 2.0F, 1.0F, 3.0F, 0.0F, false); + leg3 = new ModelRenderer(this); + leg3.setRotationPoint(10.0F, 8.1414F, -10.2857F); + cube_r10 = new ModelRenderer(this); + cube_r10.setRotationPoint(-10.0F, 11.8586F, 10.2857F); + leg3.addChild(cube_r10); + setRotationAngle(cube_r10, 0.6109F, 2.3562F, 0.0F); + cube_r10.setTextureOffset(64, 26).addBox(-2.0F, -2.0F, 18.0F, 4.0F, 4.0F, 3.0F, 0.0F, false); + cube_r10.setTextureOffset(42, 26).addBox(-3.0F, -3.0F, 14.0F, 6.0F, 6.0F, 5.0F, 0.0F, false); + cube_r11 = new ModelRenderer(this); + cube_r11.setRotationPoint(-10.0F, 11.8586F, 10.2857F); + leg3.addChild(cube_r11); + setRotationAngle(cube_r11, 0.3927F, 2.3562F, 0.0F); + cube_r11.setTextureOffset(48, 46).addBox(-1.5F, -2.0F, 15.0F, 3.0F, 12.0F, 3.0F, -0.5F, false); + cube_r11.setTextureOffset(104, 37).addBox(-1.5F, -2.0F, 15.0F, 3.0F, 11.0F, 3.0F, 0.0F, false); + cube_r12 = new ModelRenderer(this); + cube_r12.setRotationPoint(-10.0F, 11.8586F, 10.2857F); + leg3.addChild(cube_r12); + setRotationAngle(cube_r12, 0.0F, 3.1416F, 0.0F); + cube_r12.setTextureOffset(0, 144).addBox(-21.0F, 3.0F, 11.0F, 10.0F, 1.0F, 10.0F, 0.0F, false); + cube_r13 = new ModelRenderer(this); + cube_r13.setRotationPoint(-10.0F, 11.8586F, 10.2857F); + leg3.addChild(cube_r13); + setRotationAngle(cube_r13, 0.0F, -2.3562F, 0.0F); + cube_r13.setTextureOffset(116, 37).addBox(-21.0F, 0.99F, -2.0F, 4.0F, 2.0F, 4.0F, 0.0F, false); + cube_r14 = new ModelRenderer(this); + cube_r14.setRotationPoint(-10.0F, 11.8586F, 10.2857F); + leg3.addChild(cube_r14); + setRotationAngle(cube_r14, -0.6981F, 2.3562F, 0.0F); + cube_r14.setTextureOffset(116, 44).addBox(-1.0F, -12.5F, 16.5F, 2.0F, 1.0F, 3.0F, 0.0F, false); + leg4 = new ModelRenderer(this); + leg4.setRotationPoint(10.0F, 8.1414F, 10.7143F); + cube_r15 = new ModelRenderer(this); + cube_r15.setRotationPoint(-10.0F, 11.8586F, -10.7143F); + leg4.addChild(cube_r15); + setRotationAngle(cube_r15, 0.6109F, 0.7854F, 0.0F); + cube_r15.setTextureOffset(64, 26).addBox(-2.0F, -2.0F, 18.0F, 4.0F, 4.0F, 3.0F, 0.0F, false); + cube_r15.setTextureOffset(42, 26).addBox(-3.0F, -3.0F, 14.0F, 6.0F, 6.0F, 5.0F, 0.0F, false); + cube_r16 = new ModelRenderer(this); + cube_r16.setRotationPoint(-10.0F, 11.8586F, -10.7143F); + leg4.addChild(cube_r16); + setRotationAngle(cube_r16, 0.3927F, 0.7854F, 0.0F); + cube_r16.setTextureOffset(48, 46).addBox(-1.5F, -2.0F, 15.0F, 3.0F, 12.0F, 3.0F, -0.5F, false); + cube_r16.setTextureOffset(104, 37).addBox(-1.5F, -2.0F, 15.0F, 3.0F, 11.0F, 3.0F, 0.0F, false); + cube_r17 = new ModelRenderer(this); + cube_r17.setRotationPoint(-10.0F, 11.8586F, -10.7143F); + leg4.addChild(cube_r17); + setRotationAngle(cube_r17, 0.0F, 1.5708F, 0.0F); + cube_r17.setTextureOffset(0, 144).addBox(-21.0F, 3.0F, 11.0F, 10.0F, 1.0F, 10.0F, 0.0F, false); + cube_r18 = new ModelRenderer(this); + cube_r18.setRotationPoint(-10.0F, 11.8586F, -10.7143F); + leg4.addChild(cube_r18); + setRotationAngle(cube_r18, 0.0F, 2.3562F, 0.0F); + cube_r18.setTextureOffset(116, 37).addBox(-21.0F, 0.99F, -2.0F, 4.0F, 2.0F, 4.0F, 0.0F, false); + cube_r19 = new ModelRenderer(this); + cube_r19.setRotationPoint(-10.0F, 11.8586F, -10.7143F); + leg4.addChild(cube_r19); + setRotationAngle(cube_r19, -0.6981F, 0.7854F, 0.0F); + cube_r19.setTextureOffset(116, 44).addBox(-1.0F, -12.5F, 16.5F, 2.0F, 1.0F, 3.0F, 0.0F, false); + bb_main = new ModelRenderer(this); + bb_main.setRotationPoint(0.0F, 24.0F, 0.0F); + bb_main.setTextureOffset(155, 59).addBox(-6.0F, -11.9F, -6.0F, 12.0F, 1.0F, 12.0F, 0.0F, false); + bb_main.setTextureOffset(0, 0).addBox(-12.0F, -16.0F, -12.0F, 24.0F, 2.0F, 24.0F, 0.0F, false); + bb_main.setTextureOffset(0, 111).addBox(-5.0F, -19.0F, -8.0F, 10.0F, 3.0F, 10.0F, 0.0F, false); + bb_main.setTextureOffset(0, 46).addBox(-8.0F, -35.0F, -13.0F, 16.0F, 16.0F, 16.0F, 0.0F, false); + bb_main.setTextureOffset(0, 124).addBox(8.0F, -30.0F, -8.0F, 2.0F, 10.0F, 10.0F, 0.0F, false); + bb_main.setTextureOffset(104, 12).addBox(-8.995F, -36.0F, -12.0F, 18.0F, 18.0F, 2.0F, 0.0F, false); + bb_main.setTextureOffset(155, 24).addBox(3.5F, -46.0F, -15.5F, 1.0F, 13.0F, 1.0F, 0.0F, false); + bb_main.setTextureOffset(155, 24).addBox(-4.5F, -46.0F, -15.5F, 1.0F, 13.0F, 1.0F, 0.0F, false); + bb_main.setTextureOffset(159, 24).addBox(1.5F, -41.0F, -15.5F, 1.0F, 13.0F, 1.0F, 0.0F, false); + bb_main.setTextureOffset(163, 24).addBox(-2.5F, -43.0F, -15.5F, 1.0F, 13.0F, 1.0F, 0.0F, false); + bb_main.setTextureOffset(167, 24).addBox(-0.5F, -44.0F, -15.5F, 1.0F, 13.0F, 1.0F, 0.0F, false); + bb_main.setTextureOffset(104, 0).addBox(1.0F, -33.0F, 14.0F, 3.0F, 9.0F, 3.0F, 0.0F, false); + bb_main.setTextureOffset(104, 0).addBox(-4.0F, -33.0F, 14.0F, 3.0F, 9.0F, 3.0F, 0.0F, false); + bb_main.setTextureOffset(155, 39).addBox(-4.0F, -13.9F, -4.0F, 8.0F, 1.0F, 8.0F, 0.0F, false); + bb_main.setTextureOffset(155, 48).addBox(-5.0F, -12.9F, -5.0F, 10.0F, 1.0F, 10.0F, 0.0F, false); + bb_main.setTextureOffset(104, 51).addBox(-6.0F, -25.0F, -14.0F, 12.0F, 3.0F, 3.0F, 0.0F, false); + bb_main.setTextureOffset(104, 51).addBox(-6.0F, -33.0F, -16.0F, 12.0F, 3.0F, 3.0F, 0.0F, false); + bb_main.setTextureOffset(104, 51).addBox(-6.0F, -16.505F, 9.005F, 12.0F, 3.0F, 3.0F, 0.0F, false); + bb_main.setTextureOffset(24, 134).addBox(10.0F, -28.0F, -5.0F, 1.0F, 6.0F, 4.0F, 0.0F, false); + bb_main.setTextureOffset(34, 134).addBox(10.0F, -27.0F, -6.0F, 1.0F, 4.0F, 6.0F, 0.0F, false); + cube_r20 = new ModelRenderer(this); + cube_r20.setRotationPoint(-0.5F, -17.5F, 0.5F); + bb_main.addChild(cube_r20); + setRotationAngle(cube_r20, 0.0F, 3.1416F, 0.0F); + cube_r20.setTextureOffset(24, 134).addBox(9.5F, -10.5F, 1.5F, 1.0F, 6.0F, 4.0F, 0.0F, false); + cube_r20.setTextureOffset(34, 134).addBox(9.5F, -9.5F, 0.5F, 1.0F, 4.0F, 6.0F, 0.0F, false); + cube_r21 = new ModelRenderer(this); + cube_r21.setRotationPoint(0.0F, 0.0F, 0.0F); + bb_main.addChild(cube_r21); + setRotationAngle(cube_r21, 0.0F, 3.1416F, 0.0F); + cube_r21.setTextureOffset(104, 51).addBox(-6.0F, -16.505F, 9.005F, 12.0F, 3.0F, 3.0F, 0.0F, false); + cube_r22 = new ModelRenderer(this); + cube_r22.setRotationPoint(0.0F, 0.0F, 0.0F); + bb_main.addChild(cube_r22); + setRotationAngle(cube_r22, 0.0F, 1.5708F, 0.0F); + cube_r22.setTextureOffset(104, 51).addBox(-6.0F, -16.505F, 9.005F, 12.0F, 3.0F, 3.0F, 0.0F, false); + cube_r23 = new ModelRenderer(this); + cube_r23.setRotationPoint(0.0F, 0.0F, 0.0F); + bb_main.addChild(cube_r23); + setRotationAngle(cube_r23, 0.0F, -1.5708F, 0.0F); + cube_r23.setTextureOffset(104, 51).addBox(-6.0F, -16.505F, 9.005F, 12.0F, 3.0F, 3.0F, 0.0F, false); + cube_r24 = new ModelRenderer(this); + cube_r24.setRotationPoint(0.0F, 0.0F, 0.0F); + bb_main.addChild(cube_r24); + setRotationAngle(cube_r24, 0.2182F, 0.0F, 0.0F); + cube_r24.setTextureOffset(104, 51).addBox(-6.0F, -38.0F, 5.0F, 12.0F, 3.0F, 3.0F, 0.0F, false); + cube_r24.setTextureOffset(104, 51).addBox(-6.0F, -38.0F, 0.0F, 12.0F, 3.0F, 3.0F, 0.0F, false); + cube_r25 = new ModelRenderer(this); + cube_r25.setRotationPoint(0.0F, 0.0F, 0.0F); + bb_main.addChild(cube_r25); + setRotationAngle(cube_r25, 0.7854F, 0.0F, 0.0F); + cube_r25.setTextureOffset(104, 51).addBox(-6.0F, -8.0F, 15.0F, 12.0F, 3.0F, 3.0F, 0.0F, false); + cube_r25.setTextureOffset(104, 51).addBox(-6.0F, -11.0F, 12.0F, 12.0F, 3.0F, 3.0F, 0.0F, false); + cube_r26 = new ModelRenderer(this); + cube_r26.setRotationPoint(-0.5F, -15.5F, 19.5F); + bb_main.addChild(cube_r26); + setRotationAngle(cube_r26, 0.2182F, 0.0F, 0.0F); + cube_r26.setTextureOffset(14, 126).addBox(-12.5F, -25.5F, -7.5F, 4.0F, 4.0F, 4.0F, 0.0F, false); + cube_r26.setTextureOffset(14, 126).addBox(-12.5F, -10.5F, -7.5F, 4.0F, 4.0F, 4.0F, 0.0F, false); + cube_r26.setTextureOffset(14, 126).addBox(9.5F, -10.5F, -7.5F, 4.0F, 4.0F, 4.0F, 0.0F, false); + cube_r26.setTextureOffset(14, 126).addBox(9.5F, -25.5F, -7.5F, 4.0F, 4.0F, 4.0F, 0.0F, false); + cube_r26.setTextureOffset(0, 92).addBox(-11.5F, -24.5F, -6.5F, 24.0F, 17.0F, 2.0F, 0.0F, false); + cube_r27 = new ModelRenderer(this); + cube_r27.setRotationPoint(0.0F, 0.0F, 0.0F); + bb_main.addChild(cube_r27); + setRotationAngle(cube_r27, 0.0F, 2.3562F, 0.0F); + cube_r27.setTextureOffset(104, 32).addBox(-6.0F, -16.5F, 11.0F, 12.0F, 3.0F, 2.0F, 0.0F, false); + cube_r28 = new ModelRenderer(this); + cube_r28.setRotationPoint(0.0F, 0.0F, 0.0F); + bb_main.addChild(cube_r28); + setRotationAngle(cube_r28, 0.0F, -2.3562F, 0.0F); + cube_r28.setTextureOffset(104, 32).addBox(-6.0F, -16.5F, 11.0F, 12.0F, 3.0F, 2.0F, 0.0F, false); + cube_r29 = new ModelRenderer(this); + cube_r29.setRotationPoint(0.0F, 0.0F, 0.0F); + bb_main.addChild(cube_r29); + setRotationAngle(cube_r29, 0.0F, -0.7854F, 0.0F); + cube_r29.setTextureOffset(104, 32).addBox(-6.0F, -16.5F, 11.0F, 12.0F, 3.0F, 2.0F, 0.0F, false); + cube_r30 = new ModelRenderer(this); + cube_r30.setRotationPoint(0.0F, 0.0F, 0.0F); + bb_main.addChild(cube_r30); + setRotationAngle(cube_r30, 0.0F, 0.7854F, 0.0F); + cube_r30.setTextureOffset(104, 32).addBox(-6.0F, -16.5F, 11.0F, 12.0F, 3.0F, 2.0F, 0.0F, false); + cube_r31 = new ModelRenderer(this); + cube_r31.setRotationPoint(-0.5F, -17.5F, 15.5F); + bb_main.addChild(cube_r31); + setRotationAngle(cube_r31, 0.2182F, 0.0F, 0.0F); + cube_r31.setTextureOffset(155, 0).addBox(-4.5F, -15.5F, -12.5F, 10.0F, 10.0F, 14.0F, 0.0F, false); + cube_r32 = new ModelRenderer(this); + cube_r32.setRotationPoint(-0.5F, -15.5F, 23.5F); + bb_main.addChild(cube_r32); + setRotationAngle(cube_r32, 0.2182F, 0.0F, 0.0F); + cube_r32.setTextureOffset(0, 78).addBox(-9.5F, -21.5F, -6.5F, 20.0F, 13.0F, 1.0F, 0.0F, false); + cube_r33 = new ModelRenderer(this); + cube_r33.setRotationPoint(-0.5F, -17.5F, -3.5F); + bb_main.addChild(cube_r33); + setRotationAngle(cube_r33, 0.3927F, 0.0F, 0.0F); + cube_r33.setTextureOffset(116, 0).addBox(-5.0F, -16.5F, -6.5F, 11.0F, 9.0F, 2.0F, 0.0F, false); + cube_r34 = new ModelRenderer(this); + cube_r34.setRotationPoint(-0.5F, -17.5F, 1.5F); + bb_main.addChild(cube_r34); + setRotationAngle(cube_r34, 1.5708F, 0.0F, 0.0F); + cube_r34.setTextureOffset(104, 12).addBox(-8.5F, -15.5F, 14.5F, 18.0F, 18.0F, 2.0F, 0.0F, false); + cube_r35 = new ModelRenderer(this); + cube_r35.setRotationPoint(-0.5F, -17.5F, 0.5F); + bb_main.addChild(cube_r35); + setRotationAngle(cube_r35, 0.2182F, 0.0F, 0.0F); + cube_r35.setTextureOffset(0, 26).addBox(-6.5F, -19.5F, -8.5F, 14.0F, 6.0F, 14.0F, 0.0F, false); + cube_r36 = new ModelRenderer(this); + cube_r36.setRotationPoint(-9.5F, -21.5F, -3.5F); + bb_main.addChild(cube_r36); + setRotationAngle(cube_r36, 0.0F, 3.1416F, 0.0F); + cube_r36.setTextureOffset(0, 124).addBox(-1.5F, -8.5F, -5.5F, 2.0F, 10.0F, 10.0F, 0.0F, false); + } + + @Override + public void setRotationAngles(T entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { + + } + + @Override + public void render(MatrixStack matrixStack, IVertexBuilder buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + leg1.render(matrixStack, buffer, packedLight, packedOverlay); + leg2.render(matrixStack, buffer, packedLight, packedOverlay); + leg3.render(matrixStack, buffer, packedLight, packedOverlay); + leg4.render(matrixStack, buffer, packedLight, packedOverlay); + bb_main.render(matrixStack, buffer, packedLight, packedOverlay); + } + + public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/lander/LanderRenderer.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/lander/LanderRenderer.java new file mode 100644 index 000000000..3b034adc0 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/lander/LanderRenderer.java @@ -0,0 +1,21 @@ +package net.mrscauthd.boss_tools.entity.renderer.lander; + +import net.minecraft.client.renderer.entity.EntityRendererManager; +import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.entity.LanderEntity; + +@OnlyIn(Dist.CLIENT) +public class LanderRenderer extends MobRenderer> { + public LanderRenderer(EntityRendererManager entityRendererManager) { + super(entityRendererManager, new LanderModel(), 0f); + } + + @Override + public ResourceLocation getEntityTexture(LanderEntity entity) { + return new ResourceLocation(BossToolsMod.ModId, "textures/vehicles/lander.png"); + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/mogler/MoglerModel.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/mogler/MoglerModel.java new file mode 100644 index 000000000..00b060684 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/mogler/MoglerModel.java @@ -0,0 +1,177 @@ +package net.mrscauthd.boss_tools.entity.renderer.mogler; + +import com.google.common.collect.ImmutableList; +import net.minecraft.client.renderer.entity.model.AgeableModel; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.MobEntity; +import net.minecraft.entity.monster.IFlinging; +import net.minecraft.util.math.MathHelper; +import net.mrscauthd.boss_tools.entity.MoglerEntity; + +import net.minecraftforge.fml.client.registry.RenderingRegistry; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.client.event.ModelRegistryEvent; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.entity.Entity; +import net.minecraft.client.renderer.model.ModelRenderer; +import net.minecraft.client.renderer.entity.model.EntityModel; +import net.minecraft.client.renderer.entity.MobRenderer; + +import com.mojang.blaze3d.vertex.IVertexBuilder; +import com.mojang.blaze3d.matrix.MatrixStack; + +@OnlyIn(Dist.CLIENT) +public class MoglerModel extends AgeableModel { + private final ModelRenderer body; + private final ModelRenderer cube_r1; + private final ModelRenderer cube_r2; + private final ModelRenderer cube_r3; + private final ModelRenderer cube_r4; + private final ModelRenderer head; + private final ModelRenderer cube_r5; + private final ModelRenderer cube_r6; + private final ModelRenderer cube_r7; + private final ModelRenderer jaw2; + private final ModelRenderer cube_r8; + private final ModelRenderer jaw1; + private final ModelRenderer cube_r9; + private final ModelRenderer leg1; + private final ModelRenderer leg2; + private final ModelRenderer leg3; + private final ModelRenderer leg4; + public MoglerModel() { + textureWidth = 256; + textureHeight = 256; + body = new ModelRenderer(this); + body.setRotationPoint(0.0F, 24.0F, 0.0F); + body.setTextureOffset(0, 0).addBox(-8.0F, -15.0F, -13.0F, 16.0F, 9.0F, 32.0F, 0.0F, false); + cube_r1 = new ModelRenderer(this); + cube_r1.setRotationPoint(0.0F, 0.0F, 0.0F); + body.addChild(cube_r1); + setRotationAngle(cube_r1, -0.2182F, 0.0F, 0.0F); + cube_r1.setTextureOffset(85, 30).addBox(-9.0F, -20.0F, 12.0F, 18.0F, 9.0F, 11.0F, 0.0F, false); + cube_r2 = new ModelRenderer(this); + cube_r2.setRotationPoint(0.0F, 0.0F, 0.0F); + body.addChild(cube_r2); + setRotationAngle(cube_r2, 0.1309F, 0.0F, 0.0F); + cube_r2.setTextureOffset(0, 41).addBox(-10.0F, -18.0F, 5.0F, 20.0F, 9.0F, 16.0F, 0.0F, false); + cube_r3 = new ModelRenderer(this); + cube_r3.setRotationPoint(0.0F, 0.0F, 0.0F); + body.addChild(cube_r3); + setRotationAngle(cube_r3, 0.3927F, 0.0F, 0.0F); + cube_r3.setTextureOffset(58, 52).addBox(-11.0F, -18.0F, 2.0F, 22.0F, 9.0F, 14.0F, 0.0F, false); + cube_r4 = new ModelRenderer(this); + cube_r4.setRotationPoint(0.0F, 0.0F, 0.0F); + body.addChild(cube_r4); + setRotationAngle(cube_r4, 0.5236F, 0.0F, 0.0F); + cube_r4.setTextureOffset(66, 2).addBox(-12.0F, -22.0F, -4.0F, 24.0F, 11.0F, 11.0F, 0.0F, false); + head = new ModelRenderer(this); + head.setRotationPoint(0.0F, 9.0F, -8.0F); + cube_r5 = new ModelRenderer(this); + cube_r5.setRotationPoint(0.0F, 13.0F, 8.0F); + head.addChild(cube_r5); + setRotationAngle(cube_r5, 0.829F, 0.0F, 0.0F); + cube_r5.setTextureOffset(0, 66).addBox(-10.0F, -26.0F, -3.0F, 20.0F, 11.0F, 11.0F, 0.0F, false); + cube_r6 = new ModelRenderer(this); + cube_r6.setRotationPoint(0.0F, 1.5F, -12.0F); + head.addChild(cube_r6); + setRotationAngle(cube_r6, 0.0F, 0.0F, 0.0F); + cube_r6.setTextureOffset(0, 22).addBox(-7.5F, -8.5F, -1.75F, 15.0F, 8.0F, 0.0F, 0.0F, false); + cube_r7 = new ModelRenderer(this); + cube_r7.setRotationPoint(0.0F, 1.5F, -12.0F); + head.addChild(cube_r7); + setRotationAngle(cube_r7, -0.6545F, 0.0F, 0.0F); + cube_r7.setTextureOffset(62, 75).addBox(-9.0F, -8.5F, -1.75F, 18.0F, 13.0F, 11.0F, 0.0F, false); + jaw2 = new ModelRenderer(this); + jaw2.setRotationPoint(0.0F, 1.5F, -12.0F); + head.addChild(jaw2); + setRotationAngle(jaw2, -0.6545F, 0.0F, 0.0F); + cube_r8 = new ModelRenderer(this); + cube_r8.setRotationPoint(0.0F, 0.0F, 0.0F); + jaw2.addChild(cube_r8); + setRotationAngle(cube_r8, 0.0F, 0.0F, 0.5672F); + cube_r8.setTextureOffset(96, 99).addBox(5.25F, -1.5F, -0.75F, 5.0F, 8.0F, 9.0F, 0.0F, false); + jaw1 = new ModelRenderer(this); + jaw1.setRotationPoint(0.0F, 1.5F, -12.0F); + head.addChild(jaw1); + setRotationAngle(jaw1, -0.6545F, 0.0F, 0.0F); + cube_r9 = new ModelRenderer(this); + cube_r9.setRotationPoint(0.0F, 0.0F, 0.0F); + jaw1.addChild(cube_r9); + setRotationAngle(cube_r9, 0.0F, 0.0F, -0.5672F); + cube_r9.setTextureOffset(0, 110).addBox(-10.25F, -1.5F, -0.75F, 5.0F, 8.0F, 9.0F, 0.0F, false); + leg1 = new ModelRenderer(this); + leg1.setRotationPoint(-9.5F, 11.5F, -6.5F); + leg1.setTextureOffset(64, 99).addBox(-3.5F, -0.5F, -4.5F, 7.0F, 13.0F, 9.0F, 0.0F, false); + leg2 = new ModelRenderer(this); + leg2.setRotationPoint(9.5F, 11.5F, -6.5F); + leg2.setTextureOffset(32, 90).addBox(-3.5F, -0.5F, -4.5F, 7.0F, 13.0F, 9.0F, 0.0F, false); + leg3 = new ModelRenderer(this); + leg3.setRotationPoint(9.5F, 11.5F, 12.5F); + leg3.setTextureOffset(0, 88).addBox(-3.5F, -0.5F, -4.5F, 7.0F, 13.0F, 9.0F, 0.0F, false); + leg4 = new ModelRenderer(this); + leg4.setRotationPoint(-9.5F, 11.5F, 12.5F); + leg4.setTextureOffset(0, 0).addBox(-3.5F, -0.5F, -4.5F, 7.0F, 13.0F, 9.0F, 0.0F, false); + } + + @Override + public void render(MatrixStack matrixStack, IVertexBuilder buffer, int packedLight, int packedOverlay, float red, float green, float blue,float alpha) { + if (isChild) { + matrixStack.scale(0.5f, 0.5f, 0.5f); + matrixStack.translate(0, 1.5f, 0); + } + body.render(matrixStack, buffer, packedLight, packedOverlay); + head.render(matrixStack, buffer, packedLight, packedOverlay); + leg1.render(matrixStack, buffer, packedLight, packedOverlay); + leg2.render(matrixStack, buffer, packedLight, packedOverlay); + leg3.render(matrixStack, buffer, packedLight, packedOverlay); + leg4.render(matrixStack, buffer, packedLight, packedOverlay); + } + + @Override + protected Iterable getHeadParts() { + return ImmutableList.of(this.head); + } + + @Override + protected Iterable getBodyParts() { + return ImmutableList.of(this.body, this.leg1, this.leg2, this.leg3, this.leg4); + } + + public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } + + @Override + public void setRotationAngles(T entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { + // private final ModelRenderer field_239106_a_; head 52.5 + // private final ModelRenderer field_239107_b_; right ear + // private final ModelRenderer field_239108_f_; left ear + // private final ModelRenderer field_239109_g_; body + // private final ModelRenderer field_239110_h_; frontRightLeg + // private final ModelRenderer field_239111_i_; frontLeftLeg + // private final ModelRenderer field_239112_j_; backRightLeg + // private final ModelRenderer field_239113_k_; backLeftLeg + // private final ModelRenderer field_239114_l_; mane + + + + //this.field_239107_b_.rotateAngleZ = -0.6981317F - limbSwingAmount * MathHelper.sin(limbSwing); //ear animation + //this.field_239108_f_.rotateAngleZ = 0.6981317F + limbSwingAmount * MathHelper.sin(limbSwing); //ear animation + //this.head.rotateAngleX = 52; + this.head.rotateAngleY = netHeadYaw * ((float)Math.PI / 180F); + int i = entityIn.func_230290_eL_(); + float f = 1.0F - (float)MathHelper.abs(10 - 2 * i) / 10.0F; + this.head.rotateAngleX = MathHelper.lerp(f, 0.0F, -1.14906584F); + + this.leg1.rotateAngleX = MathHelper.cos(limbSwing) * 1.2F * limbSwingAmount; + this.leg2.rotateAngleX = MathHelper.cos(limbSwing + (float)Math.PI) * 1.2F * limbSwingAmount; + this.leg3.rotateAngleX = this.leg1.rotateAngleX; + this.leg4.rotateAngleX = this.leg2.rotateAngleX; + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/mogler/MoglerRenderer.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/mogler/MoglerRenderer.java new file mode 100644 index 000000000..d9767db75 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/mogler/MoglerRenderer.java @@ -0,0 +1,27 @@ +package net.mrscauthd.boss_tools.entity.renderer.mogler; + +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.entity.monster.HoglinEntity; +import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.client.renderer.entity.EntityRendererManager; +import net.mrscauthd.boss_tools.BossToolsMod; + +@OnlyIn(Dist.CLIENT) +public class MoglerRenderer extends MobRenderer> { + private static final ResourceLocation field_239382_a_ = new ResourceLocation(BossToolsMod.ModId, "textures/entities/mogler_entity.png"); + + public MoglerRenderer(EntityRendererManager p_i232470_1_) { + super(p_i232470_1_, new MoglerModel<>(), 0.7F); + } + + public ResourceLocation getEntityTexture(HoglinEntity entity) { + return field_239382_a_; + } + + protected boolean func_230495_a_(HoglinEntity p_230495_1_) { + return p_230495_1_.func_234364_eK_(); + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/pygro/PygroModel.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/pygro/PygroModel.java new file mode 100644 index 000000000..93a939317 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/pygro/PygroModel.java @@ -0,0 +1,153 @@ +package net.mrscauthd.boss_tools.entity.renderer.pygro; + +import net.minecraft.client.renderer.entity.model.PlayerModel; +import net.minecraft.client.renderer.model.ModelHelper; +import net.minecraft.client.renderer.model.ModelRenderer; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.MobEntity; +import net.minecraft.entity.monster.piglin.PiglinAction; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.mrscauthd.boss_tools.entity.pygro.PygroEntity; + +@OnlyIn(Dist.CLIENT) +public class PygroModel extends PlayerModel { + public final ModelRenderer field_239115_a_; + public final ModelRenderer field_239116_b_; + private final ModelRenderer field_241660_y_; + private final ModelRenderer field_241661_z_; + private final ModelRenderer field_241658_A_; + private final ModelRenderer field_241659_B_; + private final ModelRenderer nose1; + private final ModelRenderer nose2; + private final ModelRenderer eyes; + + public PygroModel(float p_i232336_1_, int p_i232336_2_, int p_i232336_3_) { + super(p_i232336_1_, false); + this.textureWidth = p_i232336_2_; + this.textureHeight = p_i232336_3_; + this.bipedBody = new ModelRenderer(this, 16, 16); + this.bipedBody.addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, p_i232336_1_); + this.bipedHead = new ModelRenderer(this); + this.bipedHead.setTextureOffset(0, 0).addBox(-5.0F, -8.0F, -4.0F, 10.0F, 8.0F, 8.0F, p_i232336_1_); + this.bipedHead.setTextureOffset(31, 1).addBox(-2.0F, -4.0F, -5.0F, 4.0F, 4.0F, 1.0F, p_i232336_1_); + this.bipedHead.setTextureOffset(2, 4).addBox(2.0F, -2.0F, -5.0F, 1.0F, 2.0F, 1.0F, p_i232336_1_); + this.bipedHead.setTextureOffset(2, 0).addBox(-3.0F, -2.0F, -5.0F, 1.0F, 2.0F, 1.0F, p_i232336_1_); + this.field_239115_a_ = new ModelRenderer(this); + this.field_239115_a_.setRotationPoint(4.5F, -6.0F, 0.0F); + this.field_239115_a_.setTextureOffset(51, 6).addBox(0.0F, 0.0F, -2.0F, 1.0F, 5.0F, 4.0F, p_i232336_1_); + this.bipedHead.addChild(this.field_239115_a_); + this.field_239116_b_ = new ModelRenderer(this); + this.field_239116_b_.setRotationPoint(-4.5F, -6.0F, 0.0F); + this.field_239116_b_.setTextureOffset(39, 6).addBox(-1.0F, 0.0F, -2.0F, 1.0F, 5.0F, 4.0F, p_i232336_1_); + this.bipedHead.addChild(this.field_239116_b_); + this.bipedHeadwear = new ModelRenderer(this); + + nose1 = new ModelRenderer(this); + nose1.setRotationPoint(2.5F, -1.0F, -4.5F); + nose1.setTextureOffset(31, 2).addBox(-2.15F, -1.45F, -0.35F, 3.0F, 3.0F, 1.0F, 0.0F, false); + bipedHead.addChild(this.nose1); + + nose2 = new ModelRenderer(this); + nose2.setRotationPoint(-2.0F, -1.0F, -4.5F); + nose2.setTextureOffset(31, 2).addBox(-1.25F, -1.35F, -0.5F, 3.0F, 3.0F, 1.0F, 0.0F, false); + bipedHead.addChild(this.nose2); + + eyes = new ModelRenderer(this); + eyes.setRotationPoint(0.0F, -7.5F, -4.0F); + eyes.setTextureOffset(46, 36).addBox(-4.5F, -4.5F, -0.75F, 9.0F, 7.0F, 0.0F, 0.0F, false); + bipedHead.addChild(this.eyes); + + this.field_241660_y_ = this.bipedBody.getModelAngleCopy(); + this.field_241661_z_ = this.bipedHead.getModelAngleCopy(); + this.field_241658_A_ = this.bipedLeftArm.getModelAngleCopy(); + this.field_241659_B_ = this.bipedLeftArm.getModelAngleCopy(); + + } + + /** + * Sets this entity's model rotation angles + */ + public void setRotationAngles(T entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { + this.bipedBody.copyModelAngles(this.field_241660_y_); + this.bipedHead.copyModelAngles(this.field_241661_z_); + this.bipedLeftArm.copyModelAngles(this.field_241658_A_); + this.bipedRightArm.copyModelAngles(this.field_241659_B_); + + this.nose1.rotateAngleX = 0.0631F; + this.nose1.rotateAngleY = -0.3435F; + this.nose1.rotateAngleZ = -0.1855F; + + this.nose2.rotateAngleX = 0.0631F; + this.nose2.rotateAngleY = 0.3435F; + this.nose2.rotateAngleZ = 0.1855F; + + this.eyes.rotateAngleX = 0.3054F; + + super.setRotationAngles(entityIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch); + float f = ((float)Math.PI / 6F); + float f1 = ageInTicks * 0.1F + limbSwing * 0.5F; + float f2 = 0.08F + limbSwingAmount * 0.4F; + this.field_239115_a_.rotateAngleZ = (-(float)Math.PI / 6F) - MathHelper.cos(f1 * 1.2F) * f2; + this.field_239116_b_.rotateAngleZ = ((float)Math.PI / 6F) + MathHelper.cos(f1) * f2; + if (entityIn instanceof PygroEntity) { + PygroEntity abstractpiglinentity = (PygroEntity)entityIn; + PiglinAction piglinaction = abstractpiglinentity.func_234424_eM_(); + if (piglinaction == PiglinAction.DANCING) { + float f3 = ageInTicks / 60.0F; + this.field_239116_b_.rotateAngleZ = ((float)Math.PI / 6F) + ((float)Math.PI / 180F) * MathHelper.sin(f3 * 30.0F) * 10.0F; + this.field_239115_a_.rotateAngleZ = (-(float)Math.PI / 6F) - ((float)Math.PI / 180F) * MathHelper.cos(f3 * 30.0F) * 10.0F; + this.bipedHead.rotationPointX = MathHelper.sin(f3 * 10.0F); + this.bipedHead.rotationPointY = MathHelper.sin(f3 * 40.0F) + 0.4F; + this.bipedRightArm.rotateAngleZ = ((float)Math.PI / 180F) * (70.0F + MathHelper.cos(f3 * 40.0F) * 10.0F); + this.bipedLeftArm.rotateAngleZ = this.bipedRightArm.rotateAngleZ * -1.0F; + this.bipedRightArm.rotationPointY = MathHelper.sin(f3 * 40.0F) * 0.5F + 1.5F; + this.bipedLeftArm.rotationPointY = MathHelper.sin(f3 * 40.0F) * 0.5F + 1.5F; + this.bipedBody.rotationPointY = MathHelper.sin(f3 * 40.0F) * 0.35F; + } else if (piglinaction == PiglinAction.ATTACKING_WITH_MELEE_WEAPON && this.swingProgress == 0.0F) { + this.func_239117_a_(entityIn); + } else if (piglinaction == PiglinAction.CROSSBOW_HOLD) { + ModelHelper.func_239104_a_(this.bipedRightArm, this.bipedLeftArm, this.bipedHead, !entityIn.isLeftHanded()); + } else if (piglinaction == PiglinAction.CROSSBOW_CHARGE) { + ModelHelper.func_239102_a_(this.bipedRightArm, this.bipedLeftArm, entityIn, !entityIn.isLeftHanded()); + } else if (piglinaction == PiglinAction.ADMIRING_ITEM) { + this.bipedHead.rotateAngleX = 0.5F; + this.bipedHead.rotateAngleY = 0.0F; + if (entityIn.isLeftHanded()) { + this.bipedRightArm.rotateAngleY = -0.5F; + this.bipedRightArm.rotateAngleX = -0.9F; + } else { + this.bipedLeftArm.rotateAngleY = 0.5F; + this.bipedLeftArm.rotateAngleX = -0.9F; + } + } + } else if (entityIn.getType() == EntityType.ZOMBIFIED_PIGLIN) { + ModelHelper.func_239105_a_(this.bipedLeftArm, this.bipedRightArm, entityIn.isAggressive(), this.swingProgress, ageInTicks); + } + + this.bipedLeftLegwear.copyModelAngles(this.bipedLeftLeg); + this.bipedRightLegwear.copyModelAngles(this.bipedRightLeg); + this.bipedLeftArmwear.copyModelAngles(this.bipedLeftArm); + this.bipedRightArmwear.copyModelAngles(this.bipedRightArm); + this.bipedBodyWear.copyModelAngles(this.bipedBody); + this.bipedHeadwear.copyModelAngles(this.bipedHead); + } + + protected void func_230486_a_(T p_230486_1_, float p_230486_2_) { + if (this.swingProgress > 0.0F && p_230486_1_ instanceof PygroEntity && ((PygroEntity)p_230486_1_).func_234424_eM_() == PiglinAction.ATTACKING_WITH_MELEE_WEAPON) { + ModelHelper.func_239103_a_(this.bipedRightArm, this.bipedLeftArm, p_230486_1_, this.swingProgress, p_230486_2_); + } else { + super.func_230486_a_(p_230486_1_, p_230486_2_); + } + } + + private void func_239117_a_(T p_239117_1_) { + if (p_239117_1_.isLeftHanded()) { + this.bipedLeftArm.rotateAngleX = -1.8F; + } else { + this.bipedRightArm.rotateAngleX = -1.8F; + } + + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/pygro/PygroRenderer.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/pygro/PygroRenderer.java new file mode 100644 index 000000000..a9ccdf425 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/pygro/PygroRenderer.java @@ -0,0 +1,40 @@ +package net.mrscauthd.boss_tools.entity.renderer.pygro; + +import net.minecraft.client.renderer.entity.BipedRenderer; +import net.minecraft.client.renderer.entity.EntityRendererManager; +import net.minecraft.client.renderer.entity.layers.BipedArmorLayer; +import net.minecraft.client.renderer.entity.model.BipedModel; +import net.minecraft.entity.MobEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.entity.pygro.PygroEntity; + +@OnlyIn(Dist.CLIENT) +public class PygroRenderer extends BipedRenderer> { + + public PygroRenderer(EntityRendererManager entityRendererManager) { + super(entityRendererManager, func_239395_a_(false), (float) 0.5, 1.0019531F, 1.0F, 1.0019531F); + this.addLayer(new BipedArmorLayer<>(this, new BipedModel(0.5F), new BipedModel(1.02F))); + } + + private static PygroModel func_239395_a_(boolean p_239395_0_) { + PygroModel piglinmodel = new PygroModel<>(0.0F, 64, 64); + if (p_239395_0_) { + piglinmodel.field_239116_b_.showModel = false; + } + return piglinmodel; + } + + /** + * Returns the location of an entity's texture. + */ + public ResourceLocation getEntityTexture(MobEntity entity) { + return new ResourceLocation(BossToolsMod.ModId, "textures/entities/pygro.png"); + } + + protected boolean func_230495_a_(MobEntity p_230495_1_) { + return p_230495_1_ instanceof PygroEntity && ((PygroEntity)p_230495_1_).func_242336_eL(); + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rockettier1/RocketTier1Model.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rockettier1/RocketTier1Model.java new file mode 100644 index 000000000..b93d1803d --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rockettier1/RocketTier1Model.java @@ -0,0 +1,208 @@ +package net.mrscauthd.boss_tools.entity.renderer.rockettier1; + +import net.mrscauthd.boss_tools.entity.RocketTier1Entity; + +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.client.renderer.model.ModelRenderer; +import net.minecraft.client.renderer.entity.model.EntityModel; + +import com.mojang.blaze3d.vertex.IVertexBuilder; +import com.mojang.blaze3d.matrix.MatrixStack; + +@OnlyIn(Dist.CLIENT) +public class RocketTier1Model extends EntityModel { + private final ModelRenderer rocket; + private final ModelRenderer cube_r1; + private final ModelRenderer cube_r2; + private final ModelRenderer cube_r3; + private final ModelRenderer cube_r4; + private final ModelRenderer cube_r5; + private final ModelRenderer cube_r6; + private final ModelRenderer cube_r7; + private final ModelRenderer cube_r8; + private final ModelRenderer cube_r9; + private final ModelRenderer cube_r10; + private final ModelRenderer cube_r11; + private final ModelRenderer cube_r12; + private final ModelRenderer cube_r13; + private final ModelRenderer cube_r14; + private final ModelRenderer cube_r15; + private final ModelRenderer cube_r16; + private final ModelRenderer cube_r17; + private final ModelRenderer cube_r18; + private final ModelRenderer cube_r19; + private final ModelRenderer cube_r20; + private final ModelRenderer cube_r21; + + public RocketTier1Model() { + textureWidth = 256; + textureHeight = 256; + + rocket = new ModelRenderer(this); + rocket.setRotationPoint(0.0F, 25.0F, 0.0F); + rocket.setTextureOffset(0, 167).addBox(-12.0F, -21.0F, -1.0F, 3.0F, 3.0F, 2.0F, 0.0F, false); + rocket.setTextureOffset(184, 0).addBox(-9.0F, -52.0F, -9.0F, 18.0F, 44.0F, 18.0F, 0.0F, false); + rocket.setTextureOffset(184, 62).addBox(-9.0F, -10.0F, -9.0F, 18.0F, 0.0F, 18.0F, 0.0F, false); + rocket.setTextureOffset(36, 23).addBox(-2.0F, -78.0F, -2.0F, 4.0F, 2.0F, 4.0F, 0.0F, false); + rocket.setTextureOffset(36, 0).addBox(-2.0F, -91.0F, -2.0F, 4.0F, 4.0F, 4.0F, -0.375F, false); + rocket.setTextureOffset(36, 8).addBox(-1.0F, -90.0F, -1.0F, 2.0F, 13.0F, 2.0F, 0.0F, false); + rocket.setTextureOffset(36, 29).addBox(-3.0F, -76.0F, -3.0F, 6.0F, 8.0F, 6.0F, 0.0F, false); + rocket.setTextureOffset(22, 128).addBox(-6.0F, -5.0F, -6.0F, 12.0F, 2.0F, 12.0F, 0.0F, false); + rocket.setTextureOffset(0, 85).addBox(-10.0F, -13.0F, -10.0F, 20.0F, 2.0F, 20.0F, 0.0F, false); + rocket.setTextureOffset(0, 85).addBox(-10.0F, -16.0F, -10.0F, 20.0F, 2.0F, 20.0F, 0.0F, false); + rocket.setTextureOffset(22, 116).addBox(-5.0F, -7.0F, -5.0F, 10.0F, 2.0F, 10.0F, 0.0F, false); + rocket.setTextureOffset(22, 107).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 1.0F, 8.0F, 0.0F, false); + rocket.setTextureOffset(230, 88).addBox(-6.0F, -43.0F, -9.5F, 12.0F, 12.0F, 1.0F, 0.0F, false); + rocket.setTextureOffset(238, 101).addBox(-4.0F, -41.0F, -9.5F, 8.0F, 8.0F, 1.0F, 0.0F, false); + rocket.setTextureOffset(0, 152).addBox(-13.0F, -18.0F, -3.0F, 4.0F, 9.0F, 6.0F, 0.0F, false); + + cube_r1 = new ModelRenderer(this); + cube_r1.setRotationPoint(0.0F, 0.0F, 0.0F); + rocket.addChild(cube_r1); + setRotationAngle(cube_r1, 0.0F, 3.1416F, 0.0F); + cube_r1.setTextureOffset(0, 167).addBox(-12.0F, -21.0F, -1.0F, 3.0F, 3.0F, 2.0F, 0.0F, false); + cube_r1.setTextureOffset(0, 152).addBox(-13.0F, -18.0F, -3.0F, 4.0F, 9.0F, 6.0F, 0.0F, false); + + cube_r2 = new ModelRenderer(this); + cube_r2.setRotationPoint(0.0F, -72.0F, 0.0F); + rocket.addChild(cube_r2); + setRotationAngle(cube_r2, -0.48F, 0.7854F, 0.0F); + cube_r2.setTextureOffset(0, 24).addBox(-1.0F, -3.5F, -2.5F, 2.0F, 27.0F, 2.0F, 0.0F, false); + + cube_r3 = new ModelRenderer(this); + cube_r3.setRotationPoint(0.0F, -72.0F, 0.0F); + rocket.addChild(cube_r3); + setRotationAngle(cube_r3, -0.48F, -2.3562F, 0.0F); + cube_r3.setTextureOffset(0, 24).addBox(-1.0F, -3.5F, -2.5F, 2.0F, 27.0F, 2.0F, 0.0F, false); + + cube_r4 = new ModelRenderer(this); + cube_r4.setRotationPoint(0.0F, -72.0F, 0.0F); + rocket.addChild(cube_r4); + setRotationAngle(cube_r4, -0.48F, 2.3562F, 0.0F); + cube_r4.setTextureOffset(0, 24).addBox(-1.0F, -3.5F, -2.5F, 2.0F, 27.0F, 2.0F, 0.0F, false); + + cube_r5 = new ModelRenderer(this); + cube_r5.setRotationPoint(0.0F, -72.0F, 0.0F); + rocket.addChild(cube_r5); + setRotationAngle(cube_r5, -0.48F, -0.7854F, 0.0F); + cube_r5.setTextureOffset(0, 24).addBox(-1.0F, -3.5F, -2.5F, 2.0F, 27.0F, 2.0F, 0.0F, false); + + cube_r6 = new ModelRenderer(this); + cube_r6.setRotationPoint(0.0F, -52.0F, 0.0F); + rocket.addChild(cube_r6); + setRotationAngle(cube_r6, 0.3491F, 1.5708F, 0.0F); + cube_r6.setTextureOffset(0, 0).addBox(-8.0F, -20.8F, 8.5175F, 16.0F, 24.0F, 0.0F, 0.0F, false); + + cube_r7 = new ModelRenderer(this); + cube_r7.setRotationPoint(0.0F, -52.0F, 0.0F); + rocket.addChild(cube_r7); + setRotationAngle(cube_r7, 0.3491F, 3.1416F, 0.0F); + cube_r7.setTextureOffset(0, 0).addBox(-8.0F, -20.8F, 8.5175F, 16.0F, 24.0F, 0.0F, 0.0F, false); + + cube_r8 = new ModelRenderer(this); + cube_r8.setRotationPoint(0.0F, -52.0F, 0.0F); + rocket.addChild(cube_r8); + setRotationAngle(cube_r8, 0.3491F, -1.5708F, 0.0F); + cube_r8.setTextureOffset(0, 0).addBox(-8.0F, -20.8F, 8.5175F, 16.0F, 24.0F, 0.0F, 0.0F, false); + + cube_r9 = new ModelRenderer(this); + cube_r9.setRotationPoint(0.0F, -52.0F, 0.0F); + rocket.addChild(cube_r9); + setRotationAngle(cube_r9, 0.3491F, 0.0F, 0.0F); + cube_r9.setTextureOffset(0, 0).addBox(-8.0F, -20.8F, 8.5175F, 16.0F, 24.0F, 0.0F, 0.0F, false); + + cube_r10 = new ModelRenderer(this); + cube_r10.setRotationPoint(-1.0F, 0.0F, 1.0F); + rocket.addChild(cube_r10); + setRotationAngle(cube_r10, 0.0F, -0.7854F, 0.0F); + cube_r10.setTextureOffset(0, 131).addBox(-2.0F, -17.0F, 20.0F, 4.0F, 17.0F, 4.0F, 0.0F, false); + + cube_r11 = new ModelRenderer(this); + cube_r11.setRotationPoint(-1.0F, 0.0F, 1.0F); + rocket.addChild(cube_r11); + setRotationAngle(cube_r11, 1.1345F, -0.7854F, 0.0F); + cube_r11.setTextureOffset(0, 107).addBox(-1.0F, 1.0F, 13.0F, 2.0F, 15.0F, 9.0F, 0.0F, false); + + cube_r12 = new ModelRenderer(this); + cube_r12.setRotationPoint(-1.0F, 0.0F, -1.0F); + rocket.addChild(cube_r12); + setRotationAngle(cube_r12, 0.0F, -2.3562F, 0.0F); + cube_r12.setTextureOffset(0, 131).addBox(-2.0F, -17.0F, 20.0F, 4.0F, 17.0F, 4.0F, 0.0F, false); + + cube_r13 = new ModelRenderer(this); + cube_r13.setRotationPoint(-1.0F, 0.0F, -1.0F); + rocket.addChild(cube_r13); + setRotationAngle(cube_r13, 1.1345F, -2.3562F, 0.0F); + cube_r13.setTextureOffset(0, 107).addBox(-1.0F, 1.0F, 13.0F, 2.0F, 15.0F, 9.0F, 0.0F, false); + + cube_r14 = new ModelRenderer(this); + cube_r14.setRotationPoint(1.0F, 0.0F, 1.0F); + rocket.addChild(cube_r14); + setRotationAngle(cube_r14, 0.0F, 0.7854F, 0.0F); + cube_r14.setTextureOffset(0, 131).addBox(-2.0F, -17.0F, 20.0F, 4.0F, 17.0F, 4.0F, 0.0F, false); + + cube_r15 = new ModelRenderer(this); + cube_r15.setRotationPoint(1.0F, 0.0F, 1.0F); + rocket.addChild(cube_r15); + setRotationAngle(cube_r15, 1.1345F, 0.7854F, 0.0F); + cube_r15.setTextureOffset(0, 107).addBox(-1.0F, 1.0F, 13.0F, 2.0F, 15.0F, 9.0F, 0.0F, false); + + cube_r16 = new ModelRenderer(this); + cube_r16.setRotationPoint(0.0F, 0.0F, 0.0F); + rocket.addChild(cube_r16); + setRotationAngle(cube_r16, 0.0F, 2.3562F, 0.0F); + cube_r16.setTextureOffset(20, 142).addBox(-3.0F, -18.0F, 20.4142F, 6.0F, 5.0F, 6.0F, -0.3F, false); + + cube_r17 = new ModelRenderer(this); + cube_r17.setRotationPoint(0.0F, 0.0F, 0.0F); + rocket.addChild(cube_r17); + setRotationAngle(cube_r17, 0.0F, 0.7854F, 0.0F); + cube_r17.setTextureOffset(20, 142).addBox(-3.0F, -18.0F, 20.4142F, 6.0F, 5.0F, 6.0F, -0.3F, false); + + cube_r18 = new ModelRenderer(this); + cube_r18.setRotationPoint(0.0F, 0.0F, 0.0F); + rocket.addChild(cube_r18); + setRotationAngle(cube_r18, 0.0F, -2.3562F, 0.0F); + cube_r18.setTextureOffset(20, 142).addBox(-3.0F, -18.0F, 20.4142F, 6.0F, 5.0F, 6.0F, -0.3F, false); + + cube_r19 = new ModelRenderer(this); + cube_r19.setRotationPoint(0.0F, 0.0F, 0.0F); + rocket.addChild(cube_r19); + setRotationAngle(cube_r19, 0.0F, -0.7854F, 0.0F); + cube_r19.setTextureOffset(20, 142).addBox(-3.0F, -18.0F, 20.4142F, 6.0F, 5.0F, 6.0F, -0.3F, false); + + cube_r20 = new ModelRenderer(this); + cube_r20.setRotationPoint(1.0F, 0.0F, -1.0F); + rocket.addChild(cube_r20); + setRotationAngle(cube_r20, 0.0F, 2.3562F, 0.0F); + cube_r20.setTextureOffset(0, 131).addBox(-2.0F, -17.0F, 20.0F, 4.0F, 17.0F, 4.0F, 0.0F, false); + + cube_r21 = new ModelRenderer(this); + cube_r21.setRotationPoint(1.0F, 0.0F, -1.0F); + rocket.addChild(cube_r21); + setRotationAngle(cube_r21, 1.1345F, 2.3562F, 0.0F); + cube_r21.setTextureOffset(0, 107).addBox(-1.0F, 1.0F, 13.0F, 2.0F, 15.0F, 9.0F, 0.0F, false); + } + + @Override + public void setRotationAngles(T e, float f, float f1, float f2, float f3, float f4) { + this.rocket.rotateAngleY = f3 / (180F / (float) Math.PI); + + this.rocket.rotateAngleZ = (float) e.ay; + + this.rocket.rotateAngleX = (float) e.ap; + } + + @Override + public void render(MatrixStack matrixStack, IVertexBuilder buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + rocket.render(matrixStack, buffer, packedLight, packedOverlay); + } + + public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rockettier1/RocketTier1Renderer.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rockettier1/RocketTier1Renderer.java new file mode 100644 index 000000000..3744b9d01 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rockettier1/RocketTier1Renderer.java @@ -0,0 +1,21 @@ +package net.mrscauthd.boss_tools.entity.renderer.rockettier1; + +import net.minecraft.client.renderer.entity.EntityRendererManager; +import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.entity.RocketTier1Entity; + +@OnlyIn(Dist.CLIENT) +public class RocketTier1Renderer extends MobRenderer> { + public RocketTier1Renderer(EntityRendererManager entityRendererManager) { + super(entityRendererManager, new RocketTier1Model(), 0.5f); + } + + @Override + public ResourceLocation getEntityTexture(RocketTier1Entity entity) { + return new ResourceLocation(BossToolsMod.ModId, "textures/vehicles/rocket_t1.png"); + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rockettier2/RocketTier2Model.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rockettier2/RocketTier2Model.java new file mode 100644 index 000000000..39a599b4f --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rockettier2/RocketTier2Model.java @@ -0,0 +1,225 @@ +package net.mrscauthd.boss_tools.entity.renderer.rockettier2; + +import net.mrscauthd.boss_tools.entity.RocketTier2Entity; + +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.client.renderer.model.ModelRenderer; +import net.minecraft.client.renderer.entity.model.EntityModel; + +import com.mojang.blaze3d.vertex.IVertexBuilder; +import com.mojang.blaze3d.matrix.MatrixStack; + +@OnlyIn(Dist.CLIENT) +public class RocketTier2Model extends EntityModel { + private final ModelRenderer rocket; + private final ModelRenderer cube_r1; + private final ModelRenderer cube_r2; + private final ModelRenderer cube_r3; + private final ModelRenderer cube_r4; + private final ModelRenderer cube_r5; + private final ModelRenderer cube_r6; + private final ModelRenderer cube_r7; + private final ModelRenderer cube_r8; + private final ModelRenderer cube_r9; + private final ModelRenderer cube_r10; + private final ModelRenderer cube_r11; + private final ModelRenderer cube_r12; + private final ModelRenderer cube_r13; + private final ModelRenderer cube_r14; + private final ModelRenderer cube_r15; + private final ModelRenderer cube_r16; + private final ModelRenderer cube_r17; + private final ModelRenderer cube_r18; + private final ModelRenderer cube_r19; + private final ModelRenderer cube_r20; + private final ModelRenderer cube_r21; + private final ModelRenderer cube_r22; + private final ModelRenderer cube_r23; + + public RocketTier2Model() { + textureWidth = 256; + textureHeight = 256; + + rocket = new ModelRenderer(this); + rocket.setRotationPoint(0.0F, 25.0F, 0.0F); + rocket.setTextureOffset(0, 167).addBox(-12.0F, -21.0F, -1.0F, 3.0F, 3.0F, 2.0F, 0.0F, false); + rocket.setTextureOffset(184, 0).addBox(-9.0F, -55.0F, -9.0F, 18.0F, 47.0F, 18.0F, 0.0F, false); + rocket.setTextureOffset(184, 65).addBox(-9.0F, -10.0F, -9.0F, 18.0F, 0.0F, 18.0F, 0.0F, false); + rocket.setTextureOffset(36, 23).addBox(-2.0F, -81.0F, -2.0F, 4.0F, 2.0F, 4.0F, 0.0F, false); + rocket.setTextureOffset(36, 0).addBox(-2.0F, -94.0F, -2.0F, 4.0F, 4.0F, 4.0F, -0.375F, false); + rocket.setTextureOffset(36, 8).addBox(-1.0F, -93.0F, -1.0F, 2.0F, 13.0F, 2.0F, 0.0F, false); + rocket.setTextureOffset(36, 29).addBox(-3.0F, -79.0F, -3.0F, 6.0F, 8.0F, 6.0F, 0.0F, false); + rocket.setTextureOffset(22, 128).addBox(-6.0F, -5.0F, -6.0F, 12.0F, 2.0F, 12.0F, 0.0F, false); + rocket.setTextureOffset(0, 85).addBox(-10.0F, -13.0F, -10.0F, 20.0F, 2.0F, 20.0F, 0.0F, false); + rocket.setTextureOffset(0, 85).addBox(-10.0F, -16.0F, -10.0F, 20.0F, 2.0F, 20.0F, 0.0F, false); + rocket.setTextureOffset(0, 85).addBox(-10.0F, -56.0F, -10.0F, 20.0F, 2.0F, 20.0F, 0.0F, false); + rocket.setTextureOffset(22, 116).addBox(-5.0F, -7.0F, -5.0F, 10.0F, 2.0F, 10.0F, 0.0F, false); + rocket.setTextureOffset(22, 107).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 1.0F, 8.0F, 0.0F, false); + rocket.setTextureOffset(230, 88).addBox(-6.0F, -43.0F, -9.5F, 12.0F, 12.0F, 1.0F, 0.0F, false); + rocket.setTextureOffset(238, 101).addBox(-4.0F, -41.0F, -9.5F, 8.0F, 8.0F, 1.0F, 0.0F, false); + rocket.setTextureOffset(0, 152).addBox(-13.0F, -18.0F, -3.0F, 4.0F, 9.0F, 6.0F, 0.0F, false); + + cube_r1 = new ModelRenderer(this); + cube_r1.setRotationPoint(0.0F, 0.0F, 0.0F); + rocket.addChild(cube_r1); + setRotationAngle(cube_r1, 0.0F, -1.5708F, 0.0F); + cube_r1.setTextureOffset(0, 167).addBox(-12.0F, -21.0F, -1.0F, 3.0F, 3.0F, 2.0F, 0.0F, false); + cube_r1.setTextureOffset(0, 152).addBox(-13.0F, -18.0F, -3.0F, 4.0F, 9.0F, 6.0F, 0.0F, false); + + cube_r2 = new ModelRenderer(this); + cube_r2.setRotationPoint(0.0F, 0.0F, 0.0F); + rocket.addChild(cube_r2); + setRotationAngle(cube_r2, 0.0F, 1.5708F, 0.0F); + cube_r2.setTextureOffset(0, 167).addBox(-12.0F, -21.0F, -1.0F, 3.0F, 3.0F, 2.0F, 0.0F, false); + cube_r2.setTextureOffset(0, 152).addBox(-13.0F, -18.0F, -3.0F, 4.0F, 9.0F, 6.0F, 0.0F, false); + + cube_r3 = new ModelRenderer(this); + cube_r3.setRotationPoint(0.0F, 0.0F, 0.0F); + rocket.addChild(cube_r3); + setRotationAngle(cube_r3, 0.0F, 3.1416F, 0.0F); + cube_r3.setTextureOffset(0, 167).addBox(-12.0F, -21.0F, -1.0F, 3.0F, 3.0F, 2.0F, 0.0F, false); + cube_r3.setTextureOffset(0, 152).addBox(-13.0F, -18.0F, -3.0F, 4.0F, 9.0F, 6.0F, 0.0F, false); + + cube_r4 = new ModelRenderer(this); + cube_r4.setRotationPoint(0.0F, -75.0F, 0.0F); + rocket.addChild(cube_r4); + setRotationAngle(cube_r4, -0.48F, 0.7854F, 0.0F); + cube_r4.setTextureOffset(0, 24).addBox(-1.0F, -3.5F, -2.5F, 2.0F, 27.0F, 2.0F, 0.0F, false); + + cube_r5 = new ModelRenderer(this); + cube_r5.setRotationPoint(0.0F, -75.0F, 0.0F); + rocket.addChild(cube_r5); + setRotationAngle(cube_r5, -0.48F, -2.3562F, 0.0F); + cube_r5.setTextureOffset(0, 24).addBox(-1.0F, -3.5F, -2.5F, 2.0F, 27.0F, 2.0F, 0.0F, false); + + cube_r6 = new ModelRenderer(this); + cube_r6.setRotationPoint(0.0F, -75.0F, 0.0F); + rocket.addChild(cube_r6); + setRotationAngle(cube_r6, -0.48F, 2.3562F, 0.0F); + cube_r6.setTextureOffset(0, 24).addBox(-1.0F, -3.5F, -2.5F, 2.0F, 27.0F, 2.0F, 0.0F, false); + + cube_r7 = new ModelRenderer(this); + cube_r7.setRotationPoint(0.0F, -75.0F, 0.0F); + rocket.addChild(cube_r7); + setRotationAngle(cube_r7, -0.48F, -0.7854F, 0.0F); + cube_r7.setTextureOffset(0, 24).addBox(-1.0F, -3.5F, -2.5F, 2.0F, 27.0F, 2.0F, 0.0F, false); + + cube_r8 = new ModelRenderer(this); + cube_r8.setRotationPoint(0.0F, -55.0F, 0.0F); + rocket.addChild(cube_r8); + setRotationAngle(cube_r8, 0.3491F, 1.5708F, 0.0F); + cube_r8.setTextureOffset(0, 0).addBox(-8.0F, -20.8F, 8.5175F, 16.0F, 24.0F, 0.0F, 0.0F, false); + + cube_r9 = new ModelRenderer(this); + cube_r9.setRotationPoint(0.0F, -55.0F, 0.0F); + rocket.addChild(cube_r9); + setRotationAngle(cube_r9, 0.3491F, 3.1416F, 0.0F); + cube_r9.setTextureOffset(0, 0).addBox(-8.0F, -20.8F, 8.5175F, 16.0F, 24.0F, 0.0F, 0.0F, false); + + cube_r10 = new ModelRenderer(this); + cube_r10.setRotationPoint(0.0F, -55.0F, 0.0F); + rocket.addChild(cube_r10); + setRotationAngle(cube_r10, 0.3491F, -1.5708F, 0.0F); + cube_r10.setTextureOffset(0, 0).addBox(-8.0F, -20.8F, 8.5175F, 16.0F, 24.0F, 0.0F, 0.0F, false); + + cube_r11 = new ModelRenderer(this); + cube_r11.setRotationPoint(0.0F, -55.0F, 0.0F); + rocket.addChild(cube_r11); + setRotationAngle(cube_r11, 0.3491F, 0.0F, 0.0F); + cube_r11.setTextureOffset(0, 0).addBox(-8.0F, -20.8F, 8.5175F, 16.0F, 24.0F, 0.0F, 0.0F, false); + + cube_r12 = new ModelRenderer(this); + cube_r12.setRotationPoint(-1.0F, 0.0F, 1.0F); + rocket.addChild(cube_r12); + setRotationAngle(cube_r12, 0.0F, -0.7854F, 0.0F); + cube_r12.setTextureOffset(0, 131).addBox(-2.0F, -17.0F, 20.0F, 4.0F, 17.0F, 4.0F, 0.0F, false); + + cube_r13 = new ModelRenderer(this); + cube_r13.setRotationPoint(-1.0F, 0.0F, 1.0F); + rocket.addChild(cube_r13); + setRotationAngle(cube_r13, 1.1345F, -0.7854F, 0.0F); + cube_r13.setTextureOffset(0, 107).addBox(-1.0F, 1.0F, 13.0F, 2.0F, 15.0F, 9.0F, 0.0F, false); + + cube_r14 = new ModelRenderer(this); + cube_r14.setRotationPoint(-1.0F, 0.0F, -1.0F); + rocket.addChild(cube_r14); + setRotationAngle(cube_r14, 0.0F, -2.3562F, 0.0F); + cube_r14.setTextureOffset(0, 131).addBox(-2.0F, -17.0F, 20.0F, 4.0F, 17.0F, 4.0F, 0.0F, false); + + cube_r15 = new ModelRenderer(this); + cube_r15.setRotationPoint(-1.0F, 0.0F, -1.0F); + rocket.addChild(cube_r15); + setRotationAngle(cube_r15, 1.1345F, -2.3562F, 0.0F); + cube_r15.setTextureOffset(0, 107).addBox(-1.0F, 1.0F, 13.0F, 2.0F, 15.0F, 9.0F, 0.0F, false); + + cube_r16 = new ModelRenderer(this); + cube_r16.setRotationPoint(1.0F, 0.0F, 1.0F); + rocket.addChild(cube_r16); + setRotationAngle(cube_r16, 0.0F, 0.7854F, 0.0F); + cube_r16.setTextureOffset(0, 131).addBox(-2.0F, -17.0F, 20.0F, 4.0F, 17.0F, 4.0F, 0.0F, false); + + cube_r17 = new ModelRenderer(this); + cube_r17.setRotationPoint(1.0F, 0.0F, 1.0F); + rocket.addChild(cube_r17); + setRotationAngle(cube_r17, 1.1345F, 0.7854F, 0.0F); + cube_r17.setTextureOffset(0, 107).addBox(-1.0F, 1.0F, 13.0F, 2.0F, 15.0F, 9.0F, 0.0F, false); + + cube_r18 = new ModelRenderer(this); + cube_r18.setRotationPoint(0.0F, 0.0F, 0.0F); + rocket.addChild(cube_r18); + setRotationAngle(cube_r18, 0.0F, 2.3562F, 0.0F); + cube_r18.setTextureOffset(20, 142).addBox(-3.0F, -18.0F, 20.4142F, 6.0F, 5.0F, 6.0F, -0.3F, false); + + cube_r19 = new ModelRenderer(this); + cube_r19.setRotationPoint(0.0F, 0.0F, 0.0F); + rocket.addChild(cube_r19); + setRotationAngle(cube_r19, 0.0F, 0.7854F, 0.0F); + cube_r19.setTextureOffset(20, 142).addBox(-3.0F, -18.0F, 20.4142F, 6.0F, 5.0F, 6.0F, -0.3F, false); + + cube_r20 = new ModelRenderer(this); + cube_r20.setRotationPoint(0.0F, 0.0F, 0.0F); + rocket.addChild(cube_r20); + setRotationAngle(cube_r20, 0.0F, -2.3562F, 0.0F); + cube_r20.setTextureOffset(20, 142).addBox(-3.0F, -18.0F, 20.4142F, 6.0F, 5.0F, 6.0F, -0.3F, false); + + cube_r21 = new ModelRenderer(this); + cube_r21.setRotationPoint(0.0F, 0.0F, 0.0F); + rocket.addChild(cube_r21); + setRotationAngle(cube_r21, 0.0F, -0.7854F, 0.0F); + cube_r21.setTextureOffset(20, 142).addBox(-3.0F, -18.0F, 20.4142F, 6.0F, 5.0F, 6.0F, -0.3F, false); + + cube_r22 = new ModelRenderer(this); + cube_r22.setRotationPoint(1.0F, 0.0F, -1.0F); + rocket.addChild(cube_r22); + setRotationAngle(cube_r22, 0.0F, 2.3562F, 0.0F); + cube_r22.setTextureOffset(0, 131).addBox(-2.0F, -17.0F, 20.0F, 4.0F, 17.0F, 4.0F, 0.0F, false); + + cube_r23 = new ModelRenderer(this); + cube_r23.setRotationPoint(1.0F, 0.0F, -1.0F); + rocket.addChild(cube_r23); + setRotationAngle(cube_r23, 1.1345F, 2.3562F, 0.0F); + cube_r23.setTextureOffset(0, 107).addBox(-1.0F, 1.0F, 13.0F, 2.0F, 15.0F, 9.0F, 0.0F, false); + } + + @Override + public void setRotationAngles(T entityIn, float f, float f1, float f2, float f3, float f4) { + this.rocket.rotateAngleY = f3 / (180F / (float) Math.PI); + + this.rocket.rotateAngleZ = (float) entityIn.ay; + + this.rocket.rotateAngleX = (float) entityIn.ap; + } + + @Override + public void render(MatrixStack matrixStack, IVertexBuilder buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + rocket.render(matrixStack, buffer, packedLight, packedOverlay); + } + + public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rockettier2/RocketTier2Renderer.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rockettier2/RocketTier2Renderer.java new file mode 100644 index 000000000..04b69801d --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rockettier2/RocketTier2Renderer.java @@ -0,0 +1,21 @@ +package net.mrscauthd.boss_tools.entity.renderer.rockettier2; + +import net.minecraft.client.renderer.entity.EntityRendererManager; +import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.entity.RocketTier2Entity; + +@OnlyIn(Dist.CLIENT) +public class RocketTier2Renderer extends MobRenderer> { + public RocketTier2Renderer(EntityRendererManager entityRendererManager) { + super(entityRendererManager, new RocketTier2Model(), 0.5f); + } + + @Override + public ResourceLocation getEntityTexture(RocketTier2Entity entity) { + return new ResourceLocation(BossToolsMod.ModId, "textures/vehicles/rocket_t2.png"); + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rockettier3/RocketTier3Model.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rockettier3/RocketTier3Model.java new file mode 100644 index 000000000..a3719b77f --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rockettier3/RocketTier3Model.java @@ -0,0 +1,243 @@ +package net.mrscauthd.boss_tools.entity.renderer.rockettier3; + +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.client.renderer.model.ModelRenderer; +import net.minecraft.client.renderer.entity.model.EntityModel; + +import com.mojang.blaze3d.vertex.IVertexBuilder; +import com.mojang.blaze3d.matrix.MatrixStack; +import net.mrscauthd.boss_tools.entity.RocketTier3Entity; + +@OnlyIn(Dist.CLIENT) +public class RocketTier3Model extends EntityModel { + private final ModelRenderer rocket; + private final ModelRenderer cube_r1; + private final ModelRenderer cube_r2; + private final ModelRenderer cube_r3; + private final ModelRenderer cube_r4; + private final ModelRenderer cube_r5; + private final ModelRenderer cube_r6; + private final ModelRenderer cube_r7; + private final ModelRenderer cube_r8; + private final ModelRenderer cube_r9; + private final ModelRenderer cube_r10; + private final ModelRenderer cube_r11; + private final ModelRenderer cube_r12; + private final ModelRenderer cube_r13; + private final ModelRenderer cube_r14; + private final ModelRenderer cube_r15; + private final ModelRenderer cube_r16; + private final ModelRenderer cube_r17; + private final ModelRenderer cube_r18; + private final ModelRenderer cube_r19; + private final ModelRenderer cube_r20; + private final ModelRenderer cube_r21; + private final ModelRenderer cube_r22; + private final ModelRenderer cube_r23; + + public RocketTier3Model() { + textureWidth = 256; + textureHeight = 256; + + rocket = new ModelRenderer(this); + rocket.setRotationPoint(0.0F, 25.0F, 0.0F); + rocket.setTextureOffset(184, 0).addBox(-9.0F, -58.0F, -9.0F, 18.0F, 50.0F, 18.0F, 0.0F, false); + rocket.setTextureOffset(184, 68).addBox(-9.0F, -10.0F, -9.0F, 18.0F, 0.0F, 18.0F, 0.0F, false); + rocket.setTextureOffset(36, 25).addBox(-2.0F, -84.0F, -2.0F, 4.0F, 2.0F, 4.0F, 0.0F, false); + rocket.setTextureOffset(36, 25).addBox(-2.0F, -90.0F, -2.0F, 4.0F, 2.0F, 4.0F, 0.0F, false); + rocket.setTextureOffset(36, 25).addBox(-2.0F, -87.0F, -2.0F, 4.0F, 2.0F, 4.0F, 0.0F, false); + rocket.setTextureOffset(36, 0).addBox(-2.0F, -101.0F, -2.0F, 4.0F, 4.0F, 4.0F, -0.375F, false); + rocket.setTextureOffset(36, 8).addBox(-1.0F, -98.0F, -1.0F, 2.0F, 15.0F, 2.0F, 0.0F, false); + rocket.setTextureOffset(36, 31).addBox(-3.0F, -82.0F, -3.0F, 6.0F, 8.0F, 6.0F, 0.0F, false); + rocket.setTextureOffset(22, 128).addBox(-6.0F, -5.0F, -6.0F, 12.0F, 2.0F, 12.0F, 0.0F, false); + rocket.setTextureOffset(0, 85).addBox(-10.0F, -13.0F, -10.0F, 20.0F, 2.0F, 20.0F, 0.0F, false); + rocket.setTextureOffset(0, 85).addBox(-10.0F, -16.0F, -10.0F, 20.0F, 2.0F, 20.0F, 0.0F, false); + rocket.setTextureOffset(0, 85).addBox(-10.0F, -59.0F, -10.0F, 20.0F, 2.0F, 20.0F, 0.0F, false); + rocket.setTextureOffset(0, 85).addBox(-10.0F, -55.0F, -10.0F, 20.0F, 2.0F, 20.0F, 0.0F, false); + rocket.setTextureOffset(0, 85).addBox(-10.0F, -44.0F, -10.0F, 20.0F, 2.0F, 20.0F, 0.0F, false); + rocket.setTextureOffset(0, 85).addBox(-10.0F, -32.0F, -10.0F, 20.0F, 2.0F, 20.0F, 0.0F, false); + rocket.setTextureOffset(22, 116).addBox(-5.0F, -7.0F, -5.0F, 10.0F, 2.0F, 10.0F, 0.0F, false); + rocket.setTextureOffset(22, 107).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 1.0F, 8.0F, 0.0F, false); + rocket.setTextureOffset(230, 88).addBox(-6.0F, -43.0F, -9.5F, 12.0F, 12.0F, 1.0F, 0.0F, false); + rocket.setTextureOffset(238, 101).addBox(-4.0F, -41.0F, -9.5F, 8.0F, 8.0F, 1.0F, 0.0F, false); + rocket.setTextureOffset(0, 169).addBox(-12.0F, -21.0F, -1.0F, 3.0F, 3.0F, 2.0F, 0.0F, false); + rocket.setTextureOffset(0, 152).addBox(-13.0F, -18.0F, -3.0F, 4.0F, 11.0F, 6.0F, 0.0F, false); + + cube_r1 = new ModelRenderer(this); + cube_r1.setRotationPoint(0.0F, 0.0F, 0.0F); + rocket.addChild(cube_r1); + setRotationAngle(cube_r1, 0.0F, 1.5708F, 0.0F); + cube_r1.setTextureOffset(0, 169).addBox(-12.0F, -21.0F, -1.0F, 3.0F, 3.0F, 2.0F, 0.0F, false); + cube_r1.setTextureOffset(0, 152).addBox(-13.0F, -18.0F, -3.0F, 4.0F, 11.0F, 6.0F, 0.0F, false); + cube_r1.setTextureOffset(224, 88).addBox(4.0F, -43.0F, -9.5F, 2.0F, 12.0F, 1.0F, 0.0F, false); + cube_r1.setTextureOffset(224, 88).addBox(-6.0F, -43.0F, -9.5F, 2.0F, 12.0F, 1.0F, 0.0F, false); + + cube_r2 = new ModelRenderer(this); + cube_r2.setRotationPoint(0.0F, 0.0F, 0.0F); + rocket.addChild(cube_r2); + setRotationAngle(cube_r2, 0.0F, 3.1416F, 0.0F); + cube_r2.setTextureOffset(0, 152).addBox(-13.0F, -18.0F, -3.0F, 4.0F, 11.0F, 6.0F, 0.0F, false); + cube_r2.setTextureOffset(0, 169).addBox(-12.0F, -21.0F, -1.0F, 3.0F, 3.0F, 2.0F, 0.0F, false); + cube_r2.setTextureOffset(224, 88).addBox(4.0F, -43.0F, -9.5F, 2.0F, 12.0F, 1.0F, 0.0F, false); + cube_r2.setTextureOffset(224, 88).addBox(-6.0F, -43.0F, -9.5F, 2.0F, 12.0F, 1.0F, 0.0F, false); + + cube_r3 = new ModelRenderer(this); + cube_r3.setRotationPoint(0.0F, 0.0F, 0.0F); + rocket.addChild(cube_r3); + setRotationAngle(cube_r3, 0.0F, -1.5708F, 0.0F); + cube_r3.setTextureOffset(0, 169).addBox(-12.0F, -21.0F, -1.0F, 3.0F, 3.0F, 2.0F, 0.0F, false); + cube_r3.setTextureOffset(0, 152).addBox(-13.0F, -18.0F, -3.0F, 4.0F, 11.0F, 6.0F, 0.0F, false); + cube_r3.setTextureOffset(224, 88).addBox(-6.0F, -43.0F, -9.5F, 2.0F, 12.0F, 1.0F, 0.0F, false); + cube_r3.setTextureOffset(224, 88).addBox(4.0F, -43.0F, -9.5F, 2.0F, 12.0F, 1.0F, 0.0F, false); + + cube_r4 = new ModelRenderer(this); + cube_r4.setRotationPoint(0.0F, -78.0F, 0.0F); + rocket.addChild(cube_r4); + setRotationAngle(cube_r4, -0.48F, 0.7854F, 0.0F); + cube_r4.setTextureOffset(0, 24).addBox(-1.0F, -3.5F, -2.5F, 2.0F, 27.0F, 2.0F, 0.0F, false); + + cube_r5 = new ModelRenderer(this); + cube_r5.setRotationPoint(0.0F, -78.0F, 0.0F); + rocket.addChild(cube_r5); + setRotationAngle(cube_r5, -0.48F, -2.3562F, 0.0F); + cube_r5.setTextureOffset(0, 24).addBox(-1.0F, -3.5F, -2.5F, 2.0F, 27.0F, 2.0F, 0.0F, false); + + cube_r6 = new ModelRenderer(this); + cube_r6.setRotationPoint(0.0F, -78.0F, 0.0F); + rocket.addChild(cube_r6); + setRotationAngle(cube_r6, -0.48F, 2.3562F, 0.0F); + cube_r6.setTextureOffset(0, 24).addBox(-1.0F, -3.5F, -2.5F, 2.0F, 27.0F, 2.0F, 0.0F, false); + + cube_r7 = new ModelRenderer(this); + cube_r7.setRotationPoint(0.0F, -78.0F, 0.0F); + rocket.addChild(cube_r7); + setRotationAngle(cube_r7, -0.48F, -0.7854F, 0.0F); + cube_r7.setTextureOffset(0, 24).addBox(-1.0F, -3.5F, -2.5F, 2.0F, 27.0F, 2.0F, 0.0F, false); + + cube_r8 = new ModelRenderer(this); + cube_r8.setRotationPoint(0.0F, -58.0F, 0.0F); + rocket.addChild(cube_r8); + setRotationAngle(cube_r8, 0.3491F, 1.5708F, 0.0F); + cube_r8.setTextureOffset(0, 0).addBox(-8.0F, -20.8F, 8.5175F, 16.0F, 24.0F, 0.0F, 0.0F, false); + + cube_r9 = new ModelRenderer(this); + cube_r9.setRotationPoint(0.0F, -58.0F, 0.0F); + rocket.addChild(cube_r9); + setRotationAngle(cube_r9, 0.3491F, 3.1416F, 0.0F); + cube_r9.setTextureOffset(0, 0).addBox(-8.0F, -20.8F, 8.5175F, 16.0F, 24.0F, 0.0F, 0.0F, false); + + cube_r10 = new ModelRenderer(this); + cube_r10.setRotationPoint(0.0F, -58.0F, 0.0F); + rocket.addChild(cube_r10); + setRotationAngle(cube_r10, 0.3491F, -1.5708F, 0.0F); + cube_r10.setTextureOffset(0, 0).addBox(-8.0F, -20.8F, 8.5175F, 16.0F, 24.0F, 0.0F, 0.0F, false); + + cube_r11 = new ModelRenderer(this); + cube_r11.setRotationPoint(0.0F, -58.0F, 0.0F); + rocket.addChild(cube_r11); + setRotationAngle(cube_r11, 0.3491F, 0.0F, 0.0F); + cube_r11.setTextureOffset(0, 0).addBox(-8.0F, -20.8F, 8.5175F, 16.0F, 24.0F, 0.0F, 0.0F, false); + + cube_r12 = new ModelRenderer(this); + cube_r12.setRotationPoint(-1.0F, 0.0F, 1.0F); + rocket.addChild(cube_r12); + setRotationAngle(cube_r12, 0.0F, -0.7854F, 0.0F); + cube_r12.setTextureOffset(0, 131).addBox(-2.0F, -17.0F, 20.0F, 4.0F, 17.0F, 4.0F, 0.0F, false); + + cube_r13 = new ModelRenderer(this); + cube_r13.setRotationPoint(-1.0F, 0.0F, 1.0F); + rocket.addChild(cube_r13); + setRotationAngle(cube_r13, 1.1345F, -0.7854F, 0.0F); + cube_r13.setTextureOffset(0, 107).addBox(-1.0F, 1.0F, 13.0F, 2.0F, 15.0F, 9.0F, 0.0F, false); + + cube_r14 = new ModelRenderer(this); + cube_r14.setRotationPoint(-1.0F, 0.0F, -1.0F); + rocket.addChild(cube_r14); + setRotationAngle(cube_r14, 0.0F, -2.3562F, 0.0F); + cube_r14.setTextureOffset(0, 131).addBox(-2.0F, -17.0F, 20.0F, 4.0F, 17.0F, 4.0F, 0.0F, false); + + cube_r15 = new ModelRenderer(this); + cube_r15.setRotationPoint(-1.0F, 0.0F, -1.0F); + rocket.addChild(cube_r15); + setRotationAngle(cube_r15, 1.1345F, -2.3562F, 0.0F); + cube_r15.setTextureOffset(0, 107).addBox(-1.0F, 1.0F, 13.0F, 2.0F, 15.0F, 9.0F, 0.0F, false); + + cube_r16 = new ModelRenderer(this); + cube_r16.setRotationPoint(1.0F, 0.0F, 1.0F); + rocket.addChild(cube_r16); + setRotationAngle(cube_r16, 0.0F, 0.7854F, 0.0F); + cube_r16.setTextureOffset(0, 131).addBox(-2.0F, -17.0F, 20.0F, 4.0F, 17.0F, 4.0F, 0.0F, false); + + cube_r17 = new ModelRenderer(this); + cube_r17.setRotationPoint(1.0F, 0.0F, 1.0F); + rocket.addChild(cube_r17); + setRotationAngle(cube_r17, 1.1345F, 0.7854F, 0.0F); + cube_r17.setTextureOffset(0, 107).addBox(-1.0F, 1.0F, 13.0F, 2.0F, 15.0F, 9.0F, 0.0F, false); + + cube_r18 = new ModelRenderer(this); + cube_r18.setRotationPoint(0.0F, 0.0F, 0.0F); + rocket.addChild(cube_r18); + setRotationAngle(cube_r18, 0.0F, 2.3562F, 0.0F); + cube_r18.setTextureOffset(20, 142).addBox(-3.0F, -18.0F, 20.4142F, 6.0F, 5.0F, 6.0F, -0.3F, false); + cube_r18.setTextureOffset(36, 8).addBox(-1.0F, -13.0F, 18.4142F, 2.0F, 13.0F, 2.0F, -0.2F, false); + cube_r18.setTextureOffset(36, 8).addBox(-1.0F, -13.0F, 15.4142F, 2.0F, 13.0F, 2.0F, -0.2F, false); + + cube_r19 = new ModelRenderer(this); + cube_r19.setRotationPoint(0.0F, 0.0F, 0.0F); + rocket.addChild(cube_r19); + setRotationAngle(cube_r19, 0.0F, 0.7854F, 0.0F); + cube_r19.setTextureOffset(20, 142).addBox(-3.0F, -18.0F, 20.4142F, 6.0F, 5.0F, 6.0F, -0.3F, false); + cube_r19.setTextureOffset(36, 8).addBox(-1.0F, -13.0F, 15.4142F, 2.0F, 13.0F, 2.0F, -0.2F, false); + cube_r19.setTextureOffset(36, 8).addBox(-1.0F, -13.0F, 18.4142F, 2.0F, 13.0F, 2.0F, -0.2F, false); + + cube_r20 = new ModelRenderer(this); + cube_r20.setRotationPoint(0.0F, 0.0F, 0.0F); + rocket.addChild(cube_r20); + setRotationAngle(cube_r20, 0.0F, -2.3562F, 0.0F); + cube_r20.setTextureOffset(20, 142).addBox(-3.0F, -18.0F, 20.4142F, 6.0F, 5.0F, 6.0F, -0.3F, false); + cube_r20.setTextureOffset(36, 8).addBox(-1.0F, -13.0F, 15.4142F, 2.0F, 13.0F, 2.0F, -0.2F, false); + cube_r20.setTextureOffset(36, 8).addBox(-1.0F, -13.0F, 18.4142F, 2.0F, 13.0F, 2.0F, -0.2F, false); + + cube_r21 = new ModelRenderer(this); + cube_r21.setRotationPoint(0.0F, 0.0F, 0.0F); + rocket.addChild(cube_r21); + setRotationAngle(cube_r21, 0.0F, -0.7854F, 0.0F); + cube_r21.setTextureOffset(20, 142).addBox(-3.0F, -18.0F, 20.4142F, 6.0F, 5.0F, 6.0F, -0.3F, false); + cube_r21.setTextureOffset(36, 8).addBox(-1.0F, -13.0F, 18.4142F, 2.0F, 13.0F, 2.0F, -0.2F, false); + cube_r21.setTextureOffset(36, 8).addBox(-1.0F, -13.0F, 15.4142F, 2.0F, 13.0F, 2.0F, -0.2F, false); + + cube_r22 = new ModelRenderer(this); + cube_r22.setRotationPoint(1.0F, 0.0F, -1.0F); + rocket.addChild(cube_r22); + setRotationAngle(cube_r22, 0.0F, 2.3562F, 0.0F); + cube_r22.setTextureOffset(0, 131).addBox(-2.0F, -17.0F, 20.0F, 4.0F, 17.0F, 4.0F, 0.0F, false); + + cube_r23 = new ModelRenderer(this); + cube_r23.setRotationPoint(1.0F, 0.0F, -1.0F); + rocket.addChild(cube_r23); + setRotationAngle(cube_r23, 1.1345F, 2.3562F, 0.0F); + cube_r23.setTextureOffset(0, 107).addBox(-1.0F, 1.0F, 13.0F, 2.0F, 15.0F, 9.0F, 0.0F, false); + } + + @Override + public void setRotationAngles(T entityIn, float f, float f1, float f2, float f3, float f4) { + this.rocket.rotateAngleY = f3 / (180F / (float) Math.PI); + + this.rocket.rotateAngleZ = (float) entityIn.ay; + + this.rocket.rotateAngleX = (float) entityIn.ap; + } + + @Override + public void render(MatrixStack matrixStack, IVertexBuilder buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + rocket.render(matrixStack, buffer, packedLight, packedOverlay); + } + + public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rockettier3/RocketTier3Renderer.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rockettier3/RocketTier3Renderer.java new file mode 100644 index 000000000..3091407f3 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rockettier3/RocketTier3Renderer.java @@ -0,0 +1,21 @@ +package net.mrscauthd.boss_tools.entity.renderer.rockettier3; + +import net.minecraft.client.renderer.entity.EntityRendererManager; +import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.entity.RocketTier3Entity; + +@OnlyIn(Dist.CLIENT) +public class RocketTier3Renderer extends MobRenderer> { + public RocketTier3Renderer(EntityRendererManager entityRendererManager) { + super(entityRendererManager, new RocketTier3Model(), 0.5f); + } + + @Override + public ResourceLocation getEntityTexture(RocketTier3Entity entity) { + return new ResourceLocation(BossToolsMod.ModId, "textures/vehicles/rocket_t3.png"); + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rover/RoverModel.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rover/RoverModel.java new file mode 100644 index 000000000..8e03316f6 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rover/RoverModel.java @@ -0,0 +1,148 @@ +package net.mrscauthd.boss_tools.entity.renderer.rover; + +import net.mrscauthd.boss_tools.entity.RoverEntity; + +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.client.renderer.model.ModelRenderer; +import net.minecraft.client.renderer.entity.model.EntityModel; + +import com.mojang.blaze3d.vertex.IVertexBuilder; +import com.mojang.blaze3d.matrix.MatrixStack; + +@OnlyIn(Dist.CLIENT) +public class RoverModel extends EntityModel { + private final ModelRenderer Frame; + private final ModelRenderer cube_r1; + private final ModelRenderer cube_r2; + private final ModelRenderer cube_r3; + private final ModelRenderer Wheel1; + private final ModelRenderer Wheel2; + private final ModelRenderer Wheel3; + private final ModelRenderer Wheel4; + private final ModelRenderer sat; + private final ModelRenderer cube_r4; + private final ModelRenderer cube_r5; + public RoverModel() { + textureWidth = 256; + textureHeight = 256; + + Frame = new ModelRenderer(this); + Frame.setRotationPoint(0.0F, 24.0F, 0.0F); + Frame.setTextureOffset(0, 0).addBox(-17.5F, -10.5F, -52.5F, 35.0F, 3.0F, 73.0F, 0.0F, false); + Frame.setTextureOffset(0, 31).addBox(12.5F, -15.0F, -37.5F, 0.0F, 5.0F, 25.0F, 0.0F, false); + Frame.setTextureOffset(0, 26).addBox(-12.5F, -15.0F, -37.5F, 0.0F, 5.0F, 25.0F, 0.0F, false); + Frame.setTextureOffset(56, 108).addBox(-17.5F, -8.0F, 12.5F, 35.0F, 3.0F, 3.0F, 0.0F, false); + Frame.setTextureOffset(56, 102).addBox(-17.5F, -8.0F, -47.5F, 35.0F, 3.0F, 3.0F, 0.0F, false); + Frame.setTextureOffset(0, 130).addBox(-12.5F, -13.0F, -55.0F, 10.0F, 3.0F, 13.0F, 0.0F, false); + Frame.setTextureOffset(32, 64).addBox(-7.5F, -13.0F, -57.5F, 15.0F, 3.0F, 3.0F, 0.0F, false); + Frame.setTextureOffset(0, 13).addBox(-3.0F, -13.0F, -55.0F, 8.0F, 3.0F, 3.0F, 0.0F, false); + Frame.setTextureOffset(12, 66).addBox(-10.5F, -15.5F, -52.5F, 3.0F, 3.0F, 3.0F, 0.0F, false); + Frame.setTextureOffset(0, 66).addBox(-10.5F, -23.0F, -52.5F, 3.0F, 3.0F, 3.0F, 0.0F, false); + Frame.setTextureOffset(46, 137).addBox(7.0F, -50.5F, -55.0F, 3.0F, 43.0F, 3.0F, 0.0F, false); + Frame.setTextureOffset(138, 127).addBox(-13.0F, -20.0F, -55.0F, 8.0F, 5.0F, 8.0F, 0.0F, false); + Frame.setTextureOffset(136, 76).addBox(-13.0F, -27.5F, -55.0F, 8.0F, 5.0F, 8.0F, 0.0F, false); + Frame.setTextureOffset(0, 102).addBox(-12.5F, -35.0F, 17.5F, 25.0F, 25.0F, 3.0F, 0.0F, false); + Frame.setTextureOffset(0, 76).addBox(-15.0F, -13.0F, -12.5F, 30.0F, 3.0F, 23.0F, 0.0F, false); + Frame.setTextureOffset(83, 76).addBox(-10.0F, -20.0F, -42.5F, 20.0F, 10.0F, 13.0F, 0.0F, false); + Frame.setTextureOffset(0, 76).addBox(17.5F, -15.625F, -49.875F, 5.0F, 0.0F, 13.0F, 0.0F, false); + Frame.setTextureOffset(0, 0).addBox(-22.5F, -15.625F, -49.775F, 5.0F, 0.0F, 13.0F, 0.0F, false); + Frame.setTextureOffset(47, 51).addBox(17.5F, -15.625F, 10.125F, 5.0F, 0.0F, 13.0F, 0.0F, false); + Frame.setTextureOffset(37, 51).addBox(-22.5F, -15.625F, 10.625F, 5.0F, 0.0F, 13.0F, 0.0F, false); + Frame.setTextureOffset(56, 114).addBox(17.5F, -15.625F, -36.875F, 5.0F, 13.0F, 0.0F, 0.0F, false); + Frame.setTextureOffset(0, 0).addBox(-22.5F, -15.625F, -36.875F, 5.0F, 13.0F, 0.0F, 0.0F, false); + Frame.setTextureOffset(83, 76).addBox(17.5F, -15.625F, 23.125F, 5.0F, 13.0F, 0.0F, 0.0F, false); + Frame.setTextureOffset(0, 76).addBox(-22.5F, -15.625F, 23.125F, 5.0F, 13.0F, 0.0F, 0.0F, false); + + cube_r1 = new ModelRenderer(this); + cube_r1.setRotationPoint(0.0F, -12.1737F, 12.4786F); + Frame.addChild(cube_r1); + setRotationAngle(cube_r1, -0.1309F, 0.0F, 0.0F); + cube_r1.setTextureOffset(0, 23).addBox(-15.0F, -22.5F, -2.5F, 30.0F, 25.0F, 3.0F, 0.0F, false); + + cube_r2 = new ModelRenderer(this); + cube_r2.setRotationPoint(0.0F, -10.0F, -52.5F); + Frame.addChild(cube_r2); + setRotationAngle(cube_r2, -0.2182F, 0.0F, 0.0F); + cube_r2.setTextureOffset(73, 140).addBox(-2.5F, -15.0F, 0.05F, 15.0F, 15.0F, 0.0F, 0.0F, false); + cube_r2.setTextureOffset(58, 140).addBox(-2.5F, -15.0F, 0.0F, 15.0F, 15.0F, 0.0F, 0.0F, false); + + cube_r3 = new ModelRenderer(this); + cube_r3.setRotationPoint(0.0F, -12.4979F, -57.4987F); + Frame.addChild(cube_r3); + setRotationAngle(cube_r3, 0.5672F, 0.0F, 0.0F); + cube_r3.setTextureOffset(0, 61).addBox(-7.5F, 0.0F, -5.0F, 15.0F, 0.0F, 5.0F, 0.0F, false); + + Wheel1 = new ModelRenderer(this); + Wheel1.setRotationPoint(17.5F, -6.25F, -46.25F); + Frame.addChild(Wheel1); + Wheel1.setTextureOffset(115, 127).addBox(0.0F, -6.75F, -6.25F, 5.0F, 13.0F, 13.0F, 0.0F, false); + + Wheel2 = new ModelRenderer(this); + Wheel2.setRotationPoint(20.0F, -6.25F, 13.75F); + Frame.addChild(Wheel2); + Wheel2.setTextureOffset(119, 101).addBox(-2.5F, -6.75F, -6.25F, 5.0F, 13.0F, 13.0F, 0.0F, false); + + Wheel3 = new ModelRenderer(this); + Wheel3.setRotationPoint(-20.0F, -6.25F, -46.25F); + Frame.addChild(Wheel3); + Wheel3.setTextureOffset(56, 114).addBox(-2.5F, -6.75F, -6.25F, 5.0F, 13.0F, 13.0F, 0.0F, false); + + Wheel4 = new ModelRenderer(this); + Wheel4.setRotationPoint(-20.0F, -6.25F, 13.75F); + Frame.addChild(Wheel4); + Wheel4.setTextureOffset(92, 114).addBox(-2.5F, -6.75F, -6.25F, 5.0F, 13.0F, 13.0F, 0.0F, false); + + sat = new ModelRenderer(this); + sat.setRotationPoint(8.645F, -49.3111F, -53.75F); + Frame.addChild(sat); + + + cube_r4 = new ModelRenderer(this); + cube_r4.setRotationPoint(0.105F, -0.6889F, 0.0F); + sat.addChild(cube_r4); + setRotationAngle(cube_r4, 0.2618F, 0.0F, 0.0F); + cube_r4.setTextureOffset(0, 0).addBox(-11.75F, 0.375F, -11.25F, 23.0F, 0.0F, 23.0F, 0.0F, false); + + cube_r5 = new ModelRenderer(this); + cube_r5.setRotationPoint(-0.105F, -4.3111F, -0.9476F); + sat.addChild(cube_r5); + setRotationAngle(cube_r5, 0.2618F, 0.0F, 0.0F); + cube_r5.setTextureOffset(79, 114).addBox(-1.5399F, -3.8778F, -1.3274F, 3.0F, 8.0F, 3.0F, 0.0F, false); + } + + @Override + public void render(MatrixStack matrixStack, IVertexBuilder buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + Frame.render(matrixStack, buffer, packedLight, packedOverlay); + } + + public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } + + public void setRotationAngles(RoverEntity e, float f, float f1, float f2, float f3, float f4) { + this.Frame.rotateAngleY = f3 / (180F / (float) Math.PI); + + this.Wheel1.rotateAngleX = f2 / (180F / (float) Math.PI); + this.Wheel2.rotateAngleX = f2 / (180F / (float) Math.PI); + this.Wheel3.rotateAngleX = f2 / (180F / (float) Math.PI); + this.Wheel4.rotateAngleX = f2 / (180F / (float) Math.PI); + if (e.getforward()) { + this.Wheel1.rotateAngleX = (float) (f / 4); + this.Wheel2.rotateAngleX = (float) (f / 4); + this.Wheel3.rotateAngleX = (float) (f / 4); + this.Wheel4.rotateAngleX = (float) (f / 4); + } + if (!e.getforward()) { + this.Wheel1.rotateAngleX = (float) (f / 4); + this.Wheel2.rotateAngleX = (float) (f / 4); + this.Wheel3.rotateAngleX = (float) (f / 4); + this.Wheel4.rotateAngleX = (float) (f / 4); + } + + this.sat.rotateAngleY = f2 / 20f; + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rover/RoverRenderer.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rover/RoverRenderer.java new file mode 100644 index 000000000..a34f75c6c --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/rover/RoverRenderer.java @@ -0,0 +1,21 @@ +package net.mrscauthd.boss_tools.entity.renderer.rover; + +import net.minecraft.client.renderer.entity.EntityRendererManager; +import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.entity.RoverEntity; + +@OnlyIn(Dist.CLIENT) +public class RoverRenderer extends MobRenderer> { + public RoverRenderer(EntityRendererManager entityRendererManager) { + super(entityRendererManager, new RoverModel(), 0f); + } + + @Override + public ResourceLocation getEntityTexture(RoverEntity entity) { + return new ResourceLocation(BossToolsMod.ModId, "textures/vehicles/rover.png"); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/spacesuit/SpaceSuitModel.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/spacesuit/SpaceSuitModel.java new file mode 100644 index 000000000..f3e778c02 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/spacesuit/SpaceSuitModel.java @@ -0,0 +1,103 @@ +package net.mrscauthd.boss_tools.entity.renderer.spacesuit; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; +import net.minecraft.client.renderer.entity.model.EntityModel; +import net.minecraft.client.renderer.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class SpaceSuitModel { + public static class SPACE_SUIT_P1 extends EntityModel { + public final ModelRenderer Head; + public final ModelRenderer Body; + public final ModelRenderer ArmRight; + public final ModelRenderer ArmLeft; + public final ModelRenderer FootRight; + public final ModelRenderer FootLeft; + + public SPACE_SUIT_P1() { + textureWidth = 64; + textureHeight = 64; + Head = new ModelRenderer(this); + Head.setRotationPoint(0.0F, 0.0F, 0.0F); + setRotationAngle(Head, -0.0175F, 0.0873F, 0.0F); + Head.setTextureOffset(0, 16).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, 0.5F, false); + Head.setTextureOffset(0, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, 0.75F, false); + Body = new ModelRenderer(this); + Body.setRotationPoint(0.0F, 0.0F, 0.0F); + Body.setTextureOffset(0, 32).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, 0.25F, false); + Body.setTextureOffset(28, 28).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, 0.25F, false); + Body.setTextureOffset(50, 29).addBox(-3.0F, 5.0F, -2.5F, 6.0F, 4.0F, 1.0F, 0.25F, false); + Body.setTextureOffset(0, 55).addBox(-2.5F, 1.0F, 2.75F, 5.0F, 8.0F, 1.0F, 0.75F, false); + ArmRight = new ModelRenderer(this); + ArmRight.setRotationPoint(-5.0F, 2.0F, 0.0F); + ArmRight.setTextureOffset(20, 44).addBox(-3.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, 0.26F, false); + ArmLeft = new ModelRenderer(this); + ArmLeft.setRotationPoint(5.0F, 2.0F, 0.0F); + ArmLeft.setTextureOffset(32, 0).addBox(-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, 0.26F, false); + FootLeft = new ModelRenderer(this); + FootLeft.setRotationPoint(2.0F, 12.0F, 0.0F); + FootLeft.setTextureOffset(48, 44).addBox(-2.0F, 5.7F, -2.0F, 4.0F, 6.0F, 4.0F, 0.4F, false); + FootLeft.setTextureOffset(48, 54).addBox(-2.0F, 5.7F, -2.0F, 4.0F, 6.0F, 4.0F, 0.26F, false); + FootRight = new ModelRenderer(this); + FootRight.setRotationPoint(-2.0F, 12.0F, 0.0F); + FootRight.setTextureOffset(48, 44).addBox(-2.0F, 5.7F, -2.0F, 4.0F, 6.0F, 4.0F, 0.4F, false); + FootRight.setTextureOffset(48, 54).addBox(-2.0F, 5.7F, -2.0F, 4.0F, 6.0F, 4.0F, 0.26F, false); + } + + public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } + + @Override + public void render(MatrixStack matrixStack, IVertexBuilder buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + Head.render(matrixStack, buffer, packedLight, packedOverlay, red,green,blue,alpha); + Body.render(matrixStack, buffer, packedLight, packedOverlay, red,green,blue,alpha); + ArmRight.render(matrixStack, buffer, packedLight, packedOverlay, red,green,blue,alpha); + ArmLeft.render(matrixStack, buffer, packedLight, packedOverlay, red,green,blue,alpha); + FootLeft.render(matrixStack, buffer, packedLight, packedOverlay, red,green,blue,alpha); + FootRight.render(matrixStack, buffer, packedLight, packedOverlay, red,green,blue,alpha); + } + + @Override + public void setRotationAngles(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { + + } + + } + + public static class SPACE_SUIT_P2 extends EntityModel { + public final ModelRenderer LegRight; + public final ModelRenderer LegLeft; + + public SPACE_SUIT_P2() { + textureWidth = 64; + textureHeight = 32; + LegRight = new ModelRenderer(this); + LegRight.setRotationPoint(-1.9F, 12.0F, 0.0F); + LegRight.setTextureOffset(0, 16).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, 0.6F, false); + LegLeft = new ModelRenderer(this); + LegLeft.setRotationPoint(1.9F, 12.0F, 0.0F); + LegLeft.setTextureOffset(0, 16).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, 0.6F, true); + } + + public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } + + @Override + public void render(MatrixStack matrixStack, IVertexBuilder buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + LegRight.render(matrixStack, buffer, packedLight, packedOverlay); + LegLeft.render(matrixStack, buffer, packedLight, packedOverlay); + } + + public void setRotationAngles(Entity e, float f, float f1, float f2, float f3, float f4) { + + } + + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/starcrawler/StarCrawlerModel.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/starcrawler/StarCrawlerModel.java new file mode 100644 index 000000000..c02f50966 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/starcrawler/StarCrawlerModel.java @@ -0,0 +1,289 @@ +package net.mrscauthd.boss_tools.entity.renderer.starcrawler; + +import net.minecraft.entity.MobEntity; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraft.util.math.MathHelper; +import net.minecraft.client.renderer.model.ModelRenderer; +import net.minecraft.client.renderer.entity.model.EntityModel; + +import com.mojang.blaze3d.vertex.IVertexBuilder; +import com.mojang.blaze3d.matrix.MatrixStack; + +@OnlyIn(Dist.CLIENT) +public class StarCrawlerModel extends EntityModel { + private final ModelRenderer Body; + private final ModelRenderer arm1g; + private final ModelRenderer Arm1; + private final ModelRenderer cube_r1; + private final ModelRenderer cube_r2; + private final ModelRenderer Limb1; + private final ModelRenderer cube_r3; + private final ModelRenderer cube_r4; + private final ModelRenderer Hand1; + private final ModelRenderer cube_r5; + private final ModelRenderer cube_r6; + private final ModelRenderer arm2g; + private final ModelRenderer Arm2; + private final ModelRenderer cube_r7; + private final ModelRenderer cube_r8; + private final ModelRenderer Limb2; + private final ModelRenderer cube_r9; + private final ModelRenderer cube_r10; + private final ModelRenderer Hand2; + private final ModelRenderer cube_r11; + private final ModelRenderer cube_r12; + private final ModelRenderer arm3g; + private final ModelRenderer Arm3; + private final ModelRenderer cube_r13; + private final ModelRenderer cube_r14; + private final ModelRenderer Limb3; + private final ModelRenderer cube_r15; + private final ModelRenderer cube_r16; + private final ModelRenderer Hand3; + private final ModelRenderer cube_r17; + private final ModelRenderer cube_r18; + private final ModelRenderer arm4g; + private final ModelRenderer Arm4; + private final ModelRenderer cube_r19; + private final ModelRenderer cube_r20; + private final ModelRenderer Limb4; + private final ModelRenderer cube_r21; + private final ModelRenderer cube_r22; + private final ModelRenderer Hand4; + private final ModelRenderer cube_r23; + private final ModelRenderer cube_r24; + public StarCrawlerModel() { + textureWidth = 128; + textureHeight = 128; + Body = new ModelRenderer(this); + Body.setRotationPoint(0.0F, 24.0F, 0.0F); + Body.setTextureOffset(0, 0).addBox(-8.0F, -13.0F, -8.0F, 16.0F, 10.0F, 16.0F, 0.0F, false); + Body.setTextureOffset(0, 26).addBox(-7.0F, -9.0F, -7.0F, 14.0F, 9.0F, 14.0F, 0.0F, false); + arm1g = new ModelRenderer(this); + arm1g.setRotationPoint(0.0F, 18.3F, 6.75F); + Arm1 = new ModelRenderer(this); + Arm1.setRotationPoint(0.0F, 0.0F, 0.0F); + arm1g.addChild(Arm1); + Arm1.setTextureOffset(48, 48).addBox(-6.0F, -5.2F, 0.25F, 12.0F, 8.0F, 8.0F, 0.0F, false); + Arm1.setTextureOffset(42, 26).addBox(-5.0F, 2.8F, -1.75F, 10.0F, 3.0F, 9.0F, 0.0F, false); + cube_r1 = new ModelRenderer(this); + cube_r1.setRotationPoint(-5.0F, 3.0F, 4.25F); + Arm1.addChild(cube_r1); + setRotationAngle(cube_r1, 0.0F, 3.1416F, -0.3491F); + cube_r1.setTextureOffset(48, 64).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + cube_r2 = new ModelRenderer(this); + cube_r2.setRotationPoint(5.0F, 3.0F, 3.25F); + Arm1.addChild(cube_r2); + setRotationAngle(cube_r2, 0.0F, 0.0F, 0.3491F); + cube_r2.setTextureOffset(58, 64).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + Limb1 = new ModelRenderer(this); + Limb1.setRotationPoint(0.0F, 0.0F, 7.0F); + arm1g.addChild(Limb1); + Limb1.setTextureOffset(48, 0).addBox(-5.0F, -4.3F, 0.25F, 10.0F, 7.0F, 9.0F, 0.0F, false); + Limb1.setTextureOffset(0, 64).addBox(-4.0F, 2.7F, -0.75F, 8.0F, 3.0F, 9.0F, 0.0F, false); + cube_r3 = new ModelRenderer(this); + cube_r3.setRotationPoint(-4.0F, 3.0F, 5.25F); + Limb1.addChild(cube_r3); + setRotationAngle(cube_r3, 0.0F, 3.1416F, -0.3491F); + cube_r3.setTextureOffset(59, 38).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + cube_r4 = new ModelRenderer(this); + cube_r4.setRotationPoint(4.0F, 3.0F, 4.25F); + Limb1.addChild(cube_r4); + setRotationAngle(cube_r4, 0.0F, 0.0F, 0.3491F); + cube_r4.setTextureOffset(57, 16).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + Hand1 = new ModelRenderer(this); + Hand1.setRotationPoint(0.0F, 0.1F, 15.0F); + arm1g.addChild(Hand1); + Hand1.setTextureOffset(0, 49).addBox(-4.0F, -3.3F, 0.25F, 8.0F, 6.0F, 9.0F, 0.0F, false); + Hand1.setTextureOffset(25, 55).addBox(-3.0F, 2.7F, -0.75F, 6.0F, 3.0F, 9.0F, 0.0F, false); + cube_r5 = new ModelRenderer(this); + cube_r5.setRotationPoint(-3.0F, 2.9F, 5.25F); + Hand1.addChild(cube_r5); + setRotationAngle(cube_r5, 0.0F, 3.1416F, -0.3491F); + cube_r5.setTextureOffset(39, 49).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + cube_r6 = new ModelRenderer(this); + cube_r6.setRotationPoint(3.0F, 2.9F, 4.25F); + Hand1.addChild(cube_r6); + setRotationAngle(cube_r6, 0.0F, 0.0F, 0.3491F); + cube_r6.setTextureOffset(49, 38).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + arm2g = new ModelRenderer(this); + arm2g.setRotationPoint(0.0F, 18.4F, -7.75F); + Arm2 = new ModelRenderer(this); + Arm2.setRotationPoint(0.0F, -0.1F, 1.0F); + arm2g.addChild(Arm2); + setRotationAngle(Arm2, 0.0F, 3.1416F, 0.0F); + Arm2.setTextureOffset(48, 48).addBox(-6.0F, -5.2F, 0.25F, 12.0F, 8.0F, 8.0F, 0.0F, false); + Arm2.setTextureOffset(42, 26).addBox(-5.0F, 2.8F, -1.75F, 10.0F, 3.0F, 9.0F, 0.0F, false); + cube_r7 = new ModelRenderer(this); + cube_r7.setRotationPoint(-5.0F, 3.0F, 4.25F); + Arm2.addChild(cube_r7); + setRotationAngle(cube_r7, 0.0F, 3.1416F, -0.3491F); + cube_r7.setTextureOffset(48, 64).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + cube_r8 = new ModelRenderer(this); + cube_r8.setRotationPoint(5.0F, 3.0F, 3.25F); + Arm2.addChild(cube_r8); + setRotationAngle(cube_r8, 0.0F, 0.0F, 0.3491F); + cube_r8.setTextureOffset(58, 64).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + Limb2 = new ModelRenderer(this); + Limb2.setRotationPoint(0.0F, -0.1F, -6.0F); + arm2g.addChild(Limb2); + setRotationAngle(Limb2, 0.0F, 3.1416F, 0.0F); + Limb2.setTextureOffset(48, 0).addBox(-5.0F, -4.3F, 0.25F, 10.0F, 7.0F, 9.0F, 0.0F, false); + Limb2.setTextureOffset(0, 64).addBox(-4.0F, 2.7F, -0.75F, 8.0F, 3.0F, 9.0F, 0.0F, false); + cube_r9 = new ModelRenderer(this); + cube_r9.setRotationPoint(-4.0F, 3.0F, 5.25F); + Limb2.addChild(cube_r9); + setRotationAngle(cube_r9, 0.0F, 3.1416F, -0.3491F); + cube_r9.setTextureOffset(59, 38).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + cube_r10 = new ModelRenderer(this); + cube_r10.setRotationPoint(4.0F, 3.0F, 4.25F); + Limb2.addChild(cube_r10); + setRotationAngle(cube_r10, 0.0F, 0.0F, 0.3491F); + cube_r10.setTextureOffset(57, 16).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + Hand2 = new ModelRenderer(this); + Hand2.setRotationPoint(0.0F, 0.0F, -19.0F); + arm2g.addChild(Hand2); + Hand2.setTextureOffset(0, 49).addBox(-4.0F, -3.3F, -4.75F, 8.0F, 6.0F, 9.0F, 0.0F, false); + Hand2.setTextureOffset(25, 55).addBox(-3.0F, 2.7F, -3.75F, 6.0F, 3.0F, 9.0F, 0.0F, false); + cube_r11 = new ModelRenderer(this); + cube_r11.setRotationPoint(-3.0F, 2.9F, 0.25F); + Hand2.addChild(cube_r11); + setRotationAngle(cube_r11, 0.0F, 3.1416F, -0.3491F); + cube_r11.setTextureOffset(39, 49).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + cube_r12 = new ModelRenderer(this); + cube_r12.setRotationPoint(3.0F, 2.9F, -0.75F); + Hand2.addChild(cube_r12); + setRotationAngle(cube_r12, 0.0F, 0.0F, 0.3491F); + cube_r12.setTextureOffset(49, 38).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + arm3g = new ModelRenderer(this); + arm3g.setRotationPoint(-7.0F, 24.0F, 0.0F); + Arm3 = new ModelRenderer(this); + Arm3.setRotationPoint(0.25F, -5.7F, 0.0F); + arm3g.addChild(Arm3); + setRotationAngle(Arm3, 0.0F, -1.5708F, 0.0F); + Arm3.setTextureOffset(48, 48).addBox(-6.0F, -5.2F, 0.25F, 12.0F, 8.0F, 8.0F, 0.0F, false); + Arm3.setTextureOffset(42, 26).addBox(-5.0F, 2.8F, -1.75F, 10.0F, 3.0F, 9.0F, 0.0F, false); + cube_r13 = new ModelRenderer(this); + cube_r13.setRotationPoint(-5.0F, 3.0F, 4.25F); + Arm3.addChild(cube_r13); + setRotationAngle(cube_r13, 0.0F, 3.1416F, -0.3491F); + cube_r13.setTextureOffset(48, 64).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + cube_r14 = new ModelRenderer(this); + cube_r14.setRotationPoint(5.0F, 3.0F, 3.25F); + Arm3.addChild(cube_r14); + setRotationAngle(cube_r14, 0.0F, 0.0F, 0.3491F); + cube_r14.setTextureOffset(58, 64).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + Limb3 = new ModelRenderer(this); + Limb3.setRotationPoint(-6.75F, -5.7F, 0.0F); + arm3g.addChild(Limb3); + setRotationAngle(Limb3, 0.0F, -1.5708F, 0.0F); + Limb3.setTextureOffset(48, 0).addBox(-5.0F, -4.3F, 0.25F, 10.0F, 7.0F, 9.0F, 0.0F, false); + Limb3.setTextureOffset(0, 64).addBox(-4.0F, 2.7F, -0.75F, 8.0F, 3.0F, 9.0F, 0.0F, false); + cube_r15 = new ModelRenderer(this); + cube_r15.setRotationPoint(-4.0F, 3.0F, 5.25F); + Limb3.addChild(cube_r15); + setRotationAngle(cube_r15, 0.0F, 3.1416F, -0.3491F); + cube_r15.setTextureOffset(59, 38).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + cube_r16 = new ModelRenderer(this); + cube_r16.setRotationPoint(4.0F, 3.0F, 4.25F); + Limb3.addChild(cube_r16); + setRotationAngle(cube_r16, 0.0F, 0.0F, 0.3491F); + cube_r16.setTextureOffset(57, 16).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + Hand3 = new ModelRenderer(this); + Hand3.setRotationPoint(-14.75F, -5.6F, 0.0F); + arm3g.addChild(Hand3); + setRotationAngle(Hand3, 0.0F, -1.5708F, 0.0F); + Hand3.setTextureOffset(0, 49).addBox(-4.0F, -3.3F, 0.25F, 8.0F, 6.0F, 9.0F, 0.0F, false); + Hand3.setTextureOffset(25, 55).addBox(-3.0F, 2.7F, -0.75F, 6.0F, 3.0F, 9.0F, 0.0F, false); + cube_r17 = new ModelRenderer(this); + cube_r17.setRotationPoint(-3.0F, 2.9F, 5.25F); + Hand3.addChild(cube_r17); + setRotationAngle(cube_r17, 0.0F, 3.1416F, -0.3491F); + cube_r17.setTextureOffset(39, 49).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + cube_r18 = new ModelRenderer(this); + cube_r18.setRotationPoint(3.0F, 2.9F, 4.25F); + Hand3.addChild(cube_r18); + setRotationAngle(cube_r18, 0.0F, 0.0F, 0.3491F); + cube_r18.setTextureOffset(49, 38).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + arm4g = new ModelRenderer(this); + arm4g.setRotationPoint(8.0F, 24.0F, 0.0F); + Arm4 = new ModelRenderer(this); + Arm4.setRotationPoint(-1.25F, -5.7F, 0.0F); + arm4g.addChild(Arm4); + setRotationAngle(Arm4, 0.0F, 1.5708F, 0.0F); + Arm4.setTextureOffset(48, 48).addBox(-6.0F, -5.2F, 0.25F, 12.0F, 8.0F, 8.0F, 0.0F, false); + Arm4.setTextureOffset(42, 26).addBox(-5.0F, 2.8F, -1.75F, 10.0F, 3.0F, 9.0F, 0.0F, false); + cube_r19 = new ModelRenderer(this); + cube_r19.setRotationPoint(-5.0F, 3.0F, 4.25F); + Arm4.addChild(cube_r19); + setRotationAngle(cube_r19, 0.0F, 3.1416F, -0.3491F); + cube_r19.setTextureOffset(48, 64).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + cube_r20 = new ModelRenderer(this); + cube_r20.setRotationPoint(5.0F, 3.0F, 3.25F); + Arm4.addChild(cube_r20); + setRotationAngle(cube_r20, 0.0F, 0.0F, 0.3491F); + cube_r20.setTextureOffset(58, 64).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + Limb4 = new ModelRenderer(this); + Limb4.setRotationPoint(5.75F, -5.7F, 0.0F); + arm4g.addChild(Limb4); + setRotationAngle(Limb4, 0.0F, 1.5708F, 0.0F); + Limb4.setTextureOffset(48, 0).addBox(-5.0F, -4.3F, 0.25F, 10.0F, 7.0F, 9.0F, 0.0F, false); + Limb4.setTextureOffset(0, 64).addBox(-4.0F, 2.7F, -0.75F, 8.0F, 3.0F, 9.0F, 0.0F, false); + cube_r21 = new ModelRenderer(this); + cube_r21.setRotationPoint(-4.0F, 3.0F, 5.25F); + Limb4.addChild(cube_r21); + setRotationAngle(cube_r21, 0.0F, 3.1416F, -0.3491F); + cube_r21.setTextureOffset(59, 38).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + cube_r22 = new ModelRenderer(this); + cube_r22.setRotationPoint(4.0F, 3.0F, 4.25F); + Limb4.addChild(cube_r22); + setRotationAngle(cube_r22, 0.0F, 0.0F, 0.3491F); + cube_r22.setTextureOffset(57, 16).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + Hand4 = new ModelRenderer(this); + Hand4.setRotationPoint(13.75F, -5.6F, 0.0F); + arm4g.addChild(Hand4); + setRotationAngle(Hand4, 0.0F, 1.5708F, 0.0F); + Hand4.setTextureOffset(0, 49).addBox(-4.0F, -3.3F, 0.25F, 8.0F, 6.0F, 9.0F, 0.0F, false); + Hand4.setTextureOffset(25, 55).addBox(-3.0F, 2.7F, -0.75F, 6.0F, 3.0F, 9.0F, 0.0F, false); + cube_r23 = new ModelRenderer(this); + cube_r23.setRotationPoint(-3.0F, 2.9F, 5.25F); + Hand4.addChild(cube_r23); + setRotationAngle(cube_r23, 0.0F, 3.1416F, -0.3491F); + cube_r23.setTextureOffset(39, 49).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + cube_r24 = new ModelRenderer(this); + cube_r24.setRotationPoint(3.0F, 2.9F, 4.25F); + Hand4.addChild(cube_r24); + setRotationAngle(cube_r24, 0.0F, 0.0F, 0.3491F); + cube_r24.setTextureOffset(49, 38).addBox(0.0F, 0.0F, -3.0F, 5.0F, 0.0F, 7.0F, 0.0F, false); + } + + @Override + public void setRotationAngles(T entityIn, float f, float f1, float f2, float f3, float f4) { + // arm1 + this.Hand1.rotateAngleY = MathHelper.cos(f * 0.6662F) * f1; + this.Hand2.rotateAngleY = MathHelper.cos(f * 0.6662F) * f1; + this.Hand3.rotateAngleY = 80 + MathHelper.cos(f * 0.6662F) * f1; + this.Hand4.rotateAngleY = -80 + MathHelper.cos(f * 0.6662F) * f1; + // arm + this.arm1g.rotateAngleY = MathHelper.cos(f * 0.6662F) * f1; + this.arm2g.rotateAngleY = MathHelper.cos(f * 0.6662F) * f1; + this.arm3g.rotateAngleY = MathHelper.cos(f * 0.6662F) * f1; + this.arm4g.rotateAngleY = MathHelper.cos(f * 0.6662F) * f1; + } + + @Override + public void render(MatrixStack matrixStack, IVertexBuilder buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + Body.render(matrixStack, buffer, packedLight, packedOverlay); + arm1g.render(matrixStack, buffer, packedLight, packedOverlay); + arm2g.render(matrixStack, buffer, packedLight, packedOverlay); + arm3g.render(matrixStack, buffer, packedLight, packedOverlay); + arm4g.render(matrixStack, buffer, packedLight, packedOverlay); + } + + public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/entity/renderer/starcrawler/StarCrawlerRenderer.java b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/starcrawler/StarCrawlerRenderer.java new file mode 100644 index 000000000..40b961845 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/entity/renderer/starcrawler/StarCrawlerRenderer.java @@ -0,0 +1,21 @@ +package net.mrscauthd.boss_tools.entity.renderer.starcrawler; + +import net.minecraft.client.renderer.entity.EntityRendererManager; +import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.entity.MobEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.mrscauthd.boss_tools.BossToolsMod; + +@OnlyIn(Dist.CLIENT) +public class StarCrawlerRenderer extends MobRenderer> { + public StarCrawlerRenderer(EntityRendererManager entityRendererManager) { + super(entityRendererManager, new StarCrawlerModel(), 0.5f); + } + + @Override + public ResourceLocation getEntityTexture(MobEntity entity) { + return new ResourceLocation(BossToolsMod.ModId, "textures/entities/starfish.png"); + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/events/AtlassEvent.java b/src/main/java/net/mrscauthd/boss_tools/events/AtlassEvent.java new file mode 100644 index 000000000..7c2f2de13 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/events/AtlassEvent.java @@ -0,0 +1,16 @@ +package net.mrscauthd.boss_tools.events; + +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.mrscauthd.boss_tools.BossToolsMod; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) +public class AtlassEvent { + @SubscribeEvent + public static void AtlasEvent(TextureStitchEvent.Pre event) { + event.addSprite(new ResourceLocation(BossToolsMod.ModId, "entities/tile_entity_box_oxygen_generator")); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/events/ClientEventBusSubscriber.java b/src/main/java/net/mrscauthd/boss_tools/events/ClientEventBusSubscriber.java new file mode 100644 index 000000000..208deef5f --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/events/ClientEventBusSubscriber.java @@ -0,0 +1,127 @@ +package net.mrscauthd.boss_tools.events; + +import net.minecraft.client.gui.ScreenManager; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.RenderTypeLookup; +import net.minecraft.client.renderer.entity.SpriteRenderer; +import net.minecraft.client.settings.KeyBinding; +import net.minecraftforge.client.event.ParticleFactoryRegisterEvent; +import net.minecraftforge.fml.client.registry.ClientRegistry; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.client.registry.RenderingRegistry; +import net.minecraftforge.fml.client.registry.IRenderFactory; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.entity.EntityType; +import net.minecraft.client.Minecraft; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.entity.renderer.TileEntityBoxRenderer; +import net.mrscauthd.boss_tools.entity.renderer.flagtileentity.TileEntityHeadRenderer; +import net.mrscauthd.boss_tools.entity.renderer.alienzombie.AlienZombieRenderer; +import net.mrscauthd.boss_tools.entity.renderer.lander.LanderRenderer; +import net.mrscauthd.boss_tools.entity.renderer.rockettier1.RocketTier1Renderer; +import net.mrscauthd.boss_tools.entity.renderer.rockettier2.RocketTier2Renderer; +import net.mrscauthd.boss_tools.entity.renderer.rockettier3.RocketTier3Renderer; +import net.mrscauthd.boss_tools.entity.renderer.rover.RoverRenderer; +import net.mrscauthd.boss_tools.entity.renderer.starcrawler.StarCrawlerRenderer; +import net.mrscauthd.boss_tools.gui.screens.blastfurnace.BlastFurnaceGuiWindow; +import net.mrscauthd.boss_tools.gui.screens.coalgenerator.CoalGeneratorGuiWindow; +import net.mrscauthd.boss_tools.gui.screens.compressor.CompressorGuiWindow; +import net.mrscauthd.boss_tools.gui.screens.fuelrefinery.FuelRefineryGuiWindow; +import net.mrscauthd.boss_tools.gui.screens.lander.LanderGuiWindow; +import net.mrscauthd.boss_tools.gui.screens.nasaworkbench.NasaWorkbenchGuiWindow; +import net.mrscauthd.boss_tools.gui.screens.oxygenbubbledistributor.OxygenBubbleDistributorGuiWindow; +import net.mrscauthd.boss_tools.gui.screens.oxygenloader.OxygenLoaderGuiWindow; +import net.mrscauthd.boss_tools.gui.screens.planetselection.PlanetSelectionGuiWindow; +import net.mrscauthd.boss_tools.gui.screens.rocket.RocketGuiWindow; +import net.mrscauthd.boss_tools.gui.screens.rover.RoverGuiWindow; +import net.mrscauthd.boss_tools.gui.screens.solarpanel.SolarPanelGuiWindow; +import net.mrscauthd.boss_tools.gui.screens.waterpump.WaterPumpGuiWindow; +import net.mrscauthd.boss_tools.particle.LargeFlameParticle; +import net.mrscauthd.boss_tools.particle.SmokeParticle; +import net.mrscauthd.boss_tools.particle.VenusRainParticle; +import net.mrscauthd.boss_tools.spawneggs.ModSpawnEggs; +import net.mrscauthd.boss_tools.entity.renderer.alien.AlienRenderer; +import net.mrscauthd.boss_tools.entity.renderer.mogler.MoglerRenderer; +import net.mrscauthd.boss_tools.entity.renderer.pygro.PygroRenderer; +import org.lwjgl.glfw.GLFW; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) +public class ClientEventBusSubscriber { + public static KeyBinding key1; + @SubscribeEvent + public static void onClientSetup(FMLClientSetupEvent event) { + RenderingRegistry.registerEntityRenderingHandler(ModInnet.ALIEN.get(), ((IRenderFactory) AlienRenderer::new)); + + RenderingRegistry.registerEntityRenderingHandler(ModInnet.PYGRO.get(), ((IRenderFactory) PygroRenderer::new)); + + RenderingRegistry.registerEntityRenderingHandler(ModInnet.MOGLER.get(), ((IRenderFactory) MoglerRenderer::new)); + + RenderingRegistry.registerEntityRenderingHandler(ModInnet.ALIEN_ZOMBIE.get(), ((IRenderFactory) AlienZombieRenderer::new)); + + RenderingRegistry.registerEntityRenderingHandler(ModInnet.STAR_CRAWLER.get(), ((IRenderFactory) StarCrawlerRenderer::new)); + + RenderingRegistry.registerEntityRenderingHandler(ModInnet.TIER_1_ROCKET.get(), ((IRenderFactory) RocketTier1Renderer::new)); + + RenderingRegistry.registerEntityRenderingHandler(ModInnet.TIER_2_ROCKET.get(), ((IRenderFactory) RocketTier2Renderer::new)); + + RenderingRegistry.registerEntityRenderingHandler(ModInnet.TIER_3_ROCKET.get(), ((IRenderFactory) RocketTier3Renderer::new)); + + RenderingRegistry.registerEntityRenderingHandler(ModInnet.LANDER.get(), ((IRenderFactory) LanderRenderer::new)); + + RenderingRegistry.registerEntityRenderingHandler(ModInnet.ROVER.get(), ((IRenderFactory) RoverRenderer::new)); + + ClientRegistry.bindTileEntityRenderer(ModInnet.OXYGEN_BUBBLE_DISTRIBUTOR.get(), TileEntityBoxRenderer::new); + + ClientRegistry.bindTileEntityRenderer(ModInnet.FLAG.get(), TileEntityHeadRenderer::new); + + RenderingRegistry.registerEntityRenderingHandler(ModInnet.ALIEN_SPIT_ENTITY.get(), renderManager -> new SpriteRenderer(renderManager, Minecraft.getInstance().getItemRenderer())); + + //GUIS + ScreenManager.registerFactory(ModInnet.ROCKET_GUI.get(), RocketGuiWindow::new); + ScreenManager.registerFactory(ModInnet.BLAST_FURNACE_GUI.get(), BlastFurnaceGuiWindow::new); + ScreenManager.registerFactory(ModInnet.COMPRESSOR_GUI.get(), CompressorGuiWindow::new); + ScreenManager.registerFactory(ModInnet.FUEL_REFINERY_GUI.get(), FuelRefineryGuiWindow::new); + ScreenManager.registerFactory(ModInnet.COAL_GENERATOR_GUI.get(), CoalGeneratorGuiWindow::new); + ScreenManager.registerFactory(ModInnet.NASA_WORKBENCH_GUI.get(), NasaWorkbenchGuiWindow::new); + ScreenManager.registerFactory(ModInnet.OXYGEN_LOADER_GUI.get(), OxygenLoaderGuiWindow::new); + ScreenManager.registerFactory(ModInnet.SOLAR_PANEL_GUI.get(), SolarPanelGuiWindow::new); + ScreenManager.registerFactory(ModInnet.WATER_PUMP_GUI.get(), WaterPumpGuiWindow::new); + ScreenManager.registerFactory(ModInnet.OXYGEN_BUBBLE_DISTRIBUTOR_GUI.get(), OxygenBubbleDistributorGuiWindow::new); + ScreenManager.registerFactory(ModInnet.LANDER_GUI.get(), LanderGuiWindow::new); + ScreenManager.registerFactory(ModInnet.ROVER_GUI.get(), RoverGuiWindow::new); + ScreenManager.registerFactory(ModInnet.PLANET_SELECTION_GUI.get(), PlanetSelectionGuiWindow::new); + + //Key Binding Registrys + key1 = new KeyBinding("key." + BossToolsMod.ModId + ".rocket_start", GLFW.GLFW_KEY_SPACE, "key.categories." + BossToolsMod.ModId); + ClientRegistry.registerKeyBinding(key1); + + //Fluid Translucent Renderer + RenderTypeLookup.setRenderLayer(ModInnet.FLOWING_FUEL.get(), RenderType.getTranslucent()); + RenderTypeLookup.setRenderLayer(ModInnet.FUEL_STILL.get(), RenderType.getTranslucent()); + + //Block Translucent Renderer + RenderTypeLookup.setRenderLayer(ModInnet.COAL_LANTERN_BLOCK.get(), RenderType.getTranslucent()); + + //Cutout + RenderTypeLookup.setRenderLayer(ModInnet.NASA_WORKBENCH_BLOCK.get(), RenderType.getCutout()); + + RenderTypeLookup.setRenderLayer(ModInnet.WATER_PUMP_BLOCK.get(), RenderType.getCutout()); + } + + @SubscribeEvent + public static void onRegistrerEntities(final RegistryEvent.Register> event) { + ModSpawnEggs.initSpawnEggs(); + } + + @SubscribeEvent + public static void registerParticlesFactory(ParticleFactoryRegisterEvent event) { + Minecraft.getInstance().particles.registerFactory(ModInnet.VENUS_RAIN_PARTICLE.get(), VenusRainParticle.ParticleFactory::new); + Minecraft.getInstance().particles.registerFactory(ModInnet.LARGE_FLAME_PARTICLE.get(), LargeFlameParticle.ParticleFactory::new); + Minecraft.getInstance().particles.registerFactory(ModInnet.SMOKE_PARTICLE.get(), SmokeParticle.ParticleFactory::new); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/events/CoalTorchEvents.java b/src/main/java/net/mrscauthd/boss_tools/events/CoalTorchEvents.java new file mode 100644 index 000000000..13974c3e5 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/events/CoalTorchEvents.java @@ -0,0 +1,152 @@ +package net.mrscauthd.boss_tools.events; + +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.CampfireBlock; +import net.minecraft.block.LanternBlock; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.DirectionProperty; +import net.minecraft.util.Hand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.event.world.BlockEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.block.CoalLanternBlock; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId) +public class CoalTorchEvents { + @SubscribeEvent + public static void onRightClickBlock(PlayerInteractEvent.RightClickBlock event) { + PlayerEntity entity = event.getPlayer(); + if (event.getHand() != entity.getActiveHand()) { + return; + } + double x = event.getPos().getX(); + double y = event.getPos().getY(); + double z = event.getPos().getZ(); + BlockPos pos = new BlockPos(x,y,z); + IWorld world = event.getWorld(); + + if (!Methodes.isSpaceWorld((World) world) && !entity.isSneaking() && entity.getHeldItemMainhand().getItem() == Items.FLINT_AND_STEEL) { + + if (world.getBlockState(pos).getBlock() == ModInnet.WALL_COAL_TORCH_BLOCK.get()) { + //Facing + BlockState bs = world.getBlockState(pos); + DirectionProperty property = (DirectionProperty) bs.getBlock().getStateContainer().getProperty("facing"); + + //Place Coal Torch Block with Dr + world.setBlockState(pos, Blocks.WALL_TORCH.getDefaultState().with(property,bs.get(property)), 3); + + play_fire_sounds_place(pos, (World) world); + flintDamage(event.getItemStack(),event.getPlayer(),event.getHand()); + } + + if (world.getBlockState(pos).getBlock() == ModInnet.COAL_TORCH_BLOCK.get().getDefaultState().getBlock()) { + world.setBlockState(pos, Blocks.TORCH.getDefaultState(), 3); + + play_fire_sounds_place(pos, (World) world); + flintDamage(event.getItemStack(),event.getPlayer(),event.getHand()); + } + + if (world.getBlockState(pos).getBlock() == ModInnet.COAL_LANTERN_BLOCK.get() && world.getBlockState(pos).getBlockState().get(CoalLanternBlock.HANGING) == false) { + world.setBlockState(pos, Blocks.LANTERN.getDefaultState(), 3); + + play_fire_sounds_place(pos, (World) world); + flintDamage(event.getItemStack(),event.getPlayer(),event.getHand()); + } + + if (world.getBlockState(pos).getBlock() == ModInnet.COAL_LANTERN_BLOCK.get() && world.getBlockState(pos).getBlockState().get(CoalLanternBlock.HANGING) == true) { + world.setBlockState(pos, Blocks.LANTERN.getDefaultState().with(LanternBlock.HANGING, true), 3); + + play_fire_sounds_place(pos, (World) world); + flintDamage(event.getItemStack(),event.getPlayer(),event.getHand()); + } + + } + } + + @SubscribeEvent + public static void onBlockPlace(BlockEvent.EntityPlaceEvent event) { + IWorld world = event.getWorld(); + + double x = event.getPos().getX(); + double y = event.getPos().getY(); + double z = event.getPos().getZ(); + + BlockPos pos = new BlockPos(x,y,z); + + if (Methodes.isSpaceWorld((World) world) == true) { + //Remove Fire + if (world.getBlockState(pos).getBlock() == Blocks.FIRE.getDefaultState().getBlock()) { + world.setBlockState(pos, Blocks.AIR.getDefaultState(), 3); + + play_fire_sounds_delete(pos, (World) world); + } + + if (world.getBlockState(pos).getBlock() == Blocks.WALL_TORCH) { + //Facing + BlockState bs = world.getBlockState(pos); + DirectionProperty property = (DirectionProperty) bs.getBlock().getStateContainer().getProperty("facing"); + + //Place Coal Torch Block with Dr + world.setBlockState(pos, ModInnet.WALL_COAL_TORCH_BLOCK.get().getDefaultState().with(property,bs.get(property)), 3); + + play_fire_sounds_delete(pos, (World) world); + } + + if (world.getBlockState(pos).getBlock() == Blocks.TORCH) { + world.setBlockState(pos, ModInnet.COAL_TORCH_BLOCK.get().getDefaultState(), 3); + + play_fire_sounds_delete(pos, (World) world); + } + + if (world.getBlockState(pos).getBlock() == Blocks.LANTERN && world.getBlockState(pos).getBlockState().get(LanternBlock.HANGING) == false) { + world.setBlockState(pos, ModInnet.COAL_LANTERN_BLOCK.get().getDefaultState(), 3); + + play_fire_sounds_delete(pos, (World) world); + } + + if (world.getBlockState(pos).getBlock() == Blocks.LANTERN && world.getBlockState(pos).getBlockState().get(LanternBlock.HANGING) == true) { + world.setBlockState(pos, ModInnet.COAL_LANTERN_BLOCK.get().getDefaultState().with(CoalLanternBlock.HANGING, true), 3); + + play_fire_sounds_delete(pos, (World) world); + } + + if (world.getBlockState(pos).getBlock() == Blocks.CAMPFIRE && world.getBlockState(pos).getBlockState().get(CampfireBlock.LIT) == true) { + //Get Block State + BooleanProperty property = (BooleanProperty) world.getBlockState(pos).getBlock().getStateContainer().getProperty("lit"); + + //Set Block State + world.setBlockState(pos, world.getBlockState(pos).with(property, false), 3); + + play_fire_sounds_delete(pos, (World) world); + } + + } + } + + public static void play_fire_sounds_delete(BlockPos pos, World world) { + world.playSound(null, pos, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 1, 1); + } + + public static void play_fire_sounds_place(BlockPos pos, World world) { + world.playSound(null, pos, SoundEvents.ITEM_FLINTANDSTEEL_USE,SoundCategory.BLOCKS, 1,1); + } + + public static void flintDamage(ItemStack itemstack, PlayerEntity playerentity, Hand hand) { + itemstack.damageItem(1, playerentity, (player) -> { + player.sendBreakAnimation(hand); + }); + } + +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/events/Config.java b/src/main/java/net/mrscauthd/boss_tools/events/Config.java new file mode 100644 index 000000000..b986a1334 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/events/Config.java @@ -0,0 +1,135 @@ +package net.mrscauthd.boss_tools.events; + +import net.minecraftforge.fml.loading.FMLPaths; + +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.eventbus.api.SubscribeEvent; + +import java.io.IOException; +import java.io.FileWriter; +import java.io.FileReader; +import java.io.File; +import java.io.BufferedReader; + +import com.google.gson.JsonObject; +import com.google.gson.GsonBuilder; +import com.google.gson.Gson; +import net.mrscauthd.boss_tools.BossToolsMod; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId,bus = Mod.EventBusSubscriber.Bus.MOD) +public class Config { + public static boolean AlienSpawn = true; + public static boolean AlienVillageStructure = true; + public static boolean MeteorStructure = true; + public static boolean PlayerOxygenSystem = true; + public static boolean StarCrawlerSpawn = true; + public static boolean AlienZombieSpawn = true; + public static boolean EntityOxygenSystem = true; + public static boolean VenusBulletStructure = true; + public static boolean VenusTowerStructure = true; + public static boolean OILWellStructure = true; + public static boolean CrimsonVillageStructure = true; + + @SubscribeEvent + public static void init(FMLCommonSetupEvent event) { + File boss_tools = new File((FMLPaths.GAMEDIR.get().toString() + "" + ("//config/")), File.separator + "space-bosstools-config.json"); + if (!boss_tools.exists()) { + try { + boss_tools.createNewFile(); + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + JsonObject Config = new JsonObject(); + Config.addProperty("Alien Spawn", true); + Config.addProperty("Star Crawler Spawn", true); + Config.addProperty("Alien Zombie Spawn", true); + Config.addProperty("Alien Village Structure", true); + Config.addProperty("Meteor Structure", true); + Config.addProperty("Venus Bullet Structure", true); + Config.addProperty("Venus Tower Structure", true); + Config.addProperty("Oil Well Structure", true); + Config.addProperty("Crimson Village Structure", true); + Config.addProperty("Player Oxygen System", true); + Config.addProperty("Entity Oxygen System", true); + try { + FileWriter boss_toolsfw = new FileWriter(boss_tools); + boss_toolsfw.write(gson.toJson(Config)); + boss_toolsfw.close(); + } catch (IOException exception) { + exception.printStackTrace(); + } + } catch (IOException exception) { + exception.printStackTrace(); + } + } + { + try { + BufferedReader boss_toolsReader = new BufferedReader(new FileReader(boss_tools)); + StringBuilder jsonstringbuilder = new StringBuilder(); + String line; + while ((line = boss_toolsReader.readLine()) != null) { + jsonstringbuilder.append(line); + } + JsonObject Config = new Gson().fromJson(jsonstringbuilder.toString(), JsonObject.class); + if (Config == null) { + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + Config = new JsonObject(); + Config.addProperty("Alien Spawn", true); + Config.addProperty("Star Crawler Spawn", true); + Config.addProperty("Alien Zombie Spawn", true); + Config.addProperty("Alien Village Structure", true); + Config.addProperty("Meteor Structure", true); + Config.addProperty("Venus Bullet Structure", true); + Config.addProperty("Venus Tower Structure", true); + Config.addProperty("Oil Well Structure", true); + Config.addProperty("Crimson Village Structure", true); + Config.addProperty("Player Oxygen System", true); + Config.addProperty("Entity Oxygen System", true); + try { + FileWriter boss_toolsfw = new FileWriter(boss_tools); + boss_toolsfw.write(gson.toJson(Config)); + boss_toolsfw.close(); + } catch (IOException exception) { + exception.printStackTrace(); + } + } + + if (Config.get("Alien Spawn") == null || Config.get("Star Crawler Spawn") == null || Config.get("Alien Zombie Spawn") == null || Config.get("Alien Village Structure") == null || Config.get("Meteor Structure") == null || Config.get("Player Oxygen System") == null || Config.get("Entity Oxygen System") == null || Config.get("Venus Bullet Structure") == null || Config.get("Venus Tower Structure") == null || Config.get("Oil Well Structure") == null || Config.get("Crimson Village Structure") == null) { + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + Config = new JsonObject(); + Config.addProperty("Alien Spawn", true); + Config.addProperty("Star Crawler Spawn", true); + Config.addProperty("Alien Zombie Spawn", true); + Config.addProperty("Alien Village Structure", true); + Config.addProperty("Meteor Structure", true); + Config.addProperty("Venus Bullet Structure", true); + Config.addProperty("Venus Tower Structure", true); + Config.addProperty("Oil Well Structure", true); + Config.addProperty("Crimson Village Structure", true); + Config.addProperty("Player Oxygen System", true); + Config.addProperty("Entity Oxygen System", true); + try { + FileWriter boss_toolsfw = new FileWriter(boss_tools); + boss_toolsfw.write(gson.toJson(Config)); + boss_toolsfw.close(); + } catch (IOException exception) { + exception.printStackTrace(); + } + } + boss_toolsReader.close(); + AlienSpawn = Config.get("Alien Spawn").getAsBoolean(); + StarCrawlerSpawn = Config.get("Star Crawler Spawn").getAsBoolean(); + AlienZombieSpawn = Config.get("Alien Zombie Spawn").getAsBoolean(); + AlienVillageStructure = Config.get("Alien Village Structure").getAsBoolean(); + MeteorStructure = Config.get("Meteor Structure").getAsBoolean(); + VenusBulletStructure = Config.get("Venus Bullet Structure").getAsBoolean(); + VenusTowerStructure = Config.get("Venus Bullet Structure").getAsBoolean(); + OILWellStructure = Config.get("Oil Well Structure").getAsBoolean(); + CrimsonVillageStructure = Config.get("Crimson Village Structure").getAsBoolean(); + PlayerOxygenSystem = Config.get("Player Oxygen System").getAsBoolean(); + EntityOxygenSystem = Config.get("Entity Oxygen System").getAsBoolean(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/events/Events.java b/src/main/java/net/mrscauthd/boss_tools/events/Events.java new file mode 100644 index 000000000..ee6bf048d --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/events/Events.java @@ -0,0 +1,240 @@ +package net.mrscauthd.boss_tools.events; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.entity.model.BipedModel; +import net.minecraft.client.settings.PointOfView; +import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.util.*; +import net.minecraft.util.math.EntityRayTraceResult; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.registry.Registry; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.client.event.EntityViewRenderEvent; +import net.minecraftforge.client.event.RenderPlayerEvent; +import net.minecraftforge.client.event.sound.PlaySoundEvent; +import net.minecraftforge.event.TickEvent; +import net.minecraftforge.event.entity.ProjectileImpactEvent; +import net.minecraftforge.event.entity.living.LivingAttackEvent; +import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.entity.*; +import net.mrscauthd.boss_tools.events.forgeevents.RenderHandItemEvent; +import net.mrscauthd.boss_tools.events.forgeevents.SetupLivingBipedAnimEvent; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId) +public class Events { + + @SubscribeEvent + public static void onPlayerTick(TickEvent.PlayerTickEvent event) { + if (event.phase == TickEvent.Phase.END) { + PlayerEntity player = event.player; + World world = player.world; + + //Lander Teleport System + if (player.getRidingEntity() instanceof LanderEntity) { + Methodes.landerTeleportOrbit(player, world); + } + + //Planet Gui Open + Methodes.openPlanetGui(player); + + //Oxygen System + OxygenSystem.OxygenSystem(player); + + //Gravity Methode Call + Gravity.Gravity(player, Gravity.GravityType.PLAYER, world); + + //Drop Off Hand Item + Methodes.DropRocket(player); + + //Player orbit Fall Teleport + if (player.getPosY() < 1 && !(player.getRidingEntity() instanceof LanderEntity)) { + Methodes.playerFalltoPlanet(world, player); + } + } + } + + @SubscribeEvent + public static void onLivingEntityTick(LivingEvent.LivingUpdateEvent event) { + LivingEntity entity = event.getEntityLiving(); + World world = entity.world; + + Methodes.EntityOxygen(entity,world); + + //Gravity Methode Call + Gravity.Gravity(entity, Gravity.GravityType.LIVING, world); + + //Venus Rain + Methodes.VenusRain(entity, new ResourceLocation(BossToolsMod.ModId, "venus")); + + //Venus Fire + Methodes.VenusFire(entity, new ResourceLocation(BossToolsMod.ModId, "venus"), new ResourceLocation(BossToolsMod.ModId, "mercury")); + } + + @OnlyIn(Dist.CLIENT) + @SubscribeEvent + public static void CameraPos(EntityViewRenderEvent.CameraSetup event) { + Entity ridding = event.getInfo().getRenderViewEntity().getRidingEntity(); + + if (Methodes.isRocket(ridding) || ridding instanceof LanderEntity) { + PointOfView pointOfView = Minecraft.getInstance().gameSettings.getPointOfView(); + + if (pointOfView.equals(PointOfView.THIRD_PERSON_FRONT) || pointOfView.equals(PointOfView.THIRD_PERSON_BACK)) { + event.getInfo().movePosition(-event.getInfo().calcCameraDistance(9d), 0d, 0); + } + } + } + + @OnlyIn(Dist.CLIENT) + @SubscribeEvent + public static void render(RenderPlayerEvent event) { + if (event.getEntity().getRidingEntity() instanceof LanderEntity) { + event.setCanceled(true); + } + } + + @OnlyIn(Dist.CLIENT) + @SubscribeEvent + public static void setupPlayerAngles(SetupLivingBipedAnimEvent.Post event) { + if (event.getLivingEntity() instanceof PlayerEntity) { + PlayerEntity player = (PlayerEntity) event.getLivingEntity(); + BipedModel model = event.getModel(); + + //Player Rocket Sit Rotations + if (Methodes.isRocket(player.getRidingEntity())) { + model.bipedRightLeg.rotateAngleX = (float) Math.toRadians(0F); + model.bipedLeftLeg.rotateAngleX = (float) Math.toRadians(0F); + model.bipedLeftLeg.rotateAngleY = (float) Math.toRadians(3F); + model.bipedRightLeg.rotateAngleY = (float) Math.toRadians(3F); + // Arms + model.bipedLeftArm.rotateAngleX = -0.07f; + model.bipedRightArm.rotateAngleX = -0.07f; + } + + //Player Hold Vehicles Rotation + if (!Methodes.isRocket(player.getRidingEntity())) { + Item item1 = player.getHeldItemMainhand().getItem(); + Item item2 = player.getHeldItemOffhand().getItem(); + if (item1 == ModInnet.TIER_1_ROCKET_ITEM.get() + || item1 == ModInnet.TIER_2_ROCKET_ITEM.get() + || item1 == ModInnet.TIER_3_ROCKET_ITEM.get() + || item1 == ModInnet.ROVER_ITEM.get() + //Off Hand + || item2 == ModInnet.TIER_1_ROCKET_ITEM.get() + || item2 == ModInnet.TIER_2_ROCKET_ITEM.get() + || item2 == ModInnet.TIER_3_ROCKET_ITEM.get() + || item2 == ModInnet.ROVER_ITEM.get()) { + model.bipedRightArm.rotateAngleX = 10; + model.bipedLeftArm.rotateAngleX = 10; + model.bipedLeftArm.rotateAngleZ = 0; + model.bipedRightArm.rotateAngleZ = 0; + model.bipedRightArm.rotateAngleY = 0; + model.bipedLeftArm.rotateAngleY = 0; + } + } + } + } + + @OnlyIn(Dist.CLIENT) + @SubscribeEvent + public static void ItemRender(RenderHandItemEvent.Pre event) { + if (event.getLivingEntity() instanceof PlayerEntity) { + PlayerEntity player = (PlayerEntity) event.getLivingEntity(); + + if (Methodes.isRocket(player.getRidingEntity())) { + event.setCanceled(true); + } + + Item item1 = player.getHeldItemMainhand().getItem(); + Item item2 = player.getHeldItemOffhand().getItem(); + + if (item1 == ModInnet.TIER_1_ROCKET_ITEM.get() + || item1 == ModInnet.TIER_2_ROCKET_ITEM.get() + || item1 == ModInnet.TIER_3_ROCKET_ITEM.get() + || item1 == ModInnet.ROVER_ITEM.get()) { + + if (event.getHandSide() == HandSide.LEFT) { + event.setCanceled(true); + } + + } + + if (item2 == ModInnet.TIER_1_ROCKET_ITEM.get() + || item2 == ModInnet.TIER_2_ROCKET_ITEM.get() + || item2 == ModInnet.TIER_3_ROCKET_ITEM.get() + || item2 == ModInnet.ROVER_ITEM.get()) { + + if (event.getHandSide() == HandSide.RIGHT) { + event.setCanceled(true); + } + + } + + } + } + + @SubscribeEvent + public static void onWorldTick(TickEvent.WorldTickEvent event) { + if (event.phase == TickEvent.Phase.END) { + World world = event.world; + RegistryKey world2 = world.getDimensionKey(); + if (world2 == RegistryKey.getOrCreateKey(Registry.WORLD_KEY, new ResourceLocation(BossToolsMod.ModId,"moon")) + || world2 == RegistryKey.getOrCreateKey(Registry.WORLD_KEY, new ResourceLocation(BossToolsMod.ModId,"moon_orbit")) + || world2 == RegistryKey.getOrCreateKey(Registry.WORLD_KEY, new ResourceLocation(BossToolsMod.ModId,"mars")) + || world2 == RegistryKey.getOrCreateKey(Registry.WORLD_KEY, new ResourceLocation(BossToolsMod.ModId,"mars_orbit")) + || world2 == RegistryKey.getOrCreateKey(Registry.WORLD_KEY, new ResourceLocation(BossToolsMod.ModId,"mercury")) + || world2 == RegistryKey.getOrCreateKey(Registry.WORLD_KEY, new ResourceLocation(BossToolsMod.ModId,"mercury_orbit")) + || world2 == RegistryKey.getOrCreateKey(Registry.WORLD_KEY, new ResourceLocation(BossToolsMod.ModId,"venus_orbit")) + || world2 == RegistryKey.getOrCreateKey(Registry.WORLD_KEY, new ResourceLocation(BossToolsMod.ModId,"overworld_orbit"))) { + world.thunderingStrength = 0; + world.rainingStrength = 0; + } + if (world2 == RegistryKey.getOrCreateKey(Registry.WORLD_KEY, new ResourceLocation(BossToolsMod.ModId,"venus"))) { + world.thunderingStrength = 0; + } + } + } + + @SubscribeEvent + public static void onEntityAttacked(LivingAttackEvent event) { + if (event != null && event.getEntity() instanceof PlayerEntity) { + PlayerEntity entity = (PlayerEntity) event.getEntity(); + + if (Methodes.nethriteSpaceSuitCheck(entity)) { + if (event.getSource().isFireDamage()) { + entity.forceFireTicks(0); + event.setCanceled(true); + } + } + } + } + + @SubscribeEvent + public static void FishingBobberTick(ProjectileImpactEvent.FishingBobber event) { + if (event.getRayTraceResult().getType() == RayTraceResult.Type.ENTITY) { + Entity entity = ((EntityRayTraceResult) event.getRayTraceResult()).getEntity(); + if (Methodes.AllVehiclesOr(entity)) { + event.setCanceled(true); + } + + } + + } + + @OnlyIn(Dist.CLIENT) + @SubscribeEvent + public static void SpaceSounds(PlaySoundEvent event) { + if (Minecraft.getInstance().player != null && Minecraft.getInstance().player.world != null && Minecraft.getInstance().currentScreen == null && Methodes.isSpaceWorld(Minecraft.getInstance().player.world)) { + event.setResultSound(new SpaceSoundSystem(event.getSound())); + } + + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/events/Gravity.java b/src/main/java/net/mrscauthd/boss_tools/events/Gravity.java new file mode 100644 index 000000000..5bba3d0a3 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/events/Gravity.java @@ -0,0 +1,89 @@ +package net.mrscauthd.boss_tools.events; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.events.forgeevents.LivingGravityEvent; + +public class Gravity { + public static void Gravity(LivingEntity entity, GravityType type, World world) { + double moon = 0.03; + double mars = 0.04; + double mercury = 0.03; + double venus = 0.04; + double orbit = 0.02; + + if (Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId,"moon"))) { + gravityMath(type, entity, moon, -2.5f); + } + + if (Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId,"mars"))) { + gravityMath(type, entity, mars, -2.0f); + } + + if (Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId,"mercury"))) { + gravityMath(type, entity, mercury, -2.5f); + } + + if (Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId,"venus"))) { + gravityMath(type, entity, venus, -2.0f); + } + + if (Methodes.isOrbitWorld(world)) { + gravityMath(type, entity, orbit, -2.5f); + } + } + + public enum GravityType { + PLAYER,LIVING + } + + public static boolean playerGravityCheck(PlayerEntity player) { + if (!player.abilities.isFlying && !player.isElytraFlying() && !player.isInWater() && !player.isInLava() && !player.hasNoGravity()) { + return true; + } + + return false; + } + + public static boolean livingGravityCheck(LivingEntity entity) { + if (!entity.isElytraFlying() && !entity.isInWater() && !entity.isInLava() && !entity.hasNoGravity() && !(entity instanceof PlayerEntity) && !Methodes.AllVehiclesOr(entity)) { + return true; + } + + return false; + } + + public static void gravityMath(GravityType type, LivingEntity entity, double gravity, float fallDistance) { + if (!checkType(type, entity)) { + return; + } + + if (MinecraftForge.EVENT_BUS.post(new LivingGravityEvent(entity))) { + return; + } + + entity.setMotion(entity.getMotion().getX(), entity.getMotion().getY() / 0.98 + 0.08 - gravity, entity.getMotion().getZ()); + fallDamage(entity, fallDistance); + } + + public static boolean checkType(GravityType type, LivingEntity entity) { + if (type == GravityType.PLAYER && playerGravityCheck((PlayerEntity) entity)) { + return true; + } else if (type == GravityType.LIVING && livingGravityCheck(entity)) { + return true; + } + + return false; + } + + public static void fallDamage (LivingEntity entity, float fallDistance) { + if (entity.getMotion().getY() < -0.1) { + entity.fallDistance = (float) entity.getMotion().getY() * fallDistance; + } + } + +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/events/Methodes.java b/src/main/java/net/mrscauthd/boss_tools/events/Methodes.java new file mode 100644 index 000000000..84058438b --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/events/Methodes.java @@ -0,0 +1,478 @@ +package net.mrscauthd.boss_tools.events; + +import io.netty.buffer.Unpooled; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.SpawnReason; +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.fluid.Fluid; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.server.SChangeGameStatePacket; +import net.minecraft.network.play.server.SPlayEntityEffectPacket; +import net.minecraft.network.play.server.SPlayerAbilitiesPacket; +import net.minecraft.potion.EffectInstance; +import net.minecraft.tags.EntityTypeTags; +import net.minecraft.tags.FluidTags; +import net.minecraft.util.RegistryKey; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.world.World; +import net.minecraft.world.gen.Heightmap; +import net.minecraft.world.gen.feature.template.PlacementSettings; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.network.NetworkHooks; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.registries.ForgeRegistries; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.capability.IOxygenStorage; +import net.mrscauthd.boss_tools.capability.OxygenUtil; +import net.mrscauthd.boss_tools.entity.*; +import net.mrscauthd.boss_tools.events.forgeevents.LivingSetFireInHotPlanetEvent; +import net.mrscauthd.boss_tools.events.forgeevents.LivingSetVenusRainEvent; +import net.mrscauthd.boss_tools.gui.screens.planetselection.PlanetSelectionGui; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class Methodes { + + public static void worldTeleport(PlayerEntity entity, ResourceLocation Planet, double high) { + if (!entity.world.isRemote) { + + RegistryKey destinationType = RegistryKey.getOrCreateKey(Registry.WORLD_KEY, Planet); + ServerWorld nextWorld = entity.getServer().getWorld(destinationType); + + if (nextWorld != null) { + ((ServerPlayerEntity) entity).connection.sendPacket(new SChangeGameStatePacket(SChangeGameStatePacket.field_241768_e_, 0)); + ((ServerPlayerEntity) entity).teleport(nextWorld, entity.getPosX(), high, entity.getPosZ(), entity.rotationYaw, entity.rotationPitch); + ((ServerPlayerEntity) entity).connection.sendPacket(new SPlayerAbilitiesPacket(entity.abilities)); + + for (EffectInstance effectinstance : entity.getActivePotionEffects()) { + ((ServerPlayerEntity) entity).connection.sendPacket(new SPlayEntityEffectPacket(entity.getEntityId(), effectinstance)); + } + } + } + } + + public static boolean nethriteSpaceSuitCheck(LivingEntity entity) { + Boolean item3 = checkArmor(entity, 3, ModInnet.NETHERITE_OXYGEN_MASK.get()); + Boolean item2 = checkArmor(entity, 2, ModInnet.NETHERITE_SPACE_SUIT.get()); + Boolean item1 = checkArmor(entity, 1, ModInnet.NETHERITE_SPACE_PANTS.get()); + Boolean item0 = checkArmor(entity, 0, ModInnet.NETHERITE_SPACE_BOOTS.get()); + + if (item0 && item1 && item2 && item3) { + return true; + } + return false; + } + + public static boolean spaceSuitCheck(LivingEntity entity) { + Boolean item3 = checkArmor(entity, 3, ModInnet.OXYGEN_MASK.get()); + Boolean item2 = checkArmor(entity, 2, ModInnet.SPACE_SUIT.get()); + Boolean item1 = checkArmor(entity, 1, ModInnet.SPACE_PANTS.get()); + Boolean item0 = checkArmor(entity, 0, ModInnet.SPACE_BOOTS.get()); + + if (item0 && item1 && item2 && item3) { + return true; + } + return false; + } + + public static boolean spaceSuitCheckBoth(LivingEntity entity) { + Boolean item3 = checkArmor(entity, 3, ModInnet.OXYGEN_MASK.get()); + Boolean item2 = checkArmor(entity, 2, ModInnet.SPACE_SUIT.get()); + Boolean item1 = checkArmor(entity, 1, ModInnet.SPACE_PANTS.get()); + Boolean item0 = checkArmor(entity, 0, ModInnet.SPACE_BOOTS.get()); + + Boolean item3_2 = checkArmor(entity, 3, ModInnet.NETHERITE_OXYGEN_MASK.get()); + Boolean item2_2 = checkArmor(entity, 2, ModInnet.NETHERITE_SPACE_SUIT.get()); + Boolean item1_2 = checkArmor(entity, 1, ModInnet.NETHERITE_SPACE_PANTS.get()); + Boolean item0_2 = checkArmor(entity, 0, ModInnet.NETHERITE_SPACE_BOOTS.get()); + + Boolean check3 = false; + Boolean check2 = false; + Boolean check1 = false; + Boolean check0 = false; + + if (item3 || item3_2) { + check3 = true; + } + if (item2 || item2_2) { + check2 = true; + } + if (item1 || item1_2) { + check1 = true; + } + if (item0 || item0_2) { + check0 = true; + } + + if (check0 && check1 && check2 && check3) { + return true; + } + + return false; + } + + public static boolean checkArmor(LivingEntity entity,int number, Item item) { + if (entity.getItemStackFromSlot(EquipmentSlotType.fromSlotTypeAndIndex(EquipmentSlotType.Group.ARMOR, number)).getItem() == item) { + return true; + } + return false; + } + + public static boolean isSpaceWorld(World world) { + if (Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId,"moon")) + || Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId,"moon_orbit")) + || Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId,"mars")) + || Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId,"mars_orbit")) + || Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId,"mercury")) + || Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId,"mercury_orbit")) + || Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId,"venus")) + || Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId,"venus_orbit")) + || Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId,"overworld_orbit"))) { + return true; + } + return false; + } + + public static boolean isOrbitWorld(World world) { + if (Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId,"overworld_orbit")) + || Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId,"moon_orbit")) + || Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId,"mars_orbit")) + || Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId,"mercury_orbit")) + || Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId,"venus_orbit"))) { + return true; + } + return false; + } + + public static boolean isWorld(World world, ResourceLocation loc) { + RegistryKey world2 = world.getDimensionKey(); + if (world2 == RegistryKey.getOrCreateKey(Registry.WORLD_KEY, loc)) { + return true; + } + return false; + } + + public static void OxygenDamage(LivingEntity entity) { + entity.attackEntityFrom(ModInnet.DAMAGE_SOURCE_OXYGEN, 1.0F); + } + + public static boolean isRocket(Entity entity) { + if (entity instanceof RocketTier1Entity || entity instanceof RocketTier2Entity || entity instanceof RocketTier3Entity) { + return true; + } + return false; + } + + public static boolean AllVehiclesOr(Entity entity) { + if (entity instanceof RocketTier1Entity || entity instanceof RocketTier2Entity || entity instanceof RocketTier3Entity || entity instanceof LanderEntity || entity instanceof RoverEntity) { + return true; + } + return false; + } + + public static void RocketSounds(Entity entity, World world) { + world.playMovingSound(null, entity, ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation(BossToolsMod.ModId,"rocket_fly")), SoundCategory.NEUTRAL,1,1); + } + + public static void DropRocket(PlayerEntity player) { + Item item1 = player.getHeldItemMainhand().getItem(); + Item item2 = player.getHeldItemOffhand().getItem(); + + List items = new ArrayList(); + + items.add(ModInnet.TIER_1_ROCKET_ITEM.get()); + items.add(ModInnet.TIER_2_ROCKET_ITEM.get()); + items.add(ModInnet.TIER_3_ROCKET_ITEM.get()); + items.add(ModInnet.ROVER_ITEM.get()); + + if (items.contains(item1) && items.contains(item2)) { + + ItemEntity spawn = new ItemEntity(player.world, player.getPosX(),player.getPosY(),player.getPosZ(), new ItemStack(item2)); + spawn.setPickupDelay(0); + player.world.addEntity(spawn); + + player.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).ifPresent(capability -> { + capability.extractItem(40, 1, false); //40 is offhand + }); + + } + } + + /**If a entity should not get Fire add it to the Tag "venus_fire"*/ + public static void VenusFire(LivingEntity entity, ResourceLocation planet1, ResourceLocation planet2) { + + RegistryKey key = entity.world.getDimensionKey(); + + if (key == RegistryKey.getOrCreateKey(Registry.WORLD_KEY, planet1) || key == RegistryKey.getOrCreateKey(Registry.WORLD_KEY, planet2)) { + if (!Methodes.nethriteSpaceSuitCheck(entity)) { + if (!MinecraftForge.EVENT_BUS.post(new LivingSetFireInHotPlanetEvent(entity))) { + if (!tagCheck(entity, BossToolsMod.ModId + ":entities/venus_fire")) { + + entity.setFire(10); + } + } + } + } + } + + /**If a entity should not get Damage add it to the Tag "venus_rain", and if you has a Entity like a car return the damage to false*/ + public static void VenusRain(LivingEntity entity, ResourceLocation planet) { + if (entity.world.getDimensionKey() == RegistryKey.getOrCreateKey(Registry.WORLD_KEY, planet)) { + if (entity.world.getWorldInfo().isRaining() && entity.world.getHeight(Heightmap.Type.MOTION_BLOCKING_NO_LEAVES, (int) Math.floor(entity.getPosX()), (int) Math.floor(entity.getPosZ())) <= Math.floor(entity.getPosY()) + 1) { + if (!MinecraftForge.EVENT_BUS.post(new LivingSetVenusRainEvent(entity))) { + if (!tagCheck(entity,BossToolsMod.ModId + ":entities/venus_rain")) { + + entity.attackEntityFrom(ModInnet.DAMAGE_SOURCE_ACID_RAIN, 1); + } + } + } + } + + } + + /**IF a entity should get oxygen damage add it in the tag "oxygen" (don't add the Player, he have a own oxygen system)*/ + public static void EntityOxygen(LivingEntity entity, World world) { + if (Config.EntityOxygenSystem && Methodes.isSpaceWorld(world) && tagCheck(entity,"boss_tools:entities/oxygen")) { + + if (!entity.isPotionActive(ModInnet.OXYGEN_EFFECT.get())) { + + entity.getPersistentData().putDouble(BossToolsMod.ModId + ":oxygen_tick", entity.getPersistentData().getDouble(BossToolsMod.ModId + ":oxygen_tick") + 1); + + if (entity.getPersistentData().getDouble(BossToolsMod.ModId + ":oxygen_tick") > 15) { + + if(!world.isRemote) { + Methodes.OxygenDamage(entity); + } + + entity.getPersistentData().putDouble(BossToolsMod.ModId + ":oxygen_tick", 0); + } + } + } + } + + public static void vehicleRotation(LivingEntity vehicle, float roation) { + vehicle.rotationYaw = vehicle.rotationYaw + roation; + vehicle.setRenderYawOffset(vehicle.rotationYaw); + vehicle.prevRotationYaw = vehicle.rotationYaw; + vehicle.prevRenderYawOffset = vehicle.rotationYaw; + } + + public static void noFuelMessage(PlayerEntity player) { + if (!player.world.isRemote()) { + player.sendStatusMessage(new StringTextComponent("\u00A7cNO FUEL! \u00A77Fill the Rocket with \u00A7cFuel\u00A77. (\u00A76Sneak and Right Click\u00A77)"), false); + } + } + + public static boolean tagCheck(Entity entity, String tag) { + if (EntityTypeTags.getCollection().getTagByID(new ResourceLocation((tag).toLowerCase(java.util.Locale.ENGLISH))).contains(entity.getType())) { + return true; + } + return false; + } + + public static boolean tagCheck(Fluid fluid, ResourceLocation tag) { + if (FluidTags.getCollection().getTagByID(tag).contains(fluid)) { + return true; + } + return false; + } + + public static void landerTeleport(PlayerEntity player, ResourceLocation newPlanet) { + LanderEntity lander = (LanderEntity) player.getRidingEntity(); + + if (player.getPosY() < 1) { + + ItemStack slot_0 = lander.getInventory().getStackInSlot(0); + ItemStack slot_1 = lander.getInventory().getStackInSlot(1); + lander.remove(); + + Methodes.worldTeleport(player, newPlanet, 700); + + World newWorld = player.world; + + if (!player.world.isRemote()) { + LanderEntity entityToSpawn = new LanderEntity((EntityType) ModInnet.LANDER.get(), newWorld); + entityToSpawn.setLocationAndAngles(player.getPosX(), player.getPosY(), player.getPosZ(), 0, 0); + entityToSpawn.onInitialSpawn((ServerWorld) newWorld, newWorld.getDifficultyForLocation(entityToSpawn.getPosition()), SpawnReason.MOB_SUMMONED, null, null); + newWorld.addEntity(entityToSpawn); + + entityToSpawn.getInventory().setStackInSlot(0, slot_0); + entityToSpawn.getInventory().setStackInSlot(1, slot_1); + + player.startRiding(entityToSpawn); + } + } + } + + public static void rocketTeleport(PlayerEntity player, ResourceLocation planet, ItemStack rocketItem, Boolean SpaceStation) { + RegistryKey dim = player.world.getDimensionKey(); + + if (dim != RegistryKey.getOrCreateKey(Registry.WORLD_KEY, planet)) { + Methodes.worldTeleport(player, planet, 700); + } else { + player.setPositionAndUpdate(player.getPosX(), 700, player.getPosZ()); + + if (player instanceof ServerPlayerEntity) { + ((ServerPlayerEntity) player).connection.setPlayerLocation(player.getPosX(), 700, player.getPosZ(), player.rotationYaw, player.rotationPitch); + } + } + + World world = player.world; + + if (!world.isRemote()) { + LanderEntity landerSpawn = new LanderEntity((EntityType) ModInnet.LANDER.get(), world); + landerSpawn.setLocationAndAngles(player.getPosX(), player.getPosY(), player.getPosZ(), 0, 0); + landerSpawn.onInitialSpawn((ServerWorld) world, world.getDifficultyForLocation(landerSpawn.getPosition()), SpawnReason.MOB_SUMMONED, null, null); + world.addEntity(landerSpawn); + + String itemId = player.getPersistentData().getString(BossToolsMod.ModId + ":slot0"); + + landerSpawn.getInventory().setStackInSlot(0, new ItemStack(ForgeRegistries.ITEMS.getValue(new ResourceLocation(itemId)), 1)); + landerSpawn.getInventory().setStackInSlot(1, rocketItem); + + if (SpaceStation) { + createSpaceStation(player, (ServerWorld) world); + } + + cleanUpPlayerNBT(player); + + player.startRiding(landerSpawn); + } + } + + public static void createSpaceStation(PlayerEntity player, ServerWorld serverWorld) { + BlockPos pos = new BlockPos(player.getPosX() - 15.5, 100, player.getPosZ() - 15.5); + serverWorld.getStructureTemplateManager().getTemplate(new ResourceLocation(BossToolsMod.ModId, "space_station")).func_237144_a_(serverWorld, pos, new PlacementSettings(), serverWorld.rand); + } + + public static void cleanUpPlayerNBT(PlayerEntity player) { + player.getPersistentData().putBoolean(BossToolsMod.ModId + ":planet_selection_gui_open", false); + player.getPersistentData().putString(BossToolsMod.ModId + ":rocket_type", ""); + player.getPersistentData().putString(BossToolsMod.ModId + ":slot0", ""); + } + + public static void openPlanetGui(PlayerEntity player) { + if (!(player.openContainer instanceof PlanetSelectionGui.GuiContainer) && player.getPersistentData().getBoolean(BossToolsMod.ModId + ":planet_selection_gui_open")) { + if (player instanceof ServerPlayerEntity) { + + NetworkHooks.openGui((ServerPlayerEntity) player, new INamedContainerProvider() { + @Override + public ITextComponent getDisplayName() { + return new StringTextComponent("Planet Selection"); + } + + @Override + public Container createMenu(int id, PlayerInventory inventory, PlayerEntity player) { + PacketBuffer packetBuffer = new PacketBuffer(Unpooled.buffer()); + packetBuffer.writeString(player.getPersistentData().getString(BossToolsMod.ModId + ":rocket_type")); + return new PlanetSelectionGui.GuiContainer(id, inventory, packetBuffer); + } + }, buf -> { + buf.writeString(player.getPersistentData().getString(BossToolsMod.ModId + ":rocket_type")); + }); + } + } + } + + public static void teleportButton (PlayerEntity player, ResourceLocation planet, Boolean SpaceStation) { + ItemStack itemStack = new ItemStack(Items.AIR, 1); + + if (player.getPersistentData().getString(BossToolsMod.ModId + ":rocket_type").equals("entity." + BossToolsMod.ModId + ".rocket_t1")) { + itemStack = new ItemStack(ModInnet.TIER_1_ROCKET_ITEM.get(),1); + } + if (player.getPersistentData().getString(BossToolsMod.ModId + ":rocket_type").equals("entity." + BossToolsMod.ModId + ".rocket_t2")) { + itemStack = new ItemStack(ModInnet.TIER_2_ROCKET_ITEM.get(),1); + } + if (player.getPersistentData().getString(BossToolsMod.ModId + ":rocket_type").equals("entity." + BossToolsMod.ModId + ".rocket_t3")) { + itemStack = new ItemStack(ModInnet.TIER_3_ROCKET_ITEM.get(),1); + } + + Methodes.rocketTeleport(player, planet, itemStack, SpaceStation); + } + + public static void landerTeleportOrbit(PlayerEntity player, World world) { + if (Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId, "overworld_orbit"))) { + Methodes.landerTeleport(player, new ResourceLocation("minecraft:overworld")); + } + if (Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId, "moon_orbit"))) { + Methodes.landerTeleport(player, new ResourceLocation(BossToolsMod.ModId, "moon")); + } + if (Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId, "mars_orbit"))) { + Methodes.landerTeleport(player, new ResourceLocation(BossToolsMod.ModId, "mars")); + } + if (Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId, "mercury_orbit"))) { + Methodes.landerTeleport(player, new ResourceLocation(BossToolsMod.ModId, "mercury")); + } + if (Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId, "venus_orbit"))) { + Methodes.landerTeleport(player, new ResourceLocation(BossToolsMod.ModId, "venus")); + } + } + + public static void playerFalltoPlanet(World world, PlayerEntity player) { + RegistryKey world2 = world.getDimensionKey(); + + if (world2 == RegistryKey.getOrCreateKey(Registry.WORLD_KEY, new ResourceLocation(BossToolsMod.ModId, "overworld_orbit"))) { + ResourceLocation planet = new ResourceLocation("overworld"); + Methodes.worldTeleport(player, planet, 450); + } + + if (world2 == RegistryKey.getOrCreateKey(Registry.WORLD_KEY, new ResourceLocation(BossToolsMod.ModId, "moon_orbit"))) { + ResourceLocation planet = new ResourceLocation(BossToolsMod.ModId, "moon"); + Methodes.worldTeleport(player, planet, 450); + } + + if (world2 == RegistryKey.getOrCreateKey(Registry.WORLD_KEY, new ResourceLocation(BossToolsMod.ModId, "mars_orbit"))) { + ResourceLocation planet = new ResourceLocation(BossToolsMod.ModId, "mars"); + Methodes.worldTeleport(player, planet, 450); + } + + if (world2 == RegistryKey.getOrCreateKey(Registry.WORLD_KEY, new ResourceLocation(BossToolsMod.ModId, "mercury_orbit"))) { + ResourceLocation planet = new ResourceLocation(BossToolsMod.ModId, "mercury"); + Methodes.worldTeleport(player, planet, 450); + } + + if (world2 == RegistryKey.getOrCreateKey(Registry.WORLD_KEY, new ResourceLocation(BossToolsMod.ModId, "venus_orbit"))) { + ResourceLocation planet = new ResourceLocation(BossToolsMod.ModId, "venus"); + Methodes.worldTeleport(player, planet, 450); + } + } + + public static void extractArmorOxygenUsingTimer(ItemStack itemstack, PlayerEntity player) { + if (!player.abilities.isCreativeMode && !player.isSpectator() && Methodes.spaceSuitCheckBoth(player) && Config.PlayerOxygenSystem) { + IOxygenStorage oxygenStorage = OxygenUtil.getItemStackOxygenStorage(itemstack); + + CompoundNBT persistentData = player.getPersistentData(); + String key = BossToolsMod.ModId + ":oxygen_timer"; + int oxygenTimer = persistentData.getInt(key); + oxygenTimer++; + + if (oxygenStorage.getOxygenStored() > 0 && oxygenTimer > 3 && !player.isPotionActive(ModInnet.OXYGEN_EFFECT.get())) { + oxygenStorage.extractOxygen(1, false); + oxygenTimer = 0; + } + + persistentData.putInt(key, oxygenTimer); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/events/MobSpawnEvents.java b/src/main/java/net/mrscauthd/boss_tools/events/MobSpawnEvents.java new file mode 100644 index 000000000..798c08014 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/events/MobSpawnEvents.java @@ -0,0 +1,22 @@ +package net.mrscauthd.boss_tools.events; + +import net.minecraft.entity.EntityClassification; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.biome.MobSpawnInfo; +import net.minecraftforge.event.world.BiomeLoadingEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId) +public class MobSpawnEvents { + + @SubscribeEvent + public static void addLivingEntityToBiomes(BiomeLoadingEvent event) { + if (event.getName().equals(new ResourceLocation(BossToolsMod.ModId, "moon"))) { + event.getSpawns().getSpawner(EntityClassification.create("monster", "monster", 2, false , false, 128)).add(new MobSpawnInfo.Spawners(ModInnet.ALIEN_ZOMBIE.get(), 1, 1, 1)); + event.getSpawns().getSpawner(EntityClassification.create("monster", "monster", 4, false , false, 128)).add(new MobSpawnInfo.Spawners(ModInnet.STAR_CRAWLER.get(), 1, 1, 1)); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/events/OverlayEvents.java b/src/main/java/net/mrscauthd/boss_tools/events/OverlayEvents.java new file mode 100644 index 000000000..6177ccb59 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/events/OverlayEvents.java @@ -0,0 +1,269 @@ +package net.mrscauthd.boss_tools.events; + +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.IngameGui; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tags.FluidTags; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.IFormattableTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.event.TickEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.capability.CapabilityOxygen; +import net.mrscauthd.boss_tools.capability.IOxygenStorage; +import net.mrscauthd.boss_tools.entity.*; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; +import net.mrscauthd.boss_tools.gui.helper.GuiHelper; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId, value = Dist.CLIENT) +public class OverlayEvents { + + public static boolean check = false; + public static double counter = 0; + + @SubscribeEvent + public static void clientTick(TickEvent.ClientTickEvent event) { + if (event.phase == TickEvent.Phase.END) { + if (!check) { + counter = counter - 0.10; + if (counter < 0.2) { + check = true; + } + } + if (check) { + counter = counter + 0.10; + if (counter > 1) { + check = false; + } + } + } + } + + public static void startOverlaySettings() { + RenderSystem.disableDepthTest(); + RenderSystem.depthMask(false); + RenderSystem.disableBlend(); + RenderSystem.disableAlphaTest(); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + public static void stopOverlaySettings() { + RenderSystem.enableDepthTest(); + RenderSystem.depthMask(true); + RenderSystem.enableBlend(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + RenderSystem.enableAlphaTest(); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + @SuppressWarnings("resource") + @SubscribeEvent(priority = EventPriority.HIGH) + public static void Overlay(RenderGameOverlayEvent event) { + + /**Disable Food Overlay*/ + if (event.getType() == RenderGameOverlayEvent.ElementType.HEALTHMOUNT) { + PlayerEntity entity = Minecraft.getInstance().player; + if (Methodes.AllVehiclesOr(entity.getRidingEntity())) { + event.setCanceled(true); + } + } + + /**Lander Warning Overlay*/ + if (!event.isCancelable() && event.getType() == RenderGameOverlayEvent.ElementType.HELMET) { + PlayerEntity entity = Minecraft.getInstance().player; + + startOverlaySettings(); + + if (entity.getRidingEntity() instanceof LanderEntity && !entity.getRidingEntity().isOnGround() && !entity.areEyesInFluid(FluidTags.WATER)) { + + RenderSystem.color4f((float) counter, (float) counter, (float) counter, (float) counter); + + Minecraft.getInstance().getTextureManager().bindTexture(new ResourceLocation(BossToolsMod.ModId, "textures/overlay/warning.png")); + Minecraft.getInstance().ingameGUI.blit(event.getMatrixStack(), 0, 0, 0, 0, event.getWindow().getScaledWidth(), event.getWindow().getScaledHeight(), event.getWindow().getScaledWidth(), event.getWindow().getScaledHeight()); + } + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + + if (entity.getRidingEntity() instanceof LanderEntity && !entity.getRidingEntity().isOnGround() && !entity.areEyesInFluid(FluidTags.WATER)) { + + double speed = Math.round(100.0 * (entity.getRidingEntity()).getMotion().getY()) / 100.0; + double speedcheck = speed; + + Minecraft.getInstance().fontRenderer.drawString(event.getMatrixStack(), "" + speedcheck + " Speed", event.getWindow().getScaledWidth() / 2 - 29, event.getWindow().getScaledHeight() / 2 / 2.3f, -3407872); + } + + stopOverlaySettings(); + } + + /**Rocket Timer*/ + if (!event.isCancelable() && event.getType() == RenderGameOverlayEvent.ElementType.HELMET) { + PlayerEntity entity = Minecraft.getInstance().player; + + startOverlaySettings(); + + if (Methodes.isRocket(entity.getRidingEntity())) { + int timer = 0; + + if (entity.getRidingEntity() instanceof RocketTier1Entity) { + timer = entity.getRidingEntity().getDataManager().get(RocketTier1Entity.START_TIMER); + } + + if (entity.getRidingEntity() instanceof RocketTier2Entity) { + timer = entity.getRidingEntity().getDataManager().get(RocketTier2Entity.START_TIMER); + } + + if (entity.getRidingEntity() instanceof RocketTier3Entity) { + timer = entity.getRidingEntity().getDataManager().get(RocketTier3Entity.START_TIMER); + } + + int width = event.getWindow().getScaledWidth() / 2 - 31; + int high = event.getWindow().getScaledHeight() / 2 / 2; + + IngameGui mc = Minecraft.getInstance().ingameGUI; + TextureManager manager = Minecraft.getInstance().textureManager; + + if (timer > -1 && timer < 20) { + manager.bindTexture(new ResourceLocation(BossToolsMod.ModId, "textures/timer/timer10.png")); + mc.blit(event.getMatrixStack(), width, high, 0, 0, 60, 38, 60, 38); + } + if (timer > 20 && timer < 40) { + manager.bindTexture(new ResourceLocation(BossToolsMod.ModId, "textures/timer/timer9.png")); + mc.blit(event.getMatrixStack(), width, high, 0, 0, 60, 38, 60, 38); + } + if (timer > 40 && timer < 60) { + manager.bindTexture(new ResourceLocation(BossToolsMod.ModId, "textures/timer/timer8.png")); + mc.blit(event.getMatrixStack(), width, high, 0, 0, 60, 38, 60, 38); + } + if (timer > 60 && timer < 80) { + manager.bindTexture(new ResourceLocation(BossToolsMod.ModId, "textures/timer/timer7.png")); + mc.blit(event.getMatrixStack(), width, high, 0, 0, 60, 38, 60, 38); + } + if (timer > 80 && timer < 100) { + manager.bindTexture(new ResourceLocation(BossToolsMod.ModId, "textures/timer/timer6.png")); + mc.blit(event.getMatrixStack(), width, high, 0, 0, 60, 38, 60, 38); + } + if (timer > 100 && timer < 120) { + manager.bindTexture(new ResourceLocation(BossToolsMod.ModId, "textures/timer/timer5.png")); + mc.blit(event.getMatrixStack(), width, high, 0, 0, 60, 38, 60, 38); + } + if (timer > 120 && timer < 140) { + manager.bindTexture(new ResourceLocation(BossToolsMod.ModId, "textures/timer/timer4.png")); + mc.blit(event.getMatrixStack(), width, high, 0, 0, 60, 38, 60, 38); + } + if (timer > 140 && timer < 160) { + manager.bindTexture(new ResourceLocation(BossToolsMod.ModId, "textures/timer/timer3.png")); + mc.blit(event.getMatrixStack(), width, high, 0, 0, 60, 38, 60, 38); + } + if (timer > 160 && timer < 180) { + manager.bindTexture(new ResourceLocation(BossToolsMod.ModId, "textures/timer/timer2.png")); + mc.blit(event.getMatrixStack(), width, high, 0, 0, 60, 38, 60, 38); + } + if (timer > 180 && timer < 200) { + manager.bindTexture(new ResourceLocation(BossToolsMod.ModId, "textures/timer/timer1.png")); + mc.blit(event.getMatrixStack(), width, high, 0, 0, 60, 38, 60, 38); + } + + } + stopOverlaySettings(); + } + + /**Oxygen Tank Overlay*/ + if (!event.isCancelable() && event.getType() == RenderGameOverlayEvent.ElementType.HELMET) { + + PlayerEntity entity = Minecraft.getInstance().player; + ItemStack chest = entity.getItemStackFromSlot(EquipmentSlotType.CHEST); + Item chestItem = chest.getItem(); + + startOverlaySettings(); + + if (chestItem == ModInnet.SPACE_SUIT.get() || chestItem == ModInnet.NETHERITE_SPACE_SUIT.get()) { + + IOxygenStorage oxygenStorage = chest.getCapability(CapabilityOxygen.OXYGEN).orElse(null); + double oxygenStoredRatio = oxygenStorage != null ? oxygenStorage.getOxygenStoredRatio() : 0.0D; + ResourceLocation empty = new ResourceLocation(BossToolsMod.ModId, "textures/overlay/oxygentankcheck_empty.png"); + ResourceLocation full = new ResourceLocation(BossToolsMod.ModId, "textures/overlay/oxygentankcheck_full.png"); + + int x = 5; + int y = 5; + int width = 62; + int height = 52; + + GuiHelper.drawVerticalReverse(event.getMatrixStack(), x, y, width, height, empty, oxygenStoredRatio); + GuiHelper.drawVertical(event.getMatrixStack(), x, y, width, height, full, oxygenStoredRatio); + + IFormattableTextComponent text = GaugeTextHelper.getPercentText(GaugeValueHelper.getOxygen(oxygenStorage)).build(); + int textWidth = Minecraft.getInstance().fontRenderer.getStringPropertyWidth(text); + Minecraft.getInstance().fontRenderer.func_243246_a(event.getMatrixStack(), text, (x + (width - textWidth) / 2), y + height + 3, 0xFFFFFF); + } + + stopOverlaySettings(); + } + + /**ROCKET HIGH OVERLAY*/ + if (!event.isCancelable() && event.getType() == RenderGameOverlayEvent.ElementType.HELMET) { + + PlayerEntity entity = Minecraft.getInstance().player; + IngameGui mc = Minecraft.getInstance().ingameGUI; + TextureManager manager = Minecraft.getInstance().textureManager; + World world = Minecraft.getInstance().world; + + startOverlaySettings(); + + if (Methodes.isRocket(entity.getRidingEntity()) || entity.getRidingEntity() instanceof LanderEntity) { + int width = event.getWindow().getScaledWidth(); + int high = event.getWindow().getScaledHeight(); + + float yHeight = (float) entity.getPosY() / 5.3F; + + if (yHeight < 0) { + yHeight = 0; + } + + if (yHeight > 113) { + yHeight = 113; + } + + ResourceLocation planet; + + if (Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId, "moon"))) { + planet = new ResourceLocation(BossToolsMod.ModId, "textures/planet_bar/rocket_y_main_moon.png"); + + } else if (Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId, "mars"))) { + planet = new ResourceLocation(BossToolsMod.ModId, "textures/planet_bar/rocket_y_main_mars.png"); + + } else if (Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId, "mercury"))) { + planet = new ResourceLocation(BossToolsMod.ModId, "textures/planet_bar/rocket_y_main_mercury.png"); + + } else if (Methodes.isWorld(world, new ResourceLocation(BossToolsMod.ModId, "venus"))) { + planet = new ResourceLocation(BossToolsMod.ModId, "textures/planet_bar/rocket_y_main_venus.png"); + + } else if (Methodes.isOrbitWorld(world)) { + planet = new ResourceLocation(BossToolsMod.ModId, "textures/planet_bar/rocket_y_main_orbit.png"); + + } else { + planet = new ResourceLocation(BossToolsMod.ModId, "textures/planet_bar/rocket_y_main_earth.png"); + } + + manager.bindTexture(planet); + mc.blit(event.getMatrixStack(), 0, (high / 2) - 128 / 2, 0, 0, 16, 128, 16, 128); + + manager.bindTexture(new ResourceLocation(BossToolsMod.ModId, "textures/planet_bar/rocket_y.png")); + GuiHelper.blit(event.getMatrixStack(), 4, (high / 2) + (103 / 2) - yHeight, 0, 0, 8, 11, 8, 11); + } + stopOverlaySettings(); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/events/OxygenSystem.java b/src/main/java/net/mrscauthd/boss_tools/events/OxygenSystem.java new file mode 100644 index 000000000..4cf1ec542 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/events/OxygenSystem.java @@ -0,0 +1,43 @@ +package net.mrscauthd.boss_tools.events; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.capability.IOxygenStorage; +import net.mrscauthd.boss_tools.capability.OxygenUtil; + +public class OxygenSystem { + + public static void OxygenSystem(PlayerEntity entity) { + World world = entity.getEntityWorld(); + if (Config.PlayerOxygenSystem && Methodes.isSpaceWorld(world) && !entity.isSpectator() && !entity.abilities.isCreativeMode) { + + if (entity.getAir() < 1) { + Methodes.OxygenDamage(entity); + } + + if (Methodes.spaceSuitCheckBoth(entity)) { + + ItemStack itemstack = entity.getItemStackFromSlot(EquipmentSlotType.fromSlotTypeAndIndex(EquipmentSlotType.Group.ARMOR, 2)); + IOxygenStorage oxygenStorage = OxygenUtil.getItemStackOxygenStorage(itemstack); + + if (oxygenStorage.getOxygenStored() == 0) { + entity.setAir(-4); + } + + if (oxygenStorage.getOxygenStored() > 0 || entity.isPotionActive(ModInnet.OXYGEN_EFFECT.get()) || entity.getPersistentData().getBoolean(BossToolsMod.ModId + ":planet_selection_gui_open")) { + entity.setAir(300); + } + + } + + if (!Methodes.spaceSuitCheckBoth(entity)) { + entity.setAir(-4); + } + } + + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/events/SpaceSoundSystem.java b/src/main/java/net/mrscauthd/boss_tools/events/SpaceSoundSystem.java new file mode 100644 index 000000000..ce4e8b691 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/events/SpaceSoundSystem.java @@ -0,0 +1,87 @@ +package net.mrscauthd.boss_tools.events; + +import net.minecraft.client.audio.ISound; +import net.minecraft.client.audio.Sound; +import net.minecraft.client.audio.SoundEventAccessor; +import net.minecraft.client.audio.SoundHandler; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +import javax.annotation.Nullable; + +@OnlyIn(Dist.CLIENT) +public class SpaceSoundSystem implements ISound { + private final ISound delegate; + + public SpaceSoundSystem(ISound delegate) { + this.delegate = delegate; + } + + @Override + public ResourceLocation getSoundLocation() { + return delegate.getSoundLocation(); + } + + @Nullable + @Override + public SoundEventAccessor createAccessor(SoundHandler handler) { + return delegate.createAccessor(handler); + } + + @Override + public Sound getSound() { + return delegate.getSound(); + } + + @Override + public SoundCategory getCategory() { + return delegate.getCategory(); + } + + @Override + public boolean canRepeat() { + return delegate.canRepeat(); + } + + @Override + public boolean isGlobal() { + return delegate.isGlobal(); + } + + @Override + public int getRepeatDelay() { + return delegate.getRepeatDelay(); + } + + @Override + public float getVolume() { + return 0.09F; + } + + @Override + public float getPitch() { + return delegate.getPitch(); + } + + @Override + public double getX() { + return delegate.getX(); + } + + @Override + public double getY() { + return delegate.getY(); + } + + @Override + public double getZ() { + return delegate.getZ(); + } + + @Override + public AttenuationType getAttenuationType() { + return delegate.getAttenuationType(); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/events/forgeevents/ItemGravityEvent.java b/src/main/java/net/mrscauthd/boss_tools/events/forgeevents/ItemGravityEvent.java new file mode 100644 index 000000000..6f72f6fbd --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/events/forgeevents/ItemGravityEvent.java @@ -0,0 +1,17 @@ +package net.mrscauthd.boss_tools.events.forgeevents; + +import net.minecraft.entity.item.ItemEntity; +import net.minecraftforge.event.entity.item.ItemEvent; + +public class ItemGravityEvent extends ItemEvent { + + public ItemGravityEvent(ItemEntity itemEntity) { + super(itemEntity); + } + + @Override + public boolean isCancelable() { + return true; + } + +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/events/forgeevents/LivingGravityEvent.java b/src/main/java/net/mrscauthd/boss_tools/events/forgeevents/LivingGravityEvent.java new file mode 100644 index 000000000..8d63b1a15 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/events/forgeevents/LivingGravityEvent.java @@ -0,0 +1,17 @@ +package net.mrscauthd.boss_tools.events.forgeevents; + +import net.minecraft.entity.LivingEntity; +import net.minecraftforge.event.entity.living.LivingEvent; + +public class LivingGravityEvent extends LivingEvent { + + public LivingGravityEvent(LivingEntity entity) { + super(entity); + } + + @Override + public boolean isCancelable() { + return true; + } + +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/events/forgeevents/LivingSetFireInHotPlanetEvent.java b/src/main/java/net/mrscauthd/boss_tools/events/forgeevents/LivingSetFireInHotPlanetEvent.java new file mode 100644 index 000000000..608c3794e --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/events/forgeevents/LivingSetFireInHotPlanetEvent.java @@ -0,0 +1,17 @@ +package net.mrscauthd.boss_tools.events.forgeevents; + +import net.minecraft.entity.LivingEntity; +import net.minecraftforge.event.entity.living.LivingEvent; + +public class LivingSetFireInHotPlanetEvent extends LivingEvent { + + public LivingSetFireInHotPlanetEvent(LivingEntity entity) { + super(entity); + } + + @Override + public boolean isCancelable() { + return true; + } + +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/events/forgeevents/LivingSetVenusRainEvent.java b/src/main/java/net/mrscauthd/boss_tools/events/forgeevents/LivingSetVenusRainEvent.java new file mode 100644 index 000000000..2ec4c72a1 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/events/forgeevents/LivingSetVenusRainEvent.java @@ -0,0 +1,17 @@ +package net.mrscauthd.boss_tools.events.forgeevents; + +import net.minecraft.entity.LivingEntity; +import net.minecraftforge.event.entity.living.LivingEvent; + +public class LivingSetVenusRainEvent extends LivingEvent { + + public LivingSetVenusRainEvent(LivingEntity entity) { + super(entity); + } + + @Override + public boolean isCancelable() { + return true; + } + +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/events/forgeevents/RenderHandItemEvent.java b/src/main/java/net/mrscauthd/boss_tools/events/forgeevents/RenderHandItemEvent.java new file mode 100644 index 000000000..cb7fbbb4d --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/events/forgeevents/RenderHandItemEvent.java @@ -0,0 +1,84 @@ +package net.mrscauthd.boss_tools.events.forgeevents; + +import com.mojang.blaze3d.matrix.MatrixStack; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.model.ItemCameraTransforms; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.HandSide; +import net.minecraftforge.eventbus.api.Cancelable; +import net.minecraftforge.eventbus.api.Event; + +public class RenderHandItemEvent extends Event +{ + private LivingEntity livingEntity; + private ItemStack itemStack; + private final ItemCameraTransforms.TransformType transformType; + private HandSide handSide; + private final MatrixStack matrixStack; + private final IRenderTypeBuffer renderTypeBuffer; + private final int light; + + public RenderHandItemEvent(LivingEntity livingEntity, ItemStack itemStack, ItemCameraTransforms.TransformType transformType, HandSide handSide, MatrixStack matrixStack, IRenderTypeBuffer renderTypeBuffer, int light) + { + this.livingEntity = livingEntity; + this.itemStack = itemStack; + this.transformType = transformType; + this.handSide = handSide; + this.matrixStack = matrixStack; + this.renderTypeBuffer = renderTypeBuffer; + this.light = light; + } + + public LivingEntity getLivingEntity() + { + return this.livingEntity; + } + + public ItemStack getItemStack() + { + return this.itemStack; + } + + public ItemCameraTransforms.TransformType getTransformType() + { + return this.transformType; + } + + public HandSide getHandSide() + { + return this.handSide; + } + + public MatrixStack getMatrixStack() + { + return this.matrixStack; + } + + public IRenderTypeBuffer getRenderTypeBuffer() + { + return this.renderTypeBuffer; + } + + public int getLight() + { + return this.light; + } + + @Cancelable + public static class Pre extends RenderHandItemEvent + { + public Pre(LivingEntity livingEntity, ItemStack itemStack, ItemCameraTransforms.TransformType transformType, HandSide handSide, MatrixStack matrixStack, IRenderTypeBuffer renderTypeBuffer, int light) + { + super(livingEntity, itemStack, transformType, handSide, matrixStack, renderTypeBuffer, light); + } + } + + public static class Post extends RenderHandItemEvent + { + public Post(LivingEntity livingEntity, ItemStack itemStack, ItemCameraTransforms.TransformType transformType, HandSide handSide, MatrixStack matrixStack, IRenderTypeBuffer renderTypeBuffer, int light) + { + super(livingEntity, itemStack, transformType, handSide, matrixStack, renderTypeBuffer, light); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/events/forgeevents/SetupLivingBipedAnimEvent.java b/src/main/java/net/mrscauthd/boss_tools/events/forgeevents/SetupLivingBipedAnimEvent.java new file mode 100644 index 000000000..e9b4b999e --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/events/forgeevents/SetupLivingBipedAnimEvent.java @@ -0,0 +1,79 @@ +package net.mrscauthd.boss_tools.events.forgeevents; + +import net.minecraft.client.renderer.entity.model.BipedModel; +import net.minecraft.entity.LivingEntity; +import net.minecraftforge.eventbus.api.Cancelable; +import net.minecraftforge.eventbus.api.Event; + +public class SetupLivingBipedAnimEvent extends Event +{ + private LivingEntity livingEntity; + private BipedModel model; + private float limbSwing; + private float limbSwingAmount; + private float ageInTicks; + private float netHeadYaw; + private float headPitch; + + public SetupLivingBipedAnimEvent(LivingEntity livingEntity, BipedModel model, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) + { + this.livingEntity = livingEntity; + this.model = model; + this.limbSwing = limbSwing; + this.limbSwingAmount = limbSwingAmount; + this.ageInTicks = ageInTicks; + this.netHeadYaw = netHeadYaw; + this.headPitch = headPitch; + } + + public LivingEntity getLivingEntity() + { + return livingEntity; + } + + public BipedModel getModel() + { + return model; + } + + public float getLimbSwing() + { + return limbSwing; + } + + public float getLimbSwingAmount() + { + return limbSwingAmount; + } + + public float getAgeInTicks() + { + return ageInTicks; + } + + public float getNetHeadYaw() + { + return netHeadYaw; + } + + public float getHeadPitch() { + return headPitch; + } + + @Cancelable + public static class Pre extends SetupLivingBipedAnimEvent + { + public Pre(LivingEntity livingEntity, BipedModel model, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) + { + super(livingEntity, model, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch); + } + } + + public static class Post extends SetupLivingBipedAnimEvent + { + public Post(LivingEntity livingEntity, BipedModel model, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) + { + super(livingEntity, model, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/feature/DesertSurfaceBuilder.java b/src/main/java/net/mrscauthd/boss_tools/feature/DesertSurfaceBuilder.java new file mode 100644 index 000000000..fc7593443 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/feature/DesertSurfaceBuilder.java @@ -0,0 +1,79 @@ +package net.mrscauthd.boss_tools.feature; + +import com.mojang.serialization.Codec; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.IChunk; +import net.minecraft.world.gen.surfacebuilders.SurfaceBuilder; +import net.minecraft.world.gen.surfacebuilders.SurfaceBuilderConfig; +import net.mrscauthd.boss_tools.ModInnet; + +import java.util.Random; + +public class DesertSurfaceBuilder extends SurfaceBuilder { + public DesertSurfaceBuilder(Codec p_i232124_1_) { + super(p_i232124_1_); + } + + public void buildSurface(Random random, IChunk chunkIn, Biome biomeIn, int x, int z, int startHeight, double noise, BlockState defaultBlock, BlockState defaultFluid, int seaLevel, long seed, SurfaceBuilderConfig config) { + this.buildSurface(random, chunkIn, biomeIn, x, z, startHeight, noise, defaultBlock, defaultFluid, config.getTop(), config.getUnder(), config.getUnderWaterMaterial(), seaLevel); + } + + protected void buildSurface(Random random, IChunk chunkIn, Biome biomeIn, int x, int z, int startHeight, double noise, BlockState defaultBlock, BlockState defaultFluid, BlockState top, BlockState middle, BlockState bottom, int sealevel) { + BlockState blockstate = top; + BlockState blockstate1 = middle; + BlockPos.Mutable blockpos$mutable = new BlockPos.Mutable(); + int i = -1; + int j = (int)(noise / 3.0D + 3.0D + random.nextDouble() * 0.25D); + int k = x & 15; + int l = z & 15; + + for(int i1 = startHeight; i1 >= 0; --i1) { + blockpos$mutable.setPos(k, i1, l); + BlockState blockstate2 = chunkIn.getBlockState(blockpos$mutable); + if (blockstate2.isAir()) { + i = -1; + } else if (blockstate2.isIn(defaultBlock.getBlock())) { + if (i == -1) { + if (j <= 0) { + blockstate = Blocks.AIR.getDefaultState(); + blockstate1 = defaultBlock; + } else if (i1 >= sealevel - 4 && i1 <= sealevel + 1) { + blockstate = top; + blockstate1 = middle; + } + + if (i1 < sealevel && (blockstate == null || blockstate.isAir())) { + if (biomeIn.getTemperature(blockpos$mutable.setPos(x, i1, z)) < 0.15F) { + blockstate = Blocks.ICE.getDefaultState(); + } else { + blockstate = defaultFluid; + } + + blockpos$mutable.setPos(k, i1, l); + } + + i = j; + if (i1 >= sealevel - 1) { + chunkIn.setBlockState(blockpos$mutable, blockstate, false); + } else if (i1 < sealevel - 7 - j) { + blockstate = Blocks.AIR.getDefaultState(); + blockstate1 = defaultBlock; + chunkIn.setBlockState(blockpos$mutable, bottom, false); + } else { + chunkIn.setBlockState(blockpos$mutable, blockstate1, false); + } + } else if (i > 0) { + --i; + chunkIn.setBlockState(blockpos$mutable, blockstate1, false); + if (i == 0 && blockstate1.isIn(ModInnet.VENUS_SAND.get()) && j > 1) { + i = random.nextInt(4) + Math.max(0, i1 - 63); + blockstate1 = ModInnet.VENUS_SANDSTONE.get().getDefaultState(); + } + } + } + } + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/feature/MarsIceSpikeFeature.java b/src/main/java/net/mrscauthd/boss_tools/feature/MarsIceSpikeFeature.java new file mode 100644 index 000000000..e006a9d83 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/feature/MarsIceSpikeFeature.java @@ -0,0 +1,93 @@ +package net.mrscauthd.boss_tools.feature; + +import net.minecraft.world.gen.feature.NoFeatureConfig; +import net.minecraft.world.gen.feature.Feature; +import net.minecraft.world.gen.ChunkGenerator; +import net.minecraft.world.ISeedReader; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.BlockPos; +import net.minecraft.block.Blocks; +import net.minecraft.block.BlockState; +import net.minecraft.block.Block; + +import java.util.Random; + +import com.mojang.serialization.Codec; + +public class MarsIceSpikeFeature extends Feature { + public MarsIceSpikeFeature(Codec p_i231962_1_) { + super(p_i231962_1_); + } + + public boolean generate(ISeedReader reader, ChunkGenerator generator, Random rand, BlockPos pos, NoFeatureConfig config) { + while (reader.isAirBlock(pos) && pos.getY() > 2) { + pos = pos.down(); + } + if (true) { + pos = pos.up(rand.nextInt(4)); + int i = rand.nextInt(4) + 7; + int j = i / 4 + rand.nextInt(2); + if (j > 1 && rand.nextInt(60) == 0) { + pos = pos.up(10 + rand.nextInt(30)); + } + for (int k = 0; k < i; ++k) { + float f = (1.0F - (float) k / (float) i) * (float) j; + int l = MathHelper.ceil(f); + for (int i1 = -l; i1 <= l; ++i1) { + float f1 = (float) MathHelper.abs(i1) - 0.25F; + for (int j1 = -l; j1 <= l; ++j1) { + float f2 = (float) MathHelper.abs(j1) - 0.25F; + if ((i1 == 0 && j1 == 0 || !(f1 * f1 + f2 * f2 > f * f)) + && (i1 != -l && i1 != l && j1 != -l && j1 != l || !(rand.nextFloat() > 0.75F))) { + BlockState blockstate = reader.getBlockState(pos.add(i1, k, j1)); + Block block = blockstate.getBlock(); + if (blockstate.isAir(reader, pos.add(i1, k, j1)) || isDirt(block) || block == Blocks.SNOW_BLOCK || block == Blocks.ICE) { + this.setBlockState(reader, pos.add(i1, k, j1), Blocks.PACKED_ICE.getDefaultState()); + } + if (k != 0 && l > 1) { + blockstate = reader.getBlockState(pos.add(i1, -k, j1)); + block = blockstate.getBlock(); + if (blockstate.isAir(reader, pos.add(i1, -k, j1)) || isDirt(block) || block == Blocks.SNOW_BLOCK + || block == Blocks.ICE) { + this.setBlockState(reader, pos.add(i1, -k, j1), Blocks.PACKED_ICE.getDefaultState()); + } + } + } + } + } + } + int k1 = j - 1; + if (k1 < 0) { + k1 = 0; + } else if (k1 > 1) { + k1 = 1; + } + for (int l1 = -k1; l1 <= k1; ++l1) { + for (int i2 = -k1; i2 <= k1; ++i2) { + BlockPos blockpos = pos.add(l1, -1, i2); + int j2 = 50; + if (Math.abs(l1) == 1 && Math.abs(i2) == 1) { + j2 = rand.nextInt(5); + } + while (blockpos.getY() > 50) { + BlockState blockstate1 = reader.getBlockState(blockpos); + Block block1 = blockstate1.getBlock(); + if (!blockstate1.isAir(reader, blockpos) && !isDirt(block1) && block1 != Blocks.SNOW_BLOCK && block1 != Blocks.ICE + && block1 != Blocks.PACKED_ICE) { + break; + } + this.setBlockState(reader, blockpos, Blocks.PACKED_ICE.getDefaultState()); + blockpos = blockpos.down(); + --j2; + if (j2 <= 0) { + blockpos = blockpos.down(rand.nextInt(5) + 1); + j2 = rand.nextInt(5); + } + } + } + } + return true; + } + return false; + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/feature/VenusDeltas.java b/src/main/java/net/mrscauthd/boss_tools/feature/VenusDeltas.java new file mode 100644 index 000000000..a10e8642a --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/feature/VenusDeltas.java @@ -0,0 +1,125 @@ +package net.mrscauthd.boss_tools.feature; + +import net.minecraft.world.gen.feature.Feature; +import net.minecraft.world.gen.feature.ColumnConfig; +import net.minecraft.world.gen.ChunkGenerator; +import net.minecraft.world.IWorld; +import net.minecraft.world.ISeedReader; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.Direction; +import net.minecraft.block.Blocks; +import net.minecraft.block.BlockState; +import net.minecraft.block.Block; + +import javax.annotation.Nullable; + +import java.util.function.Supplier; +import java.util.Random; + +import com.mojang.serialization.Codec; + +import com.google.common.collect.ImmutableList; +import net.mrscauthd.boss_tools.ModInnet; + +public class VenusDeltas extends Feature implements Supplier { + private static final ImmutableList field_236245_a_ = ImmutableList.of(Blocks.LAVA, Blocks.BEDROCK, Blocks.MAGMA_BLOCK, Blocks.SOUL_SAND, Blocks.NETHER_BRICKS, Blocks.NETHER_BRICK_FENCE, Blocks.NETHER_BRICK_STAIRS, Blocks.NETHER_WART, Blocks.CHEST, Blocks.SPAWNER, Blocks.LIGHT_BLUE_STAINED_GLASS); + public VenusDeltas(Codec codec) { + super(codec); + } + + public boolean generate(ISeedReader reader, ChunkGenerator generator, Random rand, BlockPos pos, ColumnConfig config) { + int i = generator.getSeaLevel(); + if (!func_242762_a(reader, i, pos.toMutable())) { + return false; + } else { + int j = config.func_242795_b().func_242259_a(rand); + boolean flag = rand.nextFloat() < 0.9F; + int k = Math.min(j, flag ? 5 : 8); + int l = flag ? 50 : 15; + boolean flag1 = false; + for (BlockPos blockpos : BlockPos.getRandomPositions(rand, l, pos.getX() - k, pos.getY(), pos.getZ() - k, pos.getX() + k, pos.getY(), + pos.getZ() + k)) { + int i1 = j - blockpos.manhattanDistance(pos); + if (i1 >= 0) { + flag1 |= this.func_236248_a_(reader, i, blockpos, i1, config.func_242794_am_().func_242259_a(rand)); + } + } + return flag1; + } + } + + private boolean func_236248_a_(IWorld p_236248_1_, int p_236248_2_, BlockPos p_236248_3_, int p_236248_4_, int p_236248_5_) { + boolean flag = false; + for (BlockPos blockpos : BlockPos.getAllInBoxMutable(p_236248_3_.getX() - p_236248_5_, p_236248_3_.getY(), p_236248_3_.getZ() - p_236248_5_, + p_236248_3_.getX() + p_236248_5_, p_236248_3_.getY(), p_236248_3_.getZ() + p_236248_5_)) { + int i = blockpos.manhattanDistance(p_236248_3_); + BlockPos blockpos1 = func_236247_a_(p_236248_1_, p_236248_2_, blockpos) + ? func_236246_a_(p_236248_1_, p_236248_2_, blockpos.toMutable(), i) + : func_236249_a_(p_236248_1_, blockpos.toMutable(), i); + if (blockpos1 != null) { + int j = p_236248_4_ - i / 2; + for (BlockPos.Mutable blockpos$mutable = blockpos1.toMutable(); j >= 0; --j) { + if (func_236247_a_(p_236248_1_, p_236248_2_, blockpos$mutable)) { + this.setBlockState(p_236248_1_, blockpos$mutable, ModInnet.INFERNAL_SPIRE_BLOCK.get().getDefaultState()); + blockpos$mutable.move(Direction.UP); + flag = true; + } else { + if (!p_236248_1_.getBlockState(blockpos$mutable).isIn(ModInnet.INFERNAL_SPIRE_BLOCK.get())) { + break; + } + blockpos$mutable.move(Direction.UP); + } + } + } + } + return flag; + } + + @Nullable + private static BlockPos func_236246_a_(IWorld p_236246_0_, int p_236246_1_, BlockPos.Mutable p_236246_2_, int p_236246_3_) { + while (p_236246_2_.getY() > 1 && p_236246_3_ > 0) { + --p_236246_3_; + if (func_242762_a(p_236246_0_, p_236246_1_, p_236246_2_)) { + return p_236246_2_; + } + p_236246_2_.move(Direction.DOWN); + } + return null; + } + + private static boolean func_242762_a(IWorld p_242762_0_, int p_242762_1_, BlockPos.Mutable p_242762_2_) { + if (!func_236247_a_(p_242762_0_, p_242762_1_, p_242762_2_)) { + return false; + } else { + BlockState blockstate = p_242762_0_.getBlockState(p_242762_2_.move(Direction.DOWN)); + p_242762_2_.move(Direction.UP); + return !blockstate.isAir() && !field_236245_a_.contains(blockstate.getBlock()); + } + } + + @Nullable + private static BlockPos func_236249_a_(IWorld p_236249_0_, BlockPos.Mutable p_236249_1_, int p_236249_2_) { + while (p_236249_1_.getY() < p_236249_0_.getHeight() && p_236249_2_ > 0) { + --p_236249_2_; + BlockState blockstate = p_236249_0_.getBlockState(p_236249_1_); + if (field_236245_a_.contains(blockstate.getBlock())) { + return null; + } + if (blockstate.isAir()) { + return p_236249_1_; + } + p_236249_1_.move(Direction.UP); + } + return null; + } + + private static boolean func_236247_a_(IWorld p_236247_0_, int p_236247_1_, BlockPos p_236247_2_) { + BlockState blockstate = p_236247_0_.getBlockState(p_236247_2_); + return blockstate.isAir() || blockstate.isIn(Blocks.LAVA) && p_236247_2_.getY() <= p_236247_1_; + } + + @Override + public Object get() { + return null; + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/flag/FlagBlock.java b/src/main/java/net/mrscauthd/boss_tools/flag/FlagBlock.java new file mode 100644 index 000000000..e537e4ee2 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/flag/FlagBlock.java @@ -0,0 +1,206 @@ +package net.mrscauthd.boss_tools.flag; + +import javax.annotation.Nullable; + +import com.mojang.authlib.GameProfile; +import net.minecraft.block.*; +import net.minecraft.block.material.PushReaction; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.fluid.FluidState; +import net.minecraft.fluid.Fluids; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.pathfinding.PathType; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.DirectionProperty; +import net.minecraft.state.EnumProperty; +import net.minecraft.state.StateContainer; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.state.properties.DoubleBlockHalf; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +public class FlagBlock extends Block implements IWaterLoggable { + public static final DirectionProperty FACING = HorizontalBlock.HORIZONTAL_FACING; + public static final EnumProperty HALF = BlockStateProperties.DOUBLE_BLOCK_HALF; + public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; + + public FlagBlock(AbstractBlock.Properties builder) { + super(builder); + this.setDefaultState(this.stateContainer.getBaseState().with(FACING, Direction.NORTH).with(HALF, DoubleBlockHalf.LOWER).with(WATERLOGGED, false)); + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext context) { + Vector3d offset = state.getOffset(world, pos); + if (state.get(HALF) == DoubleBlockHalf.LOWER) { + switch ((Direction) state.get(FACING)) { + case SOUTH : + default : + return VoxelShapes.or(makeCuboidShape(14.5, 0, 9, 12.5, 1, 7), makeCuboidShape(14, 1, 8.5, 13, 16, 7.5)).withOffset(offset.x, offset.y, offset.z); + case NORTH : + return VoxelShapes.or(makeCuboidShape(1.5, 0, 7, 3.5, 1, 9), makeCuboidShape(2, 1, 7.5, 3, 16, 8.5)).withOffset(offset.x, offset.y, offset.z); + case EAST : + return VoxelShapes.or(makeCuboidShape(9, 0, 1.5, 7, 1, 3.5), makeCuboidShape(8.5, 1, 2, 7.5, 16, 3)).withOffset(offset.x, offset.y, offset.z); + case WEST : + return VoxelShapes.or(makeCuboidShape(7, 0, 14.5, 9, 1, 12.5), makeCuboidShape(7.5, 1, 14, 8.5, 16, 13)).withOffset(offset.x, offset.y, offset.z); + } + } else { + switch ((Direction) state.get(FACING)) { + case SOUTH : + default : + return VoxelShapes.or(makeCuboidShape(14, 0, 8.5, 13, 16, 7.5), makeCuboidShape(14, 7, 8.5, 1, 15, 7.5)).withOffset(offset.x, offset.y, offset.z); + case NORTH : + return VoxelShapes.or(makeCuboidShape(2, 0, 7.5, 3, 16, 8.5), makeCuboidShape(2, 7, 7.5, 15, 15, 8.5)).withOffset(offset.x, offset.y, offset.z); + case EAST : + return VoxelShapes.or(makeCuboidShape(8.5, 0, 2, 7.5, 16, 3), makeCuboidShape(8.5, 7, 2, 7.5, 15, 15)).withOffset(offset.x, offset.y, offset.z); + case WEST : + return VoxelShapes.or(makeCuboidShape(7.5, 0, 14, 8.5, 16, 13), makeCuboidShape(7.5, 7, 14, 8.5, 15, 1)).withOffset(offset.x, offset.y, offset.z); + } + } + } + + public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) { + DoubleBlockHalf doubleblockhalf = stateIn.get(HALF); + if (stateIn.get(WATERLOGGED)) { + worldIn.getPendingFluidTicks().scheduleTick(currentPos, Fluids.WATER, Fluids.WATER.getTickRate(worldIn)); + } + if (facing.getAxis() == Direction.Axis.Y && doubleblockhalf == DoubleBlockHalf.LOWER == (facing == Direction.UP)) { + return facingState.isIn(this) && facingState.get(HALF) != doubleblockhalf ? stateIn.with(FACING, facingState.get(FACING)) : Blocks.AIR.getDefaultState(); + } else { + return doubleblockhalf == DoubleBlockHalf.LOWER && facing == Direction.DOWN && !stateIn.isValidPosition(worldIn, currentPos) ? Blocks.AIR.getDefaultState() : super.updatePostPlacement(stateIn, facing, facingState, worldIn, currentPos, facingPos); + } + } + + public void onBlockHarvested(World worldIn, BlockPos pos, BlockState state, PlayerEntity player) { + if (!worldIn.isRemote && player.isCreative()) { + this.removeBottomHalf(worldIn, pos, state, player); + } + + super.onBlockHarvested(worldIn, pos, state, player); + } + + protected static void removeBottomHalf(World world, BlockPos pos, BlockState state, PlayerEntity player) { + DoubleBlockHalf doubleblockhalf = state.get(HALF); + if (doubleblockhalf == DoubleBlockHalf.UPPER) { + BlockPos blockpos = pos.down(); + BlockState blockstate = world.getBlockState(blockpos); + if (blockstate.getBlock() == state.getBlock() && blockstate.get(HALF) == DoubleBlockHalf.LOWER) { + world.setBlockState(blockpos, Blocks.AIR.getDefaultState(), 35); + world.playEvent(player, 2001, blockpos, Block.getStateId(blockstate)); + } + } + + } + + @Nullable + public BlockState getStateForPlacement(BlockItemUseContext context) { + BlockPos blockpos = context.getPos(); + + if (blockpos.getY() < 255 && context.getWorld().getBlockState(blockpos.up()).isReplaceable(context)) { + boolean flag = context.getWorld().getFluidState(context.getPos()).getFluid() == Fluids.WATER; + return this.getDefaultState().with(FACING, context.getPlacementHorizontalFacing()).with(HALF, DoubleBlockHalf.LOWER).with(WATERLOGGED, flag); + } else { + return null; + } + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack) { + super.onBlockPlacedBy(worldIn, pos, state, placer, stack); + worldIn.setBlockState(pos.up(), state.with(HALF, DoubleBlockHalf.UPPER), 3); + + TileEntity tileentity = worldIn.getTileEntity(new BlockPos(pos.getX(),pos.getY() + 1,pos.getZ())); + + if (tileentity instanceof FlagTileEntity) { + FlagTileEntity flagtileentity = (FlagTileEntity) tileentity; + + CompoundNBT compoundnbt = new CompoundNBT(); + NBTUtil.writeGameProfile(compoundnbt, new GameProfile(placer.getUniqueID(), placer.getName().getString())); + flagtileentity.getTileData().put("FlagOwner", compoundnbt); + + if (placer instanceof PlayerEntity) { + PlayerEntity player = (PlayerEntity) placer; + + flagtileentity.setPlayerProfile(player.getGameProfile()); + } + } + } + + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new FlagTileEntity(); + } + + @OnlyIn(Dist.CLIENT) + public FlagBlock.ISkullType getSkullType() { + return FlagBlock.Types.PLAYER; + } + + + public interface ISkullType { + } + + public static enum Types implements FlagBlock.ISkullType { + PLAYER + } + + @Override + public boolean allowsMovement(BlockState state, IBlockReader worldIn, BlockPos pos, PathType type) { + return false; + } + + public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) { + BlockPos blockpos = pos.down(); + BlockState blockstate = worldIn.getBlockState(blockpos); + return state.get(HALF) == DoubleBlockHalf.LOWER ? blockstate.isSolidSide(worldIn, blockpos, Direction.UP) : blockstate.isIn(this); + } + + public PushReaction getPushReaction(BlockState state) { + return PushReaction.DESTROY; + } + + public BlockState rotate(BlockState state, Rotation rot) { + return state.with(FACING, rot.rotate(state.get(FACING))); + } + + public BlockState mirror(BlockState state, Mirror mirrorIn) { + return state.rotate(mirrorIn.toRotation(state.get(FACING))); + } + + @OnlyIn(Dist.CLIENT) + public long getPositionRandom(BlockState state, BlockPos pos) { + return MathHelper.getCoordinateRandom(pos.getX(), pos.down(state.get(HALF) == DoubleBlockHalf.LOWER ? 0 : 1).getY(), pos.getZ()); + } + + @Override + public FluidState getFluidState(BlockState state) { + return state.get(WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) : super.getFluidState(state); + } + + protected void fillStateContainer(StateContainer.Builder builder) { + builder.add(HALF, FACING, WATERLOGGED); + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/flag/FlagTileEntity.java b/src/main/java/net/mrscauthd/boss_tools/flag/FlagTileEntity.java new file mode 100644 index 000000000..dd98d6f2b --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/flag/FlagTileEntity.java @@ -0,0 +1,118 @@ +package net.mrscauthd.boss_tools.flag; + +import com.google.common.collect.Iterables; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.minecraft.MinecraftSessionService; +import com.mojang.authlib.properties.Property; + +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.block.BlockState; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.play.server.SUpdateTileEntityPacket; +import net.minecraft.server.management.PlayerProfileCache; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.StringUtils; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.mrscauthd.boss_tools.ModInnet; + +public class FlagTileEntity extends TileEntity { + @Nullable + private static PlayerProfileCache profileCache; + + @Nullable + private static MinecraftSessionService sessionService; + + @Nullable + private GameProfile playerProfile; + + public FlagTileEntity() { + super(ModInnet.FLAG.get()); + } + + @Override + public CompoundNBT write(CompoundNBT compound) { + super.write(compound); + if (this.playerProfile != null) { + CompoundNBT compoundnbt = new CompoundNBT(); + NBTUtil.writeGameProfile(compoundnbt, this.playerProfile); + compound.put("FlagOwner", compoundnbt); + } + + return compound; + } + + @Override + public void read(BlockState state, CompoundNBT nbt) { + super.read(state, nbt); + if (nbt.contains("FlagOwner", 10)) { + this.setPlayerProfile(NBTUtil.readGameProfile(nbt.getCompound("FlagOwner"))); + } else if (nbt.contains("ExtraType", 8)) { + String s = nbt.getString("ExtraType"); + if (!StringUtils.isNullOrEmpty(s)) { + this.setPlayerProfile(new GameProfile((UUID)null, s)); + } + } + + } + + @Nullable + @OnlyIn(Dist.CLIENT) + public GameProfile getPlayerProfile() { + return this.playerProfile; + } + + @Nullable + @Override + public SUpdateTileEntityPacket getUpdatePacket() { + return new SUpdateTileEntityPacket(this.pos, 4, this.getUpdateTag()); + } + + @Override + public CompoundNBT getUpdateTag() { + return this.write(new CompoundNBT()); + } + + @Override + public void onDataPacket(NetworkManager net, SUpdateTileEntityPacket pkt) { + this.read(this.getBlockState(), pkt.getNbtCompound()); + } + + public void setPlayerProfile(@Nullable GameProfile p_195485_1_) { + this.playerProfile = p_195485_1_; + this.updatePlayerProfile(); + } + + private void updatePlayerProfile() { + this.playerProfile = updateGameProfile(this.playerProfile); + this.markDirty(); + } + + @Nullable + public static GameProfile updateGameProfile(@Nullable GameProfile input) { + if (input != null && !StringUtils.isNullOrEmpty(input.getName())) { + if (input.isComplete() && input.getProperties().containsKey("textures")) { + return input; + } else if (profileCache != null && sessionService != null) { + GameProfile gameprofile = profileCache.getGameProfileForUsername(input.getName()); + if (gameprofile == null) { + return input; + } else { + Property property = Iterables.getFirst(gameprofile.getProperties().get("textures"), (Property)null); + if (property == null) { + gameprofile = sessionService.fillProfileProperties(gameprofile, true); + } + + return gameprofile; + } + } else { + return input; + } + } else { + return input; + } + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/fluid/FluidUtil2.java b/src/main/java/net/mrscauthd/boss_tools/fluid/FluidUtil2.java new file mode 100644 index 000000000..c697fd308 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/fluid/FluidUtil2.java @@ -0,0 +1,315 @@ +package net.mrscauthd.boss_tools.fluid; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +import javax.annotation.Nullable; + +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.Fluids; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidUtil; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; +import net.minecraftforge.fluids.capability.IFluidHandlerItem; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.registries.ForgeRegistries; + +public class FluidUtil2 { + + public static final int BUCKET_SIZE = 1000; + private static final Map fluidCacheds = new HashMap<>(); + + public static Fluid findBucketFluid(Item item) { + if (item == Items.AIR) { + return null; + } + return fluidCacheds.computeIfAbsent(item, FluidUtil2::findBucketFluidInternal); + } + + private static Fluid findBucketFluidInternal(Item item) { + return ForgeRegistries.FLUIDS.getValues().stream().filter(f -> f.isSource(f.getDefaultState()) && f.getFilledBucket() == item).findFirst().orElse(null); + } + + public static boolean isEquivalentTo(FluidStack left, Fluid right) { + if (left.isEmpty()) + return right == Fluids.EMPTY; + else if (right == Fluids.EMPTY) + return false; + + return left.getFluid().isEquivalentTo(right); + } + + public static boolean isEquivalentTo(FluidStack left, FluidStack right) { + if (left.isEmpty()) + return right.isEmpty(); + else if (right.isEmpty()) + return false; + + return left.getFluid().isEquivalentTo(right.getFluid()) && FluidStack.areFluidStackTagsEqual(left, right); + } + + @Nullable + public static Fluid getFluid(FluidStack stack) { + return Optional.ofNullable(stack).map(fs -> fs.getFluid()).orElse(null); + } + + public static IFluidHandlerItem getItemStackFluidHandler(ItemStack itemStack) { + return itemStack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY).orElse(null); + } + + /** + * test insert specified fluid to itemstack + * + * @param itemStack + * @param fluid + * @return + */ + public static boolean canFill(ItemStack itemStack, Fluid fluid) { + if (itemStack.isEmpty() || fluid == null) { + return false; + } + + if (itemStack.getItem() == Items.BUCKET) { + return fluid.getFilledBucket() != Items.AIR; + } + + IFluidHandlerItem handlerInItemStack = getItemStackFluidHandler(itemStack); + + if (handlerInItemStack != null && handlerInItemStack.fill(new FluidStack(fluid, 1), FluidAction.SIMULATE) > 0) { + return true; + } + + return false; + } + + /** + * test drain any fluid from itemstack + * + * @param itemStack + * fluid + * @return + */ + public static boolean canDrain(ItemStack itemStack) { + if (itemStack.isEmpty()) { + return false; + } + + if (findBucketFluid(itemStack.getItem()) != null) { + return true; + } + + IFluidHandlerItem handlerInItemStack = getItemStackFluidHandler(itemStack); + + if (handlerInItemStack != null && !handlerInItemStack.drain(1, FluidAction.SIMULATE).isEmpty()) { + return true; + } + + return false; + } + + /** + * test drain specified fluid from itemstack + * + * @param itemStack + * @param fluid + * @return + */ + public static boolean canDrain(ItemStack itemStack, Fluid fluid) { + if (itemStack.isEmpty() || fluid == null) { + return false; + } + + if (itemStack.getItem() == fluid.getFilledBucket()) { + return true; + } + + IFluidHandlerItem handlerInItemStack = getItemStackFluidHandler(itemStack); + + if (handlerInItemStack != null && !handlerInItemStack.drain(new FluidStack(fluid, 1), FluidAction.SIMULATE).isEmpty()) { + return true; + } + + return false; + } + + public static int getMaxCapacity(ItemStack itemStack) { + if (itemStack.isEmpty()) { + return 0; + } + + if (itemStack.getItem() == Items.BUCKET) { + return BUCKET_SIZE; + } + + IFluidHandlerItem handlerInItemStack = getItemStackFluidHandler(itemStack); + + if (handlerInItemStack != null) { + return getMaxCapacity(handlerInItemStack); + } + + return 0; + } + + public static int getMaxCapacity(IFluidHandler fluidHandler) { + int capacity = 0; + + for (int i = 0; i < fluidHandler.getTanks(); i++) { + capacity = Math.max(capacity, fluidHandler.getTankCapacity(i)); + } + + return capacity; + } + + public static ItemStack makeEmpty(ItemStack itemStack, Fluid fluid) { + if (itemStack.isEmpty()) { + return itemStack; + } + + if (itemStack.getItem() == fluid.getFilledBucket()) { + return new ItemStack(Items.BUCKET); + } + + IFluidHandlerItem handlerInItemStack = getItemStackFluidHandler(itemStack); + + if (handlerInItemStack != null) { + FluidStack fluidStack = new FluidStack(fluid, getMaxCapacity(handlerInItemStack)); + handlerInItemStack.drain(fluidStack, FluidAction.EXECUTE); + } + + return itemStack; + } + + public static ItemStack makeFull(ItemStack itemStack, Fluid fluid) { + if (itemStack.isEmpty()) { + return itemStack; + } + + if (itemStack.getItem() == Items.BUCKET && fluid.getFilledBucket() != null) { + return new ItemStack(fluid.getFilledBucket()); + } + + IFluidHandlerItem handlerInItemStack = getItemStackFluidHandler(itemStack); + + if (handlerInItemStack != null) { + FluidStack fluidStack = new FluidStack(fluid, getMaxCapacity(handlerInItemStack)); + handlerInItemStack.fill(fluidStack, FluidAction.EXECUTE); + } + + return itemStack; + } + + public static List getFluidStacks(ItemStack itemStack) { + List fluidStacks = new ArrayList<>(); + + if (itemStack.isEmpty()) { + return fluidStacks; + } + + Item item = itemStack.getItem(); + + if (item == Items.BUCKET) { + fluidStacks.add(new FluidStack(Fluids.EMPTY, 0)); + } else { + IFluidHandlerItem handlerInItemStack = getItemStackFluidHandler(itemStack); + + if (handlerInItemStack != null) { + for (int i = 0; i < handlerInItemStack.getTanks(); i++) { + fluidStacks.add(handlerInItemStack.getFluidInTank(i)); + } + } else { + Fluid fluid = findBucketFluid(item); + if (fluid != null) { + fluidStacks.add(new FluidStack(fluid, BUCKET_SIZE)); + } + } + } + + return fluidStacks; + } + + public static boolean fillSink(IItemHandlerModifiable itemHandler, int sinkItemSlot, IFluidHandler source, int transfer) { + ItemStack sinkItemStack = itemHandler.getStackInSlot(sinkItemSlot); + + if (fillSinkBucket(itemHandler, sinkItemSlot, source, sinkItemStack)) { + return true; + } else if (!fillSinkCapability(source, sinkItemStack, transfer).isEmpty()) { + return true; + } + + return false; + } + + public static FluidStack fillSinkCapability(IFluidHandler source, ItemStack sinkItemStack, int transfer) { + IFluidHandlerItem sink = getItemStackFluidHandler(sinkItemStack); + return tryTransfer(sink, source, transfer); + } + + public static boolean fillSinkBucket(IItemHandlerModifiable itemHandler, int sinkItemSlot, IFluidHandler source, ItemStack itemStack) { + if (itemStack.getItem() == Items.BUCKET) { + int size = FluidUtil2.BUCKET_SIZE; + FluidStack fluidStack = source.drain(size, FluidAction.SIMULATE); + + if (fluidStack.getAmount() == size) { + source.drain(size, FluidAction.EXECUTE); + itemHandler.setStackInSlot(sinkItemSlot, new ItemStack(fluidStack.getFluid().getFilledBucket())); + return true; + } + } + + return false; + } + + public static boolean drainSource(IItemHandlerModifiable itemHandler, int sourceItemSlot, IFluidHandler sink, int transfer) { + ItemStack sourceItemStack = itemHandler.getStackInSlot(sourceItemSlot); + + if (drainSourceBucket(itemHandler, sourceItemSlot, sink, sourceItemStack)) { + return true; + } else if (!drainSourceCapability(sink, sourceItemStack, transfer).isEmpty()) { + return true; + } else { + return false; + } + } + + public static boolean drainSourceBucket(IItemHandlerModifiable itemHandler, int itemSlot, IFluidHandler sink, ItemStack sourceItemStack) { + Item sourceItem = sourceItemStack.getItem(); + Fluid sourceFluid = FluidUtil2.findBucketFluid(sourceItem); + + if (sourceFluid != null) { + FluidStack fluidStack = new FluidStack(sourceFluid, FluidUtil2.BUCKET_SIZE); + + if (sink.fill(fluidStack, FluidAction.SIMULATE) == fluidStack.getAmount()) { + sink.fill(fluidStack, FluidAction.EXECUTE); + itemHandler.setStackInSlot(itemSlot, new ItemStack(Items.BUCKET)); + return true; + } + } + + return false; + } + + public static FluidStack drainSourceCapability(IFluidHandler sink, ItemStack sourceItemStack, int transfer) { + IFluidHandlerItem source = getItemStackFluidHandler(sourceItemStack); + return tryTransfer(sink, source, transfer); + } + + public static FluidStack tryTransfer(IFluidHandler sink, IFluidHandler source, int transfer) { + if (sink != null && source != null && transfer > 0) { + return FluidUtil.tryFluidTransfer(sink, source, transfer, true); + } else { + return FluidStack.EMPTY; + } + } + + private FluidUtil2() { + + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/fluid/FuelFluid.java b/src/main/java/net/mrscauthd/boss_tools/fluid/FuelFluid.java new file mode 100644 index 000000000..3f0e50d8e --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/fluid/FuelFluid.java @@ -0,0 +1,146 @@ +package net.mrscauthd.boss_tools.fluid; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.FlowingFluidBlock; +import net.minecraft.fluid.FlowingFluid; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.FluidState; +import net.minecraft.item.Item; +import net.minecraft.particles.IParticleData; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.state.StateContainer; +import net.minecraft.tags.FluidTags; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fluids.FluidAttributes; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; + +import javax.annotation.Nullable; +import java.util.Random; + +public class FuelFluid extends FlowingFluid { + public Fluid getFlowingFluid() { + return ModInnet.FLOWING_FUEL.get(); + } + + public Fluid getStillFluid() { + return ModInnet.FUEL_STILL.get(); + } + + public Item getFilledBucket() { + return ModInnet.FUEL_BUCKET.get(); + } + + @OnlyIn(Dist.CLIENT) + public void animateTick(World worldIn, BlockPos pos, FluidState state, Random random) { + if (!state.isSource() && !state.get(FALLING)) { + if (random.nextInt(64) == 0) { + worldIn.playSound((double)pos.getX() + 0.5D, (double)pos.getY() + 0.5D, (double)pos.getZ() + 0.5D, SoundEvents.BLOCK_WATER_AMBIENT, SoundCategory.BLOCKS, random.nextFloat() * 0.25F + 0.75F, random.nextFloat() + 0.5F, false); + } + } else if (random.nextInt(10) == 0) { + worldIn.addParticle(ParticleTypes.UNDERWATER, (double)pos.getX() + random.nextDouble(), (double)pos.getY() + random.nextDouble(), (double)pos.getZ() + random.nextDouble(), 0.0D, 0.0D, 0.0D); + } + + } + + @Nullable + @OnlyIn(Dist.CLIENT) + public IParticleData getDripParticleData() { + return ParticleTypes.DRIPPING_WATER; + } + + protected boolean canSourcesMultiply() { + return false; + } + + protected void beforeReplacingBlock(IWorld worldIn, BlockPos pos, BlockState state) { + TileEntity tileentity = state.hasTileEntity() ? worldIn.getTileEntity(pos) : null; + Block.spawnDrops(state, worldIn, pos, tileentity); + } + + public int getSlopeFindDistance(IWorldReader worldIn) { + return 4; + } + + public BlockState getBlockState(FluidState state) { + return ModInnet.FUEL_BLOCK.get().getDefaultState().with(FlowingFluidBlock.LEVEL, Integer.valueOf(getLevelFromState(state))); + } + + @Override + public boolean isSource(FluidState state) { + return false; + } + + @Override + public int getLevel(FluidState state) { + return 4; + } + + public boolean isEquivalentTo(Fluid fluidIn) { + return fluidIn == ModInnet.FUEL_STILL.get() || fluidIn == ModInnet.FLOWING_FUEL.get(); + } + + public int getLevelDecreasePerBlock(IWorldReader worldIn) { + return 1; + } + + public int getTickRate(IWorldReader p_205569_1_) { + return 8; + } + + public boolean canDisplace(FluidState fluidState, IBlockReader blockReader, BlockPos pos, Fluid fluid, Direction direction) { + return direction == Direction.DOWN && !fluid.isIn(FluidTags.WATER); + } + + protected float getExplosionResistance() { + return 100.0F; + } + + @Override + protected FluidAttributes createAttributes() { + return net.minecraftforge.fluids.FluidAttributes.builder( + new ResourceLocation(BossToolsMod.ModId,"blocks/fluid_fuel_still"), + new ResourceLocation(BossToolsMod.ModId,"blocks/fluid_fuel_flow")) + .overlay(new ResourceLocation(BossToolsMod.ModId,"blocks/fluid_fuel_still")) + .translationKey("block." + BossToolsMod.ModId + ".fuel") + .sound(SoundEvents.ITEM_BUCKET_FILL, SoundEvents.ITEM_BUCKET_EMPTY) + .build(this); + } + + public static class Flowing extends FuelFluid { + protected void fillStateContainer(StateContainer.Builder builder) { + super.fillStateContainer(builder); + builder.add(LEVEL_1_8); + } + + public int getLevel(FluidState state) { + return state.get(LEVEL_1_8); + } + + public boolean isSource(FluidState state) { + return false; + } + } + + public static class Source extends FuelFluid { + public int getLevel(FluidState state) { + return 8; + } + + public boolean isSource(FluidState state) { + return true; + } + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/fluid/OilFluid.java b/src/main/java/net/mrscauthd/boss_tools/fluid/OilFluid.java new file mode 100644 index 000000000..19351d8cb --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/fluid/OilFluid.java @@ -0,0 +1,146 @@ +package net.mrscauthd.boss_tools.fluid; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.FlowingFluidBlock; +import net.minecraft.fluid.FlowingFluid; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.FluidState; +import net.minecraft.item.Item; +import net.minecraft.particles.IParticleData; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.state.StateContainer; +import net.minecraft.tags.FluidTags; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fluids.FluidAttributes; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; + +import javax.annotation.Nullable; +import java.util.Random; + +public class OilFluid extends FlowingFluid { + public Fluid getFlowingFluid() { + return ModInnet.FLOWING_OIL.get(); + } + + public Fluid getStillFluid() { + return ModInnet.OIL_STILL.get(); + } + + public Item getFilledBucket() { + return ModInnet.OIL_BUCKET.get(); + } + + @OnlyIn(Dist.CLIENT) + public void animateTick(World worldIn, BlockPos pos, FluidState state, Random random) { + if (!state.isSource() && !state.get(FALLING)) { + if (random.nextInt(64) == 0) { + worldIn.playSound((double)pos.getX() + 0.5D, (double)pos.getY() + 0.5D, (double)pos.getZ() + 0.5D, SoundEvents.BLOCK_WATER_AMBIENT, SoundCategory.BLOCKS, random.nextFloat() * 0.25F + 0.75F, random.nextFloat() + 0.5F, false); + } + } else if (random.nextInt(10) == 0) { + worldIn.addParticle(ParticleTypes.UNDERWATER, (double)pos.getX() + random.nextDouble(), (double)pos.getY() + random.nextDouble(), (double)pos.getZ() + random.nextDouble(), 0.0D, 0.0D, 0.0D); + } + + } + + @Nullable + @OnlyIn(Dist.CLIENT) + public IParticleData getDripParticleData() { + return ParticleTypes.DRIPPING_WATER; + } + + protected boolean canSourcesMultiply() { + return false; + } + + protected void beforeReplacingBlock(IWorld worldIn, BlockPos pos, BlockState state) { + TileEntity tileentity = state.hasTileEntity() ? worldIn.getTileEntity(pos) : null; + Block.spawnDrops(state, worldIn, pos, tileentity); + } + + public int getSlopeFindDistance(IWorldReader worldIn) { + return 2; + } + + public BlockState getBlockState(FluidState state) { + return ModInnet.OIL_BLOCK.get().getDefaultState().with(FlowingFluidBlock.LEVEL, Integer.valueOf(getLevelFromState(state))); + } + + @Override + public boolean isSource(FluidState state) { + return false; + } + + @Override + public int getLevel(FluidState state) { + return 4; + } + + public boolean isEquivalentTo(Fluid fluidIn) { + return fluidIn == ModInnet.OIL_STILL.get() || fluidIn == ModInnet.FLOWING_OIL.get(); + } + + public int getLevelDecreasePerBlock(IWorldReader worldIn) { + return 2; + } + + public int getTickRate(IWorldReader p_205569_1_) { + return 8; + } + + public boolean canDisplace(FluidState fluidState, IBlockReader blockReader, BlockPos pos, Fluid fluid, Direction direction) { + return direction == Direction.DOWN && !fluid.isIn(FluidTags.WATER); + } + + protected float getExplosionResistance() { + return 100.0F; + } + + @Override + protected FluidAttributes createAttributes() { + return net.minecraftforge.fluids.FluidAttributes.builder( + new ResourceLocation(BossToolsMod.ModId,"blocks/fluid_oil_still"), + new ResourceLocation(BossToolsMod.ModId,"blocks/fluid_oil_flow")) + .overlay(new ResourceLocation(BossToolsMod.ModId,"blocks/fluid_oil_still")) + .translationKey("block." + BossToolsMod.ModId + ".oil") + .sound(SoundEvents.ITEM_BUCKET_FILL, SoundEvents.ITEM_BUCKET_EMPTY) + .build(this); + } + + public static class Flowing extends OilFluid { + protected void fillStateContainer(StateContainer.Builder builder) { + super.fillStateContainer(builder); + builder.add(LEVEL_1_8); + } + + public int getLevel(FluidState state) { + return state.get(LEVEL_1_8); + } + + public boolean isSource(FluidState state) { + return false; + } + } + + public static class Source extends OilFluid { + public int getLevel(FluidState state) { + return 8; + } + + public boolean isSource(FluidState state) { + return true; + } + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/gauge/AbstractGaugeDataRenderer.java b/src/main/java/net/mrscauthd/boss_tools/gauge/AbstractGaugeDataRenderer.java new file mode 100644 index 000000000..5a37e46d7 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gauge/AbstractGaugeDataRenderer.java @@ -0,0 +1,172 @@ +package net.mrscauthd.boss_tools.gauge; + +import javax.annotation.Nullable; + +import org.lwjgl.opengl.GL11; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.Rectangle2d; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.mrscauthd.boss_tools.gui.helper.GuiHelper; + +public abstract class AbstractGaugeDataRenderer { + + private final IGaugeValue value; + + public AbstractGaugeDataRenderer(IGaugeValue value) { + this.value = value; + } + + public void toBytes(PacketBuffer buffer) { + GaugeValueSerializer.Serializer.write(this.getValue(), buffer); + } + + public void render(MatrixStack matrixStack, int left, int top) { + this.drawBorder(matrixStack, left, top); + + int width = this.getWidth(); + int height = this.getHeight(); + int padding = this.getBorderWidth(); + Rectangle2d innerBounds = new Rectangle2d(left + padding, top + padding, width - padding * 2, height - padding * 2); + this.drawBackground(matrixStack, innerBounds); + this.drawContents(matrixStack, innerBounds); + this.drawGaugeText(matrixStack, innerBounds); + } + + protected void drawContents(MatrixStack matrixStack, Rectangle2d innerBounds) { + + } + + @Nullable + public ITextComponent getGaugeText() { + return GaugeTextHelper.getValueText(this.getValue()).build(); + } + + protected void drawGaugeText(MatrixStack matrixStack, Rectangle2d innerBounds) { + ITextComponent text = this.getGaugeText(); + + if (text != null) { + int color = this.getTextColor(); + int textPadding = 2; + Rectangle2d textBounds = new Rectangle2d(innerBounds.getX() + textPadding, innerBounds.getY(), innerBounds.getWidth() - textPadding, innerBounds.getHeight()); + + this.drawText(matrixStack, textBounds, text, color); + } + } + + protected void drawText(MatrixStack matrixStack, Rectangle2d bounds, ITextComponent text, int color) { + this.drawText(Minecraft.getInstance(), matrixStack, bounds, text, color); + } + + protected void drawText(Minecraft minecraft, MatrixStack matrixStack, Rectangle2d bounds, ITextComponent text, int color) { + FontRenderer fontRenderer = minecraft.fontRenderer; + int textWidth = fontRenderer.getStringPropertyWidth(text); + + float scale = Math.min(1.0F, (float) bounds.getWidth() / (float) textWidth); + float offsetX = 0.0F; + float offsetY = (bounds.getHeight() - ((fontRenderer.FONT_HEIGHT - 1) * scale)) / 2.0F; + float scaledX = (bounds.getX() + offsetX) / scale; + float scaledY = (bounds.getY() + offsetY) / scale; + + matrixStack.push(); + matrixStack.scale(scale, scale, scale); + fontRenderer.func_243248_b(matrixStack, text, scaledX, scaledY, color); + matrixStack.pop(); + } + + protected void drawBackground(MatrixStack matrixStack, Rectangle2d innerBounds) { + IGaugeValue value = this.getValue(); + int tileColor = value.getColor(); + double displayRatio = value.getDisplayRatio(); + + try { + RenderSystem.enableBlend(); + RenderSystem.enableAlphaTest(); + GuiHelper.setGLColorFromInt(tileColor); + + TextureAtlasSprite tileTexture = this.getBackgroundTileTexture(); + + if (tileTexture != null) { + int tileWidth = this.getBackgroundTileWidth(); + int tileHeight = this.getBackgroundTileHeight(); + int ratioWidth = (int) Math.ceil(innerBounds.getWidth() * displayRatio); + GuiHelper.drawTiledSprite(matrixStack, innerBounds.getX(), innerBounds.getY(), ratioWidth, innerBounds.getHeight(), tileTexture, tileWidth, tileHeight); + } + + ResourceLocation texture = this.getBackgroundTexture(); + + if (texture != null) { + GuiHelper.drawHorizontal(matrixStack, innerBounds.getX(), innerBounds.getY(), innerBounds.getWidth(), innerBounds.getHeight(), texture, displayRatio); + } + + } finally { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.disableAlphaTest(); + RenderSystem.disableBlend(); + } + + } + + protected void drawBorder(MatrixStack matrixStack, int left, int top) { + int width = this.getWidth(); + int height = this.getHeight(); + int borderColor = this.getBorderColor(); + int padding = this.getBorderWidth(); + + AbstractGui.fill(matrixStack, left, top, left + width - padding, top + padding, borderColor); + AbstractGui.fill(matrixStack, left, top, left + padding, top + height - padding, borderColor); + AbstractGui.fill(matrixStack, left + width - padding, top, left + width, top + height - padding, borderColor); + AbstractGui.fill(matrixStack, left, top + height - padding, left + width, top + height, borderColor); + } + + public int getTextColor() { + return 0xFFFFFFFF; + } + + @Nullable + public TextureAtlasSprite getBackgroundTileTexture() { + return null; + } + + @Nullable + public ResourceLocation getBackgroundTexture() { + return null; + } + + public int getBackgroundTileWidth() { + return 16; + } + + public int getBackgroundTileHeight() { + return 16; + } + + public int getBorderWidth() { + return 1; + } + + public int getBorderColor() { + return 0xFF000000; + } + + public int getWidth() { + return 100; + } + + public int getHeight() { + return 13; + } + + public IGaugeValue getValue() { + return this.value; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gauge/GaugeTextBuilder.java b/src/main/java/net/mrscauthd/boss_tools/gauge/GaugeTextBuilder.java new file mode 100644 index 000000000..4502b1b6c --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gauge/GaugeTextBuilder.java @@ -0,0 +1,151 @@ +package net.mrscauthd.boss_tools.gauge; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; + +import net.minecraft.util.text.IFormattableTextComponent; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TranslationTextComponent; + +public class GaugeTextBuilder { + private final IGaugeValue value; + private final String translationKey; + private final List extraValues; + private final Map extraStyles; + + private Style textStyle; + private Style amountStyle; + private Style capacityStyle; + private Style unitStyle; + + private String unitSuffix; + + public GaugeTextBuilder(IGaugeValue value, String translationKey, List extraValues) { + this.value = value; + this.translationKey = translationKey; + this.extraValues = Collections.unmodifiableList(extraValues); + this.extraStyles = new HashMap<>(); + + this.setTextStyle(Style.EMPTY); + this.setAmountStyle(Style.EMPTY); + this.setCapacityStyle(Style.EMPTY); + this.setUnitStyle(Style.EMPTY); + + this.setUnitSuffix(""); + } + + public IFormattableTextComponent build() { + IGaugeValue value = this.getValue(); + ITextComponent displayName = value.getDisplayName(); + int amount = value.getAmount(); + int capacity = value.getCapacity(); + String unit = value.getUnit(); + + List list = new ArrayList<>(); + list.add(this.format(displayName, this.getTextStyle())); + list.add(this.format(String.valueOf(amount), this.getAmountStyle(), unit, this.getUnitStyle())); + list.add(this.format(String.valueOf(capacity), this.getCapacityStyle(), unit, this.getUnitStyle())); + + for (int i = 0; i < this.getExtraValues().size(); i++) { + Object extraValue = this.getExtraValues().get(i); + Style extraStyle = this.getExtraStyle(i); + list.add(new TranslationTextComponent("%s", extraValue).setStyle(extraStyle)); + } + + return new TranslationTextComponent(this.getTranslationKey(), list.toArray()).setStyle(this.getTextStyle()); + } + + public IFormattableTextComponent format(String valueText, Style valueStyle, String unitText, Style unitStyle) { + if (!StringUtils.isEmpty(unitText)) { + return this.format(valueText, valueStyle).appendString(" ").append(this.format(unitText + this.getUnitSuffix(), unitStyle)); + } else { + return this.format(valueText, valueStyle); + } + } + + public IFormattableTextComponent format(String text, Style style) { + return new StringTextComponent(text).setStyle(style); + } + + public IFormattableTextComponent format(ITextComponent text, Style style) { + return new StringTextComponent("").append(text).setStyle(style); + } + + public final IGaugeValue getValue() { + return this.value; + } + + public final String getTranslationKey() { + return this.translationKey; + } + + public final List getExtraValues() { + return extraValues; + } + + public final Map getExtraStyles() { + return extraStyles; + } + + public Style getTextStyle() { + return textStyle; + } + + public GaugeTextBuilder setTextStyle(Style textStyle) { + this.textStyle = textStyle; + return this; + } + + public Style getAmountStyle() { + return amountStyle; + } + + public GaugeTextBuilder setAmountStyle(Style amountStyle) { + this.amountStyle = amountStyle; + return this; + } + + public Style getCapacityStyle() { + return capacityStyle; + } + + public GaugeTextBuilder setCapacityStyle(Style capacityStyle) { + this.capacityStyle = capacityStyle; + return this; + } + + public Style getUnitStyle() { + return unitStyle; + } + + public GaugeTextBuilder setUnitStyle(Style unitStyle) { + this.unitStyle = unitStyle; + return this; + } + + public String getUnitSuffix() { + return unitSuffix; + } + + public GaugeTextBuilder setUnitSuffix(String unitSuffix) { + this.unitSuffix = unitSuffix; + return this; + } + + public GaugeTextBuilder setExtraStyle(int index, Style style) { + this.getExtraStyles().put(index, style); + return this; + } + + public Style getExtraStyle(int index) { + return this.getExtraStyles().getOrDefault(index, Style.EMPTY); + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gauge/GaugeTextHelper.java b/src/main/java/net/mrscauthd/boss_tools/gauge/GaugeTextHelper.java new file mode 100644 index 000000000..226a7fae5 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gauge/GaugeTextHelper.java @@ -0,0 +1,141 @@ +package net.mrscauthd.boss_tools.gauge; + +import java.text.NumberFormat; + +import com.google.common.collect.Lists; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.IFormattableTextComponent; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TextFormatting; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.capability.IOxygenStorage; + +public class GaugeTextHelper { + + public static final ResourceLocation USING_NAME = new ResourceLocation(BossToolsMod.ModId, "using"); + public static final ResourceLocation USING2_NAME = new ResourceLocation(BossToolsMod.ModId, "using2"); + public static final ResourceLocation GENERATING_NAME = new ResourceLocation(BossToolsMod.ModId, "generating"); + public static final ResourceLocation MAXGENERATION_NAME = new ResourceLocation(BossToolsMod.ModId, "maxgeneration"); + public static final ResourceLocation TOTAL_NAME = new ResourceLocation(BossToolsMod.ModId, "total"); + public static final ResourceLocation STORED_NAME = new ResourceLocation(BossToolsMod.ModId, "stored"); + public static final ResourceLocation CAPACITY_NAME = new ResourceLocation(BossToolsMod.ModId, "capacity"); + public static final ResourceLocation TRANSFER_NAME = new ResourceLocation(BossToolsMod.ModId, "transfer"); + + public static final String USING_KEY = makeTranslationKey(USING_NAME); + public static final String USING2_KEY = makeTranslationKey(USING2_NAME); + public static final String GENERATING_KEY = makeTranslationKey(GENERATING_NAME); + public static final String MAXGNERATION_KEY = makeTranslationKey(MAXGENERATION_NAME); + public static final String TOTAL_KEY = makeTranslationKey(TOTAL_NAME); + public static final String STORED_KEY = makeTranslationKey(STORED_NAME); + public static final String CAPACITY_KEY = makeTranslationKey(CAPACITY_NAME); + public static final String TRANSFER_KEY = makeTranslationKey(TRANSFER_NAME); + + public static final String PER_TICK_UNIT_SUFFIX = "/t"; + + public static String makeTranslationKey(ResourceLocation name) { + return "gauge_text." + name.getNamespace() + "." + name.getPath(); + } + + public static GaugeTextBuilder getText(IGaugeValue value, String key, Object... values) { + return new GaugeTextBuilder(value, key, Lists.newArrayList(values)); + } + + public static GaugeTextBuilder getValueText(IGaugeValue value) { + return getText(value, "%1$s: %2$s"); + } + + public static GaugeTextBuilder getStorageText(IGaugeValue value) { + return getText(value, "%1$s: %2$s \u00A78| %3$s"); + } + + public static GaugeTextBuilder getPercentText(IGaugeValue value, int decimals) { + NumberFormat numberInstance = NumberFormat.getNumberInstance(); + numberInstance.setMaximumFractionDigits(decimals); + return getText(value, "%1$s: %4$s", numberInstance.format(value.getDisplayRatio() * 100.0D) + "%"); + } + + public static GaugeTextBuilder getPercentText(IGaugeValue value) { + return getPercentText(value, 0); + } + + public static GaugeTextBuilder getUsingText(IGaugeValue value) { + return getText(value, USING_KEY); + } + + public static GaugeTextBuilder getUsingPerTickText(IGaugeValue value) { + return getUsingText(value).setUnitSuffix(PER_TICK_UNIT_SUFFIX); + } + + public static GaugeTextBuilder getUsingText2(IGaugeValue value, int interval) { + return getText(value, USING2_KEY, String.valueOf(interval)); + } + + public static GaugeTextBuilder getTotalText(IGaugeValue value) { + return getText(value, TOTAL_KEY); + } + + public static GaugeTextBuilder getGeneratingText(IGaugeValue value) { + return getText(value, GENERATING_KEY); + } + + public static GaugeTextBuilder getGeneratingPerTickText(IGaugeValue value) { + return getGeneratingText(value).setUnitSuffix(PER_TICK_UNIT_SUFFIX); + } + + public static GaugeTextBuilder getMaxGenerationText(IGaugeValue value) { + return getText(value, MAXGNERATION_KEY); + } + + public static GaugeTextBuilder getMaxGenerationPerTickText(IGaugeValue value) { + return getMaxGenerationText(value).setUnitSuffix(PER_TICK_UNIT_SUFFIX); + } + + public static GaugeTextBuilder getStoredText(IGaugeValue value) { + return getText(value, STORED_KEY); + } + + public static GaugeTextBuilder getCapacityText(IGaugeValue value) { + return getText(value, CAPACITY_KEY); + } + + public static GaugeTextBuilder getTransferText(IGaugeValue value) { + return getText(value, TRANSFER_KEY); + } + + public static GaugeTextBuilder getTransferPerTickText(IGaugeValue value) { + return getTransferText(value).setUnitSuffix(PER_TICK_UNIT_SUFFIX); + } + + public static IFormattableTextComponent buildSpacesuitOxygenTooltip(IGaugeValue value) { + GaugeTextBuilder builder = GaugeTextHelper.getText(value, "%1$s: %2$s \u00A78| %3$s"); + builder.setTextStyle(Style.EMPTY.setFormatting(TextFormatting.BLUE)); + builder.setAmountStyle(Style.EMPTY.setFormatting(TextFormatting.GOLD)); + builder.setCapacityStyle(Style.EMPTY.setFormatting(TextFormatting.RED)); + return builder.build(); + } + + public static IFormattableTextComponent buildSpacesuitOxygenTooltip(IOxygenStorage oxygenStorage) { + IGaugeValue oxygen; + + if (oxygenStorage != null) { + oxygen = GaugeValueHelper.getOxygen(oxygenStorage.getOxygenStored(), oxygenStorage.getMaxOxygenStored()); + } else { + oxygen = GaugeValueHelper.getOxygen(0, 0); + } + + return buildSpacesuitOxygenTooltip(oxygen); + } + + public static IFormattableTextComponent buildBlockTooltip(GaugeTextBuilder builder, TextFormatting color) { + builder.setTextStyle(Style.EMPTY.setFormatting(TextFormatting.BLUE)); + builder.setAmountStyle(Style.EMPTY.setFormatting(color)); + builder.setCapacityStyle(Style.EMPTY.setFormatting(color)); + builder.setExtraStyle(0, Style.EMPTY.setFormatting(color)); + return builder.build(); + } + + public static IFormattableTextComponent buildBlockTooltip(GaugeTextBuilder builder) { + return buildBlockTooltip(builder, TextFormatting.GRAY); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gauge/GaugeValueFluidStack.java b/src/main/java/net/mrscauthd/boss_tools/gauge/GaugeValueFluidStack.java new file mode 100644 index 000000000..691764744 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gauge/GaugeValueFluidStack.java @@ -0,0 +1,83 @@ +package net.mrscauthd.boss_tools.gauge; + +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fluids.FluidAttributes; +import net.minecraftforge.fluids.FluidStack; + +public class GaugeValueFluidStack implements IGaugeValue { + + private FluidStack stack; + private int capacity; + + public GaugeValueFluidStack() { + + } + + public GaugeValueFluidStack(FluidStack stack, int capacity) { + this.setStack(stack); + this.setCapacity(capacity); + } + + @Override + public void deserializeNBT(CompoundNBT compound) { + this.setStack(FluidStack.loadFluidStackFromNBT(compound.getCompound("stack"))); + this.setCapacity(compound.getInt("capacity")); + } + + @Override + public CompoundNBT serializeNBT() { + CompoundNBT compound = new CompoundNBT(); + CompoundNBT stackCompound = new CompoundNBT(); + this.getStack().writeToNBT(stackCompound); + compound.put("stack", stackCompound); + compound.putInt("capacity", this.getCapacity()); + + return compound; + } + + @Override + public int getColor() { + FluidStack fluidStack = this.getStack(); + FluidAttributes attributes = fluidStack.getFluid().getAttributes(); + return attributes.getColor(fluidStack); + } + + public FluidStack getStack() { + return this.stack; + } + + public void setStack(FluidStack stack) { + this.stack = stack; + } + + @Override + public ITextComponent getDisplayName() { + return this.getStack().getDisplayName(); + } + + @Override + public String getUnit() { + return GaugeValueHelper.FLUID_UNIT; + } + + @Override + public int getAmount() { + return this.getStack().getAmount(); + } + + @Override + public int getCapacity() { + return this.capacity; + } + + public void setCapacity(int capacity) { + this.capacity = capacity; + } + + @Override + public boolean isReverse() { + return false; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gauge/GaugeValueHelper.java b/src/main/java/net/mrscauthd/boss_tools/gauge/GaugeValueHelper.java new file mode 100644 index 000000000..53bb44b0d --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gauge/GaugeValueHelper.java @@ -0,0 +1,116 @@ +package net.mrscauthd.boss_tools.gauge; + +import net.minecraft.fluid.Fluid; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.energy.IEnergyStorage; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidTank; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.capability.IOxygenStorage; +import net.mrscauthd.boss_tools.machines.tile.AbstractMachineTileEntity; +import net.mrscauthd.boss_tools.machines.tile.PowerSystemFuelBurnTime; + +public class GaugeValueHelper { + + public static final ResourceLocation ENERGY_NAME = new ResourceLocation(BossToolsMod.ModId, "energy"); + public static final ResourceLocation OXYGEN_NAME = new ResourceLocation(BossToolsMod.ModId, "oxygen"); + public static final ResourceLocation FLUID_NAME = new ResourceLocation(BossToolsMod.ModId, "fluid"); + public static final ResourceLocation FUEL_NAME = new ResourceLocation(BossToolsMod.ModId, "fuel"); + public static final ResourceLocation BURNTIME_NAME = new ResourceLocation(BossToolsMod.ModId, "burntime"); + public static final ResourceLocation COOKTIME_NAME = new ResourceLocation(BossToolsMod.ModId, "cooktime"); + + public static final int ENERGY_COLOR = 0xA0FF404B; + public static final int OXYGEN_COLOR = 0xA000FFFF; + public static final int FUEL_COLOR = 0xA099993D; + public static final int BURNTIME_COLOR = 0xA0FF3F00; + public static final int COOKTIME_COLOR = 0xA0FFFFFF; + + public static final String ENERGY_UNIT = "FE"; + public static final String OXYGEN_UNIT = "mB"; + public static final String FLUID_UNIT = "mB"; + + public static String makeTranslationKey(ResourceLocation name) { + return "gauge." + name.getNamespace() + "." + name.getPath(); + } + + public static IGaugeValue getFluid(int amount) { + return getFluid(amount, 0); + } + + public static IGaugeValue getFluid(int amount, int capacity) { + return new GaugeValueSimple(FLUID_NAME, amount, capacity, null, FLUID_UNIT); + } + + public static IGaugeValue getFluid(Fluid fluid, int amount) { + return getFluid(new FluidStack(fluid, amount)); + } + + public static IGaugeValue getFluid(Fluid fluid, int amount, int capacity) { + return getFluid(new FluidStack(fluid, amount), capacity); + } + + public static IGaugeValue getFluid(FluidStack stack) { + return getFluid(stack, 0); + } + + public static IGaugeValue getFluid(FluidStack stack, int capacity) { + return new GaugeValueFluidStack(stack, capacity); + } + + public static IGaugeValue getFluid(IFluidTank tank) { + return getFluid(tank.getFluid(), tank.getCapacity()); + } + + public static IGaugeValue getEnergy(int amount) { + return getEnergy(amount, 0); + } + + public static IGaugeValue getEnergy(int stored, int capacity) { + return new GaugeValueSimple(ENERGY_NAME, stored, capacity, null, ENERGY_UNIT).color(ENERGY_COLOR); + } + + public static IGaugeValue getEnergy(IEnergyStorage energyStorage) { + return getEnergy(energyStorage.getEnergyStored(), energyStorage.getMaxEnergyStored()); + } + + public static IGaugeValue getEnergy(AbstractMachineTileEntity machineTileEntity) { + return getEnergy(machineTileEntity.getPrimaryEnergyStorage()); + } + + public static IGaugeValue getOxygen(int amount) { + return getOxygen(amount, 0); + } + + public static IGaugeValue getOxygen(int amount, int capacity) { + return new GaugeValueSimple(OXYGEN_NAME, amount, capacity, null, OXYGEN_UNIT).color(OXYGEN_COLOR); + } + + public static IGaugeValue getOxygen(IOxygenStorage oxygenStorage) { + return getOxygen(oxygenStorage.getOxygenStored(), oxygenStorage.getMaxOxygenStored()); + } + + public static IGaugeValue getBurnTime(int amount) { + return getBurnTime(amount, 0); + } + + public static IGaugeValue getBurnTime(int amount, int capacity) { + return new GaugeValueSimple(BURNTIME_NAME, amount, capacity).color(BURNTIME_COLOR); + } + + public static IGaugeValue getBurnTime(PowerSystemFuelBurnTime fuelPowerSystem) { + return getBurnTime(fuelPowerSystem.getStored(), fuelPowerSystem.getCapacity()); + } + + public static IGaugeValue getCookTime(int timer, int maxTimer) { + return new GaugeValueSimple(COOKTIME_NAME, maxTimer - timer, maxTimer).color(COOKTIME_COLOR).reverse(true); + } + + public static IGaugeValue getFuel(int amount) { + return getFuel(amount, 0); + } + + public static IGaugeValue getFuel(int amount, int capacity) { + return new GaugeValueSimple(FUEL_NAME, amount, capacity, null, FLUID_UNIT).color(FUEL_COLOR); + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gauge/GaugeValueRenderer.java b/src/main/java/net/mrscauthd/boss_tools/gauge/GaugeValueRenderer.java new file mode 100644 index 000000000..597f2cca2 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gauge/GaugeValueRenderer.java @@ -0,0 +1,38 @@ +package net.mrscauthd.boss_tools.gauge; + +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.gui.helper.GuiHelper; + +public class GaugeValueRenderer extends AbstractGaugeDataRenderer { + + private static final ResourceLocation DEFAULT_TEXTURE = new ResourceLocation(BossToolsMod.ModId, "textures/simplegaugevalue.png"); + + public GaugeValueRenderer(IGaugeValue value) { + super(value); + } + + public GaugeValueRenderer(PacketBuffer buffer) { + super(GaugeValueSerializer.Serializer.read(buffer)); + } + + @Override + public TextureAtlasSprite getBackgroundTileTexture() { + IGaugeValue value = this.getValue(); + + if (value instanceof GaugeValueFluidStack) { + return GuiHelper.getStillFluidSprite(((GaugeValueFluidStack) value).getStack()); + } else { + return null; + } + } + + @Override + public ResourceLocation getBackgroundTexture() { + IGaugeValue value = this.getValue(); + return value instanceof GaugeValueSimple ? DEFAULT_TEXTURE : null; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gauge/GaugeValueSerializer.java b/src/main/java/net/mrscauthd/boss_tools/gauge/GaugeValueSerializer.java new file mode 100644 index 000000000..f1ff01bd1 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gauge/GaugeValueSerializer.java @@ -0,0 +1,67 @@ +package net.mrscauthd.boss_tools.gauge; + +import java.lang.reflect.InvocationTargetException; +import java.util.LinkedHashMap; +import java.util.Map; + +import net.minecraft.crash.CrashReport; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.INBTSerializable; +import net.mrscauthd.boss_tools.BossToolsMod; + +public class GaugeValueSerializer> { + + public static final GaugeValueSerializer Serializer = new GaugeValueSerializer<>(); + + static { + Serializer.addCodec(new ResourceLocation(BossToolsMod.ModId, "fluidstack"), GaugeValueFluidStack.class); + Serializer.addCodec(new ResourceLocation(BossToolsMod.ModId, "simple"), GaugeValueSimple.class); + } + + private final Map> location_class_map = new LinkedHashMap<>(); + private final Map, ResourceLocation> class_location_map = new LinkedHashMap<>(); + + private GaugeValueSerializer() { + + } + + public T deserialize(CompoundNBT compound) { + String locationToString = compound.getString("location"); + CompoundNBT valueNBT = compound.getCompound("value"); + Class clazz = this.location_class_map.get(new ResourceLocation(locationToString)); + + T format = null; + + try { + format = clazz.getConstructor().newInstance(); + format.deserializeNBT(valueNBT); + } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { + new CrashReport("deserialize exception", e).getCompleteReport(); + } + + return format; + } + + public T read(PacketBuffer buffer) { + return deserialize(buffer.readCompoundTag()); + } + + public CompoundNBT serialize(T format) { + CompoundNBT compound = new CompoundNBT(); + compound.putString("location", this.class_location_map.get(format.getClass()).toString()); + compound.put("value", format.serializeNBT()); + return compound; + } + + public void write(T format, PacketBuffer buffer) { + buffer.writeCompoundTag(this.serialize(format)); + } + + public void addCodec(ResourceLocation location, Class clazz) { + this.location_class_map.put(location, clazz); + this.class_location_map.put(clazz, location); + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gauge/GaugeValueSimple.java b/src/main/java/net/mrscauthd/boss_tools/gauge/GaugeValueSimple.java new file mode 100644 index 000000000..01d234aa3 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gauge/GaugeValueSimple.java @@ -0,0 +1,168 @@ +package net.mrscauthd.boss_tools.gauge; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.ITextComponent.Serializer; +import net.minecraft.util.text.TranslationTextComponent; + +public class GaugeValueSimple implements IGaugeValue { + + public static final int FALLBACK_COLOR = 0xA0FFFFFF; + + private ResourceLocation name; + private int amount; + private int capacity; + private ITextComponent displayeName; + private String unit; + private int color; + private boolean reverse; + + private ITextComponent displayNameCache; + + public GaugeValueSimple() { + this(null); + } + + public GaugeValueSimple(@Nonnull ResourceLocation name) { + this(name, 0, 0); + } + + public GaugeValueSimple(@Nonnull ResourceLocation name, int amount, int capacity) { + this(name, amount, capacity, null); + } + + public GaugeValueSimple(@Nonnull ResourceLocation name, int amount, int capacity, @Nullable ITextComponent displayeName) { + this(name, amount, capacity, displayeName, ""); + } + + public GaugeValueSimple(@Nonnull ResourceLocation name, int amount, int capacity, @Nullable ITextComponent displayeName, @Nonnull String unit) { + this(name, amount, capacity, displayeName, unit, FALLBACK_COLOR); + } + + public GaugeValueSimple(@Nonnull ResourceLocation name, int amount, int capacity, @Nullable ITextComponent displayeName, @Nonnull String unit, int color) { + this.name = name; + this.amount = amount; + this.capacity = capacity; + this.displayeName = displayeName; + this.unit = unit; + this.color = color; + } + + @Override + public CompoundNBT serializeNBT() { + CompoundNBT compound = new CompoundNBT(); + compound.putString("name", this.getName().toString()); + compound.putInt("amount", this.getAmount()); + compound.putInt("capacity", this.getCapacity()); + + if (this.getDisplayName() != null) { + compound.putString("displayName", Serializer.toJson(this.getDisplayName())); + } + + compound.putString("unit", this.getUnit()); + compound.putInt("color", this.getColor()); + compound.putBoolean("reverse", this.isReverse()); + + return compound; + } + + @Override + public void deserializeNBT(CompoundNBT compound) { + this.name(new ResourceLocation(compound.getString("name"))); + this.amount(compound.getInt("amount")); + this.capacity(compound.getInt("capacity")); + + if (compound.contains("displayName")) { + this.displayeName(Serializer.getComponentFromJson(compound.getString("displayName"))); + } + + this.unit(compound.getString("unit")); + this.color(compound.getInt("color")); + this.reverse(compound.getBoolean("reverse")); + } + + public ResourceLocation getName() { + return name; + } + + public GaugeValueSimple name(@Nonnull ResourceLocation name) { + this.name = name; + return this; + } + + @Override + @Nullable + public ITextComponent getDisplayName() { + if (this.displayeName != null) { + return this.displayeName.copyRaw(); + } else if (this.displayNameCache == null) { + this.displayNameCache = this.createDefaultTextComponent(); + } + + return this.displayNameCache; + } + + protected TranslationTextComponent createDefaultTextComponent() { + return new TranslationTextComponent(GaugeValueHelper.makeTranslationKey(this.getName())); + } + + public GaugeValueSimple displayeName(@Nullable ITextComponent displayeName) { + this.displayeName = displayeName; + return this; + } + + @Override + public String getUnit() { + return unit; + } + + public GaugeValueSimple unit(@Nonnull String unit) { + this.unit = unit; + return this; + } + + @Override + public int getAmount() { + return amount; + } + + public GaugeValueSimple amount(int amount) { + this.amount = amount; + return this; + } + + @Override + public int getCapacity() { + return capacity; + } + + public GaugeValueSimple capacity(int capacity) { + this.capacity = capacity; + return this; + } + + @Override + public int getColor() { + return color; + } + + public GaugeValueSimple color(int color) { + this.color = color; + return this; + } + + @Override + public boolean isReverse() { + return this.reverse; + } + + public GaugeValueSimple reverse(boolean reverse) { + this.reverse = reverse; + return this; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gauge/IGaugeValue.java b/src/main/java/net/mrscauthd/boss_tools/gauge/IGaugeValue.java new file mode 100644 index 000000000..af2a14897 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gauge/IGaugeValue.java @@ -0,0 +1,35 @@ +package net.mrscauthd.boss_tools.gauge; + +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.common.util.INBTSerializable; + +public interface IGaugeValue extends INBTSerializable { + + ITextComponent getDisplayName(); + + String getUnit(); + + int getAmount(); + + int getCapacity(); + + public default int getColor() + { + return 0x00000000; + } + + boolean isReverse(); + + public default double getDisplayRatio() { + int capacity = this.getCapacity(); + + if (capacity == 0) { + return 0.0D; + } + + int amount = this.getAmount(); + return (this.isReverse() ? (capacity - amount) : amount) / (double) capacity; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/helper/ContainerHelper.java b/src/main/java/net/mrscauthd/boss_tools/gui/helper/ContainerHelper.java new file mode 100644 index 000000000..1f0f10270 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/helper/ContainerHelper.java @@ -0,0 +1,77 @@ +package net.mrscauthd.boss_tools.gui.helper; + +import java.util.List; +import java.util.function.Function; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerHelper { + public static void addInventorySlots(Container container, PlayerInventory inv, int left, int top, Function addSlot) { + addInventorySlots(container, inv, left, top, top + 58, addSlot); + } + + public static void addInventorySlots(Container container, PlayerInventory inv, int left, int top, int hotbarY, Function addSlot) { + int rows = 3; + int cols = 9; + int offsetX = 18; + int offsetY = 18; + + for (int row = 0; row < rows; row++) { + for (int col = 0; col < cols; col++) { + addSlot.apply(new Slot(inv, col + (row + 1) * cols, left + col * offsetX, top + row * offsetY)); + } + } + + for (int col = 0; col < cols; ++col) { + addSlot.apply(new Slot(inv, col, left + col * offsetX, hotbarY)); + } + } + + public static ItemStack transferStackInSlot(Container container, PlayerEntity player, int slotNumber, int containerIndex, IInventory inventory, IMergeItemStack mergeItemStack) { + int containerSize = inventory.getSizeInventory(); + return transferStackInSlot(container, player, slotNumber, containerIndex, containerSize, mergeItemStack); + } + + public static ItemStack transferStackInSlot(Container container, PlayerEntity player, int slotNumber, int containerIndex, int containerSize, IMergeItemStack mergeItemStack) { + ItemStack itemStack = ItemStack.EMPTY; + List inventorySlots = container.inventorySlots; + Slot slot = inventorySlots.get(slotNumber); + + if (slot != null && slot.getHasStack()) { + ItemStack slotStack = slot.getStack(); + itemStack = slotStack.copy(); + + int playerInventoryStartIndex = containerIndex + containerSize; + + // Click Player Inventory + if (slotNumber < playerInventoryStartIndex) { + if (!mergeItemStack.mergeItemStack(slotStack, playerInventoryStartIndex, inventorySlots.size(), true)) { + return ItemStack.EMPTY; + } + + } + // Click Container Inventory + else if (!mergeItemStack.mergeItemStack(slotStack, containerIndex, playerInventoryStartIndex, false)) { + return ItemStack.EMPTY; + } + + if (slotStack.isEmpty()) { + slot.putStack(ItemStack.EMPTY); + } else { + slot.onSlotChanged(); + } + } + + return itemStack; + } + + public static ItemStack transferStackInSlot(Container container, PlayerEntity player, int slotNumber, IInventory inventory, IMergeItemStack mergeItemStack) { + return transferStackInSlot(container, player, slotNumber, 0, inventory, mergeItemStack); + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/helper/GridPlacer.java b/src/main/java/net/mrscauthd/boss_tools/gui/helper/GridPlacer.java new file mode 100644 index 000000000..59c3ca151 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/helper/GridPlacer.java @@ -0,0 +1,59 @@ +package net.mrscauthd.boss_tools.gui.helper; + +import net.minecraft.client.renderer.Rectangle2d; + +public class GridPlacer { + + private int cellWidth; + private int cellHeight; + private int offset; + + public GridPlacer() { + this.setCellWidth(16); + this.setCellHeight(16); + this.setOffset(2); + } + + public Rectangle2d placeRight(int index, int left, int top, int rows) { + int xi = index / rows; + int yi = index % rows; + int cellWidth = this.getCellWidth(); + int cellHeight = this.getCellHeight(); + int offset = this.getOffset(); + return new Rectangle2d(left + xi * (cellWidth + offset), top + yi * (cellHeight + offset), cellWidth, cellHeight); + } + + public Rectangle2d placeBottom(int index, int left, int top, int columns) { + int xi = index % columns; + int yi = index / columns; + int cellWidth = this.getCellWidth(); + int cellHeight = this.getCellHeight(); + int offset = this.getOffset(); + return new Rectangle2d(left + xi * (cellWidth + offset), top + yi * (cellHeight + offset), cellWidth, cellHeight); + } + + public int getCellWidth() { + return this.cellWidth; + } + + public void setCellWidth(int cellWidth) { + this.cellWidth = cellWidth; + } + + public int getCellHeight() { + return this.cellHeight; + } + + public void setCellHeight(int cellHeight) { + this.cellHeight = cellHeight; + } + + public int getOffset() { + return this.offset; + } + + public void setOffset(int offset) { + this.offset = offset; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/helper/GuiHelper.java b/src/main/java/net/mrscauthd/boss_tools/gui/helper/GuiHelper.java new file mode 100644 index 000000000..a637d3db2 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/helper/GuiHelper.java @@ -0,0 +1,311 @@ +package net.mrscauthd.boss_tools.gui.helper; + +import net.minecraft.client.renderer.WorldVertexBufferUploader; +import net.mrscauthd.boss_tools.BossToolsMod; +import org.lwjgl.opengl.GL11; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Rectangle2d; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.fluid.Fluid; +import net.minecraft.inventory.container.PlayerContainer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraftforge.energy.IEnergyStorage; +import net.minecraftforge.fluids.FluidAttributes; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidTank; +import net.mrscauthd.boss_tools.capability.IOxygenStorage; +import net.mrscauthd.boss_tools.fluid.FluidUtil2; + +public class GuiHelper { + + public static final ResourceLocation FIRE_PATH = new ResourceLocation(BossToolsMod.ModId,"textures/fire_on.png"); + public static final int FIRE_WIDTH = 14; + public static final int FIRE_HEIGHT = 14; + public static final ResourceLocation ARROW_PATH = new ResourceLocation(BossToolsMod.ModId,"textures/animated_arrow_full.png"); + public static final int ARROW_WIDTH = 24; + public static final int ARROW_HEIGHT = 17; + public static final ResourceLocation OXYGEN_CONTENT_PATH = new ResourceLocation(BossToolsMod.ModId,"textures/oxygen.png"); + public static final ResourceLocation OXYGEN_TANK_PATH = new ResourceLocation(BossToolsMod.ModId,"textures/fluid_tank_fore.png"); + public static final int OXYGEN_TANK_WIDTH = 14; + public static final int OXYGEN_TANK_HEIGHT = 48; + public static final ResourceLocation ENERGY_PATH = new ResourceLocation(BossToolsMod.ModId,"textures/energy_full.png"); + public static final int ENERGY_WIDTH = 24; + public static final int ENERGY_HEIGHT = 48; + public static final int FUEL_WIDTH = 48; + public static final int FUEL_HEIGHT = 48; + public static final ResourceLocation FLUID_TANK_PATH = new ResourceLocation(BossToolsMod.ModId,"textures/fluid_tank_fore.png"); + public static final int FLUID_TANK_WIDTH = 14; + public static final int FLUID_TANK_HEIGHT = 48; + + public static boolean isHover(Rectangle2d bounds, double x, double y) { + int left = bounds.getX(); + int right = left + bounds.getWidth(); + int top = bounds.getY(); + int bottom = top + bounds.getHeight(); + return left <= x && x < right && top <= y && y < bottom; + } + + public static void drawArrow(MatrixStack matrixStack, int left, int top, double ratio) { + GuiHelper.drawHorizontal(matrixStack, left, top, ARROW_WIDTH, ARROW_HEIGHT, ARROW_PATH, ratio); + } + + public static Rectangle2d getArrowBounds(int left, int top) { + return new Rectangle2d(left, top, ARROW_WIDTH, ARROW_HEIGHT); + } + + public static void drawFire(MatrixStack matrixStack, int left, int top, double ratio) { + drawVertical(matrixStack, left, top, FIRE_WIDTH, FIRE_HEIGHT, FIRE_PATH, ratio); + } + + public static Rectangle2d getFireBounds(int left, int top) { + return new Rectangle2d(left, top, FIRE_WIDTH, FIRE_HEIGHT); + } + + public static void drawOxygenTank(MatrixStack matrixStack, int left, int top, IOxygenStorage oxygenStorage) { + drawOxygenTank(matrixStack, left, top, oxygenStorage.getOxygenStoredRatio()); + } + + public static void drawOxygenTank(MatrixStack matrixStack, int left, int top, double ratio) { + int maxHeight = FLUID_TANK_HEIGHT; + int scaledHeight = (int) Math.ceil(maxHeight * ratio); + int offset = maxHeight - scaledHeight; + Minecraft.getInstance().getTextureManager().bindTexture(OXYGEN_CONTENT_PATH); + drawTiledSprite(matrixStack, left, top + offset, OXYGEN_TANK_WIDTH, scaledHeight, 16, 16, 0.0F, 1.0F, 0.0F, 1.0F); + drawFluidTankOverlay(matrixStack, left, top); + } + + public static Rectangle2d getOxygenTankBounds(int left, int top) { + return new Rectangle2d(left, top, OXYGEN_TANK_WIDTH, OXYGEN_TANK_HEIGHT); + } + + public static void drawEnergy(MatrixStack matrixStack, int left, int top, IEnergyStorage energyStorage) { + drawEnergy(matrixStack, left, top, (double) energyStorage.getEnergyStored() / (double) energyStorage.getMaxEnergyStored()); + } + + public static void drawEnergy(MatrixStack matrixStack, int left, int top, double ratio) { + drawVertical(matrixStack, left, top, ENERGY_WIDTH, ENERGY_HEIGHT, ENERGY_PATH, ratio); + } + + public static void drawFuel(MatrixStack matrixStack, int left, int top, double ratio) { + ResourceLocation full = new ResourceLocation(BossToolsMod.ModId,"textures/rocket_fuel_bar_full.png"); + drawVertical(matrixStack, left, top, FUEL_WIDTH, FUEL_HEIGHT, full, ratio); + } + + public static Rectangle2d getEnergyBounds(int left, int top) { + return new Rectangle2d(left, top, ENERGY_WIDTH, ENERGY_HEIGHT); + } + + public static Rectangle2d getBounds(int left, int top, int width, int height) { + return new Rectangle2d(left, top, width, height); + } + + public static void drawFluidTank(MatrixStack matrixStack, int left, int top, IFluidTank tank) { + drawFluidTank(matrixStack, left, top, tank.getFluid(), tank.getCapacity()); + } + + public static void drawFluidTank(MatrixStack matrixStack, int left, int top, FluidStack stack, int capacity) { + if (stack != null && !stack.isEmpty() && capacity > 0) { + int maxHeight = FLUID_TANK_HEIGHT; + int scaledHeight = (int) Math.ceil(maxHeight * ((double) stack.getAmount() / (double) capacity)); + int offset = maxHeight - scaledHeight; + drawFluid(matrixStack, left, top + offset, FLUID_TANK_WIDTH, scaledHeight, stack); + } + + drawFluidTankOverlay(matrixStack, left, top); + } + + public static void drawFluidTankOverlay(MatrixStack matrixStack, int left, int top) { + drawVertical(matrixStack, left, top, FLUID_TANK_WIDTH, FLUID_TANK_HEIGHT, FLUID_TANK_PATH, 1.0D); + } + + public static void drawFluid(MatrixStack matrixStack, int left, int top, int width, int height, FluidStack stack) { + Fluid fluid = FluidUtil2.getFluid(stack); + + if (fluid == null) { + return; + } + + TextureAtlasSprite fluidStillSprite = getStillFluidSprite(stack); + FluidAttributes attributes = fluid.getAttributes(); + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + setGLColorFromInt(attributes.getColor(stack)); + drawTiledSprite(matrixStack, left, top, width, height, fluidStillSprite, 16, 16); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.disableBlend(); + } + + public static void drawRocketFluidTank(MatrixStack matrixStack, int left, int top, FluidStack stack, int capacity, int amount) { + if (stack != null && !stack.isEmpty() && capacity > 0) { + int maxHeight = 46; + int scaledHeight = (int) Math.ceil(maxHeight * ((double) amount / (double) capacity)); + int offset = maxHeight - scaledHeight; + GuiHelper.drawFluid(matrixStack, left, top + offset, 46, scaledHeight, stack); + } + + } + + public static void drawFluidHorizontal(MatrixStack matrixStack, int left, int top, int width, int height, FluidStack stack, int capacity) { + Fluid fluid = FluidUtil2.getFluid(stack); + + if (fluid == null) { + return; + } + + double ratio = (double) stack.getAmount() / (double) capacity; + drawFluid(matrixStack, left, top, (int) Math.ceil(width * ratio), height, stack); + } + + public static void drawFluidVertical(MatrixStack matrixStack, int left, int top, int width, int height, FluidStack stack, int capacity) { + Fluid fluid = FluidUtil2.getFluid(stack); + + if (fluid == null) { + return; + } + + double ratio = (double) stack.getAmount() / (double) capacity; + int scaledHeight = (int) Math.ceil(height * ratio); + int offset = height - scaledHeight; + drawFluid(matrixStack, left, top + offset, scaledHeight, height, stack); + } + + public static void drawTiledSprite(MatrixStack matrixStack, int left, int top, int width, int height, TextureAtlasSprite sprite, int tileWidth, int tileHeight) { + float uMin = sprite.getMinU(); + float uMax = sprite.getMaxU(); + float vMin = sprite.getMinV(); + float vMax = sprite.getMaxV(); + Minecraft minecraft = Minecraft.getInstance(); + minecraft.getTextureManager().bindTexture(PlayerContainer.LOCATION_BLOCKS_TEXTURE); + drawTiledSprite(matrixStack, left, top, width, height, tileWidth, tileHeight, uMin, uMax, vMin, vMax); + } + + public static void drawTiledSprite(MatrixStack matrixStack, int left, int top, int width, int height, int tileWidth, int tileHeight, float uMin, float uMax, float vMin, float vMax) { + Matrix4f matrix = matrixStack.getLast().getMatrix(); + + int xTileCount = width / tileWidth; + int xRemainder = width - (xTileCount * tileWidth); + int yTileCount = height / tileWidth; + int yRemainder = height - (yTileCount * tileWidth); + + int yStart = top + height; + + for (int xTile = 0; xTile <= xTileCount; xTile++) { + for (int yTile = 0; yTile <= yTileCount; yTile++) { + int tiledWidth = (xTile == xTileCount) ? xRemainder : tileWidth; + int tiledHeight = (yTile == yTileCount) ? yRemainder : tileWidth; + int x = left + (xTile * tileWidth); + int y = yStart - ((yTile + 1) * tileHeight); + + if (tiledWidth > 0 && tiledHeight > 0) { + int maskRight = tileWidth - tiledWidth; + int maskTop = tileHeight - tiledHeight; + + drawTextureWithMasking(matrix, x, y, tileWidth, tileHeight, maskTop, maskRight, 0, uMin, uMax, vMin, vMax); + } + } + } + } + + public static void drawTextureWithMasking(Matrix4f matrix, float left, float top, float tileWidth, float tileHeight, int maskTop, int maskRight, float zLevel, float uMin, float uMax, float vMin, float vMax) { + uMax = uMax - (maskRight / tileWidth * (uMax - uMin)); + vMax = vMax - (maskTop / tileHeight * (vMax - vMin)); + + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferBuilder = tessellator.getBuffer(); + bufferBuilder.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + bufferBuilder.pos(matrix, left, top + tileHeight, zLevel).tex(uMin, vMax).endVertex(); + bufferBuilder.pos(matrix, left + tileWidth - maskRight, top + tileHeight, zLevel).tex(uMax, vMax).endVertex(); + bufferBuilder.pos(matrix, left + tileWidth - maskRight, top + maskTop, zLevel).tex(uMax, vMin).endVertex(); + bufferBuilder.pos(matrix, left, top + maskTop, zLevel).tex(uMin, vMin).endVertex(); + tessellator.draw(); + } + + public static void setGLColorFromInt(int color) { + float red = (color >> 16 & 0xFF) / 255.0F; + float green = (color >> 8 & 0xFF) / 255.0F; + float blue = (color & 0xFF) / 255.0F; + float alpha = ((color >> 24) & 0xFF) / 255F; + + RenderSystem.color4f(red, green, blue, alpha); + } + + public static TextureAtlasSprite getStillFluidSprite(FluidStack stack) { + Fluid fluid = stack.getFluid(); + FluidAttributes attributes = fluid.getAttributes(); + ResourceLocation fluidStill = attributes.getStillTexture(stack); + return Minecraft.getInstance().getAtlasSpriteGetter(PlayerContainer.LOCATION_BLOCKS_TEXTURE).apply(fluidStill); + } + + public static Rectangle2d getFluidTankBounds(int left, int top) { + return new Rectangle2d(left, top, FLUID_TANK_WIDTH, FLUID_TANK_HEIGHT); + } + + public static Rectangle2d getRocketFluidTankBounds(int left, int top) { + return new Rectangle2d(left, top, 48, 48); + } + + public static void drawVertical(MatrixStack matrixStack, int left, int top, int width, int height, ResourceLocation resource, double ratio) { + int ratioHeight = (int) Math.ceil(height * ratio); + int remainHeight = height - ratioHeight; + Minecraft.getInstance().getTextureManager().bindTexture(resource); + AbstractGui.blit(matrixStack, left, top + remainHeight, 0, remainHeight, width, ratioHeight, width, height); + } + + public static void drawVerticalReverse(MatrixStack matrixStack, int left, int top, int width, int height, ResourceLocation resource, double ratio) { + int ratioHeight = (int) Math.ceil(height * ratio); + int remainHeight = height - ratioHeight; + Minecraft.getInstance().getTextureManager().bindTexture(resource); + AbstractGui.blit(matrixStack, left, top, 0, 0, width, remainHeight, width, height); + } + + public static void drawHorizontal(MatrixStack matrixStack, int left, int top, int width, int height, ResourceLocation resource, double ratio) { + int ratioWidth = (int) Math.ceil(width * ratio); + Minecraft.getInstance().getTextureManager().bindTexture(resource); + AbstractGui.blit(matrixStack, left, top, 0, 0, ratioWidth, height, width, height); + } + + public static void drawHorizontalReverse(MatrixStack matrixStack, int left, int top, int width, int height, ResourceLocation resource, double ratio) { + int ratioWidth = (int) Math.ceil(width * ratio); + int remainWidth = width - ratioWidth; + Minecraft.getInstance().getTextureManager().bindTexture(resource); + AbstractGui.blit(matrixStack, left + ratioWidth, top, ratioWidth, 0, remainWidth, height, width, height); + } + + public static void innerBlit(Matrix4f matrix, float x1, float x2, float y1, float y2, int blitOffset, float minU, float maxU, float minV, float maxV) { + BufferBuilder bufferbuilder = Tessellator.getInstance().getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix, (float) x1, (float) y2, (float) blitOffset).tex(minU, maxV).endVertex(); + bufferbuilder.pos(matrix, (float) x2, (float) y2, (float) blitOffset).tex(maxU, maxV).endVertex(); + bufferbuilder.pos(matrix, (float) x2, (float) y1, (float) blitOffset).tex(maxU, minV).endVertex(); + bufferbuilder.pos(matrix, (float) x1, (float) y1, (float) blitOffset).tex(minU, minV).endVertex(); + bufferbuilder.finishDrawing(); + RenderSystem.enableAlphaTest(); + WorldVertexBufferUploader.draw(bufferbuilder); + } + + public static void blit(MatrixStack matrixStack, float x, float y, float width, float height, float uOffset, float vOffset, float uWidth, float vHeight, int textureWidth, int textureHeight) { + innerBlit(matrixStack, x, x + width, y, y + height, 0, uWidth, vHeight, uOffset, vOffset, textureWidth, textureHeight); + } + + private static void innerBlit(MatrixStack matrixStack, float x1, float x2, float y1, float y2, int blitOffset, float uWidth, float vHeight, float uOffset, float vOffset, int textureWidth, int textureHeight) { + innerBlit(matrixStack.getLast().getMatrix(), x1, x2, y1, y2, blitOffset, (uOffset + 0.0F) / (float) textureWidth, (uOffset + (float) uWidth) / (float) textureWidth, (vOffset + 0.0F) / (float) textureHeight, (vOffset + (float) vHeight) / (float) textureHeight); + } + + public static void blit(MatrixStack matrixStack, float x, float y, float uOffset, float vOffset, float width, float height, int textureWidth, int textureHeight) { + blit(matrixStack, x, y, width, height, uOffset, vOffset, width, height, textureWidth, textureHeight); + } + + private GuiHelper() { + + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/helper/IMergeItemStack.java b/src/main/java/net/mrscauthd/boss_tools/gui/helper/IMergeItemStack.java new file mode 100644 index 000000000..e329bce33 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/helper/IMergeItemStack.java @@ -0,0 +1,8 @@ +package net.mrscauthd.boss_tools.gui.helper; + +import net.minecraft.item.ItemStack; + +@FunctionalInterface +public interface IMergeItemStack { + boolean mergeItemStack(ItemStack stack, int startIndex, int endIndex, boolean reverseDirection); +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/helper/IPlacer.java b/src/main/java/net/mrscauthd/boss_tools/gui/helper/IPlacer.java new file mode 100644 index 000000000..c3f3f801a --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/helper/IPlacer.java @@ -0,0 +1,8 @@ +package net.mrscauthd.boss_tools.gui.helper; + +import net.minecraft.client.renderer.Rectangle2d; + +@FunctionalInterface +public interface IPlacer { + Rectangle2d place(int index, int left, int top, int mod); +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/helper/ImageButtonPlacer.java b/src/main/java/net/mrscauthd/boss_tools/gui/helper/ImageButtonPlacer.java new file mode 100644 index 000000000..ab0ae38cc --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/helper/ImageButtonPlacer.java @@ -0,0 +1,73 @@ +package net.mrscauthd.boss_tools.gui.helper; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +import java.util.List; + +@OnlyIn(Dist.CLIENT) +public class ImageButtonPlacer extends Button { + private ResourceLocation resourceLocation; + private final int xTexStart; + private final int yTexStart; + private final int yDiffText; + private final int textureWidth; + private final int textureHeight; + + public ImageButtonPlacer(int xIn, int yIn, int widthIn, int heightIn, int xTexStartIn, int yTexStartIn, int yDiffTextIn, ResourceLocation resourceLocationIn, Button.IPressable onPressIn) { + this(xIn, yIn, widthIn, heightIn, xTexStartIn, yTexStartIn, yDiffTextIn, resourceLocationIn, 256, 256, onPressIn); + } + + public ImageButtonPlacer(int xIn, int yIn, int widthIn, int heightIn, int xTexStartIn, int yTexStartIn, int yDiffTextIn, ResourceLocation resourceLocationIn, int p_i51135_9_, int p_i51135_10_, Button.IPressable onPressIn) { + this(xIn, yIn, widthIn, heightIn, xTexStartIn, yTexStartIn, yDiffTextIn, resourceLocationIn, p_i51135_9_, p_i51135_10_, onPressIn, StringTextComponent.EMPTY); + } + + public ImageButtonPlacer(int x, int y, int width, int height, int xTexStart, int yTexStart, int yDiffText, ResourceLocation resourceLocation, int textureWidth, int textureHeight, Button.IPressable onPress, ITextComponent title) { + this(x, y, width, height, xTexStart, yTexStart, yDiffText, resourceLocation, textureWidth, textureHeight, onPress, field_238486_s_, title); + } + + public ImageButtonPlacer(int p_i244513_1_, int p_i244513_2_, int p_i244513_3_, int p_i244513_4_, int p_i244513_5_, int p_i244513_6_, int p_i244513_7_, ResourceLocation p_i244513_8_, int p_i244513_9_, int p_i244513_10_, Button.IPressable p_i244513_11_, Button.ITooltip p_i244513_12_, ITextComponent p_i244513_13_) { + super(p_i244513_1_, p_i244513_2_, p_i244513_3_, p_i244513_4_, p_i244513_13_, p_i244513_11_, p_i244513_12_); + this.textureWidth = p_i244513_9_; + this.textureHeight = p_i244513_10_; + this.xTexStart = p_i244513_5_; + this.yTexStart = p_i244513_6_; + this.yDiffText = p_i244513_7_; + this.resourceLocation = p_i244513_8_; + } + + public void setPosition(int xIn, int yIn) { + this.x = xIn; + this.y = yIn; + } + + public void setTexture(ResourceLocation texture) { + this.resourceLocation = texture; + } + + public void renderButton(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { + Minecraft minecraft = Minecraft.getInstance(); + + minecraft.getTextureManager().bindTexture(this.resourceLocation); + int i = this.yTexStart; + if (this.isHovered()) { + i += this.yDiffText; + } + + RenderSystem.enableDepthTest(); + blit(matrixStack, this.x, this.y, (float)this.xTexStart, (float)i, this.width, this.height, this.textureWidth, this.textureHeight); + + FontRenderer fontrenderer = minecraft.fontRenderer; + int j = getFGColor(); + drawCenteredString(matrixStack, fontrenderer, this.getMessage(), this.x + this.width / 2, this.y + (this.height - 8) / 2, j | MathHelper.ceil(this.alpha * 255.0F) << 24); + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/helper/RocketPartGridPlacer.java b/src/main/java/net/mrscauthd/boss_tools/gui/helper/RocketPartGridPlacer.java new file mode 100644 index 000000000..3d49d346d --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/helper/RocketPartGridPlacer.java @@ -0,0 +1,42 @@ +package net.mrscauthd.boss_tools.gui.helper; + +import java.util.function.Function; + +import net.minecraft.client.renderer.Rectangle2d; +import net.minecraft.inventory.container.Slot; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.util.ThreeConsumer; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.SlotItemHandler; +import net.mrscauthd.boss_tools.crafting.RocketPart; +import net.mrscauthd.boss_tools.inventory.RocketPartsItemHandler; + +public class RocketPartGridPlacer { + + public static int place(int slot, int left, int top, int mod, IPlacer placer, RocketPart part, ThreeConsumer consumer) { + for (int i = 0; i < part.getSlots(); i++) { + Rectangle2d bounds = placer.place(i, left, top, mod); + consumer.accept(i, slot, bounds); + slot++; + } + return slot; + } + + public static int placeContainer(int left, int top, int mod, IPlacer placer, RocketPart part, RocketPartsItemHandler itemHandler, Function addSlot) { + return place(0, left, top, mod, placer, part, (i, s, bounds) -> { + IItemHandlerModifiable parent = itemHandler.getParent(); + int slot = itemHandler.getParentSlotIndex(part, i); + addSlot.apply(new SlotItemHandler(parent, slot, bounds.getX(), bounds.getY()) { + @Override + public boolean isItemValid(ItemStack stack) { + return true; + } + }); + }); + } + + private RocketPartGridPlacer() { + + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/blastfurnace/BlastFurnaceGui.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/blastfurnace/BlastFurnaceGui.java new file mode 100644 index 000000000..0c365f9aa --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/blastfurnace/BlastFurnaceGui.java @@ -0,0 +1,63 @@ +package net.mrscauthd.boss_tools.gui.screens.blastfurnace; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.container.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.network.IContainerFactory; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.SlotItemHandler; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.gui.helper.ContainerHelper; +import net.mrscauthd.boss_tools.machines.BlastingFurnaceBlock; +import net.mrscauthd.boss_tools.machines.BlastingFurnaceBlock.CustomTileEntity; +import net.mrscauthd.boss_tools.machines.tile.ItemStackToItemStackTileEntity; + +public class BlastFurnaceGui { + + public static class GuiContainerFactory implements IContainerFactory { + public GuiContainer create(int id, PlayerInventory inv, PacketBuffer extraData) { + BlockPos pos = extraData.readBlockPos(); + CustomTileEntity tileEntity = (CustomTileEntity) inv.player.world.getTileEntity(pos); + return new GuiContainer(id, inv, tileEntity); + } + } + + public static class GuiContainer extends Container { + private CustomTileEntity tileEntity; + + public GuiContainer(int id, PlayerInventory inv, CustomTileEntity tileEntity) { + super(ModInnet.BLAST_FURNACE_GUI.get(), id); + this.tileEntity = tileEntity; + + IItemHandlerModifiable itemHandler = tileEntity.getItemHandler(); + this.addSlot(new SlotItemHandler(itemHandler, ItemStackToItemStackTileEntity.SLOT_INGREDIENT, 53, 19)); + this.addSlot(new SlotItemHandler(itemHandler, BlastingFurnaceBlock.SLOT_FUEL, 53, 56)); + + this.addSlot(new SlotItemHandler(itemHandler, ItemStackToItemStackTileEntity.SLOT_OUTPUT, 104, 38) { + @Override + public boolean isItemValid(ItemStack stack) { + return false; + } + }); + + ContainerHelper.addInventorySlots(this, inv, 8, 87, this::addSlot); + } + + public CustomTileEntity getTileEntity() { + return this.tileEntity; + } + + @Override + public boolean canInteractWith(PlayerEntity player) { + return !this.getTileEntity().isRemoved(); + } + + @Override + public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) { + return ContainerHelper.transferStackInSlot(this, playerIn, index, this.getTileEntity(), this::mergeItemStack); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/blastfurnace/BlastFurnaceGuiWindow.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/blastfurnace/BlastFurnaceGuiWindow.java new file mode 100644 index 000000000..917c18a23 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/blastfurnace/BlastFurnaceGuiWindow.java @@ -0,0 +1,72 @@ +package net.mrscauthd.boss_tools.gui.screens.blastfurnace; + +import net.mrscauthd.boss_tools.BossToolsMod; +import org.lwjgl.opengl.GL11; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.screen.inventory.ContainerScreen; +import net.minecraft.client.renderer.Rectangle2d; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.gui.helper.GuiHelper; +import net.mrscauthd.boss_tools.machines.BlastingFurnaceBlock.CustomTileEntity; + +@OnlyIn(Dist.CLIENT) +public class BlastFurnaceGuiWindow extends ContainerScreen { + + public static final ResourceLocation TEXTURE = new ResourceLocation(BossToolsMod.ModId,"textures/screens/blast_furnace_gui.png"); + public static final int FIRE_LEFT = 53; + public static final int FIRE_TOP = 39; + public static final int ARROW_LEFT = 74; + public static final int ARROW_TOP = 37; + + private CustomTileEntity tileEntity; + + public BlastFurnaceGuiWindow(BlastFurnaceGui.GuiContainer container, PlayerInventory inventory, ITextComponent text) { + super(container, inventory, text); + this.tileEntity = container.getTileEntity(); + this.xSize = 177; + this.ySize = 172; + this.playerInventoryTitleY = this.ySize - 95; + } + + @Override + public void render(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(ms); + super.render(ms, mouseX, mouseY, partialTicks); + this.renderHoveredTooltip(ms, mouseX, mouseY); + + if (GuiHelper.isHover(this.getFireBounds(), mouseX, mouseY)) { + this.renderTooltip(ms, GaugeTextHelper.getStorageText(GaugeValueHelper.getBurnTime(this.getTileEntity().getPowerSystemBurnTime())).build(), mouseX, mouseY); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(MatrixStack ms, float partialTicks, int gx, int gy) { + CustomTileEntity tileEntity = this.getTileEntity(); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + this.minecraft.getTextureManager().bindTexture(TEXTURE); + AbstractGui.blit(ms, this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize, this.xSize, this.ySize); + + GuiHelper.drawFire(ms, this.guiLeft + FIRE_LEFT, this.guiTop + FIRE_TOP, tileEntity.getPowerSystemBurnTime().getStoredRatio()); + GuiHelper.drawArrow(ms, this.guiLeft + ARROW_LEFT, this.guiTop + ARROW_TOP, tileEntity.getTimerRatio()); + } + + public CustomTileEntity getTileEntity() { + return this.tileEntity; + } + + public Rectangle2d getFireBounds() { + return GuiHelper.getFireBounds(this.guiLeft + FIRE_LEFT, this.guiTop + FIRE_TOP); + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/coalgenerator/CoalGeneratorGui.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/coalgenerator/CoalGeneratorGui.java new file mode 100644 index 000000000..de424a70e --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/coalgenerator/CoalGeneratorGui.java @@ -0,0 +1,54 @@ +package net.mrscauthd.boss_tools.gui.screens.coalgenerator; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.container.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.network.IContainerFactory; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.SlotItemHandler; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.gui.helper.ContainerHelper; +import net.mrscauthd.boss_tools.machines.CoalGeneratorBlock; +import net.mrscauthd.boss_tools.machines.CoalGeneratorBlock.CustomTileEntity; + +public class CoalGeneratorGui { + + public static class GuiContainerFactory implements IContainerFactory { + public GuiContainer create(int id, PlayerInventory inv, PacketBuffer extraData) { + BlockPos pos = extraData.readBlockPos(); + CustomTileEntity tileEntity = (CustomTileEntity) inv.player.world.getTileEntity(pos); + return new GuiContainer(id, inv, tileEntity); + } + } + + public static class GuiContainer extends Container { + private CustomTileEntity tileEntity; + + public GuiContainer(int id, PlayerInventory inv, CustomTileEntity tileEntity) { + super(ModInnet.COAL_GENERATOR_GUI.get(), id); + this.tileEntity = tileEntity; + + IItemHandlerModifiable itemHandler = tileEntity.getItemHandler(); + this.addSlot(new SlotItemHandler(itemHandler, CoalGeneratorBlock.SLOT_FUEL, 77, 31)); + + ContainerHelper.addInventorySlots(this, inv, 8, 84, this::addSlot); + } + + @Override + public boolean canInteractWith(PlayerEntity player) { + return !this.getTileEntity().isRemoved(); + } + + public CustomTileEntity getTileEntity() { + return this.tileEntity; + } + + @Override + public ItemStack transferStackInSlot(PlayerEntity player, int index) { + return ContainerHelper.transferStackInSlot(this, player, index, this.getTileEntity(), this::mergeItemStack); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/coalgenerator/CoalGeneratorGuiWindow.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/coalgenerator/CoalGeneratorGuiWindow.java new file mode 100644 index 000000000..63027f3d2 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/coalgenerator/CoalGeneratorGuiWindow.java @@ -0,0 +1,73 @@ +package net.mrscauthd.boss_tools.gui.screens.coalgenerator; + +import net.mrscauthd.boss_tools.BossToolsMod; +import org.lwjgl.opengl.GL11; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.screen.inventory.ContainerScreen; +import net.minecraft.client.renderer.Rectangle2d; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.gui.helper.GuiHelper; +import net.mrscauthd.boss_tools.machines.CoalGeneratorBlock.CustomTileEntity; + +@OnlyIn(Dist.CLIENT) +public class CoalGeneratorGuiWindow extends ContainerScreen { + + public static final ResourceLocation TEXTURE = new ResourceLocation(BossToolsMod.ModId,"textures/screens/coal_generator_gui.png"); + + public static final int FIRE_LEFT = 77; + public static final int FIRE_TOP = 49; + + public static final int ENERGY_LEFT = 144; + public static final int ENERGY_TOP = 21; + + private CustomTileEntity tileEntity; + + public CoalGeneratorGuiWindow(CoalGeneratorGui.GuiContainer container, PlayerInventory inventory, ITextComponent text) { + super(container, inventory, text); + this.tileEntity = container.getTileEntity(); + this.xSize = 176; + this.ySize = 166; + this.playerInventoryTitleY = this.ySize - 92; + } + + @Override + public void render(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(ms); + super.render(ms, mouseX, mouseY, partialTicks); + this.renderHoveredTooltip(ms, mouseX, mouseY); + + if (GuiHelper.isHover(this.getEnergyBounds(), mouseX, mouseY)) { + this.renderTooltip(ms, GaugeTextHelper.getStorageText(GaugeValueHelper.getEnergy(this.getTileEntity().getGeneratingEnergyStorage())).build(), mouseX, mouseY); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(MatrixStack ms, float par1, int par2, int par3) { + CustomTileEntity tileEntity = this.getTileEntity(); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + this.minecraft.getTextureManager().bindTexture(TEXTURE); + AbstractGui.blit(ms, this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize, this.xSize, this.ySize); + + GuiHelper.drawFire(ms, this.guiLeft + FIRE_LEFT, this.guiTop + FIRE_TOP, tileEntity.getPowerSystemGenerating().getStoredRatio()); + GuiHelper.drawEnergy(ms, this.guiLeft + ENERGY_LEFT, this.guiTop + ENERGY_TOP, tileEntity.getGeneratingEnergyStorage()); + } + + public CustomTileEntity getTileEntity() { + return this.tileEntity; + } + + public Rectangle2d getEnergyBounds() { + return GuiHelper.getEnergyBounds(this.guiLeft + ENERGY_LEFT, this.guiTop + ENERGY_TOP); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/compressor/CompressorGui.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/compressor/CompressorGui.java new file mode 100644 index 000000000..0b93073f7 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/compressor/CompressorGui.java @@ -0,0 +1,61 @@ +package net.mrscauthd.boss_tools.gui.screens.compressor; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.container.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.network.IContainerFactory; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.SlotItemHandler; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.gui.helper.ContainerHelper; +import net.mrscauthd.boss_tools.machines.CompressorBlock.CustomTileEntity; +import net.mrscauthd.boss_tools.machines.tile.ItemStackToItemStackTileEntity; + +public class CompressorGui { + + public static class GuiContainerFactory implements IContainerFactory { + public GuiContainer create(int id, PlayerInventory inv, PacketBuffer extraData) { + BlockPos pos = extraData.readBlockPos(); + CustomTileEntity tileEntity = (CustomTileEntity) inv.player.world.getTileEntity(pos); + return new GuiContainer(id, inv, tileEntity); + } + } + + public static class GuiContainer extends Container { + private CustomTileEntity tileEntity; + + public GuiContainer(int id, PlayerInventory inv, CustomTileEntity tileEntity) { + super(ModInnet.COMPRESSOR_GUI.get(), id); + this.tileEntity = tileEntity; + + IItemHandlerModifiable itemHandler = tileEntity.getItemHandler(); + this.addSlot(new SlotItemHandler(itemHandler, CustomTileEntity.SLOT_INGREDIENT, 40, 37)); + + this.addSlot(new SlotItemHandler(itemHandler, ItemStackToItemStackTileEntity.SLOT_OUTPUT, 92, 36) { + @Override + public boolean isItemValid(ItemStack stack) { + return false; + } + }); + + ContainerHelper.addInventorySlots(this, inv, 8, 86, this::addSlot); + } + + public CustomTileEntity getTileEntity() { + return this.tileEntity; + } + + @Override + public boolean canInteractWith(PlayerEntity player) { + return !this.getTileEntity().isRemoved(); + } + + @Override + public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) { + return ContainerHelper.transferStackInSlot(this, playerIn, index, this.getTileEntity(), this::mergeItemStack); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/compressor/CompressorGuiWindow.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/compressor/CompressorGuiWindow.java new file mode 100644 index 000000000..da9f87af2 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/compressor/CompressorGuiWindow.java @@ -0,0 +1,73 @@ +package net.mrscauthd.boss_tools.gui.screens.compressor; + +import net.mrscauthd.boss_tools.BossToolsMod; +import org.lwjgl.opengl.GL11; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.screen.inventory.ContainerScreen; +import net.minecraft.client.renderer.Rectangle2d; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.gui.helper.GuiHelper; +import net.mrscauthd.boss_tools.machines.CompressorBlock.CustomTileEntity; + +@OnlyIn(Dist.CLIENT) +public class CompressorGuiWindow extends ContainerScreen { + + public static final ResourceLocation TEXTURE = new ResourceLocation(BossToolsMod.ModId,"textures/screens/compressor_gui.png"); + + public static final int ENERGY_LEFT = 144; + public static final int ENERGY_TOP = 21; + public static final int ARROW_LEFT = 62; + public static final int ARROW_TOP = 36; + + private CustomTileEntity tileEntity; + + public CompressorGuiWindow(CompressorGui.GuiContainer container, PlayerInventory inventory, ITextComponent text) { + super(container, inventory, text); + this.tileEntity = container.getTileEntity(); + this.xSize = 177; + this.ySize = 168; + this.playerInventoryTitleY = this.ySize - 92; + } + + @Override + public void render(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(ms); + super.render(ms, mouseX, mouseY, partialTicks); + this.renderHoveredTooltip(ms, mouseX, mouseY); + + if (GuiHelper.isHover(this.getEnergyBounds(), mouseX, mouseY)) { + this.renderTooltip(ms, GaugeTextHelper.getStorageText(GaugeValueHelper.getEnergy(this.getTileEntity())).build(), mouseX, mouseY); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(MatrixStack ms, float par1, int par2, int par3) { + CustomTileEntity tileEntity = this.getTileEntity(); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + this.minecraft.getTextureManager().bindTexture(TEXTURE); + AbstractGui.blit(ms, this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize, this.xSize, this.ySize); + + GuiHelper.drawEnergy(ms, this.guiLeft + ENERGY_LEFT, this.guiTop + ENERGY_TOP, tileEntity.getPrimaryEnergyStorage()); + GuiHelper.drawArrow(ms, this.guiLeft + ARROW_LEFT, this.guiTop + ARROW_TOP, tileEntity.getTimerRatio()); + } + + public CustomTileEntity getTileEntity() { + return this.tileEntity; + } + + public Rectangle2d getEnergyBounds() { + return GuiHelper.getEnergyBounds(this.guiLeft + ENERGY_LEFT, this.guiTop + ENERGY_TOP); + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/fuelrefinery/FuelRefineryGui.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/fuelrefinery/FuelRefineryGui.java new file mode 100644 index 000000000..9f6863155 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/fuelrefinery/FuelRefineryGui.java @@ -0,0 +1,57 @@ +package net.mrscauthd.boss_tools.gui.screens.fuelrefinery; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.container.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.network.IContainerFactory; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.SlotItemHandler; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.gui.helper.ContainerHelper; +import net.mrscauthd.boss_tools.machines.FuelRefineryBlock; +import net.mrscauthd.boss_tools.machines.FuelRefineryBlock.CustomTileEntity; + +public class FuelRefineryGui { + + public static class GuiContainerFactory implements IContainerFactory { + public GuiContainer create(int id, PlayerInventory inv, PacketBuffer extraData) { + BlockPos pos = extraData.readBlockPos(); + CustomTileEntity tileEntity = (CustomTileEntity) inv.player.world.getTileEntity(pos); + return new GuiContainer(id, inv, tileEntity); + } + } + + public static class GuiContainer extends Container { + private final CustomTileEntity tileEntity; + + public GuiContainer(int id, PlayerInventory inv, CustomTileEntity tileEntity) { + super(ModInnet.FUEL_REFINERY_GUI.get(), id); + this.tileEntity = tileEntity; + + IItemHandlerModifiable itemHandler = tileEntity.getItemHandler(); + this.addSlot(new SlotItemHandler(itemHandler, FuelRefineryBlock.SLOT_INPUT_SOURCE, 26, 22)); + this.addSlot(new SlotItemHandler(itemHandler, FuelRefineryBlock.SLOT_OUTPUT_SINK, 92, 52)); + this.addSlot(new SlotItemHandler(itemHandler, FuelRefineryBlock.SLOT_INPUT_SINK, 26, 52)); + this.addSlot(new SlotItemHandler(itemHandler, FuelRefineryBlock.SLOT_OUTPUT_SOURCE, 92, 22)); + + ContainerHelper.addInventorySlots(this, inv, 8, 90, this::addSlot); + } + + public CustomTileEntity getTileEntity() { + return this.tileEntity; + } + + @Override + public boolean canInteractWith(PlayerEntity player) { + return !this.getTileEntity().isRemoved(); + } + + @Override + public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) { + return ContainerHelper.transferStackInSlot(this, playerIn, index, this.getTileEntity(), this::mergeItemStack); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/fuelrefinery/FuelRefineryGuiWindow.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/fuelrefinery/FuelRefineryGuiWindow.java new file mode 100644 index 000000000..2c782f1aa --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/fuelrefinery/FuelRefineryGuiWindow.java @@ -0,0 +1,97 @@ +package net.mrscauthd.boss_tools.gui.screens.fuelrefinery; + +import net.mrscauthd.boss_tools.BossToolsMod; +import org.lwjgl.opengl.GL11; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.screen.inventory.ContainerScreen; +import net.minecraft.client.renderer.Rectangle2d; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.gui.helper.GuiHelper; +import net.mrscauthd.boss_tools.machines.FuelRefineryBlock.CustomTileEntity; + +@OnlyIn(Dist.CLIENT) +public class FuelRefineryGuiWindow extends ContainerScreen { + + public static final ResourceLocation texture = new ResourceLocation(BossToolsMod.ModId,"textures/screens/fuel_refinery_gui.png"); + + public static final int INPUT_TANK_LEFT = 9; + public static final int INPUT_TANK_TOP = 21; + + public static final int OUTPUT_TANK_LEFT = 75; + public static final int OUTPUT_TANK_TOP = 21; + + public static final int ENERGY_LEFT = 144; + public static final int ENERGY_TOP = 21; + + public static final int ARROW_LEFT = 48; + public static final int ARROW_TOP = 36; + + private final CustomTileEntity tileEntity; + + public FuelRefineryGuiWindow(FuelRefineryGui.GuiContainer container, PlayerInventory inventory, ITextComponent text) { + super(container, inventory, text); + this.tileEntity = container.getTileEntity(); + this.xSize = 177; + this.ySize = 172; + this.playerInventoryTitleY = this.ySize - 92; + } + + @Override + public void render(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(ms); + super.render(ms, mouseX, mouseY, partialTicks); + this.renderHoveredTooltip(ms, mouseX, mouseY); + + CustomTileEntity tileEntity = (CustomTileEntity) this.getTileEntity(); + + if (GuiHelper.isHover(this.getInputTankBounds(), mouseX, mouseY)) { + + this.renderTooltip(ms, GaugeTextHelper.getStorageText(GaugeValueHelper.getFluid(tileEntity.getInputTank())).build(), mouseX, mouseY); + } else if (GuiHelper.isHover(this.getOutputTankBounds(), mouseX, mouseY)) { + + this.renderTooltip(ms, GaugeTextHelper.getStorageText(GaugeValueHelper.getFluid(tileEntity.getOutputTank())).build(), mouseX, mouseY); + } else if (GuiHelper.isHover(this.getEnergyBounds(), mouseX, mouseY)) { + + this.renderTooltip(ms, GaugeTextHelper.getStorageText(GaugeValueHelper.getEnergy(tileEntity)).build(), mouseX, mouseY); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(MatrixStack ms, float par1, int par2, int par3) { + CustomTileEntity tileEntity = this.getTileEntity(); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + this.minecraft.getTextureManager().bindTexture(texture); + AbstractGui.blit(ms, this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize, this.xSize, this.ySize); + + GuiHelper.drawEnergy(ms, this.guiLeft + ENERGY_LEFT, this.guiTop + ENERGY_TOP, tileEntity.getPrimaryEnergyStorage()); + GuiHelper.drawFluidTank(ms, this.guiLeft + INPUT_TANK_LEFT, this.guiTop + INPUT_TANK_TOP, tileEntity.getInputTank()); + GuiHelper.drawFluidTank(ms, this.guiLeft + OUTPUT_TANK_LEFT, this.guiTop + OUTPUT_TANK_TOP, tileEntity.getOutputTank()); + } + + public CustomTileEntity getTileEntity() { + return this.tileEntity; + } + + public Rectangle2d getInputTankBounds() { + return GuiHelper.getFluidTankBounds(this.guiLeft + INPUT_TANK_LEFT, this.guiTop + INPUT_TANK_TOP); + } + + public Rectangle2d getOutputTankBounds() { + return GuiHelper.getFluidTankBounds(this.guiLeft + OUTPUT_TANK_LEFT, this.guiTop + OUTPUT_TANK_TOP); + } + + public Rectangle2d getEnergyBounds() { + return GuiHelper.getEnergyBounds(this.guiLeft + ENERGY_LEFT, this.guiTop + ENERGY_TOP); + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/lander/LanderGui.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/lander/LanderGui.java new file mode 100644 index 000000000..3a6f8fa21 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/lander/LanderGui.java @@ -0,0 +1,61 @@ +package net.mrscauthd.boss_tools.gui.screens.lander; + +import net.minecraftforge.items.*; + +import net.minecraftforge.fml.network.IContainerFactory; + +import net.minecraft.network.PacketBuffer; +import net.minecraft.item.ItemStack; +import net.minecraft.inventory.container.Container; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.Entity; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.entity.LanderEntity; +import net.mrscauthd.boss_tools.gui.helper.ContainerHelper; + +public class LanderGui { + + public static class GuiContainerFactory implements IContainerFactory { + public GuiContainer create(int id, PlayerInventory inv, PacketBuffer extraData) { + return new GuiContainer(id, inv, extraData); + } + } + + public static class GuiContainer extends Container { + Entity lander; + + public GuiContainer(int id, PlayerInventory inv, PacketBuffer extraData) { + super(ModInnet.LANDER_GUI.get(), id); + + this.lander = inv.player.world.getEntityByID(extraData.readVarInt()); + + IItemHandlerModifiable itemHandler = ((LanderEntity) lander).getItemHandler(); + this.addSlot(new SlotItemHandler(itemHandler, 0, 28, 29) { + @Override + public boolean isItemValid(ItemStack stack) { + return false; + } + }); + + this.addSlot(new SlotItemHandler(itemHandler, 1, 78, 29) { + @Override + public boolean isItemValid(ItemStack stack) { + return false; + } + }); + + ContainerHelper.addInventorySlots(this, inv, 8, 84, this::addSlot); + } + + @Override + public boolean canInteractWith(PlayerEntity player) { + return !lander.removed; + } + + @Override + public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) { + return ContainerHelper.transferStackInSlot(this, playerIn, index, 0, 2, this::mergeItemStack); + } + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/lander/LanderGuiWindow.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/lander/LanderGuiWindow.java new file mode 100644 index 000000000..4d7ee3bfe --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/lander/LanderGuiWindow.java @@ -0,0 +1,43 @@ +package net.mrscauthd.boss_tools.gui.screens.lander; + +import net.mrscauthd.boss_tools.BossToolsMod; +import org.lwjgl.opengl.GL11; + +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.ResourceLocation; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.client.gui.screen.inventory.ContainerScreen; +import net.minecraft.client.Minecraft; + +import com.mojang.blaze3d.matrix.MatrixStack; + +@OnlyIn(Dist.CLIENT) +public class LanderGuiWindow extends ContainerScreen { + + private static final ResourceLocation texture = new ResourceLocation(BossToolsMod.ModId,"textures/screens/lander_gui.png"); + + public LanderGuiWindow(LanderGui.GuiContainer container, PlayerInventory inventory, ITextComponent text) { + super(container, inventory, text); + this.xSize = 176; + this.ySize = 167; + this.playerInventoryTitleY = this.ySize - 93; + } + + @Override + public void render(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(ms); + super.render(ms, mouseX, mouseY, partialTicks); + this.renderHoveredTooltip(ms, mouseX, mouseY); + } + + @Override + protected void drawGuiContainerBackgroundLayer(MatrixStack ms, float par1, int par2, int par3) { + GL11.glColor4f(1, 1, 1, 1); + + Minecraft.getInstance().getTextureManager().bindTexture(texture); + this.blit(ms, this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize, this.xSize, this.ySize); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/nasaworkbench/NasaWorkbenchGui.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/nasaworkbench/NasaWorkbenchGui.java new file mode 100644 index 000000000..4c626bfe4 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/nasaworkbench/NasaWorkbenchGui.java @@ -0,0 +1,138 @@ +package net.mrscauthd.boss_tools.gui.screens.nasaworkbench; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.CraftResultInventory; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.network.IContainerFactory; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.crafting.WorkbenchingRecipe; +import net.mrscauthd.boss_tools.gui.helper.ContainerHelper; +import net.mrscauthd.boss_tools.gui.helper.GridPlacer; +import net.mrscauthd.boss_tools.gui.helper.RocketPartGridPlacer; +import net.mrscauthd.boss_tools.inventory.RocketPartsItemHandler; +import net.mrscauthd.boss_tools.machines.NASAWorkbenchBlock.CustomTileEntity; + +public class NasaWorkbenchGui { + + public static class GuiContainerFactory implements IContainerFactory { + public GuiContainer create(int id, PlayerInventory inv, PacketBuffer extraData) { + BlockPos pos = extraData.readBlockPos(); + CustomTileEntity tileEntity = (CustomTileEntity) inv.player.world.getTileEntity(pos); + return new GuiContainer(id, inv, tileEntity); + } + } + + public static class GuiContainer extends Container { + private CustomTileEntity tileEntity; + private CraftResultInventory resultInventory; + private Slot resultSlot; + private int partSlotStart = 0; + private int partSlotEnd = 0; + + public GuiContainer(int id, PlayerInventory inv, CustomTileEntity tileEntity) { + super(ModInnet.NASA_WORKBENCH_GUI.get(), id); + this.tileEntity = tileEntity; + + this.resultInventory = new CraftResultInventory() { + @Override + public ItemStack decrStackSize(int p_70298_1_, int p_70298_2_) { + ItemStack stack = super.decrStackSize(p_70298_1_, p_70298_2_); + GuiContainer.this.onExtractResult(stack); + return stack; + } + + @Override + public ItemStack removeStackFromSlot(int p_70304_1_) { + ItemStack stack = super.removeStackFromSlot(p_70304_1_); + GuiContainer.this.onExtractResult(stack); + return stack; + } + }; + + this.resultSlot = this.addSlot(new NasaWorkbenchResultSlot(this.resultInventory, 0, 133, 74, tileEntity)); + + this.partSlotStart = this.inventorySlots.size(); + + RocketPartsItemHandler partsItemHandler = tileEntity.getPartsItemHandler(); + GridPlacer placer = new GridPlacer(); + RocketPartGridPlacer.placeContainer(40, 18, 1, placer::placeBottom, ModInnet.ROCKET_PART_NOSE.get(), partsItemHandler, this::addSlot); + RocketPartGridPlacer.placeContainer(31, 36, 2, placer::placeBottom, ModInnet.ROCKET_PART_BODY.get(), partsItemHandler, this::addSlot); + RocketPartGridPlacer.placeContainer(31, 90, 1, placer::placeRight, ModInnet.ROCKET_PART_TANK.get(), partsItemHandler, this::addSlot); + RocketPartGridPlacer.placeContainer(13, 90, 1, placer::placeBottom, ModInnet.ROCKET_PART_FIN_LEFT.get(), partsItemHandler, this::addSlot); + RocketPartGridPlacer.placeContainer(67, 90, 1, placer::placeBottom, ModInnet.ROCKET_PART_FIN_RIGHT.get(), partsItemHandler, this::addSlot); + RocketPartGridPlacer.placeContainer(40, 108, 1, placer::placeBottom, ModInnet.ROCKET_PART_ENGINE.get(), partsItemHandler, this::addSlot); + + this.partSlotEnd = this.inventorySlots.size(); + + ContainerHelper.addInventorySlots(this, inv, 8, 142, this::addSlot); + } + + private void onExtractResult(ItemStack stack) { + CustomTileEntity tileEntity = this.getTileEntity(); + + if (!stack.isEmpty() && tileEntity.cacheRecipes() != null) { + tileEntity.consumeIngredient(); + } + } + + @Override + public void detectAndSendChanges() { + super.detectAndSendChanges(); + + WorkbenchingRecipe recipe = this.getTileEntity().cacheRecipes(); + + this.resultSlot.putStack(recipe != null ? recipe.getOutput() : ItemStack.EMPTY); + } + + @Override + public boolean canInteractWith(PlayerEntity player) { + return !this.getTileEntity().isRemoved(); + } + + @Override + public ItemStack transferStackInSlot(PlayerEntity playerIn, int slotNumber) { + if (this.partSlotStart <= slotNumber && slotNumber < this.partSlotEnd) { + return ContainerHelper.transferStackInSlot(this, playerIn, slotNumber, slotNumber - this.partSlotStart, this.getTileEntity(), this::mergeItemStack); + } else if (slotNumber == this.resultSlot.slotNumber) { + Slot slot = this.getSlot(slotNumber); + ItemStack prev = slot.getStack().copy(); + ItemStack itemStack = ContainerHelper.transferStackInSlot(this, playerIn, slotNumber, this.getTileEntity(), this::mergeItemStack); + + if (slotNumber == this.resultSlot.slotNumber) { + ItemStack next = slot.getStack().copy(); + + if (!prev.isEmpty()) { + int nextSize = next.isEmpty() ? 0 : next.getCount(); + + if (nextSize > 0) { + playerIn.dropItem(next, false); + slot.putStack(ItemStack.EMPTY); + } + } + this.onExtractResult(prev); + } + + return itemStack; + } else { + return ContainerHelper.transferStackInSlot(this, playerIn, slotNumber, this.getTileEntity(), this::mergeItemStack); + } + } + + public CustomTileEntity getTileEntity() { + return this.tileEntity; + } + + public CraftResultInventory getResultInventory() { + return this.resultInventory; + } + + public Slot getResultSlot() { + return this.resultSlot; + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/nasaworkbench/NasaWorkbenchGuiWindow.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/nasaworkbench/NasaWorkbenchGuiWindow.java new file mode 100644 index 000000000..7571fb9f8 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/nasaworkbench/NasaWorkbenchGuiWindow.java @@ -0,0 +1,50 @@ +package net.mrscauthd.boss_tools.gui.screens.nasaworkbench; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.screen.inventory.ContainerScreen; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.machines.NASAWorkbenchBlock.CustomTileEntity; + +@OnlyIn(Dist.CLIENT) +public class NasaWorkbenchGuiWindow extends ContainerScreen { + + public static final ResourceLocation texture = new ResourceLocation(BossToolsMod.ModId,"textures/screens/nasa_workbench_gui.png"); + + private CustomTileEntity tileEntity; + + public NasaWorkbenchGuiWindow(NasaWorkbenchGui.GuiContainer container, PlayerInventory inventory, ITextComponent text) { + super(container, inventory, text); + this.tileEntity = container.getTileEntity(); + this.xSize = 176; + this.ySize = 224; + this.playerInventoryTitleY = this.ySize - 92; + } + + @Override + public void render(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(ms); + super.render(ms, mouseX, mouseY, partialTicks); + this.renderHoveredTooltip(ms, mouseX, mouseY); + } + + @Override + protected void drawGuiContainerBackgroundLayer(MatrixStack ms, float partialTicks, int gx, int gy) { + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + + Minecraft.getInstance().getTextureManager().bindTexture(texture); + AbstractGui.blit(ms, this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize, this.xSize, this.ySize); + } + + public CustomTileEntity getTileEntity() { + return this.tileEntity; + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/nasaworkbench/NasaWorkbenchResultSlot.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/nasaworkbench/NasaWorkbenchResultSlot.java new file mode 100644 index 000000000..834822c2e --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/nasaworkbench/NasaWorkbenchResultSlot.java @@ -0,0 +1,24 @@ +package net.mrscauthd.boss_tools.gui.screens.nasaworkbench; + +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.container.Slot; +import net.minecraft.item.ItemStack; +import net.mrscauthd.boss_tools.machines.NASAWorkbenchBlock.CustomTileEntity; + +public class NasaWorkbenchResultSlot extends Slot { + + private final CustomTileEntity tileEntity; + + public NasaWorkbenchResultSlot(IInventory inventory, int slotIndex, int xPos, int yPos, CustomTileEntity tileEntity) { + super(inventory, slotIndex, xPos, yPos); + this.tileEntity = tileEntity; + } + + public boolean isItemValid(ItemStack p_75214_1_) { + return false; + } + + public CustomTileEntity getTileEntity() { + return this.tileEntity; + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/oxygenbubbledistributor/OxygenBubbleDistributorGui.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/oxygenbubbledistributor/OxygenBubbleDistributorGui.java new file mode 100644 index 000000000..dbb5d895a --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/oxygenbubbledistributor/OxygenBubbleDistributorGui.java @@ -0,0 +1,55 @@ +package net.mrscauthd.boss_tools.gui.screens.oxygenbubbledistributor; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.container.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.network.IContainerFactory; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.SlotItemHandler; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.gui.helper.ContainerHelper; +import net.mrscauthd.boss_tools.machines.OxygenBubbleDistributorBlock.CustomTileEntity; +import net.mrscauthd.boss_tools.machines.tile.OxygenMakingTileEntity; + +public class OxygenBubbleDistributorGui { + + public static class GuiContainerFactory implements IContainerFactory { + public GuiContainer create(int id, PlayerInventory inv, PacketBuffer extraData) { + BlockPos pos = extraData.readBlockPos(); + CustomTileEntity tileEntity = (CustomTileEntity) inv.player.world.getTileEntity(pos); + return new GuiContainer(id, inv, tileEntity); + } + } + + public static class GuiContainer extends Container { + private CustomTileEntity tileEntity; + + public GuiContainer(int id, PlayerInventory inv, CustomTileEntity tileEntity) { + super(ModInnet.OXYGEN_BUBBLE_DISTRIBUTOR_GUI.get(), id); + this.tileEntity = tileEntity; + + IItemHandlerModifiable internal = tileEntity.getItemHandler(); + this.addSlot(new SlotItemHandler(internal, OxygenMakingTileEntity.SLOT_INPUT_SOURCE, 26, 22)); + this.addSlot(new SlotItemHandler(internal, OxygenMakingTileEntity.SLOT_INPUT_SINK, 26, 52)); + + ContainerHelper.addInventorySlots(this, inv, 8, 90, this::addSlot); + } + + public CustomTileEntity getTileEntity() { + return this.tileEntity; + } + + @Override + public boolean canInteractWith(PlayerEntity player) { + return !this.getTileEntity().isRemoved(); + } + + @Override + public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) { + return ContainerHelper.transferStackInSlot(this, playerIn, index, this.getTileEntity(), this::mergeItemStack); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/oxygenbubbledistributor/OxygenBubbleDistributorGuiWindow.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/oxygenbubbledistributor/OxygenBubbleDistributorGuiWindow.java new file mode 100644 index 000000000..8e71c8237 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/oxygenbubbledistributor/OxygenBubbleDistributorGuiWindow.java @@ -0,0 +1,213 @@ +package net.mrscauthd.boss_tools.gui.screens.oxygenbubbledistributor; + +import java.text.NumberFormat; + +import net.minecraft.client.gui.widget.button.ImageButton; +import net.mrscauthd.boss_tools.gui.helper.ImageButtonPlacer; +import org.lwjgl.opengl.GL11; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.screen.inventory.ContainerScreen; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.client.renderer.Rectangle2d; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.gui.helper.GuiHelper; +import net.mrscauthd.boss_tools.machines.OxygenBubbleDistributorBlock; +import net.mrscauthd.boss_tools.machines.OxygenBubbleDistributorBlock.CustomTileEntity; + +@OnlyIn(Dist.CLIENT) +public class OxygenBubbleDistributorGuiWindow extends ContainerScreen { + + public static final ResourceLocation texture = new ResourceLocation(BossToolsMod.ModId,"textures/screens/oxygen_bubble_distributor_gui.png"); + + public static final int INPUT_TANK_LEFT = 9; + public static final int INPUT_TANK_TOP = 21; + + public static final int OUTPUT_TANK_LEFT = 75; + public static final int OUTPUT_TANK_TOP = 21; + + public static final int ENERGY_LEFT = 144; + public static final int ENERGY_TOP = 21; + + public static final int ARROW_LEFT = 48; + public static final int ARROW_TOP = 36; + + private CustomTileEntity tileEntity; + + private boolean cachedWorkingAreaVisible = true; + + //Buttons + public ImageButtonPlacer workingAreaVisibleButton; + public ImageButtonPlacer button_plus; + public ImageButtonPlacer button_minus; + + private static ResourceLocation HideButton = new ResourceLocation(BossToolsMod.ModId,"textures/buttons/technik_button.png"); + private static ResourceLocation Button1 = new ResourceLocation(BossToolsMod.ModId,"textures/buttons/technik_button_plus.png"); + private static ResourceLocation Button2 = new ResourceLocation(BossToolsMod.ModId,"textures/buttons/technik_button_minus.png"); + + public OxygenBubbleDistributorGuiWindow(OxygenBubbleDistributorGui.GuiContainer container, PlayerInventory inventory, ITextComponent text) { + super(container, inventory, text); + this.tileEntity = container.getTileEntity(); + this.xSize = 177; + this.ySize = 172; + this.playerInventoryTitleY = this.ySize - 92; + } + + @Override + public void render(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(ms); + this.updateWorkingAreaVisibleButton(); + super.render(ms, mouseX, mouseY, partialTicks); + this.renderHoveredTooltip(ms, mouseX, mouseY); + + CustomTileEntity tileEntity = (CustomTileEntity) this.getTileEntity(); + + if (GuiHelper.isHover(this.getInputTankBounds(), mouseX, mouseY)) { + + this.renderTooltip(ms, GaugeTextHelper.getStorageText(GaugeValueHelper.getFluid(tileEntity.getInputTank())).build(), mouseX, mouseY); + } else if (GuiHelper.isHover(this.getOutputTankBounds(), mouseX, mouseY)) { + + this.renderTooltip(ms, GaugeTextHelper.getStorageText(GaugeValueHelper.getOxygen(tileEntity.getOutputTank())).build(), mouseX, mouseY); + } else if (GuiHelper.isHover(this.getEnergyBounds(), mouseX, mouseY)) { + + this.renderTooltip(ms, GaugeTextHelper.getStorageText(GaugeValueHelper.getEnergy(tileEntity)).build(), mouseX, mouseY); + } + + if (GuiHelper.isHover(this.getButtonBounds(-20, 4, 20, 21), mouseX, mouseY)) { + button_plus.setTexture(new ResourceLocation(BossToolsMod.ModId,"textures/buttons/technik_button_plus_2.png")); + } else { + button_plus.setTexture(new ResourceLocation(BossToolsMod.ModId,"textures/buttons/technik_button_plus.png")); + } + + if (GuiHelper.isHover(this.getButtonBounds(-20, 25, 20, 20), mouseX, mouseY)) { + button_minus.setTexture(new ResourceLocation(BossToolsMod.ModId,"textures/buttons/technik_button_minus_2.png")); + } else { + button_minus.setTexture(new ResourceLocation(BossToolsMod.ModId,"textures/buttons/technik_button_minus.png")); + } + + if (GuiHelper.isHover(this.getButtonBounds(-20, - 22, 34, 20), mouseX, mouseY)) { + workingAreaVisibleButton.setTexture(new ResourceLocation(BossToolsMod.ModId,"textures/buttons/technik_button_2.png")); + } else { + workingAreaVisibleButton.setTexture(new ResourceLocation(BossToolsMod.ModId,"textures/buttons/technik_button.png")); + } + + } + + @Override + protected void drawGuiContainerBackgroundLayer(MatrixStack ms, float par1, int par2, int par3) { + CustomTileEntity tileEntity = this.getTileEntity(); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + this.minecraft.getTextureManager().bindTexture(texture); + AbstractGui.blit(ms, this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize, this.xSize, this.ySize); + + GuiHelper.drawEnergy(ms, this.guiLeft + ENERGY_LEFT, this.guiTop + ENERGY_TOP, tileEntity.getPrimaryEnergyStorage()); + GuiHelper.drawFluidTank(ms, this.guiLeft + INPUT_TANK_LEFT, this.guiTop + INPUT_TANK_TOP, tileEntity.getInputTank()); + GuiHelper.drawOxygenTank(ms, this.guiLeft + OUTPUT_TANK_LEFT, this.guiTop + OUTPUT_TANK_TOP, tileEntity.getOutputTank()); + } + + @Override + protected void init() { + super.init(); + + button_plus = this.addButton(new ImageButtonPlacer(this.guiLeft - 20, this.guiTop + 5, 20, 20, 0, 0, 0, Button1, 20, 20, (p_2130901) -> { + BlockPos pos = this.getTileEntity().getPos(); + BossToolsMod.PACKET_HANDLER.sendToServer(new OxygenBubbleDistributorBlock.ChangeRangeMessage(pos, true)); + })); + + button_minus = this.addButton(new ImageButtonPlacer(this.guiLeft - 20, this.guiTop + 25, 20, 20, 0, 0, 0, Button2, 20, 20, (p_2130901) -> { + BlockPos pos = this.getTileEntity().getPos(); + BossToolsMod.PACKET_HANDLER.sendToServer(new OxygenBubbleDistributorBlock.ChangeRangeMessage(pos, false)); + })); + + workingAreaVisibleButton = this.addButton(new ImageButtonPlacer(this.guiLeft - 20, this.guiTop - 22, 34, 20, 0, 0, 0, HideButton, 34, 20, e -> { + BlockPos pos = this.getTileEntity().getPos(); + BossToolsMod.PACKET_HANDLER.sendToServer(new OxygenBubbleDistributorBlock.ChangeWorkingAreaVisibleMessage(pos, !this.cachedWorkingAreaVisible)); + })); + } + + @Override + protected void drawGuiContainerForegroundLayer(MatrixStack ms, int mouseX, int mouseY) { + super.drawGuiContainerForegroundLayer(ms, mouseX, mouseY); + + CustomTileEntity tileEntity = this.getTileEntity(); + double range = tileEntity.getRange(); + NumberFormat numberInstance = NumberFormat.getNumberInstance(); + numberInstance.setMaximumFractionDigits(2); + String rangeToString = numberInstance.format((range * 2.0D) + 1.0D); + TranslationTextComponent workingAreaText = new TranslationTextComponent("gui." + BossToolsMod.ModId + ".oxygen_bubble_distributor.workingarea.text", rangeToString, rangeToString, rangeToString); + + int sideWidth = 2; + int sidePadding = 2; + int workingAreaHeight = 25; + int workingAreaLeft = this.workingAreaVisibleButton.x + this.workingAreaVisibleButton.getWidth() - this.guiLeft; + int workingAreaTop = -workingAreaHeight; + int workingAreaOffsetX = workingAreaLeft; + + int textwidth = 12; + + if ((range * 2) + 1 > 9) { + this.minecraft.getTextureManager().bindTexture(new ResourceLocation(BossToolsMod.ModId,"textures/buttons/oxygen_range_layer.png")); + AbstractGui.blit(ms, workingAreaOffsetX + 1, workingAreaTop, 0, 0, 150, 25, 150, 25); + textwidth = 13; + } else { + this.minecraft.getTextureManager().bindTexture(new ResourceLocation(BossToolsMod.ModId,"textures/buttons/oxygen_range_small_layer.png")); + AbstractGui.blit(ms, workingAreaOffsetX + 1, workingAreaTop, 0, 0, 140, 25, 140, 25); + textwidth = 17; + } + + this.font.func_243248_b(ms, workingAreaText, workingAreaLeft + sideWidth + sidePadding + textwidth, workingAreaTop + 9, 0x339900); + + GL11.glPushMatrix(); + double oyxgenScale = 0.8D; + GL11.glScaled(oyxgenScale, oyxgenScale, oyxgenScale); + ITextComponent oxygenText = GaugeTextHelper.getUsingText2(GaugeValueHelper.getOxygen(tileEntity.getOxygenUsing(range)), tileEntity.getMaxTimer()).build(); + int oxygenWidth = this.font.getStringPropertyWidth(oxygenText); + this.font.func_243248_b(ms, oxygenText, (int) ((this.xSize - 5) / oyxgenScale) - oxygenWidth, (int) (this.playerInventoryTitleY / oyxgenScale), 0x333333); + GL11.glPopMatrix(); + + String prefix = "gui." + BossToolsMod.ModId + ".oxygen_bubble_distributor.workingarea."; + String method = this.cachedWorkingAreaVisible ? "hide" : "show"; + this.font.func_243248_b(ms, new TranslationTextComponent(prefix + method), workingAreaLeft + sideWidth + sidePadding + (this.cachedWorkingAreaVisible ? -30 : -32), workingAreaTop + 9, 0x339900); + } + + private void updateWorkingAreaVisibleButton() { + boolean next = this.getTileEntity().isWorkingAreaVisible(); + + if (this.cachedWorkingAreaVisible != next) { + this.cachedWorkingAreaVisible = next; + } + } + + public CustomTileEntity getTileEntity() { + return this.tileEntity; + } + + public Rectangle2d getInputTankBounds() { + return GuiHelper.getFluidTankBounds(this.guiLeft + INPUT_TANK_LEFT, this.guiTop + INPUT_TANK_TOP); + } + + public Rectangle2d getOutputTankBounds() { + return GuiHelper.getFluidTankBounds(this.guiLeft + OUTPUT_TANK_LEFT, this.guiTop + OUTPUT_TANK_TOP); + } + + public Rectangle2d getEnergyBounds() { + return GuiHelper.getEnergyBounds(this.guiLeft + ENERGY_LEFT, this.guiTop + ENERGY_TOP); + } + + public Rectangle2d getButtonBounds(int left, int top, int width, int height) { + return GuiHelper.getBounds(this.guiLeft + left, this.guiTop + top, width, height); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/oxygenloader/OxygenLoaderGui.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/oxygenloader/OxygenLoaderGui.java new file mode 100644 index 000000000..2cbd82c1b --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/oxygenloader/OxygenLoaderGui.java @@ -0,0 +1,58 @@ +package net.mrscauthd.boss_tools.gui.screens.oxygenloader; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.container.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.network.IContainerFactory; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.SlotItemHandler; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.gui.helper.ContainerHelper; +import net.mrscauthd.boss_tools.machines.OxygenLoaderBlock; +import net.mrscauthd.boss_tools.machines.OxygenLoaderBlock.CustomTileEntity; +import net.mrscauthd.boss_tools.machines.tile.OxygenMakingTileEntity; + +public class OxygenLoaderGui { + + public static class GuiContainerFactory implements IContainerFactory { + public GuiContainer create(int id, PlayerInventory inv, PacketBuffer extraData) { + BlockPos pos = extraData.readBlockPos(); + CustomTileEntity tileEntity = (CustomTileEntity) inv.player.world.getTileEntity(pos); + return new GuiContainer(id, inv, tileEntity); + } + } + + public static class GuiContainer extends Container { + private CustomTileEntity tileEntity; + + public GuiContainer(int id, PlayerInventory inv, CustomTileEntity tileEntity) { + super(ModInnet.OXYGEN_LOADER_GUI.get(), id); + this.tileEntity = tileEntity; + + IItemHandlerModifiable internal = tileEntity.getItemHandler(); + this.addSlot(new SlotItemHandler(internal, OxygenMakingTileEntity.SLOT_INPUT_SOURCE, 26, 22)); + this.addSlot(new SlotItemHandler(internal, OxygenLoaderBlock.SLOT_OUTPUT_SINK, 92, 52)); + this.addSlot(new SlotItemHandler(internal, OxygenMakingTileEntity.SLOT_INPUT_SINK, 26, 52)); + this.addSlot(new SlotItemHandler(internal, OxygenLoaderBlock.SLOT_OUTPUT_SOURCE, 92, 22)); + + ContainerHelper.addInventorySlots(this, inv, 8, 90, this::addSlot); + } + + public CustomTileEntity getTileEntity() { + return this.tileEntity; + } + + @Override + public boolean canInteractWith(PlayerEntity player) { + return !this.getTileEntity().isRemoved(); + } + + @Override + public ItemStack transferStackInSlot(PlayerEntity player, int index) { + return ContainerHelper.transferStackInSlot(this, player, index, this.getTileEntity(), this::mergeItemStack); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/oxygenloader/OxygenLoaderGuiWindow.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/oxygenloader/OxygenLoaderGuiWindow.java new file mode 100644 index 000000000..0e638326a --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/oxygenloader/OxygenLoaderGuiWindow.java @@ -0,0 +1,97 @@ +package net.mrscauthd.boss_tools.gui.screens.oxygenloader; + +import net.mrscauthd.boss_tools.BossToolsMod; +import org.lwjgl.opengl.GL11; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.screen.inventory.ContainerScreen; +import net.minecraft.client.renderer.Rectangle2d; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.gui.helper.GuiHelper; +import net.mrscauthd.boss_tools.machines.OxygenLoaderBlock.CustomTileEntity; + +@OnlyIn(Dist.CLIENT) +public class OxygenLoaderGuiWindow extends ContainerScreen { + + public static final ResourceLocation texture = new ResourceLocation(BossToolsMod.ModId,"textures/screens/oxygen_loader_gui.png"); + + public static final int INPUT_TANK_LEFT = 9; + public static final int INPUT_TANK_TOP = 21; + + public static final int OUTPUT_TANK_LEFT = 75; + public static final int OUTPUT_TANK_TOP = 21; + + public static final int ENERGY_LEFT = 144; + public static final int ENERGY_TOP = 21; + + public static final int ARROW_LEFT = 48; + public static final int ARROW_TOP = 36; + + private CustomTileEntity tileEntity; + + public OxygenLoaderGuiWindow(OxygenLoaderGui.GuiContainer container, PlayerInventory inventory, ITextComponent text) { + super(container, inventory, text); + this.tileEntity = container.getTileEntity(); + this.xSize = 177; + this.ySize = 172; + this.playerInventoryTitleY = this.ySize - 92; + } + + @Override + public void render(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(ms); + super.render(ms, mouseX, mouseY, partialTicks); + this.renderHoveredTooltip(ms, mouseX, mouseY); + + CustomTileEntity tileEntity = (CustomTileEntity) this.getTileEntity(); + + if (GuiHelper.isHover(this.getInputTankBounds(), mouseX, mouseY)) { + + this.renderTooltip(ms, GaugeTextHelper.getStorageText(GaugeValueHelper.getFluid(tileEntity.getInputTank())).build(), mouseX, mouseY); + } else if (GuiHelper.isHover(this.getOutputTankBounds(), mouseX, mouseY)) { + + this.renderTooltip(ms, GaugeTextHelper.getStorageText(GaugeValueHelper.getOxygen(tileEntity.getOutputTank())).build(), mouseX, mouseY); + } else if (GuiHelper.isHover(this.getEnergyBounds(), mouseX, mouseY)) { + + this.renderTooltip(ms, GaugeTextHelper.getStorageText(GaugeValueHelper.getEnergy(tileEntity)).build(), mouseX, mouseY); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(MatrixStack ms, float par1, int par2, int par3) { + CustomTileEntity tileEntity = this.getTileEntity(); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + this.minecraft.getTextureManager().bindTexture(texture); + AbstractGui.blit(ms, this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize, this.xSize, this.ySize); + + GuiHelper.drawEnergy(ms, this.guiLeft + ENERGY_LEFT, this.guiTop + ENERGY_TOP, tileEntity.getPrimaryEnergyStorage()); + GuiHelper.drawFluidTank(ms, this.guiLeft + INPUT_TANK_LEFT, this.guiTop + INPUT_TANK_TOP, tileEntity.getInputTank()); + GuiHelper.drawOxygenTank(ms, this.guiLeft + OUTPUT_TANK_LEFT, this.guiTop + OUTPUT_TANK_TOP, tileEntity.getOutputTank()); + } + + public CustomTileEntity getTileEntity() { + return this.tileEntity; + } + + public Rectangle2d getInputTankBounds() { + return GuiHelper.getFluidTankBounds(this.guiLeft + INPUT_TANK_LEFT, this.guiTop + INPUT_TANK_TOP); + } + + public Rectangle2d getOutputTankBounds() { + return GuiHelper.getFluidTankBounds(this.guiLeft + OUTPUT_TANK_LEFT, this.guiTop + OUTPUT_TANK_TOP); + } + + public Rectangle2d getEnergyBounds() { + return GuiHelper.getEnergyBounds(this.guiLeft + ENERGY_LEFT, this.guiTop + ENERGY_TOP); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/planetselection/PlanetSelectionGui.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/planetselection/PlanetSelectionGui.java new file mode 100644 index 000000000..802ed8b7f --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/planetselection/PlanetSelectionGui.java @@ -0,0 +1,166 @@ +package net.mrscauthd.boss_tools.gui.screens.planetselection; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.container.Container; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.gen.feature.template.PlacementSettings; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.fml.network.IContainerFactory; +import net.minecraftforge.fml.network.NetworkEvent; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.events.Methodes; + +import java.util.function.Supplier; + +public class PlanetSelectionGui { + + public static class GuiContainerFactory implements IContainerFactory { + public GuiContainer create(int id, PlayerInventory inv, PacketBuffer extraData) { + return new GuiContainer(id, inv, extraData); + } + } + + public static class GuiContainer extends Container { + String rocket; + + public GuiContainer(int id, PlayerInventory inv, PacketBuffer extraData) { + super(ModInnet.PLANET_SELECTION_GUI.get(), id); + + this.rocket = extraData.readString(); + } + + + @Override + public boolean canInteractWith(PlayerEntity player) { + return !player.removed; + } + } + + public static class NetworkMessage { + private int integer = 0; + + public NetworkMessage() { + + } + + public NetworkMessage(int integer) { + this.setInteger(integer); + } + + public NetworkMessage(PacketBuffer buffer) { + this.setInteger(buffer.readInt()); + } + + public int getInteger() { + return this.integer; + } + + public void setInteger(int integer) { + this.integer = integer; + } + + public static NetworkMessage decode(PacketBuffer buffer) { + return new NetworkMessage(buffer); + } + + public static void encode(NetworkMessage message, PacketBuffer buffer) { + buffer.writeInt(message.getInteger()); + } + + public static void handle(NetworkMessage message, Supplier contextSupplier) { + NetworkEvent.Context context = contextSupplier.get(); + + //Teleport Planet Buttons + if (message.getInteger() == 0) { + defaultOptions(context.getSender()); + Methodes.teleportButton(context.getSender(), new ResourceLocation("minecraft:overworld"), false); + } + if (message.getInteger() == 1) { + defaultOptions(context.getSender()); + Methodes.teleportButton(context.getSender(), new ResourceLocation("boss_tools:moon"), false); + } + if (message.getInteger() == 2) { + defaultOptions(context.getSender()); + Methodes.teleportButton(context.getSender(), new ResourceLocation("boss_tools:mars"), false); + } + if (message.getInteger() == 3) { + defaultOptions(context.getSender()); + Methodes.teleportButton(context.getSender(), new ResourceLocation("boss_tools:mercury"), false); + } + if (message.getInteger() == 4) { + defaultOptions(context.getSender()); + Methodes.teleportButton(context.getSender(), new ResourceLocation("boss_tools:venus"), false); + } + + //Teleport Orbit Buttons + if (message.getInteger() == 5) { + defaultOptions(context.getSender()); + Methodes.teleportButton(context.getSender(), new ResourceLocation("boss_tools:overworld_orbit"), false); + } + if (message.getInteger() == 6) { + defaultOptions(context.getSender()); + Methodes.teleportButton(context.getSender(), new ResourceLocation("boss_tools:moon_orbit"), false); + } + if (message.getInteger() == 7) { + defaultOptions(context.getSender()); + Methodes.teleportButton(context.getSender(), new ResourceLocation("boss_tools:mars_orbit"), false); + } + if (message.getInteger() == 8) { + defaultOptions(context.getSender()); + Methodes.teleportButton(context.getSender(), new ResourceLocation("boss_tools:mercury_orbit"), false); + } + if (message.getInteger() == 9) { + defaultOptions(context.getSender()); + Methodes.teleportButton(context.getSender(), new ResourceLocation("boss_tools:venus_orbit"), false); + } + + //Create Space Station Buttons + if (message.getInteger() == 10) { + deleteItems(context.getSender()); + defaultOptions(context.getSender()); + Methodes.teleportButton(context.getSender(), new ResourceLocation("boss_tools:overworld_orbit"), true); + } + if (message.getInteger() == 11) { + deleteItems(context.getSender()); + defaultOptions(context.getSender()); + Methodes.teleportButton(context.getSender(), new ResourceLocation("boss_tools:moon_orbit"), true); + } + if (message.getInteger() == 12) { + deleteItems(context.getSender()); + defaultOptions(context.getSender()); + Methodes.teleportButton(context.getSender(), new ResourceLocation("boss_tools:mars_orbit"), true); + } + if (message.getInteger() == 13) { + deleteItems(context.getSender()); + defaultOptions(context.getSender()); + Methodes.teleportButton(context.getSender(), new ResourceLocation("boss_tools:mercury_orbit"), true); + } + if (message.getInteger() == 14) { + deleteItems(context.getSender()); + defaultOptions(context.getSender()); + Methodes.teleportButton(context.getSender(), new ResourceLocation("boss_tools:venus_orbit"), true); + } + + context.setPacketHandled(true); + } + } + + public static void defaultOptions(PlayerEntity player) { + player.setNoGravity(false); + player.closeScreen(); + } + + public static void deleteItems(PlayerEntity player) { + player.inventory.func_234564_a_(p -> Items.DIAMOND == p.getItem(), 6, player.inventory); + player.inventory.func_234564_a_(p -> ModInnet.IRON_PLATE.get() == p.getItem(), 12, player.inventory); + player.inventory.func_234564_a_(p -> ModInnet.STEEL_INGOT.get() == p.getItem(), 16, player.inventory); + player.inventory.func_234564_a_(p -> ModInnet.DESH_PLATE.get() == p.getItem(), 4, player.inventory); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/planetselection/PlanetSelectionGuiWindow.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/planetselection/PlanetSelectionGuiWindow.java new file mode 100644 index 000000000..be399bbe7 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/planetselection/PlanetSelectionGuiWindow.java @@ -0,0 +1,507 @@ +package net.mrscauthd.boss_tools.gui.screens.planetselection; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screen.inventory.ContainerScreen; +import net.minecraft.client.renderer.Rectangle2d; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Quaternion; +import net.minecraft.util.math.vector.Vector3f; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.gui.helper.GuiHelper; +import net.mrscauthd.boss_tools.gui.helper.ImageButtonPlacer; + +import java.util.ArrayList; +import java.util.List; + +@OnlyIn(Dist.CLIENT) +public class PlanetSelectionGuiWindow extends ContainerScreen { + + private static ResourceLocation texture = new ResourceLocation(BossToolsMod.ModId,"textures/screens/planet_selection_gui.png"); + + private static ResourceLocation defaultButtonTex = new ResourceLocation(BossToolsMod.ModId,"textures/buttons/red_button.png"); + private static ResourceLocation gbButtonTex = new ResourceLocation(BossToolsMod.ModId,"textures/buttons/green_button.png"); + private static ResourceLocation gb2ButtonTex = new ResourceLocation(BossToolsMod.ModId,"textures/buttons/green_button_2.png"); + private static ResourceLocation rbButtonTex = new ResourceLocation(BossToolsMod.ModId,"textures/buttons/red_button.png"); + private static ResourceLocation rb2ButtonTex = new ResourceLocation(BossToolsMod.ModId,"textures/buttons/red_button_2.png"); + + private static ResourceLocation dbbButtonTex = new ResourceLocation(BossToolsMod.ModId,"textures/buttons/dark_blue_button.png"); + private static ResourceLocation dbb2ButtonTex = new ResourceLocation(BossToolsMod.ModId,"textures/buttons/dark_blue_button_2.png"); + + private static ResourceLocation bbButtonTex = new ResourceLocation(BossToolsMod.ModId,"textures/buttons/blue_button.png"); + private static ResourceLocation bb2ButtonTex = new ResourceLocation(BossToolsMod.ModId,"textures/buttons/blue_button_2.png"); + + private static ResourceLocation sbbButtonTex = new ResourceLocation(BossToolsMod.ModId, "textures/buttons/small_blue_button.png"); + private static ResourceLocation sbb2ButtonTex = new ResourceLocation(BossToolsMod.ModId, "textures/buttons/small_blue_button_2.png"); + + private static ResourceLocation bgbButtonTex = new ResourceLocation(BossToolsMod.ModId, "textures/buttons/big_green_button.png"); + private static ResourceLocation bgb2ButtonTex = new ResourceLocation(BossToolsMod.ModId, "textures/buttons/big_green_button_2.png"); + + private static ResourceLocation brbButtonTex = new ResourceLocation(BossToolsMod.ModId, "textures/buttons/big_red_button.png"); + private static ResourceLocation brb2ButtonTex = new ResourceLocation(BossToolsMod.ModId, "textures/buttons/big_red_button_2.png"); + + public int Category = 0; + + public float rotationMars = 0; + public float rotationEarth = 90; + public float rotationVenus = 180; + public float rotationMercury = 270; + + //CATEGORY BUTTONS (0) + public ImageButtonPlacer earthCategoryButton; + public ImageButtonPlacer marsCategoryButton; + public ImageButtonPlacer mercuryCategoryButton; + public ImageButtonPlacer venusCategoryButton; + + //TELEPORT BUTTONS + public ImageButtonPlacer earthButton; + public ImageButtonPlacer moonButton; + public ImageButtonPlacer marsButton; + public ImageButtonPlacer mercuryButton; + public ImageButtonPlacer venusButton; + + //BACK BUTTON + public ImageButtonPlacer backButton; + + //ORBIT BUTTONS + public ImageButtonPlacer earthOrbitButton; + public ImageButtonPlacer moonOrbitButton; + public ImageButtonPlacer marsOrbitButton; + public ImageButtonPlacer mercuryOrbitButton; + public ImageButtonPlacer venusOrbitButton; + + //SPACE STATION BUTTONS + public ImageButtonPlacer earthSpaceStationButton; + public ImageButtonPlacer moonSpaceStationButton; + public ImageButtonPlacer marsSpaceStationButton; + public ImageButtonPlacer mercurySpaceStationButton; + public ImageButtonPlacer venusSpaceStationButton; + + public PlanetSelectionGuiWindow(PlanetSelectionGui.GuiContainer container, PlayerInventory inventory, ITextComponent text) { + super(container, inventory, text); + this.xSize = 512; + this.ySize = 512; + } + + @Override + public void render(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(ms); + super.render(ms, mouseX, mouseY, partialTicks); + this.renderHoveredTooltip(ms, mouseX, mouseY); + + rotationMars = (rotationMars + partialTicks * 0.6f) % 360; + rotationEarth = (rotationEarth + partialTicks * 1.2f) % 360; + rotationVenus = (rotationVenus + partialTicks * 1.1f) % 360; + rotationMercury = (rotationMercury + partialTicks * 0.9f) % 360; + + String rocketType = container.rocket; + + //CATEGORY 0 BUTTON + if (Category == 0) { + earthCategoryButton.visible = true; + marsCategoryButton.visible = true; + mercuryCategoryButton.visible = true; + venusCategoryButton.visible = true; + + this.buttonManager(rocketType, gb2ButtonTex, rb2ButtonTex, gbButtonTex, rbButtonTex, mouseX, mouseY, 10, (this.height / 2) - 48 / 2, 70, 20, ms, earthCategoryButton, "Earth", "Tier 1 Rocket", 1); + + this.buttonManager(rocketType, gb2ButtonTex, rb2ButtonTex, gbButtonTex, rbButtonTex, mouseX, mouseY, 10, (this.height / 2) - 4 / 2, 70, 20, ms, marsCategoryButton, "Mars", "Tier 2 Rocket", 2); + + this.buttonManager(rocketType, gb2ButtonTex, rb2ButtonTex, gbButtonTex, rbButtonTex, mouseX, mouseY, 10, (this.height / 2) + 40 / 2, 70, 20, ms, mercuryCategoryButton, "Mercury", "Tier 3 Rocket", 3); + + this.buttonManager(rocketType, gb2ButtonTex, rb2ButtonTex, gbButtonTex, rbButtonTex, mouseX, mouseY, 10, (this.height / 2) + 84 / 2, 70, 20, ms, venusCategoryButton, "Venus", "Tier 3 Rocket", 3); + } else { + earthCategoryButton.visible = false; + marsCategoryButton.visible = false; + mercuryCategoryButton.visible = false; + venusCategoryButton.visible = false; + } + + //BACK BUTTON + if (Category >= 1) { + backButton.visible = true; + + //back + this.backButtonManager(dbbButtonTex, dbb2ButtonTex, mouseX, mouseY, 10, (this.height / 2) - 48 / 2, 70, 20, backButton); + } else { + backButton.visible = false; + } + + //CATEGORY 1 BUTTON + if (Category == 1) { + earthButton.visible = true; + earthOrbitButton.visible = true; + earthSpaceStationButton.visible = true; + moonButton.visible = true; + moonOrbitButton.visible = true; + moonSpaceStationButton.visible = true; + + //Planets + this.teleportButtonManager(bbButtonTex, bb2ButtonTex, mouseX, mouseY, 10, (this.height / 2) - 4 / 2, 70, 20, ms, earthButton, "Planet", "9.807 m/s", "a" + "true" , "a" + "14"); + this.teleportButtonManager(bbButtonTex, bb2ButtonTex, mouseX, mouseY, 10, (this.height / 2) + 40 / 2, 70, 20, ms, moonButton, "Moon", "1.62 m/s", "c" + "false" , "c" + "-160"); + + //Orbits + this.teleportButtonManager(sbbButtonTex, sbb2ButtonTex, mouseX, mouseY, 84, (this.height / 2) - 4 / 2, 37, 20, ms, earthOrbitButton, "Orbit", "No Gravity", "c" + "false" , "c" + "-270"); + this.teleportButtonManager(sbbButtonTex, sbb2ButtonTex, mouseX, mouseY, 84, (this.height / 2) + 40 / 2, 37, 20, ms, moonOrbitButton, "Orbit", "No Gravity", "c" + "false" , "c" + "-270"); + + //Space Station + this.spaceStationCreatorButtonManager(brbButtonTex, brb2ButtonTex , bgbButtonTex, bgb2ButtonTex, mouseX, mouseY, 125, (this.height / 2) - 4 / 2, 75, 20, ms, earthSpaceStationButton, "Orbit", "No Gravity", "c" + "false" , "c" + "-270"); + this.spaceStationCreatorButtonManager(brbButtonTex, brb2ButtonTex , bgbButtonTex, bgb2ButtonTex, mouseX, mouseY, 125, (this.height / 2) + 40 / 2, 75, 20, ms, moonSpaceStationButton, "Orbit", "No Gravity", "c" + "false" , "c" + "-270"); + + } else { + earthButton.visible = false; + earthOrbitButton.visible = false; + earthSpaceStationButton.visible = false; + moonButton.visible = false; + moonOrbitButton.visible = false; + moonSpaceStationButton.visible = false; + } + + //CATEGORY 2 BUTTON + if (Category == 2) { + marsButton.visible = true; + marsOrbitButton.visible = true; + marsSpaceStationButton.visible = true; + + //Planets + this.teleportButtonManager(bbButtonTex, bb2ButtonTex, mouseX, mouseY, 10, (this.height / 2) - 4 / 2, 70, 20, ms, marsButton, "Planet", "3.721 m/s", "a" + "true" , "a" + "-63"); + + //Orbits + this.teleportButtonManager(sbbButtonTex, sbb2ButtonTex, mouseX, mouseY, 84, (this.height / 2) - 4 / 2, 37, 20, ms, marsOrbitButton, "Orbit", "No Gravity", "c" + "false" , "c" + "-270"); + + //Space Station + this.spaceStationCreatorButtonManager(brbButtonTex, brb2ButtonTex , bgbButtonTex, bgb2ButtonTex, mouseX, mouseY, 125, (this.height / 2) - 4 / 2, 75, 20, ms, marsSpaceStationButton, "Orbit", "No Gravity", "c" + "false" , "c" + "-270"); + } else { + marsButton.visible = false; + marsOrbitButton.visible = false; + marsSpaceStationButton.visible = false; + } + + //CATEGORY 3 BUTTON + if (Category == 3) { + mercuryButton.visible = true; + mercuryOrbitButton.visible = true; + mercurySpaceStationButton.visible = true; + + //Planets + this.teleportButtonManager(bbButtonTex, bb2ButtonTex, mouseX, mouseY, 10, (this.height / 2) - 4 / 2, 70, 20, ms, mercuryButton, "Planet", "3.721 m/s", "a" + "true" , "a" + "-63"); + + //Orbits + this.teleportButtonManager(sbbButtonTex, sbb2ButtonTex, mouseX, mouseY, 84, (this.height / 2) - 4 / 2, 37, 20, ms, mercuryOrbitButton, "Orbit", "No Gravity", "c" + "false" , "c" + "-270"); + + //Space Station + this.spaceStationCreatorButtonManager(brbButtonTex, brb2ButtonTex , bgbButtonTex, bgb2ButtonTex, mouseX, mouseY, 125, (this.height / 2) - 4 / 2, 75, 20, ms, mercurySpaceStationButton, "Orbit", "No Gravity", "c" + "false" , "c" + "-270"); + } else { + mercuryButton.visible = false; + mercuryOrbitButton.visible = false; + mercurySpaceStationButton.visible = false; + } + + //CATEGORY 4 BUTTON + if (Category == 4) { + venusButton.visible = true; + venusOrbitButton.visible = true; + venusSpaceStationButton.visible = true; + + //Planets + this.teleportButtonManager(bbButtonTex, bb2ButtonTex, mouseX, mouseY, 10, (this.height / 2) - 4 / 2, 70, 20, ms, venusButton, "Planet", "3.721 m/s", "a" + "true" , "a" + "-63"); + + //Orbits + this.teleportButtonManager(sbbButtonTex, sbb2ButtonTex, mouseX, mouseY, 84, (this.height / 2) - 4 / 2, 37, 20, ms, venusOrbitButton, "Orbit", "No Gravity", "c" + "false" , "c" + "-270"); + + //Space Station + this.spaceStationCreatorButtonManager(brbButtonTex, brb2ButtonTex , bgbButtonTex, bgb2ButtonTex, mouseX, mouseY, 125, (this.height / 2) - 4 / 2, 75, 20, ms, venusSpaceStationButton, "Orbit", "No Gravity", "c" + "false" , "c" + "-270"); + } else { + venusButton.visible = false; + venusOrbitButton.visible = false; + venusSpaceStationButton.visible = false; + } + + //RENDER FONTS + this.font.drawString(ms, "CATALOG", 24, (this.height / 2) - 126 / 2, -1); + } + + @Override + protected void drawGuiContainerBackgroundLayer(MatrixStack ms, float par1, int par2, int par3) { + RenderSystem.color4f(1, 1, 1, 1); + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + + //BACKGROUND + Minecraft.getInstance().getTextureManager().bindTexture(texture); + this.blit(ms, 0, 0, 0, 0, this.width, this.height, this.width, this.height); + + //MILKY WAY + Minecraft.getInstance().getTextureManager().bindTexture(new ResourceLocation(BossToolsMod.ModId,"textures/milky_way.png")); + GuiHelper.blit(ms, (this.width - 185) / 2, (this.height - 185) / 2, 0, 0, 185, 185, 185, 185); + + //SUN + Minecraft.getInstance().getTextureManager().bindTexture(new ResourceLocation(BossToolsMod.ModId,"textures/sky/gui/sun.png")); + GuiHelper.blit(ms, (this.width - 15) / 2, (this.height - 15) / 2, 0, 0, 15, 15, 15, 15); + + //PLANETS + this.addPlanet(ms, new ResourceLocation(BossToolsMod.ModId,"textures/sky/gui/mars.png"), -70, -70, 10, 10, rotationMars); + this.addPlanet(ms, new ResourceLocation(BossToolsMod.ModId,"textures/sky/gui/earth.png"), -54, -54, 10, 10, rotationEarth); + this.addPlanet(ms, new ResourceLocation(BossToolsMod.ModId,"textures/sky/gui/venus.png"), -37, -37, 10, 10, rotationVenus); + this.addPlanet(ms, new ResourceLocation(BossToolsMod.ModId,"textures/sky/gui/mercury.png"), -20.5F, -20.5F, 10, 10, rotationMercury); + + //MENU + if (Category == 0) { + Minecraft.getInstance().getTextureManager().bindTexture(new ResourceLocation(BossToolsMod.ModId, "textures/rocket_menu_list.png")); + this.blit(ms, 0, (this.height / 2) - 160 / 2, 0, 0, 105, 160, 105, 160); + } else { + Minecraft.getInstance().getTextureManager().bindTexture(new ResourceLocation(BossToolsMod.ModId, "textures/rocket_menu_list_2.png")); + this.blit(ms, 0, (this.height / 2) - 160 / 2, 0, 0, 215, 160, 215, 160); + } + + RenderSystem.disableBlend(); + } + + public void addPlanet(MatrixStack ms, ResourceLocation planet, float x, float y, int width, int height, float rotation) { + ms.push(); + + ms.translate(this.width / 2, this.height / 2, 0); + ms.rotate(new Quaternion(Vector3f.ZP, rotation, true)); + + Minecraft.getInstance().getTextureManager().bindTexture(planet); + GuiHelper.blit(ms, x, y, 0, 0, width, height, width, height); + + ms.translate(-this.width / 2, -this.height / 2, 0); + ms.pop(); + } + + @Override + protected void init() { + super.init(); + + /**CATEGORIES*/ + earthCategoryButton = this.addImageButtonSetCategory(10, (this.height / 2) - 48 / 2, 70, 20, defaultButtonTex, 1, container.rocket, 1, "Earth"); + marsCategoryButton = this.addImageButtonSetCategory(10, (this.height / 2) - 4 / 2, 70, 20, defaultButtonTex, 2, container.rocket, 2, "Mars"); + mercuryCategoryButton = this.addImageButtonSetCategory(10, (this.height / 2) + 40 / 2, 70, 20, defaultButtonTex, 3, container.rocket, 3, "Mercury"); + venusCategoryButton = this.addImageButtonSetCategory(10, (this.height / 2) + 84 / 2, 70, 20, defaultButtonTex, 4, container.rocket, 3, "Venus"); + + /**BACK BUTTON*/ + backButton = this.addImageButtonSetCategory(10, (this.height / 2) - 48 / 2, 70, 20, dbbButtonTex, 0, container.rocket, 1, "Back"); + backButton.visible = false; + + /**TELEPORT BUTTONS*/ + earthButton = this.addImageButton(10, (this.height / 2) - 4 / 2, 70, 20, bbButtonTex, 0, "Earth"); + earthButton.visible = false; + + moonButton = this.addImageButton(10, (this.height / 2) + 40 / 2, 70, 20, bbButtonTex, 1, "Moon"); + moonButton.visible = false; + + marsButton = this.addImageButton(10, (this.height / 2) - 4 / 2, 70, 20, bbButtonTex, 2, "Mars"); + marsButton.visible = false; + + mercuryButton = this.addImageButton(10, (this.height / 2) - 4 / 2, 70, 20, bbButtonTex, 3, "Mercury"); + mercuryButton.visible = false; + + venusButton = this.addImageButton(10, (this.height / 2) - 4 / 2, 70, 20, bbButtonTex, 4, "Venus"); + venusButton.visible = false; + + /**ORBIT BUTTONS*/ + earthOrbitButton = this.addImageButton(84, (this.height / 2) - 4 / 2, 37, 20, sbbButtonTex, 5, "Orbit"); + earthOrbitButton.visible = false; + + moonOrbitButton = this.addImageButton(84, (this.height / 2) + 40 / 2, 37, 20, sbbButtonTex, 6, "Orbit"); + moonOrbitButton.visible = false; + + marsOrbitButton = this.addImageButton(84, (this.height / 2) - 4 / 2, 37, 20, sbbButtonTex, 7, "Orbit"); + marsOrbitButton.visible = false; + + mercuryOrbitButton = this.addImageButton(84, (this.height / 2) - 4 / 2, 37, 20, sbbButtonTex, 8, "Orbit"); + mercuryOrbitButton.visible = false; + + venusOrbitButton = this.addImageButton(84, (this.height / 2) - 4 / 2, 37, 20, sbbButtonTex, 9, "Orbit"); + venusOrbitButton.visible = false; + + /**SPACE STATION BUTTONS*/ + earthSpaceStationButton = this.addSpaceStationImageButton(125, (this.height / 2) - 4 / 2, 75, 20, brbButtonTex, 10, "Space Station", this.getSpaceStationItemList()); + earthSpaceStationButton.visible = false; + + moonSpaceStationButton = this.addSpaceStationImageButton(125, (this.height / 2) + 40 / 2, 75, 20, brbButtonTex, 11, "Space Station", this.getSpaceStationItemList()); + moonSpaceStationButton.visible = false; + + marsSpaceStationButton = this.addSpaceStationImageButton(125, (this.height / 2) - 4 / 2, 75, 20, brbButtonTex, 12, "Space Station", this.getSpaceStationItemList()); + marsSpaceStationButton.visible = false; + + mercurySpaceStationButton = this.addSpaceStationImageButton(125, (this.height / 2) - 4 / 2, 75, 20, brbButtonTex, 13, "Space Station", this.getSpaceStationItemList()); + mercurySpaceStationButton.visible = false; + + venusSpaceStationButton = this.addSpaceStationImageButton(125, (this.height / 2) - 4 / 2, 75, 20, brbButtonTex, 14, "Space Station", this.getSpaceStationItemList()); + venusSpaceStationButton.visible = false; + } + + @Override + protected void drawGuiContainerForegroundLayer(MatrixStack ms, int mouseX, int mouseY) { + } + + public Rectangle2d getBounds(int left, int top, int width, int height) { + return GuiHelper.getBounds(left, top, width, height); + } + + public boolean checkTier(String rocketType, int stage) { + int tier = 0; + + if (rocketType.equals("entity." + BossToolsMod.ModId + ".rocket_t1")) { + tier = 1; + } + if (rocketType.equals("entity." + BossToolsMod.ModId + ".rocket_t2")) { + tier = 2; + } + if (rocketType.equals("entity." + BossToolsMod.ModId + ".rocket_t3")) { + tier = 3; + } + + return tier >= stage; + } + + public void buttonManager(String rocketType, ResourceLocation gb2, ResourceLocation rb2, ResourceLocation gb, ResourceLocation rb, int mouseX, int mouseY, int left, int top, int width, int height, MatrixStack ms, ImageButtonPlacer button, String dim, String rocketTier, int stage) { + String level = "c"; + + if (checkTier(rocketType, stage)) { + level = "a"; + button.setTexture(gb); + } else { + level = "c"; + button.setTexture(rb); + } + + if (GuiHelper.isHover(this.getBounds(left, top, width, height), mouseX, mouseY)) { + + List list = new ArrayList(); + + list.add(ITextComponent.getTextComponentOrEmpty("\u00A79Category: " + "\u00A7" + level + dim)); + list.add(ITextComponent.getTextComponentOrEmpty("\u00A79Provided: \u00A7b" + rocketTier)); + this.func_243308_b(ms, list, mouseX, mouseY); + + + if (checkTier(rocketType, stage)) { + button.setTexture(gb2); + } else { + button.setTexture(rb2); + } + } + } + + public void teleportButtonManager(ResourceLocation bb, ResourceLocation bb2, int mouseX, int mouseY, int left, int top, int width, int height, MatrixStack ms, ImageButtonPlacer button, String planetType, String gravity, String oxygen, String temperature) { + if (GuiHelper.isHover(this.getBounds(left, top, width, height), mouseX, mouseY)) { + + List list = new ArrayList(); + + list.add(ITextComponent.getTextComponentOrEmpty("\u00A79Type: " + "\u00A73" + planetType)); + list.add(ITextComponent.getTextComponentOrEmpty("\u00A79Gravity: " + "\u00A73" + gravity)); + list.add(ITextComponent.getTextComponentOrEmpty("\u00A79Oxygen: " + "\u00A7" + oxygen)); + list.add(ITextComponent.getTextComponentOrEmpty("\u00A79Temperature: \u00A7" + temperature)); + this.func_243308_b(ms, list, mouseX, mouseY); + + button.setTexture(bb2); + + } else { + button.setTexture(bb); + } + } + + public void spaceStationCreatorButtonManager(ResourceLocation brb, ResourceLocation brb2, ResourceLocation bbb, ResourceLocation bbb2, int mouseX, int mouseY, int left, int top, int width, int height, MatrixStack ms, ImageButtonPlacer button, String orbitType, String gravity, String oxygen, String temperature) { + + if (this.getSpaceStationItemList()) { + button.setTexture(bbb); + } else { + button.setTexture(brb); + } + + if (GuiHelper.isHover(this.getBounds(left, top, width, height), mouseX, mouseY)) { + List list = new ArrayList(); + + list.add(ITextComponent.getTextComponentOrEmpty("\u00A79Item Requirement:")); + + list.add(ITextComponent.getTextComponentOrEmpty(this.getSpaceStationItemCheck(new ItemStack(Items.DIAMOND), 6) ? "\u00A7a" + "6 Diamonds" : "\u00A76" + "6 Diamonds")); + list.add(ITextComponent.getTextComponentOrEmpty(this.getSpaceStationItemCheck(new ItemStack(ModInnet.STEEL_INGOT.get()), 16) ? "\u00A7a" + "16 Steel Ingots" : "\u00A76" + "16 Steel Ingots")); + list.add(ITextComponent.getTextComponentOrEmpty(this.getSpaceStationItemCheck(new ItemStack(ModInnet.IRON_PLATE.get()), 12) ? "\u00A7a" + "12 Iron Plates" : "\u00A76" + "12 Iron Plates")); + list.add(ITextComponent.getTextComponentOrEmpty(this.getSpaceStationItemCheck(new ItemStack(ModInnet.DESH_PLATE.get()), 4) ? "\u00A7a" + "4 Desh Plates" : "\u00A76" + "4 Desh Plates")); + + list.add(ITextComponent.getTextComponentOrEmpty("\u00A7c----------------")); + list.add(ITextComponent.getTextComponentOrEmpty("\u00A79Type: " + "\u00A73" + orbitType)); + list.add(ITextComponent.getTextComponentOrEmpty("\u00A79Gravity: " + "\u00A73" + gravity)); + list.add(ITextComponent.getTextComponentOrEmpty("\u00A79Oxygen: " + "\u00A7" + oxygen)); + list.add(ITextComponent.getTextComponentOrEmpty("\u00A79Temperature: \u00A7" + temperature)); + this.func_243308_b(ms, list, mouseX, mouseY); + + if (this.getSpaceStationItemList()) { + button.setTexture(bbb2); + } else { + button.setTexture(brb2); + } + } + } + + public boolean getSpaceStationItemList() { + Boolean boolean1 = this.getSpaceStationItemCheck(new ItemStack(Items.DIAMOND), 6); + Boolean boolean2 = this.getSpaceStationItemCheck(new ItemStack(ModInnet.STEEL_INGOT.get()), 16); + Boolean boolean3 = this.getSpaceStationItemCheck(new ItemStack(ModInnet.IRON_PLATE.get()), 12); + Boolean boolean4 = this.getSpaceStationItemCheck(new ItemStack(ModInnet.DESH_PLATE.get()), 4); + + return boolean1 && boolean2 && boolean3 && boolean4; + } + + public boolean getSpaceStationItemCheck(ItemStack itemStackIn, int count) { + PlayerInventory inventory = playerInventory.player.inventory; + int itemStackCount = 0; + + for (int i = 0; i < inventory.getSizeInventory(); ++i) { + ItemStack itemStack = inventory.getStackInSlot(i); + + if (itemStack.isItemEqual(itemStackIn)) { + itemStackCount = itemStackCount + itemStack.getCount(); + } + + if (!itemStack.isEmpty() && itemStack.isItemEqual(itemStackIn) && itemStackCount >= count) { + return true; + } + } + + return false; + } + + public void backButtonManager(ResourceLocation bb, ResourceLocation bb2, int mouseX, int mouseY, int left, int top, int width, int height, ImageButtonPlacer button) { + if (GuiHelper.isHover(this.getBounds(left, top, width, height), mouseX, mouseY)) { + button.setTexture(bb2); + } else { + button.setTexture(bb); + } + } + + public ImageButtonPlacer addImageButton(int xIn, int yIn, int width, int height, ResourceLocation texture, int handler, String title) { + ImageButtonPlacer button = this.addButton(new ImageButtonPlacer(xIn, yIn, width, height, 0, 0, 0, texture, width, height, (p_2130901) -> { + BossToolsMod.PACKET_HANDLER.sendToServer(new PlanetSelectionGui.NetworkMessage(handler)); + }, ITextComponent.getTextComponentOrEmpty(title))); + return button; + } + + public ImageButtonPlacer addSpaceStationImageButton(int xIn, int yIn, int width, int height, ResourceLocation texture, int handler, String title, boolean condition) { + ImageButtonPlacer button = this.addButton(new ImageButtonPlacer(xIn, yIn, width, height, 0, 0, 0, texture, width, height, (p_2130901) -> { + if (condition) { + BossToolsMod.PACKET_HANDLER.sendToServer(new PlanetSelectionGui.NetworkMessage(handler)); + } + }, ITextComponent.getTextComponentOrEmpty(title))); + return button; + } + + public ImageButtonPlacer addImageButtonSetCategory(int xIn, int yIn, int width, int height, ResourceLocation texture, int newCategory, String rocket, int stage, String title) { + ImageButtonPlacer button = this.addButton(new ImageButtonPlacer(xIn, yIn, width, height, 0, 0, 0, texture, width, height, (p_2130901) -> { + if (checkTier(rocket, stage)) { + this.Category = newCategory; + } + }, ITextComponent.getTextComponentOrEmpty(title))); + return button; + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/rocket/RocketGui.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/rocket/RocketGui.java new file mode 100644 index 000000000..a838149ee --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/rocket/RocketGui.java @@ -0,0 +1,69 @@ +package net.mrscauthd.boss_tools.gui.screens.rocket; + +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fml.network.IContainerFactory; +import net.minecraftforge.items.*; +import net.mrscauthd.boss_tools.ModInnet; + +import net.minecraft.item.ItemStack; +import net.minecraft.inventory.container.Container; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.Entity; +import net.mrscauthd.boss_tools.entity.RocketTier1Entity; +import net.mrscauthd.boss_tools.entity.RocketTier2Entity; +import net.mrscauthd.boss_tools.entity.RocketTier3Entity; +import net.mrscauthd.boss_tools.events.Methodes; +import net.mrscauthd.boss_tools.fluid.FluidUtil2; +import net.mrscauthd.boss_tools.gui.helper.ContainerHelper; + +public class RocketGui { + + public static class GuiContainerFactory implements IContainerFactory { + public GuiContainer create(int id, PlayerInventory inv, PacketBuffer extraData) { + return new GuiContainer(id, inv, extraData); + } + } + + public static class GuiContainer extends Container { + Entity rocket; + + public GuiContainer(int id, PlayerInventory inv, PacketBuffer extraData) { + super(ModInnet.ROCKET_GUI.get(), id); + + this.rocket = inv.player.world.getEntityByID(extraData.readVarInt()); + + IItemHandlerModifiable itemHandler = null; + + if (rocket instanceof RocketTier1Entity) { + itemHandler = ((RocketTier1Entity) rocket).getItemHandler(); + } else if (rocket instanceof RocketTier2Entity) { + itemHandler = ((RocketTier2Entity) rocket).getItemHandler(); + } else if (rocket instanceof RocketTier3Entity) { + itemHandler = ((RocketTier3Entity) rocket).getItemHandler(); + } + + this.addSlot(new SlotItemHandler(itemHandler, 0, 46, 22) { + @Override + public boolean isItemValid(ItemStack stack) { + if (Methodes.tagCheck(FluidUtil2.findBucketFluid(stack.getItem()), ModInnet.FLUID_VEHICLE_FUEL_TAG)) { + return true; + } + return false; + } + }); + + ContainerHelper.addInventorySlots(this, inv, 8, 84, this::addSlot); + } + + @Override + public boolean canInteractWith(PlayerEntity player) { + return !rocket.removed; + } + + @Override + public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) { + return ContainerHelper.transferStackInSlot(this, playerIn, index, 0, 1, this::mergeItemStack); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/rocket/RocketGuiWindow.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/rocket/RocketGuiWindow.java new file mode 100644 index 000000000..4d7809c98 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/rocket/RocketGuiWindow.java @@ -0,0 +1,107 @@ +package net.mrscauthd.boss_tools.gui.screens.rocket; + +import net.minecraft.client.renderer.Rectangle2d; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraftforge.fluids.FluidStack; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.entity.RocketTier1Entity; +import net.mrscauthd.boss_tools.entity.RocketTier2Entity; +import net.mrscauthd.boss_tools.entity.RocketTier3Entity; +import net.mrscauthd.boss_tools.entity.RoverEntity; +import net.mrscauthd.boss_tools.fluid.FluidUtil2; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; +import net.mrscauthd.boss_tools.gui.helper.GuiHelper; +import org.lwjgl.opengl.GL11; + +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.client.gui.screen.inventory.ContainerScreen; +import net.minecraft.client.Minecraft; + +import java.util.List; +import java.util.ArrayList; + +import com.mojang.blaze3d.matrix.MatrixStack; + +@OnlyIn(Dist.CLIENT) +public class RocketGuiWindow extends ContainerScreen { + + private static final ResourceLocation texture = new ResourceLocation(BossToolsMod.ModId, "textures/screens/rocket_gui.png"); + + public RocketGuiWindow(RocketGui.GuiContainer container, PlayerInventory inventory, ITextComponent text) { + super(container, inventory, text); + this.xSize = 176; + this.ySize = 167; + this.playerInventoryTitleY = this.ySize - 93; + } + + @Override + public void render(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(ms); + super.render(ms, mouseX, mouseY, partialTicks); + this.renderHoveredTooltip(ms, mouseX, mouseY); + + int fuel = 0; + + if (container.rocket instanceof RocketTier1Entity) { + fuel = container.rocket.getDataManager().get(RocketTier1Entity.FUEL) / 3; + } + if (container.rocket instanceof RocketTier2Entity) { + fuel = container.rocket.getDataManager().get(RocketTier2Entity.FUEL) / 3; + } + if (container.rocket instanceof RocketTier3Entity) { + fuel = container.rocket.getDataManager().get(RocketTier3Entity.FUEL) / 3; + } + + List fuelToolTip = new ArrayList(); + + if (GuiHelper.isHover(this.getFluidBounds(), mouseX, mouseY)) { + fuelToolTip.add(GaugeTextHelper.buildBlockTooltip(GaugeTextHelper.getPercentText(GaugeValueHelper.getFuel(fuel, 100)), TextFormatting.WHITE)); + this.func_243308_b(ms, fuelToolTip, mouseX, mouseY); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(MatrixStack ms, float par1, int par2, int par3) { + int fuel = 0; + + GL11.glColor4f(1, 1, 1, 1); + + Minecraft.getInstance().getTextureManager().bindTexture(texture); + this.blit(ms, this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize, this.xSize, this.ySize); + + + if (container.rocket instanceof RocketTier1Entity) { + fuel = container.rocket.getDataManager().get(RocketTier1Entity.FUEL); + } + if (container.rocket instanceof RocketTier2Entity) { + fuel = container.rocket.getDataManager().get(RocketTier2Entity.FUEL); + } + if (container.rocket instanceof RocketTier3Entity) { + fuel = container.rocket.getDataManager().get(RocketTier3Entity.FUEL); + } + + FluidStack fluidStack = new FluidStack(ModInnet.FUEL_BLOCK.get().getFluid(), 1); + GuiHelper.drawRocketFluidTank(ms, this.guiLeft + 67, this.guiTop + 22, fluidStack, 300, fuel); + } + + @Override + protected void drawGuiContainerForegroundLayer(MatrixStack ms, int mouseX, int mouseY) { + TranslationTextComponent title = new TranslationTextComponent("container." + container.rocket.getType()); + + this.font.drawString(ms, title.getString(), (float) (this.xSize / 2) - 33, (float) this.titleY, 4210752); + + this.font.func_243248_b(ms, this.playerInventory.getDisplayName(), (float) this.playerInventoryTitleX, (float) this.playerInventoryTitleY, 4210752); + } + + public Rectangle2d getFluidBounds() { + return GuiHelper.getRocketFluidTankBounds(this.guiLeft + 66, this.guiTop + 21); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/rover/RoverGui.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/rover/RoverGui.java new file mode 100644 index 000000000..2d9bcf5c0 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/rover/RoverGui.java @@ -0,0 +1,69 @@ +package net.mrscauthd.boss_tools.gui.screens.rover; + +import net.minecraftforge.items.*; + +import net.minecraftforge.fml.network.IContainerFactory; + +import net.minecraft.network.PacketBuffer; +import net.minecraft.item.ItemStack; +import net.minecraft.inventory.container.Container; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.Entity; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.entity.RoverEntity; +import net.mrscauthd.boss_tools.events.Methodes; +import net.mrscauthd.boss_tools.fluid.FluidUtil2; +import net.mrscauthd.boss_tools.gui.helper.ContainerHelper; + +public class RoverGui { + + public static class GuiContainerFactory implements IContainerFactory { + public GuiContainer create(int id, PlayerInventory inv, PacketBuffer extraData) { + return new GuiContainer(id, inv, extraData); + } + } + + public static class GuiContainer extends Container { + Entity rover; + + public GuiContainer(int id, PlayerInventory inv, PacketBuffer extraData) { + super(ModInnet.ROVER_GUI.get(), id); + + this.rover = inv.player.world.getEntityByID(extraData.readVarInt()); + + IItemHandlerModifiable itemHandler = ((RoverEntity) rover).getItemHandler(); + this.addSlot(new SlotItemHandler(itemHandler, 0, 8, 63) { + @Override + public boolean isItemValid(ItemStack stack) { + if (Methodes.tagCheck(FluidUtil2.findBucketFluid(stack.getItem()), ModInnet.FLUID_VEHICLE_FUEL_TAG)) { + return true; + } + return false; + } + }); + + this.addSlot(new SlotItemHandler(itemHandler, 1, 151, 16)); + this.addSlot(new SlotItemHandler(itemHandler, 2, 133, 16)); + this.addSlot(new SlotItemHandler(itemHandler, 3, 115, 16)); + this.addSlot(new SlotItemHandler(itemHandler, 4, 97, 16)); + + this.addSlot(new SlotItemHandler(itemHandler, 5, 151, 34)); + this.addSlot(new SlotItemHandler(itemHandler, 6, 133, 34)); + this.addSlot(new SlotItemHandler(itemHandler, 7, 115, 34)); + this.addSlot(new SlotItemHandler(itemHandler, 8, 97, 34)); + + ContainerHelper.addInventorySlots(this, inv, 8, 93, this::addSlot); + } + + @Override + public boolean canInteractWith(PlayerEntity player) { + return !rover.removed; + } + + @Override + public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) { + return ContainerHelper.transferStackInSlot(this, playerIn, index, 0, 9, this::mergeItemStack); + } + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/rover/RoverGuiWindow.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/rover/RoverGuiWindow.java new file mode 100644 index 000000000..20225f058 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/rover/RoverGuiWindow.java @@ -0,0 +1,80 @@ +package net.mrscauthd.boss_tools.gui.screens.rover; + +import net.minecraft.client.renderer.Rectangle2d; +import net.minecraftforge.fluids.FluidStack; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.entity.RoverEntity; +import net.mrscauthd.boss_tools.fluid.FluidUtil2; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; +import net.mrscauthd.boss_tools.gui.helper.GuiHelper; +import org.lwjgl.opengl.GL11; + +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.client.gui.screen.inventory.ContainerScreen; +import net.minecraft.client.Minecraft; + +import java.util.List; +import java.util.ArrayList; + +import com.mojang.blaze3d.matrix.MatrixStack; + +@OnlyIn(Dist.CLIENT) +public class RoverGuiWindow extends ContainerScreen { + + private static final ResourceLocation texture = new ResourceLocation(BossToolsMod.ModId, "textures/screens/rover_gui.png"); + + public RoverGuiWindow(RoverGui.GuiContainer container, PlayerInventory inventory, ITextComponent text) { + super(container, inventory, text); + this.xSize = 176; + this.ySize = 176; + this.playerInventoryTitleY = this.ySize - 93; + } + + @Override + public void render(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(ms); + super.render(ms, mouseX, mouseY, partialTicks); + this.renderHoveredTooltip(ms, mouseX, mouseY); + + List fuelToolTip = new ArrayList(); + + int fuel = container.rover.getDataManager().get(RoverEntity.FUEL); + + if (GuiHelper.isHover(this.getFluidBounds(), mouseX, mouseY)) { + fuelToolTip.add(GaugeTextHelper.buildBlockTooltip(GaugeTextHelper.getStorageText(GaugeValueHelper.getFuel(fuel, RoverEntity.FUEL_BUCKETS * FluidUtil2.BUCKET_SIZE)), TextFormatting.WHITE)); + this.func_243308_b(ms, fuelToolTip, mouseX, mouseY); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(MatrixStack ms, float par1, int par2, int par3) { + int fuel = container.rover.getDataManager().get(RoverEntity.FUEL); + + GL11.glColor4f(1, 1, 1, 1); + + Minecraft.getInstance().getTextureManager().bindTexture(texture); + this.blit(ms, this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize, this.xSize, this.ySize); + + FluidStack fluidStack = new FluidStack(ModInnet.FUEL_BLOCK.get().getFluid(), fuel); + GuiHelper.drawFluidTank(ms, this.guiLeft + 9, this.guiTop + 11, fluidStack, 3000); + } + + @Override + protected void drawGuiContainerForegroundLayer(MatrixStack ms, int mouseX, int mouseY) { + this.font.drawString(ms, title.getString(), (float) (this.xSize / 2) - 14, (float) this.titleY, 4210752); + this.font.func_243248_b(ms, this.playerInventory.getDisplayName(), (float) this.playerInventoryTitleX, (float) this.playerInventoryTitleY, 4210752); + } + + public Rectangle2d getFluidBounds() { + return GuiHelper.getFluidTankBounds(this.guiLeft + 9, this.guiTop + 11); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/solarpanel/SolarPanelGui.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/solarpanel/SolarPanelGui.java new file mode 100644 index 000000000..c696d22e8 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/solarpanel/SolarPanelGui.java @@ -0,0 +1,48 @@ +package net.mrscauthd.boss_tools.gui.screens.solarpanel; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.container.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.network.IContainerFactory; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.gui.helper.ContainerHelper; +import net.mrscauthd.boss_tools.machines.SolarPanelBlock.CustomTileEntity; + +public class SolarPanelGui { + + public static class GuiContainerFactory implements IContainerFactory { + public GuiContainer create(int id, PlayerInventory inv, PacketBuffer extraData) { + BlockPos pos = extraData.readBlockPos(); + CustomTileEntity tileEntity = (CustomTileEntity) inv.player.world.getTileEntity(pos); + return new GuiContainer(id, inv, tileEntity); + } + } + + public static class GuiContainer extends Container { + private CustomTileEntity tileEntity; + + public GuiContainer(int id, PlayerInventory inv, CustomTileEntity tileEntity) { + super(ModInnet.SOLAR_PANEL_GUI.get(), id); + this.tileEntity = tileEntity; + + ContainerHelper.addInventorySlots(this, inv, 8, 84, this::addSlot); + } + + public CustomTileEntity getTileEntity() { + return this.tileEntity; + } + + @Override + public boolean canInteractWith(PlayerEntity player) { + return !this.getTileEntity().isRemoved(); + } + + @Override + public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) { + return ContainerHelper.transferStackInSlot(this, playerIn, index, this.getTileEntity(), this::mergeItemStack); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/solarpanel/SolarPanelGuiWindow.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/solarpanel/SolarPanelGuiWindow.java new file mode 100644 index 000000000..ed13a495e --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/solarpanel/SolarPanelGuiWindow.java @@ -0,0 +1,65 @@ +package net.mrscauthd.boss_tools.gui.screens.solarpanel; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.screen.inventory.ContainerScreen; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.energy.IEnergyStorage; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.machines.SolarPanelBlock.CustomTileEntity; + +@OnlyIn(Dist.CLIENT) +public class SolarPanelGuiWindow extends ContainerScreen { + + public static final ResourceLocation texture = new ResourceLocation(BossToolsMod.ModId, "textures/screens/solar_panel_gui.png"); + + private CustomTileEntity tileEntity; + + public SolarPanelGuiWindow(SolarPanelGui.GuiContainer container, PlayerInventory inventory, ITextComponent text) { + super(container, inventory, text); + this.tileEntity = container.getTileEntity(); + this.xSize = 176; + this.ySize = 166; + this.playerInventoryTitleY = this.ySize - 92; + } + + @Override + public void render(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(ms); + super.render(ms, mouseX, mouseY, partialTicks); + this.renderHoveredTooltip(ms, mouseX, mouseY); + } + + @Override + protected void drawGuiContainerBackgroundLayer(MatrixStack ms, float partialTicks, int gx, int gy) { + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + + Minecraft.getInstance().getTextureManager().bindTexture(texture); + AbstractGui.blit(ms, this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize, this.xSize, this.ySize); + } + + @Override + protected void drawGuiContainerForegroundLayer(MatrixStack ms, int mouseX, int mouseY) { + super.drawGuiContainerForegroundLayer(ms, mouseX, mouseY); + + CustomTileEntity tileEntity = this.getTileEntity(); + IEnergyStorage energyStorage = tileEntity.getPrimaryEnergyStorage(); + + this.font.func_243248_b(ms, GaugeTextHelper.getStoredText(GaugeValueHelper.getEnergy(energyStorage.getEnergyStored())).build(), this.titleX, 28, 0x3C3C3C); + this.font.func_243248_b(ms, GaugeTextHelper.getCapacityText(GaugeValueHelper.getEnergy(energyStorage.getMaxEnergyStored())).build(), this.titleX, 40, 0x3C3C3C); + this.font.func_243248_b(ms, GaugeTextHelper.getMaxGenerationPerTickText(GaugeValueHelper.getEnergy(tileEntity.getMaxGeneration())).build(), this.titleX, 52, 0x3C3C3C); + } + + public CustomTileEntity getTileEntity() { + return this.tileEntity; + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/waterpump/WaterPumpGui.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/waterpump/WaterPumpGui.java new file mode 100644 index 000000000..4e6c7d90b --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/waterpump/WaterPumpGui.java @@ -0,0 +1,48 @@ +package net.mrscauthd.boss_tools.gui.screens.waterpump; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.container.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.network.IContainerFactory; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.gui.helper.ContainerHelper; +import net.mrscauthd.boss_tools.machines.tile.WaterPumpTileEntity; + +public class WaterPumpGui { + + public static class GuiContainerFactory implements IContainerFactory { + public GuiContainer create(int id, PlayerInventory inv, PacketBuffer extraData) { + BlockPos pos = extraData.readBlockPos(); + WaterPumpTileEntity tileEntity = (WaterPumpTileEntity) inv.player.world.getTileEntity(pos); + return new GuiContainer(id, inv, tileEntity); + } + } + + public static class GuiContainer extends Container { + private final WaterPumpTileEntity tileEntity; + + public GuiContainer(int id, PlayerInventory inv, WaterPumpTileEntity tileEntity) { + super(ModInnet.WATER_PUMP_GUI.get(), id); + this.tileEntity = tileEntity; + + ContainerHelper.addInventorySlots(this, inv, 8, 90, this::addSlot); + } + + public WaterPumpTileEntity getTileEntity() { + return this.tileEntity; + } + + @Override + public boolean canInteractWith(PlayerEntity player) { + return !this.getTileEntity().isRemoved(); + } + + @Override + public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) { + return ContainerHelper.transferStackInSlot(this, playerIn, index, this.getTileEntity(), this::mergeItemStack); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/gui/screens/waterpump/WaterPumpGuiWindow.java b/src/main/java/net/mrscauthd/boss_tools/gui/screens/waterpump/WaterPumpGuiWindow.java new file mode 100644 index 000000000..483b883ea --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/gui/screens/waterpump/WaterPumpGuiWindow.java @@ -0,0 +1,81 @@ +package net.mrscauthd.boss_tools.gui.screens.waterpump; + +import com.mojang.blaze3d.matrix.MatrixStack; +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.screen.inventory.ContainerScreen; +import net.minecraft.client.renderer.Rectangle2d; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.gui.helper.GuiHelper; +import net.mrscauthd.boss_tools.machines.tile.WaterPumpTileEntity; +import org.lwjgl.opengl.GL11; + +@OnlyIn(Dist.CLIENT) +public class WaterPumpGuiWindow extends ContainerScreen { + + public static final ResourceLocation texture = new ResourceLocation(BossToolsMod.ModId, "textures/screens/water_pump_gui.png"); + + public static final int WATER_TANK_LEFT = 75; + public static final int WATER_TANK_TOP = 21; + + public static final int ENERGY_LEFT = 144; + public static final int ENERGY_TOP = 21; + + private final WaterPumpTileEntity tileEntity; + + public WaterPumpGuiWindow(WaterPumpGui.GuiContainer container, PlayerInventory inventory, ITextComponent text) { + super(container, inventory, text); + this.tileEntity = container.getTileEntity(); + this.xSize = 177; + this.ySize = 172; + this.playerInventoryTitleY = this.ySize - 92; + } + + public Rectangle2d getOutputTankBounds() { + return GuiHelper.getFluidTankBounds(this.guiLeft + WATER_TANK_LEFT, this.guiTop + WATER_TANK_TOP); + } + + public Rectangle2d getEnergyBounds() { + return GuiHelper.getEnergyBounds(this.guiLeft + ENERGY_LEFT, this.guiTop + ENERGY_TOP); + } + + @Override + public void render(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(ms); + super.render(ms, mouseX, mouseY, partialTicks); + this.renderHoveredTooltip(ms, mouseX, mouseY); + + WaterPumpTileEntity tileEntity = (WaterPumpTileEntity) this.getTileEntity(); + + if (GuiHelper.isHover(this.getOutputTankBounds(), mouseX, mouseY)) { + + this.renderTooltip(ms, GaugeTextHelper.getStorageText(GaugeValueHelper.getFluid(tileEntity.getWaterTank())).build(), mouseX, mouseY); + } else if (GuiHelper.isHover(this.getEnergyBounds(), mouseX, mouseY)) { + + this.renderTooltip(ms, GaugeTextHelper.getStorageText(GaugeValueHelper.getEnergy(tileEntity)).build(), mouseX, mouseY); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(MatrixStack ms, float par1, int par2, int par3) { + WaterPumpTileEntity tileEntity = this.getTileEntity(); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + this.minecraft.getTextureManager().bindTexture(texture); + AbstractGui.blit(ms, this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize, this.xSize, this.ySize); + + GuiHelper.drawEnergy(ms, this.guiLeft + ENERGY_LEFT, this.guiTop + ENERGY_TOP, tileEntity.getPrimaryEnergyStorage()); + GuiHelper.drawFluidTank(ms, this.guiLeft + WATER_TANK_LEFT, this.guiTop + WATER_TANK_TOP, tileEntity.getWaterTank()); + } + + public WaterPumpTileEntity getTileEntity() { + return this.tileEntity; + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/inventory/ItemHandlerHelper2.java b/src/main/java/net/mrscauthd/boss_tools/inventory/ItemHandlerHelper2.java new file mode 100644 index 000000000..fe9a9ce0e --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/inventory/ItemHandlerHelper2.java @@ -0,0 +1,34 @@ +package net.mrscauthd.boss_tools.inventory; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.IItemHandler; + +public class ItemHandlerHelper2 { + + public static boolean isEmpty(IItemHandler handler) { + for (int i = 0; i < handler.getSlots(); i++) { + if (!handler.getStackInSlot(i).isEmpty()) { + return false; + } + } + + return true; + } + + public static List getStacks(IItemHandler handler) { + List list = new ArrayList<>(); + + for (int i = 0; i < handler.getSlots(); i++) { + list.add(handler.getStackInSlot(i)); + } + + return list; + } + + private ItemHandlerHelper2() { + + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/inventory/RocketPartsItemHandler.java b/src/main/java/net/mrscauthd/boss_tools/inventory/RocketPartsItemHandler.java new file mode 100644 index 000000000..b22122098 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/inventory/RocketPartsItemHandler.java @@ -0,0 +1,167 @@ +package net.mrscauthd.boss_tools.inventory; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.BiConsumer; +import java.util.function.BiFunction; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import org.apache.commons.lang3.tuple.Pair; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.wrapper.RangedWrapper; +import net.mrscauthd.boss_tools.crafting.RocketPart; + +public class RocketPartsItemHandler implements IItemHandlerModifiable { + + private final IItemHandlerModifiable parent; + private final int slotStartIndex; + + private final int slotCount; + private final List list; + private final Map map; + + public RocketPartsItemHandler(IItemHandlerModifiable parent, int slotStartIndex, Collection parts) { + this.parent = parent; + this.slotStartIndex = slotStartIndex; + + List list = new ArrayList<>(); + Map map = new HashMap<>(); + int slotCount = 0; + + for (RocketPart part : parts) { + int count = part.getSlots(); + int slotNumber = this.getParentSlotIndex(slotCount); + + list.add(part); + map.put(part, new RangedWrapper(parent, slotNumber, slotNumber + count)); + slotCount += count; + } + + this.slotCount = slotCount; + this.list = Collections.unmodifiableList(list); + this.map = Collections.unmodifiableMap(map); + } + + public IItemHandlerModifiable getParent() { + return this.parent; + } + + public int getSlotStartIndex() { + return this.slotStartIndex; + } + + public final List getPartOrders() { + return this.list; + } + + public final Map getSubHandlers() { + return this.map; + } + + public int getParentSlotIndex(int slot) { + return this.getSlotStartIndex() + slot; + } + + public int getParentSlotIndex(RocketPart getPart) { + int index = this.getSlotStartIndex(); + + for (RocketPart part : this.getPartOrders()) { + if (part == getPart) { + return index; + } + + index += this.getSubHandlers().get(part).getSlots(); + } + + return -1; + } + + public int getParentSlotIndex(RocketPart getPart, int innerSlot) { + int partSlot = this.getParentSlotIndex(getPart); + return partSlot != -1 ? (partSlot + innerSlot) : -1; + } + + @Nullable + public Pair findInventory(int slot) { + for (RocketPart part : this.getPartOrders()) { + IItemHandlerModifiable subHandler = this.getSubHandlers().get(part); + int inventorySize = subHandler.getSlots(); + + if (slot < inventorySize) { + return Pair.of(subHandler, slot); + } else { + slot -= inventorySize; + } + } + + return null; + } + + public void consumeInventory(int slot, BiConsumer consumer) { + Pair pair = this.findInventory(slot); + + if (pair != null) { + consumer.accept(pair.getKey(), pair.getValue()); + } + + } + + public T queryInventory(int slot, BiFunction function) { + return this.queryInventory(slot, function, null); + } + + public T queryInventory(int slot, BiFunction function, T fallback) { + Pair pair = this.findInventory(slot); + + if (pair != null) { + return function.apply(pair.getKey(), pair.getValue()); + } + + return fallback; + } + + @Override + public int getSlots() { + return this.slotCount; + } + + @Override + public ItemStack getStackInSlot(int slot) { + return this.queryInventory(slot, IItemHandler::getStackInSlot, ItemStack.EMPTY); + } + + @Override + public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) { + return this.queryInventory(slot, (h, s) -> h.insertItem(s, stack, simulate), ItemStack.EMPTY); + } + + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate) { + return this.queryInventory(slot, (h, s) -> h.extractItem(s, amount, simulate), ItemStack.EMPTY); + } + + @Override + public int getSlotLimit(int slot) { + return this.queryInventory(slot, IItemHandler::getSlotLimit, 0); + } + + @Override + public boolean isItemValid(int slot, ItemStack stack) { + return this.queryInventory(slot, (h, s) -> h.isItemValid(s, stack), false); + } + + @Override + public void setStackInSlot(int slot, @Nonnull ItemStack stack) { + this.consumeInventory(slot, (h, s) -> h.setStackInSlot(s, stack)); + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/inventory/StackCacher.java b/src/main/java/net/mrscauthd/boss_tools/inventory/StackCacher.java new file mode 100644 index 000000000..e4550d083 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/inventory/StackCacher.java @@ -0,0 +1,108 @@ +package net.mrscauthd.boss_tools.inventory; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import com.google.common.collect.Lists; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.items.ItemHandlerHelper; + +public class StackCacher { + + private final List list; + + public StackCacher() { + this.list = new ArrayList<>(); + } + + public boolean test(ItemStack stack) { + return this.test(Lists.newArrayList(stack)); + } + + public boolean test(FluidStack stack) { + return this.test(Lists.newArrayList(stack)); + } + + public boolean test(Collection stacks) { + List list = this.getStacks(); + List tests = new ArrayList<>(stacks); + + int size = list.size(); + + if (size != tests.size()) { + return false; + } + + for (int i = 0; i < size; i++) { + Object left = list.get(i); + Object right = tests.get(i); + + if (this.test(left, right) == false) { + return false; + } + } + + return true; + } + + public boolean test(Object left, Object right) { + + if (left instanceof ItemStack) { + if (right instanceof ItemStack) { + return this.test((ItemStack) left, (ItemStack) right); + } + } else if (right instanceof FluidStack) { + return this.test((FluidStack) left, (FluidStack) right); + } + + return false; + } + + public boolean test(ItemStack left, ItemStack right) { + if (left.isEmpty() && right.isEmpty()) { + return true; + } else if (!ItemHandlerHelper.canItemStacksStack(left, right)) { + return false; + } + + return true; + } + + public boolean test(FluidStack left, FluidStack right) { + if (left.isEmpty() && right.isEmpty()) { + return true; + } else if (!left.getFluid().isEquivalentTo(right.getFluid()) || !FluidStack.areFluidStackTagsEqual(left, right)) { + return false; + } + + return true; + } + + public void set(ItemStack stack) { + this.set(Lists.newArrayList(stack)); + } + + public void set(FluidStack stack) { + this.set(Lists.newArrayList(stack)); + } + + public void set(Collection stacks) { + this.list.clear(); + + for (Object object : stacks) { + if (object instanceof ItemStack) { + this.list.add(((ItemStack) object).copy()); + } else if (object instanceof FluidStack) { + this.list.add(((FluidStack) object).copy()); + } + } + } + + public List getStacks() { + return Collections.unmodifiableList(this.list); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/item/CoalTorchItem.java b/src/main/java/net/mrscauthd/boss_tools/item/CoalTorchItem.java new file mode 100644 index 000000000..6ff2adddf --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/item/CoalTorchItem.java @@ -0,0 +1,53 @@ +package net.mrscauthd.boss_tools.item; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.item.BlockItem; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.Item; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.world.IWorldReader; + +import javax.annotation.Nullable; +import java.util.Map; + +public class CoalTorchItem extends BlockItem { + protected final Block wallBlock; + + public CoalTorchItem(Block floorBlock, Block wallBlockIn, Item.Properties propertiesIn) { + super(floorBlock, propertiesIn); + this.wallBlock = wallBlockIn; + } + + @Nullable + protected BlockState getStateForPlacement(BlockItemUseContext context) { + BlockState blockstate = this.wallBlock.getStateForPlacement(context); + BlockState blockstate1 = null; + IWorldReader iworldreader = context.getWorld(); + BlockPos blockpos = context.getPos(); + + for(Direction direction : context.getNearestLookingDirections()) { + if (direction != Direction.UP) { + BlockState blockstate2 = direction == Direction.DOWN ? this.getBlock().getStateForPlacement(context) : blockstate; + if (blockstate2 != null && blockstate2.isValidPosition(iworldreader, blockpos)) { + blockstate1 = blockstate2; + break; + } + } + } + + return blockstate1 != null && iworldreader.placedBlockCollides(blockstate1, blockpos, ISelectionContext.dummy()) ? blockstate1 : null; + } + + public void addToBlockToItemMap(Map blockToItemMap, Item itemIn) { + super.addToBlockToItemMap(blockToItemMap, itemIn); + blockToItemMap.put(this.wallBlock, itemIn); + } + + public void removeFromBlockToItemMap(Map blockToItemMap, Item itemIn) { + super.removeFromBlockToItemMap(blockToItemMap, itemIn); + blockToItemMap.remove(this.wallBlock); + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/item/HammerItem.java b/src/main/java/net/mrscauthd/boss_tools/item/HammerItem.java new file mode 100644 index 000000000..59eaa1943 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/item/HammerItem.java @@ -0,0 +1,30 @@ +package net.mrscauthd.boss_tools.item; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.Item; + +public class HammerItem extends Item { + public HammerItem(Properties properties) { + super(properties); + } + + @Override + public boolean hasContainerItem() { + return true; + } + + @Override + public ItemStack getContainerItem(ItemStack itemstack) { + ItemStack retval = new ItemStack(this); + retval.setDamage(itemstack.getDamage() + 1); + if (retval.getDamage() >= retval.getMaxDamage()) { + return ItemStack.EMPTY; + } + return retval; + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return false; + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/item/RoverItem.java b/src/main/java/net/mrscauthd/boss_tools/item/RoverItem.java new file mode 100644 index 000000000..eb99c8a6f --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/item/RoverItem.java @@ -0,0 +1,120 @@ +package net.mrscauthd.boss_tools.item; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.CreatureEntity; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.SpawnReason; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUseContext; +import net.minecraft.util.*; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.IServerWorld; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.entity.RoverEntity; +import net.mrscauthd.boss_tools.fluid.FluidUtil2; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; + +import java.util.List; +import java.util.stream.Stream; + +public class RoverItem extends Item { + + public static String fuelTag = BossToolsMod.ModId + ":fuel"; + + public RoverItem(Properties properties) { + super(properties); + } + + @Override + public void addInformation(ItemStack itemstack, World world, List list, ITooltipFlag flag) { + super.addInformation(itemstack, world, list, flag); + int fuel = itemstack.getOrCreateTag().getInt(fuelTag); + list.add(GaugeTextHelper.buildBlockTooltip(GaugeTextHelper.getStorageText(GaugeValueHelper.getFuel(fuel, RoverEntity.FUEL_BUCKETS * FluidUtil2.BUCKET_SIZE)))); + } + + @Override + public ActionResultType onItemUseFirst(ItemStack stack, ItemUseContext context) { + PlayerEntity player = context.getPlayer(); + World world = context.getWorld(); + BlockPos pos = context.getPos(); + Hand hand = context.getHand(); + ItemStack itemStack = context.getItem(); + + int x = pos.getX(); + int y = pos.getY(); + int z = pos.getZ(); + + BlockPos pos1 = new BlockPos(x, y + 1, z); + BlockPos pos2 = new BlockPos(x + 1, y + 1, z); + BlockPos pos3 = new BlockPos(x - 1, y + 1, z); + BlockPos pos4 = new BlockPos(x, y + 1, z + 1); + BlockPos pos5 = new BlockPos(x, y + 1, z - 1); + BlockPos pos6 = new BlockPos(x + 1, y + 1, z + 1); + BlockPos pos7 = new BlockPos(x + 1, y + 1, z -1); + BlockPos pos8 = new BlockPos(x - 1, y + 1, z + 1); + BlockPos pos9 = new BlockPos(x - 1, y + 1, z - 1); + + if (!world.getBlockState(pos1).isSolid() && !world.getBlockState(pos2).isSolid() && !world.getBlockState(pos3).isSolid() && !world.getBlockState(pos4).isSolid() && !world.getBlockState(pos5).isSolid() && !world.getBlockState(pos6).isSolid() && !world.getBlockState(pos7).isSolid() && !world.getBlockState(pos8).isSolid() && !world.getBlockState(pos9).isSolid()) { + + AxisAlignedBB scanAbove = new AxisAlignedBB(x - 0, y - 0, z - 0, x + 1, y + 1, z + 1); + List entities = player.getEntityWorld().getEntitiesWithinAABB(Entity.class, scanAbove); + + if (entities.isEmpty()) { + RoverEntity rocket = new RoverEntity((EntityType) ModInnet.ROVER.get(), world); + + rocket.setPosition((double) pos.getX() + 0.5D, pos.getY() + 1, (double) pos.getZ() + 0.5D); + double d0 = func_208051_a(world, pos, true, rocket.getBoundingBox()); + float f = player.rotationYaw; + + rocket.setLocationAndAngles((double)pos.getX() + 0.5D, (double)pos.getY() + d0, (double)pos.getZ() + 0.5D, f, 0.0F); + + rocket.rotationYawHead = rocket.rotationYaw; + rocket.renderYawOffset = rocket.rotationYaw; + + if (world instanceof ServerWorld) { + rocket.onInitialSpawn((IServerWorld) world, world.getDifficultyForLocation(rocket.getPosition()), SpawnReason.MOB_SUMMONED, null, null); + } + + world.addEntity(rocket); + + rocket.getDataManager().set(RoverEntity.FUEL, itemStack.getOrCreateTag().getInt(fuelTag)); + + if (!player.abilities.isCreativeMode) { + player.setHeldItem(hand, ItemStack.EMPTY); + } + + roverPlaceSound(pos, world); + } + } + + return super.onItemUseFirst(stack, context); + } + + protected static double func_208051_a(IWorldReader worldReader, BlockPos pos, boolean p_208051_2_, AxisAlignedBB p_208051_3_) { + AxisAlignedBB axisalignedbb = new AxisAlignedBB(pos); + if (p_208051_2_) { + axisalignedbb = axisalignedbb.expand(0.0D, -1.0D, 0.0D); + } + + Stream stream = worldReader.func_234867_d_((Entity)null, axisalignedbb, (entity) -> { + return true; + }); + return 1.0D + VoxelShapes.getAllowedOffset(Direction.Axis.Y, p_208051_3_, stream, p_208051_2_ ? -2.0D : -1.0D); + } + + public static void roverPlaceSound(BlockPos pos, World world) { + world.playSound(null, pos, SoundEvents.BLOCK_STONE_BREAK, SoundCategory.BLOCKS, 1,1); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/item/Tier1RocketItem.java b/src/main/java/net/mrscauthd/boss_tools/item/Tier1RocketItem.java new file mode 100644 index 000000000..a41f3acb2 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/item/Tier1RocketItem.java @@ -0,0 +1,122 @@ +package net.mrscauthd.boss_tools.item; + +import net.minecraft.block.BlockState; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.Entity; +import net.minecraft.entity.SpawnReason; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUseContext; +import net.minecraft.util.*; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.world.IServerWorld; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.block.RocketLaunchPad; +import net.mrscauthd.boss_tools.entity.RocketTier1Entity; +import net.mrscauthd.boss_tools.entity.RoverEntity; +import net.mrscauthd.boss_tools.fluid.FluidUtil2; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; + +import java.util.List; +import java.util.stream.Stream; + +public class Tier1RocketItem extends Item { + + public static String fuelTag = BossToolsMod.ModId + ":fuel"; + public static String bucketTag = BossToolsMod.ModId + ":bucket"; + + public Tier1RocketItem(Properties properties) { + super(properties); + } + + @Override + public void addInformation(ItemStack itemstack, World world, List list, ITooltipFlag flag) { + super.addInformation(itemstack, world, list, flag); + int fuel = itemstack.getOrCreateTag().getInt(fuelTag) / 3; + list.add(GaugeTextHelper.buildBlockTooltip(GaugeTextHelper.getPercentText(GaugeValueHelper.getFuel(fuel, 100)))); + } + + @Override + public ActionResultType onItemUseFirst(ItemStack stack, ItemUseContext context) { + PlayerEntity player = context.getPlayer(); + World world = context.getWorld(); + BlockPos pos = context.getPos(); + BlockState state = world.getBlockState(pos); + Hand hand = context.getHand(); + ItemStack itemStack = context.getItem(); + + int x = pos.getX(); + int y = pos.getY(); + int z = pos.getZ(); + + if (state.getBlock() instanceof RocketLaunchPad && state.get(RocketLaunchPad.STAGE)) { + + BlockPos pos1 = new BlockPos(x,y + 1, z); + BlockPos pos2 = new BlockPos(x,y + 2, z); + BlockPos pos3 = new BlockPos(x,y + 3, z); + BlockPos pos4 = new BlockPos(x,y + 4, z); + + if (world.getBlockState(pos1).isAir() && world.getBlockState(pos2).isAir() && world.getBlockState(pos3).isAir() && world.getBlockState(pos4).isAir()) { + + AxisAlignedBB scanAbove = new AxisAlignedBB(x - 0, y - 0, z - 0, x + 1, y + 1, z + 1); + List entities = player.getEntityWorld().getEntitiesWithinAABB(Entity.class, scanAbove); + + if (entities.isEmpty()) { + RocketTier1Entity rocket = new RocketTier1Entity(ModInnet.TIER_1_ROCKET.get(), world); + + rocket.setPosition((double) pos.getX() + 0.5D, pos.getY() + 1, (double) pos.getZ() + 0.5D); + double d0 = func_208051_a(world, pos, true, rocket.getBoundingBox()); + rocket.setLocationAndAngles((double)pos.getX() + 0.5D, (double)pos.getY() + d0, (double)pos.getZ() + 0.5D, 0.0F, 0.0F); + + rocket.rotationYawHead = rocket.rotationYaw; + rocket.renderYawOffset = rocket.rotationYaw; + + if (world instanceof ServerWorld) { + rocket.onInitialSpawn((IServerWorld) world, world.getDifficultyForLocation(rocket.getPosition()), SpawnReason.MOB_SUMMONED, null, null); + } + world.addEntity(rocket); + + rocket.getDataManager().set(RocketTier1Entity.FUEL, itemStack.getOrCreateTag().getInt(fuelTag)); + rocket.getDataManager().set(RocketTier1Entity.BUCKET, itemStack.getOrCreateTag().getBoolean(bucketTag)); + + if (!player.abilities.isCreativeMode) { + player.setHeldItem(hand, ItemStack.EMPTY); + } else { + player.swing(context.getHand(), true); + } + + rocketPlaceSound(pos, world); + } + } + } + + return super.onItemUseFirst(stack, context); + } + + protected static double func_208051_a(IWorldReader worldReader, BlockPos pos, boolean p_208051_2_, AxisAlignedBB p_208051_3_) { + AxisAlignedBB axisalignedbb = new AxisAlignedBB(pos); + if (p_208051_2_) { + axisalignedbb = axisalignedbb.expand(0.0D, -1.0D, 0.0D); + } + + Stream stream = worldReader.func_234867_d_((Entity)null, axisalignedbb, (entity) -> { + return true; + }); + return 1.0D + VoxelShapes.getAllowedOffset(Direction.Axis.Y, p_208051_3_, stream, p_208051_2_ ? -2.0D : -1.0D); + } + + public static void rocketPlaceSound(BlockPos pos, World world) { + world.playSound(null, pos, SoundEvents.BLOCK_STONE_BREAK, SoundCategory.BLOCKS, 1,1); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/item/Tier2RocketItem.java b/src/main/java/net/mrscauthd/boss_tools/item/Tier2RocketItem.java new file mode 100644 index 000000000..accdc4044 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/item/Tier2RocketItem.java @@ -0,0 +1,120 @@ +package net.mrscauthd.boss_tools.item; + +import net.minecraft.block.BlockState; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.Entity; +import net.minecraft.entity.SpawnReason; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUseContext; +import net.minecraft.util.*; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.world.IServerWorld; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.block.RocketLaunchPad; +import net.mrscauthd.boss_tools.entity.RocketTier2Entity; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; + +import java.util.List; +import java.util.stream.Stream; + +public class Tier2RocketItem extends Item { + + public static String fuelTag = BossToolsMod.ModId + ":fuel"; + public static String bucketTag = BossToolsMod.ModId + ":buckets"; + + public Tier2RocketItem(Properties properties) { + super(properties); + } + + @Override + public void addInformation(ItemStack itemstack, World world, List list, ITooltipFlag flag) { + super.addInformation(itemstack, world, list, flag); + int fuel = itemstack.getOrCreateTag().getInt(fuelTag) / 3; + list.add(GaugeTextHelper.buildBlockTooltip(GaugeTextHelper.getPercentText(GaugeValueHelper.getFuel(fuel, 100)))); + } + + @Override + public ActionResultType onItemUseFirst(ItemStack stack, ItemUseContext context) { + PlayerEntity player = context.getPlayer(); + World world = context.getWorld(); + BlockPos pos = context.getPos(); + BlockState state = world.getBlockState(pos); + Hand hand = context.getHand(); + ItemStack itemStack = context.getItem(); + + int x = pos.getX(); + int y = pos.getY(); + int z = pos.getZ(); + + if (state.getBlock() instanceof RocketLaunchPad && state.get(RocketLaunchPad.STAGE)) { + + BlockPos pos1 = new BlockPos(x,y + 1, z); + BlockPos pos2 = new BlockPos(x,y + 2, z); + BlockPos pos3 = new BlockPos(x,y + 3, z); + BlockPos pos4 = new BlockPos(x,y + 4, z); + + if (world.getBlockState(pos1).isAir() && world.getBlockState(pos2).isAir() && world.getBlockState(pos3).isAir() && world.getBlockState(pos4).isAir()) { + + AxisAlignedBB scanAbove = new AxisAlignedBB(x - 0, y - 0, z - 0, x + 1, y + 1, z + 1); + List entities = player.getEntityWorld().getEntitiesWithinAABB(Entity.class, scanAbove); + + if (entities.isEmpty()) { + RocketTier2Entity rocket = new RocketTier2Entity(ModInnet.TIER_2_ROCKET.get(), world); + + rocket.setPosition((double) pos.getX() + 0.5D, pos.getY() + 1, (double) pos.getZ() + 0.5D); + double d0 = func_208051_a(world, pos, true, rocket.getBoundingBox()); + rocket.setLocationAndAngles((double)pos.getX() + 0.5D, (double)pos.getY() + d0, (double)pos.getZ() + 0.5D, 0.0F, 0.0F); + + rocket.rotationYawHead = rocket.rotationYaw; + rocket.renderYawOffset = rocket.rotationYaw; + + if (world instanceof ServerWorld) { + rocket.onInitialSpawn((IServerWorld) world, world.getDifficultyForLocation(rocket.getPosition()), SpawnReason.MOB_SUMMONED, null, null); + } + world.addEntity(rocket); + + rocket.getDataManager().set(RocketTier2Entity.FUEL, itemStack.getOrCreateTag().getInt(fuelTag)); + rocket.getDataManager().set(RocketTier2Entity.BUCKETS, itemStack.getOrCreateTag().getInt(bucketTag)); + + if (!player.abilities.isCreativeMode) { + player.setHeldItem(hand, ItemStack.EMPTY); + } else { + player.swing(context.getHand(), true); + } + + rocketPlaceSound(pos, world); + } + } + } + + return super.onItemUseFirst(stack, context); + } + + protected static double func_208051_a(IWorldReader worldReader, BlockPos pos, boolean p_208051_2_, AxisAlignedBB p_208051_3_) { + AxisAlignedBB axisalignedbb = new AxisAlignedBB(pos); + if (p_208051_2_) { + axisalignedbb = axisalignedbb.expand(0.0D, -1.0D, 0.0D); + } + + Stream stream = worldReader.func_234867_d_((Entity)null, axisalignedbb, (entity) -> { + return true; + }); + return 1.0D + VoxelShapes.getAllowedOffset(Direction.Axis.Y, p_208051_3_, stream, p_208051_2_ ? -2.0D : -1.0D); + } + + public static void rocketPlaceSound(BlockPos pos, World world) { + world.playSound(null, pos, SoundEvents.BLOCK_STONE_BREAK, SoundCategory.BLOCKS, 1,1); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/item/Tier3RocketItem.java b/src/main/java/net/mrscauthd/boss_tools/item/Tier3RocketItem.java new file mode 100644 index 000000000..42c6e3c36 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/item/Tier3RocketItem.java @@ -0,0 +1,120 @@ +package net.mrscauthd.boss_tools.item; + +import net.minecraft.block.BlockState; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.Entity; +import net.minecraft.entity.SpawnReason; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUseContext; +import net.minecraft.util.*; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.world.IServerWorld; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.block.RocketLaunchPad; +import net.mrscauthd.boss_tools.entity.RocketTier3Entity; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; + +import java.util.List; +import java.util.stream.Stream; + +public class Tier3RocketItem extends Item { + + public static String fuelTag = BossToolsMod.ModId + ":fuel"; + public static String bucketTag = BossToolsMod.ModId + ":buckets"; + + public Tier3RocketItem(Properties properties) { + super(properties); + } + + @Override + public void addInformation(ItemStack itemstack, World world, List list, ITooltipFlag flag) { + super.addInformation(itemstack, world, list, flag); + int fuel = itemstack.getOrCreateTag().getInt(fuelTag) / 3; + list.add(GaugeTextHelper.buildBlockTooltip(GaugeTextHelper.getPercentText(GaugeValueHelper.getFuel(fuel, 100)))); + } + + @Override + public ActionResultType onItemUseFirst(ItemStack stack, ItemUseContext context) { + PlayerEntity player = context.getPlayer(); + World world = context.getWorld(); + BlockPos pos = context.getPos(); + BlockState state = world.getBlockState(pos); + Hand hand = context.getHand(); + ItemStack itemStack = context.getItem(); + + int x = pos.getX(); + int y = pos.getY(); + int z = pos.getZ(); + + if (state.getBlock() instanceof RocketLaunchPad && state.get(RocketLaunchPad.STAGE)) { + + BlockPos pos1 = new BlockPos(x,y + 1, z); + BlockPos pos2 = new BlockPos(x,y + 2, z); + BlockPos pos3 = new BlockPos(x,y + 3, z); + BlockPos pos4 = new BlockPos(x,y + 4, z); + + if (world.getBlockState(pos1).isAir() && world.getBlockState(pos2).isAir() && world.getBlockState(pos3).isAir() && world.getBlockState(pos4).isAir()) { + + AxisAlignedBB scanAbove = new AxisAlignedBB(x - 0, y - 0, z - 0, x + 1, y + 1, z + 1); + List entities = player.getEntityWorld().getEntitiesWithinAABB(Entity.class, scanAbove); + + if (entities.isEmpty()) { + RocketTier3Entity rocket = new RocketTier3Entity(ModInnet.TIER_3_ROCKET.get(), world); + + rocket.setPosition((double) pos.getX() + 0.5D, pos.getY() + 1, (double) pos.getZ() + 0.5D); + double d0 = func_208051_a(world, pos, true, rocket.getBoundingBox()); + rocket.setLocationAndAngles((double)pos.getX() + 0.5D, (double)pos.getY() + d0, (double)pos.getZ() + 0.5D, 0.0F, 0.0F); + + rocket.rotationYawHead = rocket.rotationYaw; + rocket.renderYawOffset = rocket.rotationYaw; + + if (world instanceof ServerWorld) { + rocket.onInitialSpawn((IServerWorld) world, world.getDifficultyForLocation(rocket.getPosition()), SpawnReason.MOB_SUMMONED, null, null); + } + world.addEntity(rocket); + + rocket.getDataManager().set(RocketTier3Entity.FUEL, itemStack.getOrCreateTag().getInt(fuelTag)); + rocket.getDataManager().set(RocketTier3Entity.BUCKETS, itemStack.getOrCreateTag().getInt(bucketTag)); + + if (!player.abilities.isCreativeMode) { + player.setHeldItem(hand, ItemStack.EMPTY); + } else { + player.swing(context.getHand(), true); + } + + rocketPlaceSound(pos, world); + } + } + } + + return super.onItemUseFirst(stack, context); + } + + protected static double func_208051_a(IWorldReader worldReader, BlockPos pos, boolean p_208051_2_, AxisAlignedBB p_208051_3_) { + AxisAlignedBB axisalignedbb = new AxisAlignedBB(pos); + if (p_208051_2_) { + axisalignedbb = axisalignedbb.expand(0.0D, -1.0D, 0.0D); + } + + Stream stream = worldReader.func_234867_d_((Entity)null, axisalignedbb, (entity) -> { + return true; + }); + return 1.0D + VoxelShapes.getAllowedOffset(Direction.Axis.Y, p_208051_3_, stream, p_208051_2_ ? -2.0D : -1.0D); + } + + public static void rocketPlaceSound(BlockPos pos, World world) { + world.playSound(null, pos, SoundEvents.BLOCK_STONE_BREAK, SoundCategory.BLOCKS, 1,1); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/itemgroup/BossToolsItemGroups.java b/src/main/java/net/mrscauthd/boss_tools/itemgroup/BossToolsItemGroups.java new file mode 100644 index 000000000..13362eba6 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/itemgroup/BossToolsItemGroups.java @@ -0,0 +1,61 @@ +package net.mrscauthd.boss_tools.itemgroup; + +import net.mrscauthd.boss_tools.ModInnet; + +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemGroup; + +public class BossToolsItemGroups { + public static ItemGroup tab_normal = new ItemGroup("tab_normal") { + @OnlyIn(Dist.CLIENT) + @Override + public ItemStack createIcon() { + return new ItemStack(ModInnet.TIER_1_ROCKET_ITEM.get(), 1); + } + }; + public static ItemGroup tab_machines = new ItemGroup("tab_machines") { + @OnlyIn(Dist.CLIENT) + @Override + public ItemStack createIcon() { + return new ItemStack(ModInnet.NASA_WORKBENCH_ITEM.get(), 1); + } + }; + public static ItemGroup tab_basics = new ItemGroup("tab_basics") { + @OnlyIn(Dist.CLIENT) + @Override + public ItemStack createIcon() { + return new ItemStack(ModInnet.GOLDEN_ENGINE.get(), 1); + } + }; + public static ItemGroup tab_materials = new ItemGroup("tab_materials") { + @OnlyIn(Dist.CLIENT) + @Override + public ItemStack createIcon() { + return new ItemStack(ModInnet.IRON_PLATE.get(), 1); + } + }; + public static ItemGroup tab_flags = new ItemGroup("tab_flags") { + @OnlyIn(Dist.CLIENT) + @Override + public ItemStack createIcon() { + return new ItemStack(ModInnet.FLAG_PURPLE_BLOCK.get(), 1); + } + }; + public static ItemGroup tab_blocks = new ItemGroup("tab_blocks") { + @OnlyIn(Dist.CLIENT) + @Override + public ItemStack createIcon() { + return new ItemStack(ModInnet.MOON_IRON_ORE.get(), 1); + } + }; + public static ItemGroup tab_spawn_eggs = new ItemGroup("tab_spawn_eggs") { + @OnlyIn(Dist.CLIENT) + @Override + public ItemStack createIcon() { + return new ItemStack(ModInnet.ALIEN_SPAWN_EGG.get(), 1); + } + }; +} diff --git a/src/main/java/net/mrscauthd/boss_tools/itemtiers/SteelItemTier.java b/src/main/java/net/mrscauthd/boss_tools/itemtiers/SteelItemTier.java new file mode 100644 index 000000000..b157cdd55 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/itemtiers/SteelItemTier.java @@ -0,0 +1,34 @@ +package net.mrscauthd.boss_tools.itemtiers; + +import net.minecraft.item.IItemTier; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.mrscauthd.boss_tools.ModInnet; + +public class SteelItemTier { + public static IItemTier ITEM_TIER = new IItemTier() { + public int getMaxUses() { + return 1661; + } + + public float getEfficiency() { + return 7f; + } + + public float getAttackDamage() { + return 2f; + } + + public int getHarvestLevel() { + return 3; + } + + public int getEnchantability() { + return 14; + } + + public Ingredient getRepairMaterial() { + return Ingredient.fromStacks(new ItemStack(ModInnet.STEEL_INGOT.get(),1)); + } + }; +} diff --git a/src/main/java/net/mrscauthd/boss_tools/jei/JeiPlugin.java b/src/main/java/net/mrscauthd/boss_tools/jei/JeiPlugin.java new file mode 100644 index 000000000..7836b7545 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/jei/JeiPlugin.java @@ -0,0 +1,1295 @@ +package net.mrscauthd.boss_tools.jei; + +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.google.common.collect.Lists; +import com.mojang.blaze3d.matrix.MatrixStack; + +import mezz.jei.api.IModPlugin; +import mezz.jei.api.constants.VanillaRecipeCategoryUid; +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.drawable.IDrawableAnimated; +import mezz.jei.api.gui.drawable.IDrawableBuilder; +import mezz.jei.api.gui.drawable.IDrawableStatic; +import mezz.jei.api.gui.ingredient.IGuiFluidStackGroup; +import mezz.jei.api.gui.ingredient.IGuiItemStackGroup; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.helpers.IJeiHelpers; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.category.IRecipeCategory; +import mezz.jei.api.registration.IGuiHandlerRegistration; +import mezz.jei.api.registration.IRecipeCatalystRegistration; +import mezz.jei.api.registration.IRecipeCategoryRegistration; +import mezz.jei.api.registration.IRecipeRegistration; +import mezz.jei.api.registration.IRecipeTransferRegistration; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.Rectangle2d; +import net.minecraft.fluid.Fluid; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.registries.ForgeRegistries; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.capability.OxygenUtil; +import net.mrscauthd.boss_tools.crafting.BlastingRecipe; +import net.mrscauthd.boss_tools.crafting.BossToolsRecipeTypes; +import net.mrscauthd.boss_tools.crafting.CompressingRecipe; +import net.mrscauthd.boss_tools.crafting.FuelRefiningRecipe; +import net.mrscauthd.boss_tools.crafting.GeneratingRecipe; +import net.mrscauthd.boss_tools.crafting.OxygenBubbleDistributorRecipe; +import net.mrscauthd.boss_tools.crafting.OxygenLoaderRecipe; +import net.mrscauthd.boss_tools.crafting.WorkbenchingRecipe; +import net.mrscauthd.boss_tools.entity.RocketTier1Entity; +import net.mrscauthd.boss_tools.entity.RocketTier2Entity; +import net.mrscauthd.boss_tools.entity.RocketTier3Entity; +import net.mrscauthd.boss_tools.entity.RoverEntity; +import net.mrscauthd.boss_tools.events.Methodes; +import net.mrscauthd.boss_tools.fluid.FluidUtil2; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.crafting.RocketPart; +import net.mrscauthd.boss_tools.gui.screens.coalgenerator.CoalGeneratorGui; +import net.mrscauthd.boss_tools.gui.screens.coalgenerator.CoalGeneratorGuiWindow; +import net.mrscauthd.boss_tools.gui.screens.compressor.CompressorGui; +import net.mrscauthd.boss_tools.gui.screens.compressor.CompressorGuiWindow; +import net.mrscauthd.boss_tools.gui.screens.fuelrefinery.FuelRefineryGui; +import net.mrscauthd.boss_tools.gui.screens.fuelrefinery.FuelRefineryGuiWindow; +import net.mrscauthd.boss_tools.gui.screens.nasaworkbench.NasaWorkbenchGui; +import net.mrscauthd.boss_tools.gui.screens.nasaworkbench.NasaWorkbenchGuiWindow; +import net.mrscauthd.boss_tools.gui.screens.oxygenbubbledistributor.OxygenBubbleDistributorGui; +import net.mrscauthd.boss_tools.gui.screens.oxygenbubbledistributor.OxygenBubbleDistributorGuiWindow; +import net.mrscauthd.boss_tools.gui.screens.oxygenloader.OxygenLoaderGui; +import net.mrscauthd.boss_tools.gui.screens.oxygenloader.OxygenLoaderGuiWindow; +import net.mrscauthd.boss_tools.gui.screens.planetselection.PlanetSelectionGuiWindow; +import net.mrscauthd.boss_tools.gui.screens.rocket.RocketGui; +import net.mrscauthd.boss_tools.gui.screens.blastfurnace.BlastFurnaceGui; +import net.mrscauthd.boss_tools.gui.screens.blastfurnace.BlastFurnaceGuiWindow; +import net.mrscauthd.boss_tools.jei.jeiguihandlers.BlastFurnaceGuiContainerHandler; +import net.mrscauthd.boss_tools.jei.jeiguihandlers.CoalGeneratorGuiContainerHandler; +import net.mrscauthd.boss_tools.jei.jeiguihandlers.CompressorGuiContainerHandler; +import net.mrscauthd.boss_tools.jei.jeiguihandlers.PlanetSlecetionGuiJeiHandler; +import net.mrscauthd.boss_tools.machines.NASAWorkbenchBlock; +import net.mrscauthd.boss_tools.machines.tile.ItemStackToItemStackTileEntity; +import net.mrscauthd.boss_tools.machines.tile.OxygenMakingTileEntity; +import net.mrscauthd.boss_tools.machines.BlastingFurnaceBlock; +import net.mrscauthd.boss_tools.machines.CoalGeneratorBlock; +import net.mrscauthd.boss_tools.machines.CompressorBlock; +import net.mrscauthd.boss_tools.machines.FuelRefineryBlock; +import net.mrscauthd.boss_tools.gui.helper.GridPlacer; +import net.mrscauthd.boss_tools.gui.helper.GuiHelper; +import net.mrscauthd.boss_tools.gui.helper.IPlacer; +import net.mrscauthd.boss_tools.gui.helper.RocketPartGridPlacer; + +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@mezz.jei.api.JeiPlugin +public class JeiPlugin implements IModPlugin { + public static IJeiHelpers jeiHelper; + + private Map> fluidFullItemStacks; + private List oxygenFullItemStacks; + private List fuelTagFluids; + + public List getFluidFullItemStacks(Fluid fluid){ + return this.fluidFullItemStacks.computeIfAbsent(fluid, this::generateFluidFullIngredients); + } + + public List getFluidFullItemStacks(Collection fluids){ + return fluids.stream().flatMap(f -> this.getFluidFullItemStacks(f).stream()).collect(Collectors.toList()); + } + + @Override + public ResourceLocation getPluginUid() { + return new ResourceLocation(BossToolsMod.ModId, "default"); + } + + @Override + public void registerRecipeTransferHandlers(IRecipeTransferRegistration registration) { + int inventorySlotCount = 36; + // OxygenLoader + registration.addRecipeTransferHandler(OxygenLoaderGui.GuiContainer.class, OxygenLoaderJeiCategory.Uid, OxygenMakingTileEntity.SLOT_INPUT_SOURCE, 1, 0, inventorySlotCount); + // OxygenBubbleDistributor + registration.addRecipeTransferHandler(OxygenBubbleDistributorGui.GuiContainer.class, OxygenBubbleDistributorJeiCategory.Uid, OxygenMakingTileEntity.SLOT_INPUT_SOURCE, 1, 0, inventorySlotCount); + // Generator + registration.addRecipeTransferHandler(CoalGeneratorGui.GuiContainer.class, CoalGeneratorJeiCategory.Uid, CoalGeneratorBlock.SLOT_FUEL, 1, CoalGeneratorBlock.SLOT_FUEL + 1, inventorySlotCount); + // BlastFurnace + int blastInventoryStartIndex = BlastingFurnaceBlock.SLOT_FUEL + 1; + registration.addRecipeTransferHandler(BlastFurnaceGui.GuiContainer.class, BlastingFurnaceJeiCategory.Uid, ItemStackToItemStackTileEntity.SLOT_INGREDIENT, 1, blastInventoryStartIndex, inventorySlotCount); + registration.addRecipeTransferHandler(BlastFurnaceGui.GuiContainer.class, VanillaRecipeCategoryUid.FUEL, BlastingFurnaceBlock.SLOT_FUEL, 1, blastInventoryStartIndex, inventorySlotCount); + // Compressor + registration.addRecipeTransferHandler(CompressorGui.GuiContainer.class, CompressorJeiCategory.Uid, ItemStackToItemStackTileEntity.SLOT_INGREDIENT, 1, ItemStackToItemStackTileEntity.SLOT_OUTPUT + 1, inventorySlotCount); + // WorkBench + int workbenchPartSlotStart = 1 + NASAWorkbenchBlock.SLOT_PARTS; + int workbenchPartSlotCount = NASAWorkbenchBlock.getBasicPartSlots(); + registration.addRecipeTransferHandler(NasaWorkbenchGui.GuiContainer.class, NASAWorkbenchJeiCategory.Uid, workbenchPartSlotStart, workbenchPartSlotCount, workbenchPartSlotStart + workbenchPartSlotCount, inventorySlotCount); + //Fuel Refinery + registration.addRecipeTransferHandler(FuelRefineryGui.GuiContainer.class, FuelRefineryJeiCategory.Uid, FuelRefineryBlock.SLOT_INPUT_SOURCE, 1, 0, inventorySlotCount); + //Rocket Fuel + registration.addRecipeTransferHandler(RocketGui.GuiContainer.class, Tier1RocketJeiCategory.Uid, 0, 1, 0, inventorySlotCount); + } + + @Override + public void registerGuiHandlers(IGuiHandlerRegistration registration) { + registration.addRecipeClickArea(NasaWorkbenchGuiWindow.class, 108, 49, 14, 14, NASAWorkbenchJeiCategory.Uid); + registration.addGuiContainerHandler(CoalGeneratorGuiWindow.class, new CoalGeneratorGuiContainerHandler()); + registration.addRecipeClickArea(FuelRefineryGuiWindow.class, FuelRefineryGuiWindow.ARROW_LEFT, FuelRefineryGuiWindow.ARROW_TOP, GuiHelper.ARROW_WIDTH, GuiHelper.ARROW_HEIGHT, FuelRefineryJeiCategory.Uid); + registration.addGuiContainerHandler(BlastFurnaceGuiWindow.class, new BlastFurnaceGuiContainerHandler()); + registration.addGuiContainerHandler(CompressorGuiWindow.class, new CompressorGuiContainerHandler()); + registration.addRecipeClickArea(OxygenLoaderGuiWindow.class, OxygenLoaderGuiWindow.ARROW_LEFT, OxygenLoaderGuiWindow.ARROW_TOP, GuiHelper.ARROW_WIDTH, GuiHelper.ARROW_HEIGHT, OxygenLoaderJeiCategory.Uid); + registration.addRecipeClickArea(OxygenBubbleDistributorGuiWindow.class, OxygenBubbleDistributorGuiWindow.ARROW_LEFT, OxygenBubbleDistributorGuiWindow.ARROW_TOP, GuiHelper.ARROW_WIDTH, GuiHelper.ARROW_HEIGHT, OxygenBubbleDistributorJeiCategory.Uid); + + registration.addGuiContainerHandler(PlanetSelectionGuiWindow.class, new PlanetSlecetionGuiJeiHandler()); + } + + @Override + public void registerCategories(IRecipeCategoryRegistration registration) { + jeiHelper = registration.getJeiHelpers(); + registration.addRecipeCategories(new OxygenLoaderJeiCategory(this, jeiHelper.getGuiHelper())); + registration.addRecipeCategories(new OxygenBubbleDistributorJeiCategory(this, jeiHelper.getGuiHelper())); + // Genrator + registration.addRecipeCategories(new CoalGeneratorJeiCategory(jeiHelper.getGuiHelper())); + // workbench + registration.addRecipeCategories(new NASAWorkbenchJeiCategory(jeiHelper.getGuiHelper())); + // BlastFurnace + registration.addRecipeCategories(new BlastingFurnaceJeiCategory(jeiHelper.getGuiHelper())); + // RocketTier1Gui + registration.addRecipeCategories(new Tier1RocketJeiCategory(jeiHelper.getGuiHelper())); + // RocketTier2Gui + registration.addRecipeCategories(new Tier2RocketJeiCategory(jeiHelper.getGuiHelper())); + // RocketItem3Gui + registration.addRecipeCategories(new Tier3RocketJeiCategory(jeiHelper.getGuiHelper())); + // Compressor + registration.addRecipeCategories(new CompressorJeiCategory(jeiHelper.getGuiHelper())); + // Fuel Maker + registration.addRecipeCategories(new FuelRefineryJeiCategory(this, jeiHelper.getGuiHelper())); + // Rover + registration.addRecipeCategories(new RoverJeiCategory(jeiHelper.getGuiHelper())); + } + + @Override + public void registerRecipes(IRecipeRegistration registration) { + this.fluidFullItemStacks = new HashMap<>(); + this.oxygenFullItemStacks = this.generateOxygenLoadingItems(); + this.fuelTagFluids = this.generateFuelTagFluids(); + + List fuelLoadingRecipes = this.generateFuelLoadingRecipes(); + + // OxygenLoader + registration.addRecipes(generateOxygenLoaderRecipes(), OxygenLoaderJeiCategory.Uid); + // OxygenBubbleDistributor + registration.addRecipes(generateOxygenBubbleDistributorRecipes(), OxygenBubbleDistributorJeiCategory.Uid); + // Generator + registration.addRecipes(generateGeneratorRecipes(), CoalGeneratorJeiCategory.Uid); + // workbench + registration.addRecipes(generateWorkbenchRecipes(), NASAWorkbenchJeiCategory.Uid); + // BlastFurnace + registration.addRecipes(generateBlastingFurnaceRecipes(), BlastingFurnaceJeiCategory.Uid); + // RocketTier1Gui + registration.addRecipes(fuelLoadingRecipes, Tier1RocketJeiCategory.Uid); + // RocketTier2Gui + registration.addRecipes(fuelLoadingRecipes, Tier2RocketJeiCategory.Uid); + // RocketTier3Gui + registration.addRecipes(fuelLoadingRecipes, Tier3RocketJeiCategory.Uid); + // Rover + registration.addRecipes(fuelLoadingRecipes, RoverJeiCategory.Uid); + // Compressor + registration.addRecipes(generateCompressingRecipes(), CompressorJeiCategory.Uid); + // Fuel Maker + registration.addRecipes(generateFuelMakerRecipes(), FuelRefineryJeiCategory.Uid); + // Oil + String oilDescriptionKey = "jei.tooltip." + BossToolsMod.ModId + ".oil"; + registration.addIngredientInfo(new ItemStack(ModInnet.OIL_BUCKET.get(), 1), VanillaTypes.ITEM, oilDescriptionKey); + registration.addIngredientInfo(new FluidStack(ModInnet.OIL_STILL.get(), 1000), VanillaTypes.FLUID, oilDescriptionKey); + // ... + } + + // Oxygen Loading + private List generateOxygenLoadingItems() { + return ForgeRegistries.ITEMS.getValues().stream().map(ItemStack::new).filter(OxygenUtil::canReceive).map(OxygenUtil::makeFull).collect(Collectors.toList()); + } + + // Oxygen Loader + private List generateOxygenLoaderRecipes() { + return BossToolsRecipeTypes.OXYGENLOADER.getRecipes(Minecraft.getInstance().world); + } + + // Oxygen Bubble Distributor + private List generateOxygenBubbleDistributorRecipes() { + return BossToolsRecipeTypes.OXYGENBUBBLEDISTRIBUTOR.getRecipes(Minecraft.getInstance().world); + } + + // Generator + private List generateGeneratorRecipes() { + return BossToolsRecipeTypes.GENERATING.getRecipes(Minecraft.getInstance().world); + } + + // Workbench + private List generateWorkbenchRecipes() { + return BossToolsRecipeTypes.WORKBENCHING.getRecipes(Minecraft.getInstance().world); + } + + // BlastFurnace + private List generateBlastingFurnaceRecipes() { + return BossToolsRecipeTypes.BLASTING.getRecipes(Minecraft.getInstance().world); + } + + // Compressor + private List generateCompressingRecipes() { + return BossToolsRecipeTypes.COMPRESSING.getRecipes(Minecraft.getInstance().world); + } + + // Fuel Maker + private List generateFluidFullIngredients(Fluid fluid){ + return ForgeRegistries.ITEMS.getValues().stream().map(i -> new ItemStack(i)).filter(is -> FluidUtil2.canFill(is, fluid)).map(is -> FluidUtil2.makeFull(is, fluid)).collect(Collectors.toList()); + } + + private List generateFuelMakerRecipes() { + return BossToolsRecipeTypes.FUELREFINING.getRecipes(Minecraft.getInstance().world); + } + + // Fuel Loading + private List generateFuelTagFluids() { + return ForgeRegistries.FLUIDS.getValues().stream().filter(f -> f.isSource(f.getDefaultState()) && Methodes.tagCheck(f, ModInnet.FLUID_VEHICLE_FUEL_TAG)).collect(Collectors.toList()); + } + + private List generateFuelLoadingRecipes() { + List itemStacks = new ArrayList<>(); + + for (Fluid fluid : this.fuelTagFluids) { + itemStacks.add(new ItemStack(fluid.getFilledBucket())); + } + + FuelLoadingRecipe recipe = new FuelLoadingRecipe(itemStacks, this.fuelTagFluids); + + List recipes = new ArrayList<>(); + recipes.add(recipe); + return recipes; + } + + public static class FuelLoadingRecipe { + private final List itemStacks; + private final List fluids; + + public FuelLoadingRecipe(List itemStacks, List fluids) { + this.itemStacks = Collections.unmodifiableList(itemStacks); + this.fluids = Collections.unmodifiableList(fluids); + } + + public List getItemStacks() { + return this.itemStacks; + } + + public List getFluidStacks(int amount){ + return this.getFluid().stream().map(f -> new FluidStack(f, amount)).collect(Collectors.toList()); + } + + public List getFluid() { + return this.fluids; + } + + } + + @Override + public void registerRecipeCatalysts(IRecipeCatalystRegistration registration) { + registration.addRecipeCatalyst(new ItemStack(ModInnet.OXYGEN_LOADER_BLOCK.get()), OxygenLoaderJeiCategory.Uid); + // Neue maschine + registration.addRecipeCatalyst(new ItemStack(ModInnet.OXYGEN_BUBBLE_DISTRIBUTOR_BLOCK.get()), OxygenBubbleDistributorJeiCategory.Uid); + // Genrator + registration.addRecipeCatalyst(new ItemStack(ModInnet.COAL_GENERATOR_BLOCK.get()), CoalGeneratorJeiCategory.Uid); + // workbench + registration.addRecipeCatalyst(new ItemStack(ModInnet.NASA_WORKBENCH_ITEM.get()), NASAWorkbenchJeiCategory.Uid); + // BlastingFurnace + registration.addRecipeCatalyst(new ItemStack(ModInnet.BLAST_FURNACE_BLOCK.get()), BlastingFurnaceJeiCategory.Uid, VanillaRecipeCategoryUid.FUEL); + // RocketTier1Gui + registration.addRecipeCatalyst(new ItemStack(ModInnet.TIER_1_ROCKET_ITEM.get()), Tier1RocketJeiCategory.Uid); + // RocketTier2Gui + registration.addRecipeCatalyst(new ItemStack(ModInnet.TIER_2_ROCKET_ITEM.get()), Tier2RocketJeiCategory.Uid); + // RocketTier3Gui + registration.addRecipeCatalyst(new ItemStack(ModInnet.TIER_3_ROCKET_ITEM.get()), Tier3RocketJeiCategory.Uid); + // Compressor + registration.addRecipeCatalyst(new ItemStack(ModInnet.COMPRESSOR_BLOCK.get()), CompressorJeiCategory.Uid); + // FuelMaker + registration.addRecipeCatalyst(new ItemStack(ModInnet.FUEL_REFINERY_BLOCK.get()), FuelRefineryJeiCategory.Uid); + // Rover + registration.addRecipeCatalyst(new ItemStack(ModInnet.ROVER_ITEM.get()), RoverJeiCategory.Uid); + } + + public static class OxygenLoaderJeiCategory implements IRecipeCategory { + public static final ResourceLocation Uid = new ResourceLocation(BossToolsMod.ModId, "oxygen_loader"); + public static final int INPUT_TANK_LEFT = 8; + public static final int INPUT_TANK_TOP = 8; + public static final int OUTPUT_TANK_LEFT = 74; + public static final int OUTPUT_TANK_TOP = 8; + public static final int ENERGY_LEFT = 114; + public static final int ENERGY_TOP = 8; + + private final JeiPlugin plugin; + private final String title; + private final IDrawable background; + private final IDrawable fluidOverlay; + private final LoadingCache cachedEnergies; + + public OxygenLoaderJeiCategory(JeiPlugin plugin, IGuiHelper guiHelper) { + this.plugin = plugin; + this.title = new TranslationTextComponent("container." + BossToolsMod.ModId + ".oxygen_loader").getString(); + this.background = guiHelper.createDrawable(new ResourceLocation(BossToolsMod.ModId, "textures/jei/oxygen_loader_jei.png"), 0, 0, 148, 64); + this.fluidOverlay = guiHelper.drawableBuilder(GuiHelper.FLUID_TANK_PATH, 0, 0, GuiHelper.FLUID_TANK_WIDTH, GuiHelper.FLUID_TANK_HEIGHT).setTextureSize(GuiHelper.FLUID_TANK_WIDTH, GuiHelper.FLUID_TANK_HEIGHT).build(); + this.cachedEnergies = createUsingEnergies(guiHelper); + } + + @Override + public List getTooltipStrings(OxygenLoaderRecipe recipe, double mouseX, double mouseY) { + if (GuiHelper.isHover(this.getEnergyBounds(), mouseX, mouseY)) { + return Collections.singletonList(GaugeTextHelper.getUsingPerTickText(GaugeValueHelper.getEnergy(FuelRefineryBlock.ENERGY_PER_TICK)).build()); + } + else if (GuiHelper.isHover(this.getOutputTankBounds(), mouseX, mouseY)) { + return Collections.singletonList(GaugeTextHelper.getValueText(GaugeValueHelper.getOxygen(recipe.getOxygen())).build()); + } + + return Collections.emptyList(); + } + + @Override + public ResourceLocation getUid() { + return Uid; + } + + @Override + public Class getRecipeClass() { + return OxygenLoaderRecipe.class; + } + + @Override + public String getTitle() { + return this.title; + } + + @Override + public IDrawable getBackground() { + return this.background; + } + + @Override + public IDrawable getIcon() { + return null; + } + + @Override + public void draw(OxygenLoaderRecipe recipe, MatrixStack matrixStack, double mouseX, double mouseY) { + IRecipeCategory.super.draw(recipe, matrixStack, mouseX, mouseY); + + this.cachedEnergies.getUnchecked(200).draw(matrixStack, ENERGY_LEFT, ENERGY_TOP); + GuiHelper.drawOxygenTank(matrixStack, OUTPUT_TANK_LEFT, OUTPUT_TANK_TOP, 1.0D); + } + + @Override + public void setIngredients(OxygenLoaderRecipe recipe, IIngredients iIngredients) { + iIngredients.setInputs(VanillaTypes.ITEM, this.plugin.getFluidFullItemStacks(recipe.getInput().getFluids())); + iIngredients.setOutputs(VanillaTypes.ITEM, this.plugin.oxygenFullItemStacks); + + iIngredients.setInputLists(VanillaTypes.FLUID, Collections.singletonList(recipe.getInput().toStacks())); + } + + @Override + public void setRecipe(IRecipeLayout iRecipeLayout, OxygenLoaderRecipe recipe, IIngredients iIngredients) { + IGuiItemStackGroup itemStacks = iRecipeLayout.getItemStacks(); + itemStacks.init(FuelRefineryBlock.SLOT_INPUT_SOURCE, true, 24, 8); + itemStacks.init(FuelRefineryBlock.SLOT_OUTPUT_SINK, false, 90, 38); + itemStacks.init(FuelRefineryBlock.SLOT_INPUT_SINK, false, 24, 38); + itemStacks.init(FuelRefineryBlock.SLOT_OUTPUT_SOURCE, false, 90, 8); + + itemStacks.set(FuelRefineryBlock.SLOT_INPUT_SOURCE, iIngredients.getInputs(VanillaTypes.ITEM).stream().flatMap(Collection::stream).collect(Collectors.toList())); + itemStacks.set(FuelRefineryBlock.SLOT_OUTPUT_SINK, iIngredients.getOutputs(VanillaTypes.ITEM).stream().flatMap(Collection::stream).collect(Collectors.toList())); + + IGuiFluidStackGroup fluidStacks = iRecipeLayout.getFluidStacks(); + int tanks = 0; + + fluidStacks.init(tanks, true, INPUT_TANK_LEFT, INPUT_TANK_TOP, GuiHelper.FLUID_TANK_WIDTH, GuiHelper.FLUID_TANK_HEIGHT, 1, false, this.fluidOverlay); + fluidStacks.set(tanks, iIngredients.getInputs(VanillaTypes.FLUID).stream().flatMap(Collection::stream).collect(Collectors.toList())); + tanks++; + } + + public Rectangle2d getInputTankBounds() { + return GuiHelper.getFluidTankBounds(INPUT_TANK_LEFT, INPUT_TANK_TOP); + } + + public Rectangle2d getOutputTankBounds() { + return GuiHelper.getFluidTankBounds(OUTPUT_TANK_LEFT, OUTPUT_TANK_TOP); + } + + public Rectangle2d getEnergyBounds() { + return GuiHelper.getEnergyBounds(ENERGY_LEFT, ENERGY_TOP); + } + } + + public static class OxygenBubbleDistributorJeiCategory implements IRecipeCategory { + public static final ResourceLocation Uid = new ResourceLocation(BossToolsMod.ModId, "oxygen_bubble_distributor"); + public static final int INPUT_TANK_LEFT = 8; + public static final int INPUT_TANK_TOP = 8; + public static final int OUTPUT_TANK_LEFT = 74; + public static final int OUTPUT_TANK_TOP = 8; + public static final int ENERGY_LEFT = 114; + public static final int ENERGY_TOP = 8; + + private final JeiPlugin plugin; + private final String title; + private final IDrawable background; + private final IDrawable fluidOverlay; + private final LoadingCache cachedEnergies; + + public OxygenBubbleDistributorJeiCategory(JeiPlugin plugin, IGuiHelper guiHelper) { + this.plugin = plugin; + this.title = new TranslationTextComponent("container." + BossToolsMod.ModId + ".oxygen_bubble_distributor").getString(); + this.background = guiHelper.createDrawable(new ResourceLocation(BossToolsMod.ModId, "textures/jei/oxygen_bubble_distributor_jei.png"), 0, 0, 148, 64); + this.fluidOverlay = guiHelper.drawableBuilder(GuiHelper.FLUID_TANK_PATH, 0, 0, GuiHelper.FLUID_TANK_WIDTH, GuiHelper.FLUID_TANK_HEIGHT).setTextureSize(GuiHelper.FLUID_TANK_WIDTH, GuiHelper.FLUID_TANK_HEIGHT).build(); + this.cachedEnergies = createUsingEnergies(guiHelper); + } + + @Override + public List getTooltipStrings(OxygenBubbleDistributorRecipe recipe, double mouseX, double mouseY) { + if (GuiHelper.isHover(this.getEnergyBounds(), mouseX, mouseY)) { + return Collections.singletonList(GaugeTextHelper.getUsingPerTickText(GaugeValueHelper.getEnergy(FuelRefineryBlock.ENERGY_PER_TICK)).build()); + } + else if (GuiHelper.isHover(this.getOutputTankBounds(), mouseX, mouseY)) { + return Collections.singletonList(GaugeTextHelper.getValueText(GaugeValueHelper.getOxygen(recipe.getOxygen())).build()); + } + + return Collections.emptyList(); + } + + @Override + public ResourceLocation getUid() { + return Uid; + } + + @Override + public Class getRecipeClass() { + return OxygenBubbleDistributorRecipe.class; + } + + @Override + public String getTitle() { + return this.title; + } + + @Override + public IDrawable getBackground() { + return this.background; + } + + @Override + public IDrawable getIcon() { + return null; + } + + @Override + public void draw(OxygenBubbleDistributorRecipe recipe, MatrixStack matrixStack, double mouseX, double mouseY) { + IRecipeCategory.super.draw(recipe, matrixStack, mouseX, mouseY); + + this.cachedEnergies.getUnchecked(200).draw(matrixStack, ENERGY_LEFT, ENERGY_TOP); + GuiHelper.drawOxygenTank(matrixStack, OUTPUT_TANK_LEFT, OUTPUT_TANK_TOP, 1.0D); + } + + @Override + public void setIngredients(OxygenBubbleDistributorRecipe recipe, IIngredients iIngredients) { + iIngredients.setInputs(VanillaTypes.ITEM, this.plugin.getFluidFullItemStacks(recipe.getInput().getFluids())); + iIngredients.setInputLists(VanillaTypes.FLUID, Collections.singletonList(recipe.getInput().toStacks())); + } + + @Override + public void setRecipe(IRecipeLayout iRecipeLayout, OxygenBubbleDistributorRecipe recipe, IIngredients iIngredients) { + IGuiItemStackGroup itemStacks = iRecipeLayout.getItemStacks(); + itemStacks.init(FuelRefineryBlock.SLOT_INPUT_SOURCE, true, 24, 8); + itemStacks.init(FuelRefineryBlock.SLOT_INPUT_SINK, false, 24, 38); + + itemStacks.set(FuelRefineryBlock.SLOT_INPUT_SOURCE, iIngredients.getInputs(VanillaTypes.ITEM).stream().flatMap(Collection::stream).collect(Collectors.toList())); + + IGuiFluidStackGroup fluidStacks = iRecipeLayout.getFluidStacks(); + int tanks = 0; + + fluidStacks.init(tanks, true, INPUT_TANK_LEFT, INPUT_TANK_TOP, GuiHelper.OXYGEN_TANK_WIDTH, GuiHelper.OXYGEN_TANK_HEIGHT, 1, false, this.fluidOverlay); + fluidStacks.set(tanks, iIngredients.getInputs(VanillaTypes.FLUID).stream().flatMap(Collection::stream).collect(Collectors.toList())); + tanks++; + } + + public Rectangle2d getInputTankBounds() { + return GuiHelper.getFluidTankBounds(INPUT_TANK_LEFT, INPUT_TANK_TOP); + } + + public Rectangle2d getOutputTankBounds() { + return GuiHelper.getFluidTankBounds(OUTPUT_TANK_LEFT, OUTPUT_TANK_TOP); + } + + public Rectangle2d getEnergyBounds() { + return GuiHelper.getEnergyBounds(ENERGY_LEFT, ENERGY_TOP); + } + } + + // Genrator + public static class CoalGeneratorJeiCategory implements IRecipeCategory { + public static final ResourceLocation Uid = new ResourceLocation(BossToolsMod.ModId, "generatorcategory");// muss klein geschrieben sein + public static final int FIRE_LEFT = 45; + public static final int FIRE_TOP = 45; + public static final int ENERGY_LEFT = 103; + public static final int ENERGY_TOP = 15; + + // ... + private final String title; + private final IDrawable background; + private final LoadingCache fires; + private final LoadingCache energies; + + public CoalGeneratorJeiCategory(IGuiHelper guiHelper) { + this.title = new TranslationTextComponent("container." + BossToolsMod.ModId + ".coal_generator").getString(); + this.background = guiHelper.createDrawable(new ResourceLocation(BossToolsMod.ModId, "textures/jei/generator_gui_jei.png"), 0, 0, 144, 84); + this.fires = createFires(guiHelper); + this.energies = createGeneratingEnergies(guiHelper); + } + + @Override + public List getTooltipStrings(GeneratingRecipe recipe, double mouseX, double mouseY) { + if (GuiHelper.isHover(this.getFireBounds(), mouseX, mouseY)) { + return Collections.singletonList(GaugeTextHelper.getValueText(GaugeValueHelper.getBurnTime(recipe.getBurnTime())).build()); + } else if (GuiHelper.isHover(this.getEnergyBounds(), mouseX, mouseY)) { + List list = new ArrayList<>(); + list.add(GaugeTextHelper.getGeneratingPerTickText(GaugeValueHelper.getEnergy(CoalGeneratorBlock.ENERGY_PER_TICK)).build()); + return list; + } + return Collections.emptyList(); + } + + @Override + public ResourceLocation getUid() { + return Uid; + } + + @Override + public Class getRecipeClass() { + return GeneratingRecipe.class; + } + + @Override + public String getTitle() { + return this.title; + } + + public Rectangle2d getFireBounds() { + return GuiHelper.getFireBounds(FIRE_LEFT, FIRE_TOP); + } + + public Rectangle2d getEnergyBounds() { + return GuiHelper.getEnergyBounds(ENERGY_LEFT, ENERGY_TOP); + } + + @Override + public void draw(GeneratingRecipe recipe, MatrixStack matrixStack, double mouseX, double mouseY) { + IRecipeCategory.super.draw(recipe, matrixStack, mouseX, mouseY); + + int burnTime = recipe.getBurnTime(); + this.fires.getUnchecked(burnTime).draw(matrixStack, FIRE_LEFT, FIRE_TOP); + this.energies.getUnchecked(200).draw(matrixStack, ENERGY_LEFT, ENERGY_TOP); + drawTextTime(matrixStack, this.getBackground(), burnTime); + } + + @Override + public IDrawable getBackground() { + return this.background; + } + + @Override + public IDrawable getIcon() { + return null; + } + + @Override + public void setIngredients(GeneratingRecipe recipe, IIngredients iIngredients) { + iIngredients.setInputIngredients(recipe.getIngredients()); + } + + @Override + public void setRecipe(IRecipeLayout iRecipeLayout, GeneratingRecipe recipe, IIngredients iIngredients) { + IGuiItemStackGroup stacks = iRecipeLayout.getItemStacks(); + stacks.init(CoalGeneratorBlock.SLOT_FUEL, true, 44, 25);// Numern wie im GUI + // ... + + stacks.set(CoalGeneratorBlock.SLOT_FUEL, iIngredients.getInputs(VanillaTypes.ITEM).get(0)); + // ... + } + } + + // workbench + public static class NASAWorkbenchJeiCategory implements IRecipeCategory { + public static final ResourceLocation Uid = new ResourceLocation(BossToolsMod.ModId, "workbenchcategory"); // muss klein sein ! + // ... + private final String title; + private final IDrawable background; + + public NASAWorkbenchJeiCategory(IGuiHelper guiHelper) { + this.title = new TranslationTextComponent("container." + BossToolsMod.ModId + ".nasa_workbench").getString(); + this.background = guiHelper.createDrawable(new ResourceLocation(BossToolsMod.ModId, "textures/jei/nasaworkbenchjei.png"), 0, 0, 176, 122); + } + + @Override + public ResourceLocation getUid() { + return Uid; + } + + @Override + public Class getRecipeClass() { + return WorkbenchingRecipe.class; + } + + @Override + public String getTitle() { + return title; + } + + @Override + public IDrawable getBackground() { + return background; + } + + @Override + public IDrawable getIcon() { + return null; + } + + @Override + public void setIngredients(WorkbenchingRecipe recipe, IIngredients iIngredients) { + iIngredients.setInputIngredients(recipe.getIngredients()); + iIngredients.setOutput(VanillaTypes.ITEM, recipe.getOutput()); + } + + @Override + public void setRecipe(IRecipeLayout iRecipeLayout, WorkbenchingRecipe recipe, IIngredients iIngredients) { + IDrawable background = this.getBackground(); + iRecipeLayout.moveRecipeTransferButton(background.getWidth() - 20, background.getHeight() - 20); + + int slots = NASAWorkbenchBlock.SLOT_PARTS; + GridPlacer placer = new GridPlacer(); + slots = placeRcketParts(slots, 38, 7, 1, placer::placeBottom, ModInnet.ROCKET_PART_NOSE.get(), iRecipeLayout, recipe); + slots = placeRcketParts(slots, 29, 25, 2, placer::placeBottom, ModInnet.ROCKET_PART_BODY.get(), iRecipeLayout, recipe); + slots = placeRcketParts(slots, 29, 79, 1, placer::placeRight, ModInnet.ROCKET_PART_TANK.get(), iRecipeLayout, recipe); + slots = placeRcketParts(slots, 11, 79, 1, placer::placeBottom, ModInnet.ROCKET_PART_FIN_LEFT.get(), iRecipeLayout, recipe); + slots = placeRcketParts(slots, 65, 79, 1, placer::placeBottom, ModInnet.ROCKET_PART_FIN_RIGHT.get(), iRecipeLayout, recipe); + slots = placeRcketParts(slots, 38, 97, 1, placer::placeBottom, ModInnet.ROCKET_PART_ENGINE.get(), iRecipeLayout, recipe); + + IGuiItemStackGroup stacks = iRecipeLayout.getItemStacks(); + stacks.init(slots, false, 126, 72); + stacks.set(slots, iIngredients.getOutputs(VanillaTypes.ITEM).get(0)); + slots++; + } + } + + public static int placeRcketParts(int slot, int left, int top, int mod, IPlacer placer, RocketPart part, IRecipeLayout iRecipeLayout, WorkbenchingRecipe recipe) { + IGuiItemStackGroup stacks = iRecipeLayout.getItemStacks(); + List ingredients = recipe.getParts().get(part); + + return RocketPartGridPlacer.place(slot, left, top, mod, placer, part, (i, s, bounds) -> { + Ingredient ingredient = (ingredients != null && i < ingredients.size()) ? ingredients.get(i) : Ingredient.EMPTY; + stacks.init(s, true, bounds.getX(), bounds.getY()); + stacks.set(s, Lists.newArrayList(ingredient.getMatchingStacks())); + }); + } + + public static IDrawableStatic createFireStatic(IGuiHelper guiHelper) { + return drawableBuilder(guiHelper, GuiHelper.FIRE_PATH, GuiHelper.FIRE_WIDTH, GuiHelper.FIRE_HEIGHT).build(); + } + + public static IDrawableAnimated createFireAnimated(IGuiHelper guiHelper) { + return createFireAnimated(guiHelper, 200); + } + + public static IDrawableAnimated createFireAnimated(IGuiHelper guiHelper, int ticks) { + return createFireAnimated(guiHelper, createFireStatic(guiHelper), ticks); + } + + public static IDrawableAnimated createFireAnimated(IGuiHelper guiHelper, IDrawableStatic fireStatic, int ticks) { + return guiHelper.createAnimatedDrawable(fireStatic, ticks, IDrawableAnimated.StartDirection.TOP, true); + } + + public static IDrawableBuilder drawableBuilder(IGuiHelper guiHelper, ResourceLocation path, int width, int height) { + return guiHelper.drawableBuilder(path, 0, 0, width, height).setTextureSize(width, height); + } + + public static LoadingCache createFires(IGuiHelper guiHelper) { + return CacheBuilder.newBuilder().build(new CacheLoader() { + @Override + public IDrawableAnimated load(Integer time) { + return drawableBuilder(guiHelper, GuiHelper.FIRE_PATH, GuiHelper.FIRE_WIDTH, GuiHelper.FIRE_HEIGHT).buildAnimated(time, IDrawableAnimated.StartDirection.TOP, true); + } + }); + } + + public static LoadingCache createArrows(IGuiHelper guiHelper) { + return CacheBuilder.newBuilder().build(new CacheLoader() { + @Override + public IDrawableAnimated load(Integer time) { + return drawableBuilder(guiHelper, GuiHelper.ARROW_PATH, GuiHelper.ARROW_WIDTH, GuiHelper.ARROW_HEIGHT).buildAnimated(time, IDrawableAnimated.StartDirection.LEFT, false); + } + }); + } + + public static LoadingCache createEnergies(IGuiHelper guiHelper, boolean inverted) { + return CacheBuilder.newBuilder().build(new CacheLoader() { + @Override + public IDrawableAnimated load(Integer time) { + return drawableBuilder(guiHelper, GuiHelper.ENERGY_PATH, GuiHelper.ENERGY_WIDTH, GuiHelper.ENERGY_HEIGHT).buildAnimated(time, inverted ? IDrawableAnimated.StartDirection.TOP : IDrawableAnimated.StartDirection.BOTTOM, inverted); + } + }); + + } + + public static LoadingCache createUsingEnergies(IGuiHelper guiHelper) { + return createEnergies(guiHelper, true); + } + + public static LoadingCache createGeneratingEnergies(IGuiHelper guiHelper) { + return createEnergies(guiHelper, false); + } + + public static void drawText(MatrixStack matrixStack, IDrawable background, String text) { + FontRenderer fontRenderer = Minecraft.getInstance().fontRenderer; + int stringWidth = fontRenderer.getStringWidth(text); + fontRenderer.drawString(matrixStack, text, background.getWidth() - 5 - stringWidth, background.getHeight() - fontRenderer.FONT_HEIGHT - 5, 0x808080); + } + + public static void drawTextTime(MatrixStack matrixStack, IDrawable background, int ticks) { + NumberFormat numberInstance = NumberFormat.getNumberInstance(); + numberInstance.setMaximumFractionDigits(2); + String text = numberInstance.format(ticks / 20.0F) + "s"; + + drawText(matrixStack, background, text); + } + + // BlastingFurnace + public static class BlastingFurnaceJeiCategory implements IRecipeCategory { + public static final ResourceLocation Uid = new ResourceLocation(BossToolsMod.ModId, "blastingfurnacecategory"); + public static final int FIRE_LEFT = 37; + public static final int FIRE_TOP = 37; + public static final int ARROW_LEFT = 55; + public static final int ARROW_TOP = 35; + + private final String title; + private final IDrawable background; + private final LoadingCache fire; + private final LoadingCache cachedArrows; + + public BlastingFurnaceJeiCategory(IGuiHelper guiHelper) { + this.title = new TranslationTextComponent("container." + BossToolsMod.ModId + ".blast_furnace").getString(); + this.background = guiHelper.createDrawable(new ResourceLocation(BossToolsMod.ModId, "textures/jei/blast_furnace_gui_jei.png"), 0, 0, 144, 84); + this.fire = createFires(guiHelper); + this.cachedArrows = createArrows(guiHelper); + } + + @Override + public ResourceLocation getUid() { + return Uid; + } + + @Override + public Class getRecipeClass() { + return BlastingRecipe.class; + } + + @Override + public String getTitle() { + return this.title; + } + + @Override + public IDrawable getBackground() { + return this.background; + } + + @Override + public void draw(BlastingRecipe recipe, MatrixStack matrixStack, double mouseX, double mouseY) { + IRecipeCategory.super.draw(recipe, matrixStack, mouseX, mouseY); + + int cookTime = recipe.getCookTime(); + this.fire.getUnchecked(cookTime).draw(matrixStack, FIRE_LEFT, FIRE_TOP); + this.cachedArrows.getUnchecked(cookTime).draw(matrixStack, ARROW_LEFT, ARROW_TOP); + drawTextTime(matrixStack, this.getBackground(), cookTime); + } + + @Override + public IDrawable getIcon() { + return null; + } + + @Override + public void setIngredients(BlastingRecipe recipe, IIngredients iIngredients) { + iIngredients.setInputIngredients(recipe.getIngredients()); + iIngredients.setOutput(VanillaTypes.ITEM, recipe.getOutput()); + } + + @Override + public void setRecipe(IRecipeLayout iRecipeLayout, BlastingRecipe recipe, IIngredients iIngredients) { + IGuiItemStackGroup stacks = iRecipeLayout.getItemStacks(); + stacks.init(ItemStackToItemStackTileEntity.SLOT_INGREDIENT, true, 36, 16);// Iron + stacks.init(ItemStackToItemStackTileEntity.SLOT_OUTPUT, false, 86, 35);// steel + // ... + + stacks.set(ItemStackToItemStackTileEntity.SLOT_INGREDIENT, iIngredients.getInputs(VanillaTypes.ITEM).get(0)); + stacks.set(ItemStackToItemStackTileEntity.SLOT_OUTPUT, iIngredients.getOutputs(VanillaTypes.ITEM).get(0)); + // ... + } + } + + // RocketTier1Gui + public static class Tier1RocketJeiCategory implements IRecipeCategory { + public static final ResourceLocation Uid = new ResourceLocation(BossToolsMod.ModId, "rocket_t_1_category"); + + private final String title; + private final IDrawable background; + + public Tier1RocketJeiCategory(IGuiHelper guiHelper) { + this.title = "Tier 1 Rocket"; + this.background = guiHelper.createDrawable(new ResourceLocation(BossToolsMod.ModId, "textures/jei/rocket_gui_jei.png"), 0, 0, 128, 71); + } + + @Override + public ResourceLocation getUid() { + return Uid; + } + + @Override + public Class getRecipeClass() { + return FuelLoadingRecipe.class; + } + + @Override + public String getTitle() { + return title; + } + + @Override + public IDrawable getBackground() { + return background; + } + + @Override + public IDrawable getIcon() { + return null; + } + + public int getCapacity() + { + return FluidUtil2.BUCKET_SIZE * RocketTier1Entity.FUEL_BUCKETS; + } + + @Override + public void setIngredients(FuelLoadingRecipe recipe, IIngredients iIngredients) { + iIngredients.setInputLists(VanillaTypes.ITEM, Collections.singletonList(recipe.getItemStacks())); + iIngredients.setInputLists(VanillaTypes.FLUID, Collections.singletonList(recipe.getFluidStacks(this.getCapacity()))); + } + + @Override + public void setRecipe(IRecipeLayout iRecipeLayout, FuelLoadingRecipe recipe, IIngredients iIngredients) { + IGuiItemStackGroup itemStacks = iRecipeLayout.getItemStacks(); + itemStacks.init(0, true, 13, 18); + itemStacks.set(0, iIngredients.getInputs(VanillaTypes.ITEM).get(0)); + + IGuiFluidStackGroup fluidStacks = iRecipeLayout.getFluidStacks(); + fluidStacks.init(0, true, 66, 12, 46, 46, this.getCapacity(), false, null); + fluidStacks.set(0, iIngredients.getInputs(VanillaTypes.FLUID).get(0)); + } + } + + // RocketTier2Gui + public static class Tier2RocketJeiCategory implements IRecipeCategory { + public static final ResourceLocation Uid = new ResourceLocation(BossToolsMod.ModId, "rocket_t_2_category"); + + private final String title; + private final IDrawable background; + + public Tier2RocketJeiCategory(IGuiHelper guiHelper) { + this.title = "Tier 2 Rocket"; + this.background = guiHelper.createDrawable(new ResourceLocation(BossToolsMod.ModId, "textures/jei/rocket_gui_jei.png"), 0, 0, 128, 71); + } + + @Override + public ResourceLocation getUid() { + return Uid; + } + + @Override + public Class getRecipeClass() { + return FuelLoadingRecipe.class; + } + + @Override + public String getTitle() { + return title; + } + + @Override + public IDrawable getBackground() { + return background; + } + + @Override + public IDrawable getIcon() { + return null; + } + + public int getCapacity() + { + return FluidUtil2.BUCKET_SIZE * RocketTier2Entity.FUEL_BUCKETS; + } + + @Override + public void setIngredients(FuelLoadingRecipe recipe, IIngredients iIngredients) { + iIngredients.setInputLists(VanillaTypes.ITEM, Collections.singletonList(recipe.getItemStacks())); + iIngredients.setInputLists(VanillaTypes.FLUID, Collections.singletonList(recipe.getFluidStacks(this.getCapacity()))); + } + + @Override + public void setRecipe(IRecipeLayout iRecipeLayout, FuelLoadingRecipe recipe, IIngredients iIngredients) { + IGuiItemStackGroup itemStacks = iRecipeLayout.getItemStacks(); + itemStacks.init(0, true, 13, 18); + itemStacks.set(0, iIngredients.getInputs(VanillaTypes.ITEM).get(0)); + + IGuiFluidStackGroup fluidStacks = iRecipeLayout.getFluidStacks(); + fluidStacks.init(0, true, 66, 12, 46, 46, this.getCapacity(), false, null); + fluidStacks.set(0, iIngredients.getInputs(VanillaTypes.FLUID).get(0)); + } + } + + // RocketTier3Gui + public static class Tier3RocketJeiCategory implements IRecipeCategory { + public static final ResourceLocation Uid = new ResourceLocation(BossToolsMod.ModId, "rocket_t_3_category"); + + private final String title; + private final IDrawable background; + + public Tier3RocketJeiCategory(IGuiHelper guiHelper) { + this.title = "Tier 3 Rocket"; + this.background = guiHelper.createDrawable(new ResourceLocation(BossToolsMod.ModId, "textures/jei/rocket_gui_jei.png"), 0, 0, 128, 71); + } + + @Override + public ResourceLocation getUid() { + return Uid; + } + + @Override + public Class getRecipeClass() { + return FuelLoadingRecipe.class; + } + + @Override + public String getTitle() { + return title; + } + + @Override + public IDrawable getBackground() { + return background; + } + + @Override + public IDrawable getIcon() { + return null; + } + + public int getCapacity() + { + return FluidUtil2.BUCKET_SIZE * RocketTier3Entity.FUEL_BUCKETS; + } + + @Override + public void setIngredients(FuelLoadingRecipe recipe, IIngredients iIngredients) { + iIngredients.setInputLists(VanillaTypes.ITEM, Collections.singletonList(recipe.getItemStacks())); + iIngredients.setInputLists(VanillaTypes.FLUID, Collections.singletonList(recipe.getFluidStacks(this.getCapacity()))); + } + + @Override + public void setRecipe(IRecipeLayout iRecipeLayout, FuelLoadingRecipe recipe, IIngredients iIngredients) { + IGuiItemStackGroup itemStacks = iRecipeLayout.getItemStacks(); + itemStacks.init(0, true, 13, 18); + itemStacks.set(0, iIngredients.getInputs(VanillaTypes.ITEM).get(0)); + + IGuiFluidStackGroup fluidStacks = iRecipeLayout.getFluidStacks(); + fluidStacks.init(0, true, 66, 12, 46, 46, this.getCapacity(), false, null); + fluidStacks.set(0, iIngredients.getInputs(VanillaTypes.FLUID).get(0)); + } + } + + // Compressor + public static class CompressorJeiCategory implements IRecipeCategory { + + public static final ResourceLocation Uid = new ResourceLocation(BossToolsMod.ModId, "compressorcategory"); + public static final int ARROW_LEFT = 36; + public static final int ARROW_TOP = 29; + public static final int ENERGY_LEFT = 103; + public static final int ENERGY_TOP = 15; + // ... + private final String title; + private final IDrawable background; + private final LoadingCache cachedArrows; + private final LoadingCache cachedEnergies; + + public CompressorJeiCategory(IGuiHelper guiHelper) { + this.title = new TranslationTextComponent("container." + BossToolsMod.ModId + ".compressor").getString(); + this.background = guiHelper.createDrawable(new ResourceLocation(BossToolsMod.ModId, "textures/jei/compressor_gui_jei.png"), 0, 0, 144, 84); + this.cachedArrows = createArrows(guiHelper); + this.cachedEnergies = createUsingEnergies(guiHelper); + } + + @Override + public List getTooltipStrings(CompressingRecipe recipe, double mouseX, double mouseY) { + if (GuiHelper.isHover(this.getEnergyBounds(), mouseX, mouseY)) { + List list = new ArrayList<>(); + list.add(GaugeTextHelper.getUsingPerTickText(GaugeValueHelper.getEnergy(CompressorBlock.ENERGY_PER_TICK)).build()); + return list; + } + + return Collections.emptyList(); + } + + private Rectangle2d getEnergyBounds() { + return GuiHelper.getEnergyBounds(ENERGY_LEFT, ENERGY_TOP); + } + + @Override + public ResourceLocation getUid() { + return Uid; + } + + @Override + public Class getRecipeClass() { + return CompressingRecipe.class; + } + + @Override + public String getTitle() { + return this.title; + } + + @Override + public IDrawable getBackground() { + return this.background; + } + + @Override + public void draw(CompressingRecipe recipe, MatrixStack matrixStack, double mouseX, double mouseY) { + IRecipeCategory.super.draw(recipe, matrixStack, mouseX, mouseY); + + int cookTime = recipe.getCookTime(); + this.cachedArrows.getUnchecked(cookTime).draw(matrixStack, ARROW_LEFT, ARROW_TOP); + this.cachedEnergies.getUnchecked(cookTime).draw(matrixStack, ENERGY_LEFT, ENERGY_TOP); + drawTextTime(matrixStack, this.getBackground(), cookTime); + } + + @Override + public IDrawable getIcon() { + return null; + } + + @Override + public void setIngredients(CompressingRecipe recipe, IIngredients iIngredients) { + iIngredients.setInputIngredients(recipe.getIngredients()); + iIngredients.setOutput(VanillaTypes.ITEM, recipe.getOutput()); + } + + @Override + public void setRecipe(IRecipeLayout iRecipeLayout, CompressingRecipe recipe, IIngredients iIngredients) { + IGuiItemStackGroup stacks = iRecipeLayout.getItemStacks(); + stacks.init(ItemStackToItemStackTileEntity.SLOT_INGREDIENT, true, 14, 29); + stacks.init(ItemStackToItemStackTileEntity.SLOT_OUTPUT, false, 69, 28); + // ... + + stacks.set(ItemStackToItemStackTileEntity.SLOT_INGREDIENT, iIngredients.getInputs(VanillaTypes.ITEM).get(0)); + stacks.set(ItemStackToItemStackTileEntity.SLOT_OUTPUT, iIngredients.getOutputs(VanillaTypes.ITEM).get(0)); + // ... + } + } + + // FuelMaker + public static class FuelRefineryJeiCategory implements IRecipeCategory { + public static final ResourceLocation Uid = new ResourceLocation(BossToolsMod.ModId, "fuelmakercategory"); + public static final int INPUT_TANK_LEFT = 8; + public static final int INPUT_TANK_TOP = 8; + public static final int OUTPUT_TANK_LEFT = 74; + public static final int OUTPUT_TANK_TOP = 8; + public static final int ENERGY_LEFT = 114; + public static final int ENERGY_TOP = 8; + + private final JeiPlugin plugin; + private final String title; + private final IDrawable background; + private final IDrawable fluidOverlay; + private final LoadingCache cachedEnergies; + + public FuelRefineryJeiCategory(JeiPlugin plugin, IGuiHelper guiHelper) { + this.plugin = plugin; + this.title = new TranslationTextComponent("container." + BossToolsMod.ModId + ".fuel_refinery").getString(); + this.background = guiHelper.createDrawable(new ResourceLocation(BossToolsMod.ModId, "textures/jei/fuel_refinery_jei.png"), 0, 0, 148, 64); + this.fluidOverlay = guiHelper.drawableBuilder(GuiHelper.FLUID_TANK_PATH, 0, 0, GuiHelper.FLUID_TANK_WIDTH, GuiHelper.FLUID_TANK_HEIGHT).setTextureSize(GuiHelper.FLUID_TANK_WIDTH, GuiHelper.FLUID_TANK_HEIGHT).build(); + this.cachedEnergies = createUsingEnergies(guiHelper); + } + + @Override + public List getTooltipStrings(FuelRefiningRecipe recipe, double mouseX, double mouseY) { + if (GuiHelper.isHover(this.getEnergyBounds(), mouseX, mouseY)) { + return Collections.singletonList(GaugeTextHelper.getUsingPerTickText(GaugeValueHelper.getEnergy(FuelRefineryBlock.ENERGY_PER_TICK)).build()); + } + + return Collections.emptyList(); + } + + @Override + public ResourceLocation getUid() { + return Uid; + } + + @Override + public Class getRecipeClass() { + return FuelRefiningRecipe.class; + } + + @Override + public String getTitle() { + return this.title; + } + + @Override + public IDrawable getBackground() { + return this.background; + } + + @Override + public IDrawable getIcon() { + return null; + } + + @Override + public void draw(FuelRefiningRecipe recipe, MatrixStack matrixStack, double mouseX, double mouseY) { + IRecipeCategory.super.draw(recipe, matrixStack, mouseX, mouseY); + + this.cachedEnergies.getUnchecked(200).draw(matrixStack, ENERGY_LEFT, ENERGY_TOP); + } + + @Override + public void setIngredients(FuelRefiningRecipe recipe, IIngredients iIngredients) { + iIngredients.setInputs(VanillaTypes.ITEM, this.plugin.getFluidFullItemStacks(recipe.getInput().getFluids())); + iIngredients.setOutputs(VanillaTypes.ITEM, this.plugin.getFluidFullItemStacks(recipe.getOutput().getFluids())); + + iIngredients.setInputLists(VanillaTypes.FLUID, Collections.singletonList(recipe.getInput().toStacks())); + iIngredients.setOutputLists(VanillaTypes.FLUID, Collections.singletonList(recipe.getOutput().toStacks())); + } + + @Override + public void setRecipe(IRecipeLayout iRecipeLayout, FuelRefiningRecipe recipe, IIngredients iIngredients) { + IGuiItemStackGroup itemStacks = iRecipeLayout.getItemStacks(); + itemStacks.init(FuelRefineryBlock.SLOT_INPUT_SOURCE, true, 24, 8); + itemStacks.init(FuelRefineryBlock.SLOT_OUTPUT_SINK, false, 90, 38); + itemStacks.init(FuelRefineryBlock.SLOT_INPUT_SINK, false, 24, 38); + itemStacks.init(FuelRefineryBlock.SLOT_OUTPUT_SOURCE, false, 90, 8); + + itemStacks.set(FuelRefineryBlock.SLOT_INPUT_SOURCE, iIngredients.getInputs(VanillaTypes.ITEM).stream().flatMap(i -> i.stream()).collect(Collectors.toList())); + itemStacks.set(FuelRefineryBlock.SLOT_OUTPUT_SINK, iIngredients.getOutputs(VanillaTypes.ITEM).stream().flatMap(i -> i.stream()).collect(Collectors.toList())); + + IGuiFluidStackGroup fluidStacks = iRecipeLayout.getFluidStacks(); + int tanks = 0; + + fluidStacks.init(tanks, true, INPUT_TANK_LEFT, INPUT_TANK_TOP, GuiHelper.FLUID_TANK_WIDTH, GuiHelper.FLUID_TANK_HEIGHT, 1, false, this.fluidOverlay); + fluidStacks.set(tanks, iIngredients.getInputs(VanillaTypes.FLUID).get(0)); + tanks++; + + fluidStacks.init(tanks, false, OUTPUT_TANK_LEFT, OUTPUT_TANK_TOP, GuiHelper.FLUID_TANK_WIDTH, GuiHelper.FLUID_TANK_HEIGHT, 1, false, this.fluidOverlay); + fluidStacks.set(tanks, iIngredients.getOutputs(VanillaTypes.FLUID).get(0)); + tanks++; + } + + public Rectangle2d getInputTankBounds() { + return GuiHelper.getFluidTankBounds(INPUT_TANK_LEFT, INPUT_TANK_TOP); + } + + public Rectangle2d getOutputTankBounds() { + return GuiHelper.getFluidTankBounds(OUTPUT_TANK_LEFT, OUTPUT_TANK_TOP); + } + + public Rectangle2d getEnergyBounds() { + return GuiHelper.getEnergyBounds(ENERGY_LEFT, ENERGY_TOP); + } + } + + // Rover + public static class RoverJeiCategory implements IRecipeCategory { + public static final ResourceLocation Uid = new ResourceLocation(BossToolsMod.ModId, "rovercategory"); + + private final String title; + private final IDrawable background; + private final IDrawable fluidOverlay; + + public RoverJeiCategory(IGuiHelper guiHelper) { + this.title = "Rover"; + this.background = guiHelper.createDrawable(new ResourceLocation(BossToolsMod.ModId, "textures/jei/rover_jei.png"), 0, 0, 144, 84); + this.fluidOverlay = guiHelper.drawableBuilder(GuiHelper.FLUID_TANK_PATH, 0, 0, GuiHelper.FLUID_TANK_WIDTH, GuiHelper.FLUID_TANK_HEIGHT).setTextureSize(GuiHelper.FLUID_TANK_WIDTH, GuiHelper.FLUID_TANK_HEIGHT).build(); + } + + @Override + public ResourceLocation getUid() { + return Uid; + } + + @Override + public Class getRecipeClass() { + return FuelLoadingRecipe.class; + } + + @Override + public String getTitle() { + return title; + } + + @Override + public IDrawable getBackground() { + return background; + } + + @Override + public IDrawable getIcon() { + return null; + } + + public int getCapacity() + { + return FluidUtil2.BUCKET_SIZE * RoverEntity.FUEL_BUCKETS; + } + + @Override + public void setIngredients(FuelLoadingRecipe recipe, IIngredients iIngredients) { + iIngredients.setInputLists(VanillaTypes.ITEM, Collections.singletonList(recipe.getItemStacks())); + iIngredients.setInputLists(VanillaTypes.FLUID, Collections.singletonList(recipe.getFluidStacks(this.getCapacity()))); + } + + @Override + public void setRecipe(IRecipeLayout iRecipeLayout, FuelLoadingRecipe recipe, IIngredients iIngredients) { + IGuiItemStackGroup itemStacks = iRecipeLayout.getItemStacks(); + itemStacks.init(0, true, 7, 59); + itemStacks.set(0, iIngredients.getInputs(VanillaTypes.ITEM).get(0)); + + IGuiFluidStackGroup fluidStacks = iRecipeLayout.getFluidStacks(); + fluidStacks.init(0, true, 9, 8, GuiHelper.FLUID_TANK_WIDTH, GuiHelper.FLUID_TANK_HEIGHT, this.getCapacity(), false, this.fluidOverlay); + fluidStacks.set(0, iIngredients.getInputs(VanillaTypes.FLUID).get(0)); + } + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/jei/jeiguihandlers/BlastFurnaceGuiContainerHandler.java b/src/main/java/net/mrscauthd/boss_tools/jei/jeiguihandlers/BlastFurnaceGuiContainerHandler.java new file mode 100644 index 000000000..8dc7fe926 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/jei/jeiguihandlers/BlastFurnaceGuiContainerHandler.java @@ -0,0 +1,52 @@ +package net.mrscauthd.boss_tools.jei.jeiguihandlers; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import mezz.jei.api.constants.VanillaRecipeCategoryUid; +import mezz.jei.api.gui.handlers.IGuiClickableArea; +import mezz.jei.api.gui.handlers.IGuiContainerHandler; +import mezz.jei.api.recipe.IFocusFactory; +import mezz.jei.api.runtime.IRecipesGui; +import net.minecraft.client.renderer.Rectangle2d; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.mrscauthd.boss_tools.gui.screens.blastfurnace.BlastFurnaceGuiWindow; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.gui.helper.GuiHelper; +import net.mrscauthd.boss_tools.jei.JeiPlugin.BlastingFurnaceJeiCategory; + +public class BlastFurnaceGuiContainerHandler implements IGuiContainerHandler { + + public BlastFurnaceGuiContainerHandler() { + + } + + @Override + public Collection getGuiClickableAreas(BlastFurnaceGuiWindow containerScreen, double mouseX, double mouseY) { + return Collections.singleton(new IGuiClickableArea() { + @Override + public Rectangle2d getArea() { + return GuiHelper.getArrowBounds(BlastFurnaceGuiWindow.ARROW_LEFT, BlastFurnaceGuiWindow.ARROW_TOP); + } + + @Override + public void onClick(IFocusFactory focusFactory, IRecipesGui recipesGui) { + recipesGui.showCategories(Arrays.asList(BlastingFurnaceJeiCategory.Uid, VanillaRecipeCategoryUid.FUEL)); + } + + @Override + public List getTooltipStrings() { + List list = new ArrayList<>(); + list.add(GaugeTextHelper.getStorageText(containerScreen.getTileEntity().getCookTimeGaugeValue()).build()); + list.add(new TranslationTextComponent("jei.tooltip.show.recipes")); + return list; + } + }); + + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/jei/jeiguihandlers/CoalGeneratorGuiContainerHandler.java b/src/main/java/net/mrscauthd/boss_tools/jei/jeiguihandlers/CoalGeneratorGuiContainerHandler.java new file mode 100644 index 000000000..559411cfc --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/jei/jeiguihandlers/CoalGeneratorGuiContainerHandler.java @@ -0,0 +1,52 @@ +package net.mrscauthd.boss_tools.jei.jeiguihandlers; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import mezz.jei.api.gui.handlers.IGuiClickableArea; +import mezz.jei.api.gui.handlers.IGuiContainerHandler; +import mezz.jei.api.recipe.IFocusFactory; +import mezz.jei.api.runtime.IRecipesGui; +import net.minecraft.client.renderer.Rectangle2d; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.gui.screens.coalgenerator.CoalGeneratorGuiWindow; +import net.mrscauthd.boss_tools.gui.helper.GuiHelper; +import net.mrscauthd.boss_tools.jei.JeiPlugin.CoalGeneratorJeiCategory; + +public class CoalGeneratorGuiContainerHandler implements IGuiContainerHandler { + + public CoalGeneratorGuiContainerHandler() { + + } + + @Override + public Collection getGuiClickableAreas(CoalGeneratorGuiWindow containerScreen, double mouseX, double mouseY) { + return Collections.singleton(new IGuiClickableArea() { + @Override + public Rectangle2d getArea() { + return GuiHelper.getFireBounds(CoalGeneratorGuiWindow.FIRE_LEFT, CoalGeneratorGuiWindow.FIRE_TOP); + } + + @Override + public void onClick(IFocusFactory focusFactory, IRecipesGui recipesGui) { + recipesGui.showCategories(Arrays.asList(CoalGeneratorJeiCategory.Uid)); + } + + @Override + public List getTooltipStrings() { + List list = new ArrayList<>(); + list.add(GaugeTextHelper.getStorageText(GaugeValueHelper.getBurnTime(containerScreen.getTileEntity().getPowerSystemGenerating())).build()); + list.add(new TranslationTextComponent("jei.tooltip.show.recipes")); + return list; + } + }); + + } + +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/jei/jeiguihandlers/CompressorGuiContainerHandler.java b/src/main/java/net/mrscauthd/boss_tools/jei/jeiguihandlers/CompressorGuiContainerHandler.java new file mode 100644 index 000000000..ba0c8e6f4 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/jei/jeiguihandlers/CompressorGuiContainerHandler.java @@ -0,0 +1,51 @@ +package net.mrscauthd.boss_tools.jei.jeiguihandlers; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import mezz.jei.api.gui.handlers.IGuiClickableArea; +import mezz.jei.api.gui.handlers.IGuiContainerHandler; +import mezz.jei.api.recipe.IFocusFactory; +import mezz.jei.api.runtime.IRecipesGui; +import net.minecraft.client.renderer.Rectangle2d; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.mrscauthd.boss_tools.gui.screens.compressor.CompressorGuiWindow; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.gui.helper.GuiHelper; +import net.mrscauthd.boss_tools.jei.JeiPlugin.CompressorJeiCategory; + +public class CompressorGuiContainerHandler implements IGuiContainerHandler { + + public CompressorGuiContainerHandler() { + + } + + @Override + public Collection getGuiClickableAreas(CompressorGuiWindow containerScreen, double mouseX, double mouseY) { + return Collections.singleton(new IGuiClickableArea() { + @Override + public Rectangle2d getArea() { + return GuiHelper.getArrowBounds(CompressorGuiWindow.ARROW_LEFT, CompressorGuiWindow.ARROW_TOP); + } + + @Override + public void onClick(IFocusFactory focusFactory, IRecipesGui recipesGui) { + recipesGui.showCategories(Arrays.asList(CompressorJeiCategory.Uid)); + } + + @Override + public List getTooltipStrings() { + List list = new ArrayList<>(); + list.add(GaugeTextHelper.getStorageText(containerScreen.getTileEntity().getCookTimeGaugeValue()).build()); + list.add(new TranslationTextComponent("jei.tooltip.show.recipes")); + return list; + } + }); + + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/jei/jeiguihandlers/PlanetSlecetionGuiJeiHandler.java b/src/main/java/net/mrscauthd/boss_tools/jei/jeiguihandlers/PlanetSlecetionGuiJeiHandler.java new file mode 100644 index 000000000..11b727163 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/jei/jeiguihandlers/PlanetSlecetionGuiJeiHandler.java @@ -0,0 +1,23 @@ +package net.mrscauthd.boss_tools.jei.jeiguihandlers; + +import mezz.jei.api.gui.handlers.IGuiContainerHandler; +import net.minecraft.client.renderer.Rectangle2d; +import net.mrscauthd.boss_tools.gui.screens.planetselection.PlanetSelectionGuiWindow; + +import java.util.*; + +public class PlanetSlecetionGuiJeiHandler implements IGuiContainerHandler { + + public PlanetSlecetionGuiJeiHandler() { + + } + + @Override + public List getGuiExtraAreas(PlanetSelectionGuiWindow containerScreen) { + List list = new ArrayList<>(); + + list.add(new Rectangle2d(0,0,containerScreen.width,containerScreen.height)); + + return list; + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/keybind/KeyBindings.java b/src/main/java/net/mrscauthd/boss_tools/keybind/KeyBindings.java new file mode 100644 index 000000000..dbdd67cd2 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/keybind/KeyBindings.java @@ -0,0 +1,220 @@ +package net.mrscauthd.boss_tools.keybind; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.tags.FluidTags; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.client.event.InputEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.network.NetworkRegistry; +import net.minecraftforge.fml.network.simple.SimpleChannel; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.entity.*; +import net.mrscauthd.boss_tools.events.ClientEventBusSubscriber; +import net.mrscauthd.boss_tools.events.Methodes; +import org.lwjgl.glfw.GLFW; + +import net.minecraftforge.fml.network.NetworkEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.event.TickEvent; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.world.World; +import net.minecraft.util.math.BlockPos; +import net.minecraft.network.PacketBuffer; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.client.util.InputMappings; +import net.minecraft.client.Minecraft; + +import java.util.function.Supplier; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId) +public class KeyBindings { + public static SimpleChannel INSTANCE; + private static int id = 1; + + public static int nextID() { + return id++; + } + + public static void registerMessages() { + INSTANCE = NetworkRegistry.newSimpleChannel(new ResourceLocation(BossToolsMod.ModId, "key_bindings"), () -> "1.0", s -> true, s -> true); + INSTANCE.registerMessage(nextID(), KeyBindingPressedMessage.class, KeyBindingPressedMessage::buffer, KeyBindingPressedMessage::new, KeyBindingPressedMessage::handler); + } + + @OnlyIn(Dist.CLIENT) + @SubscribeEvent + public static void onKeyInput1(TickEvent.ClientTickEvent event) { + if (event.phase == TickEvent.Phase.END) { + + //Key Space + if (InputMappings.isKeyDown(Minecraft.getInstance().getMainWindow().getHandle(), GLFW.GLFW_KEY_SPACE)) { + if (Minecraft.getInstance().currentScreen == null) { + INSTANCE.sendToServer(new KeyBindingPressedMessage(0, 0)); + pressAction(Minecraft.getInstance().player, 0, 0); + } + } + + //Key A + if ((InputMappings.isKeyDown(Minecraft.getInstance().getMainWindow().getHandle(), GLFW.GLFW_KEY_A))) { + if (Minecraft.getInstance().currentScreen == null) { + INSTANCE.sendToServer(new KeyBindingPressedMessage(2, 0)); + pressAction(Minecraft.getInstance().player, 2, 0); + } + } + + //Key D + if ((InputMappings.isKeyDown(Minecraft.getInstance().getMainWindow().getHandle(), GLFW.GLFW_KEY_D))) { + if (Minecraft.getInstance().currentScreen == null) { + INSTANCE.sendToServer(new KeyBindingPressedMessage(3, 0)); + pressAction(Minecraft.getInstance().player, 3, 0); + } + } + + } + } + + @OnlyIn(Dist.CLIENT) + @SubscribeEvent + public static void onKeyInput2(InputEvent.KeyInputEvent event) { + if (Minecraft.getInstance().currentScreen == null) { + if (event.getKey() == ClientEventBusSubscriber.key1.getKey().getKeyCode()) { + if (event.getAction() == GLFW.GLFW_PRESS) { + INSTANCE.sendToServer(new KeyBindingPressedMessage(1, 0)); + pressAction(Minecraft.getInstance().player, 1, 0); + } + } + } + } + + public static class KeyBindingPressedMessage { + int type, pressedms; + + public KeyBindingPressedMessage(int type, int pressedms) { + this.type = type; + this.pressedms = pressedms; + } + + public KeyBindingPressedMessage(PacketBuffer buffer) { + this.type = buffer.readInt(); + this.pressedms = buffer.readInt(); + } + + public static void buffer(KeyBindingPressedMessage message, PacketBuffer buffer) { + buffer.writeInt(message.type); + buffer.writeInt(message.pressedms); + } + + public static void handler(KeyBindingPressedMessage message, Supplier contextSupplier) { + NetworkEvent.Context context = contextSupplier.get(); + context.enqueueWork(() -> { + pressAction(context.getSender(), message.type, message.pressedms); + }); + context.setPacketHandled(true); + } + } + + private static void pressAction(PlayerEntity player, int type, int pressedms) { + World world = player.world; + double x = player.getPosX(); + double y = player.getPosY(); + double z = player.getPosZ(); + + if (!world.isBlockLoaded(new BlockPos(x, y, z))) + return; + + if (type == 0) { + + Entity ridding = player.getRidingEntity(); + + if (ridding instanceof LanderEntity) { + if (!ridding.isOnGround() && !ridding.areEyesInFluid(FluidTags.WATER)) { + + if (ridding.getMotion().getY() < -0.05) { + ridding.setMotion(ridding.getMotion().getX(), ridding.getMotion().getY() * 0.85, ridding.getMotion().getZ()); + } + + if (world instanceof ServerWorld) { + for (ServerPlayerEntity p : ((ServerWorld) world).getPlayers()) { + ((ServerWorld) world).spawnParticle(p, ParticleTypes.SPIT, true, ridding.getPosX(), ridding.getPosY() - 0.3, ridding.getPosZ(), 3, 0.1, 0.1, 0.1, 0.001); + } + } + + } + ridding.fallDistance = (float) (ridding.getMotion().getY() * (-1) * 4.5); + } + } + + if (type == 1) { + if (Methodes.isRocket(player.getRidingEntity())) { + if (player.getRidingEntity() instanceof RocketTier1Entity && player.getRidingEntity().getDataManager().get(RocketTier1Entity.FUEL) == 300) { + + player.getRidingEntity().getDataManager().set(RocketTier1Entity.ROCKET_START, true); + Methodes.RocketSounds(player.getRidingEntity(), world); + + } else if (player.getRidingEntity() instanceof RocketTier2Entity && player.getRidingEntity().getDataManager().get(RocketTier2Entity.FUEL) == 300) { + + player.getRidingEntity().getDataManager().set(RocketTier2Entity.ROCKET_START, true); + Methodes.RocketSounds(player.getRidingEntity(), world); + + } else if (player.getRidingEntity() instanceof RocketTier3Entity && player.getRidingEntity().getDataManager().get(RocketTier3Entity.FUEL) == 300) { + + player.getRidingEntity().getDataManager().set(RocketTier3Entity.ROCKET_START, true); + Methodes.RocketSounds(player.getRidingEntity(), world); + + } else { + Methodes.noFuelMessage(player); + } + } + + } + + if (type == 2) { + //Rocket + if (Methodes.isRocket(player.getRidingEntity())) { + Methodes.vehicleRotation((LivingEntity) player.getRidingEntity(), -1); + } + + //Rover + if (player.getRidingEntity() instanceof RoverEntity) { + float forward = player.moveForward; + + if (player.getRidingEntity().getDataManager().get(RoverEntity.FUEL) != 0 && !player.getRidingEntity().areEyesInFluid(FluidTags.WATER)) { + if (forward >= 0.01) { + Methodes.vehicleRotation((LivingEntity) player.getRidingEntity(), -1); + } + if (forward <= -0.01) { + Methodes.vehicleRotation((LivingEntity) player.getRidingEntity(), 1); + } + } + } + + } + + if (type == 3) { + //Rocket + if (Methodes.isRocket(player.getRidingEntity())) { + Methodes.vehicleRotation((LivingEntity) player.getRidingEntity(), 1); + } + + //Rover + if (player.getRidingEntity() instanceof RoverEntity) { + float forward = player.moveForward; + + if (player.getRidingEntity().getDataManager().get(RoverEntity.FUEL) != 0 && !player.getRidingEntity().areEyesInFluid(FluidTags.WATER)) { + if (forward >= 0.01) { + Methodes.vehicleRotation((LivingEntity) player.getRidingEntity(), 1); + } + if (forward <= -0.01) { + Methodes.vehicleRotation((LivingEntity) player.getRidingEntity(), -1); + } + } + } + } + + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/BlastingFurnaceBlock.java b/src/main/java/net/mrscauthd/boss_tools/machines/BlastingFurnaceBlock.java new file mode 100644 index 000000000..ba6439d62 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/BlastingFurnaceBlock.java @@ -0,0 +1,204 @@ +package net.mrscauthd.boss_tools.machines; + +import java.util.Collections; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.HorizontalBlock; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.material.PushReaction; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.loot.LootContext; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.DirectionProperty; +import net.minecraft.state.StateContainer; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; +import net.minecraftforge.common.ToolType; +import net.minecraftforge.fml.network.NetworkHooks; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.crafting.BossToolsRecipeTypes; +import net.mrscauthd.boss_tools.crafting.ItemStackToItemStackRecipeType; +import net.mrscauthd.boss_tools.gui.screens.blastfurnace.BlastFurnaceGui; +import net.mrscauthd.boss_tools.machines.tile.ItemStackToItemStackTileEntity; +import net.mrscauthd.boss_tools.machines.tile.PowerSystemFuelBurnTimeVanilla; +import net.mrscauthd.boss_tools.machines.tile.PowerSystemRegistry; + +public class BlastingFurnaceBlock { + + public static final int SLOT_FUEL = 2; + + // Blast Furnace Block + public static class CustomBlock extends Block { + public static final DirectionProperty FACING = HorizontalBlock.HORIZONTAL_FACING; + public static final BooleanProperty ACTIAVATED = BlockStateProperties.LIT; + + public CustomBlock() { + super(Block.Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(5f, 1f).setLightLevel(s -> 0).harvestLevel(1).harvestTool(ToolType.PICKAXE).setRequiresTool()); + this.setDefaultState(this.stateContainer.getBaseState().with(FACING, Direction.NORTH).with(ACTIAVATED, Boolean.valueOf(false))); + } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) { + builder.add(FACING, ACTIAVATED); + } + + public BlockState rotate(BlockState state, Rotation rot) { + return state.with(FACING, rot.rotate(state.get(FACING))); + } + + @SuppressWarnings("deprecation") + public BlockState mirror(BlockState state, Mirror mirrorIn) { + return state.rotate(mirrorIn.toRotation(state.get(FACING))); + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + return this.getDefaultState().with(FACING, context.getPlacementHorizontalFacing().getOpposite()); + } + + @Override + public PushReaction getPushReaction(BlockState state) { + return PushReaction.BLOCK; + } + + @Override + public List getDrops(BlockState state, LootContext.Builder builder) { + @SuppressWarnings("deprecation") + List dropsOriginal = super.getDrops(state, builder); + if (!dropsOriginal.isEmpty()) { + return dropsOriginal; + } else { + return Collections.singletonList(new ItemStack(this)); + } + } + + @Override + public int getOpacity(BlockState state, IBlockReader worldIn, BlockPos pos) { + return state.get(ACTIAVATED) ? 12 : 0; + } + + @Override + public int getLightValue(BlockState state, IBlockReader world, BlockPos pos) { + return state.get(ACTIAVATED) ? 12 : 0; + } + + @Override + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity entity, Hand hand, BlockRayTraceResult hit) { + if (entity instanceof ServerPlayerEntity) { + NetworkHooks.openGui((ServerPlayerEntity) entity, this.getContainer(state, world, pos), pos); + return ActionResultType.CONSUME; + } else { + return ActionResultType.SUCCESS; + } + } + + @Override + public INamedContainerProvider getContainer(BlockState state, World worldIn, BlockPos pos) { + TileEntity tileEntity = worldIn.getTileEntity(pos); + return tileEntity instanceof INamedContainerProvider ? (INamedContainerProvider) tileEntity : null; + } + + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new CustomTileEntity(); + } + + @SuppressWarnings("deprecation") + @Override + public boolean eventReceived(BlockState state, World world, BlockPos pos, int eventID, int eventParam) { + super.eventReceived(state, world, pos, eventID, eventParam); + TileEntity tileentity = world.getTileEntity(pos); + return tileentity == null ? false : tileentity.receiveClientEvent(eventID, eventParam); + } + + @SuppressWarnings("deprecation") + @Override + public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { + if (state.getBlock() != newState.getBlock()) { + CustomTileEntity tileentity = (CustomTileEntity) world.getTileEntity(pos); + InventoryHelper.dropInventoryItems(world, pos, (CustomTileEntity) tileentity); + world.updateComparatorOutputLevel(pos, this); + super.onReplaced(state, world, pos, newState, isMoving); + } + } + + @Override + public boolean hasComparatorInputOverride(BlockState state) { + return true; + } + + @Override + public int getComparatorInputOverride(BlockState blockState, World world, BlockPos pos) { + CustomTileEntity tileentity = (CustomTileEntity) world.getTileEntity(pos); + return Container.calcRedstoneFromInventory(tileentity); + } + } + + public static class CustomTileEntity extends ItemStackToItemStackTileEntity { + private PowerSystemFuelBurnTimeVanilla powerSystemBurnTime; + + public CustomTileEntity() { + super(ModInnet.BLAST_FURNACE.get()); + } + + @Override + public Container createMenu(int id, PlayerInventory player) { + return new BlastFurnaceGui.GuiContainer(id, player, this); + } + + @Override + public ItemStackToItemStackRecipeType getRecipeType() { + return BossToolsRecipeTypes.BLASTING; + } + + @Override + protected BooleanProperty getBlockActivatedProperty() { + return CustomBlock.ACTIAVATED; + } + + @Override + protected void createPowerSystems(PowerSystemRegistry map) { + super.createPowerSystems(map); + + map.put(this.powerSystemBurnTime = new PowerSystemFuelBurnTimeVanilla(this, this.getFuelSlot()) { + @Override + public IRecipeType getRecipeType() { + return CustomTileEntity.this.getRecipeType(); + } + }); + } + + public PowerSystemFuelBurnTimeVanilla getPowerSystemBurnTime() { + return this.powerSystemBurnTime; + } + + public int getFuelSlot() { + return SLOT_FUEL; + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/CoalGeneratorBlock.java b/src/main/java/net/mrscauthd/boss_tools/machines/CoalGeneratorBlock.java new file mode 100644 index 000000000..24d584c49 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/CoalGeneratorBlock.java @@ -0,0 +1,226 @@ +package net.mrscauthd.boss_tools.machines; + +import java.util.Collections; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.HorizontalBlock; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.material.PushReaction; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.LootContext; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.DirectionProperty; +import net.minecraft.state.StateContainer; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.ToolType; +import net.minecraftforge.fml.network.NetworkHooks; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.gui.screens.coalgenerator.CoalGeneratorGui; +import net.mrscauthd.boss_tools.machines.tile.GeneratorTileEntity; +import net.mrscauthd.boss_tools.machines.tile.PowerSystemFuelGeneratingRecipe; +import net.mrscauthd.boss_tools.machines.tile.PowerSystemRegistry; + +public class CoalGeneratorBlock { + public static final int SLOT_FUEL = 0; + public static final int ENERGY_PER_TICK = 2; + + public static class CustomBlock extends Block { + public static final DirectionProperty FACING = HorizontalBlock.HORIZONTAL_FACING; + public static final BooleanProperty ACTIAVATED = BlockStateProperties.LIT; + + public CustomBlock() { + super(Block.Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(5f, 1f).setLightLevel(s -> 0).harvestLevel(1).harvestTool(ToolType.PICKAXE).setRequiresTool()); + this.setDefaultState(this.stateContainer.getBaseState().with(FACING, Direction.NORTH).with(ACTIAVATED, Boolean.valueOf(false))); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack itemstack, IBlockReader world, List list, ITooltipFlag flag) { + super.addInformation(itemstack, world, list, flag); + list.add(GaugeTextHelper.buildBlockTooltip(GaugeTextHelper.getGeneratingPerTickText(GaugeValueHelper.getEnergy(ENERGY_PER_TICK)))); + } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) { + builder.add(FACING, ACTIAVATED); + } + + public BlockState rotate(BlockState state, Rotation rot) { + return state.with(FACING, rot.rotate(state.get(FACING))); + } + + @SuppressWarnings("deprecation") + public BlockState mirror(BlockState state, Mirror mirrorIn) { + return state.rotate(mirrorIn.toRotation(state.get(FACING))); + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + return this.getDefaultState().with(FACING, context.getPlacementHorizontalFacing().getOpposite()); + } + + @Override + public PushReaction getPushReaction(BlockState state) { + return PushReaction.BLOCK; + } + + @Override + public List getDrops(BlockState state, LootContext.Builder builder) { + @SuppressWarnings("deprecation") + List dropsOriginal = super.getDrops(state, builder); + if (!dropsOriginal.isEmpty()) { + return dropsOriginal; + } else { + return Collections.singletonList(new ItemStack(this)); + } + } + + @Override + public int getOpacity(BlockState state, IBlockReader worldIn, BlockPos pos) { + return state.get(ACTIAVATED) ? 12 : 0; + } + + @Override + public int getLightValue(BlockState state, IBlockReader world, BlockPos pos) { + return state.get(ACTIAVATED) ? 12 : 0; + } + + @Override + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity entity, Hand hand, BlockRayTraceResult hit) { + if (entity instanceof ServerPlayerEntity) { + NetworkHooks.openGui((ServerPlayerEntity) entity, this.getContainer(state, world, pos), pos); + return ActionResultType.CONSUME; + } else { + return ActionResultType.SUCCESS; + } + } + + @Override + public INamedContainerProvider getContainer(BlockState state, World worldIn, BlockPos pos) { + TileEntity tileEntity = worldIn.getTileEntity(pos); + return tileEntity instanceof INamedContainerProvider ? (INamedContainerProvider) tileEntity : null; + } + + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new CustomTileEntity(); + } + + @SuppressWarnings("deprecation") + @Override + public boolean eventReceived(BlockState state, World world, BlockPos pos, int eventID, int eventParam) { + super.eventReceived(state, world, pos, eventID, eventParam); + TileEntity tileentity = world.getTileEntity(pos); + return tileentity == null ? false : tileentity.receiveClientEvent(eventID, eventParam); + } + + @SuppressWarnings("deprecation") + @Override + public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { + if (state.getBlock() != newState.getBlock()) { + CustomTileEntity tileentity = (CustomTileEntity) world.getTileEntity(pos); + InventoryHelper.dropInventoryItems(world, pos, (CustomTileEntity) tileentity); + world.updateComparatorOutputLevel(pos, this); + super.onReplaced(state, world, pos, newState, isMoving); + } + } + + @Override + public boolean hasComparatorInputOverride(BlockState state) { + return true; + } + + @Override + public int getComparatorInputOverride(BlockState blockState, World world, BlockPos pos) { + CustomTileEntity tileentity = (CustomTileEntity) world.getTileEntity(pos); + return Container.calcRedstoneFromInventory(tileentity); + } + + } + + public static class CustomTileEntity extends GeneratorTileEntity { + + private PowerSystemFuelGeneratingRecipe powerSystemGenerating; + + public CustomTileEntity() { + super(ModInnet.COAL_GENERATOR.get()); + } + + @Override + public Container createMenu(int id, PlayerInventory player) { + return new CoalGeneratorGui.GuiContainer(id, player, this); + } + + @Override + public int getMaxGeneration() { + return ENERGY_PER_TICK; + } + + protected int getGenerationInTick() { + return this.getMaxGeneration(); + } + + @Override + protected boolean canGenerateEnergy() { + return true; + } + + @Override + protected void generateEnergy() { + this.generateEnergy(this.getGenerationInTick()); + } + + @Override + protected List getEjectDirections() { + List list = super.getEjectDirections(); + list.add(Direction.UP); + list.add(Direction.DOWN); + return list; + } + + @Override + protected void createPowerSystems(PowerSystemRegistry map) { + super.createPowerSystems(map); + map.put(this.powerSystemGenerating = new PowerSystemFuelGeneratingRecipe(this, this.getFuelSlot())); + } + + public PowerSystemFuelGeneratingRecipe getPowerSystemGenerating() { + return this.powerSystemGenerating; + } + + public int getFuelSlot() { + return SLOT_FUEL; + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/CompressorBlock.java b/src/main/java/net/mrscauthd/boss_tools/machines/CompressorBlock.java new file mode 100644 index 000000000..8c1cd1c95 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/CompressorBlock.java @@ -0,0 +1,202 @@ +package net.mrscauthd.boss_tools.machines; + +import java.util.Collections; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.HorizontalBlock; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.material.PushReaction; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.LootContext; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.DirectionProperty; +import net.minecraft.state.StateContainer; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; +import net.minecraftforge.common.ToolType; +import net.minecraftforge.energy.IEnergyStorage; +import net.minecraftforge.fml.network.NetworkHooks; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.crafting.BossToolsRecipeTypes; +import net.mrscauthd.boss_tools.crafting.ItemStackToItemStackRecipeType; +import net.mrscauthd.boss_tools.gui.screens.compressor.CompressorGui; +import net.mrscauthd.boss_tools.machines.tile.ItemStackToItemStackTileEntity; +import net.mrscauthd.boss_tools.machines.tile.NamedComponentRegistry; +import net.mrscauthd.boss_tools.machines.tile.PowerSystemEnergyCommon; +import net.mrscauthd.boss_tools.machines.tile.PowerSystemRegistry; + +public class CompressorBlock { + public static final int ENERGY_PER_TICK = 1; + + public static class CustomBlock extends Block { + public static final DirectionProperty FACING = HorizontalBlock.HORIZONTAL_FACING; + public static final BooleanProperty ACTIAVATED = BlockStateProperties.LIT; + + public CustomBlock() { + super(Block.Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(5f, 1f).setLightLevel(s -> 0).harvestLevel(1).harvestTool(ToolType.PICKAXE).setRequiresTool()); + this.setDefaultState(this.stateContainer.getBaseState().with(FACING, Direction.NORTH).with(ACTIAVATED, Boolean.valueOf(false))); + } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) { + builder.add(FACING, ACTIAVATED); + } + + public BlockState rotate(BlockState state, Rotation rot) { + return state.with(FACING, rot.rotate(state.get(FACING))); + } + + @SuppressWarnings("deprecation") + public BlockState mirror(BlockState state, Mirror mirrorIn) { + return state.rotate(mirrorIn.toRotation(state.get(FACING))); + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + return this.getDefaultState().with(FACING, context.getPlacementHorizontalFacing().getOpposite()); + } + + @Override + public PushReaction getPushReaction(BlockState state) { + return PushReaction.BLOCK; + } + + @Override + public List getDrops(BlockState state, LootContext.Builder builder) { + @SuppressWarnings("deprecation") + List dropsOriginal = super.getDrops(state, builder); + if (!dropsOriginal.isEmpty()) { + return dropsOriginal; + } else { + return Collections.singletonList(new ItemStack(this)); + } + } + + @Override + public int getOpacity(BlockState state, IBlockReader worldIn, BlockPos pos) { + return state.get(ACTIAVATED) ? 12 : 0; + } + + @Override + public int getLightValue(BlockState state, IBlockReader world, BlockPos pos) { + return state.get(ACTIAVATED) ? 12 : 0; + } + + @Override + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity entity, Hand hand, BlockRayTraceResult hit) { + if (entity instanceof ServerPlayerEntity) { + NetworkHooks.openGui((ServerPlayerEntity) entity, this.getContainer(state, world, pos), pos); + return ActionResultType.CONSUME; + } else { + return ActionResultType.SUCCESS; + } + } + + @Override + public INamedContainerProvider getContainer(BlockState state, World worldIn, BlockPos pos) { + TileEntity tileEntity = worldIn.getTileEntity(pos); + return tileEntity instanceof INamedContainerProvider ? (INamedContainerProvider) tileEntity : null; + } + + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new CustomTileEntity(); + } + + @SuppressWarnings("deprecation") + @Override + public boolean eventReceived(BlockState state, World world, BlockPos pos, int eventID, int eventParam) { + super.eventReceived(state, world, pos, eventID, eventParam); + TileEntity tileentity = world.getTileEntity(pos); + return tileentity == null ? false : tileentity.receiveClientEvent(eventID, eventParam); + } + + @SuppressWarnings("deprecation") + @Override + public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { + if (state.getBlock() != newState.getBlock()) { + CustomTileEntity tileentity = (CustomTileEntity) world.getTileEntity(pos); + InventoryHelper.dropInventoryItems(world, pos, (CustomTileEntity) tileentity); + world.updateComparatorOutputLevel(pos, this); + super.onReplaced(state, world, pos, newState, isMoving); + } + } + + @Override + public boolean hasComparatorInputOverride(BlockState state) { + return true; + } + + @Override + public int getComparatorInputOverride(BlockState blockState, World world, BlockPos pos) { + CustomTileEntity tileentity = (CustomTileEntity) world.getTileEntity(pos); + return Container.calcRedstoneFromInventory(tileentity); + } + } + + public static class CustomTileEntity extends ItemStackToItemStackTileEntity { + public CustomTileEntity() { + super(ModInnet.COMPRESSOR.get()); + } + + @Override + public Container createMenu(int id, PlayerInventory player) { + return new CompressorGui.GuiContainer(id, player, this); + } + + @Override + public ItemStackToItemStackRecipeType getRecipeType() { + return BossToolsRecipeTypes.COMPRESSING; + } + + @Override + protected BooleanProperty getBlockActivatedProperty() { + return CustomBlock.ACTIAVATED; + } + + @Override + protected void createEnergyStorages(NamedComponentRegistry registry) { + super.createEnergyStorages(registry); + registry.put(this.createEnergyStorageCommon()); + } + + @Override + protected void createPowerSystems(PowerSystemRegistry map) { + super.createPowerSystems(map); + map.put(new PowerSystemEnergyCommon(this) { + @Override + public int getBasePowerForOperation() { + return CustomTileEntity.this.getBasePowerForOperation(); + } + }); + } + + public int getBasePowerForOperation() { + return ENERGY_PER_TICK; + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/FuelRefineryBlock.java b/src/main/java/net/mrscauthd/boss_tools/machines/FuelRefineryBlock.java new file mode 100644 index 000000000..2abd6fdad --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/FuelRefineryBlock.java @@ -0,0 +1,432 @@ +package net.mrscauthd.boss_tools.machines; + +import java.util.Collections; +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.HorizontalBlock; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.material.PushReaction; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.LootContext; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.DirectionProperty; +import net.minecraft.state.StateContainer; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.Mirror; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; +import net.minecraftforge.common.ToolType; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.energy.IEnergyStorage; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; +import net.minecraftforge.fluids.capability.templates.FluidTank; +import net.minecraftforge.fml.network.NetworkHooks; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.crafting.BossToolsRecipeType; +import net.mrscauthd.boss_tools.crafting.BossToolsRecipeTypes; +import net.mrscauthd.boss_tools.crafting.FluidIngredient; +import net.mrscauthd.boss_tools.crafting.FuelRefiningRecipe; +import net.mrscauthd.boss_tools.fluid.FluidUtil2; +import net.mrscauthd.boss_tools.gui.screens.fuelrefinery.FuelRefineryGui; +import net.mrscauthd.boss_tools.inventory.StackCacher; +import net.mrscauthd.boss_tools.machines.tile.AbstractMachineTileEntity; +import net.mrscauthd.boss_tools.machines.tile.NamedComponentRegistry; +import net.mrscauthd.boss_tools.machines.tile.PowerSystemEnergyCommon; +import net.mrscauthd.boss_tools.machines.tile.PowerSystemRegistry; + +public class FuelRefineryBlock { + public static final int ENERGY_PER_TICK = 1; + public static final int TANK_CAPACITY = 3000; + public static final int TRANSFER_PER_TICK = 256; + public static final ResourceLocation TANK_INPUT = new ResourceLocation(BossToolsMod.ModId, "input"); + public static final ResourceLocation TANK_OUTPUT = new ResourceLocation(BossToolsMod.ModId, "output"); + public static final int SLOT_INPUT_SOURCE = 0; + public static final int SLOT_OUTPUT_SINK = 1; + public static final int SLOT_INPUT_SINK = 2; + public static final int SLOT_OUTPUT_SOURCE = 3; + + // Fuel Refinery Block + public static class CustomBlock extends Block { + public static final DirectionProperty FACING = HorizontalBlock.HORIZONTAL_FACING; + public static final BooleanProperty ACTIAVATED = BlockStateProperties.LIT; + + public CustomBlock() { + super(Block.Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(5f, 1f).setLightLevel(s -> 0).harvestLevel(1).harvestTool(ToolType.PICKAXE).setRequiresTool()); + this.setDefaultState(this.stateContainer.getBaseState().with(FACING, Direction.NORTH).with(ACTIAVATED, Boolean.valueOf(false))); + } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) { + builder.add(FACING, ACTIAVATED); + } + + public BlockState rotate(BlockState state, Rotation rot) { + return state.with(FACING, rot.rotate(state.get(FACING))); + } + + @SuppressWarnings("deprecation") + public BlockState mirror(BlockState state, Mirror mirrorIn) { + return state.rotate(mirrorIn.toRotation(state.get(FACING))); + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + return this.getDefaultState().with(FACING, context.getPlacementHorizontalFacing().getOpposite()); + } + + @Override + public PushReaction getPushReaction(BlockState state) { + return PushReaction.BLOCK; + } + + @Override + public List getDrops(BlockState state, LootContext.Builder builder) { + @SuppressWarnings("deprecation") + List dropsOriginal = super.getDrops(state, builder); + if (!dropsOriginal.isEmpty()) { + return dropsOriginal; + } else { + return Collections.singletonList(new ItemStack(this, 1)); + } + } + + @Override + public int getOpacity(BlockState state, IBlockReader worldIn, BlockPos pos) { + return state.get(ACTIAVATED) ? 12 : 0; + } + + @Override + public int getLightValue(BlockState state, IBlockReader world, BlockPos pos) { + return state.get(ACTIAVATED) ? 12 : 0; + } + + @Override + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity entity, Hand hand, BlockRayTraceResult hit) { + if (entity instanceof ServerPlayerEntity) { + NetworkHooks.openGui((ServerPlayerEntity) entity, this.getContainer(state, world, pos), pos); + return ActionResultType.CONSUME; + } else { + return ActionResultType.SUCCESS; + } + } + + @Override + public INamedContainerProvider getContainer(BlockState state, World worldIn, BlockPos pos) { + TileEntity tileEntity = worldIn.getTileEntity(pos); + return tileEntity instanceof INamedContainerProvider ? (INamedContainerProvider) tileEntity : null; + } + + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new CustomTileEntity(); + } + + @SuppressWarnings("deprecation") + @Override + public boolean eventReceived(BlockState state, World world, BlockPos pos, int eventID, int eventParam) { + super.eventReceived(state, world, pos, eventID, eventParam); + TileEntity tileentity = world.getTileEntity(pos); + return tileentity == null ? false : tileentity.receiveClientEvent(eventID, eventParam); + } + + @SuppressWarnings("deprecation") + @Override + public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { + if (state.getBlock() != newState.getBlock()) { + CustomTileEntity tileentity = (CustomTileEntity) world.getTileEntity(pos); + InventoryHelper.dropInventoryItems(world, pos, (CustomTileEntity) tileentity); + world.updateComparatorOutputLevel(pos, this); + super.onReplaced(state, world, pos, newState, isMoving); + } + } + + @Override + public boolean hasComparatorInputOverride(BlockState state) { + return true; + } + + @Override + public int getComparatorInputOverride(BlockState blockState, World world, BlockPos pos) { + CustomTileEntity tileentity = (CustomTileEntity) world.getTileEntity(pos); + return Container.calcRedstoneFromInventory(tileentity); + } + + } + + // Fuel Refinery Tile Entity + public static class CustomTileEntity extends AbstractMachineTileEntity { + private FluidTank inputTank; + private FluidTank outputTank; + + private StackCacher recipeCacher; + private FuelRefiningRecipe cachedRecipe; + + public CustomTileEntity() { + super(ModInnet.FUEL_REFINERY.get()); + + this.recipeCacher = new StackCacher(); + this.cachedRecipe = null; + } + + @Override + protected void createEnergyStorages(NamedComponentRegistry registry) { + super.createEnergyStorages(registry); + registry.put(this.createEnergyStorageCommon()); + } + + @Override + protected void createFluidHandlers(NamedComponentRegistry registry) { + super.createFluidHandlers(registry); + this.inputTank = (FluidTank) registry.computeIfAbsent(this.getInputTankName(), k -> this.creatTank(k)); + this.outputTank = (FluidTank) registry.computeIfAbsent(this.getOutputTankName(), k -> this.creatTank(k)); + } + + protected int getInitialTankCapacity(ResourceLocation name) { + return TANK_CAPACITY; + } + + protected FluidTank creatTank(ResourceLocation name) { + return new FluidTank(this.getInitialTankCapacity(name)) { + @Override + protected void onContentsChanged() { + super.onContentsChanged(); + CustomTileEntity.this.markDirty(); + } + }; + } + + @Override + protected void createPowerSystems(PowerSystemRegistry map) { + super.createPowerSystems(map); + map.put(new PowerSystemEnergyCommon(this) { + @Override + public int getBasePowerForOperation() { + return CustomTileEntity.this.getBasePowerForOperation(); + } + }); + } + + public int getBasePowerForOperation() { + return ENERGY_PER_TICK; + } + + @Override + public int getInventoryStackLimit() { + return 1; + } + + @Override + public Container createMenu(int id, PlayerInventory player) { + return new FuelRefineryGui.GuiContainer(id, player, this); + } + + @Override + protected void tickProcessing() { + this.drainSources(); + this.consumeIngredients(); + this.fillSinks(); + } + + public boolean consumeIngredients() { + FuelRefiningRecipe recipe = this.cacheRecipe(); + + if (recipe != null) { + FluidIngredient recipeOutput = recipe.getOutput(); + + if (this.hasSpaceInOutput(recipeOutput)) { + if (this.consumePowerForOperation() != null) { + this.getInputTank().drain(recipe.getInput().getAmount(), FluidAction.EXECUTE); + this.getOutputTank().fill(recipeOutput.toStack(), FluidAction.EXECUTE); + this.setProcessedInThisTick(); + return true; + } + } + } + + return false; + } + + protected void drainSources() { + IItemHandlerModifiable itemHandler = this.getItemHandler(); + int transferPerTick = this.getTransferPerTick(); + FluidUtil2.drainSource(itemHandler, this.getInputSourceSlot(), this.getInputTank(), transferPerTick); + FluidUtil2.drainSource(itemHandler, this.getOutputSourceSlot(), this.getOutputTank(), transferPerTick); + } + + protected void fillSinks() { + IItemHandlerModifiable itemHandler = this.getItemHandler(); + int transferPerTick = this.getTransferPerTick(); + FluidUtil2.fillSink(itemHandler, this.getInputSinkSlot(), this.getInputTank(), transferPerTick); + FluidUtil2.fillSink(itemHandler, this.getOutputSinkSlot(), this.getOutputTank(), transferPerTick); + } + + @Override + public LazyOptional getCapabilityFluidHandler(Capability capability, @Nullable Direction facing) { + if (facing == Direction.DOWN || facing == null) { + return LazyOptional.of(this::getOutputTank).cast(); + } else { + return LazyOptional.of(this::getInputTank).cast(); + } + } + + @Override + protected void getSlotsForFace(Direction direction, List slots) { + super.getSlotsForFace(direction, slots); + slots.add(this.getOutputSourceSlot()); + slots.add(this.getInputSourceSlot()); + slots.add(this.getOutputSinkSlot()); + } + + @Override + protected boolean onCanInsertItem(int index, ItemStack stack, Direction direction) { + if (this.isSourceSlot(index)) { + return FluidUtil2.canDrain(stack); + } else if (this.isSinkSlot(index)) { + FluidTank tank = this.slotToTank(index); + return FluidUtil2.canFill(stack, tank.getFluid().getFluid()); + } + + return super.onCanInsertItem(index, stack, direction); + } + + @Override + public boolean canExtractItem(int index, ItemStack stack, Direction direction) { + if (this.isSourceSlot(index)) { + return !FluidUtil2.canDrain(stack); + } else if (this.isSinkSlot(index)) { + FluidTank tank = this.slotToTank(index); + return !FluidUtil2.canFill(stack, tank.getFluid().getFluid()); + } + + return super.canExtractItem(index, stack, direction); + } + + @Override + public boolean hasSpaceInOutput() { + FuelRefiningRecipe recipe = this.cacheRecipe(); + return recipe != null && this.hasSpaceInOutput(recipe.getOutput()); + } + + public boolean hasSpaceInOutput(FluidIngredient recipeOutput) { + return hasSpaceInOutput(recipeOutput, this.getOutputTank()); + } + + public FuelRefiningRecipe cacheRecipe() { + FluidStack fluidStack = this.getInputTank().getFluid(); + + if (fluidStack.isEmpty()) { + this.recipeCacher.set(fluidStack); + this.cachedRecipe = null; + } else if (!this.recipeCacher.test(fluidStack)) { + this.recipeCacher.set(fluidStack); + this.cachedRecipe = this.getRecipeType().findFirst(this.getWorld(), r -> r.test(fluidStack)); + } + + return this.cachedRecipe; + } + + public BossToolsRecipeType getRecipeType() { + return BossToolsRecipeTypes.FUELREFINING; + } + + @Override + protected int getInitialInventorySize() { + return super.getInitialInventorySize() + 4; + } + + public int getInputSourceSlot() { + return SLOT_INPUT_SOURCE; + } + + public int getInputSinkSlot() { + return SLOT_INPUT_SINK; + } + + public int getOutputSourceSlot() { + return SLOT_OUTPUT_SOURCE; + } + + public int getOutputSinkSlot() { + return SLOT_OUTPUT_SINK; + } + + public boolean isSourceSlot(int slot) { + return slot == this.getInputSourceSlot() || slot == this.getOutputSourceSlot(); + } + + public boolean isSinkSlot(int slot) { + return slot == this.getInputSinkSlot() || slot == this.getOutputSinkSlot(); + } + + public FluidTank slotToTank(int slot) { + if (slot == this.getInputSourceSlot() || slot == this.getInputSinkSlot()) { + return this.getInputTank(); + } else if (slot == this.getOutputSourceSlot() || slot == this.getOutputSinkSlot()) { + return this.getOutputTank(); + } else { + return null; + } + } + + public ResourceLocation slotToTankName(int slot) { + if (slot == this.getInputSourceSlot() || slot == this.getInputSinkSlot()) { + return this.getInputTankName(); + } else if (slot == this.getOutputSourceSlot() || slot == this.getOutputSinkSlot()) { + return this.getOutputTankName(); + } else { + return null; + } + } + + public ResourceLocation getInputTankName() { + return TANK_INPUT; + } + + public FluidTank getInputTank() { + return this.inputTank; + } + + public ResourceLocation getOutputTankName() { + return TANK_OUTPUT; + } + + public FluidTank getOutputTank() { + return this.outputTank; + } + + public int getTransferPerTick() { + return TRANSFER_PER_TICK; + } + + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/NASAWorkbenchBlock.java b/src/main/java/net/mrscauthd/boss_tools/machines/NASAWorkbenchBlock.java new file mode 100644 index 000000000..966182db8 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/NASAWorkbenchBlock.java @@ -0,0 +1,466 @@ +package net.mrscauthd.boss_tools.machines; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.stream.Collectors; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.HorizontalBlock; +import net.minecraft.block.IWaterLoggable; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.fluid.FluidState; +import net.minecraft.fluid.Fluids; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.loot.LootContext; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.DirectionProperty; +import net.minecraft.state.StateContainer; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.Mirror; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Rotation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.common.ToolType; +import net.minecraftforge.fml.network.NetworkHooks; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.ItemHandlerHelper; +import net.minecraftforge.registries.ForgeRegistries; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.crafting.BossToolsRecipeType; +import net.mrscauthd.boss_tools.crafting.BossToolsRecipeTypes; +import net.mrscauthd.boss_tools.crafting.RocketPart; +import net.mrscauthd.boss_tools.crafting.WorkbenchingRecipe; +import net.mrscauthd.boss_tools.gui.screens.nasaworkbench.NasaWorkbenchGui; +import net.mrscauthd.boss_tools.inventory.ItemHandlerHelper2; +import net.mrscauthd.boss_tools.inventory.RocketPartsItemHandler; +import net.mrscauthd.boss_tools.inventory.StackCacher; +import net.mrscauthd.boss_tools.machines.tile.AbstractMachineTileEntity; + +public class NASAWorkbenchBlock { + + public static final int SLOT_PARTS = 0; + + public static List getBasicPartOrders() { + List parts = new ArrayList<>(); + parts.add(ModInnet.ROCKET_PART_NOSE.get()); + parts.add(ModInnet.ROCKET_PART_BODY.get()); + parts.add(ModInnet.ROCKET_PART_TANK.get()); + parts.add(ModInnet.ROCKET_PART_FIN_LEFT.get()); + parts.add(ModInnet.ROCKET_PART_FIN_RIGHT.get()); + parts.add(ModInnet.ROCKET_PART_ENGINE.get()); + return parts; + } + + public static int getBasicPartSlots() { + return getBasicPartOrders().stream().collect(Collectors.summingInt(p -> p.getSlots())); + } + + public static class CustomBlock extends Block implements IWaterLoggable { + public static final DirectionProperty FACING = HorizontalBlock.HORIZONTAL_FACING; + public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; + + public CustomBlock() { + super(Block.Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(5f, 1f).setLightLevel(s -> 1).harvestLevel(1).harvestTool(ToolType.PICKAXE).setRequiresTool().notSolid().setOpaque((bs, br, bp) -> false)); + this.setDefaultState(this.stateContainer.getBaseState().with(FACING, Direction.NORTH).with(WATERLOGGED, false)); + } + + @Override + public boolean propagatesSkylightDown(BlockState state, IBlockReader reader, BlockPos pos) { + return true; + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext context) { + Vector3d offset = state.getOffset(world, pos); + switch ((Direction) state.get(FACING)) { + case SOUTH: + default: + return VoxelShapes.or(makeCuboidShape(16, 0, 16, 0, 19.2, 0)).withOffset(offset.x, offset.y, offset.z); + case NORTH: + return VoxelShapes.or(makeCuboidShape(0, 0, 0, 16, 19.2, 16)).withOffset(offset.x, offset.y, offset.z); + case EAST: + return VoxelShapes.or(makeCuboidShape(16, 0, 0, 0, 19.2, 16)).withOffset(offset.x, offset.y, offset.z); + case WEST: + return VoxelShapes.or(makeCuboidShape(0, 0, 16, 16, 19.2, 0)).withOffset(offset.x, offset.y, offset.z); + } + } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) { + builder.add(FACING, WATERLOGGED); + } + + public BlockState rotate(BlockState state, Rotation rot) { + return state.with(FACING, rot.rotate(state.get(FACING))); + } + + @SuppressWarnings("deprecation") + public BlockState mirror(BlockState state, Mirror mirrorIn) { + return state.rotate(mirrorIn.toRotation(state.get(FACING))); + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + boolean flag = context.getWorld().getFluidState(context.getPos()).getFluid() == Fluids.WATER; + return this.getDefaultState().with(FACING, context.getPlacementHorizontalFacing().getOpposite()).with(WATERLOGGED, flag); + } + + @SuppressWarnings("deprecation") + @Override + public FluidState getFluidState(BlockState state) { + return state.get(WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) : super.getFluidState(state); + } + + @SuppressWarnings("deprecation") + @Override + public BlockState updatePostPlacement(BlockState state, Direction facing, BlockState facingState, IWorld world, BlockPos currentPos, BlockPos facingPos) { + if (state.get(WATERLOGGED)) { + world.getPendingFluidTicks().scheduleTick(currentPos, Fluids.WATER, Fluids.WATER.getTickRate(world)); + } + return super.updatePostPlacement(state, facing, facingState, world, currentPos, facingPos); + } + + @Override + public List getDrops(BlockState state, LootContext.Builder builder) { + @SuppressWarnings("deprecation") + List dropsOriginal = super.getDrops(state, builder); + if (!dropsOriginal.isEmpty()) { + return dropsOriginal; + } else { + return Collections.singletonList(new ItemStack(this)); + } + } + + @Override + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity entity, Hand hand, BlockRayTraceResult hit) { + if (entity instanceof ServerPlayerEntity) { + NetworkHooks.openGui((ServerPlayerEntity) entity, this.getContainer(state, world, pos), pos); + return ActionResultType.CONSUME; + } else { + return ActionResultType.SUCCESS; + } + } + + @Override + public INamedContainerProvider getContainer(BlockState state, World worldIn, BlockPos pos) { + TileEntity tileEntity = worldIn.getTileEntity(pos); + return tileEntity instanceof INamedContainerProvider ? (INamedContainerProvider) tileEntity : null; + } + + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new CustomTileEntity(); + } + + @SuppressWarnings("deprecation") + @Override + public boolean eventReceived(BlockState state, World world, BlockPos pos, int eventID, int eventParam) { + super.eventReceived(state, world, pos, eventID, eventParam); + TileEntity tileentity = world.getTileEntity(pos); + return tileentity == null ? false : tileentity.receiveClientEvent(eventID, eventParam); + } + + @SuppressWarnings("deprecation") + @Override + public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { + if (state.getBlock() != newState.getBlock()) { + CustomTileEntity tileentity = (CustomTileEntity) world.getTileEntity(pos); + InventoryHelper.dropInventoryItems(world, pos, (CustomTileEntity) tileentity); + world.updateComparatorOutputLevel(pos, this); + super.onReplaced(state, world, pos, newState, isMoving); + } + } + + @Override + public boolean hasComparatorInputOverride(BlockState state) { + return true; + } + + @Override + public int getComparatorInputOverride(BlockState blockState, World world, BlockPos pos) { + CustomTileEntity tileentity = (CustomTileEntity) world.getTileEntity(pos); + return tileentity.cacheRecipes() != null ? 15 : 0; + } + } + + public static class CustomTileEntity extends AbstractMachineTileEntity { + + private StackCacher itemStackCacher; + private WorkbenchingRecipe cachedRecipe; + private List possibleRecipes; + private Set invalidCache; + + private int prevRedstone; + private int currRedstone; + + private RocketPartsItemHandler partsItemHandler; + + public CustomTileEntity() { + super(ModInnet.NASA_WORKBENCH.get()); + + this.itemStackCacher = new StackCacher(); + this.cachedRecipe = null; + this.possibleRecipes = new ArrayList<>(); + this.invalidCache = new HashSet<>(); + + this.prevRedstone = 0; + this.currRedstone = 0; + } + + public RocketPartsItemHandler getPartsItemHandler() { + return this.partsItemHandler; + } + + public List getPartOrders() { + return getBasicPartOrders(); + } + + public int getPartsSlot() { + return SLOT_PARTS; + } + + @Override + protected void createItemHandlers() { + super.createItemHandlers(); + + this.partsItemHandler = new RocketPartsItemHandler(this.getItemHandler(), this.getPartsSlot(), this.getPartOrders()); + } + + @Override + protected int getInitialInventorySize() { + return super.getInitialInventorySize() + this.getPartsItemHandler().getSlots(); + } + + @Override + public void setInventorySlotContents(int p_70299_1_, ItemStack p_70299_2_) { + super.setInventorySlotContents(p_70299_1_, p_70299_2_); + this.cacheRecipes(); + } + + @Override + public Container createMenu(int id, PlayerInventory player) { + return new NasaWorkbenchGui.GuiContainer(id, player, this); + } + + @Override + protected void getSlotsForFace(Direction direction, List slots) { + super.getSlotsForFace(direction, slots); + + RocketPartsItemHandler partsItemHandler = this.getPartsItemHandler(); + + for (int i = 0; i < partsItemHandler.getSlots(); i++) { + slots.add(partsItemHandler.getParentSlotIndex(i)); + } + } + + @Override + protected boolean onCanInsertItem(int index, ItemStack stack, Direction direction) { + int find = this.findAvailableSlot(stack); + + if (find == index) { + return true; + } + + return super.onCanInsertItem(index, stack, direction); + } + + public int findAvailableSlot(ItemStack itemStack) { + this.cacheRecipes(); + + ItemStack single = ItemHandlerHelper.copyStackWithSize(itemStack, 1); + + if (this.invalidCache.contains(single)) { + return -1; + } + + for (WorkbenchingRecipe recipe : this.possibleRecipes) { + int slot = this.findAvailableSlot(recipe, itemStack); + + if (slot != -1) { + return slot; + } + } + + this.invalidCache.add(single); + return -1; + } + + public int findAvailableSlot(WorkbenchingRecipe recipe, ItemStack itemStack) { + Map> recipeParts = recipe.getParts(); + RocketPartsItemHandler partsItemHandler = this.getPartsItemHandler(); + + for (Entry entry : partsItemHandler.getSubHandlers().entrySet()) { + RocketPart part = entry.getKey(); + IItemHandlerModifiable subHandler = entry.getValue(); + List ingredients = recipeParts.get(part); + + if (ingredients != null) { + for (int i = 0; i < ingredients.size(); i++) { + if (ingredients.get(i).test(itemStack) && subHandler.getStackInSlot(i).isEmpty()) { + return partsItemHandler.getParentSlotIndex(part, i); + } + } + } + } + + return -1; + } + + public WorkbenchingRecipe cacheRecipes() { + RocketPartsItemHandler partsItemHandler = this.getPartsItemHandler(); + List stacks = ItemHandlerHelper2.getStacks(partsItemHandler); + + if (!this.itemStackCacher.test(stacks)) { + this.itemStackCacher.set(stacks); + + BossToolsRecipeType recipeType = this.getRecipeType(); + this.cachedRecipe = recipeType.findFirst(this.getWorld(), r -> r.test(partsItemHandler, false)); + this.possibleRecipes.clear(); + recipeType.filter(this.getWorld(), r -> r.test(partsItemHandler, true)).forEach(this.possibleRecipes::add); + + this.invalidCache.clear(); + } + + return this.cachedRecipe; + } + + public BossToolsRecipeType getRecipeType() { + return BossToolsRecipeTypes.WORKBENCHING; + } + + @Override + protected void tickProcessing() { + this.spawnParticles(); + + this.updateRedstoneState(); + + if (this.prevRedstone == 0 && this.currRedstone > 0) { + this.outputToBottom(); + } + + } + + protected void updateRedstoneState() { + this.prevRedstone = this.currRedstone; + this.currRedstone = this.getWorld().getRedstonePowerFromNeighbors(this.getPos()); + } + + protected void outputToBottom() { + + WorkbenchingRecipe recipe = this.cacheRecipes(); + + if (recipe == null) { + return; + } + + IItemHandler bottomItemHandler = this.getBottomTileEntityItemHandler(); + + if (bottomItemHandler == null) { + return; + } + + ItemStack output = recipe.getOutput(); + + if (ItemHandlerHelper.insertItem(bottomItemHandler, output, true).isEmpty()) { + ItemHandlerHelper.insertItem(bottomItemHandler, output, false); + this.consumeIngredient(); + } + } + + private IItemHandler getBottomTileEntityItemHandler() { + TileEntity bottomTileEntity = this.getWorld().getTileEntity(this.getPos().down()); + + if (bottomTileEntity != null) { + return bottomTileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).orElse(null); + } else { + return null; + } + } + + protected void spawnParticles() { + if (this.possibleRecipes.size() > 0 && !ItemHandlerHelper2.isEmpty(this.getPartsItemHandler())) { + + World world = this.getWorld(); + + if (world instanceof ServerWorld) { + ServerWorld serverWorld = (ServerWorld) world; + BlockPos pos = this.getPos(); + serverWorld.spawnParticle(ParticleTypes.CRIT, pos.getX() + 0.5D, pos.getY() + 1.5D, pos.getZ() + 0.5D, 10, 0.1D, 0.1D, 0.1D, 0.1D); + } + } + } + + public boolean consumeIngredient() { + WorkbenchingRecipe recipe = this.cacheRecipes(); + + if (recipe == null) { + return false; + } + + RocketPartsItemHandler partsItemHandler = this.getPartsItemHandler(); + + for (RocketPart part : recipe.getParts().keySet()) { + IItemHandlerModifiable subHandler = partsItemHandler.getSubHandlers().get(part); + + for (int i = 0; i < part.getSlots(); i++) { + subHandler.extractItem(i, 1, false); + } + } + + World world = this.getWorld(); + + if (world instanceof ServerWorld) { + ServerWorld serverWorld = (ServerWorld) world; + BlockPos pos = this.getPos(); + + serverWorld.playSound(null, pos, ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("item.totem.use")), SoundCategory.NEUTRAL, 1.0F, 1.0F); + serverWorld.spawnParticle(ParticleTypes.TOTEM_OF_UNDYING, pos.getX() + 0.5D, pos.getY() + 1.5D, pos.getZ() + 0.5D, 100, 0.1D, 0.1D, 0.1D, 0.7D); + } + + return true; + } + + @Override + public boolean hasSpaceInOutput() { + return true; + } + + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/OxygenBubbleDistributorBlock.java b/src/main/java/net/mrscauthd/boss_tools/machines/OxygenBubbleDistributorBlock.java new file mode 100644 index 000000000..3ab7c7ddd --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/OxygenBubbleDistributorBlock.java @@ -0,0 +1,471 @@ +package net.mrscauthd.boss_tools.machines; + +import java.util.Collections; +import java.util.List; +import java.util.function.Supplier; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.HorizontalBlock; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.material.PushReaction; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.LootContext; +import net.minecraft.network.PacketBuffer; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.potion.EffectInstance; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.DirectionProperty; +import net.minecraft.state.StateContainer; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.ToolType; +import net.minecraftforge.energy.IEnergyStorage; +import net.minecraftforge.fml.network.NetworkEvent; +import net.minecraftforge.fml.network.NetworkEvent.Context; +import net.minecraftforge.fml.network.NetworkHooks; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.capability.IOxygenStorage; +import net.mrscauthd.boss_tools.crafting.BossToolsRecipeType; +import net.mrscauthd.boss_tools.crafting.BossToolsRecipeTypes; +import net.mrscauthd.boss_tools.crafting.OxygenMakingRecipeAbstract; +import net.mrscauthd.boss_tools.gui.screens.oxygenbubbledistributor.OxygenBubbleDistributorGui; +import net.mrscauthd.boss_tools.machines.tile.NamedComponentRegistry; +import net.mrscauthd.boss_tools.machines.tile.OxygenMakingTileEntity; +import net.mrscauthd.boss_tools.machines.tile.PowerSystemEnergyCommon; +import net.mrscauthd.boss_tools.machines.tile.PowerSystemRegistry; + +public class OxygenBubbleDistributorBlock { + + public static final int ENERGY_PER_TICK = 1; + public static final String KEY_TIMER = "timer"; + public static final String KEY_RANGE = "range"; + public static final String KEY_WORKINGAREA_VISIBLE = "workingAreaVisible"; + + public static final int RANGE_MAX = 15; + public static final int RANGE_MIN = 1; + + /** + * Interval Ticks, 4 = every 4 ticks + */ + public static final int MAX_TIMER = 4; + + public static class CustomBlock extends Block { + public static final DirectionProperty FACING = HorizontalBlock.HORIZONTAL_FACING; + public static final BooleanProperty ACTIAVATED = BlockStateProperties.LIT; + + public CustomBlock() { + super(Block.Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(5f, 1f).setLightLevel(s -> 0).harvestLevel(1).harvestTool(ToolType.PICKAXE).setRequiresTool()); + this.setDefaultState(this.stateContainer.getBaseState().with(FACING, Direction.NORTH).with(ACTIAVATED, Boolean.valueOf(false))); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack itemstack, IBlockReader world, List list, ITooltipFlag flag) { + super.addInformation(itemstack, world, list, flag); + + int min = RANGE_MIN * 2 + 1; + int max = RANGE_MAX * 2 + 1; + list.add(new TranslationTextComponent("tooltip." + BossToolsMod.ModId + ".oxygen_bubble_distributor", min, max).setStyle(Style.EMPTY.setFormatting(TextFormatting.GRAY))); + } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) { + builder.add(FACING, ACTIAVATED); + } + + public BlockState rotate(BlockState state, Rotation rot) { + return state.with(FACING, rot.rotate(state.get(FACING))); + } + + @SuppressWarnings("deprecation") + public BlockState mirror(BlockState state, Mirror mirrorIn) { + return state.rotate(mirrorIn.toRotation(state.get(FACING))); + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + return this.getDefaultState().with(FACING, context.getPlacementHorizontalFacing().getOpposite()); + } + + @Override + public PushReaction getPushReaction(BlockState state) { + return PushReaction.BLOCK; + } + + @Override + public List getDrops(BlockState state, LootContext.Builder builder) { + @SuppressWarnings("deprecation") + List dropsOriginal = super.getDrops(state, builder); + if (!dropsOriginal.isEmpty()) { + return dropsOriginal; + } else { + return Collections.singletonList(new ItemStack(this, 1)); + } + } + + @Override + public int getOpacity(BlockState state, IBlockReader worldIn, BlockPos pos) { + return state.get(ACTIAVATED) ? 12 : 0; + } + + @Override + public int getLightValue(BlockState state, IBlockReader world, BlockPos pos) { + return state.get(ACTIAVATED) ? 12 : 0; + } + + @Override + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity entity, Hand hand, BlockRayTraceResult hit) { + if (entity instanceof ServerPlayerEntity) { + NetworkHooks.openGui((ServerPlayerEntity) entity, this.getContainer(state, world, pos), pos); + return ActionResultType.CONSUME; + } else { + return ActionResultType.SUCCESS; + } + } + + @Override + public INamedContainerProvider getContainer(BlockState state, World worldIn, BlockPos pos) { + TileEntity tileEntity = worldIn.getTileEntity(pos); + return tileEntity instanceof INamedContainerProvider ? (INamedContainerProvider) tileEntity : null; + } + + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new CustomTileEntity(); + } + + @SuppressWarnings("deprecation") + @Override + public boolean eventReceived(BlockState state, World world, BlockPos pos, int eventID, int eventParam) { + super.eventReceived(state, world, pos, eventID, eventParam); + TileEntity tileentity = world.getTileEntity(pos); + return tileentity == null ? false : tileentity.receiveClientEvent(eventID, eventParam); + } + + @SuppressWarnings("deprecation") + @Override + public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { + if (state.getBlock() != newState.getBlock()) { + CustomTileEntity tileentity = (CustomTileEntity) world.getTileEntity(pos); + InventoryHelper.dropInventoryItems(world, pos, (CustomTileEntity) tileentity); + world.updateComparatorOutputLevel(pos, this); + super.onReplaced(state, world, pos, newState, isMoving); + } + } + + @Override + public boolean hasComparatorInputOverride(BlockState state) { + return true; + } + + @Override + public int getComparatorInputOverride(BlockState blockState, World world, BlockPos pos) { + CustomTileEntity tileentity = (CustomTileEntity) world.getTileEntity(pos); + return Container.calcRedstoneFromInventory(tileentity); + } + } + + public static class CustomTileEntity extends OxygenMakingTileEntity { + + public CustomTileEntity() { + super(ModInnet.OXYGEN_BUBBLE_DISTRIBUTOR.get()); + this.setWorkingAreaVisible(false); + } + + @Override + protected boolean canActivated() { + if (this.getOutputTank().getOxygenStored() >= this.getOxygenUsing(this.getRange())) { + return true; + } + + return super.canActivated(); + } + + @OnlyIn(Dist.CLIENT) + @Override + public double getMaxRenderDistanceSquared() { + return 256.0D; + } + + @Override + public AxisAlignedBB getRenderBoundingBox() { + return new AxisAlignedBB(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()).grow(32, 32, 32); + } + + @Override + public Container createMenu(int id, PlayerInventory player) { + return new OxygenBubbleDistributorGui.GuiContainer(id, player, this); + } + + @Override + protected void createEnergyStorages(NamedComponentRegistry registry) { + super.createEnergyStorages(registry); + registry.put(this.createEnergyStorageCommon()); + } + + protected void tickProcessing() { + super.tickProcessing(); + + this.tickDistributeTimer(); + } + + /** + * timer will cycle 0, 1, 2, 3 + */ + private void tickDistributeTimer() { + if (this.getTimer() >= this.getMaxTimer()) { + this.setTimer(0); + this.distribute(); + } + this.setTimer(this.getTimer() + 1); + } + + private void distribute() { + IOxygenStorage oxygenStorage = this.getOutputTank(); + double range = this.getRange(); + int oxygenUsing = this.getOxygenUsing(range); + + if (oxygenStorage.extractOxygen(oxygenUsing, true) == oxygenUsing) { + if (this.isProcessedInThisTick() || this.consumePowerForOperation() != null) { + oxygenStorage.extractOxygen(oxygenUsing, false); + this.spawnOxygenBubble(range); + } + } + } + + private void spawnOxygenBubble(double range) { + World world = this.getWorld(); + List entities = world.getEntitiesWithinAABB(LivingEntity.class, this.getWorkingArea(range), null); + + for (LivingEntity entity : entities) { + entity.addPotionEffect(new EffectInstance(ModInnet.OXYGEN_EFFECT.get(),2 * 24,0, false ,false)); + } + + if (world instanceof ServerWorld) { + ServerWorld serverWorld = (ServerWorld) world; + Vector3d center = new AxisAlignedBB(this.getPos()).getCenter(); + serverWorld.spawnParticle(ParticleTypes.CLOUD, center.x, center.y + 0.5D, center.z, 1, 0.1D, 0.1D, 0.1D, 0.001D); + } + + this.setProcessedInThisTick(); + } + + public int getMaxTimer() { + return MAX_TIMER; + } + + public int getTimer() { + return this.getTileData().getInt(KEY_TIMER); + } + + public void setTimer(int timer) { + timer = Math.max(timer, 0); + + if (this.getTimer() != timer) { + this.getTileData().putInt(KEY_TIMER, timer); + this.markDirty(); + } + } + + public int getOxygenUsing(double range) { + return (int) range + 1; + } + + public int getRange() { + return Math.max(this.getTileData().getInt(KEY_RANGE), RANGE_MIN); + } + + public void setRange(int range) { + range = Math.min(Math.max(range, RANGE_MIN), RANGE_MAX); + + if (this.getRange() != range) { + this.getTileData().putInt(KEY_RANGE, range); + this.markDirty(); + } + } + + public boolean isWorkingAreaVisible() { + return this.getTileData().getBoolean(KEY_WORKINGAREA_VISIBLE); + } + + public void setWorkingAreaVisible(boolean visible) { + if (this.isWorkingAreaVisible() != visible) { + this.getTileData().putBoolean(KEY_WORKINGAREA_VISIBLE, visible); + this.markDirty(); + } + } + + public AxisAlignedBB getWorkingArea(double range) { + return this.getWorkingArea(this.getPos(), range); + } + + public AxisAlignedBB getWorkingArea(BlockPos pos, double range) { + return new AxisAlignedBB(pos).grow(range).offset(0.0D, range, 0.0D); + } + + @Override + protected BooleanProperty getBlockActivatedProperty() { + return CustomBlock.ACTIAVATED; + } + + @Override + protected void createPowerSystems(PowerSystemRegistry map) { + super.createPowerSystems(map); + + map.put(new PowerSystemEnergyCommon(this) { + @Override + public int getBasePowerForOperation() { + return CustomTileEntity.this.getBasePowerForOperation(); + } + }); + } + + public int getBasePowerForOperation() { + return ENERGY_PER_TICK; + } + + @Override + public BossToolsRecipeType getRecipeType() { + return BossToolsRecipeTypes.OXYGENBUBBLEDISTRIBUTOR; + } + } + + public static class ChangeRangeMessage { + private BlockPos blockPos = BlockPos.ZERO; + private boolean direction = false; + + public ChangeRangeMessage() { + + } + + public ChangeRangeMessage(BlockPos pos, boolean direction) { + this.setBlockPos(pos); + this.setDirection(direction); + } + + public ChangeRangeMessage(PacketBuffer buffer) { + this.setBlockPos(buffer.readBlockPos()); + this.setDirection(buffer.readBoolean()); + } + + public BlockPos getBlockPos() { + return this.blockPos; + } + + public void setBlockPos(BlockPos blockPos) { + this.blockPos = blockPos; + } + + public boolean getDirection() { + return this.direction; + } + + public void setDirection(boolean direction) { + this.direction = direction; + } + + public static ChangeRangeMessage decode(PacketBuffer buffer) { + return new ChangeRangeMessage(buffer); + } + + public static void encode(ChangeRangeMessage message, PacketBuffer buffer) { + buffer.writeBlockPos(message.getBlockPos()); + buffer.writeBoolean(message.getDirection()); + } + + public static void handle(ChangeRangeMessage message, Supplier contextSupplier) { + Context context = contextSupplier.get(); + CustomTileEntity tileEntity = (CustomTileEntity) context.getSender().getServerWorld().getTileEntity(message.getBlockPos()); + int prev = tileEntity.getRange(); + int next = prev + (message.getDirection() ? +1 : -1); + tileEntity.setRange(next); + context.setPacketHandled(true); + } + } + + public static class ChangeWorkingAreaVisibleMessage { + private BlockPos blockPos = BlockPos.ZERO; + private boolean visible = false; + + public ChangeWorkingAreaVisibleMessage() { + + } + + public ChangeWorkingAreaVisibleMessage(BlockPos pos, boolean visible) { + this.setBlockPos(pos); + this.setVisible(visible); + } + + public ChangeWorkingAreaVisibleMessage(PacketBuffer buffer) { + this.setBlockPos(buffer.readBlockPos()); + this.setVisible(buffer.readBoolean()); + } + + public BlockPos getBlockPos() { + return this.blockPos; + } + + public void setBlockPos(BlockPos blockPos) { + this.blockPos = blockPos; + } + + public boolean isVisible() { + return this.visible; + } + + public void setVisible(boolean visible) { + this.visible = visible; + } + + public static ChangeWorkingAreaVisibleMessage decode(PacketBuffer buffer) { + return new ChangeWorkingAreaVisibleMessage(buffer); + } + + public static void encode(ChangeWorkingAreaVisibleMessage message, PacketBuffer buffer) { + buffer.writeBlockPos(message.getBlockPos()); + buffer.writeBoolean(message.isVisible()); + } + + public static void handle(ChangeWorkingAreaVisibleMessage message, Supplier contextSupplier) { + Context context = contextSupplier.get(); + CustomTileEntity tileEntity = (CustomTileEntity) context.getSender().getServerWorld().getTileEntity(message.getBlockPos()); + tileEntity.setWorkingAreaVisible(message.isVisible()); + context.setPacketHandled(true); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/OxygenLoaderBlock.java b/src/main/java/net/mrscauthd/boss_tools/machines/OxygenLoaderBlock.java new file mode 100644 index 000000000..4ab22b3e7 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/OxygenLoaderBlock.java @@ -0,0 +1,288 @@ +package net.mrscauthd.boss_tools.machines; + +import java.util.Collections; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.HorizontalBlock; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.material.PushReaction; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.LootContext; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.DirectionProperty; +import net.minecraft.state.StateContainer; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.Mirror; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; +import net.minecraftforge.common.ToolType; +import net.minecraftforge.energy.IEnergyStorage; +import net.minecraftforge.fml.network.NetworkHooks; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.capability.IOxygenStorage; +import net.mrscauthd.boss_tools.capability.OxygenUtil; +import net.mrscauthd.boss_tools.crafting.BossToolsRecipeType; +import net.mrscauthd.boss_tools.crafting.BossToolsRecipeTypes; +import net.mrscauthd.boss_tools.crafting.OxygenMakingRecipeAbstract; +import net.mrscauthd.boss_tools.gui.screens.oxygenloader.OxygenLoaderGui; +import net.mrscauthd.boss_tools.machines.tile.NamedComponentRegistry; +import net.mrscauthd.boss_tools.machines.tile.OxygenMakingTileEntity; +import net.mrscauthd.boss_tools.machines.tile.PowerSystemEnergyCommon; +import net.mrscauthd.boss_tools.machines.tile.PowerSystemRegistry; + +public class OxygenLoaderBlock { + public static final int ENERGY_PER_TICK = 1; + public static final int SLOT_OUTPUT_SINK = 2; + public static final int SLOT_OUTPUT_SOURCE = 3; + + public static class CustomBlock extends Block { + public static final DirectionProperty FACING = HorizontalBlock.HORIZONTAL_FACING; + public static final BooleanProperty ACTIAVATED = BlockStateProperties.LIT; + + public CustomBlock() { + super(Block.Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(5f, 1f).setLightLevel(s -> 0).harvestLevel(1).harvestTool(ToolType.PICKAXE).setRequiresTool()); + this.setDefaultState(this.stateContainer.getBaseState().with(FACING, Direction.NORTH).with(ACTIAVATED, Boolean.valueOf(false))); + } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) { + builder.add(FACING, ACTIAVATED); + } + + public BlockState rotate(BlockState state, Rotation rot) { + return state.with(FACING, rot.rotate(state.get(FACING))); + } + + @SuppressWarnings("deprecation") + public BlockState mirror(BlockState state, Mirror mirrorIn) { + return state.rotate(mirrorIn.toRotation(state.get(FACING))); + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + return this.getDefaultState().with(FACING, context.getPlacementHorizontalFacing().getOpposite()); + } + + @Override + public PushReaction getPushReaction(BlockState state) { + return PushReaction.BLOCK; + } + + @Override + public List getDrops(BlockState state, LootContext.Builder builder) { + @SuppressWarnings("deprecation") + List dropsOriginal = super.getDrops(state, builder); + if (!dropsOriginal.isEmpty()) { + return dropsOriginal; + } else { + return Collections.singletonList(new ItemStack(this)); + } + } + + @Override + public int getOpacity(BlockState state, IBlockReader worldIn, BlockPos pos) { + return state.get(ACTIAVATED) ? 12 : 0; + } + + @Override + public int getLightValue(BlockState state, IBlockReader world, BlockPos pos) { + return state.get(ACTIAVATED) ? 12 : 0; + } + + @Override + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity entity, Hand hand, BlockRayTraceResult hit) { + if (entity instanceof ServerPlayerEntity) { + NetworkHooks.openGui((ServerPlayerEntity) entity, this.getContainer(state, world, pos), pos); + return ActionResultType.CONSUME; + } else { + return ActionResultType.SUCCESS; + } + } + + @Override + public INamedContainerProvider getContainer(BlockState state, World worldIn, BlockPos pos) { + TileEntity tileEntity = worldIn.getTileEntity(pos); + return tileEntity instanceof INamedContainerProvider ? (INamedContainerProvider) tileEntity : null; + } + + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new CustomTileEntity(); + } + + @SuppressWarnings("deprecation") + @Override + public boolean eventReceived(BlockState state, World world, BlockPos pos, int eventID, int eventParam) { + super.eventReceived(state, world, pos, eventID, eventParam); + TileEntity tileentity = world.getTileEntity(pos); + return tileentity == null ? false : tileentity.receiveClientEvent(eventID, eventParam); + } + + @SuppressWarnings("deprecation") + @Override + public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { + if (state.getBlock() != newState.getBlock()) { + CustomTileEntity tileentity = (CustomTileEntity) world.getTileEntity(pos); + InventoryHelper.dropInventoryItems(world, pos, (CustomTileEntity) tileentity); + world.updateComparatorOutputLevel(pos, this); + super.onReplaced(state, world, pos, newState, isMoving); + } + } + + @Override + public boolean hasComparatorInputOverride(BlockState state) { + return true; + } + + @Override + public int getComparatorInputOverride(BlockState blockState, World world, BlockPos pos) { + CustomTileEntity tileentity = (CustomTileEntity) world.getTileEntity(pos); + return Container.calcRedstoneFromInventory(tileentity); + } + } + + public static class CustomTileEntity extends OxygenMakingTileEntity { + + public CustomTileEntity() { + super(ModInnet.OXYGEN_LOADER.get()); + } + + @Override + protected void drainSources() { + super.drainSources(); + OxygenUtil.drainSource(this.getItemHandler(), this.getOutputSourceSlot(), this.getOutputTank(), this.getTransferPerTick()); + } + + @Override + protected void fillSinks() { + super.fillSinks(); + OxygenUtil.fillSink(this.getItemHandler(), this.getOutputSinkSlot(), this.getOutputTank(), this.getTransferPerTick()); + } + + @Override + protected boolean onCanInsertItem(int index, ItemStack stack, Direction direction) { + if (index == this.getOutputSourceSlot()) { + return OxygenUtil.canExtract(stack); + } else if (index == this.getOutputSinkSlot()) { + return OxygenUtil.canReceive(stack); + } + + return super.onCanInsertItem(index, stack, direction); + } + + @Override + public boolean canExtractItem(int index, ItemStack stack, Direction direction) { + if (index == this.getOutputSourceSlot()) { + return !OxygenUtil.canExtract(stack); + } else if (index == this.getOutputSinkSlot()) { + return !OxygenUtil.canReceive(stack); + } + + return super.canExtractItem(index, stack, direction); + } + + @Override + protected void getSlotsForFace(Direction direction, List slots) { + super.getSlotsForFace(direction, slots); + slots.add(this.getOutputSourceSlot()); + slots.add(this.getOutputSinkSlot()); + } + + @Override + public Container createMenu(int id, PlayerInventory player) { + return new OxygenLoaderGui.GuiContainer(id, player, this); + } + + @Override + protected void createEnergyStorages(NamedComponentRegistry registry) { + super.createEnergyStorages(registry); + registry.put(this.createEnergyStorageCommon()); + } + + @Override + protected BooleanProperty getBlockActivatedProperty() { + return CustomBlock.ACTIAVATED; + } + + @Override + protected void createPowerSystems(PowerSystemRegistry map) { + super.createPowerSystems(map); + + map.put(new PowerSystemEnergyCommon(this) { + @Override + public int getBasePowerForOperation() { + return CustomTileEntity.this.getBasePowerForOperation(); + } + }); + } + + public int getBasePowerForOperation() { + return ENERGY_PER_TICK; + } + + @Override + public BossToolsRecipeType getRecipeType() { + return BossToolsRecipeTypes.OXYGENLOADER; + } + + @Override + protected int getInitialInventorySize() { + return super.getInitialInventorySize() + 2; + } + + public boolean isSourceSlot(int slot) { + return slot == this.getOutputSourceSlot() || super.isSourceSlot(slot); + } + + public boolean isSinkSlot(int slot) { + return slot == this.getOutputSinkSlot() || super.isSinkSlot(slot); + } + + public IOxygenStorage slotToOxygenTank(int slot) { + if (slot == this.getOutputSourceSlot() || slot == this.getOutputSinkSlot()) { + return this.getOutputTank(); + } else { + return super.slotToOxygenTank(slot); + } + } + + public ResourceLocation slotToTankName(int slot) { + if (slot == this.getOutputSourceSlot() || slot == this.getOutputSinkSlot()) { + return this.getOutputTankName(); + } else { + return super.slotToTankName(slot); + } + } + + public int getOutputSourceSlot() { + return SLOT_OUTPUT_SOURCE; + } + + public int getOutputSinkSlot() { + return SLOT_OUTPUT_SINK; + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/SolarPanelBlock.java b/src/main/java/net/mrscauthd/boss_tools/machines/SolarPanelBlock.java new file mode 100644 index 000000000..2b3cdf78c --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/SolarPanelBlock.java @@ -0,0 +1,164 @@ +package net.mrscauthd.boss_tools.machines; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +import net.minecraft.block.*; +import net.minecraft.block.material.Material; +import net.minecraft.block.material.PushReaction; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.LootContext; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.*; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; +import net.minecraft.world.gen.Heightmap; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.ToolType; +import net.minecraftforge.fml.network.NetworkHooks; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.gui.screens.solarpanel.SolarPanelGui; +import net.mrscauthd.boss_tools.machines.tile.GeneratorTileEntity; + +public class SolarPanelBlock { + public static final int ENERGY_PER_TICK = 5; + + public static class CustomBlock extends Block { + + public CustomBlock() { + super(Block.Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(5f, 1f).setLightLevel(s -> 1).harvestLevel(1).harvestTool(ToolType.PICKAXE).setRequiresTool()); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack itemstack, IBlockReader world, List list, ITooltipFlag flag) { + super.addInformation(itemstack, world, list, flag); + list.add(GaugeTextHelper.buildBlockTooltip(GaugeTextHelper.getGeneratingPerTickText(GaugeValueHelper.getEnergy(ENERGY_PER_TICK)))); + } + + @Override + public boolean propagatesSkylightDown(BlockState state, IBlockReader reader, BlockPos pos) { + return true; + } + + @Override + public PushReaction getPushReaction(BlockState state) { + return PushReaction.BLOCK; + } + + @Override + public List getDrops(BlockState state, LootContext.Builder builder) { + @SuppressWarnings("deprecation") + List dropsOriginal = super.getDrops(state, builder); + if (!dropsOriginal.isEmpty()) { + return dropsOriginal; + } else { + return Collections.singletonList(new ItemStack(this, 1)); + } + } + + @Override + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity entity, Hand hand, BlockRayTraceResult hit) { + if (entity instanceof ServerPlayerEntity) { + NetworkHooks.openGui((ServerPlayerEntity) entity, this.getContainer(state, world, pos), pos); + return ActionResultType.CONSUME; + } else { + return ActionResultType.SUCCESS; + } + } + + @Override + public INamedContainerProvider getContainer(BlockState state, World worldIn, BlockPos pos) { + TileEntity tileEntity = worldIn.getTileEntity(pos); + return tileEntity instanceof INamedContainerProvider ? (INamedContainerProvider) tileEntity : null; + } + + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new CustomTileEntity(); + } + + @SuppressWarnings("deprecation") + @Override + public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { + if (state.getBlock() != newState.getBlock()) { + CustomTileEntity tileentity = (CustomTileEntity) world.getTileEntity(pos); + InventoryHelper.dropInventoryItems(world, pos, (CustomTileEntity) tileentity); + world.updateComparatorOutputLevel(pos, this); + super.onReplaced(state, world, pos, newState, isMoving); + } + } + + @Override + public boolean hasComparatorInputOverride(BlockState state) { + return true; + } + + @Override + public int getComparatorInputOverride(BlockState blockState, World world, BlockPos pos) { + CustomTileEntity tileentity = (CustomTileEntity) world.getTileEntity(pos); + return Container.calcRedstoneFromInventory(tileentity); + } + + } + + public static class CustomTileEntity extends GeneratorTileEntity { + + public CustomTileEntity() { + super(ModInnet.SOLAR_PANEL.get()); + } + + @Override + public Container createMenu(int id, PlayerInventory player) { + return new SolarPanelGui.GuiContainer(id, player, this); + } + + protected int getGenerationInTick() { + return this.getMaxGeneration(); + } + + @Override + public int getMaxGeneration() { + return ENERGY_PER_TICK; + } + + @Override + protected boolean canGenerateEnergy() { + World world = this.getWorld(); + + return world.isDaytime() && world.getHeight(Heightmap.Type. MOTION_BLOCKING_NO_LEAVES, (int) Math.floor(this.getPos().getX()), (int) Math.floor(this.getPos().getZ())) <= Math.floor(this.getPos().getY()) + 1; + } + + @Override + protected void generateEnergy() { + this.generateEnergy(this.getGenerationInTick()); + } + + @Override + protected List getEjectDirections() { + List list = super.getEjectDirections(); + list.addAll(Arrays.stream(Direction.values()).filter(d -> d != Direction.UP).collect(Collectors.toList())); + return list; + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/WaterPump.java b/src/main/java/net/mrscauthd/boss_tools/machines/WaterPump.java new file mode 100644 index 000000000..f3e0ef88e --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/WaterPump.java @@ -0,0 +1,132 @@ +package net.mrscauthd.boss_tools.machines; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.HorizontalBlock; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.LootContext; +import net.minecraft.pathfinding.PathType; +import net.minecraft.state.DirectionProperty; +import net.minecraft.state.StateContainer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.*; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.network.NetworkHooks; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; +import net.mrscauthd.boss_tools.gauge.GaugeTextHelper; +import net.mrscauthd.boss_tools.machines.tile.WaterPumpTileEntity; + +import java.util.Collections; +import java.util.List; + +public class WaterPump extends Block { + + public static final DirectionProperty FACING = HorizontalBlock.HORIZONTAL_FACING; + + public WaterPump(Properties properties) { + super(properties); + this.setDefaultState(this.stateContainer.getBaseState().with(FACING, Direction.NORTH)); + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext context) { + Vector3d offset = state.getOffset(world, pos); + switch (state.get(FACING)) { + case SOUTH : + default : + return VoxelShapes.or(makeCuboidShape(5.5, 0, 10.5, 10.5, 1, 5.5), makeCuboidShape(6, 1, 10, 10, 13, 6), makeCuboidShape(5.5, 13, 10.5, 10.5, 16, 5.5), makeCuboidShape(6, 6, 15, 10, 10, 6), makeCuboidShape(5.5, 5.5, 16, 10.5, 10.5, 15)).withOffset(offset.x, offset.y, offset.z); + case NORTH : + return VoxelShapes.or(makeCuboidShape(5.5, 0, 10.5, 10.5, 1, 5.5), makeCuboidShape(6, 1, 10, 10, 13, 6), makeCuboidShape(5.5, 13, 10.5, 10.5, 16, 5.5), makeCuboidShape(6, 6, 1, 10, 10, 6), makeCuboidShape(5.5, 5.5, 1, 10.5, 10.5, 0)).withOffset(offset.x, offset.y, offset.z); + case EAST : + return VoxelShapes.or(makeCuboidShape(5.5, 0, 10.5, 10.5, 1, 5.5), makeCuboidShape(6, 1, 10, 10, 13, 6), makeCuboidShape(5.5, 13, 10.5, 10.5, 16, 5.5), makeCuboidShape(15, 6, 10, 10, 10, 6), makeCuboidShape(16, 5.5, 10.5, 15, 10.5, 5.5)).withOffset(offset.x, offset.y, offset.z); + case WEST : + return VoxelShapes.or(makeCuboidShape(5.5, 0, 10.5, 10.5, 1, 5.5), makeCuboidShape(6, 1, 10, 10, 13, 6), makeCuboidShape(5.5, 13, 10.5, 10.5, 16, 5.5), makeCuboidShape(1, 6, 6, 10, 10, 10), makeCuboidShape(0, 5.5, 5.5, 1, 10.5, 10.5)).withOffset(offset.x, offset.y, offset.z); + } + } + + @Override + public List getDrops(BlockState state, LootContext.Builder builder) { + @SuppressWarnings("deprecation") + List dropsOriginal = super.getDrops(state, builder); + if (!dropsOriginal.isEmpty()) { + return dropsOriginal; + } else { + return Collections.singletonList(new ItemStack(this, 1)); + } + } + + @Override + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity entity, Hand hand, BlockRayTraceResult hit) { + if (entity instanceof ServerPlayerEntity) { + NetworkHooks.openGui((ServerPlayerEntity) entity, this.getContainer(state, world, pos), pos); + return ActionResultType.CONSUME; + } else { + return ActionResultType.SUCCESS; + } + } + + @Override + public INamedContainerProvider getContainer(BlockState state, World worldIn, BlockPos pos) { + TileEntity tileEntity = worldIn.getTileEntity(pos); + return tileEntity instanceof INamedContainerProvider ? (INamedContainerProvider) tileEntity : null; + } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack itemstack, IBlockReader world, List list, ITooltipFlag flag) { + super.addInformation(itemstack, world, list, flag); + list.add(GaugeTextHelper.buildBlockTooltip(GaugeTextHelper.getTransferPerTickText(GaugeValueHelper.getFluid(WaterPumpTileEntity.TRANSFER_PER_TICK)))); + } + + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new WaterPumpTileEntity(); + } + + @Override + public boolean allowsMovement(BlockState state, IBlockReader worldIn, BlockPos pos, PathType type) { + return false; + } + + @Override + public BlockState rotate(BlockState state, Rotation rot) { + return state.with(FACING, rot.rotate(state.get(FACING))); + } + + @SuppressWarnings("deprecation") + @Override + public BlockState mirror(BlockState state, Mirror mirrorIn) { + return state.rotate(mirrorIn.toRotation(state.get(FACING))); + } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) { + builder.add(FACING); + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + return this.getDefaultState().with(FACING, context.getPlacementHorizontalFacing()); + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/tile/AbstractMachineTileEntity.java b/src/main/java/net/mrscauthd/boss_tools/machines/tile/AbstractMachineTileEntity.java new file mode 100644 index 000000000..a545b5057 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/tile/AbstractMachineTileEntity.java @@ -0,0 +1,567 @@ +package net.mrscauthd.boss_tools.machines.tile; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.stream.Collectors; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import org.apache.commons.lang3.ArrayUtils; + +import com.google.common.collect.Lists; +import com.google.common.primitives.Ints; + +import net.minecraft.block.BlockState; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.INBT; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.play.server.SUpdateTileEntityPacket; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.ITickableTileEntity; +import net.minecraft.tileentity.LockableLootTileEntity; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.INBTSerializable; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.energy.CapabilityEnergy; +import net.minecraftforge.energy.EnergyStorage; +import net.minecraftforge.energy.IEnergyStorage; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidTank; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.templates.FluidTank; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.ItemHandlerHelper; +import net.minecraftforge.items.wrapper.SidedInvWrapper; +import net.mrscauthd.boss_tools.capability.EnergyStorageBasic; +import net.mrscauthd.boss_tools.capability.IEnergyStorageHolder; +import net.mrscauthd.boss_tools.crafting.FluidIngredient; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; +import net.mrscauthd.boss_tools.gauge.IGaugeValue; + +public abstract class AbstractMachineTileEntity extends LockableLootTileEntity implements ISidedInventory, ITickableTileEntity, IEnergyStorageHolder { + + public static final String KEY_ACTIVATED = "activated"; + + private Map selectedPrimaries; + private Map energyStorages; + private final Map fluidHandlers; + private final Map powerSystems; + private NonNullList stacks = null; + private final LazyOptional[] itemHandlers; + + private boolean processedInThisTick = false; + + public AbstractMachineTileEntity(TileEntityType type) { + super(type); + + this.selectedPrimaries = new HashMap<>(); + + NamedComponentRegistry energyRegistry = new NamedComponentRegistry<>(); + this.createEnergyStorages(energyRegistry); + this.energyStorages = Collections.unmodifiableMap(energyRegistry); + + NamedComponentRegistry fluidRegistry = new NamedComponentRegistry<>(); + this.createFluidHandlers(fluidRegistry); + this.fluidHandlers = Collections.unmodifiableMap(fluidRegistry); + + PowerSystemRegistry powerSystemMap = new PowerSystemRegistry(); + this.createPowerSystems(powerSystemMap); + this.powerSystems = Collections.unmodifiableMap(powerSystemMap); + this.itemHandlers = SidedInvWrapper.create(this, Direction.values()); + this.createItemHandlers(); + this.stacks = NonNullList.withSize(this.getInitialInventorySize(), ItemStack.EMPTY); + } + + @Override + public ITextComponent getDefaultName() { + ResourceLocation registryName = this.getType().getRegistryName(); + return new TranslationTextComponent("container." + registryName.getNamespace() + "." + registryName.getPath()); + } + + protected void createItemHandlers() { + + } + + public boolean isPowerEnoughForOperation() { + return this.getPowerSystems().values().stream().allMatch(ps -> ps.isPowerEnoughForOperation()); + } + + /** + * + * @return null : fail on consume from any PowerSystem
+ * nonNull : each PowerSystem's consumed power + */ + @Nullable + public Map consumePowerForOperation() { + if (this.isPowerEnoughForOperation()) { + return this.getPowerSystems().values().stream().collect(Collectors.toMap(ps -> ps, ps -> ps.consumeForOperation())); + } else { + return null; + } + } + + public int getPowerPerTick(PowerSystem powerSystem, int base) { + return base; + } + + public int getPowerForOperation(PowerSystem powerSystem, int base) { + return base; + } + + protected int getInitialInventorySize() { + return this.getPowerSystems().values().stream().collect(Collectors.summingInt(ps -> ps.getUsingSlots())); + } + + @Override + public void read(BlockState blockState, CompoundNBT compound) { + super.read(blockState, compound); + + if (!this.checkLootAndRead(compound)) { + this.stacks = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + } + + ItemStackHelper.loadAllItems(compound, this.stacks); + + this.deserializeCompoents(this.getEnergyStorages(), compound.getCompound("energyStorages")); + this.deserializeCompoents(this.getFluidHandlers(), compound.getCompound("fluidHandlers")); + this.deserializeCompoents(this.getPowerSystems(), compound.getCompound("powerSystems")); + } + + public void deserializeCompoents(Map registry, CompoundNBT compound) { + for (Entry entry : registry.entrySet()) { + this.deserializeComponent(entry.getKey(), entry.getValue(), compound.get(entry.getKey().toString())); + } + } + + @SuppressWarnings("unchecked") + public void deserializeComponent(ResourceLocation name, T component, INBT nbt) { + if (component instanceof INBTSerializable) { + ((INBTSerializable) component).deserializeNBT(nbt); + } else if (component instanceof EnergyStorage) { + CapabilityEnergy.ENERGY.readNBT((EnergyStorage) component, null, nbt); + } else if (component instanceof FluidTank) { + CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.readNBT((FluidTank) component, null, nbt); + } + + } + + @Override + public CompoundNBT write(CompoundNBT compound) { + super.write(compound); + + if (!this.checkLootAndWrite(compound)) { + ItemStackHelper.saveAllItems(compound, this.stacks); + } + + compound.put("energyStorages", this.serializeComponents(this.getEnergyStorages())); + compound.put("fluidHandlers", this.serializeComponents(this.getFluidHandlers())); + compound.put("powerSystems", this.serializeComponents(this.getPowerSystems())); + + return compound; + } + + public CompoundNBT serializeComponents(Map registry) { + CompoundNBT compound = new CompoundNBT(); + + for (Entry entry : registry.entrySet()) { + compound.put(entry.getKey().toString(), this.serializeComponent(entry.getKey(), entry.getValue())); + } + + return compound; + } + + @SuppressWarnings("unchecked") + public INBT serializeComponent(ResourceLocation name, T component) { + if (component instanceof INBTSerializable) { + return ((INBTSerializable) component).serializeNBT(); + } else if (component instanceof EnergyStorage) { + return CapabilityEnergy.ENERGY.writeNBT((EnergyStorage) component, null); + } else if (component instanceof FluidTank) { + return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.writeNBT((FluidTank) component, null); + } + + return null; + } + + @Override + public int getSizeInventory() { + return stacks.size(); + } + + @Override + protected NonNullList getItems() { + return this.stacks; + } + + @Override + protected void setItems(NonNullList stacks) { + this.stacks = stacks; + } + + protected void getSlotsForFace(Direction direction, List slots) { + this.getPowerSystems().values().stream().forEach(ps -> ps.getSlotsForFace(direction, slots)); + } + + @Override + public int[] getSlotsForFace(Direction side) { + List slots = new ArrayList<>(); + this.getSlotsForFace(side, slots); + return Ints.toArray(slots); + } + + @Override + public boolean isItemValidForSlot(int index, ItemStack stack) { + return this.onCanInsertItem(index, stack, null); + } + + @Override + public final boolean canInsertItem(int index, ItemStack stack, @Nullable Direction direction) { + boolean result = this.onCanInsertItem(index, stack, direction); + + // Check required because Hopper, it can ignore inventory stack limit + if (result == true) { + ItemStack stackInSlot = this.getStackInSlot(index); + + if (!stackInSlot.isEmpty() && ItemHandlerHelper.canItemStacksStack(stackInSlot, stack)) { + int limit = Math.min(stack.getMaxStackSize(), this.getInventoryStackLimit()); + if (stackInSlot.getCount() + stack.getCount() > limit) { + return false; + } + } + } + + return result; + } + + protected boolean onCanInsertItem(int index, ItemStack stack, @Nullable Direction direction) { + return this.getPowerSystems().values().stream().anyMatch(ps -> ps.canInsertItem(direction, index, stack)); + } + + @Override + public boolean canExtractItem(int index, ItemStack stack, Direction direction) { + return this.getPowerSystems().values().stream().anyMatch(ps -> ps.canExtractItem(direction, index, stack)); + } + + public LazyOptional getCapabilityItemHandler(Capability capability, @Nullable Direction facing) { + if (facing != null) { + return this.itemHandlers[facing.ordinal()].cast(); + } else { + return super.getCapability(capability, facing); + } + + } + + public LazyOptional getCapabilityEnergy(Capability capability, @Nullable Direction facing) { + IEnergyStorage energyStorage = this.getPrimaryEnergyStorage(); + + if (energyStorage != null) { + return LazyOptional.of(() -> energyStorage).cast(); + } + + return LazyOptional.empty(); + } + + public LazyOptional getCapabilityFluidHandler(Capability capability, @Nullable Direction facing) { + IFluidHandler fluidHandler = this.getPrimaryFluidHandler(); + + if (fluidHandler != null) { + return LazyOptional.of(() -> fluidHandler).cast(); + } + + return LazyOptional.empty(); + } + + @Override + public LazyOptional getCapability(Capability capability, @Nullable Direction facing) { + if (!this.removed) { + if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + LazyOptional optional = this.getCapabilityItemHandler(capability, facing); + if (optional != null && optional.isPresent()) { + return optional; + } + } else if (capability == CapabilityEnergy.ENERGY) { + LazyOptional optional = this.getCapabilityEnergy(capability, facing); + if (optional != null && optional.isPresent()) { + return optional; + } + } else if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { + LazyOptional optional = this.getCapabilityFluidHandler(capability, facing); + if (optional != null && optional.isPresent()) { + return optional; + } + } + + for (PowerSystem powerSystem : this.getPowerSystems().values()) { + LazyOptional optional = powerSystem.getCapability(capability, facing); + if (optional != null && optional.isPresent()) { + return optional; + } + } + } + + return super.getCapability(capability, facing); + } + + @Override + public void remove() { + super.remove(); + Arrays.stream(this.itemHandlers).forEach(h -> h.invalidate()); + } + + @Override + public void tick() { + World world = this.getWorld(); + + if (world.isRemote()) { + return; + } + + this.onTickProcessingPre(); + + if (this.canTickProcessing()) { + this.tickProcessing(); + } + + this.onTickProcessingPost(); + + this.updatePowerSystem(); + + this.updateActivated(); + this.refreshBlockActivatedChanged(); + } + + protected void updatePowerSystem() { + this.getPowerSystems().values().forEach(ps -> ps.update()); + } + + protected BooleanProperty getBlockActivatedProperty() { + return BlockStateProperties.LIT; + } + + protected void refreshBlockActivatedChanged() { + BooleanProperty property = this.getBlockActivatedProperty(); + + if (property == null) { + return; + } + + World world = this.getWorld(); + BlockPos pos = this.getPos(); + BlockState state = this.getBlockState(); + boolean activated = this.isActivated(); + + if (state.hasProperty(property) && state.get(property).booleanValue() != activated) { + world.setBlockState(pos, state.with(property, activated), 3); + } + } + + protected void onTickProcessingPre() { + this.processedInThisTick = false; + } + + protected boolean canTickProcessing() { + return true; + } + + protected abstract void tickProcessing(); + + protected void onTickProcessingPost() { + + } + + public void updateActivated() { + this.setActivated(this.canActivated()); + } + + protected boolean canActivated() { + List powerSystems = Lists.newArrayList(this.getPowerSystems().values()); + + if (powerSystems.size() == 1) { + PowerSystem primary = powerSystems.get(0); + + if (primary instanceof PowerSystemFuel) { + return primary.isPowerEnoughForOperation(); + } + } + + return this.processedInThisTick; + } + + @Nonnull + protected void createPowerSystems(PowerSystemRegistry map) { + + } + + public Map getPowerSystems() { + return this.powerSystems; + } + + @Nullable + protected void createFluidHandlers(NamedComponentRegistry registry) { + + } + + public Map getFluidHandlers() { + return this.fluidHandlers; + } + + public IFluidHandler getPrimaryFluidHandler() { + return this.getPrimaryComponent(this.getFluidHandlers()); + } + + @Nullable + protected void createEnergyStorages(NamedComponentRegistry registry) { + + } + + public Map getEnergyStorages() { + return this.energyStorages; + } + + @Nullable + public IEnergyStorage getPrimaryEnergyStorage() { + return this.getPrimaryComponent(this.getEnergyStorages()); + } + + protected IEnergyStorage createEnergyStorageCommon() { + return new EnergyStorageBasic(this, 9000, 200, 200); + } + + @SuppressWarnings("unchecked") + @Nonnull + public T getPrimaryComponent(Map map) { + return (T) this.selectedPrimaries.computeIfAbsent(map, k -> this.selectPrimaryComponent((Map) k)); + } + + protected T selectPrimaryComponent(Map map) { + if (map.containsKey(NamedComponentRegistry.UNNAMED)) { + return map.get(NamedComponentRegistry.UNNAMED); + } else { + return map.values().stream().findFirst().orElse(null); + } + } + + public IItemHandlerModifiable getItemHandler() { + return (IItemHandlerModifiable) this.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null).resolve().get(); + } + + public boolean isActivated() { + return this.getTileData().getBoolean(KEY_ACTIVATED); + } + + protected void setActivated(boolean activated) { + if (this.isActivated() != activated) { + this.getTileData().putBoolean(KEY_ACTIVATED, activated); + this.markDirty(); + } + } + + @Override + public void markDirty() { + super.markDirty(); + + World world = this.getWorld(); + if (world instanceof ServerWorld) { + ServerWorld serverWorld = (ServerWorld) world; + serverWorld.getChunkProvider().markBlockChanged(this.getPos()); + } + } + + @Override + public SUpdateTileEntityPacket getUpdatePacket() { + return new SUpdateTileEntityPacket(this.pos, 0, this.getUpdateTag()); + } + + @Override + public CompoundNBT getUpdateTag() { + return this.write(new CompoundNBT()); + } + + @Override + public void onDataPacket(NetworkManager net, SUpdateTileEntityPacket pkt) { + this.read(this.getBlockState(), pkt.getNbtCompound()); + } + + @Override + public void onEnergyChanged(IEnergyStorage energyStorage, int energyDelta) { + this.markDirty(); + } + + protected boolean isProcessedInThisTick() { + return processedInThisTick; + } + + protected void setProcessedInThisTick() { + this.processedInThisTick = true; + } + + public abstract boolean hasSpaceInOutput(); + + public boolean nullOrMatch(@Nullable Direction direction, Direction... matches) { + return direction == null || ArrayUtils.contains(matches, direction); + } + + public boolean hasSpaceInOutput(ItemStack recipeOutput, ItemStack output) { + if (output.isEmpty()) { + return true; + } else if (ItemHandlerHelper.canItemStacksStack(output, recipeOutput)) { + int limit = Math.min(recipeOutput.getMaxStackSize(), this.getInventoryStackLimit()); + return (output.getCount() + recipeOutput.getCount()) <= limit; + } + + return false; + } + + public boolean hasSpaceInOutput(FluidIngredient recipeOutput, IFluidTank tank) { + return this.hasSpaceInOutput(recipeOutput, tank.getFluid(), tank.getCapacity()); + } + + public boolean hasSpaceInOutput(FluidIngredient recipeOutput, FluidStack output, int capacity) { + if (output.isEmpty()) { + return true; + } else if (recipeOutput.testFluid(output.getFluid())) { + return (output.getAmount() + recipeOutput.getAmount()) <= capacity; + } + + return false; + } + + public List getFluidHandlerGaugeValues(IFluidHandler fluidHandler) { + List list = new ArrayList<>(); + + for (int i = 0; i < fluidHandler.getTanks(); i++) { + list.add(GaugeValueHelper.getFluid(fluidHandler.getFluidInTank(i), fluidHandler.getTankCapacity(i))); + } + + return list; + } + + public List getGaugeValues() { + List list = new ArrayList<>(); + this.getPowerSystems().values().stream().map(PowerSystem::getGaugeValues).forEach(list::addAll); + return list; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/tile/GeneratorTileEntity.java b/src/main/java/net/mrscauthd/boss_tools/machines/tile/GeneratorTileEntity.java new file mode 100644 index 000000000..1746df842 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/tile/GeneratorTileEntity.java @@ -0,0 +1,263 @@ +package net.mrscauthd.boss_tools.machines.tile; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.energy.CapabilityEnergy; +import net.minecraftforge.energy.IEnergyStorage; +import net.mrscauthd.boss_tools.capability.EnergyStorageExtractaOnly; + +public abstract class GeneratorTileEntity extends AbstractMachineTileEntity { + + public static final String KEY_GENERATING = "generating"; + + private IEnergyStorage internalEnergyStorage; + private IEnergyStorage energyStorage; + + private int generatingCache; + + protected GeneratorTileEntity(TileEntityType type) { + super(type); + } + + @Override + protected void onTickProcessingPost() { + super.onTickProcessingPost(); + + this.setGenerating(this.generatingCache); + this.generatingCache = 0; + } + + @Override + protected void tickProcessing() { + if (this.canGenerateEnergy() && this.hasSpaceInOutput() && this.consumePowerForOperation() != null) { + this.generateEnergy(); + } + + this.ejectEnergy(); + } + + protected abstract boolean canGenerateEnergy(); + + protected abstract void generateEnergy(); + + protected void generateEnergy(int energy) { + this.generatingCache += this.getInternalEnergyStorage().receiveEnergy(energy, false); + this.setProcessedInThisTick(); + } + + @Override + protected void createEnergyStorages(NamedComponentRegistry registry) { + super.createEnergyStorages(registry); + + this.internalEnergyStorage = this.createGeneratingEnergyStorage(); + this.energyStorage = new EnergyStorageExtractaOnly(this.internalEnergyStorage, this.internalEnergyStorage.getMaxEnergyStored()); + registry.put(this.internalEnergyStorage); + } + + protected IEnergyStorage createGeneratingEnergyStorage() { + return this.createEnergyStorageCommon(); + } + + public class EjectingTuple { + public final IEnergyStorage energyStorage; + public int receivable; + public int receiving; + + public EjectingTuple(IEnergyStorage energyStorage) { + this.energyStorage = energyStorage; + } + + public boolean isFull() { + return this.receiving >= this.receivable; + } + + } + + protected void ejectEnergy() { + IEnergyStorage source = this.getGeneratingEnergyStorage(); + int ejectingEnergy = source.extractEnergy(this.getEjectingExtractEnergy(), true); + List sinks = this.findNearEnergyStorages(); + List tuples = new ArrayList<>(); + + for (int i = 0; i < sinks.size(); i++) { + IEnergyStorage sink = sinks.get(i); + EjectingTuple e = new EjectingTuple(sink); + e.receivable = sink.receiveEnergy(ejectingEnergy, true); + e.receiving = 0; + tuples.add(e); + } + + ejectingEnergy = this.calculateBalance(ejectingEnergy, tuples); + ejectingEnergy = this.calculateRemained(ejectingEnergy, tuples); + + for (EjectingTuple tuple : tuples) { + int extracted = source.extractEnergy(tuple.receiving, false); + tuple.energyStorage.receiveEnergy(extracted, false); + } + +// System.out.println(tuples.stream().map(t -> t.receiving).collect(Collectors.toList()).toString() + ", remain=" + ejectingEnergy); + } + + /** + * provide remain energy to not full tuples + * @param energy + * @param tuples + * @return + */ + private int calculateRemained(int energy, List tuples) { + int tuplesSize = tuples.size(); + int fullCount = (int) tuples.stream().filter(EjectingTuple::isFull).count(); + int remainCount = tuplesSize - fullCount; + + if (remainCount > 0) { + int divided = (int) Math.ceil(energy / (double) remainCount); + + for (int i = 0; i < tuplesSize; i++) { + EjectingTuple tuple = tuples.get(i); + + if (!tuple.isFull()) { + if (energy <= 0) { + break; + } + + int give = Math.min(divided, energy); + tuple.receiving += give; + energy -= give; + int over = tuple.receiving - tuple.receivable; + + if (over >= 0) { + energy += over; + } + } + } + } + + return energy; + } + + /** + * calculate possible same receiving until each tuple canRecive + * @param energy + * @param tuples + * @return + */ + private int calculateBalance(int energy, List tuples) { + List orderedReceivables = new ArrayList(tuples); + orderedReceivables.sort((o1, o2) -> o1.receivable - o2.receivable); + + for (int i = 0; i < orderedReceivables.size(); i++) { + int amount = i == 0 ? orderedReceivables.get(i).receivable : orderedReceivables.get(i).receivable - orderedReceivables.get(i - 1).receivable; + + if (amount <= 0) { + continue; + } + + int amountSum = 0; + int receiveCount = 0; + + for (int j = 0; j < tuples.size(); j++) { + if (!tuples.get(j).isFull()) { + amountSum += amount; + receiveCount++; + } + } + + if (receiveCount == 0) { + break; + } + + int give = 0; + + if (amountSum > energy) { + give = Math.floorDiv(energy, receiveCount); + } else { + give = amount; + } + + for (int j = 0; j < tuples.size(); j++) { + EjectingTuple tuple = tuples.get(j); + if (!tuple.isFull()) { + tuple.receiving += give; + energy -= give; + int over = tuple.receiving - tuple.receivable; + + if (over >= 0) { + energy += over; + } + } + } + } + + return energy; + } + + protected List findNearEnergyStorages() { + List energyStorages = new ArrayList<>(); + + for (Direction direction : this.getEjectDirections()) { + TileEntity tileEntity = world.getTileEntity(pos.offset(direction)); + + if (tileEntity != null) { + LazyOptional capability = tileEntity.getCapability(CapabilityEnergy.ENERGY, direction.getOpposite()); + + if (capability != null && capability.isPresent()) { + energyStorages.add(capability.resolve().get()); + } + + } + + } + + return energyStorages; + } + + protected int getEjectingExtractEnergy() { + return this.getMaxGeneration(); + } + + protected List getEjectDirections() { + return new ArrayList<>(); + } + + @Override + public boolean hasSpaceInOutput() { + return this.getInternalEnergyStorage().receiveEnergy(1, true) > 0; + } + + @Override + public IEnergyStorage getPrimaryEnergyStorage() { + return this.getGeneratingEnergyStorage(); + } + + protected IEnergyStorage getInternalEnergyStorage() { + return this.internalEnergyStorage; + } + + public IEnergyStorage getGeneratingEnergyStorage() { + return this.energyStorage; + } + + public int getGenerating() { + return this.getTileData().getInt(KEY_GENERATING); + } + + public void setGenerating(int generating) { + generating = Math.max(generating, 0); + + if (this.getGenerating() != generating) { + this.getTileData().putInt(KEY_GENERATING, generating); + this.markDirty(); + } + } + + public double getGeneratingRatio() { + return (double) this.getGenerating() / (double) this.getMaxGeneration(); + } + + public abstract int getMaxGeneration(); +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/tile/ItemStackToItemStackTileEntity.java b/src/main/java/net/mrscauthd/boss_tools/machines/tile/ItemStackToItemStackTileEntity.java new file mode 100644 index 000000000..7982aa6bc --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/tile/ItemStackToItemStackTileEntity.java @@ -0,0 +1,206 @@ +package net.mrscauthd.boss_tools.machines.tile; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.mrscauthd.boss_tools.crafting.ItemStackToItemStackRecipe; +import net.mrscauthd.boss_tools.crafting.ItemStackToItemStackRecipeType; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; +import net.mrscauthd.boss_tools.gauge.IGaugeValue; +import net.mrscauthd.boss_tools.inventory.StackCacher; + +public abstract class ItemStackToItemStackTileEntity extends AbstractMachineTileEntity { + + public static final int SLOT_INGREDIENT = 0; + public static final int SLOT_OUTPUT = 1; + + public static final String KEY_TIMER = "timer"; + public static final String KEY_MAXTIMER = "maxTimer"; + + private StackCacher itemStackCacher; + private ItemStackToItemStackRecipe cachedRecipe = null; + + public ItemStackToItemStackTileEntity(TileEntityType type) { + super(type); + + this.itemStackCacher = new StackCacher(); + this.cachedRecipe = null; + } + + @Override + public List getGaugeValues() { + List list = super.getGaugeValues(); + + if (this.cachedRecipe != null) { + list.add(this.getCookTimeGaugeValue()); + } + + return list; + } + + public IGaugeValue getCookTimeGaugeValue() { + return GaugeValueHelper.getCookTime(this.getTimer(), this.getMaxTimer()); + } + + @Override + protected int getInitialInventorySize() { + return super.getInitialInventorySize() + 2; + } + + protected void getSlotsForFace(Direction direction, List slots) { + super.getSlotsForFace(direction, slots); + + if (direction == Direction.UP) { + slots.add(this.getSlotIngredient()); + } else if (direction == Direction.DOWN) { + slots.add(this.getSlotOutput()); + } + } + + @Override + protected boolean onCanInsertItem(int index, ItemStack stack, @Nullable Direction direction) { + if (index == this.getSlotIngredient() && this.nullOrMatch(direction, Direction.UP)) { + return this.getRecipeType().findFirst(this.getWorld(), r -> r.test(stack)) != null; + } else if (index == this.getSlotOutput() && direction == null) { + return true; + } + + return super.onCanInsertItem(index, stack, direction); + } + + @Override + public boolean canExtractItem(int index, ItemStack stack, Direction direction) { + if (index == this.getSlotOutput() && direction == Direction.DOWN) { + return true; + } + + return super.canExtractItem(index, stack, direction); + } + + @Override + protected void tickProcessing() { + this.cookIngredient(); + } + + protected ItemStackToItemStackRecipe cacheRecipe() { + ItemStack itemStack = this.getStackInSlot(this.getSlotIngredient()); + + if (itemStack == null || itemStack.isEmpty()) { + this.itemStackCacher.set(itemStack); + this.cachedRecipe = null; + this.setMaxTimer(0); + } else if (!this.itemStackCacher.test(itemStack)) { + this.itemStackCacher.set(itemStack); + this.cachedRecipe = this.getRecipeType().findFirst(this.getWorld(), r -> r.test(itemStack)); + + if (this.cachedRecipe != null) { + this.setMaxTimer(this.cachedRecipe.getCookTime()); + } else { + this.setMaxTimer(0); + } + } + + return this.cachedRecipe; + } + + @Override + public boolean hasSpaceInOutput() { + ItemStackToItemStackRecipe cacheRecipe = this.cacheRecipe(); + return cacheRecipe != null && this.hasSpaceInOutput(cacheRecipe.getOutput()); + } + + public boolean hasSpaceInOutput(ItemStack recipeOutput) { + ItemStack output = this.getItemHandler().getStackInSlot(this.getSlotOutput()); + return hasSpaceInOutput(recipeOutput, output); + } + + protected boolean resetTimer() { + if (this.getTimer() > 0) { + this.setTimer(0); + return true; + } else { + return false; + } + } + + public abstract ItemStackToItemStackRecipeType getRecipeType(); + + protected void onCooking() { + this.setTimer(this.getTimer() + 1); + this.setProcessedInThisTick(); + } + + protected void onCantCooking() { + this.setTimer(this.getTimer() - 1); + } + + protected void cookIngredient() { + ItemStackToItemStackRecipe recipe = this.cacheRecipe(); + + if (recipe != null) { + ItemStack recipeOutput = recipe.getOutput(); + + if (this.hasSpaceInOutput(recipeOutput)) { + if (this.consumePowerForOperation() != null) { + this.onCooking(); + + if (this.getTimer() >= this.getMaxTimer()) { + IItemHandlerModifiable itemHandler = this.getItemHandler(); + itemHandler.insertItem(this.getSlotOutput(), recipeOutput.copy(), false); + itemHandler.extractItem(this.getSlotIngredient(), 1, false); + this.setTimer(0); + } + } else { + this.onCantCooking(); + } + } else { + this.resetTimer(); + } + } else { + this.resetTimer(); + } + } + + public int getTimer() { + return this.getTileData().getInt(KEY_TIMER); + } + + public void setTimer(int timer) { + timer = Math.max(timer, 0); + + if (this.getTimer() != timer) { + this.getTileData().putInt(KEY_TIMER, timer); + this.markDirty(); + } + } + + public int getMaxTimer() { + return this.getTileData().getInt(KEY_MAXTIMER); + } + + public void setMaxTimer(int maxTimer) { + maxTimer = Math.max(maxTimer, 0); + + if (this.getMaxTimer() != maxTimer) { + this.getTileData().putInt(KEY_MAXTIMER, maxTimer); + this.markDirty(); + } + } + + public double getTimerRatio() { + return (double) this.getTimer() / (double) this.getMaxTimer(); + } + + public int getSlotIngredient() { + return SLOT_INGREDIENT; + } + + public int getSlotOutput() { + return SLOT_OUTPUT; + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/tile/NamedComponentRegistry.java b/src/main/java/net/mrscauthd/boss_tools/machines/tile/NamedComponentRegistry.java new file mode 100644 index 000000000..0135ad3cb --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/tile/NamedComponentRegistry.java @@ -0,0 +1,19 @@ +package net.mrscauthd.boss_tools.machines.tile; + +import java.util.LinkedHashMap; + +import net.minecraft.util.ResourceLocation; +import net.mrscauthd.boss_tools.BossToolsMod; + +public class NamedComponentRegistry extends LinkedHashMap { + public static final ResourceLocation UNNAMED = new ResourceLocation(BossToolsMod.ModId, "unnmaed"); + private static final long serialVersionUID = 1L; + + public void put(T value) { + if (this.containsKey(UNNAMED)) { + throw new IllegalArgumentException("UNNAMED component is already added"); + } + + this.put(UNNAMED, value); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/tile/OxygenMakingTileEntity.java b/src/main/java/net/mrscauthd/boss_tools/machines/tile/OxygenMakingTileEntity.java new file mode 100644 index 000000000..fa720cfe8 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/tile/OxygenMakingTileEntity.java @@ -0,0 +1,288 @@ +package net.mrscauthd.boss_tools.machines.tile; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.block.BlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; +import net.minecraftforge.fluids.capability.templates.FluidTank; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.capability.CapabilityOxygen; +import net.mrscauthd.boss_tools.capability.IOxygenStorage; +import net.mrscauthd.boss_tools.capability.IOxygenStorageHolder; +import net.mrscauthd.boss_tools.capability.OxygenStorage; +import net.mrscauthd.boss_tools.compat.CompatibleManager; +import net.mrscauthd.boss_tools.compat.mekanism.MekanismHelper; +import net.mrscauthd.boss_tools.compat.mekanism.OxygenStorageGasAdapter; +import net.mrscauthd.boss_tools.crafting.BossToolsRecipeType; +import net.mrscauthd.boss_tools.crafting.OxygenMakingRecipeAbstract; +import net.mrscauthd.boss_tools.fluid.FluidUtil2; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; +import net.mrscauthd.boss_tools.gauge.IGaugeValue; +import net.mrscauthd.boss_tools.inventory.StackCacher; + +public abstract class OxygenMakingTileEntity extends AbstractMachineTileEntity { + public static final int TANK_CAPACITY = 3000; + public static final int TRANSFER_PER_TICK = 256; + public static final ResourceLocation TANK_INPUT = new ResourceLocation(BossToolsMod.ModId, "input"); + public static final ResourceLocation TANK_OUTPUT = new ResourceLocation(BossToolsMod.ModId, "output"); + public static final int SLOT_INPUT_SOURCE = 0; + public static final int SLOT_INPUT_SINK = 1; + + private FluidTank inputTank; + private OxygenStorage outputTank; + + private StackCacher recipeCacher; + private OxygenMakingRecipeAbstract cachedRecipe; + + public OxygenMakingTileEntity(TileEntityType type) { + super(type); + + this.recipeCacher = new StackCacher(); + this.cachedRecipe = null; + } + + @Override + public void read(BlockState blockState, CompoundNBT compound) { + super.read(blockState, compound); + + CapabilityOxygen.OXYGEN.readNBT(this.getOutputTank(), null, compound.getCompound("outputTank")); + } + + @Override + public CompoundNBT write(CompoundNBT compound) { + super.write(compound); + + compound.put("outputTank", CapabilityOxygen.OXYGEN.writeNBT(this.getOutputTank(), null)); + + return compound; + } + + @Override + public List getGaugeValues() { + List list = super.getGaugeValues(); + + if (!CompatibleManager.MEKANISM.isLoaded()) { + list.add(GaugeValueHelper.getOxygen(this.getOutputTank())); + } + + return list; + } + + @Override + protected void createFluidHandlers(NamedComponentRegistry registry) { + super.createFluidHandlers(registry); + this.inputTank = (FluidTank) registry.computeIfAbsent(this.getInputTankName(), k -> this.creatFluidTank(k)); + this.outputTank = this.createOxygenTank(this.getOutputTankName()); + } + + protected int getInitialTankCapacity(ResourceLocation name) { + return TANK_CAPACITY; + } + + protected FluidTank creatFluidTank(ResourceLocation name) { + return new FluidTank(this.getInitialTankCapacity(name)) { + @Override + protected void onContentsChanged() { + super.onContentsChanged(); + OxygenMakingTileEntity.this.markDirty(); + } + }; + } + + protected OxygenStorage createOxygenTank(ResourceLocation name) { + return new OxygenStorage(new IOxygenStorageHolder() { + @Override + public void onOxygenChanged(IOxygenStorage oxygenStorage, int oxygenDelta) { + OxygenMakingTileEntity.this.markDirty(); + } + }, this.getInitialTankCapacity(name)); + } + + @Override + protected void tickProcessing() { + this.drainSources(); + this.consumeIngredients(); + this.fillSinks(); + } + + public boolean consumeIngredients() { + OxygenMakingRecipeAbstract recipe = this.cacheRecipe(); + + if (recipe != null) { + int oxygen = recipe.getOxygen(); + + if (this.hasSpaceInOutput(oxygen)) { + if (this.consumePowerForOperation() != null) { + this.getInputTank().drain(recipe.getInput().getAmount(), FluidAction.EXECUTE); + this.getOutputTank().receiveOxygen(oxygen, false); + this.setProcessedInThisTick(); + return true; + } + } + } + + return false; + } + + protected void drainSources() { + FluidUtil2.drainSource(this.getItemHandler(), this.getInputSourceSlot(), this.getInputTank(), this.getTransferPerTick()); + } + + protected void fillSinks() { + FluidUtil2.fillSink(this.getItemHandler(), this.getInputSinkSlot(), this.getInputTank(), this.getTransferPerTick()); + } + + @Override + public LazyOptional getCapabilityFluidHandler(Capability capability, @Nullable Direction facing) { + return LazyOptional.of(this::getInputTank).cast(); + } + + @Override + public LazyOptional getCapability(Capability capability, Direction facing) { + if (CompatibleManager.MEKANISM.isLoaded()) { + if (capability == MekanismHelper.getGasHandlerCapability()) { + return LazyOptional.of(() -> new OxygenStorageGasAdapter(this.getOutputTank(), true, true)).cast(); + } + } + + return super.getCapability(capability, facing); + } + + @Override + protected void getSlotsForFace(Direction direction, List slots) { + super.getSlotsForFace(direction, slots); + slots.add(this.getInputSourceSlot()); + } + + @Override + protected boolean onCanInsertItem(int index, ItemStack stack, Direction direction) { + if (index == this.getInputSourceSlot()) { + return FluidUtil2.canDrain(stack); + } else if (index == this.getInputSinkSlot()) { + FluidTank tank = this.slotToFluidTank(index); + return FluidUtil2.canFill(stack, tank.getFluid().getFluid()); + } + + return super.onCanInsertItem(index, stack, direction); + } + + @Override + public boolean canExtractItem(int index, ItemStack stack, Direction direction) { + if (index == this.getInputSourceSlot()) { + return !FluidUtil2.canDrain(stack); + } else if (index == this.getInputSinkSlot()) { + FluidTank tank = this.slotToFluidTank(index); + return !FluidUtil2.canFill(stack, tank.getFluid().getFluid()); + } + + return super.canExtractItem(index, stack, direction); + } + + @Override + public boolean hasSpaceInOutput() { + OxygenMakingRecipeAbstract recipe = this.cacheRecipe(); + return recipe != null && this.hasSpaceInOutput(recipe.getOxygen()); + } + + public boolean hasSpaceInOutput(int oxygen) { + return hasSpaceInOutput(oxygen, this.getOutputTank()); + } + + public boolean hasSpaceInOutput(int oxygen, IOxygenStorage storage) { + return (oxygen + storage.getOxygenStored()) <= storage.getMaxOxygenStored(); + } + + public OxygenMakingRecipeAbstract cacheRecipe() { + FluidStack fluidStack = this.getInputTank().getFluid(); + + if (fluidStack.isEmpty()) { + this.recipeCacher.set(fluidStack); + this.cachedRecipe = null; + } else if (!this.recipeCacher.test(fluidStack)) { + this.recipeCacher.set(fluidStack); + this.cachedRecipe = this.getRecipeType().findFirst(this.getWorld(), r -> r.test(fluidStack)); + } + + return this.cachedRecipe; + } + + public abstract BossToolsRecipeType getRecipeType(); + + @Override + protected int getInitialInventorySize() { + return super.getInitialInventorySize() + 2; + } + + @Override + public int getInventoryStackLimit() { + return 1; + } + + public int getInputSourceSlot() { + return SLOT_INPUT_SOURCE; + } + + public int getInputSinkSlot() { + return SLOT_INPUT_SINK; + } + + public boolean isSourceSlot(int slot) { + return slot == this.getInputSourceSlot(); + } + + public boolean isSinkSlot(int slot) { + return slot == this.getInputSinkSlot(); + } + + public FluidTank slotToFluidTank(int slot) { + if (slot == this.getInputSourceSlot() || slot == this.getInputSinkSlot()) { + return this.getInputTank(); + } else { + return null; + } + } + + public IOxygenStorage slotToOxygenTank(int slot) { + return null; + } + + public ResourceLocation slotToTankName(int slot) { + if (slot == this.getInputSourceSlot() || slot == this.getInputSinkSlot()) { + return this.getInputTankName(); + } else { + return null; + } + } + + public ResourceLocation getInputTankName() { + return TANK_INPUT; + } + + public FluidTank getInputTank() { + return this.inputTank; + } + + public ResourceLocation getOutputTankName() { + return TANK_OUTPUT; + } + + public IOxygenStorage getOutputTank() { + return this.outputTank; + } + + public int getTransferPerTick() { + return TRANSFER_PER_TICK; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystem.java b/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystem.java new file mode 100644 index 000000000..bce91fe29 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystem.java @@ -0,0 +1,132 @@ +package net.mrscauthd.boss_tools.machines.tile; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.INBTSerializable; +import net.minecraftforge.common.util.LazyOptional; +import net.mrscauthd.boss_tools.gauge.IGaugeValue; + +public abstract class PowerSystem implements INBTSerializable { + private final AbstractMachineTileEntity tileEntity; + + public PowerSystem(AbstractMachineTileEntity tileEntity) { + this.tileEntity = tileEntity; + } + + public List getGaugeValues() { + return new ArrayList<>(); + } + + public int getPowerPerTick() { + int base = this.getBasePowerPerTick(); + return this.getTileEntity().getPowerPerTick(this, base); + } + + public int getPowerForOperation() { + int base = this.getBasePowerForOperation(); + return this.getTileEntity().getPowerForOperation(this, base); + } + + public boolean isPowerEnoughForOperation() { + int require = this.getPowerPerTick() + this.getPowerForOperation(); + return this.extract(require, true) >= require; + } + + public int consumeForOperation() { + if (this.isPowerEnoughForOperation()) { + return this.consume(this.getPowerForOperation()); + } else { + return 0; + } + } + + public int getUsingSlots() { + return 0; + } + + public abstract int getBasePowerPerTick(); + + public abstract int getBasePowerForOperation(); + + public abstract int getStored(); + + public abstract int getCapacity(); + + public double getStoredRatio() { + int capacity = this.getCapacity(); + return capacity > 0 ? ((double) this.getStored() / (double) capacity) : 0; + } + + public abstract int receive(int amount, boolean simulate); + + public abstract int extract(int amount, boolean simulate); + + @Override + public void deserializeNBT(CompoundNBT compound) { + + } + + @Override + public CompoundNBT serializeNBT() { + return new CompoundNBT(); + } + + /** + * + * @return complete extract energy for operation + */ + public int consume(int amount) { + if (this.extract(amount, true) == amount) { + return this.extract(amount, false); + } else { + return 0; + } + } + + public boolean feed(boolean spareForNextTick) { + return false; + } + + public void getSlotsForFace(Direction direction, List slots) { + + } + + public boolean canInsertItem(@Nullable Direction direction, int index, ItemStack stack) { + return false; + } + + public boolean canExtractItem(@Nullable Direction direction, int index, ItemStack stack) { + return false; + } + + public final AbstractMachineTileEntity getTileEntity() { + return this.tileEntity; + } + + public void update() { + int powerPerTick = this.getPowerPerTick(); + + if (powerPerTick > 0) { + this.consume(powerPerTick); + } + + if (!this.isPowerEnoughForOperation()) { + this.feed(true); + } + + } + + public abstract ResourceLocation getName(); + + public LazyOptional getCapability(Capability capability, @Nullable Direction facing) { + return LazyOptional.empty(); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemEnergy.java b/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemEnergy.java new file mode 100644 index 000000000..58113ae4b --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemEnergy.java @@ -0,0 +1,47 @@ +package net.mrscauthd.boss_tools.machines.tile; + +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.energy.IEnergyStorage; +import net.mrscauthd.boss_tools.BossToolsMod; + +public abstract class PowerSystemEnergy extends PowerSystem { + private final IEnergyStorage energyStorage; + + public PowerSystemEnergy(AbstractMachineTileEntity tileEntity) { + this(tileEntity, tileEntity.getPrimaryEnergyStorage()); + } + + public PowerSystemEnergy(AbstractMachineTileEntity tileEntity, IEnergyStorage energyStorage) { + super(tileEntity); + this.energyStorage = energyStorage; + } + + @Override + public int getStored() { + return this.getEnergyStorage().getEnergyStored(); + } + + @Override + public int getCapacity() { + return this.getEnergyStorage().getMaxEnergyStored(); + } + + @Override + public int receive(int amount, boolean simulate) { + return this.getEnergyStorage().receiveEnergy(amount, simulate); + } + + @Override + public int extract(int amount, boolean simulate) { + return this.getEnergyStorage().extractEnergy(amount, simulate); + } + + public final IEnergyStorage getEnergyStorage() { + return this.energyStorage; + } + + @Override + public ResourceLocation getName() { + return new ResourceLocation(BossToolsMod.ModId, "energy"); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemEnergyCommon.java b/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemEnergyCommon.java new file mode 100644 index 000000000..714a2bee4 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemEnergyCommon.java @@ -0,0 +1,20 @@ +package net.mrscauthd.boss_tools.machines.tile; + +import net.minecraftforge.energy.IEnergyStorage; + +public abstract class PowerSystemEnergyCommon extends PowerSystemEnergy { + + public PowerSystemEnergyCommon(AbstractMachineTileEntity tileEntity) { + super(tileEntity); + } + + public PowerSystemEnergyCommon(AbstractMachineTileEntity tileEntity, IEnergyStorage energyStorage) { + super(tileEntity, energyStorage); + } + + @Override + public int getBasePowerPerTick() { + return 0; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemFuel.java b/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemFuel.java new file mode 100644 index 000000000..39606877d --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemFuel.java @@ -0,0 +1,179 @@ +package net.mrscauthd.boss_tools.machines.tile; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.inventory.StackCacher; + +public abstract class PowerSystemFuel extends PowerSystem { + + private final int slot; + + private int fuel; + private int maxFuel; + + private StackCacher itemStackCacher; + private int cachedFuel; + + public PowerSystemFuel(AbstractMachineTileEntity tileEntity, int slot) { + super(tileEntity); + + this.slot = slot; + + this.fuel = 0; + this.maxFuel = 0; + + this.itemStackCacher = new StackCacher(); + this.cachedFuel = 0; + } + + @Override + public int getUsingSlots() { + return this.getSlot() == -1 ? 0 : 1; + } + + @Override + public int receive(int amount, boolean simulate) { + int received = Math.min(this.getCapacity() - this.getStored(), Math.max(amount, 0)); + + if (!simulate) { + this.fuel += received; + this.getTileEntity().markDirty(); + } + + return received; + } + + @Override + public int extract(int amount, boolean simulate) { + int extracted = Math.min(this.getStored(), Math.max(amount, 0)); + + if (!simulate) { + this.fuel -= extracted; + this.getTileEntity().markDirty(); + } + + return extracted; + } + + @Override + public int getStored() { + return this.fuel; + } + + @Override + public int getCapacity() { + return this.maxFuel; + } + + public boolean canFeed(boolean spareForNextTick, ItemStack fuel) { + return this.getTileEntity().hasSpaceInOutput(); + } + + @Override + public void deserializeNBT(CompoundNBT compound) { + super.deserializeNBT(compound); + + this.fuel = compound.getInt("fuel"); + this.maxFuel = compound.getInt("maxFuel"); + } + + @Override + public CompoundNBT serializeNBT() { + CompoundNBT compound = super.serializeNBT(); + + compound.putInt("fuel", this.fuel); + compound.putInt("maxFuel", this.maxFuel); + + return compound; + } + + protected abstract int getFuelInternal(ItemStack fuel); + + public final int getFuel(ItemStack fuel) { + if (fuel == null || fuel.isEmpty()) { + this.itemStackCacher.set(fuel); + this.cachedFuel = -1; + } else if (!this.itemStackCacher.test(fuel)) { + this.itemStackCacher.set(fuel); + this.cachedFuel = this.getFuelInternal(fuel); + } + return this.cachedFuel; + } + + @Override + public boolean feed(boolean spareForNextTick) { + if (spareForNextTick == false) { + return false; + } + + int slot = this.getSlot(); + + if (slot == -1) { + return false; + } + + IItemHandlerModifiable itemHandler = this.getItemHandler(); + ItemStack fuelItemStack = itemHandler.getStackInSlot(slot); + + if (!fuelItemStack.isEmpty() && this.canFeed(spareForNextTick, fuelItemStack)) { + int fuel = this.getFuel(fuelItemStack); + + if (fuel > 0) { + itemHandler.extractItem(slot, 1, false); + this.addFuel(fuel); + return true; + } + } + + return false; + } + + public void setFuel(int fuel) { + fuel = Math.max(fuel, 0); + this.maxFuel = fuel; + this.receive(fuel, false); + } + + public void addFuel(int fuel) { + fuel = Math.max(fuel, 0); + this.maxFuel = this.getStored() + fuel; + this.receive(fuel, false); + } + + public boolean matchDirection(Direction direction) { + return direction == null || (direction != Direction.UP && direction != Direction.DOWN); + } + + @Override + public void getSlotsForFace(Direction direction, List slots) { + if (this.matchDirection(direction)) { + slots.add(this.getSlot()); + } + } + + @Override + public boolean canInsertItem(@Nullable Direction direction, int index, ItemStack stack) { + return this.matchDirection(direction) && index == this.getSlot() && this.getFuel(stack) > 0; + } + + public IItemHandlerModifiable getItemHandler() { + return this.getTileEntity().getItemHandler(); + } + + public int getSlot() { + return this.slot; + } + + @Override + public ResourceLocation getName() { + return new ResourceLocation(BossToolsMod.ModId, "fuel"); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemFuelBurnTime.java b/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemFuelBurnTime.java new file mode 100644 index 000000000..a454793f4 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemFuelBurnTime.java @@ -0,0 +1,39 @@ +package net.mrscauthd.boss_tools.machines.tile; + +import java.util.List; + +import net.minecraft.util.ResourceLocation; +import net.mrscauthd.boss_tools.gauge.GaugeValueHelper; +import net.mrscauthd.boss_tools.gauge.IGaugeValue; + +public abstract class PowerSystemFuelBurnTime extends PowerSystemFuel { + + public static final int FUEL_PER_TICK = 1; + + public PowerSystemFuelBurnTime(AbstractMachineTileEntity tileEntity, int slot) { + super(tileEntity, slot); + } + + @Override + public List getGaugeValues() { + List list = super.getGaugeValues(); + list.add(GaugeValueHelper.getBurnTime(this)); + return list; + } + + @Override + public int getBasePowerPerTick() { + return FUEL_PER_TICK; + } + + @Override + public int getBasePowerForOperation() { + return 0; + } + + @Override + public ResourceLocation getName() { + ResourceLocation name = super.getName(); + return new ResourceLocation(name.getNamespace(), name.getPath() + "/burntime"); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemFuelBurnTimeVanilla.java b/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemFuelBurnTimeVanilla.java new file mode 100644 index 000000000..4b4e9ff96 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemFuelBurnTimeVanilla.java @@ -0,0 +1,27 @@ +package net.mrscauthd.boss_tools.machines.tile; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.ForgeHooks; + +public abstract class PowerSystemFuelBurnTimeVanilla extends PowerSystemFuelBurnTime { + + public PowerSystemFuelBurnTimeVanilla(AbstractMachineTileEntity tileEntity, int slot) { + super(tileEntity, slot); + } + + public abstract IRecipeType getRecipeType(); + + @Override + protected int getFuelInternal(ItemStack fuel) { + return ForgeHooks.getBurnTime(fuel, this.getRecipeType()); + } + + @Override + public ResourceLocation getName() { + ResourceLocation name = super.getName(); + return new ResourceLocation(name.getNamespace(), name.getPath() + "/vanilla"); + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemFuelGeneratingRecipe.java b/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemFuelGeneratingRecipe.java new file mode 100644 index 000000000..459fe2e0a --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemFuelGeneratingRecipe.java @@ -0,0 +1,35 @@ +package net.mrscauthd.boss_tools.machines.tile; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.mrscauthd.boss_tools.crafting.BossToolsRecipeType; +import net.mrscauthd.boss_tools.crafting.BossToolsRecipeTypes; +import net.mrscauthd.boss_tools.crafting.GeneratingRecipe; + +public class PowerSystemFuelGeneratingRecipe extends PowerSystemFuelBurnTime { + + public PowerSystemFuelGeneratingRecipe(AbstractMachineTileEntity tileEntity, int slot) { + super(tileEntity, slot); + } + + public BossToolsRecipeType getRecipeType() { + return BossToolsRecipeTypes.GENERATING; + } + + @Override + protected int getFuelInternal(ItemStack fuel) { + if (fuel == null || fuel.isEmpty()) { + return -1; + } + + GeneratingRecipe recipe = this.getRecipeType().findFirst(this.getTileEntity().getWorld(), f -> f.test(fuel)); + return recipe != null ? recipe.getBurnTime() : -1; + } + + @Override + public ResourceLocation getName() { + ResourceLocation name = super.getName(); + return new ResourceLocation(name.getNamespace(), name.getPath() + "/generating"); + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemNone.java b/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemNone.java new file mode 100644 index 000000000..5b54e0df5 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemNone.java @@ -0,0 +1,45 @@ +package net.mrscauthd.boss_tools.machines.tile; + +import net.minecraft.util.ResourceLocation; +import net.mrscauthd.boss_tools.BossToolsMod; + +public class PowerSystemNone extends PowerSystem { + public PowerSystemNone(AbstractMachineTileEntity tileEntity) { + super(tileEntity); + } + + @Override + public int getBasePowerPerTick() { + return 0; + } + + @Override + public int getBasePowerForOperation() { + return 0; + } + + @Override + public int getStored() { + return 0; + } + + @Override + public int getCapacity() { + return 0; + } + + @Override + public int receive(int amount, boolean simulate) { + return 0; + } + + @Override + public int extract(int amount, boolean simulate) { + return 0; + } + + @Override + public ResourceLocation getName() { + return new ResourceLocation(BossToolsMod.ModId, "none"); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemRegistry.java b/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemRegistry.java new file mode 100644 index 000000000..d3b80c350 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/tile/PowerSystemRegistry.java @@ -0,0 +1,19 @@ +package net.mrscauthd.boss_tools.machines.tile; + +import java.util.LinkedHashMap; + +import net.minecraft.util.ResourceLocation; + +public class PowerSystemRegistry extends LinkedHashMap { + + private static final long serialVersionUID = 1L; + + public PowerSystemRegistry() { + + } + + public void put(PowerSystem powerSystem) { + this.put(powerSystem.getName(), powerSystem); + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/machines/tile/WaterPumpTileEntity.java b/src/main/java/net/mrscauthd/boss_tools/machines/tile/WaterPumpTileEntity.java new file mode 100644 index 000000000..a2c70ba6d --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/machines/tile/WaterPumpTileEntity.java @@ -0,0 +1,195 @@ +package net.mrscauthd.boss_tools.machines.tile; + +import net.minecraft.block.BlockState; +import net.minecraft.block.IBucketPickupHandler; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.Fluids; +import net.minecraft.inventory.container.Container; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.energy.IEnergyStorage; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidUtil; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.templates.FluidTank; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.capability.FluidHandlerWrapper; +import net.mrscauthd.boss_tools.fluid.FluidUtil2; +import net.mrscauthd.boss_tools.gui.screens.waterpump.WaterPumpGui; +import net.mrscauthd.boss_tools.machines.WaterPump; + +import java.util.function.Predicate; + +public class WaterPumpTileEntity extends AbstractMachineTileEntity { + public static final int TRANSFER_PER_TICK = 10; + + public WaterPumpTileEntity() { + super(ModInnet.WATER_PUMP.get()); + } + + public static final ResourceLocation WATER_TANK = new ResourceLocation(BossToolsMod.ModId, "water_tank"); + public static final int TANK_CAPACITY = 6000; + public double WATER_TIMER = 0; + private FluidTank waterTank; + + @Override + protected Container createMenu(int id, PlayerInventory player) { + return new WaterPumpGui.GuiContainer(id, player, this); + } + + @Override + protected void tickProcessing() { + + BlockPos pos = new BlockPos(this.pos.getX(),this.pos.getY() - 1, this.pos.getZ()); + + if (this.world.getFluidState(pos) == Fluids.WATER.getStillFluidState(false)) { + + if (hasSpaceInWaterTank(this.getWaterTank().getFluid().getAmount())) { + + if (this.consumePowerForOperation() != null) { + + WATER_TIMER = WATER_TIMER + 1; + + if (WATER_TIMER > 10) { + + ((IBucketPickupHandler) this.world.getBlockState(pos).getBlock()).pickupFluid(this.world, pos, this.world.getBlockState(pos)); + + this.getWaterTank().fill(new FluidStack(Fluids.WATER,1000), IFluidHandler.FluidAction.EXECUTE); + + WATER_TIMER = 0; + } + } + } + + if (this.getWaterTank().getFluid().getAmount() > 1) { + TileEntity tileEntity = world.getTileEntity(new BlockPos(this.pos.getX(),this.pos.getY() + 1, this.pos.getZ())); + + if (tileEntity != null) { + + IFluidHandler fluidHandler = tileEntity.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, Direction.DOWN).orElse(null); + + if (fluidHandler != null) { + int transferPerTick = this.getTransferPerTick(); + + if (FluidUtil.tryFluidTransfer(fluidHandler, this.waterTank, transferPerTick, false).getAmount() == transferPerTick) + { + FluidUtil.tryFluidTransfer(fluidHandler, this.waterTank, transferPerTick, true); + } + } + } + } + } + } + + public int getTransferPerTick() { + return TRANSFER_PER_TICK; + } + + public boolean hasSpaceInWaterTank(int water) { + return hasSpaceIn(water, this.getWaterTank().getFluid()); + } + + public boolean hasSpaceIn(int water, FluidStack storage) { + return water < TANK_CAPACITY - 999; + } + + @Override + public LazyOptional getCapabilityFluidHandler(Capability capability, Direction facing) { + if (facing == null || facing == Direction.UP) { + return super.getCapabilityFluidHandler(capability, facing).lazyMap(handler -> new FluidHandlerWrapper((IFluidHandler) handler, true, false)).cast(); + } + + return LazyOptional.empty(); + } + + @Override + public LazyOptional getCapabilityEnergy(Capability capability, Direction facing) { + BlockState blockState = this.getBlockState(); + + if (blockState.hasProperty(WaterPump.FACING)) { + Direction blockDirection = blockState.get(WaterPump.FACING); + + if (facing == null || facing == blockDirection) { + return super.getCapabilityEnergy(capability, facing); + } + } + + return LazyOptional.empty(); + } + + @Override + protected void createPowerSystems(PowerSystemRegistry map) { + super.createPowerSystems(map); + + map.put(new PowerSystemEnergyCommon(this) { + @Override + public int getBasePowerForOperation() { + return WaterPumpTileEntity.this.getBasePowerForOperation(); + } + }); + } + + @Override + protected void createEnergyStorages(NamedComponentRegistry registry) { + super.createEnergyStorages(registry); + registry.put(this.createEnergyStorageCommon()); + } + + public int getBasePowerForOperation() { + return 1; + } + + @Override + protected void createFluidHandlers(NamedComponentRegistry registry) { + super.createFluidHandlers(registry); + this.waterTank = (FluidTank) registry.computeIfAbsent(this.getTankName(), k -> this.creatTank(k)); + } + + protected int getInitialTankCapacity(ResourceLocation name) { + return TANK_CAPACITY; + } + + protected Predicate getInitialTankValidator(ResourceLocation name) { + Fluid fluid = this.getTankFluid(name); + return fluid != null ? fs -> FluidUtil2.isEquivalentTo(fs, fluid) : null; + } + + protected Fluid getTankFluid(ResourceLocation name) { + if (name.equals(this.getTankName())) { + return Fluids.WATER; + } else { + return null; + } + } + + protected FluidTank creatTank(ResourceLocation name) { + return new FluidTank(this.getInitialTankCapacity(name), this.getInitialTankValidator(name)) { + @Override + protected void onContentsChanged() { + super.onContentsChanged(); + WaterPumpTileEntity.this.markDirty(); + } + }; + } + + public ResourceLocation getTankName() { + return WATER_TANK; + } + + public FluidTank getWaterTank() { + return this.waterTank; + } + + @Override + public boolean hasSpaceInOutput() { + return false; + } + +} diff --git a/src/main/java/net/mrscauthd/boss_tools/mixin/ArmorTranslucent.java b/src/main/java/net/mrscauthd/boss_tools/mixin/ArmorTranslucent.java new file mode 100644 index 000000000..a71d084af --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/mixin/ArmorTranslucent.java @@ -0,0 +1,38 @@ +package net.mrscauthd.boss_tools.mixin; + +import net.mrscauthd.boss_tools.BossToolsMod; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; + +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.layers.BipedArmorLayer; +import net.minecraft.client.renderer.entity.model.BipedModel; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.entity.LivingEntity; +import net.minecraft.util.ResourceLocation; + +@Mixin(BipedArmorLayer.class) +public abstract class ArmorTranslucent> { + + private static ResourceLocation SpaceSuit = new ResourceLocation(BossToolsMod.ModId, "textures/models/armor/space_suit_head.png"); + private static ResourceLocation NetheriteSpaceSuit = new ResourceLocation(BossToolsMod.ModId, "textures/models/armor/netherite_space_suit_head.png"); + + @Inject(at = @At(value = "HEAD"), method = "renderModel", cancellable = true, remap = false) + private void renderModel(MatrixStack p_241738_1_, IRenderTypeBuffer p_241738_2_, int p_241738_3_, boolean p_241738_5_, A p_241738_6_, float p_241738_8_, float p_241738_9_, float p_241738_10_, ResourceLocation armorResource, CallbackInfo info) { + + if (armorResource.equals(SpaceSuit) || armorResource.equals(NetheriteSpaceSuit)) { + info.cancel(); + IVertexBuilder ivertexbuilder = ItemRenderer.getArmorVertexBuilder(p_241738_2_, RenderType.getEntityTranslucent(armorResource), false, p_241738_5_); + p_241738_6_.render(p_241738_1_, ivertexbuilder, p_241738_3_, OverlayTexture.NO_OVERLAY, p_241738_8_, p_241738_9_, p_241738_10_, 1.0F); + } + + } + +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/mixin/MixinItemGravity.java b/src/main/java/net/mrscauthd/boss_tools/mixin/MixinItemGravity.java new file mode 100644 index 000000000..64d6e1d63 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/mixin/MixinItemGravity.java @@ -0,0 +1,60 @@ +package net.mrscauthd.boss_tools.mixin; + +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.MinecraftForge; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.events.Methodes; +import net.mrscauthd.boss_tools.events.forgeevents.ItemGravityEvent; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(ItemEntity.class) +public abstract class MixinItemGravity { + @Inject(at = @At(value = "HEAD"), method = "tick") + private void tick(CallbackInfo info) { + ItemEntity w = (ItemEntity) ((Object) this); + + if (GravityCheckItem(w)) { + if (Methodes.isWorld(w.world, new ResourceLocation(BossToolsMod.ModId, "moon"))) { + itemGravityMath(w,0.05); + } + + if (Methodes.isWorld(w.world, new ResourceLocation(BossToolsMod.ModId, "mars"))) { + itemGravityMath(w,0.06); + } + + if (Methodes.isWorld(w.world, new ResourceLocation(BossToolsMod.ModId, "mercury"))) { + itemGravityMath(w,0.05); + } + + if (Methodes.isWorld(w.world, new ResourceLocation(BossToolsMod.ModId, "venus"))) { + itemGravityMath(w,0.06); + } + + if (Methodes.isOrbitWorld(w.world)) { + itemGravityMath(w,0.05); + } + } + + } + + private static boolean GravityCheckItem(ItemEntity entity) { + if (!entity.isInWater() && !entity.isInLava() && !entity.hasNoGravity()) { + return true; + } + + return false; + } + + private static void itemGravityMath(ItemEntity entity, double gravity) { + if (MinecraftForge.EVENT_BUS.post(new ItemGravityEvent(entity))) { + return; + } + + entity.setMotion(entity.getMotion().getX(), entity.getMotion().getY() / 0.98 + 0.08 - gravity, entity.getMotion().getZ()); + } + +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/mixin/RenderHandItem.java b/src/main/java/net/mrscauthd/boss_tools/mixin/RenderHandItem.java new file mode 100644 index 000000000..c952af7fd --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/mixin/RenderHandItem.java @@ -0,0 +1,33 @@ +package net.mrscauthd.boss_tools.mixin; + +import com.mojang.blaze3d.matrix.MatrixStack; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.entity.layers.HeldItemLayer; +import net.minecraft.client.renderer.model.ItemCameraTransforms; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.HandSide; +import net.minecraftforge.common.MinecraftForge; +import net.mrscauthd.boss_tools.events.forgeevents.RenderHandItemEvent; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(HeldItemLayer.class) +public abstract class RenderHandItem { + + @Inject(at = @At(value = "HEAD"), method = "func_229135_a_", cancellable = true) + private void setRotationAnglesPre(LivingEntity p_229135_1_, ItemStack p_229135_2_, ItemCameraTransforms.TransformType p_229135_3_, HandSide p_229135_4_, MatrixStack p_229135_5_, IRenderTypeBuffer p_229135_6_, int p_229135_7_, CallbackInfo info) { + + if (MinecraftForge.EVENT_BUS.post(new RenderHandItemEvent.Pre(p_229135_1_, p_229135_2_, p_229135_3_, p_229135_4_, p_229135_5_, p_229135_6_, p_229135_7_))) { + info.cancel(); + } + } + + @Inject(at = @At(value = "RETURN"), method = "func_229135_a_", cancellable = true) + private void setRotationAnglesPost(LivingEntity p_229135_1_, ItemStack p_229135_2_, ItemCameraTransforms.TransformType p_229135_3_, HandSide p_229135_4_, MatrixStack p_229135_5_, IRenderTypeBuffer p_229135_6_, int p_229135_7_, CallbackInfo info) { + + MinecraftForge.EVENT_BUS.post(new RenderHandItemEvent.Post(p_229135_1_, p_229135_2_, p_229135_3_, p_229135_4_, p_229135_5_, p_229135_6_, p_229135_7_)); + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/mixin/SetupLivingBipedAnim.java b/src/main/java/net/mrscauthd/boss_tools/mixin/SetupLivingBipedAnim.java new file mode 100644 index 000000000..f67e5f721 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/mixin/SetupLivingBipedAnim.java @@ -0,0 +1,31 @@ +package net.mrscauthd.boss_tools.mixin; + +import net.minecraft.entity.LivingEntity; +import net.minecraftforge.common.MinecraftForge; +import net.mrscauthd.boss_tools.events.forgeevents.SetupLivingBipedAnimEvent; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import net.minecraft.client.renderer.entity.model.BipedModel; + +@Mixin(BipedModel.class) +public abstract class SetupLivingBipedAnim { + + @Inject(at = @At(value = "HEAD"), method = "setRotationAngles", cancellable = true) + private void setRotationAnglesPre(LivingEntity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, CallbackInfo info) { + BipedModel w = (BipedModel) ((Object) this); + + if (MinecraftForge.EVENT_BUS.post(new SetupLivingBipedAnimEvent.Pre(entityIn, w, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch))) { + info.cancel(); + } + } + + @Inject(at = @At(value = "RETURN"), method = "setRotationAngles", cancellable = true) + private void setRotationAnglesPost(LivingEntity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, CallbackInfo info) { + BipedModel w = (BipedModel) ((Object) this); + + MinecraftForge.EVENT_BUS.post(new SetupLivingBipedAnimEvent.Post(entityIn, w, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch)); + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/paintings/PaintingRegistry.java b/src/main/java/net/mrscauthd/boss_tools/paintings/PaintingRegistry.java new file mode 100644 index 000000000..031d560e2 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/paintings/PaintingRegistry.java @@ -0,0 +1,20 @@ +package net.mrscauthd.boss_tools.paintings; + +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.event.RegistryEvent; + +import net.minecraft.entity.item.PaintingType; +import net.mrscauthd.boss_tools.BossToolsMod; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId, bus = Mod.EventBusSubscriber.Bus.MOD) +public class PaintingRegistry { + @SubscribeEvent + public static void registerPaintingType(RegistryEvent.Register event) { + event.getRegistry().register(new PaintingType(32, 16).setRegistryName("painting_earth")); + event.getRegistry().register(new PaintingType(32, 32).setRegistryName("painting_galaxy")); + event.getRegistry().register(new PaintingType(32, 16).setRegistryName("painting_math")); + event.getRegistry().register(new PaintingType(64, 32).setRegistryName("painting_planet_math")); + event.getRegistry().register(new PaintingType(16, 16).setRegistryName("painting_venus")); + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/particle/LargeFlameParticle.java b/src/main/java/net/mrscauthd/boss_tools/particle/LargeFlameParticle.java new file mode 100644 index 000000000..11e64dde4 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/particle/LargeFlameParticle.java @@ -0,0 +1,33 @@ +package net.mrscauthd.boss_tools.particle; + +import net.minecraft.client.particle.*; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.particles.BasicParticleType; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class LargeFlameParticle extends PoofParticle { + private LargeFlameParticle(ClientWorld world, double x, double y, double z, double motionX, double motionY, double motionZ, IAnimatedSprite spriteWithAge) { + super(world, x, y, z, motionX, motionY, motionZ, spriteWithAge); + this.particleGravity = 2.5F; + } + + public void tick() { + super.tick(); + this.motionY -= 0.004D + 0.04D * (double)this.particleGravity; + } + + @OnlyIn(Dist.CLIENT) + public static class ParticleFactory implements IParticleFactory { + private final IAnimatedSprite spriteSet; + + public ParticleFactory(IAnimatedSprite spriteSet) { + this.spriteSet = spriteSet; + } + + public Particle makeParticle(BasicParticleType typeIn, ClientWorld worldIn, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed) { + return new LargeFlameParticle(worldIn, x, y, z, xSpeed, ySpeed, zSpeed, this.spriteSet); + } + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/particle/SmokeParticle.java b/src/main/java/net/mrscauthd/boss_tools/particle/SmokeParticle.java new file mode 100644 index 000000000..9c7b8003e --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/particle/SmokeParticle.java @@ -0,0 +1,36 @@ +package net.mrscauthd.boss_tools.particle; + +import net.minecraft.client.particle.IAnimatedSprite; +import net.minecraft.client.particle.IParticleFactory; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.particle.PoofParticle; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.particles.BasicParticleType; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class SmokeParticle extends PoofParticle { + private SmokeParticle(ClientWorld world, double x, double y, double z, double motionX, double motionY, double motionZ, IAnimatedSprite spriteWithAge) { + super(world, x, y, z, motionX, motionY, motionZ, spriteWithAge); + this.particleGravity = 2.5F; + } + + public void tick() { + super.tick(); + this.motionY -= 0.004D + 0.04D * (double)this.particleGravity; + } + + @OnlyIn(Dist.CLIENT) + public static class ParticleFactory implements IParticleFactory { + private final IAnimatedSprite spriteSet; + + public ParticleFactory(IAnimatedSprite spriteSet) { + this.spriteSet = spriteSet; + } + + public Particle makeParticle(BasicParticleType typeIn, ClientWorld worldIn, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed) { + return new SmokeParticle(worldIn, x, y, z, xSpeed, ySpeed, zSpeed, this.spriteSet); + } + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/particle/VenusRainParticle.java b/src/main/java/net/mrscauthd/boss_tools/particle/VenusRainParticle.java new file mode 100644 index 000000000..94f6b9c9c --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/particle/VenusRainParticle.java @@ -0,0 +1,81 @@ +package net.mrscauthd.boss_tools.particle; + +import net.minecraft.client.particle.*; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.particles.BasicParticleType; +import net.minecraft.client.world.ClientWorld; + +@OnlyIn(Dist.CLIENT) +public class VenusRainParticle extends SpriteTexturedParticle { + private final IAnimatedSprite spriteSet; + private float angularVelocity; + private float angularAcceleration; + public VenusRainParticle(ClientWorld world, double x, double y, double z, double vx, double vy, double vz, IAnimatedSprite spriteSet) { + super(world, x, y, z); + this.spriteSet = spriteSet; + this.particleScale *= (float) 1; + this.canCollide = true; + this.angularVelocity = (float) 0.1; + this.angularAcceleration = (float) 0.01; + this.motionX *= (double)0.3F; + this.motionY = Math.random() * (double)0.2F + (double)0.1F; + this.motionZ *= (double)0.3F; + this.setSize(0.01F, 0.01F); + this.particleGravity = 0.06F; + this.maxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D)); + this.selectSpriteRandomly(spriteSet); + } + + @Override + public IParticleRenderType getRenderType() { + return IParticleRenderType.PARTICLE_SHEET_TRANSLUCENT; + } + + @Override + public void tick() { + super.tick(); + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + if (this.maxAge-- <= 0) { + this.setExpired(); + } else { + this.motionY -= (double)this.particleGravity; + this.move(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)0.98F; + this.motionY *= (double)0.98F; + this.motionZ *= (double)0.98F; + if (this.onGround) { + if (Math.random() < 0.5D) { + this.setExpired(); + } + + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + } + + BlockPos blockpos = new BlockPos(this.posX, this.posY, this.posZ); + double d0 = Math.max(this.world.getBlockState(blockpos).getCollisionShape(this.world, blockpos).max(Direction.Axis.Y, this.posX - (double)blockpos.getX(), this.posZ - (double)blockpos.getZ()), (double)this.world.getFluidState(blockpos).getActualHeight(this.world, blockpos)); + if (d0 > 0.0D && this.posY < (double)blockpos.getY() + d0) { + this.setExpired(); + } + } + } + + @OnlyIn(Dist.CLIENT) + public static class ParticleFactory implements IParticleFactory { + private final IAnimatedSprite spriteSet; + + public ParticleFactory(IAnimatedSprite spriteSet) { + this.spriteSet = spriteSet; + } + + public Particle makeParticle(BasicParticleType typeIn, ClientWorld worldIn, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed) { + return new VenusRainParticle(worldIn, x, y, z, xSpeed, ySpeed, zSpeed, this.spriteSet); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusMars.java b/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusMars.java new file mode 100644 index 000000000..f1e25f61e --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusMars.java @@ -0,0 +1,222 @@ +package net.mrscauthd.boss_tools.skyrenderer; + +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.client.ISkyRenderHandler; +import net.minecraftforge.client.ICloudRenderHandler; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.util.math.vector.Vector3f; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraft.client.world.DimensionRenderInfo.FogType; +import net.minecraft.client.world.DimensionRenderInfo; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.renderer.vertex.VertexBuffer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.renderer.WorldVertexBufferUploader; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.FogRenderer; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.Minecraft; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.matrix.MatrixStack; +import net.mrscauthd.boss_tools.BossToolsMod; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId, bus = Bus.MOD, value = Dist.CLIENT) +public class ClientEventBusMars { + private static final ResourceLocation DIM_RENDER_INFO = new ResourceLocation(BossToolsMod.ModId, "mars"); + private static final ResourceLocation SUN_TEXTURE = new ResourceLocation(BossToolsMod.ModId, "textures/sky/sun.png"); + private static final ResourceLocation PHOBOS_TEXTURE = new ResourceLocation(BossToolsMod.ModId, "textures/sky/phobos.png"); + private static final ResourceLocation DEIMOS_TEXTURE = new ResourceLocation(BossToolsMod.ModId, "textures/sky/deimos.png"); + private static final ResourceLocation EARTH_TEXTURE = new ResourceLocation(BossToolsMod.ModId, "textures/sky/earth.png"); + @SubscribeEvent(priority = EventPriority.HIGHEST) + public static void clientSetup(FMLClientSetupEvent event) { + DimensionRenderInfo.field_239208_a_.put(DIM_RENDER_INFO, new DimensionRenderInfo(128, false, FogType.NORMAL, false, false) { + @Override + public Vector3d func_230494_a_(Vector3d color, float sunHeight) { + return new Vector3d(0.647058823529, 0.450980392157, 0.254901960784); + } + + @Override + public boolean func_230493_a_(int posX, int posY) { + return true; + } + + @Override + public ICloudRenderHandler getCloudRenderHandler() { + return new ICloudRenderHandler() { + @Override + public void render(int ticks, float partialTicks, MatrixStack matrixStack, ClientWorld world, Minecraft mc, double viewEntityX, double viewEntityY, double viewEntityZ) { + + } + }; + } + + @Override + public ISkyRenderHandler getSkyRenderHandler() { + return new ISkyRenderHandler() { + @SuppressWarnings({"deprecation"}) + @Override + public void render(int ticks, float partialTicks, MatrixStack matrixStack, ClientWorld world, Minecraft mc) { + RenderSystem.disableTexture(); + Vector3d vector3d = world.getSkyColor(mc.gameRenderer.getActiveRenderInfo().getBlockPos(), partialTicks); + float f = (float) vector3d.x; + float f1 = (float) vector3d.y; + float f2 = (float) vector3d.z; + FogRenderer.applyFog(); + BufferBuilder bufferbuilder = Tessellator.getInstance().getBuffer(); + RenderSystem.depthMask(false); + RenderSystem.enableFog(); + RenderSystem.color3f(0.81960785f, 0.54509807f, 0.32156864f); + mc.worldRenderer.skyVBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + mc.worldRenderer.skyVBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + Matrix4f matrix4f1 = matrixStack.getLast().getMatrix(); + RenderSystem.enableAlphaTest(); + RenderSystem.enableTexture(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + RenderSystem.color4f(1f, 1f, 1f, 1f); + RenderSystem.disableTexture(); + RenderSystem.disableFog(); + RenderSystem.disableAlphaTest(); + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + float[] afloat = world.func_239132_a_().func_230492_a_(world.func_242415_f(partialTicks), partialTicks); + if (afloat != null) { + RenderSystem.disableTexture(); + RenderSystem.shadeModel(7425); + matrixStack.push(); + matrixStack.rotate(Vector3f.XP.rotationDegrees(90.0F)); + float f3 = MathHelper.sin(world.getCelestialAngleRadians(partialTicks)) < 0.0F ? 180.0F : 0.0F; + matrixStack.rotate(Vector3f.ZP.rotationDegrees(f3)); + matrixStack.rotate(Vector3f.ZP.rotationDegrees(90.0F)); + float f4 = afloat[0]; + float f5 = afloat[1]; + float f6 = afloat[2]; + Matrix4f matrix4f = matrixStack.getLast().getMatrix(); + bufferbuilder.begin(6, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos(matrix4f, 0.0F, 100.0F, 0.0F).color(f4, f5, f6, afloat[3]).endVertex(); + for (int j = 0; j <= 16; ++j) { + float f7 = (float) j * ((float) Math.PI * 2F) / 16.0F; + float f8 = MathHelper.sin(f7); + float f9 = MathHelper.cos(f7); + bufferbuilder.pos(matrix4f, f8 * 120.0F, f9 * 120.0F, -f9 * 40.0F * afloat[3]).color(afloat[0], afloat[1], afloat[2], 0.0F).endVertex(); + } + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + matrixStack.pop(); + RenderSystem.shadeModel(7424); + } + RenderSystem.enableTexture(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + matrixStack.push(); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + + matrixStack.rotate(Vector3f.YP.rotationDegrees(-90.0F)); + matrixStack.rotate(Vector3f.XP.rotationDegrees(world.func_242415_f(partialTicks) * 360.0F)); + matrix4f1 = matrixStack.getLast().getMatrix(); + + float f12 = 20.0F; + + //SUN + mc.getTextureManager().bindTexture(SUN_TEXTURE); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix4f1, -f12, 100.0F, -f12).tex(0.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, f12, 100.0F, -f12).tex(1.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, f12, 100.0F, f12).tex(1.0F, 1.0F).endVertex(); + bufferbuilder.pos(matrix4f1, -f12, 100.0F, f12).tex(0.0F, 1.0F).endVertex(); + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + + //PHOBOS + matrixStack.rotate(Vector3f.YP.rotationDegrees(-130.0F)); + matrixStack.rotate(Vector3f.ZP.rotationDegrees(100.0F)); + + mc.getTextureManager().bindTexture(PHOBOS_TEXTURE); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix4f1, -3, -100.0F, 3).tex(0.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, 3, -100.0F, 3).tex(1.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, 3, -100.0F, -3).tex(1.0F, 1.0F).endVertex(); + bufferbuilder.pos(matrix4f1, -3, -100.0F, -3).tex(0.0F, 1.0F).endVertex(); + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + + matrixStack.rotate(Vector3f.YP.rotationDegrees(-130.0F)); + matrixStack.rotate(Vector3f.ZP.rotationDegrees(210.0F)); + + //EARTH + mc.getTextureManager().bindTexture(EARTH_TEXTURE); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix4f1, -1, -100.0F, 1).tex(0.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, 1, -100.0F, 1).tex(1.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, 1, -100.0F, -1).tex(1.0F, 1.0F).endVertex(); + bufferbuilder.pos(matrix4f1, -1, -100.0F, -1).tex(0.0F, 1.0F).endVertex(); + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + + matrixStack.rotate(Vector3f.YP.rotationDegrees(-110.0F)); + matrixStack.rotate(Vector3f.ZP.rotationDegrees(90.0F)); + + //DEIMOS + mc.getTextureManager().bindTexture(DEIMOS_TEXTURE); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix4f1, -4, -100.0F, 4).tex(0.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, 4, -100.0F, 4).tex(1.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, 4, -100.0F, -4).tex(1.0F, 1.0F).endVertex(); + bufferbuilder.pos(matrix4f1, -4, -100.0F, -4).tex(0.0F, 1.0F).endVertex(); + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + + RenderSystem.disableTexture(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + mc.worldRenderer.starVBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + mc.worldRenderer.starVBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.disableBlend(); + RenderSystem.enableAlphaTest(); + RenderSystem.enableFog(); + matrixStack.pop(); + RenderSystem.disableTexture(); + RenderSystem.color3f(0.0F, 0.0F, 0.0F); + + double d0 = mc.player.getEyePosition(partialTicks).y - world.getWorldInfo().getVoidFogHeight(); + + if (d0 < 0.0D) { + matrixStack.push(); + matrixStack.translate(0.0D, 12.0D, 0.0D); + mc.worldRenderer.sky2VBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + mc.worldRenderer.sky2VBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + matrixStack.pop(); + } + if (world.func_239132_a_().func_239216_b_()) { + RenderSystem.color3f(f * 0.2F + 0.04F, f1 * 0.2F + 0.04F, f2 * 0.6F + 0.1F); + } else { + RenderSystem.color3f(f, f1, f2); + } + RenderSystem.enableTexture(); + RenderSystem.depthMask(true); + RenderSystem.disableFog(); + } + }; + } + }); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusMarsOrbit.java b/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusMarsOrbit.java new file mode 100644 index 000000000..9d6722367 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusMarsOrbit.java @@ -0,0 +1,266 @@ +package net.mrscauthd.boss_tools.skyrenderer; + +import net.minecraft.client.renderer.vertex.VertexFormat; +import net.minecraft.client.settings.GraphicsFanciness; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.client.ISkyRenderHandler; +import net.minecraftforge.client.ICloudRenderHandler; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.util.math.vector.Vector3f; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraft.client.world.DimensionRenderInfo.FogType; +import net.minecraft.client.world.DimensionRenderInfo; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.renderer.vertex.VertexBuffer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.renderer.WorldVertexBufferUploader; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.FogRenderer; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.Minecraft; + +import javax.annotation.Nullable; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.matrix.MatrixStack; +import net.mrscauthd.boss_tools.BossToolsMod; + +import java.util.Random; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId, bus = Bus.MOD, value = Dist.CLIENT) +public class ClientEventBusMarsOrbit { + @Nullable + public static VertexBuffer starVBO; + public static final VertexFormat skyVertexFormat = DefaultVertexFormats.POSITION; + private static final ResourceLocation DIM_RENDER_INFO = new ResourceLocation(BossToolsMod.ModId, "mars_orbit"); + private static final ResourceLocation MARS_TEXTURE = new ResourceLocation(BossToolsMod.ModId, "textures/sky/mars.png"); + private static final ResourceLocation SUN_TEXTURE = new ResourceLocation(BossToolsMod.ModId, "textures/sky/no_a_sun.png"); + @SubscribeEvent(priority = EventPriority.HIGHEST) + public static void clientSetup(FMLClientSetupEvent event) { + DimensionRenderInfo.field_239208_a_.put(DIM_RENDER_INFO, new DimensionRenderInfo(128, false, FogType.NORMAL, false, false) { + @Override + public Vector3d func_230494_a_(Vector3d fogColor, float partialTicks) { + return fogColor; + } + + @Override + public boolean func_230493_a_(int posX, int posY) { + return false; + } + + @Override + public ICloudRenderHandler getCloudRenderHandler() { + return new ICloudRenderHandler() { + @Override + public void render(int ticks, float partialTicks, MatrixStack matrixStack, ClientWorld world, Minecraft mc, double viewEntityX, double viewEntityY, double viewEntityZ) { + + } + }; + } + + @Override + public ISkyRenderHandler getSkyRenderHandler() { + return new ISkyRenderHandler() { + @SuppressWarnings({"deprecation"}) + @Override + public void render(int ticks, float partialTicks, MatrixStack matrixStack, ClientWorld world, Minecraft mc) { + RenderSystem.disableTexture(); + Vector3d vector3d = world.getSkyColor(mc.gameRenderer.getActiveRenderInfo().getBlockPos(), partialTicks); + float f = (float) vector3d.x; + float f1 = (float) vector3d.y; + float f2 = (float) vector3d.z; + FogRenderer.applyFog(); + BufferBuilder bufferbuilder = Tessellator.getInstance().getBuffer(); + RenderSystem.depthMask(false); + RenderSystem.enableFog(); + RenderSystem.color3f(f, f1, f2); + mc.worldRenderer.skyVBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + mc.worldRenderer.skyVBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + Matrix4f matrix4f1 = matrixStack.getLast().getMatrix(); + RenderSystem.enableAlphaTest(); + RenderSystem.enableTexture(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + RenderSystem.color4f(1f, 1f, 1f, 1f); + //STAR GEN + generateStars(); + RenderSystem.disableTexture(); + RenderSystem.disableFog(); + RenderSystem.disableAlphaTest(); + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + float[] afloat = world.func_239132_a_().func_230492_a_(world.func_242415_f(partialTicks), partialTicks); + if (afloat != null) { + RenderSystem.disableTexture(); + RenderSystem.shadeModel(7425); + matrixStack.push(); + matrixStack.rotate(Vector3f.XP.rotationDegrees(90.0F)); + float f3 = MathHelper.sin(world.getCelestialAngleRadians(partialTicks)) < 0.0F ? 180.0F : 0.0F; + matrixStack.rotate(Vector3f.ZP.rotationDegrees(f3)); + matrixStack.rotate(Vector3f.ZP.rotationDegrees(90.0F)); + float f4 = afloat[0]; + float f5 = afloat[1]; + float f6 = afloat[2]; + Matrix4f matrix4f = matrixStack.getLast().getMatrix(); + bufferbuilder.begin(6, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos(matrix4f, 0.0F, 100.0F, 0.0F).color(f4, f5, f6, afloat[3]).endVertex(); + for (int j = 0; j <= 16; ++j) { + float f7 = (float) j * ((float) Math.PI * 2F) / 16.0F; + float f8 = MathHelper.sin(f7); + float f9 = MathHelper.cos(f7); + bufferbuilder.pos(matrix4f, f8 * 120.0F, f9 * 120.0F, -f9 * 40.0F * afloat[3]).color(afloat[0], afloat[1], afloat[2], 0.0F).endVertex(); + } + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + matrixStack.pop(); + RenderSystem.shadeModel(7424); + } + RenderSystem.enableTexture(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + matrixStack.push(); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + matrixStack.rotate(Vector3f.YP.rotationDegrees(-90.0F)); + matrixStack.rotate(Vector3f.XP.rotationDegrees(0.0F /* world.func_242415_f(partialTicks) * 360.0F */)); + + //MARS + RenderSystem.enableDepthTest(); + RenderSystem.depthMask(true); + + float var20 = -3000.0F + (float) Minecraft.getInstance().player.getPosY() * 6F; + + float scale = 100 * (0.3F - var20 / 10000.0F); + scale = Math.max(scale, 4.0F); + + mc.getTextureManager().bindTexture(MARS_TEXTURE); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix4f1, -scale, -180.0F, scale).tex(0.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, scale, -180.0F, scale).tex(1.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, scale, -180.0F, -scale).tex(1.0F, 1.0F).endVertex(); + bufferbuilder.pos(matrix4f1, -scale, -180.0F, -scale).tex(0.0F, 1.0F).endVertex(); + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + + RenderSystem.depthMask(false); + + matrixStack.rotate(Vector3f.XP.rotationDegrees(world.func_242415_f(partialTicks) * 360.0F)); + matrix4f1 = matrixStack.getLast().getMatrix(); + + float f12 = 35.0F * 2; + + //SUN + mc.getTextureManager().bindTexture(SUN_TEXTURE); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix4f1, -f12, 200.0F, -f12).tex(0.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, f12, 200.0F, -f12).tex(1.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, f12, 200.0F, f12).tex(1.0F, 1.0F).endVertex(); + bufferbuilder.pos(matrix4f1, -f12, 200.0F, f12).tex(0.0F, 1.0F).endVertex(); + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + + RenderSystem.disableTexture(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + starVBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + starVBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.disableBlend(); + RenderSystem.enableAlphaTest(); + RenderSystem.enableFog(); + matrixStack.pop(); + RenderSystem.disableTexture(); + RenderSystem.color3f(0.0F, 0.0F, 0.0F); + + if (world.func_239132_a_().func_239216_b_()) { + RenderSystem.color3f(f * 0.2F + 0.04F, f1 * 0.2F + 0.04F, f2 * 0.6F + 0.1F); + } else { + RenderSystem.color3f(f, f1, f2); + } + RenderSystem.enableTexture(); + RenderSystem.depthMask(true); + RenderSystem.disableFog(); + } + }; + } + + private void generateStars() { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + if (starVBO != null) { + starVBO.close(); + } + + starVBO = new VertexBuffer(skyVertexFormat); + this.renderStars(bufferbuilder); + bufferbuilder.finishDrawing(); + starVBO.upload(bufferbuilder); + } + + private void renderStars(BufferBuilder bufferBuilderIn) { + Random random = new Random(10842L); + bufferBuilderIn.begin(7, DefaultVertexFormats.POSITION); + int stars = 0; + if (Minecraft.getInstance().gameSettings.graphicFanciness == GraphicsFanciness.FANCY || Minecraft.getInstance().gameSettings.graphicFanciness == GraphicsFanciness.FABULOUS) { + stars = 13000; + } else { + stars = 6000; + } + + for(int i = 0; i < stars; ++i) { + double d0 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d1 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d2 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d3 = (double)(0.15F + random.nextFloat() * 0.1F); + double d4 = d0 * d0 + d1 * d1 + d2 * d2; + if (d4 < 1.0D && d4 > 0.01D) { + d4 = 1.0D / Math.sqrt(d4); + d0 = d0 * d4; + d1 = d1 * d4; + d2 = d2 * d4; + double d5 = d0 * 200.0D; + double d6 = d1 * 200.0D; + double d7 = d2 * 200.0D; + double d8 = Math.atan2(d0, d2); + double d9 = Math.sin(d8); + double d10 = Math.cos(d8); + double d11 = Math.atan2(Math.sqrt(d0 * d0 + d2 * d2), d1); + double d12 = Math.sin(d11); + double d13 = Math.cos(d11); + double d14 = random.nextDouble() * Math.PI * 2.0D; + double d15 = Math.sin(d14); + double d16 = Math.cos(d14); + + for(int j = 0; j < 4; ++j) { + double d17 = 0.0D; + double d18 = (double)((j & 2) - 1) * d3; + double d19 = (double)((j + 1 & 2) - 1) * d3; + double d20 = 0.0D; + double d21 = d18 * d16 - d19 * d15; + double d22 = d19 * d16 + d18 * d15; + double d23 = d21 * d12 + 0.0D * d13; + double d24 = 0.0D * d12 - d21 * d13; + double d25 = d24 * d9 - d22 * d10; + double d26 = d22 * d9 + d24 * d10; + bufferBuilderIn.pos(d5 + d25, d6 + d23, d7 + d26).endVertex(); + } + } + } + } + + }); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusMercury.java b/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusMercury.java new file mode 100644 index 000000000..5e4b9bfae --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusMercury.java @@ -0,0 +1,252 @@ +package net.mrscauthd.boss_tools.skyrenderer; + +import net.minecraft.client.renderer.vertex.VertexFormat; +import net.minecraft.client.settings.GraphicsFanciness; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.client.ISkyRenderHandler; +import net.minecraftforge.client.ICloudRenderHandler; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.util.math.vector.Vector3f; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraft.client.world.DimensionRenderInfo.FogType; +import net.minecraft.client.world.DimensionRenderInfo; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.renderer.vertex.VertexBuffer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.renderer.WorldVertexBufferUploader; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.FogRenderer; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.Minecraft; + +import javax.annotation.Nullable; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.matrix.MatrixStack; +import net.mrscauthd.boss_tools.BossToolsMod; + +import java.util.Random; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId, bus = Bus.MOD, value = Dist.CLIENT) +public class ClientEventBusMercury { + @Nullable + public static VertexBuffer starVBO; + public static final VertexFormat skyVertexFormat = DefaultVertexFormats.POSITION; + private static final ResourceLocation DIM_RENDER_INFO = new ResourceLocation(BossToolsMod.ModId, "mercury"); + private static final ResourceLocation SUN_TEXTURE = new ResourceLocation(BossToolsMod.ModId, "textures/sky/no_a_sun.png"); + @SubscribeEvent(priority = EventPriority.HIGHEST) + public static void clientSetup(FMLClientSetupEvent event) { + DimensionRenderInfo.field_239208_a_.put(DIM_RENDER_INFO, new DimensionRenderInfo(128, false, FogType.NORMAL, false, false) { + @Override + public Vector3d func_230494_a_(Vector3d fogColor, float partialTicks) { + return new Vector3d(0.572549019608, 0.082352941176, 0.082352941176); + } + + @Override + public boolean func_230493_a_(int posX, int posY) { + return false; + } + + @Override + public ICloudRenderHandler getCloudRenderHandler() { + return new ICloudRenderHandler() { + @Override + public void render(int ticks, float partialTicks, MatrixStack matrixStack, ClientWorld world, Minecraft mc, double viewEntityX, double viewEntityY, double viewEntityZ) { + + } + }; + } + + @Override + public ISkyRenderHandler getSkyRenderHandler() { + return new ISkyRenderHandler() { + @SuppressWarnings({"deprecation"}) + @Override + public void render(int ticks, float partialTicks, MatrixStack matrixStack, ClientWorld world, Minecraft mc) { + RenderSystem.disableTexture(); + Vector3d vector3d = world.getSkyColor(mc.gameRenderer.getActiveRenderInfo().getBlockPos(), partialTicks); + float f = (float) vector3d.x; + float f1 = (float) vector3d.y; + float f2 = (float) vector3d.z; + FogRenderer.applyFog(); + BufferBuilder bufferbuilder = Tessellator.getInstance().getBuffer(); + RenderSystem.depthMask(false); + RenderSystem.enableFog(); + RenderSystem.color3f(f, f1, f2); + mc.worldRenderer.skyVBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + mc.worldRenderer.skyVBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + Matrix4f matrix4f1 = matrixStack.getLast().getMatrix(); + RenderSystem.enableAlphaTest(); + RenderSystem.enableTexture(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + RenderSystem.color4f(1f, 1f, 1f, 1f); + //STAR GEN + generateStars(); + RenderSystem.disableTexture(); + RenderSystem.disableFog(); + RenderSystem.disableAlphaTest(); + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + float[] afloat = world.func_239132_a_().func_230492_a_(world.func_242415_f(partialTicks), partialTicks); + if (afloat != null) { + RenderSystem.disableTexture(); + RenderSystem.shadeModel(7425); + matrixStack.push(); + matrixStack.rotate(Vector3f.XP.rotationDegrees(90.0F)); + float f3 = MathHelper.sin(world.getCelestialAngleRadians(partialTicks)) < 0.0F ? 180.0F : 0.0F; + matrixStack.rotate(Vector3f.ZP.rotationDegrees(f3)); + matrixStack.rotate(Vector3f.ZP.rotationDegrees(90.0F)); + float f4 = afloat[0]; + float f5 = afloat[1]; + float f6 = afloat[2]; + Matrix4f matrix4f = matrixStack.getLast().getMatrix(); + bufferbuilder.begin(6, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos(matrix4f, 0.0F, 100.0F, 0.0F).color(f4, f5, f6, afloat[3]).endVertex(); + for (int j = 0; j <= 16; ++j) { + float f7 = (float) j * ((float) Math.PI * 2F) / 16.0F; + float f8 = MathHelper.sin(f7); + float f9 = MathHelper.cos(f7); + bufferbuilder.pos(matrix4f, f8 * 120.0F, f9 * 120.0F, -f9 * 40.0F * afloat[3]).color(afloat[0], afloat[1], afloat[2], 0.0F).endVertex(); + } + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + matrixStack.pop(); + RenderSystem.shadeModel(7424); + } + RenderSystem.enableTexture(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + matrixStack.push(); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + + matrixStack.rotate(Vector3f.YP.rotationDegrees(-90.0F)); + matrixStack.rotate(Vector3f.XP.rotationDegrees(world.func_242415_f(partialTicks) * 360.0F)); + matrix4f1 = matrixStack.getLast().getMatrix(); + + + mc.getTextureManager().bindTexture(SUN_TEXTURE); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix4f1, -60, 100.0F, -60).tex(0.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, 60, 100.0F, -60).tex(1.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, 60, 100.0F, 60).tex(1.0F, 1.0F).endVertex(); + bufferbuilder.pos(matrix4f1, -60, 100.0F, 60).tex(0.0F, 1.0F).endVertex(); + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + + RenderSystem.disableTexture(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + starVBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + starVBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.disableBlend(); + RenderSystem.enableAlphaTest(); + RenderSystem.enableFog(); + matrixStack.pop(); + RenderSystem.disableTexture(); + RenderSystem.color3f(0.0F, 0.0F, 0.0F); + + double d0 = mc.player.getEyePosition(partialTicks).y - world.getWorldInfo().getVoidFogHeight(); + if (d0 < 0.0D) { + matrixStack.push(); + matrixStack.translate(0.0D, 12.0D, 0.0D); + mc.worldRenderer.sky2VBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + mc.worldRenderer.sky2VBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + matrixStack.pop(); + } + if (world.func_239132_a_().func_239216_b_()) { + RenderSystem.color3f(f * 0.2F + 0.04F, f1 * 0.2F + 0.04F, f2 * 0.6F + 0.1F); + } else { + RenderSystem.color3f(f, f1, f2); + } + RenderSystem.enableTexture(); + RenderSystem.depthMask(true); + RenderSystem.disableFog(); + } + }; + } + + private void generateStars() { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + if (starVBO != null) { + starVBO.close(); + } + + starVBO = new VertexBuffer(skyVertexFormat); + this.renderStars(bufferbuilder); + bufferbuilder.finishDrawing(); + starVBO.upload(bufferbuilder); + } + + private void renderStars(BufferBuilder bufferBuilderIn) { + Random random = new Random(10842L); + bufferBuilderIn.begin(7, DefaultVertexFormats.POSITION); + int stars = 0; + if (Minecraft.getInstance().gameSettings.graphicFanciness == GraphicsFanciness.FANCY || Minecraft.getInstance().gameSettings.graphicFanciness == GraphicsFanciness.FABULOUS) { + stars = 13000; + } else { + stars = 6000; + } + + for(int i = 0; i < stars; ++i) { + double d0 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d1 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d2 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d3 = (double)(0.15F + random.nextFloat() * 0.1F); + double d4 = d0 * d0 + d1 * d1 + d2 * d2; + if (d4 < 1.0D && d4 > 0.01D) { + d4 = 1.0D / Math.sqrt(d4); + d0 = d0 * d4; + d1 = d1 * d4; + d2 = d2 * d4; + double d5 = d0 * 150.0D; + double d6 = d1 * 150.0D; + double d7 = d2 * 150.0D; + double d8 = Math.atan2(d0, d2); + double d9 = Math.sin(d8); + double d10 = Math.cos(d8); + double d11 = Math.atan2(Math.sqrt(d0 * d0 + d2 * d2), d1); + double d12 = Math.sin(d11); + double d13 = Math.cos(d11); + double d14 = random.nextDouble() * Math.PI * 2.0D; + double d15 = Math.sin(d14); + double d16 = Math.cos(d14); + + for(int j = 0; j < 4; ++j) { + double d17 = 0.0D; + double d18 = (double)((j & 2) - 1) * d3; + double d19 = (double)((j + 1 & 2) - 1) * d3; + double d20 = 0.0D; + double d21 = d18 * d16 - d19 * d15; + double d22 = d19 * d16 + d18 * d15; + double d23 = d21 * d12 + 0.0D * d13; + double d24 = 0.0D * d12 - d21 * d13; + double d25 = d24 * d9 - d22 * d10; + double d26 = d22 * d9 + d24 * d10; + bufferBuilderIn.pos(d5 + d25, d6 + d23, d7 + d26).endVertex(); + } + } + } + } + }); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusMercuryOrbit.java b/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusMercuryOrbit.java new file mode 100644 index 000000000..c00d31b73 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusMercuryOrbit.java @@ -0,0 +1,266 @@ +package net.mrscauthd.boss_tools.skyrenderer; + +import net.minecraft.client.renderer.vertex.VertexFormat; +import net.minecraft.client.settings.GraphicsFanciness; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.client.ISkyRenderHandler; +import net.minecraftforge.client.ICloudRenderHandler; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.util.math.vector.Vector3f; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraft.client.world.DimensionRenderInfo.FogType; +import net.minecraft.client.world.DimensionRenderInfo; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.renderer.vertex.VertexBuffer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.renderer.WorldVertexBufferUploader; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.FogRenderer; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.Minecraft; + +import javax.annotation.Nullable; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.matrix.MatrixStack; +import net.mrscauthd.boss_tools.BossToolsMod; + +import java.util.Random; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId, bus = Bus.MOD, value = Dist.CLIENT) +public class ClientEventBusMercuryOrbit { + @Nullable + public static VertexBuffer starVBO; + public static final VertexFormat skyVertexFormat = DefaultVertexFormats.POSITION; + private static final ResourceLocation DIM_RENDER_INFO = new ResourceLocation(BossToolsMod.ModId, "mercury_orbit"); + private static final ResourceLocation MERCURY_TEXTURE = new ResourceLocation(BossToolsMod.ModId, "textures/sky/mercury.png"); + private static final ResourceLocation SUN_TEXTURE = new ResourceLocation(BossToolsMod.ModId, "textures/sky/no_a_sun.png"); + @SubscribeEvent(priority = EventPriority.HIGHEST) + public static void clientSetup(FMLClientSetupEvent event) { + DimensionRenderInfo.field_239208_a_.put(DIM_RENDER_INFO, new DimensionRenderInfo(128, false, FogType.NORMAL, false, false) { + @Override + public Vector3d func_230494_a_(Vector3d fogColor, float partialTicks) { + return fogColor; + } + + @Override + public boolean func_230493_a_(int posX, int posY) { + return false; + } + + @Override + public ICloudRenderHandler getCloudRenderHandler() { + return new ICloudRenderHandler() { + @Override + public void render(int ticks, float partialTicks, MatrixStack matrixStack, ClientWorld world, Minecraft mc, double viewEntityX, double viewEntityY, double viewEntityZ) { + + } + }; + } + + @Override + public ISkyRenderHandler getSkyRenderHandler() { + return new ISkyRenderHandler() { + @SuppressWarnings({"deprecation"}) + @Override + public void render(int ticks, float partialTicks, MatrixStack matrixStack, ClientWorld world, Minecraft mc) { + RenderSystem.disableTexture(); + Vector3d vector3d = world.getSkyColor(mc.gameRenderer.getActiveRenderInfo().getBlockPos(), partialTicks); + float f = (float) vector3d.x; + float f1 = (float) vector3d.y; + float f2 = (float) vector3d.z; + FogRenderer.applyFog(); + BufferBuilder bufferbuilder = Tessellator.getInstance().getBuffer(); + RenderSystem.depthMask(false); + RenderSystem.enableFog(); + RenderSystem.color3f(f, f1, f2); + mc.worldRenderer.skyVBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + mc.worldRenderer.skyVBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + Matrix4f matrix4f1 = matrixStack.getLast().getMatrix(); + RenderSystem.enableAlphaTest(); + RenderSystem.enableTexture(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + RenderSystem.color4f(1f, 1f, 1f, 1f); + //STAR GEN + generateStars(); + RenderSystem.disableTexture(); + RenderSystem.disableFog(); + RenderSystem.disableAlphaTest(); + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + float[] afloat = world.func_239132_a_().func_230492_a_(world.func_242415_f(partialTicks), partialTicks); + if (afloat != null) { + RenderSystem.disableTexture(); + RenderSystem.shadeModel(7425); + matrixStack.push(); + matrixStack.rotate(Vector3f.XP.rotationDegrees(90.0F)); + float f3 = MathHelper.sin(world.getCelestialAngleRadians(partialTicks)) < 0.0F ? 180.0F : 0.0F; + matrixStack.rotate(Vector3f.ZP.rotationDegrees(f3)); + matrixStack.rotate(Vector3f.ZP.rotationDegrees(90.0F)); + float f4 = afloat[0]; + float f5 = afloat[1]; + float f6 = afloat[2]; + Matrix4f matrix4f = matrixStack.getLast().getMatrix(); + bufferbuilder.begin(6, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos(matrix4f, 0.0F, 100.0F, 0.0F).color(f4, f5, f6, afloat[3]).endVertex(); + for (int j = 0; j <= 16; ++j) { + float f7 = (float) j * ((float) Math.PI * 2F) / 16.0F; + float f8 = MathHelper.sin(f7); + float f9 = MathHelper.cos(f7); + bufferbuilder.pos(matrix4f, f8 * 120.0F, f9 * 120.0F, -f9 * 40.0F * afloat[3]).color(afloat[0], afloat[1], afloat[2], 0.0F).endVertex(); + } + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + matrixStack.pop(); + RenderSystem.shadeModel(7424); + } + RenderSystem.enableTexture(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + matrixStack.push(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + matrixStack.rotate(Vector3f.YP.rotationDegrees(-90.0F)); + matrixStack.rotate(Vector3f.XP.rotationDegrees(0.0F)); + matrix4f1 = matrixStack.getLast().getMatrix(); + + //MERCURY + RenderSystem.enableDepthTest(); + RenderSystem.depthMask(true); + + float var20 = -3000.0F + (float) Minecraft.getInstance().player.getPosY() * 6F; + + float scale = 100 * (0.3F - var20 / 10000.0F); + scale = Math.max(scale, 4.0F); + + mc.getTextureManager().bindTexture(MERCURY_TEXTURE); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix4f1, -scale, -180.0F, scale).tex(0.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, scale, -180.0F, scale).tex(1.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, scale, -180.0F, -scale).tex(1.0F, 1.0F).endVertex(); + bufferbuilder.pos(matrix4f1, -scale, -180.0F, -scale).tex(0.0F, 1.0F).endVertex(); + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + + RenderSystem.depthMask(false); + + matrixStack.rotate(Vector3f.XP.rotationDegrees(world.func_242415_f(partialTicks) * 360.0F)); + + float f12 = 60.0F * 2; + + //SUN TEXTURE + mc.getTextureManager().bindTexture(SUN_TEXTURE); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix4f1, -f12, 200.0F, -f12).tex(0.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, f12, 200.0F, -f12).tex(1.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, f12, 200.0F, f12).tex(1.0F, 1.0F).endVertex(); + bufferbuilder.pos(matrix4f1, -f12, 200.0F, f12).tex(0.0F, 1.0F).endVertex(); + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + + RenderSystem.disableTexture(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + starVBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + starVBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.disableBlend(); + RenderSystem.enableAlphaTest(); + RenderSystem.enableFog(); + matrixStack.pop(); + RenderSystem.disableTexture(); + RenderSystem.color3f(0.0F, 0.0F, 0.0F); + + if (world.func_239132_a_().func_239216_b_()) { + RenderSystem.color3f(f * 0.2F + 0.04F, f1 * 0.2F + 0.04F, f2 * 0.6F + 0.1F); + } else { + RenderSystem.color3f(f, f1, f2); + } + RenderSystem.enableTexture(); + RenderSystem.depthMask(true); + RenderSystem.disableFog(); + } + }; + } + + private void generateStars() { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + if (starVBO != null) { + starVBO.close(); + } + + starVBO = new VertexBuffer(skyVertexFormat); + this.renderStars(bufferbuilder); + bufferbuilder.finishDrawing(); + starVBO.upload(bufferbuilder); + } + + private void renderStars(BufferBuilder bufferBuilderIn) { + Random random = new Random(10842L); + bufferBuilderIn.begin(7, DefaultVertexFormats.POSITION); + int stars = 0; + if (Minecraft.getInstance().gameSettings.graphicFanciness == GraphicsFanciness.FANCY || Minecraft.getInstance().gameSettings.graphicFanciness == GraphicsFanciness.FABULOUS) { + stars = 13000; + } else { + stars = 6000; + } + + for(int i = 0; i < stars; ++i) { + double d0 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d1 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d2 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d3 = (double)(0.15F + random.nextFloat() * 0.1F); + double d4 = d0 * d0 + d1 * d1 + d2 * d2; + if (d4 < 1.0D && d4 > 0.01D) { + d4 = 1.0D / Math.sqrt(d4); + d0 = d0 * d4; + d1 = d1 * d4; + d2 = d2 * d4; + double d5 = d0 * 200.0D; + double d6 = d1 * 200.0D; + double d7 = d2 * 200.0D; + double d8 = Math.atan2(d0, d2); + double d9 = Math.sin(d8); + double d10 = Math.cos(d8); + double d11 = Math.atan2(Math.sqrt(d0 * d0 + d2 * d2), d1); + double d12 = Math.sin(d11); + double d13 = Math.cos(d11); + double d14 = random.nextDouble() * Math.PI * 2.0D; + double d15 = Math.sin(d14); + double d16 = Math.cos(d14); + + for(int j = 0; j < 4; ++j) { + double d17 = 0.0D; + double d18 = (double)((j & 2) - 1) * d3; + double d19 = (double)((j + 1 & 2) - 1) * d3; + double d20 = 0.0D; + double d21 = d18 * d16 - d19 * d15; + double d22 = d19 * d16 + d18 * d15; + double d23 = d21 * d12 + 0.0D * d13; + double d24 = 0.0D * d12 - d21 * d13; + double d25 = d24 * d9 - d22 * d10; + double d26 = d22 * d9 + d24 * d10; + bufferBuilderIn.pos(d5 + d25, d6 + d23, d7 + d26).endVertex(); + } + } + } + } + }); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusMoon.java b/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusMoon.java new file mode 100644 index 000000000..a98cb467f --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusMoon.java @@ -0,0 +1,285 @@ +package net.mrscauthd.boss_tools.skyrenderer; + +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.vertex.VertexFormat; +import net.minecraft.client.settings.GraphicsFanciness; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.client.ISkyRenderHandler; +import net.minecraftforge.client.ICloudRenderHandler; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.util.math.vector.Vector3f; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraft.client.world.DimensionRenderInfo.FogType; +import net.minecraft.client.world.DimensionRenderInfo; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.renderer.vertex.VertexBuffer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.Minecraft; + +import java.util.Random; + +import javax.annotation.Nullable; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.matrix.MatrixStack; +import net.mrscauthd.boss_tools.BossToolsMod; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId, bus = Bus.MOD, value = Dist.CLIENT) +public class ClientEventBusMoon { + @Nullable + public static VertexBuffer starVBO; + public static final VertexFormat skyVertexFormat = DefaultVertexFormats.POSITION; + private static final ResourceLocation DIM_RENDER_INFO = new ResourceLocation(BossToolsMod.ModId, "moon"); + private static final ResourceLocation SUN_TEXTURES = new ResourceLocation(BossToolsMod.ModId, "textures/sky/no_a_sun.png"); + private static final ResourceLocation EARTH = new ResourceLocation(BossToolsMod.ModId, "textures/sky/earth.png"); + private static final ResourceLocation EARTH_LIGHT_TEXTURES = new ResourceLocation(BossToolsMod.ModId, "textures/sky/earth_light.png"); + @SubscribeEvent(priority = EventPriority.HIGHEST) + public static void clientSetup(FMLClientSetupEvent event) { + DimensionRenderInfo.field_239208_a_.put(DIM_RENDER_INFO, new DimensionRenderInfo(128, false, FogType.NORMAL, false, false) { + @Override + public Vector3d func_230494_a_(Vector3d fogColor, float partialTicks) { + return fogColor; + } + + @Override + public boolean func_230493_a_(int posX, int posY) { + return false; + } + + @Override + public ICloudRenderHandler getCloudRenderHandler() { + return new ICloudRenderHandler() { + @Override + public void render(int ticks, float partialTicks, MatrixStack matrixStack, ClientWorld world, Minecraft mc, double viewEntityX, double viewEntityY, double viewEntityZ) { + + } + }; + } + + @Override + public ISkyRenderHandler getSkyRenderHandler() { + return new ISkyRenderHandler() { + @SuppressWarnings({"deprecation"}) + @Override + public void render(int ticks, float partialTicks, MatrixStack matrixStack, ClientWorld world, Minecraft mc) { + RenderSystem.disableTexture(); + Vector3d vector3d = world.getSkyColor(mc.gameRenderer.getActiveRenderInfo().getBlockPos(), partialTicks); + float f = (float) vector3d.x; + float f1 = (float) vector3d.y; + float f2 = (float) vector3d.z; + FogRenderer.applyFog(); + BufferBuilder bufferbuilder = Tessellator.getInstance().getBuffer(); + RenderSystem.disableDepthTest(); + RenderSystem.depthMask(false); + RenderSystem.enableFog(); + RenderSystem.color3f(f, f1, f2); + mc.worldRenderer.skyVBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + mc.worldRenderer.skyVBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + Matrix4f matrix4f1 = matrixStack.getLast().getMatrix(); + RenderSystem.enableAlphaTest(); + RenderSystem.enableTexture(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + RenderSystem.color4f(1f, 1f, 1f, 1f); + //STAR GEN + generateStars(); + RenderSystem.disableTexture(); + RenderSystem.disableFog(); + RenderSystem.disableAlphaTest(); + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + float[] afloat = world.func_239132_a_().func_230492_a_(world.func_242415_f(partialTicks), partialTicks); + if (afloat != null) { + RenderSystem.disableTexture(); + RenderSystem.shadeModel(7425); + matrixStack.push(); + matrixStack.rotate(Vector3f.XP.rotationDegrees(90.0F)); + float f3 = MathHelper.sin(world.getCelestialAngleRadians(partialTicks)) < 0.0F ? 180.0F : 0.0F; + matrixStack.rotate(Vector3f.ZP.rotationDegrees(f3)); + matrixStack.rotate(Vector3f.ZP.rotationDegrees(90.0F)); + float f4 = afloat[0]; + float f5 = afloat[1]; + float f6 = afloat[2]; + Matrix4f matrix4f = matrixStack.getLast().getMatrix(); + bufferbuilder.begin(6, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos(matrix4f, 0.0F, 100.0F, 0.0F).color(f4, f5, f6, afloat[3]).endVertex(); + for (int j = 0; j <= 16; ++j) { + float f7 = (float) j * ((float) Math.PI * 2F) / 16.0F; + float f8 = MathHelper.sin(f7); + float f9 = MathHelper.cos(f7); + bufferbuilder.pos(matrix4f, f8 * 120.0F, f9 * 120.0F, -f9 * 40.0F * afloat[3]).color(afloat[0], afloat[1], afloat[2], 0.0F).endVertex(); + } + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + matrixStack.pop(); + RenderSystem.shadeModel(7424); + } + RenderSystem.enableTexture(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + matrixStack.push(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + matrixStack.rotate(Vector3f.YP.rotationDegrees(-90.0F)); + matrixStack.rotate(Vector3f.XP.rotationDegrees(180.0F /* world.func_242415_f(partialTicks) * 360.0F */)); + matrixStack.rotate(Vector3f.ZP.rotationDegrees(30.0F)); + matrix4f1 = matrixStack.getLast().getMatrix(); + + float f12 = 30.0F; + + //EARTH LIGHT + mc.getTextureManager().bindTexture(EARTH_LIGHT_TEXTURES); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix4f1, -25, -100.0F, 25).tex(0.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, 25, -100.0F, 25).tex(1.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, 25, -100.0F, -25).tex(1.0F, 1.0F).endVertex(); + bufferbuilder.pos(matrix4f1, -25, -100.0F, -25).tex(0.0F, 1.0F).endVertex(); + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + + //EARTH + RenderSystem.enableDepthTest(); + RenderSystem.depthMask(true); + + mc.getTextureManager().bindTexture(EARTH); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix4f1, -9, -99.0F, 9).tex(0.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, 9, -99.0F, 9).tex(1.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, 9, -99.0F, -9).tex(1.0F, 1.0F).endVertex(); + bufferbuilder.pos(matrix4f1, -9, -99.0F, -9).tex(0.0F, 1.0F).endVertex(); + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + + RenderSystem.depthMask(false); + + matrixStack.rotate(Vector3f.ZP.rotationDegrees(-30.0F)); + matrixStack.rotate(Vector3f.XP.rotationDegrees(world.func_242415_f(partialTicks) * 360.0F)); + matrix4f1 = matrixStack.getLast().getMatrix(); + + //SUN + mc.getTextureManager().bindTexture(SUN_TEXTURES); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix4f1, -f12, -100.0F, f12).tex(0.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, f12, -100.0F, f12).tex(1.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, f12, -100.0F, -f12).tex(1.0F, 1.0F).endVertex(); + bufferbuilder.pos(matrix4f1, -f12, -100.0F, -f12).tex(0.0F, 1.0F).endVertex(); + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + + RenderSystem.disableTexture(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + starVBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + starVBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.disableBlend(); + RenderSystem.enableAlphaTest(); + RenderSystem.enableFog(); + matrixStack.pop(); + RenderSystem.disableTexture(); + RenderSystem.color3f(0.0F, 0.0F, 0.0F); + + double d0 = mc.player.getEyePosition(partialTicks).y - world.getWorldInfo().getVoidFogHeight(); + + if (d0 < 0.0D) { + matrixStack.push(); + matrixStack.translate(0.0D, 12.0D, 0.0D); + mc.worldRenderer.sky2VBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + mc.worldRenderer.sky2VBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + matrixStack.pop(); + } + if (world.func_239132_a_().func_239216_b_()) { + RenderSystem.color3f(f * 0.2F + 0.04F, f1 * 0.2F + 0.04F, f2 * 0.6F + 0.1F); + } else { + RenderSystem.color3f(f, f1, f2); + } + RenderSystem.enableTexture(); + RenderSystem.depthMask(true); + RenderSystem.disableFog(); + } + }; + } + + private void generateStars() { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + if (starVBO != null) { + starVBO.close(); + } + + starVBO = new VertexBuffer(skyVertexFormat); + this.renderStars(bufferbuilder); + bufferbuilder.finishDrawing(); + starVBO.upload(bufferbuilder); + } + + private void renderStars(BufferBuilder bufferBuilderIn) { + Random random = new Random(10842L); + bufferBuilderIn.begin(7, DefaultVertexFormats.POSITION); + int stars = 0; + if (Minecraft.getInstance().gameSettings.graphicFanciness == GraphicsFanciness.FANCY || Minecraft.getInstance().gameSettings.graphicFanciness == GraphicsFanciness.FABULOUS) { + stars = 13000; + } else { + stars = 6000; + } + + for(int i = 0; i < stars; ++i) { + double d0 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d1 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d2 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d3 = (double)(0.15F + random.nextFloat() * 0.1F); + double d4 = d0 * d0 + d1 * d1 + d2 * d2; + if (d4 < 1.0D && d4 > 0.01D) { + d4 = 1.0D / Math.sqrt(d4); + d0 = d0 * d4; + d1 = d1 * d4; + d2 = d2 * d4; + double d5 = d0 * 150.0D; + double d6 = d1 * 150.0D; + double d7 = d2 * 150.0D; + double d8 = Math.atan2(d0, d2); + double d9 = Math.sin(d8); + double d10 = Math.cos(d8); + double d11 = Math.atan2(Math.sqrt(d0 * d0 + d2 * d2), d1); + double d12 = Math.sin(d11); + double d13 = Math.cos(d11); + double d14 = random.nextDouble() * Math.PI * 2.0D; + double d15 = Math.sin(d14); + double d16 = Math.cos(d14); + + for(int j = 0; j < 4; ++j) { + double d17 = 0.0D; + double d18 = (double)((j & 2) - 1) * d3; + double d19 = (double)((j + 1 & 2) - 1) * d3; + double d20 = 0.0D; + double d21 = d18 * d16 - d19 * d15; + double d22 = d19 * d16 + d18 * d15; + double d23 = d21 * d12 + 0.0D * d13; + double d24 = 0.0D * d12 - d21 * d13; + double d25 = d24 * d9 - d22 * d10; + double d26 = d22 * d9 + d24 * d10; + bufferBuilderIn.pos(d5 + d25, d6 + d23, d7 + d26).endVertex(); + } + } + } + } + }); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusMoonOrbit.java b/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusMoonOrbit.java new file mode 100644 index 000000000..693eb9b85 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusMoonOrbit.java @@ -0,0 +1,266 @@ +package net.mrscauthd.boss_tools.skyrenderer; + +import net.minecraft.client.renderer.vertex.VertexFormat; +import net.minecraft.client.settings.GraphicsFanciness; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.client.ISkyRenderHandler; +import net.minecraftforge.client.ICloudRenderHandler; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.util.math.vector.Vector3f; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraft.client.world.DimensionRenderInfo.FogType; +import net.minecraft.client.world.DimensionRenderInfo; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.renderer.vertex.VertexBuffer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.renderer.WorldVertexBufferUploader; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.FogRenderer; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.Minecraft; + +import javax.annotation.Nullable; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.matrix.MatrixStack; +import net.mrscauthd.boss_tools.BossToolsMod; + +import java.util.Random; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId, bus = Bus.MOD, value = Dist.CLIENT) +public class ClientEventBusMoonOrbit { + @Nullable + public static VertexBuffer starVBO; + public static final VertexFormat skyVertexFormat = DefaultVertexFormats.POSITION; + private static final ResourceLocation DIM_RENDER_INFO = new ResourceLocation(BossToolsMod.ModId, "moon_orbit"); + private static final ResourceLocation MOON_TEXTURE = new ResourceLocation(BossToolsMod.ModId, "textures/sky/moon.png"); + private static final ResourceLocation SUN_TEXTURE = new ResourceLocation(BossToolsMod.ModId, "textures/sky/no_a_sun.png"); + @SubscribeEvent(priority = EventPriority.HIGHEST) + public static void clientSetup(FMLClientSetupEvent event) { + DimensionRenderInfo.field_239208_a_.put(DIM_RENDER_INFO, new DimensionRenderInfo(128, false, FogType.NORMAL, false, false) { + @Override + public Vector3d func_230494_a_(Vector3d fogColor, float partialTicks) { + return fogColor; + } + + @Override + public boolean func_230493_a_(int posX, int posY) { + return false; + } + + @Override + public ICloudRenderHandler getCloudRenderHandler() { + return new ICloudRenderHandler() { + @Override + public void render(int ticks, float partialTicks, MatrixStack matrixStack, ClientWorld world, Minecraft mc, double viewEntityX, double viewEntityY, double viewEntityZ) { + + } + }; + } + + @Override + public ISkyRenderHandler getSkyRenderHandler() { + return new ISkyRenderHandler() { + @SuppressWarnings({"deprecation"}) + @Override + public void render(int ticks, float partialTicks, MatrixStack matrixStack, ClientWorld world, Minecraft mc) { + RenderSystem.disableTexture(); + Vector3d vector3d = world.getSkyColor(mc.gameRenderer.getActiveRenderInfo().getBlockPos(), partialTicks); + float f = (float) vector3d.x; + float f1 = (float) vector3d.y; + float f2 = (float) vector3d.z; + FogRenderer.applyFog(); + BufferBuilder bufferbuilder = Tessellator.getInstance().getBuffer(); + RenderSystem.depthMask(false); + RenderSystem.enableFog(); + RenderSystem.color3f(f, f1, f2); + mc.worldRenderer.skyVBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + mc.worldRenderer.skyVBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + Matrix4f matrix4f1 = matrixStack.getLast().getMatrix(); + RenderSystem.enableAlphaTest(); + RenderSystem.enableTexture(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + RenderSystem.color4f(1f, 1f, 1f, 1f); + //STAR GEN + generateStars(); + RenderSystem.disableTexture(); + RenderSystem.disableFog(); + RenderSystem.disableAlphaTest(); + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + float[] afloat = world.func_239132_a_().func_230492_a_(world.func_242415_f(partialTicks), partialTicks); + if (afloat != null) { + RenderSystem.disableTexture(); + RenderSystem.shadeModel(7425); + matrixStack.push(); + matrixStack.rotate(Vector3f.XP.rotationDegrees(90.0F)); + float f3 = MathHelper.sin(world.getCelestialAngleRadians(partialTicks)) < 0.0F ? 180.0F : 0.0F; + matrixStack.rotate(Vector3f.ZP.rotationDegrees(f3)); + matrixStack.rotate(Vector3f.ZP.rotationDegrees(90.0F)); + float f4 = afloat[0]; + float f5 = afloat[1]; + float f6 = afloat[2]; + Matrix4f matrix4f = matrixStack.getLast().getMatrix(); + bufferbuilder.begin(6, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos(matrix4f, 0.0F, 100.0F, 0.0F).color(f4, f5, f6, afloat[3]).endVertex(); + for (int j = 0; j <= 16; ++j) { + float f7 = (float) j * ((float) Math.PI * 2F) / 16.0F; + float f8 = MathHelper.sin(f7); + float f9 = MathHelper.cos(f7); + bufferbuilder.pos(matrix4f, f8 * 120.0F, f9 * 120.0F, -f9 * 40.0F * afloat[3]).color(afloat[0], afloat[1], afloat[2], 0.0F).endVertex(); + } + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + matrixStack.pop(); + RenderSystem.shadeModel(7424); + } + RenderSystem.enableTexture(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + matrixStack.push(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + matrixStack.rotate(Vector3f.YP.rotationDegrees(-90.0F)); + matrixStack.rotate(Vector3f.XP.rotationDegrees(0.0F)); + matrix4f1 = matrixStack.getLast().getMatrix(); + + //MOON + RenderSystem.enableDepthTest(); + RenderSystem.depthMask(true); + + float var20 = -3000.0F + (float) Minecraft.getInstance().player.getPosY() * 6F; + + float scale = 100 * (0.3F - var20 / 10000.0F); + scale = Math.max(scale, 4.0F); + + mc.getTextureManager().bindTexture(MOON_TEXTURE); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix4f1, -scale, -180.0F, scale).tex(0.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, scale, -180.0F, scale).tex(1.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, scale, -180.0F, -scale).tex(1.0F, 1.0F).endVertex(); + bufferbuilder.pos(matrix4f1, -scale, -180.0F, -scale).tex(0.0F, 1.0F).endVertex(); + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + + RenderSystem.depthMask(false); + + matrixStack.rotate(Vector3f.XP.rotationDegrees(world.func_242415_f(partialTicks) * 360.0F));//Normal Day Circle + + float f12 = 35.0F * 2; + + //SUN TEXTURE + mc.getTextureManager().bindTexture(SUN_TEXTURE); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix4f1, -f12, 200.0F, -f12).tex(0.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, f12, 200.0F, -f12).tex(1.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, f12, 200.0F, f12).tex(1.0F, 1.0F).endVertex(); + bufferbuilder.pos(matrix4f1, -f12, 200.0F, f12).tex(0.0F, 1.0F).endVertex(); + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + + RenderSystem.disableTexture(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + starVBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + starVBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.disableBlend(); + RenderSystem.enableAlphaTest(); + RenderSystem.enableFog(); + matrixStack.pop(); + RenderSystem.disableTexture(); + RenderSystem.color3f(0.0F, 0.0F, 0.0F); + + if (world.func_239132_a_().func_239216_b_()) { + RenderSystem.color3f(f * 0.2F + 0.04F, f1 * 0.2F + 0.04F, f2 * 0.6F + 0.1F); + } else { + RenderSystem.color3f(f, f1, f2); + } + RenderSystem.enableTexture(); + RenderSystem.depthMask(true); + RenderSystem.disableFog(); + } + }; + } + + private void generateStars() { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + if (starVBO != null) { + starVBO.close(); + } + + starVBO = new VertexBuffer(skyVertexFormat); + this.renderStars(bufferbuilder); + bufferbuilder.finishDrawing(); + starVBO.upload(bufferbuilder); + } + + private void renderStars(BufferBuilder bufferBuilderIn) { + Random random = new Random(10842L); + bufferBuilderIn.begin(7, DefaultVertexFormats.POSITION); + int stars = 0; + if (Minecraft.getInstance().gameSettings.graphicFanciness == GraphicsFanciness.FANCY || Minecraft.getInstance().gameSettings.graphicFanciness == GraphicsFanciness.FABULOUS) { + stars = 13000; + } else { + stars = 6000; + } + + for(int i = 0; i < stars; ++i) { + double d0 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d1 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d2 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d3 = (double)(0.15F + random.nextFloat() * 0.1F); + double d4 = d0 * d0 + d1 * d1 + d2 * d2; + if (d4 < 1.0D && d4 > 0.01D) { + d4 = 1.0D / Math.sqrt(d4); + d0 = d0 * d4; + d1 = d1 * d4; + d2 = d2 * d4; + double d5 = d0 * 200.0D; + double d6 = d1 * 200.0D; + double d7 = d2 * 200.0D; + double d8 = Math.atan2(d0, d2); + double d9 = Math.sin(d8); + double d10 = Math.cos(d8); + double d11 = Math.atan2(Math.sqrt(d0 * d0 + d2 * d2), d1); + double d12 = Math.sin(d11); + double d13 = Math.cos(d11); + double d14 = random.nextDouble() * Math.PI * 2.0D; + double d15 = Math.sin(d14); + double d16 = Math.cos(d14); + + for(int j = 0; j < 4; ++j) { + double d17 = 0.0D; + double d18 = (double)((j & 2) - 1) * d3; + double d19 = (double)((j + 1 & 2) - 1) * d3; + double d20 = 0.0D; + double d21 = d18 * d16 - d19 * d15; + double d22 = d19 * d16 + d18 * d15; + double d23 = d21 * d12 + 0.0D * d13; + double d24 = 0.0D * d12 - d21 * d13; + double d25 = d24 * d9 - d22 * d10; + double d26 = d22 * d9 + d24 * d10; + bufferBuilderIn.pos(d5 + d25, d6 + d23, d7 + d26).endVertex(); + } + } + } + } + }); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusOverworldOrbit.java b/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusOverworldOrbit.java new file mode 100644 index 000000000..ed16709b4 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusOverworldOrbit.java @@ -0,0 +1,288 @@ +package net.mrscauthd.boss_tools.skyrenderer; + +import net.minecraft.client.renderer.vertex.VertexFormat; +import net.minecraft.client.settings.GraphicsFanciness; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.client.ISkyRenderHandler; +import net.minecraftforge.client.ICloudRenderHandler; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.util.math.vector.Vector3f; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraft.client.world.DimensionRenderInfo.FogType; +import net.minecraft.client.world.DimensionRenderInfo; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.renderer.vertex.VertexBuffer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.renderer.WorldVertexBufferUploader; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.FogRenderer; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.Minecraft; + +import javax.annotation.Nullable; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.matrix.MatrixStack; +import net.mrscauthd.boss_tools.BossToolsMod; + +import java.util.Random; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId, bus = Bus.MOD, value = Dist.CLIENT) +public class ClientEventBusOverworldOrbit { + @Nullable + public static VertexBuffer starVBO; + public static final VertexFormat skyVertexFormat = DefaultVertexFormats.POSITION; + private static final ResourceLocation DIM_RENDER_INFO = new ResourceLocation(BossToolsMod.ModId, "overworld_orbit"); + private static final ResourceLocation EARTH_TEXTURE = new ResourceLocation(BossToolsMod.ModId, "textures/sky/earth.png"); + private static final ResourceLocation SUN_TEXTURE = new ResourceLocation(BossToolsMod.ModId, "textures/sky/no_a_sun.png"); + private static final ResourceLocation MOON_TEXTURE = new ResourceLocation(BossToolsMod.ModId, "textures/sky/moon_phases.png"); + @SubscribeEvent(priority = EventPriority.HIGHEST) + public static void clientSetup(FMLClientSetupEvent event) { + DimensionRenderInfo.field_239208_a_.put(DIM_RENDER_INFO, new DimensionRenderInfo(128, false, FogType.NORMAL, false, false) { + @Override + public Vector3d func_230494_a_(Vector3d fogColor, float partialTicks) { + return fogColor; + } + + @Override + public boolean func_230493_a_(int posX, int posY) { + return false; + } + + @Override + public ICloudRenderHandler getCloudRenderHandler() { + return new ICloudRenderHandler() { + @Override + public void render(int ticks, float partialTicks, MatrixStack matrixStack, ClientWorld world, Minecraft mc, double viewEntityX, double viewEntityY, double viewEntityZ) { + + } + }; + } + + @Override + public ISkyRenderHandler getSkyRenderHandler() { + return new ISkyRenderHandler() { + @SuppressWarnings({"deprecation"}) + @Override + public void render(int ticks, float partialTicks, MatrixStack matrixStack, ClientWorld world, Minecraft mc) { + RenderSystem.disableTexture(); + Vector3d vector3d = world.getSkyColor(mc.gameRenderer.getActiveRenderInfo().getBlockPos(), partialTicks); + float f = (float) vector3d.x; + float f1 = (float) vector3d.y; + float f2 = (float) vector3d.z; + FogRenderer.applyFog(); + BufferBuilder bufferbuilder = Tessellator.getInstance().getBuffer(); + RenderSystem.disableDepthTest(); + RenderSystem.depthMask(false); + RenderSystem.enableFog(); + RenderSystem.color3f(f, f1, f2); + mc.worldRenderer.skyVBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + mc.worldRenderer.skyVBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + Matrix4f matrix4f1 = matrixStack.getLast().getMatrix(); + RenderSystem.enableAlphaTest(); + RenderSystem.enableTexture(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + RenderSystem.color4f(1f, 1f, 1f, 1f); + //STAR GEN + generateStars(); + RenderSystem.disableTexture(); + RenderSystem.disableFog(); + RenderSystem.disableAlphaTest(); + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + float[] afloat = world.func_239132_a_().func_230492_a_(world.func_242415_f(partialTicks), partialTicks); + if (afloat != null) { + RenderSystem.disableTexture(); + RenderSystem.shadeModel(7425);// 7425 + matrixStack.push(); + matrixStack.rotate(Vector3f.XP.rotationDegrees(90.0F)); + float f3 = MathHelper.sin(world.getCelestialAngleRadians(partialTicks)) < 0.0F ? 180.0F : 0.0F; + matrixStack.rotate(Vector3f.ZP.rotationDegrees(f3)); + matrixStack.rotate(Vector3f.ZP.rotationDegrees(90.0F)); + float f4 = afloat[0]; + float f5 = afloat[1]; + float f6 = afloat[2]; + Matrix4f matrix4f = matrixStack.getLast().getMatrix(); + bufferbuilder.begin(6, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos(matrix4f, 0.0F, 100.0F, 0.0F).color(f4, f5, f6, afloat[3]).endVertex(); + for (int j = 0; j <= 16; ++j) { + float f7 = (float) j * ((float) Math.PI * 2F) / 16.0F; + float f8 = MathHelper.sin(f7); + float f9 = MathHelper.cos(f7); + bufferbuilder.pos(matrix4f, f8 * 120.0F, f9 * 120.0F, -f9 * 40.0F * afloat[3]).color(afloat[0], afloat[1], afloat[2], 0.0F).endVertex(); + } + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + matrixStack.pop(); + RenderSystem.shadeModel(7424); + } + RenderSystem.enableTexture(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + matrixStack.push(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + matrixStack.rotate(Vector3f.YP.rotationDegrees(-90.0F)); + matrixStack.rotate(Vector3f.XP.rotationDegrees(0.0F /* world.func_242415_f(partialTicks) * 360.0F */)); + matrix4f1 = matrixStack.getLast().getMatrix(); + + //EARTH + RenderSystem.enableDepthTest(); + RenderSystem.depthMask(true); + + float var20 = -3000.0F + (float) Minecraft.getInstance().player.getPosY() * 6F; + + float scale = 100 * (0.3F - var20 / 10000.0F); + scale = Math.max(scale, 4.0F); + + mc.getTextureManager().bindTexture(EARTH_TEXTURE); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix4f1, -scale, -180.0F, scale).tex(0.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, scale, -180.0F, scale).tex(1.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, scale, -180.0F, -scale).tex(1.0F, 1.0F).endVertex(); + bufferbuilder.pos(matrix4f1, -scale, -180.0F, -scale).tex(0.0F, 1.0F).endVertex(); + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + + RenderSystem.depthMask(false); + + matrixStack.rotate(Vector3f.XP.rotationDegrees(world.func_242415_f(partialTicks) * 360.0F));//Normal Day Circle + + float f12 = 20.0F * 2; + + //MOON + mc.getTextureManager().bindTexture(MOON_TEXTURE); + int k = world.getMoonPhase(); + int l = k % 4; + int i1 = k / 4 % 2; + float f13 = (float) (l + 0) / 4.0F; + float f14 = (float) (i1 + 0) / 2.0F; + float f15 = (float) (l + 1) / 4.0F; + float f16 = (float) (i1 + 1) / 2.0F; + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix4f1, -f12, -200.0F,f12).tex(f15, f16).endVertex(); + bufferbuilder.pos(matrix4f1, f12, -200.0F, f12).tex(f13, f16).endVertex(); + bufferbuilder.pos(matrix4f1, f12, -200.0F, -f12).tex(f13, f14).endVertex(); + bufferbuilder.pos(matrix4f1, -f12, -200.0F, -f12).tex(f15, f14).endVertex(); + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + + f12 = 35 * 2; + + //SUN + mc.getTextureManager().bindTexture(SUN_TEXTURE); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix4f1, -f12, 200.0F, -f12).tex(0.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, f12, 200.0F, -f12).tex(1.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, f12, 200.0F, f12).tex(1.0F, 1.0F).endVertex(); + bufferbuilder.pos(matrix4f1, -f12, 200.0F, f12).tex(0.0F, 1.0F).endVertex(); + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + + RenderSystem.disableTexture(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + starVBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + starVBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.disableBlend(); + RenderSystem.enableAlphaTest(); + RenderSystem.enableFog(); + matrixStack.pop(); + RenderSystem.disableTexture(); + RenderSystem.color3f(0.0F, 0.0F, 0.0F); + + if (world.func_239132_a_().func_239216_b_()) { + RenderSystem.color3f(f * 0.2F + 0.04F, f1 * 0.2F + 0.04F, f2 * 0.6F + 0.1F); + } else { + RenderSystem.color3f(f, f1, f2); + } + RenderSystem.enableTexture(); + RenderSystem.depthMask(true); + RenderSystem.disableFog(); + } + }; + } + + private void generateStars() { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + if (starVBO != null) { + starVBO.close(); + } + + starVBO = new VertexBuffer(skyVertexFormat); + this.renderStars(bufferbuilder); + bufferbuilder.finishDrawing(); + starVBO.upload(bufferbuilder); + } + + private void renderStars(BufferBuilder bufferBuilderIn) { + Random random = new Random(10842L); + bufferBuilderIn.begin(7, DefaultVertexFormats.POSITION); + int stars = 0; + if (Minecraft.getInstance().gameSettings.graphicFanciness == GraphicsFanciness.FANCY || Minecraft.getInstance().gameSettings.graphicFanciness == GraphicsFanciness.FABULOUS) { + stars = 13000; + } else { + stars = 6000; + } + + for(int i = 0; i < stars; ++i) { + double d0 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d1 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d2 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d3 = (double)(0.15F + random.nextFloat() * 0.1F); + double d4 = d0 * d0 + d1 * d1 + d2 * d2; + if (d4 < 1.0D && d4 > 0.01D) { + d4 = 1.0D / Math.sqrt(d4); + d0 = d0 * d4; + d1 = d1 * d4; + d2 = d2 * d4; + double d5 = d0 * 200.0D; + double d6 = d1 * 200.0D; + double d7 = d2 * 200.0D; + double d8 = Math.atan2(d0, d2); + double d9 = Math.sin(d8); + double d10 = Math.cos(d8); + double d11 = Math.atan2(Math.sqrt(d0 * d0 + d2 * d2), d1); + double d12 = Math.sin(d11); + double d13 = Math.cos(d11); + double d14 = random.nextDouble() * Math.PI * 2.0D; + double d15 = Math.sin(d14); + double d16 = Math.cos(d14); + + for(int j = 0; j < 4; ++j) { + double d17 = 0.0D; + double d18 = (double)((j & 2) - 1) * d3; + double d19 = (double)((j + 1 & 2) - 1) * d3; + double d20 = 0.0D; + double d21 = d18 * d16 - d19 * d15; + double d22 = d19 * d16 + d18 * d15; + double d23 = d21 * d12 + 0.0D * d13; + double d24 = 0.0D * d12 - d21 * d13; + double d25 = d24 * d9 - d22 * d10; + double d26 = d22 * d9 + d24 * d10; + bufferBuilderIn.pos(d5 + d25, d6 + d23, d7 + d26).endVertex(); + } + } + } + } + + }); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusVenus.java b/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusVenus.java new file mode 100644 index 000000000..5ba6793d8 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusVenus.java @@ -0,0 +1,566 @@ +package net.mrscauthd.boss_tools.skyrenderer; + +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.CampfireBlock; +import net.minecraft.client.renderer.*; +import net.minecraft.client.settings.CloudOption; +import net.minecraft.client.settings.ParticleStatus; +import net.minecraft.fluid.FluidState; +import net.minecraft.particles.IParticleData; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.tags.FluidTags; +import net.minecraft.util.Direction; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockDisplayReader; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.gen.Heightmap; +import net.minecraftforge.client.IWeatherParticleRenderHandler; +import net.minecraftforge.client.IWeatherRenderHandler; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.client.ISkyRenderHandler; +import net.minecraftforge.client.ICloudRenderHandler; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.util.math.vector.Vector3f; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraft.client.world.DimensionRenderInfo.FogType; +import net.minecraft.client.world.DimensionRenderInfo; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.renderer.vertex.VertexBuffer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.Minecraft; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.matrix.MatrixStack; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.particle.VenusRainParticle; + +import java.util.Random; + +import static net.minecraft.client.renderer.WorldRenderer.getPackedLightmapCoords; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId, bus = Bus.MOD, value = Dist.CLIENT) +public class ClientEventBusVenus { + private static final float[] rainSizeX = new float[1024]; + private static final float[] rainSizeZ = new float[1024]; + private static int rainSoundTime; + private static int cloudsCheckX = Integer.MIN_VALUE; + private static int cloudsCheckY = Integer.MIN_VALUE; + private static int cloudsCheckZ = Integer.MIN_VALUE; + private static Vector3d cloudsCheckColor = Vector3d.ZERO; + private static boolean cloudsNeedUpdate = true; + private static VertexBuffer cloudsVBO; + private static CloudOption cloudOption; + private static final ResourceLocation DIM_RENDER_INFO = new ResourceLocation(BossToolsMod.ModId, "venus"); + private static final ResourceLocation CLOUD_TEXTURE = new ResourceLocation(BossToolsMod.ModId, "textures/sky/clouds.png"); + private static final ResourceLocation RAIN_TEXTURE = new ResourceLocation(BossToolsMod.ModId, "textures/sky/rain.png"); + private static final ResourceLocation SUN_TEXTURE = new ResourceLocation(BossToolsMod.ModId, "textures/sky/sun.png"); + private static final ResourceLocation EARTH_TEXTURE = new ResourceLocation(BossToolsMod.ModId, "textures/sky/earth.png"); + + public static int getCombinedLight(IBlockDisplayReader lightReaderIn, BlockPos blockPosIn) { + return getPackedLightmapCoords(lightReaderIn, lightReaderIn.getBlockState(blockPosIn), blockPosIn); + } + + @SubscribeEvent(priority = EventPriority.HIGHEST) + public static void clientSetup(FMLClientSetupEvent event) { + DimensionRenderInfo.field_239208_a_.put(DIM_RENDER_INFO, new DimensionRenderInfo(128, false, FogType.NORMAL, false, false) { + @Override + public Vector3d func_230494_a_(Vector3d color, float sunHeight) { + return new Vector3d(0.647058823529, 0.450980392157, 0.254901960784); + } + + @Override + public boolean func_230493_a_(int posX, int posY) { + return true; // eneable fog + } + + + @Override + public IWeatherRenderHandler getWeatherRenderHandler() { + return new IWeatherRenderHandler() { + + @Override + public void render(int ticks, float partialTicks, ClientWorld world, Minecraft mc, LightTexture lightmapIn, double xIn, double yIn, double zIn) { + for(int i = 0; i < 32; ++i) { + for(int j = 0; j < 32; ++j) { + float f = (float)(j - 16); + float f1 = (float)(i - 16); + float f2 = MathHelper.sqrt(f * f + f1 * f1); + rainSizeX[i << 5 | j] = -f1 / f2; + rainSizeZ[i << 5 | j] = f / f2; + } + } + + float f = Minecraft.getInstance().world.getRainStrength(partialTicks); + if (!(f <= 0.0F)) { + lightmapIn.enableLightmap(); + int i = MathHelper.floor(xIn); + int j = MathHelper.floor(yIn); + int k = MathHelper.floor(zIn); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + RenderSystem.enableAlphaTest(); + RenderSystem.disableCull(); + RenderSystem.normal3f(0.0F, 1.0F, 0.0F); + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + RenderSystem.defaultAlphaFunc(); + RenderSystem.enableDepthTest(); + int l = 5; + if (Minecraft.isFancyGraphicsEnabled()) { + l = 10; + } + + RenderSystem.depthMask(Minecraft.isFabulousGraphicsEnabled()); + int i1 = -1; + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + BlockPos.Mutable blockpos$mutable = new BlockPos.Mutable(); + + for(int j1 = k - l; j1 <= k + l; ++j1) { + for(int k1 = i - l; k1 <= i + l; ++k1) { + int l1 = (j1 - k + 16) * 32 + k1 - i + 16; + double d0 = (double)rainSizeX[l1] * 0.5D; + double d1 = (double)rainSizeZ[l1] * 0.5D; + blockpos$mutable.setPos(k1, 0, j1); + Biome biome = world.getBiome(blockpos$mutable); + if (biome.getPrecipitation() != Biome.RainType.NONE) { + int i2 = world.getHeight(Heightmap.Type.MOTION_BLOCKING, blockpos$mutable).getY(); + int j2 = j - l; + int k2 = j + l; + if (j2 < i2) { + j2 = i2; + } + + if (k2 < i2) { + k2 = i2; + } + + int l2 = i2; + if (i2 < j) { + l2 = j; + } + + if (j2 != k2) { + Random random = new Random((long)(k1 * k1 * 3121 + k1 * 45238971 ^ j1 * j1 * 418711 + j1 * 13761)); + blockpos$mutable.setPos(k1, j2, j1); + if (i1 != 0) { + if (i1 >= 0) { + tessellator.draw(); + } + + i1 = 0; + mc.getTextureManager().bindTexture(RAIN_TEXTURE); + bufferbuilder.begin(7, DefaultVertexFormats.PARTICLE_POSITION_TEX_COLOR_LMAP); + } + + int i3 = ticks + k1 * k1 * 3121 + k1 * 45238971 + j1 * j1 * 418711 + j1 * 13761 & 31; + float f3 = -((float)i3 + partialTicks) / 32.0F * (3.0F + random.nextFloat()); + double d2 = (double)((float)k1 + 0.5F) - xIn; + double d4 = (double)((float)j1 + 0.5F) - zIn; + float f4 = MathHelper.sqrt(d2 * d2 + d4 * d4) / (float)l; + float f5 = ((1.0F - f4 * f4) * 0.5F + 0.5F) * f; + blockpos$mutable.setPos(k1, l2, j1); + int j3 = getCombinedLight(world, blockpos$mutable); + bufferbuilder.pos((double)k1 - xIn - d0 + 0.5D, (double)k2 - yIn, (double)j1 - zIn - d1 + 0.5D).tex(0.0F, (float)j2 * 0.25F + f3).color(1.0F, 1.0F, 1.0F, f5).lightmap(j3).endVertex(); + bufferbuilder.pos((double)k1 - xIn + d0 + 0.5D, (double)k2 - yIn, (double)j1 - zIn + d1 + 0.5D).tex(1.0F, (float)j2 * 0.25F + f3).color(1.0F, 1.0F, 1.0F, f5).lightmap(j3).endVertex(); + bufferbuilder.pos((double)k1 - xIn + d0 + 0.5D, (double)j2 - yIn, (double)j1 - zIn + d1 + 0.5D).tex(1.0F, (float)k2 * 0.25F + f3).color(1.0F, 1.0F, 1.0F, f5).lightmap(j3).endVertex(); + bufferbuilder.pos((double)k1 - xIn - d0 + 0.5D, (double)j2 - yIn, (double)j1 - zIn - d1 + 0.5D).tex(0.0F, (float)k2 * 0.25F + f3).color(1.0F, 1.0F, 1.0F, f5).lightmap(j3).endVertex(); + + } + } + } + } + + if (i1 >= 0) { + tessellator.draw(); + } + + RenderSystem.enableCull(); + RenderSystem.disableBlend(); + RenderSystem.defaultAlphaFunc(); + RenderSystem.disableAlphaTest(); + lightmapIn.disableLightmap(); + } + } + }; + } + + @Override + public IWeatherParticleRenderHandler getWeatherParticleRenderHandler() { + return new IWeatherParticleRenderHandler() { + @Override + public void render(int ticks, ClientWorld world, Minecraft mc, ActiveRenderInfo activeRenderInfoIn) { + float f = mc.world.getRainStrength(1.0F) / (Minecraft.isFancyGraphicsEnabled() ? 1.0F : 2.0F); + if (!(f <= 0.0F)) { + Random random = new Random((long)ticks * 312987231L); + IWorldReader iworldreader = mc.world; + BlockPos blockpos = new BlockPos(activeRenderInfoIn.getProjectedView()); + BlockPos blockpos1 = null; + int i = (int)(100.0F * f * f) / (mc.gameSettings.particles == ParticleStatus.DECREASED ? 2 : 1); + + for(int j = 0; j < i; ++j) { + int k = random.nextInt(21) - 10; + int l = random.nextInt(21) - 10; + BlockPos blockpos2 = iworldreader.getHeight(Heightmap.Type.MOTION_BLOCKING, blockpos.add(k, 0, l)).down(); + Biome biome = iworldreader.getBiome(blockpos2); + if (blockpos2.getY() > 0 && blockpos2.getY() <= blockpos.getY() + 10 && blockpos2.getY() >= blockpos.getY() - 10 && biome.getPrecipitation() == Biome.RainType.RAIN && biome.getTemperature(blockpos2) >= 0.15F) { + blockpos1 = blockpos2; + if (mc.gameSettings.particles == ParticleStatus.MINIMAL) { + break; + } + + double d0 = random.nextDouble(); + double d1 = random.nextDouble(); + BlockState blockstate = iworldreader.getBlockState(blockpos2); + FluidState fluidstate = iworldreader.getFluidState(blockpos2); + VoxelShape voxelshape = blockstate.getCollisionShape(iworldreader, blockpos2); + double d2 = voxelshape.max(Direction.Axis.Y, d0, d1); + double d3 = (double)fluidstate.getActualHeight(iworldreader, blockpos2); + double d4 = Math.max(d2, d3); + IParticleData iparticledata = !fluidstate.isTagged(FluidTags.LAVA) && !blockstate.isIn(Blocks.MAGMA_BLOCK) && !CampfireBlock.isLit(blockstate) ? (IParticleData) ModInnet.VENUS_RAIN_PARTICLE.get() : ParticleTypes.SMOKE; + mc.world.addParticle(iparticledata, (double)blockpos2.getX() + d0, (double)blockpos2.getY() + d4, (double)blockpos2.getZ() + d1, 0.0D, 0.0D, 0.0D); + } + } + + if (blockpos1 != null && random.nextInt(3) < rainSoundTime++) { + rainSoundTime = 0; + if (blockpos1.getY() > blockpos.getY() + 1 && iworldreader.getHeight(Heightmap.Type.MOTION_BLOCKING, blockpos).getY() > MathHelper.floor((float)blockpos.getY())) { + mc.world.playSound(blockpos1, SoundEvents.WEATHER_RAIN_ABOVE, SoundCategory.WEATHER, 0.1F, 0.5F, false); + } else { + mc.world.playSound(blockpos1, SoundEvents.WEATHER_RAIN, SoundCategory.WEATHER, 0.2F, 1.0F, false); + } + } + + } + } + }; + } + + @Override + public ICloudRenderHandler getCloudRenderHandler() { + return new ICloudRenderHandler() { + @Override + public void render(int ticks, float partialTicks, MatrixStack matrixStack, ClientWorld world, Minecraft mc, double viewEntityX, double viewEntityY, double viewEntityZ) { + float f = world.func_239132_a_().func_239213_a_(); + if (!Float.isNaN(f)) { + RenderSystem.disableCull(); + RenderSystem.enableBlend(); + RenderSystem.enableAlphaTest(); + RenderSystem.enableDepthTest(); + RenderSystem.defaultAlphaFunc(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + RenderSystem.enableFog(); + RenderSystem.depthMask(true); + float f1 = 12.0F; + float f2 = 4.0F; + double d0 = 2.0E-4D; + double d1 = (double)(((float)ticks + partialTicks) * 0.03F); + double d2 = (viewEntityX + d1) / 12.0D; + double d3 = (double)(f - (float)viewEntityY + 0.33F); + double d4 = viewEntityZ / 12.0D + (double)0.33F; + d2 = d2 - (double)(MathHelper.floor(d2 / 2048.0D) * 2048); + d4 = d4 - (double)(MathHelper.floor(d4 / 2048.0D) * 2048); + float f3 = (float)(d2 - (double)MathHelper.floor(d2)); + float f4 = (float)(d3 / 4.0D - (double)MathHelper.floor(d3 / 4.0D)) * 4.0F; + float f5 = (float)(d4 - (double)MathHelper.floor(d4)); + Vector3d vector3d = world.getCloudColor(partialTicks); + int i = (int)Math.floor(d2); + int j = (int)Math.floor(d3 / 4.0D); + int k = (int)Math.floor(d4); + if (i != cloudsCheckX || j != cloudsCheckY || k != cloudsCheckZ || Minecraft.getInstance().gameSettings.getCloudOption() != cloudOption || cloudsCheckColor.squareDistanceTo(vector3d) > 2.0E-4D) { + cloudsCheckX = i; + cloudsCheckY = j; + cloudsCheckZ = k; + cloudsCheckColor = vector3d; + cloudOption = Minecraft.getInstance().gameSettings.getCloudOption(); + cloudsNeedUpdate = true; + } + + if (cloudsNeedUpdate) { + cloudsNeedUpdate = false; + BufferBuilder bufferbuilder = Tessellator.getInstance().getBuffer(); + if (cloudsVBO != null) { + cloudsVBO.close(); + } + + cloudsVBO = new VertexBuffer(DefaultVertexFormats.POSITION_TEX_COLOR_NORMAL); + this.drawClouds(bufferbuilder, d2, d3, d4, vector3d); + bufferbuilder.finishDrawing(); + cloudsVBO.upload(bufferbuilder); + } + + mc.getTextureManager().bindTexture(CLOUD_TEXTURE); + matrixStack.push(); + matrixStack.scale(12.0F, 1.0F, 12.0F); + matrixStack.translate((double)(-f3), (double)f4, (double)(-f5)); + if (cloudsVBO != null) { + cloudsVBO.bindBuffer(); + DefaultVertexFormats.POSITION_TEX_COLOR_NORMAL.setupBufferState(0L); + int i1 = cloudOption == CloudOption.FANCY ? 0 : 1; + + for(int l = i1; l < 2; ++l) { + if (l == 0) { + RenderSystem.colorMask(false, false, false, false); + } else { + RenderSystem.colorMask(true, true, true, true); + } + + cloudsVBO.draw(matrixStack.getLast().getMatrix(), 7); + } + + VertexBuffer.unbindBuffer(); + DefaultVertexFormats.POSITION_TEX_COLOR_NORMAL.clearBufferState(); + } + + matrixStack.pop(); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.disableAlphaTest(); + RenderSystem.enableCull(); + RenderSystem.disableBlend(); + RenderSystem.disableFog(); + } + } + + private void drawClouds(BufferBuilder bufferIn, double cloudsX, double cloudsY, double cloudsZ, Vector3d cloudsColor) { + float f = 4.0F; + float f1 = 0.00390625F; + int i = 8; + int j = 4; + float f2 = 9.765625E-4F; + float f3 = (float)MathHelper.floor(cloudsX) * 0.00390625F; + float f4 = (float)MathHelper.floor(cloudsZ) * 0.00390625F; + float f5 = (float)cloudsColor.x; + float f6 = (float)cloudsColor.y; + float f7 = (float)cloudsColor.z; + float f8 = f5 * 0.9F; + float f9 = f6 * 0.9F; + float f10 = f7 * 0.9F; + float f11 = f5 * 0.7F; + float f12 = f6 * 0.7F; + float f13 = f7 * 0.7F; + float f14 = f5 * 0.8F; + float f15 = f6 * 0.8F; + float f16 = f7 * 0.8F; + bufferIn.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR_NORMAL); + float f17 = (float)Math.floor(cloudsY / 4.0D) * 4.0F; + if (cloudOption == CloudOption.FANCY) { + for(int k = -3; k <= 4; ++k) { + for(int l = -3; l <= 4; ++l) { + float f18 = (float)(k * 8); + float f19 = (float)(l * 8); + if (f17 > -5.0F) { + bufferIn.pos((double)(f18 + 0.0F), (double)(f17 + 0.0F), (double)(f19 + 8.0F)).tex((f18 + 0.0F) * 0.00390625F + f3, (f19 + 8.0F) * 0.00390625F + f4).color(f11, f12, f13, 0.8F).normal(0.0F, -1.0F, 0.0F).endVertex(); + bufferIn.pos((double)(f18 + 8.0F), (double)(f17 + 0.0F), (double)(f19 + 8.0F)).tex((f18 + 8.0F) * 0.00390625F + f3, (f19 + 8.0F) * 0.00390625F + f4).color(f11, f12, f13, 0.8F).normal(0.0F, -1.0F, 0.0F).endVertex(); + bufferIn.pos((double)(f18 + 8.0F), (double)(f17 + 0.0F), (double)(f19 + 0.0F)).tex((f18 + 8.0F) * 0.00390625F + f3, (f19 + 0.0F) * 0.00390625F + f4).color(f11, f12, f13, 0.8F).normal(0.0F, -1.0F, 0.0F).endVertex(); + bufferIn.pos((double)(f18 + 0.0F), (double)(f17 + 0.0F), (double)(f19 + 0.0F)).tex((f18 + 0.0F) * 0.00390625F + f3, (f19 + 0.0F) * 0.00390625F + f4).color(f11, f12, f13, 0.8F).normal(0.0F, -1.0F, 0.0F).endVertex(); + } + + if (f17 <= 5.0F) { + bufferIn.pos((double)(f18 + 0.0F), (double)(f17 + 4.0F - 9.765625E-4F), (double)(f19 + 8.0F)).tex((f18 + 0.0F) * 0.00390625F + f3, (f19 + 8.0F) * 0.00390625F + f4).color(f5, f6, f7, 0.8F).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferIn.pos((double)(f18 + 8.0F), (double)(f17 + 4.0F - 9.765625E-4F), (double)(f19 + 8.0F)).tex((f18 + 8.0F) * 0.00390625F + f3, (f19 + 8.0F) * 0.00390625F + f4).color(f5, f6, f7, 0.8F).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferIn.pos((double)(f18 + 8.0F), (double)(f17 + 4.0F - 9.765625E-4F), (double)(f19 + 0.0F)).tex((f18 + 8.0F) * 0.00390625F + f3, (f19 + 0.0F) * 0.00390625F + f4).color(f5, f6, f7, 0.8F).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferIn.pos((double)(f18 + 0.0F), (double)(f17 + 4.0F - 9.765625E-4F), (double)(f19 + 0.0F)).tex((f18 + 0.0F) * 0.00390625F + f3, (f19 + 0.0F) * 0.00390625F + f4).color(f5, f6, f7, 0.8F).normal(0.0F, 1.0F, 0.0F).endVertex(); + } + + if (k > -1) { + for(int i1 = 0; i1 < 8; ++i1) { + bufferIn.pos((double)(f18 + (float)i1 + 0.0F), (double)(f17 + 0.0F), (double)(f19 + 8.0F)).tex((f18 + (float)i1 + 0.5F) * 0.00390625F + f3, (f19 + 8.0F) * 0.00390625F + f4).color(f8, f9, f10, 0.8F).normal(-1.0F, 0.0F, 0.0F).endVertex(); + bufferIn.pos((double)(f18 + (float)i1 + 0.0F), (double)(f17 + 4.0F), (double)(f19 + 8.0F)).tex((f18 + (float)i1 + 0.5F) * 0.00390625F + f3, (f19 + 8.0F) * 0.00390625F + f4).color(f8, f9, f10, 0.8F).normal(-1.0F, 0.0F, 0.0F).endVertex(); + bufferIn.pos((double)(f18 + (float)i1 + 0.0F), (double)(f17 + 4.0F), (double)(f19 + 0.0F)).tex((f18 + (float)i1 + 0.5F) * 0.00390625F + f3, (f19 + 0.0F) * 0.00390625F + f4).color(f8, f9, f10, 0.8F).normal(-1.0F, 0.0F, 0.0F).endVertex(); + bufferIn.pos((double)(f18 + (float)i1 + 0.0F), (double)(f17 + 0.0F), (double)(f19 + 0.0F)).tex((f18 + (float)i1 + 0.5F) * 0.00390625F + f3, (f19 + 0.0F) * 0.00390625F + f4).color(f8, f9, f10, 0.8F).normal(-1.0F, 0.0F, 0.0F).endVertex(); + } + } + + if (k <= 1) { + for(int j2 = 0; j2 < 8; ++j2) { + bufferIn.pos((double)(f18 + (float)j2 + 1.0F - 9.765625E-4F), (double)(f17 + 0.0F), (double)(f19 + 8.0F)).tex((f18 + (float)j2 + 0.5F) * 0.00390625F + f3, (f19 + 8.0F) * 0.00390625F + f4).color(f8, f9, f10, 0.8F).normal(1.0F, 0.0F, 0.0F).endVertex(); + bufferIn.pos((double)(f18 + (float)j2 + 1.0F - 9.765625E-4F), (double)(f17 + 4.0F), (double)(f19 + 8.0F)).tex((f18 + (float)j2 + 0.5F) * 0.00390625F + f3, (f19 + 8.0F) * 0.00390625F + f4).color(f8, f9, f10, 0.8F).normal(1.0F, 0.0F, 0.0F).endVertex(); + bufferIn.pos((double)(f18 + (float)j2 + 1.0F - 9.765625E-4F), (double)(f17 + 4.0F), (double)(f19 + 0.0F)).tex((f18 + (float)j2 + 0.5F) * 0.00390625F + f3, (f19 + 0.0F) * 0.00390625F + f4).color(f8, f9, f10, 0.8F).normal(1.0F, 0.0F, 0.0F).endVertex(); + bufferIn.pos((double)(f18 + (float)j2 + 1.0F - 9.765625E-4F), (double)(f17 + 0.0F), (double)(f19 + 0.0F)).tex((f18 + (float)j2 + 0.5F) * 0.00390625F + f3, (f19 + 0.0F) * 0.00390625F + f4).color(f8, f9, f10, 0.8F).normal(1.0F, 0.0F, 0.0F).endVertex(); + } + } + + if (l > -1) { + for(int k2 = 0; k2 < 8; ++k2) { + bufferIn.pos((double)(f18 + 0.0F), (double)(f17 + 4.0F), (double)(f19 + (float)k2 + 0.0F)).tex((f18 + 0.0F) * 0.00390625F + f3, (f19 + (float)k2 + 0.5F) * 0.00390625F + f4).color(f14, f15, f16, 0.8F).normal(0.0F, 0.0F, -1.0F).endVertex(); + bufferIn.pos((double)(f18 + 8.0F), (double)(f17 + 4.0F), (double)(f19 + (float)k2 + 0.0F)).tex((f18 + 8.0F) * 0.00390625F + f3, (f19 + (float)k2 + 0.5F) * 0.00390625F + f4).color(f14, f15, f16, 0.8F).normal(0.0F, 0.0F, -1.0F).endVertex(); + bufferIn.pos((double)(f18 + 8.0F), (double)(f17 + 0.0F), (double)(f19 + (float)k2 + 0.0F)).tex((f18 + 8.0F) * 0.00390625F + f3, (f19 + (float)k2 + 0.5F) * 0.00390625F + f4).color(f14, f15, f16, 0.8F).normal(0.0F, 0.0F, -1.0F).endVertex(); + bufferIn.pos((double)(f18 + 0.0F), (double)(f17 + 0.0F), (double)(f19 + (float)k2 + 0.0F)).tex((f18 + 0.0F) * 0.00390625F + f3, (f19 + (float)k2 + 0.5F) * 0.00390625F + f4).color(f14, f15, f16, 0.8F).normal(0.0F, 0.0F, -1.0F).endVertex(); + } + } + + if (l <= 1) { + for(int l2 = 0; l2 < 8; ++l2) { + bufferIn.pos((double)(f18 + 0.0F), (double)(f17 + 4.0F), (double)(f19 + (float)l2 + 1.0F - 9.765625E-4F)).tex((f18 + 0.0F) * 0.00390625F + f3, (f19 + (float)l2 + 0.5F) * 0.00390625F + f4).color(f14, f15, f16, 0.8F).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferIn.pos((double)(f18 + 8.0F), (double)(f17 + 4.0F), (double)(f19 + (float)l2 + 1.0F - 9.765625E-4F)).tex((f18 + 8.0F) * 0.00390625F + f3, (f19 + (float)l2 + 0.5F) * 0.00390625F + f4).color(f14, f15, f16, 0.8F).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferIn.pos((double)(f18 + 8.0F), (double)(f17 + 0.0F), (double)(f19 + (float)l2 + 1.0F - 9.765625E-4F)).tex((f18 + 8.0F) * 0.00390625F + f3, (f19 + (float)l2 + 0.5F) * 0.00390625F + f4).color(f14, f15, f16, 0.8F).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferIn.pos((double)(f18 + 0.0F), (double)(f17 + 0.0F), (double)(f19 + (float)l2 + 1.0F - 9.765625E-4F)).tex((f18 + 0.0F) * 0.00390625F + f3, (f19 + (float)l2 + 0.5F) * 0.00390625F + f4).color(f14, f15, f16, 0.8F).normal(0.0F, 0.0F, 1.0F).endVertex(); + } + } + } + } + } else { + int j1 = 1; + int k1 = 32; + + for(int l1 = -32; l1 < 32; l1 += 32) { + for(int i2 = -32; i2 < 32; i2 += 32) { + bufferIn.pos((double)(l1 + 0), (double)f17, (double)(i2 + 32)).tex((float)(l1 + 0) * 0.00390625F + f3, (float)(i2 + 32) * 0.00390625F + f4).color(f5, f6, f7, 0.8F).normal(0.0F, -1.0F, 0.0F).endVertex(); + bufferIn.pos((double)(l1 + 32), (double)f17, (double)(i2 + 32)).tex((float)(l1 + 32) * 0.00390625F + f3, (float)(i2 + 32) * 0.00390625F + f4).color(f5, f6, f7, 0.8F).normal(0.0F, -1.0F, 0.0F).endVertex(); + bufferIn.pos((double)(l1 + 32), (double)f17, (double)(i2 + 0)).tex((float)(l1 + 32) * 0.00390625F + f3, (float)(i2 + 0) * 0.00390625F + f4).color(f5, f6, f7, 0.8F).normal(0.0F, -1.0F, 0.0F).endVertex(); + bufferIn.pos((double)(l1 + 0), (double)f17, (double)(i2 + 0)).tex((float)(l1 + 0) * 0.00390625F + f3, (float)(i2 + 0) * 0.00390625F + f4).color(f5, f6, f7, 0.8F).normal(0.0F, -1.0F, 0.0F).endVertex(); + } + } + } + + } + }; + } + + @Override + public ISkyRenderHandler getSkyRenderHandler() { + return new ISkyRenderHandler() { + @SuppressWarnings({"deprecation"}) + @Override + public void render(int ticks, float partialTicks, MatrixStack matrixStack, ClientWorld world, Minecraft mc) { + RenderSystem.disableTexture(); + Vector3d vector3d = world.getSkyColor(mc.gameRenderer.getActiveRenderInfo().getBlockPos(), partialTicks); + float f = (float) vector3d.x; + float f1 = (float) vector3d.y; + float f2 = (float) vector3d.z; + FogRenderer.applyFog(); + BufferBuilder bufferbuilder = Tessellator.getInstance().getBuffer(); + RenderSystem.depthMask(false); + RenderSystem.enableFog(); + RenderSystem.color3f(0.81960785f, 0.54509807f, 0.32156864f); + mc.worldRenderer.skyVBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + mc.worldRenderer.skyVBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + Matrix4f matrix4f1 = matrixStack.getLast().getMatrix(); + RenderSystem.enableAlphaTest(); + RenderSystem.enableTexture(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + RenderSystem.color4f(1f, 1f, 1f, 1f); + RenderSystem.disableTexture(); + RenderSystem.disableFog(); + RenderSystem.disableAlphaTest(); + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + float[] afloat = world.func_239132_a_().func_230492_a_(world.func_242415_f(partialTicks), partialTicks); + if (afloat != null) { + RenderSystem.disableTexture(); + RenderSystem.shadeModel(7425); + matrixStack.push(); + matrixStack.rotate(Vector3f.XP.rotationDegrees(90.0F)); + float f3 = MathHelper.sin(world.getCelestialAngleRadians(partialTicks)) < 0.0F ? 180.0F : 0.0F; + matrixStack.rotate(Vector3f.ZP.rotationDegrees(f3));// rotation richtig with ^^ + matrixStack.rotate(Vector3f.ZP.rotationDegrees(90.0F)); + float f4 = afloat[0]; + float f5 = afloat[1]; + float f6 = afloat[2]; + Matrix4f matrix4f = matrixStack.getLast().getMatrix(); + bufferbuilder.begin(6, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos(matrix4f, 0.0F, 100.0F, 0.0F).color(f4, f5, f6, afloat[3]).endVertex(); + for (int j = 0; j <= 16; ++j) { + float f7 = (float) j * ((float) Math.PI * 2F) / 16.0F; + float f8 = MathHelper.sin(f7); + float f9 = MathHelper.cos(f7); + bufferbuilder.pos(matrix4f, f8 * 120.0F, f9 * 120.0F, -f9 * 40.0F * afloat[3]).color(afloat[0], afloat[1], afloat[2], 0.0F).endVertex(); + } + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + matrixStack.pop(); + RenderSystem.shadeModel(7424); + } + RenderSystem.enableTexture(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + matrixStack.push(); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + + matrixStack.rotate(Vector3f.YP.rotationDegrees(-90.0F)); + matrixStack.rotate(Vector3f.XP.rotationDegrees(world.func_242415_f(partialTicks) * 360.0F)); + matrix4f1 = matrixStack.getLast().getMatrix(); + + float f12 = 20.0F; + + //SUN + mc.getTextureManager().bindTexture(SUN_TEXTURE); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix4f1, -f12, 100.0F, -f12).tex(0.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, f12, 100.0F, -f12).tex(1.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, f12, 100.0F, f12).tex(1.0F, 1.0F).endVertex(); + bufferbuilder.pos(matrix4f1, -f12, 100.0F, f12).tex(0.0F, 1.0F).endVertex(); + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + + matrixStack.rotate(Vector3f.YP.rotationDegrees(-130.0F)); + matrixStack.rotate(Vector3f.ZP.rotationDegrees(210.0F)); + + //EARTH + mc.getTextureManager().bindTexture(EARTH_TEXTURE); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix4f1, -2, -100.0F, 2).tex(0.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, 2, -100.0F, 2).tex(1.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, 2, -100.0F, -2).tex(1.0F, 1.0F).endVertex(); + bufferbuilder.pos(matrix4f1, -2, -100.0F, -2).tex(0.0F, 1.0F).endVertex(); + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + + RenderSystem.disableTexture(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + mc.worldRenderer.starVBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + mc.worldRenderer.starVBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.disableBlend(); + RenderSystem.enableAlphaTest(); + RenderSystem.enableFog(); + matrixStack.pop(); + RenderSystem.disableTexture(); + RenderSystem.color3f(0.0F, 0.0F, 0.0F); + + double d0 = mc.player.getEyePosition(partialTicks).y - world.getWorldInfo().getVoidFogHeight(); + if (d0 < 0.0D) { + matrixStack.push(); + matrixStack.translate(0.0D, 12.0D, 0.0D); + mc.worldRenderer.sky2VBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + mc.worldRenderer.sky2VBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + matrixStack.pop(); + } + if (world.func_239132_a_().func_239216_b_()) { + RenderSystem.color3f(f * 0.2F + 0.04F, f1 * 0.2F + 0.04F, f2 * 0.6F + 0.1F); + } else { + RenderSystem.color3f(f, f1, f2); + } + RenderSystem.enableTexture(); + RenderSystem.depthMask(true); + RenderSystem.disableFog(); + } + }; + } + }); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusVenusOrbit.java b/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusVenusOrbit.java new file mode 100644 index 000000000..95038156d --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/skyrenderer/ClientEventBusVenusOrbit.java @@ -0,0 +1,267 @@ +package net.mrscauthd.boss_tools.skyrenderer; + +import net.minecraft.client.renderer.vertex.VertexFormat; +import net.minecraft.client.settings.GraphicsFanciness; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.client.ISkyRenderHandler; +import net.minecraftforge.client.ICloudRenderHandler; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.util.math.vector.Vector3f; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraft.client.world.DimensionRenderInfo.FogType; +import net.minecraft.client.world.DimensionRenderInfo; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.renderer.vertex.VertexBuffer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.renderer.WorldVertexBufferUploader; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.FogRenderer; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.Minecraft; + +import javax.annotation.Nullable; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.matrix.MatrixStack; +import net.mrscauthd.boss_tools.BossToolsMod; + +import java.util.Random; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId, bus = Bus.MOD, value = Dist.CLIENT) +public class ClientEventBusVenusOrbit { + @Nullable + public static VertexBuffer starVBO; + public static final VertexFormat skyVertexFormat = DefaultVertexFormats.POSITION; + private static final ResourceLocation DIM_RENDER_INFO = new ResourceLocation(BossToolsMod.ModId, "venus_orbit"); + private static final ResourceLocation VENUS_TEXTURE = new ResourceLocation(BossToolsMod.ModId, "textures/sky/venus.png"); + private static final ResourceLocation SUN_TEXTURE = new ResourceLocation(BossToolsMod.ModId, "textures/sky/no_a_sun.png"); + @SubscribeEvent(priority = EventPriority.HIGHEST) + public static void clientSetup(FMLClientSetupEvent event) { + DimensionRenderInfo.field_239208_a_.put(DIM_RENDER_INFO, new DimensionRenderInfo(128, false, FogType.NORMAL, false, false) { + @Override + public Vector3d func_230494_a_(Vector3d fogColor, float partialTicks) { + return fogColor; + } + + @Override + public boolean func_230493_a_(int posX, int posY) { + return false; + } + + @Override + public ICloudRenderHandler getCloudRenderHandler() { + return new ICloudRenderHandler() { + @Override + public void render(int ticks, float partialTicks, MatrixStack matrixStack, ClientWorld world, Minecraft mc, double viewEntityX, double viewEntityY, double viewEntityZ) { + + } + }; + } + + @Override + public ISkyRenderHandler getSkyRenderHandler() { + return new ISkyRenderHandler() { + @SuppressWarnings({"deprecation"}) + @Override + public void render(int ticks, float partialTicks, MatrixStack matrixStack, ClientWorld world, Minecraft mc) { + RenderSystem.disableTexture(); + Vector3d vector3d = world.getSkyColor(mc.gameRenderer.getActiveRenderInfo().getBlockPos(), partialTicks); + float f = (float) vector3d.x; + float f1 = (float) vector3d.y; + float f2 = (float) vector3d.z; + FogRenderer.applyFog(); + BufferBuilder bufferbuilder = Tessellator.getInstance().getBuffer(); + RenderSystem.depthMask(false); + RenderSystem.enableFog(); + RenderSystem.color3f(f, f1, f2); + mc.worldRenderer.skyVBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + mc.worldRenderer.skyVBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + Matrix4f matrix4f1 = matrixStack.getLast().getMatrix(); + RenderSystem.enableAlphaTest(); + RenderSystem.enableTexture(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + RenderSystem.color4f(1f, 1f, 1f, 1f); + //STAR GEN + generateStars(); + RenderSystem.disableTexture(); + RenderSystem.disableFog(); + RenderSystem.disableAlphaTest(); + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + float[] afloat = world.func_239132_a_().func_230492_a_(world.func_242415_f(partialTicks), partialTicks); + if (afloat != null) { + RenderSystem.disableTexture(); + RenderSystem.shadeModel(7425); + matrixStack.push(); + matrixStack.rotate(Vector3f.XP.rotationDegrees(90.0F)); + float f3 = MathHelper.sin(world.getCelestialAngleRadians(partialTicks)) < 0.0F ? 180.0F : 0.0F; + matrixStack.rotate(Vector3f.ZP.rotationDegrees(f3)); + matrixStack.rotate(Vector3f.ZP.rotationDegrees(90.0F)); + float f4 = afloat[0]; + float f5 = afloat[1]; + float f6 = afloat[2]; + Matrix4f matrix4f = matrixStack.getLast().getMatrix(); + bufferbuilder.begin(6, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos(matrix4f, 0.0F, 100.0F, 0.0F).color(f4, f5, f6, afloat[3]).endVertex(); + for (int j = 0; j <= 16; ++j) { + float f7 = (float) j * ((float) Math.PI * 2F) / 16.0F; + float f8 = MathHelper.sin(f7); + float f9 = MathHelper.cos(f7); + bufferbuilder.pos(matrix4f, f8 * 120.0F, f9 * 120.0F, -f9 * 40.0F * afloat[3]).color(afloat[0], afloat[1], afloat[2], 0.0F).endVertex(); + } + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + matrixStack.pop(); + RenderSystem.shadeModel(7424); + } + RenderSystem.enableTexture(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + matrixStack.push(); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + + matrixStack.rotate(Vector3f.YP.rotationDegrees(-90.0F)); + matrixStack.rotate(Vector3f.XP.rotationDegrees(0.0F)); + matrix4f1 = matrixStack.getLast().getMatrix(); + + //VENUS + RenderSystem.enableDepthTest(); + RenderSystem.depthMask(true); + + float var20 = -3000.0F + (float) Minecraft.getInstance().player.getPosY() * 6F; + + float scale = 100 * (0.3F - var20 / 10000.0F); + scale = Math.max(scale, 4.0F); + + mc.getTextureManager().bindTexture(VENUS_TEXTURE); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix4f1, -scale, -180.0F, scale).tex(0.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, scale, -180.0F, scale).tex(1.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, scale, -180.0F, -scale).tex(1.0F, 1.0F).endVertex(); + bufferbuilder.pos(matrix4f1, -scale, -180.0F, -scale).tex(0.0F, 1.0F).endVertex(); + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + + RenderSystem.depthMask(false); + + matrixStack.rotate(Vector3f.XP.rotationDegrees(world.func_242415_f(partialTicks) * 360.0F)); + matrix4f1 = matrixStack.getLast().getMatrix(); + + float f12 = 35.0F * 2; + + //SUN + mc.getTextureManager().bindTexture(SUN_TEXTURE); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(matrix4f1, -f12, 200.0F, -f12).tex(0.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, f12, 200.0F, -f12).tex(1.0F, 0.0F).endVertex(); + bufferbuilder.pos(matrix4f1, f12, 200.0F, f12).tex(1.0F, 1.0F).endVertex(); + bufferbuilder.pos(matrix4f1, -f12, 200.0F, f12).tex(0.0F, 1.0F).endVertex(); + bufferbuilder.finishDrawing(); + WorldVertexBufferUploader.draw(bufferbuilder); + + RenderSystem.disableTexture(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + starVBO.bindBuffer(); + mc.worldRenderer.skyVertexFormat.setupBufferState(0L); + starVBO.draw(matrixStack.getLast().getMatrix(), 7); + VertexBuffer.unbindBuffer(); + mc.worldRenderer.skyVertexFormat.clearBufferState(); + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.disableBlend(); + RenderSystem.enableAlphaTest(); + RenderSystem.enableFog(); + matrixStack.pop(); + RenderSystem.disableTexture(); + RenderSystem.color3f(0.0F, 0.0F, 0.0F); + + if (world.func_239132_a_().func_239216_b_()) { + RenderSystem.color3f(f * 0.2F + 0.04F, f1 * 0.2F + 0.04F, f2 * 0.6F + 0.1F); + } else { + RenderSystem.color3f(f, f1, f2); + } + RenderSystem.enableTexture(); + RenderSystem.depthMask(true); + RenderSystem.disableFog(); + } + }; + } + + private void generateStars() { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + if (starVBO != null) { + starVBO.close(); + } + + starVBO = new VertexBuffer(skyVertexFormat); + this.renderStars(bufferbuilder); + bufferbuilder.finishDrawing(); + starVBO.upload(bufferbuilder); + } + + private void renderStars(BufferBuilder bufferBuilderIn) { + Random random = new Random(10842L); + bufferBuilderIn.begin(7, DefaultVertexFormats.POSITION); + int stars = 0; + if (Minecraft.getInstance().gameSettings.graphicFanciness == GraphicsFanciness.FANCY || Minecraft.getInstance().gameSettings.graphicFanciness == GraphicsFanciness.FABULOUS) { + stars = 13000; + } else { + stars = 6000; + } + + for(int i = 0; i < stars; ++i) { + double d0 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d1 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d2 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d3 = (double)(0.15F + random.nextFloat() * 0.1F); + double d4 = d0 * d0 + d1 * d1 + d2 * d2; + if (d4 < 1.0D && d4 > 0.01D) { + d4 = 1.0D / Math.sqrt(d4); + d0 = d0 * d4; + d1 = d1 * d4; + d2 = d2 * d4; + double d5 = d0 * 200.0D; + double d6 = d1 * 200.0D; + double d7 = d2 * 200.0D; + double d8 = Math.atan2(d0, d2); + double d9 = Math.sin(d8); + double d10 = Math.cos(d8); + double d11 = Math.atan2(Math.sqrt(d0 * d0 + d2 * d2), d1); + double d12 = Math.sin(d11); + double d13 = Math.cos(d11); + double d14 = random.nextDouble() * Math.PI * 2.0D; + double d15 = Math.sin(d14); + double d16 = Math.cos(d14); + + for(int j = 0; j < 4; ++j) { + double d17 = 0.0D; + double d18 = (double)((j & 2) - 1) * d3; + double d19 = (double)((j + 1 & 2) - 1) * d3; + double d20 = 0.0D; + double d21 = d18 * d16 - d19 * d15; + double d22 = d19 * d16 + d18 * d15; + double d23 = d21 * d12 + 0.0D * d13; + double d24 = 0.0D * d12 - d21 * d13; + double d25 = d24 * d9 - d22 * d10; + double d26 = d22 * d9 + d24 * d10; + bufferBuilderIn.pos(d5 + d25, d6 + d23, d7 + d26).endVertex(); + } + } + } + } + }); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/spawneggs/ModSpawnEggs.java b/src/main/java/net/mrscauthd/boss_tools/spawneggs/ModSpawnEggs.java new file mode 100644 index 000000000..950b032cf --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/spawneggs/ModSpawnEggs.java @@ -0,0 +1,56 @@ +package net.mrscauthd.boss_tools.spawneggs; + +import net.minecraft.block.DispenserBlock; +import net.minecraft.dispenser.DefaultDispenseItemBehavior; +import net.minecraft.dispenser.IBlockSource; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.SpawnReason; +import net.minecraft.item.ItemStack; +import net.minecraft.item.SpawnEggItem; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.Direction; +import net.minecraftforge.common.util.Lazy; +import net.minecraftforge.fml.RegistryObject; +import net.minecraftforge.fml.common.ObfuscationReflectionHelper; + +import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class ModSpawnEggs extends SpawnEggItem { + //In 1.17.1 is it Replaced with the ForgeSpawnEgg + protected static final List UNADDED_EGGS = new ArrayList<>(); + private final Lazy> entityTypeSupplier; + + public ModSpawnEggs(final RegistryObject> typeIn, int primaryColorIn, int secondaryColorIn, Properties builder) { + super(null, primaryColorIn, secondaryColorIn, builder); + this.entityTypeSupplier = Lazy.of(typeIn::get); + UNADDED_EGGS.add(this); + } + + public static void initSpawnEggs(){ + final Map, SpawnEggItem> EGGS = ObfuscationReflectionHelper.getPrivateValue(SpawnEggItem.class,null, "field_195987_b"); + DefaultDispenseItemBehavior defaultDispenseItemBehavior = new DefaultDispenseItemBehavior(){ + @Override + protected ItemStack dispenseStack(IBlockSource source, ItemStack stack) { + Direction direction = source.getBlockState().get(DispenserBlock.FACING); + EntityType type = ((SpawnEggItem) stack.getItem()).getType(stack.getTag()); + type.spawn(source.getWorld(),stack,null,source.getBlockPos().offset(direction), SpawnReason.DISPENSER,direction != Direction.UP,false); + stack.shrink(1); + return stack; + } + }; + + for (final SpawnEggItem spawnEggItem : UNADDED_EGGS){ + EGGS.put(spawnEggItem.getType(null),spawnEggItem); + DispenserBlock.registerDispenseBehavior(spawnEggItem,defaultDispenseItemBehavior); + } + UNADDED_EGGS.clear(); + } + + @Override + public EntityType getType(@Nullable CompoundNBT nbt) { + return this.entityTypeSupplier.get(); + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/world/biomes/BiomeRegistry.java b/src/main/java/net/mrscauthd/boss_tools/world/biomes/BiomeRegistry.java new file mode 100644 index 000000000..157c0b741 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/world/biomes/BiomeRegistry.java @@ -0,0 +1,145 @@ +package net.mrscauthd.boss_tools.world.biomes; + +import net.minecraft.block.Blocks; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.world.biome.*; +import net.minecraft.world.gen.GenerationStage; +import net.minecraft.world.gen.feature.Features; +import net.minecraft.world.gen.surfacebuilders.ConfiguredSurfaceBuilders; +import net.minecraft.world.gen.surfacebuilders.SurfaceBuilder; +import net.minecraft.world.gen.surfacebuilders.SurfaceBuilderConfig; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId, bus = Mod.EventBusSubscriber.Bus.MOD) +public class BiomeRegistry { + public static Biome moon; + + public static Biome mars; + public static Biome mars_ice_spike; + + public static Biome venus; + public static Biome venus_hills; + public static Biome infernal_venus_barrens; + + public static Biome mercury; + public static Biome mercury_magma; + + public static Biome orbit; + + @SubscribeEvent + public static void registerBiomes(RegistryEvent.Register event) { + if (moon == null) { + BiomeAmbience effects = new BiomeAmbience.Builder().setFogColor(-16777216).setWaterColor(4159204).setWaterFogColor(329011).withSkyColor(-16777216).withFoliageColor(7842607).withGrassColor(9551193).build(); + BiomeGenerationSettings.Builder biomeGenerationSettings = new BiomeGenerationSettings.Builder().withSurfaceBuilder(SurfaceBuilder.DEFAULT.func_242929_a(new SurfaceBuilderConfig(ModInnet.MOON_SAND.get().getDefaultState(), ModInnet.MOON_SAND.get().getDefaultState(), ModInnet.MOON_SAND.get().getDefaultState()))); + DefaultBiomeFeatures.withCavesAndCanyons(biomeGenerationSettings); + MobSpawnInfo.Builder mobSpawnInfo = new MobSpawnInfo.Builder().isValidSpawnBiomeForPlayer(); + + moon = new Biome.Builder().precipitation(Biome.RainType.NONE).category(Biome.Category.NONE).depth(0.2f).scale(0.02f).temperature(1.6f).downfall(0f).setEffects(effects).withMobSpawnSettings(mobSpawnInfo.copy()).withGenerationSettings(biomeGenerationSettings.build()).build(); + event.getRegistry().register(moon.setRegistryName(BossToolsMod.ModId,"moon")); + } + + if (mars == null) { + BiomeAmbience effects = new BiomeAmbience.Builder().setFogColor(-3044526).setWaterColor(4159204).setWaterFogColor(329011).withSkyColor(-3044526).withFoliageColor(7842607).withGrassColor(9551193).setParticle(new ParticleEffectAmbience(ParticleTypes.CRIMSON_SPORE, 0.014f)).build(); + BiomeGenerationSettings.Builder biomeGenerationSettings = new BiomeGenerationSettings.Builder().withSurfaceBuilder(SurfaceBuilder.DEFAULT.func_242929_a(new SurfaceBuilderConfig(ModInnet.MARS_SAND.get().getDefaultState(), ModInnet.MARS_SAND.get().getDefaultState(), ModInnet.MARS_SAND.get().getDefaultState()))); + DefaultBiomeFeatures.withCavesAndCanyons(biomeGenerationSettings); + MobSpawnInfo.Builder mobSpawnInfo = new MobSpawnInfo.Builder().isValidSpawnBiomeForPlayer(); + + mars = new Biome.Builder().precipitation(Biome.RainType.NONE).category(Biome.Category.NONE).depth(0.2f).scale(0.02f).temperature(1.6f).downfall(0f).setEffects(effects).withMobSpawnSettings(mobSpawnInfo.copy()).withGenerationSettings(biomeGenerationSettings.build()).build(); + event.getRegistry().register(mars.setRegistryName(BossToolsMod.ModId,"mars")); + } + + if (mars_ice_spike == null) { + BiomeAmbience effects = new BiomeAmbience.Builder().setFogColor(-3044526).setWaterColor(4159204).setWaterFogColor(329011).withSkyColor(-3044526).withFoliageColor(7842607).withGrassColor(9551193).setParticle(new ParticleEffectAmbience(ParticleTypes.CRIMSON_SPORE, 0.014f)).build(); + BiomeGenerationSettings.Builder biomeGenerationSettings = new BiomeGenerationSettings.Builder().withSurfaceBuilder(SurfaceBuilder.DEFAULT.func_242929_a(new SurfaceBuilderConfig(Blocks.SNOW_BLOCK.getDefaultState(), ModInnet.MARS_STONE.get().getDefaultState(), ModInnet.MARS_STONE.get().getDefaultState()))); + DefaultBiomeFeatures.withCavesAndCanyons(biomeGenerationSettings); + MobSpawnInfo.Builder mobSpawnInfo = new MobSpawnInfo.Builder().isValidSpawnBiomeForPlayer(); + + mars_ice_spike = new Biome.Builder().precipitation(Biome.RainType.NONE).category(Biome.Category.ICY).depth(0.1f).scale(0.12f).temperature(1.6f).downfall(0f).setEffects(effects).withMobSpawnSettings(mobSpawnInfo.copy()).withGenerationSettings(biomeGenerationSettings.build()).build(); + event.getRegistry().register(mars_ice_spike.setRegistryName(BossToolsMod.ModId,"mars_ice_spike")); + } + + if (venus == null) { + BiomeAmbience effects = new BiomeAmbience.Builder().setFogColor(-3044526).setWaterColor(4159204).setWaterFogColor(329011).withSkyColor(-3044526).withFoliageColor(7842607).withGrassColor(9551193).setParticle(new ParticleEffectAmbience(ParticleTypes.CRIMSON_SPORE, 0.02f)).build(); + BiomeGenerationSettings.Builder biomeGenerationSettings = new BiomeGenerationSettings.Builder().withSurfaceBuilder(SurfaceBuilder.DEFAULT.func_242929_a(new SurfaceBuilderConfig(ModInnet.VENUS_SAND.get().getDefaultState(), ModInnet.VENUS_SAND.get().getDefaultState(), ModInnet.VENUS_SANDSTONE.get().getDefaultState()))); + DefaultBiomeFeatures.withCavesAndCanyons(biomeGenerationSettings); + MobSpawnInfo.Builder mobSpawnInfo = new MobSpawnInfo.Builder().isValidSpawnBiomeForPlayer(); + + venus = new Biome.Builder().precipitation(Biome.RainType.RAIN).category(Biome.Category.NONE).depth(0.2f).scale(0.02f).temperature(1.5f).downfall(1f).setEffects(effects).withMobSpawnSettings(mobSpawnInfo.copy()).withGenerationSettings(biomeGenerationSettings.build()).build(); + event.getRegistry().register(venus.setRegistryName(BossToolsMod.ModId,"venus")); + } + + if (infernal_venus_barrens == null) { + BiomeAmbience effects = new BiomeAmbience.Builder().setFogColor(-3044526).setWaterColor(4159204).setWaterFogColor(329011).withSkyColor(-3044526).withFoliageColor(7842607).withGrassColor(9551193).setParticle(new ParticleEffectAmbience(ParticleTypes.CRIMSON_SPORE, 0.02f)).build(); + BiomeGenerationSettings.Builder biomeGenerationSettings = new BiomeGenerationSettings.Builder().withSurfaceBuilder(SurfaceBuilder.DEFAULT.func_242929_a(new SurfaceBuilderConfig(ModInnet.VENUS_SAND.get().getDefaultState(), ModInnet.VENUS_SANDSTONE.get().getDefaultState(), ModInnet.VENUS_SANDSTONE.get().getDefaultState()))); + biomeGenerationSettings.withSurfaceBuilder(ConfiguredSurfaceBuilders.field_244170_b); + biomeGenerationSettings.withFeature(GenerationStage.Decoration.SURFACE_STRUCTURES, Features.DELTA); + biomeGenerationSettings.withFeature(GenerationStage.Decoration.VEGETAL_DECORATION, Features.SPRING_LAVA_DOUBLE); + biomeGenerationSettings.withFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.BASALT_BLOBS); + biomeGenerationSettings.withFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.BLACKSTONE_BLOBS); + biomeGenerationSettings.withFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.SPRING_DELTA); + biomeGenerationSettings.withFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.PATCH_FIRE); + biomeGenerationSettings.withFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.PATCH_SOUL_FIRE); + biomeGenerationSettings.withFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.ORE_MAGMA); + biomeGenerationSettings.withFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.SPRING_CLOSED_DOUBLE); + DefaultBiomeFeatures.withCavesAndCanyons(biomeGenerationSettings); + MobSpawnInfo.Builder mobSpawnInfo = new MobSpawnInfo.Builder().isValidSpawnBiomeForPlayer(); + + infernal_venus_barrens = new Biome.Builder().precipitation(Biome.RainType.RAIN).category(Biome.Category.NONE).depth(0.2f).scale(0.12f).temperature(1.5f).downfall(1f).setEffects(effects).withMobSpawnSettings(mobSpawnInfo.copy()).withGenerationSettings(biomeGenerationSettings.build()).build(); + event.getRegistry().register(infernal_venus_barrens.setRegistryName(BossToolsMod.ModId,"infernal_venus_barrens")); + } + + if (venus_hills == null) { + BiomeAmbience effects = new BiomeAmbience.Builder().setFogColor(-3044526).setWaterColor(4159204).setWaterFogColor(329011).withSkyColor(-3044526).withFoliageColor(7842607).withGrassColor(9551193).setParticle(new ParticleEffectAmbience(ParticleTypes.CRIMSON_SPORE, 0.02f)).build(); + BiomeGenerationSettings.Builder biomeGenerationSettings = new BiomeGenerationSettings.Builder().withSurfaceBuilder(SurfaceBuilder.DEFAULT.func_242929_a(new SurfaceBuilderConfig(ModInnet.VENUS_SAND.get().getDefaultState(), ModInnet.VENUS_SANDSTONE.get().getDefaultState(), ModInnet.VENUS_SANDSTONE.get().getDefaultState()))); + DefaultBiomeFeatures.withCavesAndCanyons(biomeGenerationSettings); + MobSpawnInfo.Builder mobSpawnInfo = new MobSpawnInfo.Builder().isValidSpawnBiomeForPlayer(); + + venus_hills = new Biome.Builder().precipitation(Biome.RainType.RAIN).category(Biome.Category.NONE).depth(0.3f).scale(0.42f).temperature(1.5f).downfall(1f).setEffects(effects).withMobSpawnSettings(mobSpawnInfo.copy()).withGenerationSettings(biomeGenerationSettings.build()).build(); + event.getRegistry().register(venus_hills.setRegistryName(BossToolsMod.ModId,"venus_hills")); + } + + if (mercury == null) { + BiomeAmbience effects = new BiomeAmbience.Builder().setFogColor(-16777216).setWaterColor(4159204).setWaterFogColor(329011).withSkyColor(-16777216).withFoliageColor(7842607).withGrassColor(9551193).build(); + BiomeGenerationSettings.Builder biomeGenerationSettings = new BiomeGenerationSettings.Builder().withSurfaceBuilder(SurfaceBuilder.DEFAULT.func_242929_a(new SurfaceBuilderConfig(ModInnet.MERCURY_COBBLESTONE.get().getDefaultState(), ModInnet.MERCURY_COBBLESTONE.get().getDefaultState(), ModInnet.MERCURY_COBBLESTONE.get().getDefaultState()))); + DefaultBiomeFeatures.withCavesAndCanyons(biomeGenerationSettings); + MobSpawnInfo.Builder mobSpawnInfo = new MobSpawnInfo.Builder().isValidSpawnBiomeForPlayer(); + + mercury = new Biome.Builder().precipitation(Biome.RainType.NONE).category(Biome.Category.NONE).depth(1f).scale(0.2f).temperature(1.6f).downfall(0f).setEffects(effects).withMobSpawnSettings(mobSpawnInfo.copy()).withGenerationSettings(biomeGenerationSettings.build()).build(); + event.getRegistry().register(mercury.setRegistryName(BossToolsMod.ModId,"mercury")); + } + + if (mercury_magma == null) { + BiomeAmbience effects = new BiomeAmbience.Builder().setFogColor(-16777216).setWaterColor(4159204).setWaterFogColor(329011).withSkyColor(-16777216).withFoliageColor(7842607).withGrassColor(9551193).build(); + BiomeGenerationSettings.Builder biomeGenerationSettings = new BiomeGenerationSettings.Builder().withSurfaceBuilder(SurfaceBuilder.DEFAULT.func_242929_a(new SurfaceBuilderConfig(ModInnet.MERCURY_COBBLESTONE.get().getDefaultState(), ModInnet.MERCURY_COBBLESTONE.get().getDefaultState(), ModInnet.MERCURY_COBBLESTONE.get().getDefaultState()))); + biomeGenerationSettings.withSurfaceBuilder(ConfiguredSurfaceBuilders.field_244170_b); + biomeGenerationSettings.withFeature(GenerationStage.Decoration.SURFACE_STRUCTURES, Features.DELTA); + biomeGenerationSettings.withFeature(GenerationStage.Decoration.VEGETAL_DECORATION, Features.SPRING_LAVA_DOUBLE); + biomeGenerationSettings.withFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.BASALT_BLOBS); + biomeGenerationSettings.withFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.BLACKSTONE_BLOBS); + biomeGenerationSettings.withFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.SPRING_DELTA); + biomeGenerationSettings.withFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.PATCH_FIRE); + biomeGenerationSettings.withFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.PATCH_SOUL_FIRE); + biomeGenerationSettings.withFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.ORE_MAGMA); + biomeGenerationSettings.withFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.SPRING_CLOSED_DOUBLE); + DefaultBiomeFeatures.withCavesAndCanyons(biomeGenerationSettings); + MobSpawnInfo.Builder mobSpawnInfo = new MobSpawnInfo.Builder().isValidSpawnBiomeForPlayer(); + + mercury_magma = new Biome.Builder().precipitation(Biome.RainType.NONE).category(Biome.Category.NONE).depth(1f).scale(0.2f).temperature(1.6f).downfall(0f).setEffects(effects).withMobSpawnSettings(mobSpawnInfo.copy()).withGenerationSettings(biomeGenerationSettings.build()).build(); + event.getRegistry().register(mercury_magma.setRegistryName(BossToolsMod.ModId,"mercury_magma")); + } + + if (orbit == null) { + BiomeAmbience effects = new BiomeAmbience.Builder().setFogColor(-16777216).setWaterColor(4159204).setWaterFogColor(329011).withSkyColor(-16777216).withFoliageColor(7842607).withGrassColor(9551193).build(); + BiomeGenerationSettings.Builder biomeGenerationSettings = new BiomeGenerationSettings.Builder().withSurfaceBuilder(SurfaceBuilder.DEFAULT.func_242929_a(new SurfaceBuilderConfig(Blocks.AIR.getDefaultState(), Blocks.AIR.getDefaultState(), Blocks.AIR.getDefaultState()))); + MobSpawnInfo.Builder mobSpawnInfo = new MobSpawnInfo.Builder().isValidSpawnBiomeForPlayer(); + + orbit = new Biome.Builder().precipitation(Biome.RainType.NONE).category(Biome.Category.NONE).depth(0.1f).scale(0.2f).temperature(1.6f).downfall(0f).setEffects(effects).withMobSpawnSettings(mobSpawnInfo.copy()).withGenerationSettings(biomeGenerationSettings.build()).build(); + event.getRegistry().register(orbit.setRegistryName(BossToolsMod.ModId,"orbit")); + } + + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/world/caver/Caver.java b/src/main/java/net/mrscauthd/boss_tools/world/caver/Caver.java new file mode 100644 index 000000000..8a6f1103a --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/world/caver/Caver.java @@ -0,0 +1,49 @@ +package net.mrscauthd.boss_tools.world.caver; + +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.common.ObfuscationReflectionHelper; +import net.minecraftforge.fml.DeferredWorkQueue; +import net.minecraft.world.gen.carver.WorldCarver; +import net.minecraft.block.Block; +import java.util.Set; + +import com.google.common.collect.ImmutableSet; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId, bus = Mod.EventBusSubscriber.Bus.MOD) +public class Caver { + @SubscribeEvent + public static void init(FMLCommonSetupEvent event) { + DeferredWorkQueue.runLater(() -> { + try { + //WorldCarver.CAVE + ObfuscationReflectionHelper.setPrivateValue(WorldCarver.class, WorldCarver.CAVE, new ImmutableSet.Builder() + .addAll((Set) ObfuscationReflectionHelper.getPrivateValue(WorldCarver.class, WorldCarver.CAVE, "field_222718_j")) + //Moon + .add(ModInnet.MOON_STONE.get().getDefaultState().getBlock()) + //Mars + .add(ModInnet.MARS_STONE.get().getDefaultState().getBlock()) + //Mercury + .add(ModInnet.MERCURY_STONE.get().getDefaultState().getBlock()) + //Venus + .add(ModInnet.VENUS_STONE.get().getDefaultState().getBlock()).build(), "field_222718_j"); + //WorldCarver.CANYON + ObfuscationReflectionHelper.setPrivateValue(WorldCarver.class, WorldCarver.CANYON, new ImmutableSet.Builder() + .addAll((Set) ObfuscationReflectionHelper.getPrivateValue(WorldCarver.class, WorldCarver.CANYON, "field_222718_j")) + //Moon + .add(ModInnet.MOON_STONE.get().getDefaultState().getBlock()) + //Mars + .add(ModInnet.MARS_STONE.get().getDefaultState().getBlock()) + //Mercury + .add(ModInnet.MERCURY_STONE.get().getDefaultState().getBlock()) + //venus + .add(ModInnet.VENUS_STONE.get().getDefaultState().getBlock()).build(), "field_222718_j"); + } catch (Exception e) { + e.printStackTrace(); + } + }); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/world/oregen/OreGeneration.java b/src/main/java/net/mrscauthd/boss_tools/world/oregen/OreGeneration.java new file mode 100644 index 000000000..1d503280d --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/world/oregen/OreGeneration.java @@ -0,0 +1,157 @@ +package net.mrscauthd.boss_tools.world.oregen; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.registry.WorldGenRegistries; +import net.minecraft.world.ISeedReader; +import net.minecraft.world.gen.ChunkGenerator; +import net.minecraft.world.gen.GenerationStage; +import net.minecraft.world.gen.feature.ConfiguredFeature; +import net.minecraft.world.gen.feature.Feature; +import net.minecraft.world.gen.feature.OreFeature; +import net.minecraft.world.gen.feature.OreFeatureConfig; +import net.minecraft.world.gen.feature.template.IRuleTestType; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.event.world.BiomeLoadingEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.ModInnet; +import net.mrscauthd.boss_tools.events.Methodes; + +import java.util.Random; + +@Mod.EventBusSubscriber(modid = BossToolsMod.ModId, bus = Mod.EventBusSubscriber.Bus.MOD) +public class OreGeneration { + //MOON ORES: + public static IRuleTestType MOON_MATCH = null; + private static Feature MOON_GEN_FEATURE = null; + + private static ConfiguredFeature moonChesseOre = null; + private static ConfiguredFeature moonGlowstoneOre = null; + private static ConfiguredFeature moonIronOre = null; + private static ConfiguredFeature moonDeshOre = null; + + //MARS ORES: + public static IRuleTestType MARS_MATCH = null; + private static Feature MARS_GEN_FEATURE = null; + + private static ConfiguredFeature marsIceShardOre = null; + private static ConfiguredFeature marsIronOre = null; + private static ConfiguredFeature marsDiamondOre = null; + private static ConfiguredFeature marsSiliconOre = null; + + //MERCURY ORES: + public static IRuleTestType MERCURY_MATCH = null; + private static Feature MERCURY_GEN_FEATURE = null; + + private static ConfiguredFeature mercuryIronOre = null; + + //MERCURY ORES: + public static IRuleTestType VENUS_MATCH = null; + private static Feature VENUS_GEN_FEATURE = null; + + private static ConfiguredFeature venusCoalOre = null; + private static ConfiguredFeature venusGoldOre = null; + private static ConfiguredFeature venusDiamondOre = null; + + @SubscribeEvent + public static void registerFeature(RegistryEvent.Register> event) { + MOON_MATCH = Registry.register(Registry.RULE_TEST, new ResourceLocation(BossToolsMod.ModId,"moon_ore_match"), () -> RuleTests.MoonRuleTest.codec); + MARS_MATCH = Registry.register(Registry.RULE_TEST, new ResourceLocation(BossToolsMod.ModId,"mars_ore_match"), () -> RuleTests.MarsRuleTest.codec); + MERCURY_MATCH = Registry.register(Registry.RULE_TEST, new ResourceLocation(BossToolsMod.ModId,"mercury_ore_match"), () -> RuleTests.MercuryRuleTest.codec); + VENUS_MATCH = Registry.register(Registry.RULE_TEST, new ResourceLocation(BossToolsMod.ModId,"venus_ore_match"), () -> RuleTests.VenusRuleTest.codec); + + //MOON + MOON_GEN_FEATURE = featureDimCheck(MOON_GEN_FEATURE, new ResourceLocation(BossToolsMod.ModId,"moon")); + event.getRegistry().register(MOON_GEN_FEATURE.setRegistryName("moon_ore")); + + moonChesseOre = MOON_GEN_FEATURE.withConfiguration(new OreFeatureConfig(RuleTests.MoonRuleTest.INSTANCE, ModInnet.MOON_CHESSE_ORE.get().getDefaultState(), 10)).range(75).square().func_242731_b(4); + Registry.register(WorldGenRegistries.CONFIGURED_FEATURE, new ResourceLocation(BossToolsMod.ModId,"moon_cheese_ore"), moonChesseOre); + + moonGlowstoneOre = MOON_GEN_FEATURE.withConfiguration(new OreFeatureConfig(RuleTests.MoonRuleTest.INSTANCE, ModInnet.MOON_GLOWSTONE_ORE.get().getDefaultState(), 11)).range(50).square().func_242731_b(4); + Registry.register(WorldGenRegistries.CONFIGURED_FEATURE, new ResourceLocation(BossToolsMod.ModId,"moon_glowstone_ore"), moonGlowstoneOre); + + moonIronOre = MOON_GEN_FEATURE.withConfiguration(new OreFeatureConfig(RuleTests.MoonRuleTest.INSTANCE, ModInnet.MOON_IRON_ORE.get().getDefaultState(), 11)).range(64).square().func_242731_b(5); + Registry.register(WorldGenRegistries.CONFIGURED_FEATURE, new ResourceLocation(BossToolsMod.ModId,"moon_iron_ore"), moonIronOre); + + moonDeshOre = MOON_GEN_FEATURE.withConfiguration(new OreFeatureConfig(RuleTests.MoonRuleTest.INSTANCE, ModInnet.MOON_DESH_ORE.get().getDefaultState(), 9)).range(25).square().func_242731_b(3); + Registry.register(WorldGenRegistries.CONFIGURED_FEATURE, new ResourceLocation(BossToolsMod.ModId,"moon_desh_ore"), moonDeshOre); + + + + //MARS + MARS_GEN_FEATURE = featureDimCheck(MARS_GEN_FEATURE, new ResourceLocation(BossToolsMod.ModId,"mars")); + event.getRegistry().register(MARS_GEN_FEATURE.setRegistryName("mars_ore")); + + marsIceShardOre = MARS_GEN_FEATURE.withConfiguration(new OreFeatureConfig(RuleTests.MarsRuleTest.INSTANCE, ModInnet.MARS_ICE_SHARD_ORE.get().getDefaultState(), 11)).range(64).square().func_242731_b(7); + Registry.register(WorldGenRegistries.CONFIGURED_FEATURE, new ResourceLocation(BossToolsMod.ModId,"mars_ice_shard_ore"), marsIceShardOre); + + marsIronOre = MARS_GEN_FEATURE.withConfiguration(new OreFeatureConfig(RuleTests.MarsRuleTest.INSTANCE, ModInnet.MARS_IRON_ORE.get().getDefaultState(), 11)).range(64).square().func_242731_b(5); + Registry.register(WorldGenRegistries.CONFIGURED_FEATURE, new ResourceLocation(BossToolsMod.ModId,"mars_iron_ore"), marsIronOre); + + marsDiamondOre = MARS_GEN_FEATURE.withConfiguration(new OreFeatureConfig(RuleTests.MarsRuleTest.INSTANCE, ModInnet.MARS_DIAMOND_ORE.get().getDefaultState(), 7)).range(16).square().func_242731_b(3); + Registry.register(WorldGenRegistries.CONFIGURED_FEATURE, new ResourceLocation(BossToolsMod.ModId,"mars_diamond_ore"), marsDiamondOre); + + marsSiliconOre = MARS_GEN_FEATURE.withConfiguration(new OreFeatureConfig(RuleTests.MarsRuleTest.INSTANCE, ModInnet.MARS_SILICON_ORE.get().getDefaultState(), 8)).range(20).square().func_242731_b(3); + Registry.register(WorldGenRegistries.CONFIGURED_FEATURE, new ResourceLocation(BossToolsMod.ModId,"mars_silicon_ore"), marsSiliconOre); + + + + //MERCURY + MERCURY_GEN_FEATURE = featureDimCheck(MERCURY_GEN_FEATURE, new ResourceLocation(BossToolsMod.ModId,"mercury")); + event.getRegistry().register(MERCURY_GEN_FEATURE.setRegistryName("mercury_ore")); + + mercuryIronOre = MERCURY_GEN_FEATURE.withConfiguration(new OreFeatureConfig(RuleTests.MercuryRuleTest.INSTANCE, ModInnet.MERCURY_IRON_ORE.get().getDefaultState(), 12)).range(64).square().func_242731_b(5); + Registry.register(WorldGenRegistries.CONFIGURED_FEATURE, new ResourceLocation(BossToolsMod.ModId,"mercury_iron_ore"), mercuryIronOre); + + + + //Venus + VENUS_GEN_FEATURE = featureDimCheck(VENUS_GEN_FEATURE, new ResourceLocation(BossToolsMod.ModId,"venus")); + event.getRegistry().register(VENUS_GEN_FEATURE.setRegistryName("venus_ore")); + + venusCoalOre = VENUS_GEN_FEATURE.withConfiguration(new OreFeatureConfig(RuleTests.VenusRuleTest.INSTANCE, ModInnet.VENUS_COAL_ORE.get().getDefaultState(), 17)).range(125).square().func_242731_b(20); + Registry.register(WorldGenRegistries.CONFIGURED_FEATURE, new ResourceLocation(BossToolsMod.ModId,"venus_coal_ore"), venusCoalOre); + + venusGoldOre = VENUS_GEN_FEATURE.withConfiguration(new OreFeatureConfig(RuleTests.VenusRuleTest.INSTANCE, ModInnet.VENUS_GOLD_ORE.get().getDefaultState(), 9)).range(32).square().func_242731_b(2); + Registry.register(WorldGenRegistries.CONFIGURED_FEATURE, new ResourceLocation(BossToolsMod.ModId,"venus_gold_ore"), venusGoldOre); + + venusDiamondOre = VENUS_GEN_FEATURE.withConfiguration(new OreFeatureConfig(RuleTests.VenusRuleTest.INSTANCE, ModInnet.VENUS_DIAMOND_ORE.get().getDefaultState(), 7)).range(16).square().func_242731_b(3); + Registry.register(WorldGenRegistries.CONFIGURED_FEATURE, new ResourceLocation(BossToolsMod.ModId,"venus_diamond_ore"), venusDiamondOre); + } + + public static void biomesLoading(BiomeLoadingEvent event) { + event.getGeneration().getFeatures(GenerationStage.Decoration.UNDERGROUND_ORES).add(() -> moonIronOre); + event.getGeneration().getFeatures(GenerationStage.Decoration.UNDERGROUND_ORES).add(() -> moonDeshOre); + event.getGeneration().getFeatures(GenerationStage.Decoration.UNDERGROUND_ORES).add(() -> moonChesseOre); + event.getGeneration().getFeatures(GenerationStage.Decoration.UNDERGROUND_ORES).add(() -> moonGlowstoneOre); + + event.getGeneration().getFeatures(GenerationStage.Decoration.UNDERGROUND_ORES).add(() -> marsIceShardOre); + event.getGeneration().getFeatures(GenerationStage.Decoration.UNDERGROUND_ORES).add(() -> marsIronOre); + event.getGeneration().getFeatures(GenerationStage.Decoration.UNDERGROUND_ORES).add(() -> marsDiamondOre); + event.getGeneration().getFeatures(GenerationStage.Decoration.UNDERGROUND_ORES).add(() -> marsSiliconOre); + + event.getGeneration().getFeatures(GenerationStage.Decoration.UNDERGROUND_ORES).add(() -> mercuryIronOre); + + event.getGeneration().getFeatures(GenerationStage.Decoration.UNDERGROUND_ORES).add(() -> venusCoalOre); + event.getGeneration().getFeatures(GenerationStage.Decoration.UNDERGROUND_ORES).add(() -> venusGoldOre); + event.getGeneration().getFeatures(GenerationStage.Decoration.UNDERGROUND_ORES).add(() -> venusDiamondOre); + } + + /**DIM CHECK FOR FEATURE*/ + public static Feature featureDimCheck(Feature feature, ResourceLocation worldcheck) { + feature = new OreFeature(OreFeatureConfig.CODEC) { + @Override + public boolean generate(ISeedReader world, ChunkGenerator generator, Random rand, BlockPos pos, OreFeatureConfig config) { + if (Methodes.isWorld(world.getWorld(), worldcheck)) { + return super.generate(world, generator, rand, pos, config); + } + return false; + } + }; + return feature; + } + +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/world/oregen/RuleTests.java b/src/main/java/net/mrscauthd/boss_tools/world/oregen/RuleTests.java new file mode 100644 index 000000000..6fbcc36b1 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/world/oregen/RuleTests.java @@ -0,0 +1,78 @@ +package net.mrscauthd.boss_tools.world.oregen; + +import net.minecraft.block.BlockState; +import net.minecraft.world.gen.feature.template.IRuleTestType; +import net.minecraft.world.gen.feature.template.RuleTest; +import net.mrscauthd.boss_tools.ModInnet; + +import java.util.Random; + +public class RuleTests { + public static class MoonRuleTest extends RuleTest { + static final MoonRuleTest INSTANCE = new MoonRuleTest(); + static final com.mojang.serialization.Codec codec = com.mojang.serialization.Codec.unit(() -> INSTANCE); + + public boolean test(BlockState blockAt, Random random) { + if (blockAt.getBlock() == ModInnet.MOON_STONE.get().getDefaultState().getBlock()) { + return true; + } + + return false; + } + + protected IRuleTestType getType() { + return OreGeneration.MOON_MATCH; + } + } + + public static class MarsRuleTest extends RuleTest { + static final MarsRuleTest INSTANCE = new MarsRuleTest(); + static final com.mojang.serialization.Codec codec = com.mojang.serialization.Codec.unit(() -> INSTANCE); + + public boolean test(BlockState blockAt, Random random) { + if (blockAt.getBlock() == ModInnet.MARS_STONE.get().getDefaultState().getBlock()) { + return true; + } + + return false; + } + + protected IRuleTestType getType() { + return OreGeneration.MARS_MATCH; + } + } + + public static class MercuryRuleTest extends RuleTest { + static final MercuryRuleTest INSTANCE = new MercuryRuleTest(); + static final com.mojang.serialization.Codec codec = com.mojang.serialization.Codec.unit(() -> INSTANCE); + + public boolean test(BlockState blockAt, Random random) { + if (blockAt.getBlock() == ModInnet.MERCURY_STONE.get().getDefaultState().getBlock()) { + return true; + } + + return false; + } + + protected IRuleTestType getType() { + return OreGeneration.MERCURY_MATCH; + } + } + + public static class VenusRuleTest extends RuleTest { + static final VenusRuleTest INSTANCE = new VenusRuleTest(); + static final com.mojang.serialization.Codec codec = com.mojang.serialization.Codec.unit(() -> INSTANCE); + + public boolean test(BlockState blockAt, Random random) { + if (blockAt.getBlock() == ModInnet.VENUS_STONE.get().getDefaultState().getBlock()) { + return true; + } + + return false; + } + + protected IRuleTestType getType() { + return OreGeneration.VENUS_MATCH; + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/world/structure/AlienVillageStructure.java b/src/main/java/net/mrscauthd/boss_tools/world/structure/AlienVillageStructure.java new file mode 100644 index 000000000..824d8c5c0 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/world/structure/AlienVillageStructure.java @@ -0,0 +1,90 @@ +package net.mrscauthd.boss_tools.world.structure; + +import com.google.common.collect.ImmutableList; +import com.mojang.serialization.Codec; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MutableBoundingBox; +import net.minecraft.util.registry.DynamicRegistries; +import net.minecraft.util.registry.Registry; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.MobSpawnInfo; +import net.minecraft.world.gen.ChunkGenerator; +import net.minecraft.world.gen.GenerationStage; +import net.minecraft.world.gen.feature.NoFeatureConfig; +import net.minecraft.world.gen.feature.jigsaw.JigsawManager; +import net.minecraft.world.gen.feature.structure.AbstractVillagePiece; +import net.minecraft.world.gen.feature.structure.Structure; +import net.minecraft.world.gen.feature.structure.StructureStart; +import net.minecraft.world.gen.feature.structure.VillageConfig; +import net.minecraft.world.gen.feature.template.TemplateManager; +import net.mrscauthd.boss_tools.BossToolsMod; + +import java.util.List; + +public class AlienVillageStructure extends Structure { + public AlienVillageStructure(Codec codec) { + super(codec); + } + + @Override + public IStartFactory getStartFactory() { + return AlienVillageStructure.Start::new; + } + + @Override + public GenerationStage.Decoration getDecorationStage() { + return GenerationStage.Decoration.SURFACE_STRUCTURES; + } + + private static final List STRUCTURE_MONSTERS = ImmutableList.of( + + ); + + @Override + public List getDefaultSpawnList() { + return STRUCTURE_MONSTERS; + } + + private static final List STRUCTURE_CREATURES = ImmutableList.of( + + ); + + @Override + public List getDefaultCreatureSpawnList() { + return STRUCTURE_CREATURES; + } + + public static class Start extends StructureStart { + public Start(Structure structureIn, int chunkX, int chunkZ, MutableBoundingBox mutableBoundingBox, int referenceIn, long seedIn) { + super(structureIn, chunkX, chunkZ, mutableBoundingBox, referenceIn, seedIn); + } + + @Override + public void func_230364_a_(DynamicRegistries dynamicRegistryManager, ChunkGenerator chunkGenerator, TemplateManager templateManagerIn, int chunkX, int chunkZ, Biome biomeIn, NoFeatureConfig config) { + + int x = (chunkX << 4) + 7; + int z = (chunkZ << 4) + 7; + + BlockPos blockpos = new BlockPos(x, -21, z); + + JigsawManager.func_242837_a(dynamicRegistryManager, new VillageConfig(() -> dynamicRegistryManager.getRegistry(Registry.JIGSAW_POOL_KEY) + .getOrDefault(new ResourceLocation(BossToolsMod.ModId, "run_alien_village/side_alien_start")), + 25), + AbstractVillagePiece::new, + chunkGenerator, + templateManagerIn, + blockpos, + this.components, + this.rand, + true, + true); + + this.components.forEach(piece -> piece.offset(0, 1, 0)); + this.components.forEach(piece -> piece.getBoundingBox().minY -= 1); + + + this.recalculateStructureSize(); + } + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/world/structure/CrimsonStructure.java b/src/main/java/net/mrscauthd/boss_tools/world/structure/CrimsonStructure.java new file mode 100644 index 000000000..3fed8a2cd --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/world/structure/CrimsonStructure.java @@ -0,0 +1,89 @@ +package net.mrscauthd.boss_tools.world.structure; + +import com.google.common.collect.ImmutableList; +import com.mojang.serialization.Codec; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MutableBoundingBox; +import net.minecraft.util.registry.DynamicRegistries; +import net.minecraft.util.registry.Registry; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.MobSpawnInfo; +import net.minecraft.world.gen.ChunkGenerator; +import net.minecraft.world.gen.GenerationStage; +import net.minecraft.world.gen.feature.NoFeatureConfig; +import net.minecraft.world.gen.feature.jigsaw.JigsawManager; +import net.minecraft.world.gen.feature.structure.AbstractVillagePiece; +import net.minecraft.world.gen.feature.structure.Structure; +import net.minecraft.world.gen.feature.structure.StructureStart; +import net.minecraft.world.gen.feature.structure.VillageConfig; +import net.minecraft.world.gen.feature.template.TemplateManager; +import net.mrscauthd.boss_tools.BossToolsMod; + +import java.util.List; + +public class CrimsonStructure extends Structure { + public CrimsonStructure(Codec codec) { + super(codec); + } + + @Override + public IStartFactory getStartFactory() { + return CrimsonStructure.Start::new; + } + + @Override + public GenerationStage.Decoration getDecorationStage() { + return GenerationStage.Decoration.SURFACE_STRUCTURES; + } + + private static final List STRUCTURE_MONSTERS = ImmutableList.of( + + ); + + @Override + public List getDefaultSpawnList() { + return STRUCTURE_MONSTERS; + } + + private static final List STRUCTURE_CREATURES = ImmutableList.of( + + ); + + @Override + public List getDefaultCreatureSpawnList() { + return STRUCTURE_CREATURES; + } + + public static class Start extends StructureStart { + public Start(Structure structureIn, int chunkX, int chunkZ, MutableBoundingBox mutableBoundingBox, int referenceIn, long seedIn) { + super(structureIn, chunkX, chunkZ, mutableBoundingBox, referenceIn, seedIn); + } + + @Override + public void func_230364_a_(DynamicRegistries dynamicRegistryManager, ChunkGenerator chunkGenerator, TemplateManager templateManagerIn, int chunkX, int chunkZ, Biome biomeIn, NoFeatureConfig config) { + + int x = (chunkX << 4) + 7; + int z = (chunkZ << 4) + 7; + + BlockPos blockpos = new BlockPos(x, 0, z); + + JigsawManager.func_242837_a(dynamicRegistryManager, new VillageConfig(() -> dynamicRegistryManager.getRegistry(Registry.JIGSAW_POOL_KEY) + .getOrDefault(new ResourceLocation(BossToolsMod.ModId, "crimson_village/crimson_start")), + 25), + AbstractVillagePiece::new, + chunkGenerator, + templateManagerIn, + blockpos, + this.components, + this.rand, + true, + true); + + this.components.forEach(piece -> piece.offset(0, 1, 0)); + this.components.forEach(piece -> piece.getBoundingBox().minY -= 1); + + this.recalculateStructureSize(); + } + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/world/structure/MeteorStructure.java b/src/main/java/net/mrscauthd/boss_tools/world/structure/MeteorStructure.java new file mode 100644 index 000000000..50cc66db7 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/world/structure/MeteorStructure.java @@ -0,0 +1,89 @@ +package net.mrscauthd.boss_tools.world.structure; + +import com.google.common.collect.ImmutableList; +import com.mojang.serialization.Codec; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MutableBoundingBox; +import net.minecraft.util.registry.DynamicRegistries; +import net.minecraft.util.registry.Registry; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.MobSpawnInfo; +import net.minecraft.world.gen.ChunkGenerator; +import net.minecraft.world.gen.GenerationStage; +import net.minecraft.world.gen.feature.NoFeatureConfig; +import net.minecraft.world.gen.feature.jigsaw.JigsawManager; +import net.minecraft.world.gen.feature.structure.AbstractVillagePiece; +import net.minecraft.world.gen.feature.structure.Structure; +import net.minecraft.world.gen.feature.structure.StructureStart; +import net.minecraft.world.gen.feature.structure.VillageConfig; +import net.minecraft.world.gen.feature.template.TemplateManager; +import net.mrscauthd.boss_tools.BossToolsMod; + +import java.util.List; + +public class MeteorStructure extends Structure { + + public MeteorStructure(Codec codec) { + super(codec); + } + + @Override + public IStartFactory getStartFactory() { + return MeteorStructure.Start::new; + } + + @Override + public GenerationStage.Decoration getDecorationStage() { + return GenerationStage.Decoration.SURFACE_STRUCTURES; + } + + private static final List STRUCTURE_MONSTERS = ImmutableList.of( + + ); + + @Override + public List getDefaultSpawnList() { + return STRUCTURE_MONSTERS; + } + + private static final List STRUCTURE_CREATURES = ImmutableList.of( + + ); + + @Override + public List getDefaultCreatureSpawnList() { + return STRUCTURE_CREATURES; + } + + public static class Start extends StructureStart { + public Start(Structure structureIn, int chunkX, int chunkZ, MutableBoundingBox mutableBoundingBox, int referenceIn, long seedIn) { + super(structureIn, chunkX, chunkZ, mutableBoundingBox, referenceIn, seedIn); + } + + @Override + public void func_230364_a_(DynamicRegistries dynamicRegistryManager, ChunkGenerator chunkGenerator, TemplateManager templateManagerIn, int chunkX, int chunkZ, Biome biomeIn, NoFeatureConfig config) { + + int x = (chunkX << 4) + 7; + int z = (chunkZ << 4) + 7; + BlockPos blockpos = new BlockPos(x, -18, z); + + JigsawManager.func_242837_a(dynamicRegistryManager, new VillageConfig(() -> dynamicRegistryManager.getRegistry(Registry.JIGSAW_POOL_KEY) + .getOrDefault(new ResourceLocation(BossToolsMod.ModId, "run_meteor/side_meteor_start")), + 25), + AbstractVillagePiece::new, + chunkGenerator, + templateManagerIn, + blockpos, + this.components, + this.rand, + true, + true); + + this.components.forEach(piece -> piece.offset(0, 1, 0)); + this.components.forEach(piece -> piece.getBoundingBox().minY -= 1); + + this.recalculateStructureSize(); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/world/structure/OilStructure.java b/src/main/java/net/mrscauthd/boss_tools/world/structure/OilStructure.java new file mode 100644 index 000000000..a0f8d241b --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/world/structure/OilStructure.java @@ -0,0 +1,88 @@ +package net.mrscauthd.boss_tools.world.structure; + +import com.google.common.collect.ImmutableList; +import com.mojang.serialization.Codec; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MutableBoundingBox; +import net.minecraft.util.registry.DynamicRegistries; +import net.minecraft.util.registry.Registry; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.MobSpawnInfo; +import net.minecraft.world.gen.ChunkGenerator; +import net.minecraft.world.gen.GenerationStage; +import net.minecraft.world.gen.feature.NoFeatureConfig; +import net.minecraft.world.gen.feature.jigsaw.JigsawManager; +import net.minecraft.world.gen.feature.structure.AbstractVillagePiece; +import net.minecraft.world.gen.feature.structure.Structure; +import net.minecraft.world.gen.feature.structure.StructureStart; +import net.minecraft.world.gen.feature.structure.VillageConfig; +import net.minecraft.world.gen.feature.template.TemplateManager; +import net.mrscauthd.boss_tools.BossToolsMod; + +import java.util.List; + +public class OilStructure extends Structure { + public OilStructure(Codec codec) { + super(codec); + } + + @Override + public IStartFactory getStartFactory() { + return OilStructure.Start::new; + } + + @Override + public GenerationStage.Decoration getDecorationStage() { + return GenerationStage.Decoration.SURFACE_STRUCTURES; + } + + private static final List STRUCTURE_MONSTERS = ImmutableList.of( + + ); + + @Override + public List getDefaultSpawnList() { + return STRUCTURE_MONSTERS; + } + + private static final List STRUCTURE_CREATURES = ImmutableList.of( + + ); + + @Override + public List getDefaultCreatureSpawnList() { + return STRUCTURE_CREATURES; + } + + public static class Start extends StructureStart { + public Start(Structure structureIn, int chunkX, int chunkZ, MutableBoundingBox mutableBoundingBox, int referenceIn, long seedIn) { + super(structureIn, chunkX, chunkZ, mutableBoundingBox, referenceIn, seedIn); + } + + @Override + public void func_230364_a_(DynamicRegistries dynamicRegistryManager, ChunkGenerator chunkGenerator, TemplateManager templateManagerIn, int chunkX, int chunkZ, Biome biomeIn, NoFeatureConfig config) { + + int x = (chunkX << 4) + 7; + int z = (chunkZ << 4) + 7; + BlockPos blockpos = new BlockPos(x, -11, z); + + JigsawManager.func_242837_a(dynamicRegistryManager, new VillageConfig(() -> dynamicRegistryManager.getRegistry(Registry.JIGSAW_POOL_KEY) + .getOrDefault(new ResourceLocation(BossToolsMod.ModId, "run_oil/side_oil_start")), + 25), + AbstractVillagePiece::new, + chunkGenerator, + templateManagerIn, + blockpos, + this.components, + this.rand, + true, + true); + + this.components.forEach(piece -> piece.offset(0, 1, 0)); + this.components.forEach(piece -> piece.getBoundingBox().minY -= 1); + + this.recalculateStructureSize(); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/world/structure/VenusBulletStructure.java b/src/main/java/net/mrscauthd/boss_tools/world/structure/VenusBulletStructure.java new file mode 100644 index 000000000..a5e82bbc4 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/world/structure/VenusBulletStructure.java @@ -0,0 +1,89 @@ +package net.mrscauthd.boss_tools.world.structure; + +import com.google.common.collect.ImmutableList; +import com.mojang.serialization.Codec; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MutableBoundingBox; +import net.minecraft.util.registry.DynamicRegistries; +import net.minecraft.util.registry.Registry; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.MobSpawnInfo; +import net.minecraft.world.gen.ChunkGenerator; +import net.minecraft.world.gen.GenerationStage; +import net.minecraft.world.gen.feature.NoFeatureConfig; +import net.minecraft.world.gen.feature.jigsaw.JigsawManager; +import net.minecraft.world.gen.feature.structure.AbstractVillagePiece; +import net.minecraft.world.gen.feature.structure.Structure; +import net.minecraft.world.gen.feature.structure.StructureStart; +import net.minecraft.world.gen.feature.structure.VillageConfig; +import net.minecraft.world.gen.feature.template.TemplateManager; +import net.mrscauthd.boss_tools.BossToolsMod; + +import java.util.List; + +public class VenusBulletStructure extends Structure { + public VenusBulletStructure(Codec codec) { + super(codec); + } + + @Override + public IStartFactory getStartFactory() { + return VenusBulletStructure.Start::new; + } + + @Override + public GenerationStage.Decoration getDecorationStage() { + return GenerationStage.Decoration.SURFACE_STRUCTURES; + } + + private static final List STRUCTURE_MONSTERS = ImmutableList.of( + + ); + + @Override + public List getDefaultSpawnList() { + return STRUCTURE_MONSTERS; + } + + private static final List STRUCTURE_CREATURES = ImmutableList.of( + + ); + + @Override + public List getDefaultCreatureSpawnList() { + return STRUCTURE_CREATURES; + } + + public static class Start extends StructureStart { + public Start(Structure structureIn, int chunkX, int chunkZ, MutableBoundingBox mutableBoundingBox, int referenceIn, long seedIn) { + super(structureIn, chunkX, chunkZ, mutableBoundingBox, referenceIn, seedIn); + } + + @Override + public void func_230364_a_(DynamicRegistries dynamicRegistryManager, ChunkGenerator chunkGenerator, TemplateManager templateManagerIn, int chunkX, int chunkZ, Biome biomeIn, NoFeatureConfig config) { + + int x = (chunkX << 4) + 7; + int z = (chunkZ << 4) + 7; + + BlockPos blockpos = new BlockPos(x, 0, z); + + JigsawManager.func_242837_a(dynamicRegistryManager, new VillageConfig(() -> dynamicRegistryManager.getRegistry(Registry.JIGSAW_POOL_KEY) + .getOrDefault(new ResourceLocation(BossToolsMod.ModId, "run_venus_bullet/side_venus_bullet_start")), + 25), + AbstractVillagePiece::new, + chunkGenerator, + templateManagerIn, + blockpos, + this.components, + this.rand, + true, + true); + + this.components.forEach(piece -> piece.offset(0, 1, 0)); + this.components.forEach(piece -> piece.getBoundingBox().minY -= 1); + + this.recalculateStructureSize(); + } + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/world/structure/VenusTowerStructure.java b/src/main/java/net/mrscauthd/boss_tools/world/structure/VenusTowerStructure.java new file mode 100644 index 000000000..50a244380 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/world/structure/VenusTowerStructure.java @@ -0,0 +1,89 @@ +package net.mrscauthd.boss_tools.world.structure; + +import com.google.common.collect.ImmutableList; +import com.mojang.serialization.Codec; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MutableBoundingBox; +import net.minecraft.util.registry.DynamicRegistries; +import net.minecraft.util.registry.Registry; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.MobSpawnInfo; +import net.minecraft.world.gen.ChunkGenerator; +import net.minecraft.world.gen.GenerationStage; +import net.minecraft.world.gen.feature.NoFeatureConfig; +import net.minecraft.world.gen.feature.jigsaw.JigsawManager; +import net.minecraft.world.gen.feature.structure.AbstractVillagePiece; +import net.minecraft.world.gen.feature.structure.Structure; +import net.minecraft.world.gen.feature.structure.StructureStart; +import net.minecraft.world.gen.feature.structure.VillageConfig; +import net.minecraft.world.gen.feature.template.TemplateManager; +import net.mrscauthd.boss_tools.BossToolsMod; + +import java.util.List; + +public class VenusTowerStructure extends Structure { + public VenusTowerStructure(Codec codec) { + super(codec); + } + + @Override + public IStartFactory getStartFactory() { + return VenusTowerStructure.Start::new; + } + + @Override + public GenerationStage.Decoration getDecorationStage() { + return GenerationStage.Decoration.SURFACE_STRUCTURES; + } + + private static final List STRUCTURE_MONSTERS = ImmutableList.of( + + ); + + @Override + public List getDefaultSpawnList() { + return STRUCTURE_MONSTERS; + } + + private static final List STRUCTURE_CREATURES = ImmutableList.of( + + ); + + @Override + public List getDefaultCreatureSpawnList() { + return STRUCTURE_CREATURES; + } + + public static class Start extends StructureStart { + public Start(Structure structureIn, int chunkX, int chunkZ, MutableBoundingBox mutableBoundingBox, int referenceIn, long seedIn) { + super(structureIn, chunkX, chunkZ, mutableBoundingBox, referenceIn, seedIn); + } + + @Override + public void func_230364_a_(DynamicRegistries dynamicRegistryManager, ChunkGenerator chunkGenerator, TemplateManager templateManagerIn, int chunkX, int chunkZ, Biome biomeIn, NoFeatureConfig config) { + + int x = (chunkX << 4) + 7; + int z = (chunkZ << 4) + 7; + + BlockPos blockpos = new BlockPos(x, 0, z); + + JigsawManager.func_242837_a(dynamicRegistryManager, new VillageConfig(() -> dynamicRegistryManager.getRegistry(Registry.JIGSAW_POOL_KEY) + .getOrDefault(new ResourceLocation(BossToolsMod.ModId, "run_venus_tower/side_venus_tower_start")), + 25), + AbstractVillagePiece::new, + chunkGenerator, + templateManagerIn, + blockpos, + this.components, + this.rand, + true, + true); + + this.components.forEach(piece -> piece.offset(0, 1, 0)); + this.components.forEach(piece -> piece.getBoundingBox().minY -= 1); + + this.recalculateStructureSize(); + } + } +} \ No newline at end of file diff --git a/src/main/java/net/mrscauthd/boss_tools/world/structure/configuration/STConfiguredStructures.java b/src/main/java/net/mrscauthd/boss_tools/world/structure/configuration/STConfiguredStructures.java new file mode 100644 index 000000000..21c4c9ff5 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/world/structure/configuration/STConfiguredStructures.java @@ -0,0 +1,35 @@ +package net.mrscauthd.boss_tools.world.structure.configuration; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.registry.WorldGenRegistries; +import net.minecraft.world.gen.FlatGenerationSettings; +import net.minecraft.world.gen.feature.IFeatureConfig; +import net.minecraft.world.gen.feature.StructureFeature; +import net.mrscauthd.boss_tools.BossToolsMod; + +public class STConfiguredStructures { + public static StructureFeature ALIEN_VILLAGE = STStructures.ALIEN_VILLAGE.get().withConfiguration(IFeatureConfig.NO_FEATURE_CONFIG); + public static StructureFeature METEOR = STStructures.METEOR.get().withConfiguration(IFeatureConfig.NO_FEATURE_CONFIG); + public static StructureFeature VENUS_BULLET = STStructures2.VENUS_BULLET.get().withConfiguration(IFeatureConfig.NO_FEATURE_CONFIG); + public static StructureFeature VENUS_TOWER = STStructures2.VENUS_TOWER.get().withConfiguration(IFeatureConfig.NO_FEATURE_CONFIG); + public static StructureFeature CRIMSON = STStructures2.CRIMSON.get().withConfiguration(IFeatureConfig.NO_FEATURE_CONFIG); + public static StructureFeature OIL = STStructures.OIL.get().withConfiguration(IFeatureConfig.NO_FEATURE_CONFIG); + + public static void registerConfiguredStructures() { + Registry> registry = WorldGenRegistries.CONFIGURED_STRUCTURE_FEATURE; + Registry.register(registry, new ResourceLocation(BossToolsMod.ModId, "alien_village"), ALIEN_VILLAGE); + Registry.register(registry, new ResourceLocation(BossToolsMod.ModId, "meteor"), METEOR); + Registry.register(registry, new ResourceLocation(BossToolsMod.ModId, "venus_bullet"), VENUS_BULLET); + Registry.register(registry, new ResourceLocation(BossToolsMod.ModId, "venus_tower"), VENUS_TOWER); + Registry.register(registry, new ResourceLocation(BossToolsMod.ModId, "crimson_village"), CRIMSON); + Registry.register(registry, new ResourceLocation(BossToolsMod.ModId, "oil"), OIL); + + FlatGenerationSettings.STRUCTURES.put(STStructures.ALIEN_VILLAGE.get(), ALIEN_VILLAGE); + FlatGenerationSettings.STRUCTURES.put(STStructures.METEOR.get(), METEOR); + FlatGenerationSettings.STRUCTURES.put(STStructures2.VENUS_BULLET.get(), VENUS_BULLET); + FlatGenerationSettings.STRUCTURES.put(STStructures2.VENUS_TOWER.get(), VENUS_TOWER); + FlatGenerationSettings.STRUCTURES.put(STStructures2.CRIMSON.get(), CRIMSON); + FlatGenerationSettings.STRUCTURES.put(STStructures.OIL.get(), OIL); + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/world/structure/configuration/STStructures.java b/src/main/java/net/mrscauthd/boss_tools/world/structure/configuration/STStructures.java new file mode 100644 index 000000000..295864adb --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/world/structure/configuration/STStructures.java @@ -0,0 +1,59 @@ +package net.mrscauthd.boss_tools.world.structure.configuration; + +import com.google.common.collect.ImmutableMap; +import net.minecraft.util.registry.WorldGenRegistries; +import net.minecraft.world.gen.feature.NoFeatureConfig; +import net.minecraft.world.gen.feature.structure.Structure; +import net.minecraft.world.gen.settings.DimensionStructuresSettings; +import net.minecraft.world.gen.settings.StructureSeparationSettings; +import net.minecraftforge.fml.RegistryObject; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.world.structure.AlienVillageStructure; +import net.mrscauthd.boss_tools.world.structure.CrimsonStructure; +import net.mrscauthd.boss_tools.world.structure.MeteorStructure; +import net.mrscauthd.boss_tools.world.structure.OilStructure; + +import java.util.HashMap; +import java.util.Map; + +public class STStructures { + + public static final DeferredRegister> DEFERRED_REGISTRY_STRUCTURE = DeferredRegister.create(ForgeRegistries.STRUCTURE_FEATURES, BossToolsMod.ModId); + + public static final RegistryObject> ALIEN_VILLAGE = DEFERRED_REGISTRY_STRUCTURE.register("alien_village", () -> (new AlienVillageStructure(NoFeatureConfig.field_236558_a_))); + public static final RegistryObject> METEOR = DEFERRED_REGISTRY_STRUCTURE.register("meteor", () -> (new MeteorStructure(NoFeatureConfig.field_236558_a_))); + public static final RegistryObject> OIL = DEFERRED_REGISTRY_STRUCTURE.register("oil_well", () -> (new OilStructure(NoFeatureConfig.field_236558_a_))); + + public static void setupStructures() { + setupMapSpacingAndLand(ALIEN_VILLAGE.get(), new StructureSeparationSettings(24, 9, 1234567890), true); + + setupMapSpacingAndLand(METEOR.get(), new StructureSeparationSettings(22, 5, 1234567890), true); + + setupMapSpacingAndLand(OIL.get(), new StructureSeparationSettings(13, 7, 1234567890), true); + } + + public static > void setupMapSpacingAndLand(F structure, StructureSeparationSettings structureSeparationSettings, boolean transformSurroundingLand) { + Structure.NAME_STRUCTURE_BIMAP.put(structure.getRegistryName().toString(), structure); + + if (transformSurroundingLand) { + DimensionStructuresSettings.field_236191_b_ = + ImmutableMap., StructureSeparationSettings>builder() + .putAll(DimensionStructuresSettings.field_236191_b_) + .put(structure, structureSeparationSettings) + .build(); + + WorldGenRegistries.NOISE_SETTINGS.getEntries().forEach(settings -> { + Map, StructureSeparationSettings> structureMap = settings.getValue().getStructures().func_236195_a_(); + + if (structureMap instanceof ImmutableMap) { + Map, StructureSeparationSettings> tempMap = new HashMap<>(structureMap); + tempMap.put(structure, structureSeparationSettings); + } else { + structureMap.put(structure, structureSeparationSettings); + } + }); + } + } +} diff --git a/src/main/java/net/mrscauthd/boss_tools/world/structure/configuration/STStructures2.java b/src/main/java/net/mrscauthd/boss_tools/world/structure/configuration/STStructures2.java new file mode 100644 index 000000000..adc9c7778 --- /dev/null +++ b/src/main/java/net/mrscauthd/boss_tools/world/structure/configuration/STStructures2.java @@ -0,0 +1,67 @@ +package net.mrscauthd.boss_tools.world.structure.configuration; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import net.minecraft.util.registry.WorldGenRegistries; +import net.minecraft.world.gen.feature.NoFeatureConfig; +import net.minecraft.world.gen.feature.structure.Structure; +import net.minecraft.world.gen.settings.DimensionStructuresSettings; +import net.minecraft.world.gen.settings.StructureSeparationSettings; +import net.minecraftforge.fml.RegistryObject; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.mrscauthd.boss_tools.BossToolsMod; +import net.mrscauthd.boss_tools.world.structure.CrimsonStructure; +import net.mrscauthd.boss_tools.world.structure.VenusBulletStructure; +import net.mrscauthd.boss_tools.world.structure.VenusTowerStructure; + +import java.util.HashMap; +import java.util.Map; + +public class STStructures2 { + + public static final DeferredRegister> DEFERRED_REGISTRY_STRUCTURE = DeferredRegister.create(ForgeRegistries.STRUCTURE_FEATURES, BossToolsMod.ModId); + + public static final RegistryObject> VENUS_BULLET = DEFERRED_REGISTRY_STRUCTURE.register("venus_bullet", () -> (new VenusBulletStructure(NoFeatureConfig.field_236558_a_))); + public static final RegistryObject> VENUS_TOWER = DEFERRED_REGISTRY_STRUCTURE.register("venus_tower", () -> (new VenusTowerStructure(NoFeatureConfig.field_236558_a_))); + public static final RegistryObject> CRIMSON = DEFERRED_REGISTRY_STRUCTURE.register("crimson_village", () -> (new CrimsonStructure(NoFeatureConfig.field_236558_a_))); + + public static void setupStructures() { + setupMapSpacingAndLand(VENUS_BULLET.get(), new StructureSeparationSettings(29, 19, 1234567890), true); + + setupMapSpacingAndLand(VENUS_TOWER.get(), new StructureSeparationSettings(24, 17, 1234567890), true); + + setupMapSpacingAndLand(CRIMSON.get(), new StructureSeparationSettings(27, 14, 1234567890), true); + } + + public static > void setupMapSpacingAndLand(F structure, StructureSeparationSettings structureSeparationSettings, boolean transformSurroundingLand) { + + Structure.NAME_STRUCTURE_BIMAP.put(structure.getRegistryName().toString(), structure); + + if (transformSurroundingLand) { + Structure.field_236384_t_ = + ImmutableList.>builder() + .addAll(Structure.field_236384_t_) + .add(structure) + .build(); + + DimensionStructuresSettings.field_236191_b_ = + ImmutableMap., StructureSeparationSettings>builder() + .putAll(DimensionStructuresSettings.field_236191_b_) + .put(structure, structureSeparationSettings) + .build(); + + + WorldGenRegistries.NOISE_SETTINGS.getEntries().forEach(settings -> { + Map, StructureSeparationSettings> structureMap = settings.getValue().getStructures().func_236195_a_(); + + if (structureMap instanceof ImmutableMap) { + Map, StructureSeparationSettings> tempMap = new HashMap<>(structureMap); + tempMap.put(structure, structureSeparationSettings); + } else { + structureMap.put(structure, structureSeparationSettings); + } + }); + } + } +} diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg new file mode 100644 index 000000000..2fcc1717c --- /dev/null +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -0,0 +1,16 @@ +public net.minecraft.client.world.DimensionRenderInfo field_239208_a_ # field_239208_a_ +public net.minecraft.client.renderer.WorldRenderer field_175012_t # skyVBO +public net.minecraft.client.renderer.WorldRenderer field_175014_r # skyVertexFormat +public net.minecraft.client.renderer.WorldRenderer field_175013_s # starVBO +public net.minecraft.client.renderer.WorldRenderer field_175011_u # sky2VBO +public-f net.minecraft.world.gen.feature.structure.Structure field_236384t #LAND_TRANSFORMING_STRUCTURES +public-f net.minecraft.world.gen.settings.DimensionStructuresSettings field_236191b #DEFAULT_STRUCTURE_CONFIGS +public-f net.minecraft.world.gen.FlatGenerationSettings field_202247_j #STRUCTURES +public-f net.minecraft.world.gen.settings.DimensionStructuresSettings field_236193d #structures +public-f net.minecraft.world.gen.feature.structure.Structure field_236384_t_ #LAND_TRANSFORMING_STRUCTURES +public-f net.minecraft.world.gen.feature.structure.Structure field_236385_u_ #LAND_TRANSFORMING_STRUCTURES +public-f net.minecraft.world.gen.settings.DimensionStructuresSettings field_236191_b_ #DEFAULT_STRUCTURE_CONFIGS +public-f net.minecraft.world.gen.settings.DimensionStructuresSettings field_236193_d_ #DEFAULT_STRUCTURE_CONFIGS +public net.minecraft.client.renderer.ActiveRenderInfo func_216782_a(DDD)V # move +public net.minecraft.client.renderer.ActiveRenderInfo func_216779_a(D)D # getMaxZoom +public net.minecraft.entity.merchant.villager.VillagerEntity field_234542_bL_ # assignProfessionWhenSpawned \ No newline at end of file diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml new file mode 100644 index 000000000..9b3ae73e8 --- /dev/null +++ b/src/main/resources/META-INF/mods.toml @@ -0,0 +1,35 @@ +modLoader="javafml" +loaderVersion="[36,)" +license="Not specified" + +[[mods]] +modId="boss_tools" +version="5.5" +displayName="Space-BossTools" +displayURL="https://www.curseforge.com/minecraft/mc-mods/space-bosstools" +logoFile="logo.png" +authors="MrScautHD" +description=''' +Fly to Other Planets and Beyond! +''' + +[[dependencies.boss_tools]] + modId="minecraft" + mandatory=true + versionRange="[1.16.5]" + ordering="NONE" + side="BOTH" + +[[dependencies.boss_tools]] + modId="forge" + mandatory=true + versionRange="[36.2.0,]" + ordering="NONE" + side="BOTH" + +[[dependencies.boss_tools]] + modId="tconstruct" + mandatory=false + versionRange="[0.5.0,)" + ordering="NONE" + side="BOTH" \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/blast_furnace.json b/src/main/resources/assets/boss_tools/blockstates/blast_furnace.json new file mode 100644 index 000000000..a780caf8e --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/blast_furnace.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,lit=false": { + "model": "boss_tools:block/blast_furnace" + }, + "facing=east,lit=false": { + "model": "boss_tools:block/blast_furnace", + "y": 90 + }, + "facing=south,lit=false": { + "model": "boss_tools:block/blast_furnace", + "y": 180 + }, + "facing=west,lit=false": { + "model": "boss_tools:block/blast_furnace", + "y": 270 + }, + "facing=north,lit=true": { + "model": "boss_tools:block/blast_furnace_ac" + }, + "facing=east,lit=true": { + "model": "boss_tools:block/blast_furnace_ac", + "y": 90 + }, + "facing=south,lit=true": { + "model": "boss_tools:block/blast_furnace_ac", + "y": 180 + }, + "facing=west,lit=true": { + "model": "boss_tools:block/blast_furnace_ac", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/blue_iron_plating_block.json b/src/main/resources/assets/boss_tools/blockstates/blue_iron_plating_block.json new file mode 100644 index 000000000..1854cc891 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/blue_iron_plating_block.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "boss_tools:block/blue_iron_plating_block", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "boss_tools:block/blue_iron_plating_block" + }, + "axis=z": { + "model": "boss_tools:block/blue_iron_plating_block", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/coal_generator.json b/src/main/resources/assets/boss_tools/blockstates/coal_generator.json new file mode 100644 index 000000000..c8275ba7a --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/coal_generator.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,lit=false": { + "model": "boss_tools:block/coal_generator" + }, + "facing=east,lit=false": { + "model": "boss_tools:block/coal_generator", + "y": 90 + }, + "facing=south,lit=false": { + "model": "boss_tools:block/coal_generator", + "y": 180 + }, + "facing=west,lit=false": { + "model": "boss_tools:block/coal_generator", + "y": 270 + }, + "facing=north,lit=true": { + "model": "boss_tools:block/coal_generator_ac" + }, + "facing=east,lit=true": { + "model": "boss_tools:block/coal_generator_ac", + "y": 90 + }, + "facing=south,lit=true": { + "model": "boss_tools:block/coal_generator_ac", + "y": 180 + }, + "facing=west,lit=true": { + "model": "boss_tools:block/coal_generator_ac", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/coal_lantern.json b/src/main/resources/assets/boss_tools/blockstates/coal_lantern.json new file mode 100644 index 000000000..fccadfb5d --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/coal_lantern.json @@ -0,0 +1,10 @@ +{ + "variants": { + "hanging=false": { + "model": "boss_tools:block/coal_lantern" + }, + "hanging=true": { + "model": "boss_tools:block/coal_lantern_hanging" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/coal_torch.json b/src/main/resources/assets/boss_tools/blockstates/coal_torch.json new file mode 100644 index 000000000..ec5abc64a --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/coal_torch.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/coal_torch" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/compressor.json b/src/main/resources/assets/boss_tools/blockstates/compressor.json new file mode 100644 index 000000000..2a4c30937 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/compressor.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,lit=false": { + "model": "boss_tools:block/compressor" + }, + "facing=east,lit=false": { + "model": "boss_tools:block/compressor", + "y": 90 + }, + "facing=south,lit=false": { + "model": "boss_tools:block/compressor", + "y": 180 + }, + "facing=west,lit=false": { + "model": "boss_tools:block/compressor", + "y": 270 + }, + "facing=north,lit=true": { + "model": "boss_tools:block/compressor_ac" + }, + "facing=east,lit=true": { + "model": "boss_tools:block/compressor_ac", + "y": 90 + }, + "facing=south,lit=true": { + "model": "boss_tools:block/compressor_ac", + "y": 180 + }, + "facing=west,lit=true": { + "model": "boss_tools:block/compressor_ac", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/cracked_moon_brick_slab.json b/src/main/resources/assets/boss_tools/blockstates/cracked_moon_brick_slab.json new file mode 100644 index 000000000..e0c348fbe --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/cracked_moon_brick_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "boss_tools:block/cracked_moon_brick_slab" + }, + "type=top": { + "model": "boss_tools:block/cracked_moon_brick_slab_top" + }, + "type=double": { + "model": "boss_tools:block/cracked_moon_brick_slab_full" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/cracked_moon_brick_stairs.json b/src/main/resources/assets/boss_tools/blockstates/cracked_moon_brick_stairs.json new file mode 100644 index 000000000..fcaed76bc --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/cracked_moon_brick_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=straight": { + "model": "boss_tools:block/cracked_moon_brick_stairs" + }, + "facing=west,half=bottom,shape=straight": { + "model": "boss_tools:block/cracked_moon_brick_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "boss_tools:block/cracked_moon_brick_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "boss_tools:block/cracked_moon_brick_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "boss_tools:block/cracked_moon_brick_stairs_inner" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "boss_tools:block/cracked_moon_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "boss_tools:block/cracked_moon_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "boss_tools:block/cracked_moon_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "boss_tools:block/cracked_moon_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "boss_tools:block/cracked_moon_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "boss_tools:block/cracked_moon_brick_stairs_inner" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "boss_tools:block/cracked_moon_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "boss_tools:block/cracked_moon_brick_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "boss_tools:block/cracked_moon_brick_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "boss_tools:block/cracked_moon_brick_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "boss_tools:block/cracked_moon_brick_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "boss_tools:block/cracked_moon_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "boss_tools:block/cracked_moon_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "boss_tools:block/cracked_moon_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "boss_tools:block/cracked_moon_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "boss_tools:block/cracked_moon_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "boss_tools:block/cracked_moon_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "boss_tools:block/cracked_moon_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "boss_tools:block/cracked_moon_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "boss_tools:block/cracked_moon_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "boss_tools:block/cracked_moon_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "boss_tools:block/cracked_moon_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "boss_tools:block/cracked_moon_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "boss_tools:block/cracked_moon_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "boss_tools:block/cracked_moon_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "boss_tools:block/cracked_moon_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "boss_tools:block/cracked_moon_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "boss_tools:block/cracked_moon_brick_stairs_outer" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "boss_tools:block/cracked_moon_brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "boss_tools:block/cracked_moon_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "boss_tools:block/cracked_moon_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "boss_tools:block/cracked_moon_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "boss_tools:block/cracked_moon_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "boss_tools:block/cracked_moon_brick_stairs_outer" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "boss_tools:block/cracked_moon_brick_stairs_outer", + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/cracked_moon_bricks.json b/src/main/resources/assets/boss_tools/blockstates/cracked_moon_bricks.json new file mode 100644 index 000000000..95001f037 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/cracked_moon_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/cracked_moon_bricks" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/desh_block.json b/src/main/resources/assets/boss_tools/blockstates/desh_block.json new file mode 100644 index 000000000..a34e14454 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/desh_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/desh_block" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/flag.json b/src/main/resources/assets/boss_tools/blockstates/flag.json new file mode 100644 index 000000000..7dd51f90f --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/flag.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,half=lower": { + "model": "boss_tools:block/flag_down" + }, + "facing=east,half=lower": { + "model": "boss_tools:block/flag_down", + "y": 90 + }, + "facing=south,half=lower": { + "model": "boss_tools:block/flag_down", + "y": 180 + }, + "facing=west,half=lower": { + "model": "boss_tools:block/flag_down", + "y": 270 + }, + "facing=north,half=upper": { + "model": "boss_tools:block/flag_up" + }, + "facing=east,half=upper": { + "model": "boss_tools:block/flag_up", + "y": 90 + }, + "facing=south,half=upper": { + "model": "boss_tools:block/flag_up", + "y": 180 + }, + "facing=west,half=upper": { + "model": "boss_tools:block/flag_up", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/flag_blue.json b/src/main/resources/assets/boss_tools/blockstates/flag_blue.json new file mode 100644 index 000000000..a69874d37 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/flag_blue.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,half=lower": { + "model": "boss_tools:block/flag_down_blue" + }, + "facing=east,half=lower": { + "model": "boss_tools:block/flag_down_blue", + "y": 90 + }, + "facing=south,half=lower": { + "model": "boss_tools:block/flag_down_blue", + "y": 180 + }, + "facing=west,half=lower": { + "model": "boss_tools:block/flag_down_blue", + "y": 270 + }, + "facing=north,half=upper": { + "model": "boss_tools:block/flag_up_blue" + }, + "facing=east,half=upper": { + "model": "boss_tools:block/flag_up_blue", + "y": 90 + }, + "facing=south,half=upper": { + "model": "boss_tools:block/flag_up_blue", + "y": 180 + }, + "facing=west,half=upper": { + "model": "boss_tools:block/flag_up_blue", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/flag_brown.json b/src/main/resources/assets/boss_tools/blockstates/flag_brown.json new file mode 100644 index 000000000..479b81259 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/flag_brown.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,half=lower": { + "model": "boss_tools:block/flag_down_brown" + }, + "facing=east,half=lower": { + "model": "boss_tools:block/flag_down_brown", + "y": 90 + }, + "facing=south,half=lower": { + "model": "boss_tools:block/flag_down_brown", + "y": 180 + }, + "facing=west,half=lower": { + "model": "boss_tools:block/flag_down_brown", + "y": 270 + }, + "facing=north,half=upper": { + "model": "boss_tools:block/flag_up_brown" + }, + "facing=east,half=upper": { + "model": "boss_tools:block/flag_up_brown", + "y": 90 + }, + "facing=south,half=upper": { + "model": "boss_tools:block/flag_up_brown", + "y": 180 + }, + "facing=west,half=upper": { + "model": "boss_tools:block/flag_up_brown", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/flag_cyan.json b/src/main/resources/assets/boss_tools/blockstates/flag_cyan.json new file mode 100644 index 000000000..162e3354e --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/flag_cyan.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,half=lower": { + "model": "boss_tools:block/flag_down_cyan" + }, + "facing=east,half=lower": { + "model": "boss_tools:block/flag_down_cyan", + "y": 90 + }, + "facing=south,half=lower": { + "model": "boss_tools:block/flag_down_cyan", + "y": 180 + }, + "facing=west,half=lower": { + "model": "boss_tools:block/flag_down_cyan", + "y": 270 + }, + "facing=north,half=upper": { + "model": "boss_tools:block/flag_up_cyan" + }, + "facing=east,half=upper": { + "model": "boss_tools:block/flag_up_cyan", + "y": 90 + }, + "facing=south,half=upper": { + "model": "boss_tools:block/flag_up_cyan", + "y": 180 + }, + "facing=west,half=upper": { + "model": "boss_tools:block/flag_up_cyan", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/flag_gray.json b/src/main/resources/assets/boss_tools/blockstates/flag_gray.json new file mode 100644 index 000000000..bb743dc4e --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/flag_gray.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,half=lower": { + "model": "boss_tools:block/flag_down_gray" + }, + "facing=east,half=lower": { + "model": "boss_tools:block/flag_down_gray", + "y": 90 + }, + "facing=south,half=lower": { + "model": "boss_tools:block/flag_down_gray", + "y": 180 + }, + "facing=west,half=lower": { + "model": "boss_tools:block/flag_down_gray", + "y": 270 + }, + "facing=north,half=upper": { + "model": "boss_tools:block/flag_up_gray" + }, + "facing=east,half=upper": { + "model": "boss_tools:block/flag_up_gray", + "y": 90 + }, + "facing=south,half=upper": { + "model": "boss_tools:block/flag_up_gray", + "y": 180 + }, + "facing=west,half=upper": { + "model": "boss_tools:block/flag_up_gray", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/flag_green.json b/src/main/resources/assets/boss_tools/blockstates/flag_green.json new file mode 100644 index 000000000..c7978fa2e --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/flag_green.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,half=lower": { + "model": "boss_tools:block/flag_down_green" + }, + "facing=east,half=lower": { + "model": "boss_tools:block/flag_down_green", + "y": 90 + }, + "facing=south,half=lower": { + "model": "boss_tools:block/flag_down_green", + "y": 180 + }, + "facing=west,half=lower": { + "model": "boss_tools:block/flag_down_green", + "y": 270 + }, + "facing=north,half=upper": { + "model": "boss_tools:block/flag_up_green" + }, + "facing=east,half=upper": { + "model": "boss_tools:block/flag_up_green", + "y": 90 + }, + "facing=south,half=upper": { + "model": "boss_tools:block/flag_up_green", + "y": 180 + }, + "facing=west,half=upper": { + "model": "boss_tools:block/flag_up_green", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/flag_light_blue.json b/src/main/resources/assets/boss_tools/blockstates/flag_light_blue.json new file mode 100644 index 000000000..64770a08f --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/flag_light_blue.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,half=lower": { + "model": "boss_tools:block/flag_down_light_blue" + }, + "facing=east,half=lower": { + "model": "boss_tools:block/flag_down_light_blue", + "y": 90 + }, + "facing=south,half=lower": { + "model": "boss_tools:block/flag_down_light_blue", + "y": 180 + }, + "facing=west,half=lower": { + "model": "boss_tools:block/flag_down_light_blue", + "y": 270 + }, + "facing=north,half=upper": { + "model": "boss_tools:block/flag_up_light_blue" + }, + "facing=east,half=upper": { + "model": "boss_tools:block/flag_up_light_blue", + "y": 90 + }, + "facing=south,half=upper": { + "model": "boss_tools:block/flag_up_light_blue", + "y": 180 + }, + "facing=west,half=upper": { + "model": "boss_tools:block/flag_up_light_blue", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/flag_lime.json b/src/main/resources/assets/boss_tools/blockstates/flag_lime.json new file mode 100644 index 000000000..944929af6 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/flag_lime.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,half=lower": { + "model": "boss_tools:block/flag_down_lime" + }, + "facing=east,half=lower": { + "model": "boss_tools:block/flag_down_lime", + "y": 90 + }, + "facing=south,half=lower": { + "model": "boss_tools:block/flag_down_lime", + "y": 180 + }, + "facing=west,half=lower": { + "model": "boss_tools:block/flag_down_lime", + "y": 270 + }, + "facing=north,half=upper": { + "model": "boss_tools:block/flag_up_lime" + }, + "facing=east,half=upper": { + "model": "boss_tools:block/flag_up_lime", + "y": 90 + }, + "facing=south,half=upper": { + "model": "boss_tools:block/flag_up_lime", + "y": 180 + }, + "facing=west,half=upper": { + "model": "boss_tools:block/flag_up_lime", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/flag_magenta.json b/src/main/resources/assets/boss_tools/blockstates/flag_magenta.json new file mode 100644 index 000000000..8e3ca1ad5 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/flag_magenta.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,half=lower": { + "model": "boss_tools:block/flag_down_magenta" + }, + "facing=east,half=lower": { + "model": "boss_tools:block/flag_down_magenta", + "y": 90 + }, + "facing=south,half=lower": { + "model": "boss_tools:block/flag_down_magenta", + "y": 180 + }, + "facing=west,half=lower": { + "model": "boss_tools:block/flag_down_magenta", + "y": 270 + }, + "facing=north,half=upper": { + "model": "boss_tools:block/flag_up_magenta" + }, + "facing=east,half=upper": { + "model": "boss_tools:block/flag_up_magenta", + "y": 90 + }, + "facing=south,half=upper": { + "model": "boss_tools:block/flag_up_magenta", + "y": 180 + }, + "facing=west,half=upper": { + "model": "boss_tools:block/flag_up_magenta", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/flag_orange.json b/src/main/resources/assets/boss_tools/blockstates/flag_orange.json new file mode 100644 index 000000000..a0c6062c1 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/flag_orange.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,half=lower": { + "model": "boss_tools:block/flag_down_orange" + }, + "facing=east,half=lower": { + "model": "boss_tools:block/flag_down_orange", + "y": 90 + }, + "facing=south,half=lower": { + "model": "boss_tools:block/flag_down_orange", + "y": 180 + }, + "facing=west,half=lower": { + "model": "boss_tools:block/flag_down_orange", + "y": 270 + }, + "facing=north,half=upper": { + "model": "boss_tools:block/flag_up_orange" + }, + "facing=east,half=upper": { + "model": "boss_tools:block/flag_up_orange", + "y": 90 + }, + "facing=south,half=upper": { + "model": "boss_tools:block/flag_up_orange", + "y": 180 + }, + "facing=west,half=upper": { + "model": "boss_tools:block/flag_up_orange", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/flag_pink.json b/src/main/resources/assets/boss_tools/blockstates/flag_pink.json new file mode 100644 index 000000000..2e36dbb8b --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/flag_pink.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,half=lower": { + "model": "boss_tools:block/flag_down_pink" + }, + "facing=east,half=lower": { + "model": "boss_tools:block/flag_down_pink", + "y": 90 + }, + "facing=south,half=lower": { + "model": "boss_tools:block/flag_down_pink", + "y": 180 + }, + "facing=west,half=lower": { + "model": "boss_tools:block/flag_down_pink", + "y": 270 + }, + "facing=north,half=upper": { + "model": "boss_tools:block/flag_up_pink" + }, + "facing=east,half=upper": { + "model": "boss_tools:block/flag_up_pink", + "y": 90 + }, + "facing=south,half=upper": { + "model": "boss_tools:block/flag_up_pink", + "y": 180 + }, + "facing=west,half=upper": { + "model": "boss_tools:block/flag_up_pink", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/flag_purple.json b/src/main/resources/assets/boss_tools/blockstates/flag_purple.json new file mode 100644 index 000000000..247aea1d5 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/flag_purple.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,half=lower": { + "model": "boss_tools:block/flag_down_purple" + }, + "facing=east,half=lower": { + "model": "boss_tools:block/flag_down_purple", + "y": 90 + }, + "facing=south,half=lower": { + "model": "boss_tools:block/flag_down_purple", + "y": 180 + }, + "facing=west,half=lower": { + "model": "boss_tools:block/flag_down_purple", + "y": 270 + }, + "facing=north,half=upper": { + "model": "boss_tools:block/flag_up_purple" + }, + "facing=east,half=upper": { + "model": "boss_tools:block/flag_up_purple", + "y": 90 + }, + "facing=south,half=upper": { + "model": "boss_tools:block/flag_up_purple", + "y": 180 + }, + "facing=west,half=upper": { + "model": "boss_tools:block/flag_up_purple", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/flag_red.json b/src/main/resources/assets/boss_tools/blockstates/flag_red.json new file mode 100644 index 000000000..e8159a675 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/flag_red.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,half=lower": { + "model": "boss_tools:block/flag_down_red" + }, + "facing=east,half=lower": { + "model": "boss_tools:block/flag_down_red", + "y": 90 + }, + "facing=south,half=lower": { + "model": "boss_tools:block/flag_down_red", + "y": 180 + }, + "facing=west,half=lower": { + "model": "boss_tools:block/flag_down_red", + "y": 270 + }, + "facing=north,half=upper": { + "model": "boss_tools:block/flag_up_red" + }, + "facing=east,half=upper": { + "model": "boss_tools:block/flag_up_red", + "y": 90 + }, + "facing=south,half=upper": { + "model": "boss_tools:block/flag_up_red", + "y": 180 + }, + "facing=west,half=upper": { + "model": "boss_tools:block/flag_up_red", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/flag_yellow.json b/src/main/resources/assets/boss_tools/blockstates/flag_yellow.json new file mode 100644 index 000000000..d6714af28 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/flag_yellow.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,half=lower": { + "model": "boss_tools:block/flag_down_yellow" + }, + "facing=east,half=lower": { + "model": "boss_tools:block/flag_down_yellow", + "y": 90 + }, + "facing=south,half=lower": { + "model": "boss_tools:block/flag_down_yellow", + "y": 180 + }, + "facing=west,half=lower": { + "model": "boss_tools:block/flag_down_yellow", + "y": 270 + }, + "facing=north,half=upper": { + "model": "boss_tools:block/flag_up_yellow" + }, + "facing=east,half=upper": { + "model": "boss_tools:block/flag_up_yellow", + "y": 90 + }, + "facing=south,half=upper": { + "model": "boss_tools:block/flag_up_yellow", + "y": 180 + }, + "facing=west,half=upper": { + "model": "boss_tools:block/flag_up_yellow", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/fuel_refinery.json b/src/main/resources/assets/boss_tools/blockstates/fuel_refinery.json new file mode 100644 index 000000000..c419858b1 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/fuel_refinery.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,lit=false": { + "model": "boss_tools:block/fuel_refinery" + }, + "facing=east,lit=false": { + "model": "boss_tools:block/fuel_refinery", + "y": 90 + }, + "facing=south,lit=false": { + "model": "boss_tools:block/fuel_refinery", + "y": 180 + }, + "facing=west,lit=false": { + "model": "boss_tools:block/fuel_refinery", + "y": 270 + }, + "facing=north,lit=true": { + "model": "boss_tools:block/fuel_refinery_ac" + }, + "facing=east,lit=true": { + "model": "boss_tools:block/fuel_refinery_ac", + "y": 90 + }, + "facing=south,lit=true": { + "model": "boss_tools:block/fuel_refinery_ac", + "y": 180 + }, + "facing=west,lit=true": { + "model": "boss_tools:block/fuel_refinery_ac", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/infernal_spire_block.json b/src/main/resources/assets/boss_tools/blockstates/infernal_spire_block.json new file mode 100644 index 000000000..890811f67 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/infernal_spire_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/infernal_spire_block" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/iron_mark_block.json b/src/main/resources/assets/boss_tools/blockstates/iron_mark_block.json new file mode 100644 index 000000000..83fbc996b --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/iron_mark_block.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "boss_tools:block/iron_mark_block", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "boss_tools:block/iron_mark_block" + }, + "axis=z": { + "model": "boss_tools:block/iron_mark_block", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/iron_plating_block.json b/src/main/resources/assets/boss_tools/blockstates/iron_plating_block.json new file mode 100644 index 000000000..8fa4737b0 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/iron_plating_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/iron_plating_block" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/mars_diamond_ore.json b/src/main/resources/assets/boss_tools/blockstates/mars_diamond_ore.json new file mode 100644 index 000000000..e7050dbce --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/mars_diamond_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/mars_diamond_ore" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/mars_ice_shard_ore.json b/src/main/resources/assets/boss_tools/blockstates/mars_ice_shard_ore.json new file mode 100644 index 000000000..07d7ff7b5 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/mars_ice_shard_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/mars_ice_shard_ore" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/mars_iron_ore.json b/src/main/resources/assets/boss_tools/blockstates/mars_iron_ore.json new file mode 100644 index 000000000..2578c3ea6 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/mars_iron_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/mars_iron_ore" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/mars_sand.json b/src/main/resources/assets/boss_tools/blockstates/mars_sand.json new file mode 100644 index 000000000..ef8334ef5 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/mars_sand.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/mars_sand" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/mars_silicon_ore.json b/src/main/resources/assets/boss_tools/blockstates/mars_silicon_ore.json new file mode 100644 index 000000000..bcee8b33b --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/mars_silicon_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/mars_silicon_ore" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/mars_stone.json b/src/main/resources/assets/boss_tools/blockstates/mars_stone.json new file mode 100644 index 000000000..3b2284971 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/mars_stone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/mars_stone" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/mercury_cobblestone.json b/src/main/resources/assets/boss_tools/blockstates/mercury_cobblestone.json new file mode 100644 index 000000000..11b2d8948 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/mercury_cobblestone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/mercury_cobblestone" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/mercury_iron_ore.json b/src/main/resources/assets/boss_tools/blockstates/mercury_iron_ore.json new file mode 100644 index 000000000..31fd3c810 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/mercury_iron_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/mercury_iron_ore" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/mercury_stone.json b/src/main/resources/assets/boss_tools/blockstates/mercury_stone.json new file mode 100644 index 000000000..67fcadb68 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/mercury_stone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/mercury_stone" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/molten_desh_fluid.json b/src/main/resources/assets/boss_tools/blockstates/molten_desh_fluid.json new file mode 100644 index 000000000..eabb680f3 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/molten_desh_fluid.json @@ -0,0 +1,8 @@ + +{ + "variants": { + "": { + "model": "boss_tools:block/fluid/metal/addon_ore/desh" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/molten_silicon_fluid.json b/src/main/resources/assets/boss_tools/blockstates/molten_silicon_fluid.json new file mode 100644 index 000000000..0d771301b --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/molten_silicon_fluid.json @@ -0,0 +1,8 @@ + +{ + "variants": { + "": { + "model": "boss_tools:block/fluid/metal/addon_ore/silicon" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/moon_brick_slab.json b/src/main/resources/assets/boss_tools/blockstates/moon_brick_slab.json new file mode 100644 index 000000000..120d64ca0 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/moon_brick_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "boss_tools:block/moon_brick_slab" + }, + "type=top": { + "model": "boss_tools:block/moon_brick_slab_top" + }, + "type=double": { + "model": "boss_tools:block/moon_brick_slab_full" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/moon_brick_stairs.json b/src/main/resources/assets/boss_tools/blockstates/moon_brick_stairs.json new file mode 100644 index 000000000..47184bec4 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/moon_brick_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=straight": { + "model": "boss_tools:block/moon_brick_stairs" + }, + "facing=west,half=bottom,shape=straight": { + "model": "boss_tools:block/moon_brick_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "boss_tools:block/moon_brick_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "boss_tools:block/moon_brick_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "boss_tools:block/moon_brick_stairs_inner" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "boss_tools:block/moon_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "boss_tools:block/moon_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "boss_tools:block/moon_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "boss_tools:block/moon_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "boss_tools:block/moon_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "boss_tools:block/moon_brick_stairs_inner" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "boss_tools:block/moon_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "boss_tools:block/moon_brick_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "boss_tools:block/moon_brick_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "boss_tools:block/moon_brick_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "boss_tools:block/moon_brick_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "boss_tools:block/moon_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "boss_tools:block/moon_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "boss_tools:block/moon_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "boss_tools:block/moon_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "boss_tools:block/moon_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "boss_tools:block/moon_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "boss_tools:block/moon_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "boss_tools:block/moon_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "boss_tools:block/moon_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "boss_tools:block/moon_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "boss_tools:block/moon_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "boss_tools:block/moon_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "boss_tools:block/moon_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "boss_tools:block/moon_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "boss_tools:block/moon_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "boss_tools:block/moon_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "boss_tools:block/moon_brick_stairs_outer" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "boss_tools:block/moon_brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "boss_tools:block/moon_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "boss_tools:block/moon_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "boss_tools:block/moon_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "boss_tools:block/moon_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "boss_tools:block/moon_brick_stairs_outer" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "boss_tools:block/moon_brick_stairs_outer", + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/moon_bricks.json b/src/main/resources/assets/boss_tools/blockstates/moon_bricks.json new file mode 100644 index 000000000..b30448057 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/moon_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/moon_bricks" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/moon_cheese_ore.json b/src/main/resources/assets/boss_tools/blockstates/moon_cheese_ore.json new file mode 100644 index 000000000..aa124afe5 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/moon_cheese_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/moon_cheese_ore" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/moon_desh_ore.json b/src/main/resources/assets/boss_tools/blockstates/moon_desh_ore.json new file mode 100644 index 000000000..462513c4b --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/moon_desh_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/moon_desh_ore" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/moon_glowstone_ore.json b/src/main/resources/assets/boss_tools/blockstates/moon_glowstone_ore.json new file mode 100644 index 000000000..5167752f5 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/moon_glowstone_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/moon_glowstone_ore" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/moon_iron_ore.json b/src/main/resources/assets/boss_tools/blockstates/moon_iron_ore.json new file mode 100644 index 000000000..a33c31aff --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/moon_iron_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/moon_iron_ore" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/moon_sand.json b/src/main/resources/assets/boss_tools/blockstates/moon_sand.json new file mode 100644 index 000000000..dc407f109 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/moon_sand.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/moon_sand" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/moon_stone.json b/src/main/resources/assets/boss_tools/blockstates/moon_stone.json new file mode 100644 index 000000000..68ca39a10 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/moon_stone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/moon_stone" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/nasa_workbench.json b/src/main/resources/assets/boss_tools/blockstates/nasa_workbench.json new file mode 100644 index 000000000..44fdc5ddf --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/nasa_workbench.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "boss_tools:block/nasa_workbench" + }, + "facing=east": { + "model": "boss_tools:block/nasa_workbench", + "y": 90 + }, + "facing=south": { + "model": "boss_tools:block/nasa_workbench", + "y": 180 + }, + "facing=west": { + "model": "boss_tools:block/nasa_workbench", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/oxygen_bubble_distributor.json b/src/main/resources/assets/boss_tools/blockstates/oxygen_bubble_distributor.json new file mode 100644 index 000000000..f04f41eab --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/oxygen_bubble_distributor.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,lit=false": { + "model": "boss_tools:block/oxygen_bubble_distributor" + }, + "facing=east,lit=false": { + "model": "boss_tools:block/oxygen_bubble_distributor", + "y": 90 + }, + "facing=south,lit=false": { + "model": "boss_tools:block/oxygen_bubble_distributor", + "y": 180 + }, + "facing=west,lit=false": { + "model": "boss_tools:block/oxygen_bubble_distributor", + "y": 270 + }, + "facing=north,lit=true": { + "model": "boss_tools:block/oxygen_bubble_distributor_ac" + }, + "facing=east,lit=true": { + "model": "boss_tools:block/oxygen_bubble_distributor_ac", + "y": 90 + }, + "facing=south,lit=true": { + "model": "boss_tools:block/oxygen_bubble_distributor_ac", + "y": 180 + }, + "facing=west,lit=true": { + "model": "boss_tools:block/oxygen_bubble_distributor_ac", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/oxygen_loader.json b/src/main/resources/assets/boss_tools/blockstates/oxygen_loader.json new file mode 100644 index 000000000..576ada0ca --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/oxygen_loader.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,lit=false": { + "model": "boss_tools:block/oxygen_loader" + }, + "facing=east,lit=false": { + "model": "boss_tools:block/oxygen_loader", + "y": 90 + }, + "facing=south,lit=false": { + "model": "boss_tools:block/oxygen_loader", + "y": 180 + }, + "facing=west,lit=false": { + "model": "boss_tools:block/oxygen_loader", + "y": 270 + }, + "facing=north,lit=true": { + "model": "boss_tools:block/oxygen_loader_ac" + }, + "facing=east,lit=true": { + "model": "boss_tools:block/oxygen_loader_ac", + "y": 90 + }, + "facing=south,lit=true": { + "model": "boss_tools:block/oxygen_loader_ac", + "y": 180 + }, + "facing=west,lit=true": { + "model": "boss_tools:block/oxygen_loader_ac", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/rocket_launch_pad.json b/src/main/resources/assets/boss_tools/blockstates/rocket_launch_pad.json new file mode 100644 index 000000000..679f775fc --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/rocket_launch_pad.json @@ -0,0 +1,10 @@ +{ + "variants": { + "lit=false": { + "model": "boss_tools:block/rocket_launch_pad" + }, + "lit=true": { + "model": "boss_tools:block/rocket_launch_pad_base" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/rusted_iron_pillar_block.json b/src/main/resources/assets/boss_tools/blockstates/rusted_iron_pillar_block.json new file mode 100644 index 000000000..ff41743ae --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/rusted_iron_pillar_block.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "boss_tools:block/rusted_iron_pillar_block", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "boss_tools:block/rusted_iron_pillar_block" + }, + "axis=z": { + "model": "boss_tools:block/rusted_iron_pillar_block", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/rusted_iron_plating_block.json b/src/main/resources/assets/boss_tools/blockstates/rusted_iron_plating_block.json new file mode 100644 index 000000000..a2559b22a --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/rusted_iron_plating_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/rusted_iron_plating_block" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/silicon_block.json b/src/main/resources/assets/boss_tools/blockstates/silicon_block.json new file mode 100644 index 000000000..968d738b3 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/silicon_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/silicon_block" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/sky_stone.json b/src/main/resources/assets/boss_tools/blockstates/sky_stone.json new file mode 100644 index 000000000..673ffcb61 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/sky_stone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/sky_stone" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/solar_panel.json b/src/main/resources/assets/boss_tools/blockstates/solar_panel.json new file mode 100644 index 000000000..8a3b704e9 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/solar_panel.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/solar_panel" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/steel_block.json b/src/main/resources/assets/boss_tools/blockstates/steel_block.json new file mode 100644 index 000000000..1f5a554c3 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/steel_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/steel_block" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/venus_coal_ore.json b/src/main/resources/assets/boss_tools/blockstates/venus_coal_ore.json new file mode 100644 index 000000000..756230eec --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/venus_coal_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/venus_coal_ore" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/venus_diamond_ore.json b/src/main/resources/assets/boss_tools/blockstates/venus_diamond_ore.json new file mode 100644 index 000000000..368ba0211 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/venus_diamond_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/venus_diamond_ore" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/venus_gold_ore.json b/src/main/resources/assets/boss_tools/blockstates/venus_gold_ore.json new file mode 100644 index 000000000..bccf44007 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/venus_gold_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/venus_gold_ore" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/venus_sand.json b/src/main/resources/assets/boss_tools/blockstates/venus_sand.json new file mode 100644 index 000000000..eeca37ca5 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/venus_sand.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/venus_sand" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/venus_sandstone.json b/src/main/resources/assets/boss_tools/blockstates/venus_sandstone.json new file mode 100644 index 000000000..f4bf74c0d --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/venus_sandstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/venus_sandstone" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/venus_stone.json b/src/main/resources/assets/boss_tools/blockstates/venus_stone.json new file mode 100644 index 000000000..2b0e29454 --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/venus_stone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "boss_tools:block/venus_stone" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/wall_coal_torch.json b/src/main/resources/assets/boss_tools/blockstates/wall_coal_torch.json new file mode 100644 index 000000000..b4cf53dfc --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/wall_coal_torch.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "boss_tools:block/wall_coal_torch" + }, + "facing=north": { + "model": "boss_tools:block/wall_coal_torch", + "y": 270 + }, + "facing=south": { + "model": "boss_tools:block/wall_coal_torch", + "y": 90 + }, + "facing=west": { + "model": "boss_tools:block/wall_coal_torch", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/blockstates/water_pump.json b/src/main/resources/assets/boss_tools/blockstates/water_pump.json new file mode 100644 index 000000000..be4c8650a --- /dev/null +++ b/src/main/resources/assets/boss_tools/blockstates/water_pump.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "boss_tools:block/water_pump" + }, + "facing=east": { + "model": "boss_tools:block/water_pump", + "y": 90 + }, + "facing=south": { + "model": "boss_tools:block/water_pump", + "y": 180 + }, + "facing=west": { + "model": "boss_tools:block/water_pump", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/lang/en_us.json b/src/main/resources/assets/boss_tools/lang/en_us.json new file mode 100644 index 000000000..db1ae313a --- /dev/null +++ b/src/main/resources/assets/boss_tools/lang/en_us.json @@ -0,0 +1,242 @@ +{ + "item.boss_tools.fuel_bucket": "Fuel Bucket", + "item.boss_tools.oil_bucket": "Oil Bucket", + "item.boss_tools.star_crawler_spawn_egg": "Star Crawler Spawn Egg", + "item.boss_tools.iron_engine": "Iron Engine", + "item.boss_tools.oxygen_tank": "Oxygen Tank", + "item.boss_tools.steel_hoe": "Steel Hoe", + "item.boss_tools.iron_plate": "Iron Plate", + "item.boss_tools.desh_plate": "Desh Plate", + "item.boss_tools.space_station": "Space Station", + "item.boss_tools.compressed_silicon": "Compressed Silicon", + "item.boss_tools.ice_shard": "Ice Shard", + "item.boss_tools.netherite_space_pants": "Netherite Space Pants", + "item.boss_tools.engine_frame": "Engine Frame", + "item.boss_tools.diamond_tank": "Diamond Tank", + "item.boss_tools.steel_shovel": "Steel Shovel", + "item.boss_tools.golden_engine": "Golden Engine", + "item.boss_tools.hammer": "Hammer", + "item.boss_tools.netherite_space_boots": "Netherite Space Boots", + "item.boss_tools.steel_pickaxe": "Steel Pickaxe", + "item.boss_tools.space_pants": "Space Pants", + "item.boss_tools.rocket_t1": "Tier 1 Rocket", + "item.boss_tools.diamond_engine": "Diamond Engine", + "item.boss_tools.space_suit": "Space Suit", + "item.boss_tools.alien_zombie_spawn_egg": "Alien Zombie Spawn Egg", + "item.boss_tools.netherite_space_suit": "Netherite Space Suit", + "item.boss_tools.silicon_ingot": "Silicon Ingot", + "item.boss_tools.golden_tank": "Golden Tank", + "item.boss_tools.rocket_nose_cone": "Rocket Nose Cone", + "item.boss_tools.compressed_steel": "Compressed Steel", + "item.boss_tools.steel_ingot": "Steel Ingot", + "item.boss_tools.wheel": "Wheel", + "item.boss_tools.iron_tank": "Iron Tank", + "item.boss_tools.pygro_spawn_egg": "Pygro Spawn Egg", + "item.boss_tools.iron_stick": "Iron Stick", + "item.boss_tools.oxygen_gear": "Oxygen Gear", + "item.boss_tools.oxygen_mask": "Oxygen Mask", + "item.boss_tools.steel_sword": "Steel Sword", + "item.boss_tools.rocket_t2": "Tier 2 Rocket", + "item.boss_tools.engine_fan": "Engine Fan", + "item.boss_tools.rocket_t3": "Tier 3 Rocket", + "item.boss_tools.netherite_oxygen_mask": "Netherite Oxygen Mask", + "item.boss_tools.space_boots": "Space Boots", + "item.boss_tools.rocket_fin": "Rocket Fin", + "item.boss_tools.rover": "Rover", + "item.boss_tools.alien_spawn_egg": "Alien Spawn Egg", + "item.boss_tools.chesse": "Chesse", + "item.boss_tools.steel_axe": "Steel Axe", + "item.boss_tools.mogler_spawn_egg": "Mogler Spawn Egg", + "item.boss_tools.desh_ingot": "Desh Ingot", + "item.boss_tools.compressed_desh": "Compressed Desh", + "item.boss_tools.desh_nugget": "Desh Nugget", + "item.boss_tools.silicon_nugget": "Silicon Nugget", + "item.boss_tools.steel_nugget": "Steel Nugget", + "item.boss_tools.water_pump": "Water Pump", + + + "itemGroup.tab_normal": "Space-BossTools", + "itemGroup.tab_flags": "Space-BossTools: Flags", + "itemGroup.tab_blocks": "Space-BossTools: Blocks", + "itemGroup.tab_basics": "Space-BossTools: Basics", + "itemGroup.tab_machines": "Space-BossTools: Machines", + "itemGroup.tab_spawn_eggs": "Space-BossTools: Spawn Eggs", + "itemGroup.tab_materials": "Space-BossTools: Materials", + + "block.boss_tools.coal_lantern": "Coal Lantern", + "block.boss_tools.oxygen_bubble_distributor": "Oxygen Bubble Distributor", + "block.boss_tools.blue_iron_plating_block": "Block of Blue Iron Plating", + "block.boss_tools.mercury_iron_ore": "Mercury Iron Ore", + "block.boss_tools.fuel": "Fuel", + "block.boss_tools.oil": "Oil", + "block.boss_tools.rusted_iron_pillar_block": "Block of Rusted Iron Pillar", + "block.boss_tools.mars_silicon_ore": "Mars Silicon Ore", + "block.boss_tools.moon_brick_slab": "Moon Brick Slab", + "block.boss_tools.cracked_moon_brick_stairs": "Cracked Moon Brick Stairs", + "block.boss_tools.flag_cyan": "Cyan Flag", + "block.boss_tools.flag_light_blue": "Light Blue Flag", + "block.boss_tools.flag_red": "Red Flag", + "block.boss_tools.iron_plating_block": "Block of Iron Plating", + "block.boss_tools.cracked_moon_brick_slab": "Cracked Moon Brick Slab", + "block.boss_tools.rocket_launch_pad": "Rocket Launch Pad", + "block.boss_tools.coal_generator": "Coal Generator", + "block.boss_tools.desh_block": "Block of Desh", + "block.boss_tools.mars_iron_ore": "Mars Iron Ore", + "block.boss_tools.coal_torch": "Coal Torch", + "block.boss_tools.nasa_workbench": "§dNASA Workbench", + "block.boss_tools.mars_stone": "Mars Stone", + "block.boss_tools.venus_stone": "Venus Stone", + "block.boss_tools.infernal_spire_block": "Infernal Spire", + "block.boss_tools.flag_brown": "Brown Flag", + "block.boss_tools.moon_brick_stairs": "Moon Brick Stairs", + "block.boss_tools.flag_green": "Green Flag", + "block.boss_tools.flag_yellow": "Yellow Flag", + "block.boss_tools.flag_magenta": "Magenta Flag", + "block.boss_tools.flag": "Flag", + "block.boss_tools.moon_glowstone_ore": "Moon Glowstone Ore", + "block.boss_tools.moon_bricks": "Moon Bricks", + "block.boss_tools.oxygen_loader": "Oxygen Loader", + "block.boss_tools.venus_sand": "Venus Sand", + "block.boss_tools.mars_diamond_ore": "Mars Diamond Ore", + "block.boss_tools.fuel_refinery": "Fuel Refinery", + "block.boss_tools.rusted_iron_plating_block": "Block of Rusted Iron Plating", + "block.boss_tools.cracked_moon_bricks": "Cracked Moon Bricks", + "block.boss_tools.venus_diamond_ore": "Venus Diamond Ore", + "block.boss_tools.moon_stone": "Moon Stone", + "block.boss_tools.moon_sand": "Moon Sand", + "block.boss_tools.mars_ice_shard_ore": "Mars Ice Shard Ore", + "block.boss_tools.mercury_cobblestone": "Mercury Cobblestone", + "block.boss_tools.sky_stone": "Sky Stone", + "block.boss_tools.flag_gray": "Gray Flag", + "block.boss_tools.wall_coal_torch": "Coal Torch", + "block.boss_tools.flag_blue": "Blue Flag", + "block.boss_tools.venus_sandstone": "Venus Sandstone", + "block.boss_tools.flag_pink": "Pink Flag", + "block.boss_tools.flag_purple": "Purple Flag", + "block.boss_tools.mercury_stone": "Mercury Stone", + "block.boss_tools.venus_gold_ore": "Venus Gold Ore", + "block.boss_tools.solar_panel": "Solar Panel", + "block.boss_tools.iron_mark_block": "Iron Mark", + "block.boss_tools.compressor": "Compressor", + "block.boss_tools.mars_sand": "Mars Sand", + "block.boss_tools.moon_iron_ore": "Moon Iron Ore", + "block.boss_tools.flag_orange": "Orange Flag", + "block.boss_tools.steel_block": "Block of Steel", + "block.boss_tools.silicon_block": "Block of Silicon", + "block.boss_tools.venus_coal_ore": "Venus Coal Ore", + "block.boss_tools.blast_furnace": "Blast Furnace", + "block.boss_tools.flag_lime": "Lime Flag", + "block.boss_tools.moon_cheese_ore": "Moon Cheese Ore", + "block.boss_tools.moon_desh_ore": "Moon Desh Ore", + "block.boss_tools.water_pump": "Water Pump", + + + "fluid.boss_tools.fuel": "Fuel", + "fluid.fuel": "Fuel", + "fluid.boss_tools.oil": "Oil", + "fluid.oil": "Oil", + + "entity.boss_tools.mogler": "Mogler", + "entity.boss_tools.pygro": "Pygro", + "entity.boss_tools.alien": "Alien", + "entity.boss_tools.alien_zombie": "Alien Zombie", + "entity.boss_tools.star_crawler": "Star Crawler", + "entity.boss_tools.rocket_t1": "Tier 1 Rocket", + "entity.boss_tools.rocket_t2": "Tier 2 Rocket", + "entity.boss_tools.rocket_t3": "Tier 3 Rocket", + "entity.boss_tools.lander": "Lander", + "entity.boss_tools.rover": "Rover", + + "biome.boss_tools.orbit": "Orbit Biome", + "biome.boss_tools.infernal_venus_barrens_biome": "Infernal Venus Barrens", + "biome.boss_tools.venus_biome": "Venus Biome", + "biome.boss_tools.mercury_biome": "Mercury Biome", + "biome.boss_tools.mars_biome": "Mars Biome", + "biome.boss_tools.venus_hills_biome": "Venus Hills Biome", + "biome.boss_tools.moon_biome": "Moon Biome", + "biome.boss_tools.mercury_magma_biome": "Mercury Biome", + "biome.boss_tools.mars_ice_biome": "Mars Ice Biome", + + "advancements.workbench_advancement.title": "NASA Workbench", + "advancements.rocket_tier_2_advancement.title": "Tier 2 Rocket", + "advancements.rocket_advancement.descr": "§bHas crafted a Tier 1 Rocket", + "advancements.rocket_advancement.title": "Tier 1 Rocket", + "advancements.moon_advancement.title": "Moon", + "advancements.rocket_tier_3_advancement.title": "Tier 3 Rocket", + "advancements.rocket_tier_3_advancement.descr": "§bHas crafted a Tier 3 Rocket", + "advancements.moon_advancement.descr": "§bHas entered the Moon", + "advancements.workbench_advancement.descr": "§bHas crafted a NASA Workbench", + "advancements.rocket_tier_2_advancement.descr": "§bHas crafted a Tier 2 Rocket", + + "effect.boss_tools.oxygen_bubble_effect": "Oxygen Bubble", + + "key.categories.boss_tools": "Space-Bosstools", + "key.boss_tools.rocket_start": "Rocket Start", + + "death.attack.oxygen": "%1$s couldn\u0027t breathe anymore", + "death.attack.venus.acid": "%1$s plenty of acid to sacrifice", + + "entity.boss_tools.alien.farmer": "Farmer", + "entity.boss_tools.alien.fisherman": "Fisherman", + "entity.boss_tools.alien.shepherd": "Shepherd", + "entity.boss_tools.alien.fletcher": "Fletcher", + "entity.boss_tools.alien.librarian": "Librarian", + "entity.boss_tools.alien.cartographer": "Cartographer", + "entity.boss_tools.alien.cleric": "Cleric", + "entity.boss_tools.alien.armorer": "Armorer", + "entity.boss_tools.alien.weaponsmith": "Weaponsmith", + "entity.boss_tools.alien.toolsmith": "Toolsmith", + "entity.boss_tools.alien.butcher": "Butcher", + "entity.boss_tools.alien.leatherworker": "Leatherworker", + "entity.boss_tools.alien.mason": "Mason", + + "block.boss_tools.molten_desh_fluid": "Molten Desh", + "fluid.boss_tools.molten_desh": "Molten Desh", + "fluid.boss_tools.flowing_molten_desh": "Flowing Molten Desh", + "item.boss_tools.molten_desh_bucket": "Molten Desh Bucket", + "block.boss_tools.molten_silicon_fluid": "Molten Silicon", + "fluid.boss_tools.molten_silicon": "Molten Silicon", + "fluid.boss_tools.flowing_molten_silicon": "Flowing Molten Silicon", + "item.boss_tools.molten_silicon_bucket": "Molten Silicon Bucket", + + "container.boss_tools.blast_furnace": "Blast Furnace", + "container.boss_tools.coal_generator": "Coal Generator", + "container.boss_tools.compressor": "Compressor", + "container.boss_tools.fuel_refinery": "Fuel Refinery", + "container.boss_tools.nasa_workbench": "NASA Workbench", + "container.boss_tools.oxygen_bubble_distributor": "Oxygen Bubble Distributor", + "container.boss_tools.oxygen_loader": "Oxygen Loader", + "container.boss_tools.solar_panel": "Solar Panel", + "container.boss_tools.water_pump": "Water Pump", + "container.entity.boss_tools.rocket_t1": "Tier 1 Rocket", + "container.entity.boss_tools.rocket_t2": "Tier 2 Rocket", + "container.entity.boss_tools.rocket_t3": "Tier 3 Rocket", + + "tooltip.boss_tools.oxygen_bubble_distributor": "Make a Oxygen Bullet %1$s ~ %2$s Blocks", + + + "gui.boss_tools.oxygen_bubble_distributor.workingarea.text": "Working Area: %1$sx%2$sx%3$s", + "gui.boss_tools.oxygen_bubble_distributor.workingarea.show": "Show", + "gui.boss_tools.oxygen_bubble_distributor.workingarea.hide": "Hide", + + "jei.tooltip.boss_tools.oil": " You can find Oil in the Ocean", + + "gauge_text.boss_tools.using": "%1$s Using: %2$s", + "gauge_text.boss_tools.using2": "%1$s Using: %2$s/%4$s t", + "gauge_text.boss_tools.generating": "%1$s Generating: %2$s", + "gauge_text.boss_tools.maxgeneration": "Max. %1$s Generation: %2$s", + "gauge_text.boss_tools.total": "Total %1S: %2$s", + "gauge_text.boss_tools.stored": "Stored %1$s: %2$s", + "gauge_text.boss_tools.capacity": "%1$s Capacity: %2$s", + "gauge_text.boss_tools.transfer": "%1$s Transfer: %2$s", + + "gauge.boss_tools.energy": "Energy", + "gauge.boss_tools.fluid": "Fluid", + "gauge.boss_tools.fuel": "Fuel", + "gauge.boss_tools.oxygen": "Oxygen", + "gauge.boss_tools.burntime": "Burn Time", + "gauge.boss_tools.cooktime": "Cook Time", + "gauge.boss_tools.oxygenloading": "Loading", + + "_eof": "eof" +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/lang/ko_kr.json b/src/main/resources/assets/boss_tools/lang/ko_kr.json new file mode 100644 index 000000000..6ac5da202 --- /dev/null +++ b/src/main/resources/assets/boss_tools/lang/ko_kr.json @@ -0,0 +1,242 @@ +{ + "item.boss_tools.fuel_bucket": "연료 양동이", + "item.boss_tools.oil_bucket": "기름 양동이", + "item.boss_tools.star_crawler_spawn_egg": "Star Crawler 생성 알", + "item.boss_tools.iron_engine": "철 엔진", + "item.boss_tools.oxygen_tank": "산소 탱크", + "item.boss_tools.steel_hoe": "강철 괭이", + "item.boss_tools.iron_plate": "철 판", + "item.boss_tools.desh_plate": "데쉬 판", + "item.boss_tools.space_station": "우주 정거장", + "item.boss_tools.compressed_silicon": "압축 실리콘", + "item.boss_tools.ice_shard": "얼음 조각", + "item.boss_tools.netherite_space_pants": "네더라이트 우주복 하의", + "item.boss_tools.engine_frame": "엔진 프레임", + "item.boss_tools.diamond_tank": "다이아몬드 탱크", + "item.boss_tools.steel_shovel": "강철 삽", + "item.boss_tools.golden_engine": "금 엔진", + "item.boss_tools.hammer": "망치", + "item.boss_tools.netherite_space_boots": "네더라이트 우주복 부츠", + "item.boss_tools.steel_pickaxe": "강철 곡괭이", + "item.boss_tools.space_pants": "우주복 하의", + "item.boss_tools.rocket_t1": "1 티어 로켓", + "item.boss_tools.diamond_engine": "다이아몬드 엔진", + "item.boss_tools.space_suit": "우주복 상의", + "item.boss_tools.alien_zombie_spawn_egg": "외계인 좀비 생성 알", + "item.boss_tools.netherite_space_suit": "네더라이트 우주복 상의", + "item.boss_tools.silicon_ingot": "실리콘 주괴", + "item.boss_tools.golden_tank": "금 탱크", + "item.boss_tools.rocket_nose_cone": "원뿔 탄두", + "item.boss_tools.compressed_steel": "압축 강철", + "item.boss_tools.steel_ingot": "강철 주괴", + "item.boss_tools.wheel": "바퀴", + "item.boss_tools.iron_tank": "철 탱크", + "item.boss_tools.pygro_spawn_egg": "파이그로 생성 알", + "item.boss_tools.iron_stick": "철 막대기", + "item.boss_tools.oxygen_gear": "산소 장치", + "item.boss_tools.oxygen_mask": "산소 마스크", + "item.boss_tools.steel_sword": "강철 검", + "item.boss_tools.rocket_t2": "2 티어 로켓", + "item.boss_tools.engine_fan": "엔진 팬", + "item.boss_tools.rocket_t3": "3 티어 로켓", + "item.boss_tools.netherite_oxygen_mask": "네더라이트 산소 마스크", + "item.boss_tools.space_boots": "우주복 부츠", + "item.boss_tools.rocket_fin": "로켓 분사구", + "item.boss_tools.rover": "로버", + "item.boss_tools.alien_spawn_egg": "외계인 생성 알", + "item.boss_tools.chesse": "치즈", + "item.boss_tools.steel_axe": "강철 도끼", + "item.boss_tools.mogler_spawn_egg": "모글러 생성 알", + "item.boss_tools.desh_ingot": "데쉬 주괴", + "item.boss_tools.compressed_desh": "압축 데쉬", + "item.boss_tools.desh_nugget": "데쉬 조각", + "item.boss_tools.silicon_nugget": "실리콘 조각", + "item.boss_tools.steel_nugget": "강철 조각", + "item.boss_tools.water_pump": "물 펌프", + + + "itemGroup.tab_normal": "Space-BossTools", + "itemGroup.tab_flags": "Space-BossTools: 깃발", + "itemGroup.tab_blocks": "Space-BossTools: 블록", + "itemGroup.tab_basics": "Space-BossTools: 기본", + "itemGroup.tab_machines": "Space-BossTools: 기계", + "itemGroup.tab_spawn_eggs": "Space-BossTools: 생성 알", + "itemGroup.tab_materials": "Space-BossTools: 재료", + + "block.boss_tools.coal_lantern": "석탄 랜턴", + "block.boss_tools.oxygen_bubble_distributor": "산소 기포 분배기", + "block.boss_tools.blue_iron_plating_block": "청금 철 판 블록", + "block.boss_tools.mercury_iron_ore": "수성 철 광석", + "block.boss_tools.fuel": "연료", + "block.boss_tools.oil": "기름", + "block.boss_tools.rusted_iron_pillar_block": "녹슨 철 기둥", + "block.boss_tools.mars_silicon_ore": "화성 실리콘 광석", + "block.boss_tools.moon_brick_slab": "달 벽돌 반 블록", + "block.boss_tools.cracked_moon_brick_stairs": "금 간 달 벽돌 계단", + "block.boss_tools.flag_cyan": "청록색 깃발", + "block.boss_tools.flag_light_blue": "하늘색 깃발", + "block.boss_tools.flag_red": "빨간색 깃발", + "block.boss_tools.iron_plating_block": "철 판 블록", + "block.boss_tools.cracked_moon_brick_slab": "금 간 달 벽돌 반 블록", + "block.boss_tools.rocket_launch_pad": "로켓 발사대", + "block.boss_tools.coal_generator": "석탄 발전기", + "block.boss_tools.desh_block": "데쉬 블록", + "block.boss_tools.mars_iron_ore": "화성 철 광석", + "block.boss_tools.coal_torch": "석탄 횃불", + "block.boss_tools.nasa_workbench": "§dNASA 작업대", + "block.boss_tools.mars_stone": "화성 돌", + "block.boss_tools.venus_stone": "금성 돌", + "block.boss_tools.infernal_spire_block": "지옥불 기둥", + "block.boss_tools.flag_brown": "갈색 깃발", + "block.boss_tools.moon_brick_stairs": "달 벽돌 계단", + "block.boss_tools.flag_green": "초록색 깃발", + "block.boss_tools.flag_yellow": "노란색 깃발", + "block.boss_tools.flag_magenta": "자홍색 깃발", + "block.boss_tools.flag": "깃발", + "block.boss_tools.moon_glowstone_ore": "달 발광석", + "block.boss_tools.moon_bricks": "달 벽돌", + "block.boss_tools.oxygen_loader": "산소 충전기", + "block.boss_tools.venus_sand": "금성 모래", + "block.boss_tools.mars_diamond_ore": "화성 다이아몬드 광석", + "block.boss_tools.fuel_refinery": "연료 정제기", + "block.boss_tools.rusted_iron_plating_block": "녹슨 철 판 블록", + "block.boss_tools.cracked_moon_bricks": "금 간 달 벽돌", + "block.boss_tools.venus_diamond_ore": "금성 다이아몬드 광석", + "block.boss_tools.moon_stone": "달 돌", + "block.boss_tools.moon_sand": "달 모래", + "block.boss_tools.mars_ice_shard_ore": "화성 얼음 광석", + "block.boss_tools.mercury_cobblestone": "수성 조약돌", + "block.boss_tools.sky_stone": "운석", + "block.boss_tools.flag_gray": "회색 깃발", + "block.boss_tools.wall_coal_torch": "석탄 횃불", + "block.boss_tools.flag_blue": "파란색 깃발", + "block.boss_tools.venus_sandstone": "금성 사암", + "block.boss_tools.flag_pink": "분홍색 깃발", + "block.boss_tools.flag_purple": "보라색 깃발", + "block.boss_tools.mercury_stone": "수성 돌", + "block.boss_tools.venus_gold_ore": "금성 금 광석", + "block.boss_tools.solar_panel": "태양광 발전기", + "block.boss_tools.iron_mark_block": "철 표식 블록", + "block.boss_tools.compressor": "압축기", + "block.boss_tools.mars_sand": "화성 모래", + "block.boss_tools.moon_iron_ore": "달 철 광석", + "block.boss_tools.flag_orange": "주황색 깃발", + "block.boss_tools.steel_block": "강철 블록", + "block.boss_tools.silicon_block": "실리콘 블록", + "block.boss_tools.venus_coal_ore": "금성 석탄 광석", + "block.boss_tools.blast_furnace": "용광로", + "block.boss_tools.flag_lime": "연두색 깃발", + "block.boss_tools.moon_cheese_ore": "달 치즈 광석", + "block.boss_tools.moon_desh_ore": "달 데쉬 광석", + "block.boss_tools.water_pump": "물 펌프", + + + "fluid.boss_tools.fuel": "연료", + "fluid.fuel": "연료", + "fluid.boss_tools.oil": "기름", + "fluid.oil": "기름", + + "entity.boss_tools.mogler": "모글러", + "entity.boss_tools.pygro": "파이그로", + "entity.boss_tools.alien": "외계인", + "entity.boss_tools.alien_zombie": "외계인 좀비", + "entity.boss_tools.star_crawler": "Star Crawler", + "entity.boss_tools.rocket_t1": "1 티어 로켓", + "entity.boss_tools.rocket_t2": "2 티어 로켓", + "entity.boss_tools.rocket_t3": "3 티어 로켓", + "entity.boss_tools.lander": "착륙선", + "entity.boss_tools.rover": "로버", + + "biome.boss_tools.orbit": "궤도", + "biome.boss_tools.infernal_venus_barrens_biome": "금성 지옥 불모지", + "biome.boss_tools.venus_biome": "금성", + "biome.boss_tools.mercury_biome": "수성", + "biome.boss_tools.mars_biome": "화성", + "biome.boss_tools.venus_hills_biome": "금성 언덕", + "biome.boss_tools.moon_biome": "달", + "biome.boss_tools.mercury_magma_biome": "수성 마그마", + "biome.boss_tools.mars_ice_biome": "화성 얼음", + + "advancements.workbench_advancement.title": "NASA 작업대", + "advancements.rocket_tier_2_advancement.title": "2 티어 로켓", + "advancements.rocket_advancement.descr": "§b1 티어 로켓을 제작하세요", + "advancements.rocket_advancement.title": "1 티어 로켓", + "advancements.moon_advancement.title": "달", + "advancements.rocket_tier_3_advancement.title": "3 티어 로켓", + "advancements.rocket_tier_3_advancement.descr": "§b3 티어 로켓을 제작하세요", + "advancements.moon_advancement.descr": "§b달에 진입하세요", + "advancements.workbench_advancement.descr": "§bNASA 작업대를 제작하세요", + "advancements.rocket_tier_2_advancement.descr": "§b2 티어 로켓을 제작하세요", + + "effect.boss_tools.oxygen_bubble_effect": "산소 기포", + + "key.categories.boss_tools": "Space-Bosstools", + "key.boss_tools.rocket_start": "로켓 발사", + + "death.attack.oxygen": "%1$s은(는) 더 이상 숨 쉴 수 없습니다", + "death.attack.venus.acid": "%1$s은(는) 대량의 산성에 희생되었습니다", + + "entity.boss_tools.alien.farmer": "농부", + "entity.boss_tools.alien.fisherman": "어부", + "entity.boss_tools.alien.shepherd": "양치기", + "entity.boss_tools.alien.fletcher": "화살 제조인", + "entity.boss_tools.alien.librarian": "사서", + "entity.boss_tools.alien.cartographer": "지도 제작자", + "entity.boss_tools.alien.cleric": "성직자", + "entity.boss_tools.alien.armorer": "갑옷 제조인", + "entity.boss_tools.alien.weaponsmith": "무기 대장장이", + "entity.boss_tools.alien.toolsmith": "도구 대장장이", + "entity.boss_tools.alien.butcher": "도살업자", + "entity.boss_tools.alien.leatherworker": "가죽 세공인", + "entity.boss_tools.alien.mason": "석공", + + "block.boss_tools.molten_desh_fluid": "녹은 데쉬", + "fluid.boss_tools.molten_desh": "녹은 데쉬", + "fluid.boss_tools.flowing_molten_desh": "흐르는 녹은 데쉬", + "item.boss_tools.molten_desh_bucket": "녹은 데쉬 양동이", + "block.boss_tools.molten_silicon_fluid": "녹은 실리콘", + "fluid.boss_tools.molten_silicon": "녹은 실리콘", + "fluid.boss_tools.flowing_molten_silicon": "흐르는 녹은 실리콘", + "item.boss_tools.molten_silicon_bucket": "녹은 실리콘 양동이", + + "container.boss_tools.blast_furnace": "용광로", + "container.boss_tools.coal_generator": "석탄 발전기", + "container.boss_tools.compressor": "압축기", + "container.boss_tools.fuel_refinery": "연료 정제기", + "container.boss_tools.nasa_workbench": "NASA 작업대", + "container.boss_tools.oxygen_bubble_distributor": "산소 기포 분배기", + "container.boss_tools.oxygen_loader": "산소 충전기", + "container.boss_tools.solar_panel": "태양광 발전기", + "container.boss_tools.water_pump": "물 펌프", + "container.entity.boss_tools.rocket_t1": "1 티어 로켓", + "container.entity.boss_tools.rocket_t2": "2 티어 로켓", + "container.entity.boss_tools.rocket_t3": "3 티어 로켓", + + "tooltip.boss_tools.oxygen_bubble_distributor": "%1$s ~ %2$s 블록 범위 내 산소 기포 생성", + + + "gui.boss_tools.oxygen_bubble_distributor.workingarea.text": "작업 영역: %1$sx%2$sx%3$s", + "gui.boss_tools.oxygen_bubble_distributor.workingarea.show": "표시", + "gui.boss_tools.oxygen_bubble_distributor.workingarea.hide": "숨김", + + "jei.tooltip.boss_tools.oil": " 바다에서 찾을 수 있습니다", + + "gauge_text.boss_tools.using": "%1$s 소모: %2$s", + "gauge_text.boss_tools.using2": "%1$s 소모: %2$s/%4$s t", + "gauge_text.boss_tools.generating": "%1$s 발전: %2$s", + "gauge_text.boss_tools.maxgeneration": "%1$s 최대 발전: %2$s", + "gauge_text.boss_tools.total": "총 %1$s: %2$s", + "gauge_text.boss_tools.stored": "%1$s 저장: %2$s", + "gauge_text.boss_tools.capacity": "%1$s 용량: %2$s", + "gauge_text.boss_tools.transfer": "%1$s 전송: %2$s", + + "gauge.boss_tools.energy": "에너지", + "gauge.boss_tools.fluid": "유체", + "gauge.boss_tools.fuel": "연료", + "gauge.boss_tools.oxygen": "산소", + "gauge.boss_tools.burntime": "연료", + "gauge.boss_tools.cooktime": "가공 시간", + "gauge.boss_tools.oxygenloading": "층전", + + "_eof": "eof" +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/blast_furnace.json b/src/main/resources/assets/boss_tools/models/block/blast_furnace.json new file mode 100644 index 000000000..d8c75a41e --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/blast_furnace.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/machineback", + "up": "boss_tools:blocks/machineback", + "north": "boss_tools:blocks/basic_electric_smelter_front_inactive", + "east": "boss_tools:blocks/machineside", + "south": "boss_tools:blocks/machineside", + "west": "boss_tools:blocks/machineside", + "particle": "boss_tools:blocks/machineback" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/blast_furnace_ac.json b/src/main/resources/assets/boss_tools/models/block/blast_furnace_ac.json new file mode 100644 index 000000000..63a8b4163 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/blast_furnace_ac.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/machineback", + "up": "boss_tools:blocks/machineback", + "north": "boss_tools:blocks/basic_electric_smelter_front_active", + "east": "boss_tools:blocks/machineside", + "south": "boss_tools:blocks/machineside", + "west": "boss_tools:blocks/machineside", + "particle": "boss_tools:blocks/machineback" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/blue_iron_plating_block.json b/src/main/resources/assets/boss_tools/models/block/blue_iron_plating_block.json new file mode 100644 index 000000000..bc5bfc4ed --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/blue_iron_plating_block.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/blue_iron_plating_block_top", + "up": "boss_tools:blocks/blue_iron_plating_block_top", + "north": "boss_tools:blocks/blue_iron_plating_block", + "east": "boss_tools:blocks/blue_iron_plating_block", + "south": "boss_tools:blocks/blue_iron_plating_block", + "west": "boss_tools:blocks/blue_iron_plating_block", + "particle": "boss_tools:blocks/blue_iron_plating_block_top" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/coal_generator.json b/src/main/resources/assets/boss_tools/models/block/coal_generator.json new file mode 100644 index 000000000..8556ea4c0 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/coal_generator.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/generator_top", + "up": "boss_tools:blocks/generator_top", + "north": "boss_tools:blocks/generator_front_inactive", + "east": "boss_tools:blocks/machineside", + "south": "boss_tools:blocks/machineside", + "west": "boss_tools:blocks/machineside", + "particle": "boss_tools:blocks/generator_top" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/coal_generator_ac.json b/src/main/resources/assets/boss_tools/models/block/coal_generator_ac.json new file mode 100644 index 000000000..b8ed19b29 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/coal_generator_ac.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/generator_top", + "up": "boss_tools:blocks/generator_top", + "north": "boss_tools:blocks/generator_front", + "east": "boss_tools:blocks/machineside", + "south": "boss_tools:blocks/machineside", + "west": "boss_tools:blocks/machineside", + "particle": "boss_tools:blocks/generator_top" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/coal_lantern.json b/src/main/resources/assets/boss_tools/models/block/coal_lantern.json new file mode 100644 index 000000000..75354933f --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/coal_lantern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_lantern", + "textures": { + "lantern": "boss_tools:blocks/coal_lantern" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/coal_lantern_hanging.json b/src/main/resources/assets/boss_tools/models/block/coal_lantern_hanging.json new file mode 100644 index 000000000..19f0c388a --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/coal_lantern_hanging.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_hanging_lantern", + "textures": { + "lantern": "boss_tools:blocks/coal_lantern" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/coal_torch.json b/src/main/resources/assets/boss_tools/models/block/coal_torch.json new file mode 100644 index 000000000..4440786a5 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/coal_torch.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/template_torch", + "textures": { + "all": "boss_tools:blocks/coal_torch", + "particle": "boss_tools:blocks/coal_torch", + "2": "boss_tools:blocks/coal_torch", + "missing": "boss_tools:blocks/coal_torch" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/compressor.json b/src/main/resources/assets/boss_tools/models/block/compressor.json new file mode 100644 index 000000000..f4e6a3036 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/compressor.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/machineback", + "up": "boss_tools:blocks/machineback", + "north": "boss_tools:blocks/compressorfront_inactive", + "east": "boss_tools:blocks/machineside", + "south": "boss_tools:blocks/machineside", + "west": "boss_tools:blocks/machineside", + "particle": "boss_tools:blocks/machineback" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/compressor_ac.json b/src/main/resources/assets/boss_tools/models/block/compressor_ac.json new file mode 100644 index 000000000..d5b61a6fb --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/compressor_ac.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/machineback", + "up": "boss_tools:blocks/machineback", + "north": "boss_tools:blocks/compressorfront", + "east": "boss_tools:blocks/machineside", + "south": "boss_tools:blocks/machineside", + "west": "boss_tools:blocks/machineside", + "particle": "boss_tools:blocks/machineback" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/cracked_moon_brick_slab.json b/src/main/resources/assets/boss_tools/models/block/cracked_moon_brick_slab.json new file mode 100644 index 000000000..11c2b177c --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/cracked_moon_brick_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "block/slab", + "textures": { + "bottom": "boss_tools:blocks/cracked_moon_bricks", + "top": "boss_tools:blocks/cracked_moon_bricks", + "side": "boss_tools:blocks/cracked_moon_bricks" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/cracked_moon_brick_slab_full.json b/src/main/resources/assets/boss_tools/models/block/cracked_moon_brick_slab_full.json new file mode 100644 index 000000000..8d8b82257 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/cracked_moon_brick_slab_full.json @@ -0,0 +1,8 @@ +{ + "parent": "block/cube_bottom_top", + "textures": { + "bottom": "boss_tools:blocks/cracked_moon_bricks", + "top": "boss_tools:blocks/cracked_moon_bricks", + "side": "boss_tools:blocks/cracked_moon_bricks" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/cracked_moon_brick_slab_top.json b/src/main/resources/assets/boss_tools/models/block/cracked_moon_brick_slab_top.json new file mode 100644 index 000000000..2810e2db9 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/cracked_moon_brick_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "block/slab_top", + "textures": { + "bottom": "boss_tools:blocks/cracked_moon_bricks", + "top": "boss_tools:blocks/cracked_moon_bricks", + "side": "boss_tools:blocks/cracked_moon_bricks" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/cracked_moon_brick_stairs.json b/src/main/resources/assets/boss_tools/models/block/cracked_moon_brick_stairs.json new file mode 100644 index 000000000..43d9e84ac --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/cracked_moon_brick_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/stairs", + "textures": { + "bottom": "boss_tools:blocks/cracked_moon_bricks", + "top": "boss_tools:blocks/cracked_moon_bricks", + "side": "boss_tools:blocks/cracked_moon_bricks" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/cracked_moon_brick_stairs_inner.json b/src/main/resources/assets/boss_tools/models/block/cracked_moon_brick_stairs_inner.json new file mode 100644 index 000000000..1d3ec6158 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/cracked_moon_brick_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "boss_tools:blocks/cracked_moon_bricks", + "top": "boss_tools:blocks/cracked_moon_bricks", + "side": "boss_tools:blocks/cracked_moon_bricks" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/cracked_moon_brick_stairs_outer.json b/src/main/resources/assets/boss_tools/models/block/cracked_moon_brick_stairs_outer.json new file mode 100644 index 000000000..d6a82d154 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/cracked_moon_brick_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "boss_tools:blocks/cracked_moon_bricks", + "top": "boss_tools:blocks/cracked_moon_bricks", + "side": "boss_tools:blocks/cracked_moon_bricks" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/cracked_moon_bricks.json b/src/main/resources/assets/boss_tools/models/block/cracked_moon_bricks.json new file mode 100644 index 000000000..60fe40355 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/cracked_moon_bricks.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/cracked_moon_bricks", + "up": "boss_tools:blocks/cracked_moon_bricks", + "north": "boss_tools:blocks/cracked_moon_bricks", + "east": "boss_tools:blocks/cracked_moon_bricks", + "south": "boss_tools:blocks/cracked_moon_bricks", + "west": "boss_tools:blocks/cracked_moon_bricks", + "particle": "boss_tools:blocks/cracked_moon_bricks" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/desh_block.json b/src/main/resources/assets/boss_tools/models/block/desh_block.json new file mode 100644 index 000000000..7bcf2294d --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/desh_block.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/desh_block", + "up": "boss_tools:blocks/desh_block", + "north": "boss_tools:blocks/desh_block", + "east": "boss_tools:blocks/desh_block", + "south": "boss_tools:blocks/desh_block", + "west": "boss_tools:blocks/desh_block", + "particle": "boss_tools:blocks/desh_block" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag.json b/src/main/resources/assets/boss_tools/models/block/flag.json new file mode 100644 index 000000000..42b5458e8 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage", + "textures": { + "all": "boss_tools:blocks/flag_white", + "particle": "boss_tools:blocks/flag_white", + "0": "boss_tools:blocks/flag_white", + "missing": "boss_tools:blocks/flag_white" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_blue.json b/src/main/resources/assets/boss_tools/models/block/flag_blue.json new file mode 100644 index 000000000..85fb28608 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_blue.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage", + "textures": { + "all": "boss_tools:blocks/flag_blue", + "particle": "boss_tools:blocks/flag_blue", + "0": "boss_tools:blocks/flag_blue", + "missing": "boss_tools:blocks/flag_blue" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_brown.json b/src/main/resources/assets/boss_tools/models/block/flag_brown.json new file mode 100644 index 000000000..7ed28a042 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_brown.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage", + "textures": { + "all": "boss_tools:blocks/flag_brown", + "particle": "boss_tools:blocks/flag_brown", + "0": "boss_tools:blocks/flag_brown", + "missing": "boss_tools:blocks/flag_brown" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_cyan.json b/src/main/resources/assets/boss_tools/models/block/flag_cyan.json new file mode 100644 index 000000000..1bf8d439c --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_cyan.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage", + "textures": { + "all": "boss_tools:blocks/flag_cyan", + "particle": "boss_tools:blocks/flag_cyan", + "0": "boss_tools:blocks/flag_cyan", + "missing": "boss_tools:blocks/flag_cyan" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_down.json b/src/main/resources/assets/boss_tools/models/block/flag_down.json new file mode 100644 index 000000000..31e981c60 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_down.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_down", + "textures": { + "all": "boss_tools:blocks/flag_white", + "particle": "boss_tools:blocks/flag_white", + "0": "boss_tools:blocks/flag_white", + "missing": "boss_tools:blocks/flag_white" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_down_blue.json b/src/main/resources/assets/boss_tools/models/block/flag_down_blue.json new file mode 100644 index 000000000..411f64415 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_down_blue.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_down", + "textures": { + "all": "boss_tools:blocks/flag_blue", + "particle": "boss_tools:blocks/flag_blue", + "0": "boss_tools:blocks/flag_blue", + "missing": "boss_tools:blocks/flag_blue" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_down_brown.json b/src/main/resources/assets/boss_tools/models/block/flag_down_brown.json new file mode 100644 index 000000000..148f65afd --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_down_brown.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_down", + "textures": { + "all": "boss_tools:blocks/flag_brown", + "particle": "boss_tools:blocks/flag_brown", + "0": "boss_tools:blocks/flag_brown", + "missing": "boss_tools:blocks/flag_brown" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_down_cyan.json b/src/main/resources/assets/boss_tools/models/block/flag_down_cyan.json new file mode 100644 index 000000000..0da5bd3f5 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_down_cyan.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_down", + "textures": { + "all": "boss_tools:blocks/flag_cyan", + "particle": "boss_tools:blocks/flag_cyan", + "0": "boss_tools:blocks/flag_cyan", + "missing": "boss_tools:blocks/flag_cyan" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_down_gray.json b/src/main/resources/assets/boss_tools/models/block/flag_down_gray.json new file mode 100644 index 000000000..c2fc8cab6 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_down_gray.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_down", + "textures": { + "all": "boss_tools:blocks/flag_gray", + "particle": "boss_tools:blocks/flag_gray", + "0": "boss_tools:blocks/flag_gray", + "missing": "boss_tools:blocks/flag_gray" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_down_green.json b/src/main/resources/assets/boss_tools/models/block/flag_down_green.json new file mode 100644 index 000000000..4d6125567 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_down_green.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_down", + "textures": { + "all": "boss_tools:blocks/flag_green", + "particle": "boss_tools:blocks/flag_green", + "0": "boss_tools:blocks/flag_green", + "missing": "boss_tools:blocks/flag_green" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_down_light_blue.json b/src/main/resources/assets/boss_tools/models/block/flag_down_light_blue.json new file mode 100644 index 000000000..fef87a225 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_down_light_blue.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_down", + "textures": { + "all": "boss_tools:blocks/flag_light_blue", + "particle": "boss_tools:blocks/flag_light_blue", + "0": "boss_tools:blocks/flag_light_blue", + "missing": "boss_tools:blocks/flag_light_blue" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_down_lime.json b/src/main/resources/assets/boss_tools/models/block/flag_down_lime.json new file mode 100644 index 000000000..9b3894891 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_down_lime.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_down", + "textures": { + "all": "boss_tools:blocks/flag_lime", + "particle": "boss_tools:blocks/flag_lime", + "0": "boss_tools:blocks/flag_lime", + "missing": "boss_tools:blocks/flag_lime" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_down_magenta.json b/src/main/resources/assets/boss_tools/models/block/flag_down_magenta.json new file mode 100644 index 000000000..02fa36f6f --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_down_magenta.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_down", + "textures": { + "all": "boss_tools:blocks/flag_magenta", + "particle": "boss_tools:blocks/flag_magenta", + "0": "boss_tools:blocks/flag_magenta", + "missing": "boss_tools:blocks/flag_magenta" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_down_orange.json b/src/main/resources/assets/boss_tools/models/block/flag_down_orange.json new file mode 100644 index 000000000..45f9d9ffa --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_down_orange.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_down", + "textures": { + "all": "boss_tools:blocks/flag_orange", + "particle": "boss_tools:blocks/flag_orange", + "0": "boss_tools:blocks/flag_orange", + "missing": "boss_tools:blocks/flag_orange" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_down_pink.json b/src/main/resources/assets/boss_tools/models/block/flag_down_pink.json new file mode 100644 index 000000000..b216b2251 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_down_pink.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_down", + "textures": { + "all": "boss_tools:blocks/flag_pink", + "particle": "boss_tools:blocks/flag_pink", + "0": "boss_tools:blocks/flag_pink", + "missing": "boss_tools:blocks/flag_pink" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_down_purple.json b/src/main/resources/assets/boss_tools/models/block/flag_down_purple.json new file mode 100644 index 000000000..29dd7a1fc --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_down_purple.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_down", + "textures": { + "all": "boss_tools:blocks/flag_purple", + "particle": "boss_tools:blocks/flag_purple", + "0": "boss_tools:blocks/flag_purple", + "missing": "boss_tools:blocks/flag_purple" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_down_red.json b/src/main/resources/assets/boss_tools/models/block/flag_down_red.json new file mode 100644 index 000000000..ac24e1637 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_down_red.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_down", + "textures": { + "all": "boss_tools:blocks/flag_red", + "particle": "boss_tools:blocks/flag_red", + "0": "boss_tools:blocks/flag_red", + "missing": "boss_tools:blocks/flag_red" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_down_yellow.json b/src/main/resources/assets/boss_tools/models/block/flag_down_yellow.json new file mode 100644 index 000000000..f5fa22f31 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_down_yellow.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_down", + "textures": { + "all": "boss_tools:blocks/flag_yellow", + "particle": "boss_tools:blocks/flag_yellow", + "0": "boss_tools:blocks/flag_yellow", + "missing": "boss_tools:blocks/flag_yellow" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_gray.json b/src/main/resources/assets/boss_tools/models/block/flag_gray.json new file mode 100644 index 000000000..370207920 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_gray.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage", + "textures": { + "all": "boss_tools:blocks/flag_gray", + "particle": "boss_tools:blocks/flag_gray", + "0": "boss_tools:blocks/flag_gray", + "missing": "boss_tools:blocks/flag_gray" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_green.json b/src/main/resources/assets/boss_tools/models/block/flag_green.json new file mode 100644 index 000000000..5584b99bf --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_green.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage", + "textures": { + "all": "boss_tools:blocks/flag_green", + "particle": "boss_tools:blocks/flag_green", + "0": "boss_tools:blocks/flag_green", + "missing": "boss_tools:blocks/flag_green" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_light_blue.json b/src/main/resources/assets/boss_tools/models/block/flag_light_blue.json new file mode 100644 index 000000000..c94619667 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_light_blue.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage", + "textures": { + "all": "boss_tools:blocks/flag_light_blue", + "particle": "boss_tools:blocks/flag_light_blue", + "0": "boss_tools:blocks/flag_light_blue", + "missing": "boss_tools:blocks/flag_light_blue" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_lime.json b/src/main/resources/assets/boss_tools/models/block/flag_lime.json new file mode 100644 index 000000000..6fc704b60 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_lime.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage", + "textures": { + "all": "boss_tools:blocks/flag_lime", + "particle": "boss_tools:blocks/flag_lime", + "0": "boss_tools:blocks/flag_lime", + "missing": "boss_tools:blocks/flag_lime" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_magenta.json b/src/main/resources/assets/boss_tools/models/block/flag_magenta.json new file mode 100644 index 000000000..7e743e679 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_magenta.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage", + "textures": { + "all": "boss_tools:blocks/flag_magenta", + "particle": "boss_tools:blocks/flag_magenta", + "0": "boss_tools:blocks/flag_magenta", + "missing": "boss_tools:blocks/flag_magenta" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_orange.json b/src/main/resources/assets/boss_tools/models/block/flag_orange.json new file mode 100644 index 000000000..bea4f0a72 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_orange.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage", + "textures": { + "all": "boss_tools:blocks/flag_orange", + "particle": "boss_tools:blocks/flag_orange", + "0": "boss_tools:blocks/flag_orange", + "missing": "boss_tools:blocks/flag_orange" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_pink.json b/src/main/resources/assets/boss_tools/models/block/flag_pink.json new file mode 100644 index 000000000..ec1932f5d --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_pink.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage", + "textures": { + "all": "boss_tools:blocks/flag_pink", + "particle": "boss_tools:blocks/flag_pink", + "0": "boss_tools:blocks/flag_pink", + "missing": "boss_tools:blocks/flag_pink" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_purple.json b/src/main/resources/assets/boss_tools/models/block/flag_purple.json new file mode 100644 index 000000000..ebc662047 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_purple.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage", + "textures": { + "all": "boss_tools:blocks/flag_purple", + "particle": "boss_tools:blocks/flag_purple", + "0": "boss_tools:blocks/flag_purple", + "missing": "boss_tools:blocks/flag_purple" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_red.json b/src/main/resources/assets/boss_tools/models/block/flag_red.json new file mode 100644 index 000000000..70540a713 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_red.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage", + "textures": { + "all": "boss_tools:blocks/flag_red", + "particle": "boss_tools:blocks/flag_red", + "0": "boss_tools:blocks/flag_red", + "missing": "boss_tools:blocks/flag_red" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_up.json b/src/main/resources/assets/boss_tools/models/block/flag_up.json new file mode 100644 index 000000000..30e54e676 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_up.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_up", + "textures": { + "all": "boss_tools:blocks/flag_white", + "particle": "boss_tools:blocks/flag_white", + "0": "boss_tools:blocks/flag_white", + "missing": "boss_tools:blocks/flag_white" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_up_blue.json b/src/main/resources/assets/boss_tools/models/block/flag_up_blue.json new file mode 100644 index 000000000..fd7089e46 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_up_blue.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_up", + "textures": { + "all": "boss_tools:blocks/flag_blue", + "particle": "boss_tools:blocks/flag_blue", + "0": "boss_tools:blocks/flag_blue", + "missing": "boss_tools:blocks/flag_blue" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_up_brown.json b/src/main/resources/assets/boss_tools/models/block/flag_up_brown.json new file mode 100644 index 000000000..6bc422772 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_up_brown.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_up", + "textures": { + "all": "boss_tools:blocks/flag_brown", + "particle": "boss_tools:blocks/flag_brown", + "0": "boss_tools:blocks/flag_brown", + "missing": "boss_tools:blocks/flag_brown" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_up_cyan.json b/src/main/resources/assets/boss_tools/models/block/flag_up_cyan.json new file mode 100644 index 000000000..3405a2281 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_up_cyan.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_up", + "textures": { + "all": "boss_tools:blocks/flag_cyan", + "particle": "boss_tools:blocks/flag_cyan", + "0": "boss_tools:blocks/flag_cyan", + "missing": "boss_tools:blocks/flag_cyan" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_up_gray.json b/src/main/resources/assets/boss_tools/models/block/flag_up_gray.json new file mode 100644 index 000000000..4d3035633 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_up_gray.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_up", + "textures": { + "all": "boss_tools:blocks/flag_gray", + "particle": "boss_tools:blocks/flag_gray", + "0": "boss_tools:blocks/flag_gray", + "missing": "boss_tools:blocks/flag_gray" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_up_green.json b/src/main/resources/assets/boss_tools/models/block/flag_up_green.json new file mode 100644 index 000000000..98e440c61 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_up_green.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_up", + "textures": { + "all": "boss_tools:blocks/flag_green", + "particle": "boss_tools:blocks/flag_green", + "0": "boss_tools:blocks/flag_green", + "missing": "boss_tools:blocks/flag_green" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_up_light_blue.json b/src/main/resources/assets/boss_tools/models/block/flag_up_light_blue.json new file mode 100644 index 000000000..ce793a171 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_up_light_blue.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_up", + "textures": { + "all": "boss_tools:blocks/flag_light_blue", + "particle": "boss_tools:blocks/flag_light_blue", + "0": "boss_tools:blocks/flag_light_blue", + "missing": "boss_tools:blocks/flag_light_blue" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_up_lime.json b/src/main/resources/assets/boss_tools/models/block/flag_up_lime.json new file mode 100644 index 000000000..9f29da6c8 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_up_lime.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_up", + "textures": { + "all": "boss_tools:blocks/flag_lime", + "particle": "boss_tools:blocks/flag_lime", + "0": "boss_tools:blocks/flag_lime", + "missing": "boss_tools:blocks/flag_lime" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_up_magenta.json b/src/main/resources/assets/boss_tools/models/block/flag_up_magenta.json new file mode 100644 index 000000000..7c60bc187 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_up_magenta.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_up", + "textures": { + "all": "boss_tools:blocks/flag_magenta", + "particle": "boss_tools:blocks/flag_magenta", + "0": "boss_tools:blocks/flag_magenta", + "missing": "boss_tools:blocks/flag_magenta" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_up_orange.json b/src/main/resources/assets/boss_tools/models/block/flag_up_orange.json new file mode 100644 index 000000000..b5b3a66c1 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_up_orange.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_up", + "textures": { + "all": "boss_tools:blocks/flag_orange", + "particle": "boss_tools:blocks/flag_orange", + "0": "boss_tools:blocks/flag_orange", + "missing": "boss_tools:blocks/flag_orange" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_up_pink.json b/src/main/resources/assets/boss_tools/models/block/flag_up_pink.json new file mode 100644 index 000000000..7db1ffb46 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_up_pink.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_up", + "textures": { + "all": "boss_tools:blocks/flag_pink", + "particle": "boss_tools:blocks/flag_pink", + "0": "boss_tools:blocks/flag_pink", + "missing": "boss_tools:blocks/flag_pink" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_up_purple.json b/src/main/resources/assets/boss_tools/models/block/flag_up_purple.json new file mode 100644 index 000000000..b2ac8eb84 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_up_purple.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_up", + "textures": { + "all": "boss_tools:blocks/flag_purple", + "particle": "boss_tools:blocks/flag_purple", + "0": "boss_tools:blocks/flag_purple", + "missing": "boss_tools:blocks/flag_purple" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_up_red.json b/src/main/resources/assets/boss_tools/models/block/flag_up_red.json new file mode 100644 index 000000000..8bd4788dc --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_up_red.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_up", + "textures": { + "all": "boss_tools:blocks/flag_red", + "particle": "boss_tools:blocks/flag_red", + "0": "boss_tools:blocks/flag_red", + "missing": "boss_tools:blocks/flag_red" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_up_yellow.json b/src/main/resources/assets/boss_tools/models/block/flag_up_yellow.json new file mode 100644 index 000000000..0188b54c3 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_up_yellow.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage_up", + "textures": { + "all": "boss_tools:blocks/flag_yellow", + "particle": "boss_tools:blocks/flag_yellow", + "0": "boss_tools:blocks/flag_yellow", + "missing": "boss_tools:blocks/flag_yellow" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/flag_yellow.json b/src/main/resources/assets/boss_tools/models/block/flag_yellow.json new file mode 100644 index 000000000..bd15a2632 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/flag_yellow.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/flage", + "textures": { + "all": "boss_tools:blocks/flag_yellow", + "particle": "boss_tools:blocks/flag_yellow", + "0": "boss_tools:blocks/flag_yellow", + "missing": "boss_tools:blocks/flag_yellow" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/fluid/metal/addon_ore/desh.json b/src/main/resources/assets/boss_tools/models/block/fluid/metal/addon_ore/desh.json new file mode 100644 index 000000000..3aadb9db3 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/fluid/metal/addon_ore/desh.json @@ -0,0 +1,8 @@ +{ + "loader": "mantle:fluid_texture", + "textures": { + "still": "tconstruct:block/fluid/molten/still", + "flowing": "tconstruct:block/fluid/molten/flowing" + }, + "color": "F0A450" +} diff --git a/src/main/resources/assets/boss_tools/models/block/fluid/metal/addon_ore/silicon.json b/src/main/resources/assets/boss_tools/models/block/fluid/metal/addon_ore/silicon.json new file mode 100644 index 000000000..549387c63 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/fluid/metal/addon_ore/silicon.json @@ -0,0 +1,8 @@ +{ + "loader": "mantle:fluid_texture", + "textures": { + "still": "tconstruct:block/fluid/molten/still", + "flowing": "tconstruct:block/fluid/molten/flowing" + }, + "color": "9F616F" +} diff --git a/src/main/resources/assets/boss_tools/models/block/fuel_refinery.json b/src/main/resources/assets/boss_tools/models/block/fuel_refinery.json new file mode 100644 index 000000000..0974120e2 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/fuel_refinery.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/machineback", + "up": "boss_tools:blocks/machineback", + "north": "boss_tools:blocks/fuelmaker_inactive", + "east": "boss_tools:blocks/machineside", + "south": "boss_tools:blocks/machineside", + "west": "boss_tools:blocks/machineside", + "particle": "boss_tools:blocks/machineback" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/fuel_refinery_ac.json b/src/main/resources/assets/boss_tools/models/block/fuel_refinery_ac.json new file mode 100644 index 000000000..339c04083 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/fuel_refinery_ac.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/machineback", + "up": "boss_tools:blocks/machineback", + "north": "boss_tools:blocks/fuelmaker", + "east": "boss_tools:blocks/machineside", + "south": "boss_tools:blocks/machineside", + "west": "boss_tools:blocks/machineside", + "particle": "boss_tools:blocks/machineback" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/infernal_spire_block.json b/src/main/resources/assets/boss_tools/models/block/infernal_spire_block.json new file mode 100644 index 000000000..e175817dc --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/infernal_spire_block.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/infernal_spire_top", + "up": "boss_tools:blocks/infernal_spire_top", + "north": "boss_tools:blocks/infernal_spire_side", + "east": "boss_tools:blocks/infernal_spire_side", + "south": "boss_tools:blocks/infernal_spire_side", + "west": "boss_tools:blocks/infernal_spire_side", + "particle": "boss_tools:blocks/infernal_spire_side" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/iron_mark_block.json b/src/main/resources/assets/boss_tools/models/block/iron_mark_block.json new file mode 100644 index 000000000..591549720 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/iron_mark_block.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/iron_mark_bottom", + "up": "boss_tools:blocks/iron_mark_bottom", + "north": "boss_tools:blocks/iron_mark_side", + "east": "boss_tools:blocks/iron_mark_side", + "south": "boss_tools:blocks/iron_mark_side", + "west": "boss_tools:blocks/iron_mark_side", + "particle": "boss_tools:blocks/iron_mark_bottom" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/iron_plating_block.json b/src/main/resources/assets/boss_tools/models/block/iron_plating_block.json new file mode 100644 index 000000000..558bc87c4 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/iron_plating_block.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/iron_plating_block", + "up": "boss_tools:blocks/iron_plating_block", + "north": "boss_tools:blocks/iron_plating_block", + "east": "boss_tools:blocks/iron_plating_block", + "south": "boss_tools:blocks/iron_plating_block", + "west": "boss_tools:blocks/iron_plating_block", + "particle": "boss_tools:blocks/iron_plating_block" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/mars_diamond_ore.json b/src/main/resources/assets/boss_tools/models/block/mars_diamond_ore.json new file mode 100644 index 000000000..d3c075d8f --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/mars_diamond_ore.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/mars_ore_diamond", + "up": "boss_tools:blocks/mars_ore_diamond", + "north": "boss_tools:blocks/mars_ore_diamond", + "east": "boss_tools:blocks/mars_ore_diamond", + "south": "boss_tools:blocks/mars_ore_diamond", + "west": "boss_tools:blocks/mars_ore_diamond", + "particle": "boss_tools:blocks/mars_ore_diamond" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/mars_ice_shard_ore.json b/src/main/resources/assets/boss_tools/models/block/mars_ice_shard_ore.json new file mode 100644 index 000000000..9f3cdf382 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/mars_ice_shard_ore.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/mars_ore_ice", + "up": "boss_tools:blocks/mars_ore_ice", + "north": "boss_tools:blocks/mars_ore_ice", + "east": "boss_tools:blocks/mars_ore_ice", + "south": "boss_tools:blocks/mars_ore_ice", + "west": "boss_tools:blocks/mars_ore_ice", + "particle": "boss_tools:blocks/mars_ore_ice" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/mars_iron_ore.json b/src/main/resources/assets/boss_tools/models/block/mars_iron_ore.json new file mode 100644 index 000000000..ff3af05a7 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/mars_iron_ore.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/mars_ore_iron", + "up": "boss_tools:blocks/mars_ore_iron", + "north": "boss_tools:blocks/mars_ore_iron", + "east": "boss_tools:blocks/mars_ore_iron", + "south": "boss_tools:blocks/mars_ore_iron", + "west": "boss_tools:blocks/mars_ore_iron", + "particle": "boss_tools:blocks/mars_ore_iron" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/mars_sand.json b/src/main/resources/assets/boss_tools/models/block/mars_sand.json new file mode 100644 index 000000000..cf1299cf3 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/mars_sand.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/mars_sand", + "up": "boss_tools:blocks/mars_sand", + "north": "boss_tools:blocks/mars_sand", + "east": "boss_tools:blocks/mars_sand", + "south": "boss_tools:blocks/mars_sand", + "west": "boss_tools:blocks/mars_sand", + "particle": "boss_tools:blocks/mars_sand" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/mars_silicon_ore.json b/src/main/resources/assets/boss_tools/models/block/mars_silicon_ore.json new file mode 100644 index 000000000..24f8ee998 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/mars_silicon_ore.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/mars_ore_silicon", + "up": "boss_tools:blocks/mars_ore_silicon", + "north": "boss_tools:blocks/mars_ore_silicon", + "east": "boss_tools:blocks/mars_ore_silicon", + "south": "boss_tools:blocks/mars_ore_silicon", + "west": "boss_tools:blocks/mars_ore_silicon", + "particle": "boss_tools:blocks/mars_ore_silicon" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/mars_stone.json b/src/main/resources/assets/boss_tools/models/block/mars_stone.json new file mode 100644 index 000000000..327d09198 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/mars_stone.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/mars_stone", + "up": "boss_tools:blocks/mars_stone", + "north": "boss_tools:blocks/mars_stone", + "east": "boss_tools:blocks/mars_stone", + "south": "boss_tools:blocks/mars_stone", + "west": "boss_tools:blocks/mars_stone", + "particle": "boss_tools:blocks/mars_stone" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/mercury_cobblestone.json b/src/main/resources/assets/boss_tools/models/block/mercury_cobblestone.json new file mode 100644 index 000000000..58b071137 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/mercury_cobblestone.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/mercury_cobblestone", + "up": "boss_tools:blocks/mercury_cobblestone", + "north": "boss_tools:blocks/mercury_cobblestone", + "east": "boss_tools:blocks/mercury_cobblestone", + "south": "boss_tools:blocks/mercury_cobblestone", + "west": "boss_tools:blocks/mercury_cobblestone", + "particle": "boss_tools:blocks/mercury_cobblestone" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/mercury_iron_ore.json b/src/main/resources/assets/boss_tools/models/block/mercury_iron_ore.json new file mode 100644 index 000000000..015f96e87 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/mercury_iron_ore.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/mercury_iron_ore", + "up": "boss_tools:blocks/mercury_iron_ore", + "north": "boss_tools:blocks/mercury_iron_ore", + "east": "boss_tools:blocks/mercury_iron_ore", + "south": "boss_tools:blocks/mercury_iron_ore", + "west": "boss_tools:blocks/mercury_iron_ore", + "particle": "boss_tools:blocks/mercury_iron_ore" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/mercury_stone.json b/src/main/resources/assets/boss_tools/models/block/mercury_stone.json new file mode 100644 index 000000000..8fa184331 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/mercury_stone.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/mercury_stone", + "up": "boss_tools:blocks/mercury_stone", + "north": "boss_tools:blocks/mercury_stone", + "east": "boss_tools:blocks/mercury_stone", + "south": "boss_tools:blocks/mercury_stone", + "west": "boss_tools:blocks/mercury_stone", + "particle": "boss_tools:blocks/mercury_stone" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/moon_brick_slab.json b/src/main/resources/assets/boss_tools/models/block/moon_brick_slab.json new file mode 100644 index 000000000..05e8c1d3c --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/moon_brick_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "block/slab", + "textures": { + "bottom": "boss_tools:blocks/moon_bricks", + "top": "boss_tools:blocks/moon_bricks", + "side": "boss_tools:blocks/moon_bricks" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/moon_brick_slab_full.json b/src/main/resources/assets/boss_tools/models/block/moon_brick_slab_full.json new file mode 100644 index 000000000..4b6e66882 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/moon_brick_slab_full.json @@ -0,0 +1,8 @@ +{ + "parent": "block/cube_bottom_top", + "textures": { + "bottom": "boss_tools:blocks/moon_bricks", + "top": "boss_tools:blocks/moon_bricks", + "side": "boss_tools:blocks/moon_bricks" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/moon_brick_slab_top.json b/src/main/resources/assets/boss_tools/models/block/moon_brick_slab_top.json new file mode 100644 index 000000000..4f42506b8 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/moon_brick_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "block/slab_top", + "textures": { + "bottom": "boss_tools:blocks/moon_bricks", + "top": "boss_tools:blocks/moon_bricks", + "side": "boss_tools:blocks/moon_bricks" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/moon_brick_stairs.json b/src/main/resources/assets/boss_tools/models/block/moon_brick_stairs.json new file mode 100644 index 000000000..98e707015 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/moon_brick_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/stairs", + "textures": { + "bottom": "boss_tools:blocks/moon_bricks", + "top": "boss_tools:blocks/moon_bricks", + "side": "boss_tools:blocks/moon_bricks" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/moon_brick_stairs_inner.json b/src/main/resources/assets/boss_tools/models/block/moon_brick_stairs_inner.json new file mode 100644 index 000000000..933c54f39 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/moon_brick_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "boss_tools:blocks/moon_bricks", + "top": "boss_tools:blocks/moon_bricks", + "side": "boss_tools:blocks/moon_bricks" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/moon_brick_stairs_outer.json b/src/main/resources/assets/boss_tools/models/block/moon_brick_stairs_outer.json new file mode 100644 index 000000000..3e8a681a8 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/moon_brick_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "boss_tools:blocks/moon_bricks", + "top": "boss_tools:blocks/moon_bricks", + "side": "boss_tools:blocks/moon_bricks" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/moon_bricks.json b/src/main/resources/assets/boss_tools/models/block/moon_bricks.json new file mode 100644 index 000000000..d31b0bacb --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/moon_bricks.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/moon_bricks", + "up": "boss_tools:blocks/moon_bricks", + "north": "boss_tools:blocks/moon_bricks", + "east": "boss_tools:blocks/moon_bricks", + "south": "boss_tools:blocks/moon_bricks", + "west": "boss_tools:blocks/moon_bricks", + "particle": "boss_tools:blocks/moon_bricks" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/moon_cheese_ore.json b/src/main/resources/assets/boss_tools/models/block/moon_cheese_ore.json new file mode 100644 index 000000000..fa419d1fb --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/moon_cheese_ore.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/moon_ore_chesse", + "up": "boss_tools:blocks/moon_ore_chesse", + "north": "boss_tools:blocks/moon_ore_chesse", + "east": "boss_tools:blocks/moon_ore_chesse", + "south": "boss_tools:blocks/moon_ore_chesse", + "west": "boss_tools:blocks/moon_ore_chesse", + "particle": "boss_tools:blocks/moon_ore_chesse" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/moon_desh_ore.json b/src/main/resources/assets/boss_tools/models/block/moon_desh_ore.json new file mode 100644 index 000000000..ffd05b1e2 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/moon_desh_ore.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/moon_ore_desh", + "up": "boss_tools:blocks/moon_ore_desh", + "north": "boss_tools:blocks/moon_ore_desh", + "east": "boss_tools:blocks/moon_ore_desh", + "south": "boss_tools:blocks/moon_ore_desh", + "west": "boss_tools:blocks/moon_ore_desh", + "particle": "boss_tools:blocks/moon_ore_desh" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/moon_glowstone_ore.json b/src/main/resources/assets/boss_tools/models/block/moon_glowstone_ore.json new file mode 100644 index 000000000..e3665f827 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/moon_glowstone_ore.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/moon_glowstone_ore", + "up": "boss_tools:blocks/moon_glowstone_ore", + "north": "boss_tools:blocks/moon_glowstone_ore", + "east": "boss_tools:blocks/moon_glowstone_ore", + "south": "boss_tools:blocks/moon_glowstone_ore", + "west": "boss_tools:blocks/moon_glowstone_ore", + "particle": "boss_tools:blocks/moon_glowstone_ore" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/moon_iron_ore.json b/src/main/resources/assets/boss_tools/models/block/moon_iron_ore.json new file mode 100644 index 000000000..e930a1e02 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/moon_iron_ore.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/moon_ore_iron", + "up": "boss_tools:blocks/moon_ore_iron", + "north": "boss_tools:blocks/moon_ore_iron", + "east": "boss_tools:blocks/moon_ore_iron", + "south": "boss_tools:blocks/moon_ore_iron", + "west": "boss_tools:blocks/moon_ore_iron", + "particle": "boss_tools:blocks/moon_ore_iron" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/moon_sand.json b/src/main/resources/assets/boss_tools/models/block/moon_sand.json new file mode 100644 index 000000000..85fe8fc75 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/moon_sand.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/moon_sand", + "up": "boss_tools:blocks/moon_sand", + "north": "boss_tools:blocks/moon_sand", + "east": "boss_tools:blocks/moon_sand", + "south": "boss_tools:blocks/moon_sand", + "west": "boss_tools:blocks/moon_sand", + "particle": "boss_tools:blocks/moon_sand" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/moon_stone.json b/src/main/resources/assets/boss_tools/models/block/moon_stone.json new file mode 100644 index 000000000..75a85de5e --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/moon_stone.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/moon_stone", + "up": "boss_tools:blocks/moon_stone", + "north": "boss_tools:blocks/moon_stone", + "east": "boss_tools:blocks/moon_stone", + "south": "boss_tools:blocks/moon_stone", + "west": "boss_tools:blocks/moon_stone", + "particle": "boss_tools:blocks/moon_stone" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/nasa_workbench.json b/src/main/resources/assets/boss_tools/models/block/nasa_workbench.json new file mode 100644 index 000000000..9a89923e9 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/nasa_workbench.json @@ -0,0 +1,13 @@ +{ + "parent": "boss_tools:custom/nasa_workbench", + "textures": { + "all": "boss_tools:blocks/workbench_nasa_top_2", + "particle": "boss_tools:blocks/workbench_nasa_top_2", + "1": "boss_tools:blocks/workbench_nasa_top", + "2": "boss_tools:blocks/workbench_nasa_top_2", + "3": "boss_tools:blocks/nasa_workbench_main", + "4": "boss_tools:blocks/workbench_nasa_side", + "5": "boss_tools:blocks/workbench_nasa_holder", + "missing": "boss_tools:blocks/workbench_nasa_top" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/oxygen_bubble_distributor.json b/src/main/resources/assets/boss_tools/models/block/oxygen_bubble_distributor.json new file mode 100644 index 000000000..c7d5e5dd2 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/oxygen_bubble_distributor.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/machineback", + "up": "boss_tools:blocks/vent_back", + "north": "boss_tools:blocks/oxygengeneratorfront_1", + "east": "boss_tools:blocks/machineside", + "south": "boss_tools:blocks/machineside", + "west": "boss_tools:blocks/machineside", + "particle": "boss_tools:blocks/machineback" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/oxygen_bubble_distributor_ac.json b/src/main/resources/assets/boss_tools/models/block/oxygen_bubble_distributor_ac.json new file mode 100644 index 000000000..d5ad32174 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/oxygen_bubble_distributor_ac.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/machineback", + "up": "boss_tools:blocks/vent_back", + "north": "boss_tools:blocks/oxygengeneratorfront_1_aktivated", + "east": "boss_tools:blocks/machineside", + "south": "boss_tools:blocks/machineside", + "west": "boss_tools:blocks/machineside", + "particle": "boss_tools:blocks/machineback" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/oxygen_loader.json b/src/main/resources/assets/boss_tools/models/block/oxygen_loader.json new file mode 100644 index 000000000..185433222 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/oxygen_loader.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/machineback", + "up": "boss_tools:blocks/machineback", + "north": "boss_tools:blocks/oxygengeneratorfront_inactive", + "east": "boss_tools:blocks/machineside", + "south": "boss_tools:blocks/machineside", + "west": "boss_tools:blocks/machineside", + "particle": "boss_tools:blocks/machineback" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/oxygen_loader_ac.json b/src/main/resources/assets/boss_tools/models/block/oxygen_loader_ac.json new file mode 100644 index 000000000..79026faaa --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/oxygen_loader_ac.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/machineback", + "up": "boss_tools:blocks/machineback", + "north": "boss_tools:blocks/oxygengeneratorfront", + "east": "boss_tools:blocks/machineside", + "south": "boss_tools:blocks/machineside", + "west": "boss_tools:blocks/machineside", + "particle": "boss_tools:blocks/machineback" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/rocket_launch_pad.json b/src/main/resources/assets/boss_tools/models/block/rocket_launch_pad.json new file mode 100644 index 000000000..1a4a0cb50 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/rocket_launch_pad.json @@ -0,0 +1,8 @@ +{ + "parent": "boss_tools:custom/launch_pad", + "textures": { + "all": "boss_tools:blocks/launch_pad", + "particle": "boss_tools:blocks/launch_pad", + "1": "boss_tools:blocks/launch_pad" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/rocket_launch_pad_base.json b/src/main/resources/assets/boss_tools/models/block/rocket_launch_pad_base.json new file mode 100644 index 000000000..df6579795 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/rocket_launch_pad_base.json @@ -0,0 +1,8 @@ +{ + "parent": "boss_tools:custom/launch_pad_base", + "textures": { + "all": "boss_tools:blocks/launch_pad", + "particle": "boss_tools:blocks/launch_pad", + "1": "boss_tools:blocks/launch_pad" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/rusted_iron_pillar_block.json b/src/main/resources/assets/boss_tools/models/block/rusted_iron_pillar_block.json new file mode 100644 index 000000000..cc38dcd57 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/rusted_iron_pillar_block.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/rusted_iron_pillar_block_top", + "up": "boss_tools:blocks/rusted_iron_pillar_block_top", + "north": "boss_tools:blocks/rusted_iron_pillar_block", + "east": "boss_tools:blocks/rusted_iron_pillar_block", + "south": "boss_tools:blocks/rusted_iron_pillar_block", + "west": "boss_tools:blocks/rusted_iron_pillar_block", + "particle": "boss_tools:blocks/rusted_iron_pillar_block_top" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/rusted_iron_plating_block.json b/src/main/resources/assets/boss_tools/models/block/rusted_iron_plating_block.json new file mode 100644 index 000000000..e07bdc838 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/rusted_iron_plating_block.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/rusted_iron_plating_block", + "up": "boss_tools:blocks/rusted_iron_plating_block", + "north": "boss_tools:blocks/rusted_iron_plating_block", + "east": "boss_tools:blocks/rusted_iron_plating_block", + "south": "boss_tools:blocks/rusted_iron_plating_block", + "west": "boss_tools:blocks/rusted_iron_plating_block", + "particle": "boss_tools:blocks/rusted_iron_plating_block" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/silicon_block.json b/src/main/resources/assets/boss_tools/models/block/silicon_block.json new file mode 100644 index 000000000..bd68b05e2 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/silicon_block.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/silicon_block", + "up": "boss_tools:blocks/silicon_block", + "north": "boss_tools:blocks/silicon_block", + "east": "boss_tools:blocks/silicon_block", + "south": "boss_tools:blocks/silicon_block", + "west": "boss_tools:blocks/silicon_block", + "particle": "boss_tools:blocks/silicon_block" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/sky_stone.json b/src/main/resources/assets/boss_tools/models/block/sky_stone.json new file mode 100644 index 000000000..86da31697 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/sky_stone.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/sky_stone", + "up": "boss_tools:blocks/sky_stone", + "north": "boss_tools:blocks/sky_stone", + "east": "boss_tools:blocks/sky_stone", + "south": "boss_tools:blocks/sky_stone", + "west": "boss_tools:blocks/sky_stone", + "particle": "boss_tools:blocks/sky_stone" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/solar_panel.json b/src/main/resources/assets/boss_tools/models/block/solar_panel.json new file mode 100644 index 000000000..1c4cc998c --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/solar_panel.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/machineback", + "up": "boss_tools:blocks/block_solar_panel_top", + "north": "boss_tools:blocks/block_solar_panel_side", + "east": "boss_tools:blocks/block_solar_panel_side", + "south": "boss_tools:blocks/block_solar_panel_side", + "west": "boss_tools:blocks/block_solar_panel_side", + "particle": "boss_tools:blocks/machineback" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/steel_block.json b/src/main/resources/assets/boss_tools/models/block/steel_block.json new file mode 100644 index 000000000..775439c94 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/steel_block.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/steel_block", + "up": "boss_tools:blocks/steel_block", + "north": "boss_tools:blocks/steel_block", + "east": "boss_tools:blocks/steel_block", + "south": "boss_tools:blocks/steel_block", + "west": "boss_tools:blocks/steel_block", + "particle": "boss_tools:blocks/steel_block" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/venus_coal_ore.json b/src/main/resources/assets/boss_tools/models/block/venus_coal_ore.json new file mode 100644 index 000000000..071fe5f7f --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/venus_coal_ore.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/venus_coal_ore", + "up": "boss_tools:blocks/venus_coal_ore", + "north": "boss_tools:blocks/venus_coal_ore", + "east": "boss_tools:blocks/venus_coal_ore", + "south": "boss_tools:blocks/venus_coal_ore", + "west": "boss_tools:blocks/venus_coal_ore", + "particle": "boss_tools:blocks/venus_coal_ore" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/venus_diamond_ore.json b/src/main/resources/assets/boss_tools/models/block/venus_diamond_ore.json new file mode 100644 index 000000000..9a22cdaf1 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/venus_diamond_ore.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/venus_diamond_ore", + "up": "boss_tools:blocks/venus_diamond_ore", + "north": "boss_tools:blocks/venus_diamond_ore", + "east": "boss_tools:blocks/venus_diamond_ore", + "south": "boss_tools:blocks/venus_diamond_ore", + "west": "boss_tools:blocks/venus_diamond_ore", + "particle": "boss_tools:blocks/venus_diamond_ore" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/venus_gold_ore.json b/src/main/resources/assets/boss_tools/models/block/venus_gold_ore.json new file mode 100644 index 000000000..5d4502136 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/venus_gold_ore.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/venus_gold_ore", + "up": "boss_tools:blocks/venus_gold_ore", + "north": "boss_tools:blocks/venus_gold_ore", + "east": "boss_tools:blocks/venus_gold_ore", + "south": "boss_tools:blocks/venus_gold_ore", + "west": "boss_tools:blocks/venus_gold_ore", + "particle": "boss_tools:blocks/venus_gold_ore" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/venus_sand.json b/src/main/resources/assets/boss_tools/models/block/venus_sand.json new file mode 100644 index 000000000..eee72d8dc --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/venus_sand.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/venus_sand", + "up": "boss_tools:blocks/venus_sand", + "north": "boss_tools:blocks/venus_sand", + "east": "boss_tools:blocks/venus_sand", + "south": "boss_tools:blocks/venus_sand", + "west": "boss_tools:blocks/venus_sand", + "particle": "boss_tools:blocks/venus_sand" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/venus_sandstone.json b/src/main/resources/assets/boss_tools/models/block/venus_sandstone.json new file mode 100644 index 000000000..9f5c8a3df --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/venus_sandstone.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/venus_stone", + "up": "boss_tools:blocks/venus_stone", + "north": "boss_tools:blocks/venus_stone", + "east": "boss_tools:blocks/venus_stone", + "south": "boss_tools:blocks/venus_stone", + "west": "boss_tools:blocks/venus_stone", + "particle": "boss_tools:blocks/venus_stone" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/venus_stone.json b/src/main/resources/assets/boss_tools/models/block/venus_stone.json new file mode 100644 index 000000000..4c4770a04 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/venus_stone.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "boss_tools:blocks/venus_sand_stone", + "up": "boss_tools:blocks/venus_sand_stone", + "north": "boss_tools:blocks/venus_sand_stone", + "east": "boss_tools:blocks/venus_sand_stone", + "south": "boss_tools:blocks/venus_sand_stone", + "west": "boss_tools:blocks/venus_sand_stone", + "particle": "boss_tools:blocks/venus_sand_stone" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/wall_coal_torch.json b/src/main/resources/assets/boss_tools/models/block/wall_coal_torch.json new file mode 100644 index 000000000..ce10dc4ed --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/wall_coal_torch.json @@ -0,0 +1,9 @@ +{ + "parent": "boss_tools:custom/template_torch_wall", + "textures": { + "all": "boss_tools:blocks/coal_torch", + "particle": "boss_tools:blocks/coal_torch", + "2": "boss_tools:blocks/coal_torch", + "missing": "boss_tools:blocks/coal_torch" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/block/water_pump.json b/src/main/resources/assets/boss_tools/models/block/water_pump.json new file mode 100644 index 000000000..d7066bb57 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/block/water_pump.json @@ -0,0 +1,7 @@ +{ + "parent": "boss_tools:custom/water_pump", + "textures": { + "0": "boss_tools:blocks/water_pump", + "particle": "boss_tools:blocks/water_pump" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/custom/flage.json b/src/main/resources/assets/boss_tools/models/custom/flage.json new file mode 100644 index 000000000..854074143 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/custom/flage.json @@ -0,0 +1,345 @@ +{ + "credit": "Made with Blockbench", + "parent": "flage", + "elements": [ + { + "from": [ + 13, + 1, + 7 + ], + "to": [ + 14, + 32, + 8 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 21, + 8, + 15 + ] + }, + "faces": { + "north": { + "uv": [ + 11, + 9, + 12, + 15 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 11, + 9, + 12, + 15 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 11, + 9, + 12, + 15 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 10, + 9, + 11, + 15 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 11, + 4, + 12, + 5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 12.5, + 0, + 6.5 + ], + "to": [ + 14.5, + 1, + 8.5 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 22, + 8, + 15 + ] + }, + "faces": { + "north": { + "uv": [ + 15, + 1, + 16, + 2 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 15, + 3, + 16, + 4 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 15, + 0, + 16, + 1 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 15, + 3, + 16, + 4 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 15, + 1, + 16, + 3 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 15, + 2, + 16, + 4 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 1, + 23, + 7.5 + ], + "to": [ + 13, + 31, + 7.5 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 20, + 23, + 15 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 8, + 8 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 8 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 8, + 8 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 8 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 14, + 1 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 14, + 1 + ], + "texture": "#missing" + } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + 70, + -112, + 0 + ], + "translation": [ + 1.5, + 4.25, + -1.25 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + 65, + 45, + 0 + ], + "translation": [ + 3.5, + 2.25, + -1.25 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + -61, + 0 + ], + "translation": [ + 1.5, + 0.75, + 0 + ], + "scale": [ + 0.47695, + 0.72695, + 0.6 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 95, + 0 + ], + "translation": [ + 1.25, + 1.25, + 0 + ], + "scale": [ + 0.6, + 0.6, + 0.6 + ] + }, + "ground": { + "translation": [ + 0, + 2.75, + 0 + ], + "scale": [ + 0.3, + 0.3, + 0.3 + ] + }, + "gui": { + "rotation": [ + 0, + -180, + 0 + ], + "translation": [ + 0, + -4, + 0 + ], + "scale": [ + 0.5, + 0.5, + 1 + ] + }, + "head": { + "translation": [ + -4, + 13.75, + 1 + ] + }, + "fixed": { + "translation": [ + 0, + -3.25, + 0 + ], + "scale": [ + 0.5, + 0.5, + 1 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/custom/flage_down.json b/src/main/resources/assets/boss_tools/models/custom/flage_down.json new file mode 100644 index 000000000..046f4aaf3 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/custom/flage_down.json @@ -0,0 +1,268 @@ +{ + "credit": "Made with Blockbench", + "parent": "flage_down", + "elements": [ + { + "from": [ + 2, + 1, + 7.5 + ], + "to": [ + 3, + 16, + 8.5 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 21, + 8, + 15 + ] + }, + "faces": { + "north": { + "uv": [ + 11, + 9, + 12, + 15 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 11, + 9, + 12, + 15 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 11, + 9, + 12, + 15 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 10, + 9, + 11, + 15 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 11, + 4, + 12, + 5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 1.5, + 0, + 7 + ], + "to": [ + 3.5, + 1, + 9 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 22, + 8, + 15 + ] + }, + "faces": { + "north": { + "uv": [ + 15, + 1, + 16, + 2 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 15, + 3, + 16, + 4 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 15, + 0, + 16, + 1 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 15, + 3, + 16, + 4 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 15, + 1, + 16, + 3 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 15, + 2, + 16, + 4 + ], + "texture": "#0" + } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + 70, + -112, + 0 + ], + "translation": [ + 1.5, + 4.25, + -1.25 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + 65, + 45, + 0 + ], + "translation": [ + 3.5, + 2.25, + -1.25 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + -61, + 0 + ], + "translation": [ + 0.25, + 1, + 0 + ], + "scale": [ + 0.47695, + 0.72695, + 0.6 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 105, + 0 + ], + "translation": [ + -0.25, + 3.25, + 0 + ], + "scale": [ + 0.6, + 0.6, + 0.6 + ] + }, + "ground": { + "translation": [ + 0, + 2.75, + 0 + ], + "scale": [ + 0.3, + 0.3, + 0.3 + ] + }, + "gui": { + "rotation": [ + 0, + -180, + 0 + ], + "translation": [ + 0, + -4, + 0 + ], + "scale": [ + 0.5, + 0.5, + 1 + ] + }, + "head": { + "translation": [ + -4, + 13.75, + 1 + ] + }, + "fixed": { + "translation": [ + 0, + -3.25, + 0 + ], + "scale": [ + 0.5, + 0.5, + 1 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/custom/flage_up.json b/src/main/resources/assets/boss_tools/models/custom/flage_up.json new file mode 100644 index 000000000..a7680d488 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/custom/flage_up.json @@ -0,0 +1,268 @@ +{ + "credit": "Made with Blockbench", + "parent": "flage_up", + "elements": [ + { + "from": [ + 2, + 0, + 7.5 + ], + "to": [ + 3, + 16, + 8.5 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 21, + 8, + 15 + ] + }, + "faces": { + "north": { + "uv": [ + 11, + 9, + 12, + 15 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 11, + 9, + 12, + 15 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 11, + 9, + 12, + 15 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 10, + 9, + 11, + 15 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 11, + 4, + 12, + 5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 3, + 7, + 8 + ], + "to": [ + 15, + 15, + 8 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 20, + 23, + 15 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 8, + 8 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 8 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 8, + 8 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 8 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 14, + 1 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 14, + 1 + ], + "texture": "#missing" + } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + 70, + -112, + 0 + ], + "translation": [ + 1.5, + 4.25, + -1.25 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + 65, + 45, + 0 + ], + "translation": [ + 3.5, + 2.25, + -1.25 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + -61, + 0 + ], + "translation": [ + 0.25, + 1, + 0 + ], + "scale": [ + 0.47695, + 0.72695, + 0.6 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 105, + 0 + ], + "translation": [ + -0.25, + 3.25, + 0 + ], + "scale": [ + 0.6, + 0.6, + 0.6 + ] + }, + "ground": { + "translation": [ + 0, + 2.75, + 0 + ], + "scale": [ + 0.3, + 0.3, + 0.3 + ] + }, + "gui": { + "rotation": [ + 0, + -180, + 0 + ], + "translation": [ + 0, + -4, + 0 + ], + "scale": [ + 0.5, + 0.5, + 1 + ] + }, + "head": { + "translation": [ + -4, + 13.75, + 1 + ] + }, + "fixed": { + "translation": [ + 0, + -3.25, + 0 + ], + "scale": [ + 0.5, + 0.5, + 1 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/custom/launch_pad.json b/src/main/resources/assets/boss_tools/models/custom/launch_pad.json new file mode 100644 index 000000000..5c911d6c4 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/custom/launch_pad.json @@ -0,0 +1,60 @@ +{ + "credit": "Made with Blockbench", + "parent": "launch_pad", + "texture_size": [32, 32], + "textures": { + "0": "boss_tools:blocks/launch_pad", + "particle": "boss_tools:blocks/launch_pad" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 3, 16], + "faces": { + "north": {"uv": [0, 8, 8, 9], "texture": "#0"}, + "east": {"uv": [0, 8, 8, 9], "texture": "#0"}, + "south": {"uv": [0, 8, 8, 9], "texture": "#0"}, + "west": {"uv": [0, 8, 8, 9], "texture": "#0"}, + "up": {"uv": [0, 0, 8, 8], "texture": "#0"}, + "down": {"uv": [0, 0, 8, 8], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [90, 0, 0], + "translation": [0, 2, 3.75], + "scale": [0.4, 0.4, 0.4] + }, + "thirdperson_lefthand": { + "rotation": [90, 0, 0], + "translation": [0, 2, 3.75], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_righthand": { + "translation": [0.5, 2.5, 0], + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "translation": [0.5, 2.5, 0], + "scale": [0.5, 0.5, 0.5] + }, + "ground": { + "translation": [0, 2.25, 0], + "scale": [0.3, 0.3, 0.3] + }, + "gui": { + "rotation": [34, -45, 0], + "translation": [0, 2.75, 0], + "scale": [0.6, 0.6, 0.6] + }, + "head": { + "translation": [0, 13.25, 0] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0, -4], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/custom/launch_pad_base.json b/src/main/resources/assets/boss_tools/models/custom/launch_pad_base.json new file mode 100644 index 000000000..b78bb4acb --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/custom/launch_pad_base.json @@ -0,0 +1,60 @@ +{ + "credit": "Made with Blockbench", + "parent": "launch_pad", + "texture_size": [32, 32], + "textures": { + "0": "boss_tools:blocks/launch_pad", + "particle": "boss_tools:blocks/launch_pad" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 4, 16], + "faces": { + "north": {"uv": [0, 8, 8, 9], "texture": "#0"}, + "east": {"uv": [0, 8, 8, 9], "texture": "#0"}, + "south": {"uv": [0, 8, 8, 9], "texture": "#0"}, + "west": {"uv": [0, 8, 8, 9], "texture": "#0"}, + "up": {"uv": [0, 0, 8, 8], "texture": "#0"}, + "down": {"uv": [0, 0, 8, 8], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [90, 0, 0], + "translation": [0, 2, 3.75], + "scale": [0.4, 0.4, 0.4] + }, + "thirdperson_lefthand": { + "rotation": [90, 0, 0], + "translation": [0, 2, 3.75], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_righthand": { + "translation": [0.5, 2.5, 0], + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "translation": [0.5, 2.5, 0], + "scale": [0.5, 0.5, 0.5] + }, + "ground": { + "translation": [0, 2.25, 0], + "scale": [0.3, 0.3, 0.3] + }, + "gui": { + "rotation": [34, -45, 0], + "translation": [0, 2.75, 0], + "scale": [0.6, 0.6, 0.6] + }, + "head": { + "translation": [0, 13.25, 0] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0, -4], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/custom/nasa_workbench.json b/src/main/resources/assets/boss_tools/models/custom/nasa_workbench.json new file mode 100644 index 000000000..9034eafbd --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/custom/nasa_workbench.json @@ -0,0 +1,3122 @@ +{ + "credit": "Made with Blockbench", + "parent": "nasa_workbench", + "elements": [ + { + "from": [ + 1, + 0, + 1 + ], + "to": [ + 15, + 14, + 15 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8, + 8, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#4" + }, + "east": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#4" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#4" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#4" + }, + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 1, + 15, + 1 + ], + "to": [ + 15, + 17.5, + 15 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 13, + 22, + 18 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 3 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 0, + 0, + 16, + 3 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 3 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 3 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 0, + 15.996, + 15.998 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#2" + } + } + }, + { + "from": [ + 5.9, + 27.5, + 17.8 + ], + "to": [ + 10, + 31.7, + 22.3 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + -1, + 33, + 13 + ] + }, + "faces": { + "north": { + "uv": [ + 7, + 7, + 10, + 10 + ], + "rotation": 90, + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 7, + 2.998, + 9.998 + ], + "rotation": 270, + "texture": "#3" + }, + "south": { + "uv": [ + 7, + 7, + 10, + 10 + ], + "rotation": 90, + "texture": "#3" + }, + "west": { + "uv": [ + 0, + 7, + 2.999, + 9.998 + ], + "rotation": 90, + "texture": "#3" + }, + "up": { + "uv": [ + 7, + 7, + 9.999, + 9.999 + ], + "rotation": 180, + "texture": "#3" + }, + "down": { + "uv": [ + 7, + 7, + 10, + 10 + ], + "texture": "#3" + } + } + }, + { + "from": [ + 24, + 20.5, + 6 + ], + "to": [ + 28.2, + 23, + 10.1 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 33, + 30, + 17 + ] + }, + "faces": { + "north": { + "uv": [ + 3, + 11, + 6, + 13 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 3, + 11, + 6, + 13 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 3, + 11, + 6, + 13 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 2, + 9, + 5, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 3, + 11, + 6, + 13 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 12, + 9, + 15, + 12 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 21.6, + 15.5, + 7 + ], + "to": [ + 23.8, + 26, + 9.1 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 29, + 30, + 17 + ] + }, + "faces": { + "north": { + "uv": [ + 1, + 3, + 3, + 13 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 12, + 3, + 14, + 13 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 1, + 3, + 3, + 13 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 12, + 3, + 14, + 13 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 3, + 3, + 11.999, + 9.999 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 2, + 2, + 8, + 8 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7, + 8.5, + -10.9 + ], + "to": [ + 9.1, + 19, + -8.7 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 16.75, + 23, + -17 + ] + }, + "faces": { + "north": { + "uv": [ + 12, + 3, + 14, + 13 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 1, + 3, + 3, + 13 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 12, + 3, + 14, + 13 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 1, + 3, + 3, + 13 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 3, + 3, + 11.999, + 9.999 + ], + "rotation": 270, + "texture": "#1" + }, + "down": { + "uv": [ + 2, + 2, + 8, + 8 + ], + "rotation": 90, + "texture": "#1" + } + } + }, + { + "from": [ + 6.9, + 9.5, + 24 + ], + "to": [ + 9, + 19, + 26.2 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + -1, + 23, + 31 + ] + }, + "faces": { + "north": { + "uv": [ + 1, + 3, + 3, + 13 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 12, + 3, + 14, + 13 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 1, + 3, + 3, + 13 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 12, + 3, + 14, + 13 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 3, + 3, + 11.999, + 9.999 + ], + "rotation": 90, + "texture": "#1" + }, + "down": { + "uv": [ + 2, + 2, + 8, + 8 + ], + "rotation": 270, + "texture": "#1" + } + } + }, + { + "from": [ + -3, + 20.5, + 7 + ], + "to": [ + -0.8, + 31, + 9.1 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7, + 36, + 17 + ] + }, + "faces": { + "north": { + "uv": [ + 13, + 3, + 15, + 13 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 1, + 3, + 3, + 13 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 13, + 3, + 15, + 13 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 1, + 3, + 3, + 13 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 3, + 3, + 11.999, + 9.999 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 2, + 2, + 8, + 8 + ], + "texture": "#1" + } + } + }, + { + "from": [ + -5.8, + 18.5, + 7 + ], + "to": [ + -3.6, + 28, + 9.1 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + -2, + 22, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 12, + 2, + 14, + 10 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 1, + 5, + 3, + 13 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 12, + 3, + 14, + 11 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 1, + 3, + 3, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 3, + 3, + 11.999, + 9.999 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 2, + 2, + 8, + 8 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 6.9, + 21.5, + -3.3 + ], + "to": [ + 9, + 32, + -1.1 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + -1, + 43, + 4 + ] + }, + "faces": { + "north": { + "uv": [ + 12, + 3, + 14, + 13 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 1, + 3, + 3, + 13 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 12, + 3, + 14, + 13 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 1, + 3, + 3, + 13 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 3, + 3, + 11.999, + 9.999 + ], + "rotation": 90, + "texture": "#1" + }, + "down": { + "uv": [ + 2, + 2, + 8, + 8 + ], + "rotation": 270, + "texture": "#1" + } + } + }, + { + "from": [ + 6.5, + 23.5, + 2.7 + ], + "to": [ + 9.6, + 27, + 8.9 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + -1, + 45, + 14 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 7, + 3, + 10 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 8, + 12, + 13.999, + 16 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 3, + 1, + 7 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 9, + 12, + 15, + 16 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 9, + 12, + 14.998, + 15.998 + ], + "rotation": 90, + "texture": "#3" + }, + "down": { + "uv": [ + 9, + 12, + 14.998, + 15.998 + ], + "rotation": 270, + "texture": "#3" + } + } + }, + { + "from": [ + 7.5, + 25.5, + 7.7 + ], + "to": [ + 8.5, + 26.5, + 12.9 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + -1, + 45, + 13 + ] + }, + "faces": { + "north": { + "uv": [ + 2, + 4, + 8, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 9, + 14, + 14, + 15 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10, + 10, + 11, + 11 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 2, + 14, + 7, + 15 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 2, + 14, + 7, + 15 + ], + "rotation": 90, + "texture": "#1" + }, + "down": { + "uv": [ + 2, + 14, + 7, + 15 + ], + "rotation": 270, + "texture": "#1" + } + } + }, + { + "from": [ + 7, + 21.5, + 17.1 + ], + "to": [ + 9.1, + 30, + 19.3 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 17, + 38, + 12 + ] + }, + "faces": { + "north": { + "uv": [ + 2, + 6, + 4, + 12 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 1, + 6, + 3, + 12 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 6, + 4, + 12 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 1, + 6, + 3, + 12 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 3, + 3, + 11.999, + 9.999 + ], + "rotation": 270, + "texture": "#1" + }, + "down": { + "uv": [ + 2, + 2, + 8, + 8 + ], + "rotation": 90, + "texture": "#1" + } + } + }, + { + "from": [ + 5.5, + 25.5, + 13.1 + ], + "to": [ + 10.6, + 31, + 14.3 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 17, + 39, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 3, + 7, + 6.998, + 10.998 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 12, + 8, + 13, + 12 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 11, + 8, + 15, + 12 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 12, + 8, + 13, + 12 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 12, + 6, + 13, + 10 + ], + "rotation": 270, + "texture": "#1" + }, + "down": { + "uv": [ + 12, + 6, + 13, + 10 + ], + "rotation": 90, + "texture": "#1" + } + } + }, + { + "from": [ + 6.5, + 28.5, + 13.1 + ], + "to": [ + 9.6, + 32, + 17.3 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 17, + 43, + 13 + ] + }, + "faces": { + "north": { + "uv": [ + 12, + 6, + 14, + 9 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 3, + 9, + 6, + 12 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 12, + 6, + 14, + 9 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 3, + 9, + 6, + 12 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 11, + 10, + 14, + 12 + ], + "rotation": 270, + "texture": "#1" + }, + "down": { + "uv": [ + 11, + 10, + 14, + 12 + ], + "rotation": 90, + "texture": "#1" + } + } + }, + { + "from": [ + -9, + 23, + 6.5 + ], + "to": [ + -5.8, + 26, + 9.6 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + -1, + 47, + 17 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 7, + 2.997, + 9.995 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 7, + 7, + 9.999, + 9.999 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 7, + 2.999, + 9.999 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 7, + 7, + 9.999, + 9.999 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 7, + 7, + 9.998, + 9.997 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 7, + 7, + 10, + 10 + ], + "texture": "#3" + } + } + }, + { + "from": [ + 6.4, + 24, + -11 + ], + "to": [ + 9.5, + 27, + -7.8 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + -1, + 41, + -5 + ] + }, + "faces": { + "north": { + "uv": [ + 7, + 7, + 9.999, + 9.999 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 7, + 2.999, + 9.998 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 7, + 7, + 9.999, + 9.999 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 0, + 7, + 2.999, + 9.999 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 7, + 7, + 9.998, + 9.998 + ], + "rotation": 90, + "texture": "#3" + }, + "down": { + "uv": [ + 7, + 7, + 10, + 10 + ], + "rotation": 270, + "texture": "#3" + } + } + }, + { + "from": [ + 6.5, + 23.5, + 22.1 + ], + "to": [ + 9.6, + 26.5, + 25.3 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 17, + 39, + 18 + ] + }, + "faces": { + "north": { + "uv": [ + 7, + 7, + 9.999, + 9.999 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 7, + 2.999, + 9.999 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 7, + 7, + 9.999, + 9.999 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 0, + 7, + 2.999, + 9.998 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 7, + 7, + 9.998, + 9.998 + ], + "rotation": 270, + "texture": "#3" + }, + "down": { + "uv": [ + 2, + 2, + 8, + 8 + ], + "rotation": 90, + "texture": "#1" + } + } + }, + { + "from": [ + -15.6, + 27.5, + 6.5 + ], + "to": [ + -12.5, + 30.5, + 9.7 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + -22, + 62, + 16 + ] + }, + "faces": { + "north": { + "uv": [ + 2, + 9, + 5, + 12 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 11, + 9, + 14, + 12 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 3, + 2, + 6, + 5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 2, + 2, + 8, + 6 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 12, + 9, + 15, + 12 + ], + "rotation": 90, + "texture": "#1" + }, + "down": { + "uv": [ + 12, + 6, + 15, + 9 + ], + "rotation": 270, + "texture": "#1" + } + } + }, + { + "from": [ + -13.6, + 28, + 4.45 + ], + "to": [ + -12.5, + 32, + 11.65 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + -20, + 63, + 16 + ] + }, + "faces": { + "north": { + "uv": [ + 12, + 4, + 13, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 0, + 11, + 5, + 14 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 13, + 9, + 14, + 13 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 1, + 9, + 7, + 13 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 1, + 7, + 7, + 8 + ], + "rotation": 90, + "texture": "#1" + }, + "down": { + "uv": [ + 1, + 7, + 7, + 8 + ], + "rotation": 270, + "texture": "#1" + } + } + }, + { + "from": [ + 3.85, + 6, + 12.95 + ], + "to": [ + 29.85, + 19, + 13.95 + ], + "rotation": { + "angle": -45, + "axis": "y", + "origin": [ + 19, + 22, + 0 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 2.5, + 12.5, + 8 + ], + "rotation": 180, + "texture": "#5" + }, + "east": { + "uv": [ + 12, + 3.5, + 12.5, + 8 + ], + "rotation": 180, + "texture": "#5" + }, + "south": { + "uv": [ + 0, + 2.5, + 12.5, + 8 + ], + "rotation": 180, + "texture": "#5" + }, + "west": { + "uv": [ + 0, + 3.5, + 0.5, + 8 + ], + "rotation": 180, + "texture": "#5" + }, + "up": { + "uv": [ + 0, + 7.5, + 12.5, + 8 + ], + "texture": "#5" + }, + "down": { + "uv": [ + 0, + 2.5, + 12.5, + 3 + ], + "texture": "#5" + } + } + }, + { + "from": [ + -13.85, + 6, + 12.95 + ], + "to": [ + 12.15, + 19, + 13.95 + ], + "rotation": { + "angle": 45, + "axis": "y", + "origin": [ + -3, + 22, + 0 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 2.5, + 12.5, + 8 + ], + "rotation": 180, + "texture": "#5" + }, + "east": { + "uv": [ + 12, + 3.5, + 12.5, + 8 + ], + "rotation": 180, + "texture": "#5" + }, + "south": { + "uv": [ + 0, + 2.5, + 12.5, + 8 + ], + "rotation": 180, + "texture": "#5" + }, + "west": { + "uv": [ + 0, + 3.5, + 0.5, + 8 + ], + "rotation": 180, + "texture": "#5" + }, + "up": { + "uv": [ + 0, + 7.5, + 12.5, + 8 + ], + "texture": "#5" + }, + "down": { + "uv": [ + 0, + 2.5, + 12.5, + 3 + ], + "texture": "#5" + } + } + }, + { + "from": [ + 0, + 10, + 0 + ], + "to": [ + 16, + 15, + 16 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 5 + ], + "texture": "#4" + }, + "east": { + "uv": [ + 0, + 0, + 16, + 5 + ], + "texture": "#4" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 5 + ], + "texture": "#4" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 5 + ], + "texture": "#4" + }, + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 6, + 17, + 6 + ], + "to": [ + 10, + 20, + 10 + ], + "faces": { + "north": { + "uv": [ + 6, + 10, + 10, + 13 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 6, + 10, + 10, + 13 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 6, + 10, + 10, + 13 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 6, + 10, + 10, + 13 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 6, + 6, + 10, + 10 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 2, + 17, + 2 + ], + "to": [ + 6.5, + 20, + 6.5 + ], + "faces": { + "north": { + "uv": [ + 9, + 1, + 15, + 5 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 10, + 6, + 16, + 10 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 10, + 6, + 14, + 9 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 1, + 1, + 7, + 5 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 1, + 1, + 7, + 7 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 2, + 17, + 9.5 + ], + "to": [ + 6.5, + 20, + 14 + ], + "faces": { + "north": { + "uv": [ + 10, + 6, + 16, + 10 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 10, + 6, + 16, + 10 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 1, + 1, + 7, + 5 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 9, + 1, + 15, + 5 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 1, + 9, + 7, + 15 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 9.5, + 17, + 9.5 + ], + "to": [ + 14, + 20, + 14 + ], + "faces": { + "north": { + "uv": [ + 10, + 6, + 15, + 10 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 1, + 1, + 7, + 5 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 9, + 1, + 15, + 5 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 10, + 6, + 16, + 10 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 9, + 9, + 15, + 15 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 9.5, + 17, + 2 + ], + "to": [ + 14, + 20, + 6.5 + ], + "faces": { + "north": { + "uv": [ + 1, + 1, + 7, + 5 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 9, + 1, + 15, + 5 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 10, + 6, + 16, + 10 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 10, + 6, + 16, + 10 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 9, + 1, + 15, + 7 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 0, + 16, + 7 + ], + "to": [ + 16, + 18, + 9 + ], + "faces": { + "north": { + "uv": [ + 0, + 7, + 16, + 9 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 4, + 14, + 6, + 16 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 7, + 16, + 9 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 4, + 14, + 6, + 16 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 0, + 7, + 16, + 9 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 0, + 7, + 16, + 9 + ], + "texture": "#2" + } + } + }, + { + "from": [ + 7, + 16, + 0 + ], + "to": [ + 9, + 18, + 16 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8, + 0, + 9 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 14, + 6, + 16 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 7, + 16, + 9 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 4, + 14, + 6, + 16 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 7, + 16, + 9 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 0, + 7, + 16, + 9 + ], + "rotation": 270, + "texture": "#2" + }, + "down": { + "uv": [ + 0, + 7, + 16, + 9 + ], + "rotation": 90, + "texture": "#2" + } + } + }, + { + "from": [ + 3.3, + 18, + 6 + ], + "to": [ + 7.3, + 22, + 10 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 8, + 0, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "texture": "#3" + } + } + }, + { + "from": [ + 6, + 18, + 3.3 + ], + "to": [ + 10, + 22, + 7.3 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8, + 0, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "rotation": 270, + "texture": "#3" + }, + "down": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "rotation": 90, + "texture": "#3" + } + } + }, + { + "from": [ + 6, + 18, + 8.3 + ], + "to": [ + 10, + 22, + 12.3 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8, + 0, + 7 + ] + }, + "faces": { + "north": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "rotation": 90, + "texture": "#3" + }, + "down": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "rotation": 270, + "texture": "#3" + } + } + }, + { + "from": [ + 7.7, + 18, + 6 + ], + "to": [ + 11.7, + 22, + 10 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 8, + 0, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 3, + 7, + 7, + 11 + ], + "texture": "#3" + } + } + }, + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 4, + 5, + 4 + ], + "faces": { + "north": { + "uv": [ + 12, + 0, + 16, + 5 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 12, + 0, + 16, + 5 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 12, + 0, + 16, + 5 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 12, + 0, + 16, + 5 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 0, + 0, + 4, + 4 + ], + "texture": "#4" + }, + "down": { + "uv": [ + 11, + 6, + 15, + 10 + ], + "texture": "#3" + } + } + }, + { + "from": [ + 12, + 0, + 0 + ], + "to": [ + 16, + 5, + 4 + ], + "faces": { + "north": { + "uv": [ + 12, + 0, + 16, + 5 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 12, + 0, + 16, + 5 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 12, + 0, + 16, + 5 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 12, + 0, + 16, + 5 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 12, + 0, + 16, + 4 + ], + "texture": "#4" + }, + "down": { + "uv": [ + 12, + 6, + 16, + 10 + ], + "texture": "#3" + } + } + }, + { + "from": [ + 12, + 0, + 12 + ], + "to": [ + 16, + 5, + 16 + ], + "faces": { + "north": { + "uv": [ + 12, + 0, + 16, + 5 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 12, + 0, + 16, + 5 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 12, + 0, + 16, + 5 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 12, + 0, + 16, + 5 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 12, + 12, + 16, + 16 + ], + "texture": "#4" + }, + "down": { + "uv": [ + 12, + 5, + 16, + 9 + ], + "texture": "#3" + } + } + }, + { + "from": [ + 0, + 0, + 12 + ], + "to": [ + 4, + 5, + 16 + ], + "faces": { + "north": { + "uv": [ + 12, + 0, + 16, + 5 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 12, + 0, + 16, + 5 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 12, + 0, + 16, + 5 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 12, + 0, + 16, + 5 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 0, + 12, + 4, + 16 + ], + "texture": "#4" + }, + "down": { + "uv": [ + 11, + 5, + 15, + 9 + ], + "texture": "#3" + } + } + }, + { + "from": [ + 26, + 24, + 2.5 + ], + "to": [ + 28, + 31, + 13.5 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 17, + 19, + 0 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 7 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 0, + 11, + 7 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 7 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 0, + 0, + 10, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 11 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 11 + ], + "texture": "#3" + } + } + } + ], + "display": { + "thirdperson_righthand": { + "translation": [ + 0, + 1.25, + 0.5 + ], + "scale": [ + 0.3, + 0.3, + 0.3 + ] + }, + "thirdperson_lefthand": { + "translation": [ + 0, + 1, + 0 + ], + "scale": [ + 0.3, + 0.3, + 0.3 + ] + }, + "firstperson_righthand": { + "rotation": [ + -15, + 19, + 0 + ], + "translation": [ + 0, + 0.75, + 0 + ], + "scale": [ + 0.3, + 0.3, + 0.3 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 26, + 0 + ], + "translation": [ + -0.25, + 1.75, + 0.25 + ], + "scale": [ + 0.3, + 0.3, + 0.3 + ] + }, + "ground": { + "translation": [ + 0, + 2.75, + 0 + ], + "scale": [ + 0.3, + 0.3, + 0.3 + ] + }, + "gui": { + "rotation": [ + 22, + -51, + 0 + ], + "translation": [ + 0, + -4, + 0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + }, + "head": { + "translation": [ + 0, + 10.25, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "fixed": { + "rotation": [ + 0, + -90, + 0 + ], + "translation": [ + 0, + 0, + -2.5 + ], + "scale": [ + 0.3, + 0.3, + 0.3 + ] + } + }, + "groups": [ + { + "name": "bone", + "origin": [ + -8, + 0, + -8 + ], + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 + ] + }, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38 + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/custom/purpleflag.json b/src/main/resources/assets/boss_tools/models/custom/purpleflag.json new file mode 100644 index 000000000..47af25750 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/custom/purpleflag.json @@ -0,0 +1,345 @@ +{ + "credit": "Made with Blockbench", + "parent": "flage", + "elements": [ + { + "from": [ + 13, + 1, + 7 + ], + "to": [ + 14, + 32, + 8 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 21, + 8, + 15 + ] + }, + "faces": { + "north": { + "uv": [ + 1, + 1, + 2, + 15 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 1, + 1, + 2, + 15 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 1, + 1, + 2, + 15 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 1, + 1, + 2, + 15 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 12.5, + 0, + 6.5 + ], + "to": [ + 14.5, + 1, + 8.5 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 22, + 8, + 15 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 2, + 1 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 0, + 2, + 1 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 2, + 1 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 2, + 1 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#0" + } + } + }, + { + "from": [ + -1, + 23, + 7 + ], + "to": [ + 13, + 31, + 8 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 20, + 23, + 15 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 14, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 8 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 14, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 0, + 14, + 1 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 0, + 0, + 14, + 1 + ], + "texture": "#1" + } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + 70, + -112, + 0 + ], + "translation": [ + 1.5, + 4.25, + -1.25 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + 65, + 45, + 0 + ], + "translation": [ + 3.5, + 2.25, + -1.25 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + -61, + 0 + ], + "translation": [ + 1.5, + 0.75, + 0 + ], + "scale": [ + 0.47695, + 0.72695, + 0.6 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 95, + 0 + ], + "translation": [ + 1.25, + 1.25, + 0 + ], + "scale": [ + 0.6, + 0.6, + 0.6 + ] + }, + "ground": { + "translation": [ + 0, + 2.75, + 0 + ], + "scale": [ + 0.3, + 0.3, + 0.3 + ] + }, + "gui": { + "rotation": [ + 0, + -180, + 0 + ], + "translation": [ + 0, + -4, + 0 + ], + "scale": [ + 0.5, + 0.5, + 1 + ] + }, + "head": { + "translation": [ + -4, + 13.75, + 1 + ] + }, + "fixed": { + "translation": [ + 0, + -3.25, + 0 + ], + "scale": [ + 0.5, + 0.5, + 1 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/custom/template_torch.json b/src/main/resources/assets/boss_tools/models/custom/template_torch.json new file mode 100644 index 000000000..efa668e85 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/custom/template_torch.json @@ -0,0 +1,24 @@ +{ + "credit": "Made with Blockbench", + "parent": "template_torch", + "ambientocclusion": false, + "textures": { + "2": "boss_tools:blocks/coal_torch", + "particle": "boss_tools:blocks/coal_torch" + }, + "elements": [ + { + "from": [7, 0, 7], + "to": [9, 10, 9], + "shade": false, + "faces": { + "north": {"uv": [7, 6, 9, 16], "texture": "#2"}, + "east": {"uv": [7, 6, 9, 16], "texture": "#2"}, + "south": {"uv": [7, 6, 9, 16], "texture": "#2"}, + "west": {"uv": [7, 6, 9, 16], "texture": "#2"}, + "up": {"uv": [7, 6, 9, 8], "texture": "#2"}, + "down": {"uv": [7, 13, 9, 15], "texture": "#2"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/custom/template_torch_wall.json b/src/main/resources/assets/boss_tools/models/custom/template_torch_wall.json new file mode 100644 index 000000000..e1fbb3b67 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/custom/template_torch_wall.json @@ -0,0 +1,24 @@ +{ + "credit": "Made with Blockbench", + "ambientocclusion": false, + "textures": { + "2": "boss_tools:blocks/torch", + "particle": "boss_tools:blocks/torch" + }, + "elements": [ + { + "from": [-1, 3.5, 7], + "to": [1, 13.5, 9], + "shade": false, + "rotation": {"angle": -22.5, "axis": "z", "origin": [0, 3.5, 8]}, + "faces": { + "north": {"uv": [7, 6, 9, 16], "texture": "#2"}, + "east": {"uv": [7, 6, 9, 16], "texture": "#2"}, + "south": {"uv": [7, 6, 9, 16], "texture": "#2"}, + "west": {"uv": [7, 6, 9, 16], "texture": "#2"}, + "up": {"uv": [7, 6, 9, 8], "texture": "#2"}, + "down": {"uv": [7, 13, 9, 15], "texture": "#2"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/custom/water_pump.json b/src/main/resources/assets/boss_tools/models/custom/water_pump.json new file mode 100644 index 000000000..a1089e6fc --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/custom/water_pump.json @@ -0,0 +1,191 @@ +{ + "credit": "Made with Blockbench", + "parent": "water_pump", + "texture_size": [32, 32], + "textures": { + "0": "boss_tools:blocks/water_pump", + "particle": "boss_tools:blocks/water_pump" + }, + "elements": [ + { + "from": [5.5, 0, 5.5], + "to": [10.5, 1, 10.5], + "faces": { + "north": {"uv": [9.5, 8, 12, 8.5], "texture": "#0"}, + "east": {"uv": [9.5, 8.5, 12, 9], "texture": "#0"}, + "south": {"uv": [9.5, 9, 12, 9.5], "texture": "#0"}, + "west": {"uv": [9.5, 9.5, 12, 10], "texture": "#0"}, + "up": {"uv": [4.5, 6.5, 2, 4], "texture": "#0"}, + "down": {"uv": [7, 4, 4.5, 6.5], "texture": "#0"} + } + }, + { + "from": [5.5, 13, 5.5], + "to": [10.5, 16, 10.5], + "faces": { + "north": {"uv": [9.5, 2, 12, 3.5], "texture": "#0"}, + "east": {"uv": [9.5, 3.5, 12, 5], "texture": "#0"}, + "south": {"uv": [9.5, 5, 12, 6.5], "texture": "#0"}, + "west": {"uv": [9.5, 6.5, 12, 8], "texture": "#0"}, + "up": {"uv": [9.5, 7.5, 7, 5], "texture": "#0"}, + "down": {"uv": [9.5, 7.5, 7, 10], "texture": "#0"} + } + }, + { + "from": [6, 1, 6], + "to": [10, 7, 10], + "faces": { + "north": {"uv": [0, 1, 2, 4], "texture": "#0"}, + "east": {"uv": [2, 1, 4, 4], "texture": "#0"}, + "south": {"uv": [0, 5, 2, 8], "texture": "#0"}, + "west": {"uv": [4, 1, 6, 4], "texture": "#0"}, + "up": {"uv": [2, 10, 0, 8], "texture": "#0"}, + "down": {"uv": [10.5, 0, 8.5, 2], "texture": "#0"} + } + }, + { + "from": [6, 7, 6], + "to": [10, 13, 10], + "faces": { + "north": {"uv": [0, 0, 2, 3], "texture": "#0"}, + "east": {"uv": [2, 0, 4, 3], "texture": "#0"}, + "south": {"uv": [0, 4, 2, 7], "texture": "#0"}, + "west": {"uv": [4, 0, 6, 3], "texture": "#0"}, + "up": {"uv": [2, 10, 0, 8], "texture": "#0"}, + "down": {"uv": [10.5, 0, 8.5, 2], "texture": "#0"} + } + }, + { + "from": [10, 7.5, 7.5], + "to": [11, 8.5, 8.5], + "faces": { + "north": {"uv": [6.5, 2.5, 7, 3], "texture": "#0"}, + "east": {"uv": [6, 2.5, 6.5, 3], "texture": "#0"}, + "south": {"uv": [6, 3, 6.5, 3.5], "texture": "#0"}, + "west": {"uv": [6, 3.5, 6.5, 4], "texture": "#0"}, + "up": {"uv": [7, 3.5, 6.5, 3], "rotation": 90, "texture": "#0"}, + "down": {"uv": [7, 3.5, 6.5, 4], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [11, 5.5, 5.5], + "to": [11, 10.5, 10.5], + "faces": { + "north": {"uv": [0, 0, 0, 2.5], "texture": "#0"}, + "east": {"uv": [4.5, 6.5, 7, 9], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 2.5], "texture": "#0"}, + "west": {"uv": [4.5, 6.5, 7, 9], "texture": "#0"}, + "up": {"uv": [2.5, 0, 0, 0], "rotation": 90, "texture": "#0"}, + "down": {"uv": [2.5, 0, 0, 0], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [5.5, 5.5, 0], + "to": [10.5, 10.5, 1], + "faces": { + "north": {"uv": [2, 6.5, 4.5, 9], "texture": "#0"}, + "east": {"uv": [6, 9, 6.5, 11.5], "texture": "#0"}, + "south": {"uv": [6, 0, 8.5, 2.5], "texture": "#0"}, + "west": {"uv": [6.5, 9, 7, 11.5], "texture": "#0"}, + "up": {"uv": [0.5, 12.5, 0, 10], "rotation": 90, "texture": "#0"}, + "down": {"uv": [1, 10, 0.5, 12.5], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [6, 6, 5], + "to": [10, 10, 6], + "faces": { + "north": {"uv": [4, 9, 6, 11], "texture": "#0"}, + "east": {"uv": [1, 10, 1.5, 12], "texture": "#0"}, + "south": {"uv": [2, 9, 4, 11], "texture": "#0"}, + "west": {"uv": [1.5, 10, 2, 12], "texture": "#0"}, + "up": {"uv": [7.5, 12, 7, 10], "rotation": 90, "texture": "#0"}, + "down": {"uv": [8, 10, 7.5, 12], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [6, 6, 4], + "to": [10, 10, 5], + "faces": { + "north": {"uv": [4, 9, 6, 11], "texture": "#0"}, + "east": {"uv": [1, 10, 1.5, 12], "texture": "#0"}, + "south": {"uv": [2, 9, 4, 11], "texture": "#0"}, + "west": {"uv": [1.5, 10, 2, 12], "texture": "#0"}, + "up": {"uv": [7.5, 12, 7, 10], "rotation": 90, "texture": "#0"}, + "down": {"uv": [8, 10, 7.5, 12], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [6, 6, 3], + "to": [10, 10, 4], + "faces": { + "north": {"uv": [4, 9, 6, 11], "texture": "#0"}, + "east": {"uv": [1, 10, 1.5, 12], "texture": "#0"}, + "south": {"uv": [2, 9, 4, 11], "texture": "#0"}, + "west": {"uv": [1.5, 10, 2, 12], "texture": "#0"}, + "up": {"uv": [7.5, 12, 7, 10], "rotation": 90, "texture": "#0"}, + "down": {"uv": [8, 10, 7.5, 12], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [6, 6, 2], + "to": [10, 10, 3], + "faces": { + "north": {"uv": [4, 9, 6, 11], "texture": "#0"}, + "east": {"uv": [1, 10, 1.5, 12], "texture": "#0"}, + "south": {"uv": [2, 9, 4, 11], "texture": "#0"}, + "west": {"uv": [1.5, 10, 2, 12], "texture": "#0"}, + "up": {"uv": [7.5, 12, 7, 10], "rotation": 90, "texture": "#0"}, + "down": {"uv": [8, 10, 7.5, 12], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [6, 6, 1], + "to": [10, 10, 2], + "faces": { + "north": {"uv": [4, 9, 6, 11], "texture": "#0"}, + "east": {"uv": [1, 10, 1.5, 12], "texture": "#0"}, + "south": {"uv": [2, 9, 4, 11], "texture": "#0"}, + "west": {"uv": [1.5, 10, 2, 12], "texture": "#0"}, + "up": {"uv": [7.5, 12, 7, 10], "rotation": 90, "texture": "#0"}, + "down": {"uv": [8, 10, 7.5, 12], "rotation": 270, "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 0.75, 1], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 0.75, 1], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 125, 0], + "translation": [1.25, 2.5, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 133, 0], + "translation": [1.5, 2.5, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 4.5, 0], + "scale": [0.5, 0.5, 0.5] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.8, 0.8, 0.8] + }, + "head": { + "translation": [0, 14.5, 0] + }, + "fixed": { + "rotation": [0, 90, 0] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/custom/yellowflag.json b/src/main/resources/assets/boss_tools/models/custom/yellowflag.json new file mode 100644 index 000000000..47af25750 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/custom/yellowflag.json @@ -0,0 +1,345 @@ +{ + "credit": "Made with Blockbench", + "parent": "flage", + "elements": [ + { + "from": [ + 13, + 1, + 7 + ], + "to": [ + 14, + 32, + 8 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 21, + 8, + 15 + ] + }, + "faces": { + "north": { + "uv": [ + 1, + 1, + 2, + 15 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 1, + 1, + 2, + 15 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 1, + 1, + 2, + 15 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 1, + 1, + 2, + 15 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 12.5, + 0, + 6.5 + ], + "to": [ + 14.5, + 1, + 8.5 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 22, + 8, + 15 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 2, + 1 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 0, + 2, + 1 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 2, + 1 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 2, + 1 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#0" + } + } + }, + { + "from": [ + -1, + 23, + 7 + ], + "to": [ + 13, + 31, + 8 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 20, + 23, + 15 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 14, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 8 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 14, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 0, + 14, + 1 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 0, + 0, + 14, + 1 + ], + "texture": "#1" + } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + 70, + -112, + 0 + ], + "translation": [ + 1.5, + 4.25, + -1.25 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + 65, + 45, + 0 + ], + "translation": [ + 3.5, + 2.25, + -1.25 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + -61, + 0 + ], + "translation": [ + 1.5, + 0.75, + 0 + ], + "scale": [ + 0.47695, + 0.72695, + 0.6 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 95, + 0 + ], + "translation": [ + 1.25, + 1.25, + 0 + ], + "scale": [ + 0.6, + 0.6, + 0.6 + ] + }, + "ground": { + "translation": [ + 0, + 2.75, + 0 + ], + "scale": [ + 0.3, + 0.3, + 0.3 + ] + }, + "gui": { + "rotation": [ + 0, + -180, + 0 + ], + "translation": [ + 0, + -4, + 0 + ], + "scale": [ + 0.5, + 0.5, + 1 + ] + }, + "head": { + "translation": [ + -4, + 13.75, + 1 + ] + }, + "fixed": { + "translation": [ + 0, + -3.25, + 0 + ], + "scale": [ + 0.5, + 0.5, + 1 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/alien.json b/src/main/resources/assets/boss_tools/models/item/alien.json new file mode 100644 index 000000000..7a2c6da81 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/alien.json @@ -0,0 +1,3 @@ +{ + "parent": "item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/alien_spawn_egg.json b/src/main/resources/assets/boss_tools/models/item/alien_spawn_egg.json new file mode 100644 index 000000000..7a2c6da81 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/alien_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/alien_spit_entity.json b/src/main/resources/assets/boss_tools/models/item/alien_spit_entity.json new file mode 100644 index 000000000..1c369a6b1 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/alien_spit_entity.json @@ -0,0 +1,76 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/item_ice_shard" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ + -80, + 260, + -40 + ], + "translation": [ + -1, + -2, + 2.5 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + -80, + -280, + 40 + ], + "translation": [ + -1, + -2, + 2.5 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + -90, + 25 + ], + "translation": [ + 1.13, + 3.2, + 1.13 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 90, + -25 + ], + "translation": [ + 1.13, + 3.2, + 1.13 + ], + "scale": [ + 1, + 1, + 1 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/alien_zombie_spawn_egg.json b/src/main/resources/assets/boss_tools/models/item/alien_zombie_spawn_egg.json new file mode 100644 index 000000000..7a2c6da81 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/alien_zombie_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/blast_furnace.json b/src/main/resources/assets/boss_tools/models/item/blast_furnace.json new file mode 100644 index 000000000..28ca8a87e --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/blast_furnace.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/blast_furnace", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/blue_iron_plating_block.json b/src/main/resources/assets/boss_tools/models/item/blue_iron_plating_block.json new file mode 100644 index 000000000..6be9e17e6 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/blue_iron_plating_block.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/blue_iron_plating_block", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/chesse.json b/src/main/resources/assets/boss_tools/models/item/chesse.json new file mode 100644 index 000000000..9fc76c4f8 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/chesse.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/item_chesse" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/coal_generator.json b/src/main/resources/assets/boss_tools/models/item/coal_generator.json new file mode 100644 index 000000000..2998dc609 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/coal_generator.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/coal_generator", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/coal_lantern.json b/src/main/resources/assets/boss_tools/models/item/coal_lantern.json new file mode 100644 index 000000000..c99ae4a9b --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/coal_lantern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "boss_tools:items/coal_lantern" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/coal_torch.json b/src/main/resources/assets/boss_tools/models/item/coal_torch.json new file mode 100644 index 000000000..ba5223479 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/coal_torch.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/coal_torch" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/compressed_desh.json b/src/main/resources/assets/boss_tools/models/item/compressed_desh.json new file mode 100644 index 000000000..59efb51e2 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/compressed_desh.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/compressed_desh" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/compressed_silicon.json b/src/main/resources/assets/boss_tools/models/item/compressed_silicon.json new file mode 100644 index 000000000..e6febce2d --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/compressed_silicon.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/compressed_silicon" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/compressed_steel.json b/src/main/resources/assets/boss_tools/models/item/compressed_steel.json new file mode 100644 index 000000000..c5863a9d8 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/compressed_steel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/compressed_steel" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/compressor.json b/src/main/resources/assets/boss_tools/models/item/compressor.json new file mode 100644 index 000000000..b8de03aa7 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/compressor.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/compressor", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/cracked_moon_brick_slab.json b/src/main/resources/assets/boss_tools/models/item/cracked_moon_brick_slab.json new file mode 100644 index 000000000..3a3a4e2b3 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/cracked_moon_brick_slab.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/cracked_moon_brick_slab", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/cracked_moon_brick_stairs.json b/src/main/resources/assets/boss_tools/models/item/cracked_moon_brick_stairs.json new file mode 100644 index 000000000..ff7aba456 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/cracked_moon_brick_stairs.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/cracked_moon_brick_stairs", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/cracked_moon_bricks.json b/src/main/resources/assets/boss_tools/models/item/cracked_moon_bricks.json new file mode 100644 index 000000000..2f034f85f --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/cracked_moon_bricks.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/cracked_moon_bricks", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/desh_block.json b/src/main/resources/assets/boss_tools/models/item/desh_block.json new file mode 100644 index 000000000..d0a570fa2 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/desh_block.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/desh_block", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/desh_ingot.json b/src/main/resources/assets/boss_tools/models/item/desh_ingot.json new file mode 100644 index 000000000..42027ebe3 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/desh_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/item_desh" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/desh_nugget.json b/src/main/resources/assets/boss_tools/models/item/desh_nugget.json new file mode 100644 index 000000000..284b174bd --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/desh_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/desh_nugget" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/desh_plate.json b/src/main/resources/assets/boss_tools/models/item/desh_plate.json new file mode 100644 index 000000000..0667123ee --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/desh_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/desh_plate" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/diamond_engine.json b/src/main/resources/assets/boss_tools/models/item/diamond_engine.json new file mode 100644 index 000000000..d96287155 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/diamond_engine.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/engine_diamond" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/diamond_tank.json b/src/main/resources/assets/boss_tools/models/item/diamond_tank.json new file mode 100644 index 000000000..be6ccdc5d --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/diamond_tank.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/tank_diamond" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/engine_fan.json b/src/main/resources/assets/boss_tools/models/item/engine_fan.json new file mode 100644 index 000000000..321965d4e --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/engine_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/fan" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/engine_frame.json b/src/main/resources/assets/boss_tools/models/item/engine_frame.json new file mode 100644 index 000000000..cc96cdb15 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/engine_frame.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/engine_frame" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/flag.json b/src/main/resources/assets/boss_tools/models/item/flag.json new file mode 100644 index 000000000..5bcbec2b9 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/flag.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/flag", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/flag_blue.json b/src/main/resources/assets/boss_tools/models/item/flag_blue.json new file mode 100644 index 000000000..0c9006c72 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/flag_blue.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/flag_blue", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/flag_brown.json b/src/main/resources/assets/boss_tools/models/item/flag_brown.json new file mode 100644 index 000000000..61a111873 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/flag_brown.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/flag_brown", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/flag_cyan.json b/src/main/resources/assets/boss_tools/models/item/flag_cyan.json new file mode 100644 index 000000000..2384cd4db --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/flag_cyan.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/flag_cyan", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/flag_gray.json b/src/main/resources/assets/boss_tools/models/item/flag_gray.json new file mode 100644 index 000000000..8b2a52ca7 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/flag_gray.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/flag_gray", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/flag_green.json b/src/main/resources/assets/boss_tools/models/item/flag_green.json new file mode 100644 index 000000000..2f8303fa0 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/flag_green.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/flag_green", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/flag_light_blue.json b/src/main/resources/assets/boss_tools/models/item/flag_light_blue.json new file mode 100644 index 000000000..7dc136f60 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/flag_light_blue.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/flag_light_blue", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/flag_lime.json b/src/main/resources/assets/boss_tools/models/item/flag_lime.json new file mode 100644 index 000000000..c493299ca --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/flag_lime.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/flag_lime", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/flag_magenta.json b/src/main/resources/assets/boss_tools/models/item/flag_magenta.json new file mode 100644 index 000000000..f4341fa43 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/flag_magenta.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/flag_magenta", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/flag_orange.json b/src/main/resources/assets/boss_tools/models/item/flag_orange.json new file mode 100644 index 000000000..4efd58165 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/flag_orange.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/flag_orange", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/flag_pink.json b/src/main/resources/assets/boss_tools/models/item/flag_pink.json new file mode 100644 index 000000000..fce9dc94b --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/flag_pink.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/flag_pink", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/flag_purple.json b/src/main/resources/assets/boss_tools/models/item/flag_purple.json new file mode 100644 index 000000000..0ecb57a02 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/flag_purple.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/flag_purple", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/flag_red.json b/src/main/resources/assets/boss_tools/models/item/flag_red.json new file mode 100644 index 000000000..c8a3faed0 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/flag_red.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/flag_red", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/flag_yellow.json b/src/main/resources/assets/boss_tools/models/item/flag_yellow.json new file mode 100644 index 000000000..b1c0a5f03 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/flag_yellow.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/flag_yellow", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/fuel_barrel.json b/src/main/resources/assets/boss_tools/models/item/fuel_barrel.json new file mode 100644 index 000000000..5801a6f18 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/fuel_barrel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/item_barrel_fuel" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/fuel_bucket.json b/src/main/resources/assets/boss_tools/models/item/fuel_bucket.json new file mode 100644 index 000000000..f14937fdc --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/fuel_bucket.json @@ -0,0 +1,5 @@ +{ + "parent": "forge:item/bucket_drip", + "loader": "forge:bucket", + "fluid": "boss_tools:fuel" +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/fuel_refinery.json b/src/main/resources/assets/boss_tools/models/item/fuel_refinery.json new file mode 100644 index 000000000..39fdbbff2 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/fuel_refinery.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/fuel_refinery", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/golden_engine.json b/src/main/resources/assets/boss_tools/models/item/golden_engine.json new file mode 100644 index 000000000..41cc0c29e --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/golden_engine.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/engine_gold" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/golden_tank.json b/src/main/resources/assets/boss_tools/models/item/golden_tank.json new file mode 100644 index 000000000..dedcb0a4c --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/golden_tank.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/tank_gold" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/hammer.json b/src/main/resources/assets/boss_tools/models/item/hammer.json new file mode 100644 index 000000000..399ee35cb --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/hammer.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "boss_tools:items/item_hammer" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/ice_shard.json b/src/main/resources/assets/boss_tools/models/item/ice_shard.json new file mode 100644 index 000000000..5fe0d6af8 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/ice_shard.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/item_ice_shard" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/infernal_spire_block.json b/src/main/resources/assets/boss_tools/models/item/infernal_spire_block.json new file mode 100644 index 000000000..ea071ea92 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/infernal_spire_block.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/infernal_spire_block", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/iron_engine.json b/src/main/resources/assets/boss_tools/models/item/iron_engine.json new file mode 100644 index 000000000..6c050a644 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/iron_engine.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/engine_iron" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/iron_mark_block.json b/src/main/resources/assets/boss_tools/models/item/iron_mark_block.json new file mode 100644 index 000000000..211aa462c --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/iron_mark_block.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/iron_mark_block", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/iron_plate.json b/src/main/resources/assets/boss_tools/models/item/iron_plate.json new file mode 100644 index 000000000..0c29c1ff5 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/iron_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/iron_plate" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/iron_plating_block.json b/src/main/resources/assets/boss_tools/models/item/iron_plating_block.json new file mode 100644 index 000000000..d948c27e9 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/iron_plating_block.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/iron_plating_block", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/iron_stick.json b/src/main/resources/assets/boss_tools/models/item/iron_stick.json new file mode 100644 index 000000000..71c6a7681 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/iron_stick.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "boss_tools:items/item_iron_stick" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/iron_tank.json b/src/main/resources/assets/boss_tools/models/item/iron_tank.json new file mode 100644 index 000000000..1bad870b7 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/iron_tank.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/tank_iron" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/mars_diamond_ore.json b/src/main/resources/assets/boss_tools/models/item/mars_diamond_ore.json new file mode 100644 index 000000000..5dfec11e0 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/mars_diamond_ore.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/mars_diamond_ore", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/mars_ice_shard_ore.json b/src/main/resources/assets/boss_tools/models/item/mars_ice_shard_ore.json new file mode 100644 index 000000000..63abf298c --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/mars_ice_shard_ore.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/mars_ice_shard_ore", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/mars_iron_ore.json b/src/main/resources/assets/boss_tools/models/item/mars_iron_ore.json new file mode 100644 index 000000000..791770fa2 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/mars_iron_ore.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/mars_iron_ore", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/mars_sand.json b/src/main/resources/assets/boss_tools/models/item/mars_sand.json new file mode 100644 index 000000000..ba932b6a5 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/mars_sand.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/mars_sand", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/mars_silicon_ore.json b/src/main/resources/assets/boss_tools/models/item/mars_silicon_ore.json new file mode 100644 index 000000000..bbfc58590 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/mars_silicon_ore.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/mars_silicon_ore", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/mars_stone.json b/src/main/resources/assets/boss_tools/models/item/mars_stone.json new file mode 100644 index 000000000..0d4b9d626 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/mars_stone.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/mars_stone", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/mercury_cobblestone.json b/src/main/resources/assets/boss_tools/models/item/mercury_cobblestone.json new file mode 100644 index 000000000..15d5184ce --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/mercury_cobblestone.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/mercury_cobblestone", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/mercury_iron_ore.json b/src/main/resources/assets/boss_tools/models/item/mercury_iron_ore.json new file mode 100644 index 000000000..bbc479563 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/mercury_iron_ore.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/mercury_iron_ore", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/mercury_stone.json b/src/main/resources/assets/boss_tools/models/item/mercury_stone.json new file mode 100644 index 000000000..ca4040d2b --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/mercury_stone.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/mercury_stone", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/mogler_spawn_egg.json b/src/main/resources/assets/boss_tools/models/item/mogler_spawn_egg.json new file mode 100644 index 000000000..7a2c6da81 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/mogler_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/molten_desh_bucket.json b/src/main/resources/assets/boss_tools/models/item/molten_desh_bucket.json new file mode 100644 index 000000000..9e695b7e0 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/molten_desh_bucket.json @@ -0,0 +1,5 @@ +{ + "parent": "forge:item/bucket_drip", + "loader": "forge:bucket", + "fluid": "tconstruct:molten_desh" +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/molten_silicon_bucket.json b/src/main/resources/assets/boss_tools/models/item/molten_silicon_bucket.json new file mode 100644 index 000000000..156eb089a --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/molten_silicon_bucket.json @@ -0,0 +1,5 @@ +{ + "parent": "forge:item/bucket_drip", + "loader": "forge:bucket", + "fluid": "tconstruct:molten_silicon" +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/moon_brick_slab.json b/src/main/resources/assets/boss_tools/models/item/moon_brick_slab.json new file mode 100644 index 000000000..7875d9376 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/moon_brick_slab.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/moon_brick_slab", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/moon_brick_stairs.json b/src/main/resources/assets/boss_tools/models/item/moon_brick_stairs.json new file mode 100644 index 000000000..60e7905e6 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/moon_brick_stairs.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/moon_brick_stairs", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/moon_bricks.json b/src/main/resources/assets/boss_tools/models/item/moon_bricks.json new file mode 100644 index 000000000..f94d7157a --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/moon_bricks.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/moon_bricks", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/moon_cheese_ore.json b/src/main/resources/assets/boss_tools/models/item/moon_cheese_ore.json new file mode 100644 index 000000000..0a0ce15fe --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/moon_cheese_ore.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/moon_cheese_ore", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/moon_desh_ore.json b/src/main/resources/assets/boss_tools/models/item/moon_desh_ore.json new file mode 100644 index 000000000..a9a512834 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/moon_desh_ore.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/moon_desh_ore", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/moon_glowstone_ore.json b/src/main/resources/assets/boss_tools/models/item/moon_glowstone_ore.json new file mode 100644 index 000000000..f7568cd09 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/moon_glowstone_ore.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/moon_glowstone_ore", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/moon_iron_ore.json b/src/main/resources/assets/boss_tools/models/item/moon_iron_ore.json new file mode 100644 index 000000000..52f599ea2 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/moon_iron_ore.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/moon_iron_ore", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/moon_sand.json b/src/main/resources/assets/boss_tools/models/item/moon_sand.json new file mode 100644 index 000000000..08cea802a --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/moon_sand.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/moon_sand", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/moon_stone.json b/src/main/resources/assets/boss_tools/models/item/moon_stone.json new file mode 100644 index 000000000..6e42d52c3 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/moon_stone.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/moon_stone", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/nasa_workbench.json b/src/main/resources/assets/boss_tools/models/item/nasa_workbench.json new file mode 100644 index 000000000..97b7c2c7b --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/nasa_workbench.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/nasa_workbench", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/netherite_oxygen_mask.json b/src/main/resources/assets/boss_tools/models/item/netherite_oxygen_mask.json new file mode 100644 index 000000000..70a3bb345 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/netherite_oxygen_mask.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/netherite_oxygen_mask" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/netherite_space_boots.json b/src/main/resources/assets/boss_tools/models/item/netherite_space_boots.json new file mode 100644 index 000000000..de487059f --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/netherite_space_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/netherite_space_boots" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/netherite_space_pants.json b/src/main/resources/assets/boss_tools/models/item/netherite_space_pants.json new file mode 100644 index 000000000..b825257f8 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/netherite_space_pants.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/netherite_space_pants" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/netherite_space_suit.json b/src/main/resources/assets/boss_tools/models/item/netherite_space_suit.json new file mode 100644 index 000000000..bf0ef081a --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/netherite_space_suit.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/netherite_space_suit" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/oil_bucket.json b/src/main/resources/assets/boss_tools/models/item/oil_bucket.json new file mode 100644 index 000000000..5fd84a2eb --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/oil_bucket.json @@ -0,0 +1,5 @@ +{ + "parent": "forge:item/bucket_drip", + "loader": "forge:bucket", + "fluid": "boss_tools:oil" +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/oxygen_bubble_distributor.json b/src/main/resources/assets/boss_tools/models/item/oxygen_bubble_distributor.json new file mode 100644 index 000000000..814827e6e --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/oxygen_bubble_distributor.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/oxygen_bubble_distributor", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/oxygen_gear.json b/src/main/resources/assets/boss_tools/models/item/oxygen_gear.json new file mode 100644 index 000000000..40a67b6aa --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/oxygen_gear.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/item_oxygen_gear" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/oxygen_loader.json b/src/main/resources/assets/boss_tools/models/item/oxygen_loader.json new file mode 100644 index 000000000..d5ed6b08a --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/oxygen_loader.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/oxygen_loader", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/oxygen_mask.json b/src/main/resources/assets/boss_tools/models/item/oxygen_mask.json new file mode 100644 index 000000000..20efd90a2 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/oxygen_mask.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/oxygenmask3" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/oxygen_tank.json b/src/main/resources/assets/boss_tools/models/item/oxygen_tank.json new file mode 100644 index 000000000..b27794f45 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/oxygen_tank.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/item_tank_oxygen" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/pygro_spawn_egg.json b/src/main/resources/assets/boss_tools/models/item/pygro_spawn_egg.json new file mode 100644 index 000000000..7a2c6da81 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/pygro_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/rocket_fin.json b/src/main/resources/assets/boss_tools/models/item/rocket_fin.json new file mode 100644 index 000000000..0394354ef --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/rocket_fin.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/item_fin" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/rocket_launch_pad.json b/src/main/resources/assets/boss_tools/models/item/rocket_launch_pad.json new file mode 100644 index 000000000..61379314d --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/rocket_launch_pad.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/rocket_launch_pad", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/rocket_nose_cone.json b/src/main/resources/assets/boss_tools/models/item/rocket_nose_cone.json new file mode 100644 index 000000000..91710d62e --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/rocket_nose_cone.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/rocket_nose_cone" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/rocket_t1.json b/src/main/resources/assets/boss_tools/models/item/rocket_t1.json new file mode 100644 index 000000000..e8da7a5d3 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/rocket_t1.json @@ -0,0 +1,134 @@ +{ + "forge_marker": 1, + "parent": "forge:item/default", + "loader": "forge:obj", + "flip-v": true, + "model": "boss_tools:models/item/rocket_t1.obj", + "display": { + "thirdperson_righthand": { + "rotation": [ + -90, + 0, + -90 + ], + "translation": [ + -25, + 4.5, + -1 + ], + "scale": [ + 0.8, + 0.8, + 0.8 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + -90, + 0, + -90 + ], + "translation": [ + -25, + 4.5, + -13.5 + ], + "scale": [ + 0.8, + 0.8, + 0.8 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 0, + 90 + ], + "translation": [ + 3, + 25, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 0, + 90 + ], + "translation": [ + 3, + 15, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "ground": { + "translation": [ + 2, + 2, + 2 + ], + "scale": [ + 0.2, + 0.2, + 0.2 + ] + }, + "gui": { + "rotation": [ + -41, + -170, + -26 + ], + "translation": [ + -0.5, + -4.8, + 0 + ], + "scale": [ + 0.2, + 0.2, + 0.2 + ] + }, + "fixed": { + "translation": [ + 1, + -2.5, + 0 + ], + "scale": [ + 0.2, + 0.2, + 0.2 + ] + }, + "head": { + "translation": [ + 2.5, + 9, + 2.25 + ], + "scale": [ + 0.3, + 0.3, + 0.3 + ] + } + }, + "textures": { + "m_0": "boss_tools:vehicle_items/rocket_t1", + "particle": "boss_tools:vehicle_items/rocket_t1" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/rocket_t1.mtl b/src/main/resources/assets/boss_tools/models/item/rocket_t1.mtl new file mode 100644 index 000000000..915da500d --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/rocket_t1.mtl @@ -0,0 +1,7 @@ +newmtl m_0 +Ka 0.0 0.0 0.0 +Kd 0.8 0.8 0.8 +Ks 0.0 0.0 0.0 +map_Kd boss_tools:vehicle_items/rocket_t1 +Ns 0.0 +d 1.0 \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/rocket_t1.obj b/src/main/resources/assets/boss_tools/models/item/rocket_t1.obj new file mode 100644 index 000000000..a2cf352cf --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/rocket_t1.obj @@ -0,0 +1,2847 @@ +mtllib rocket_t1.mtl +o cube +v -0.750000 1.250000 -0.062500 +v -0.750000 1.062500 -0.062500 +v -0.750000 1.250000 0.062500 +v -0.750000 1.062500 0.062500 +v -0.562500 1.250000 0.062500 +v -0.562500 1.062500 0.062500 +v -0.562500 1.250000 -0.062500 +v -0.562500 1.062500 -0.062500 +vt 0.000061 0.339783 +vt 0.000061 0.328186 +vt 0.007751 0.339783 +vt 0.007751 0.328186 +vt 0.019592 0.339783 +vt 0.019592 0.328186 +vt 0.027283 0.339783 +vt 0.027283 0.328186 +vt 0.019470 0.339905 +vt 0.019470 0.347595 +vt 0.007874 0.339905 +vt 0.007874 0.347595 +vt 0.031189 0.347595 +vt 0.031189 0.339905 +vt 0.019592 0.347595 +vt 0.019592 0.339905 +vt 0.027405 0.339783 +vt 0.027405 0.328186 +vt 0.039001 0.339783 +vt 0.039001 0.328186 +vt 0.007874 0.339783 +vt 0.007874 0.328186 +vt 0.019470 0.339783 +vt 0.019470 0.328186 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +usemtl m_0 +s 1 +f 1/1/1 2/2/1 3/3/1 +f 2/2/1 4/4/1 3/3/1 +f 5/5/2 6/6/2 7/7/2 +f 6/6/2 8/8/2 7/7/2 +f 5/9/3 7/10/3 3/11/3 +f 7/10/3 1/12/3 3/11/3 +f 8/13/4 6/14/4 2/15/4 +f 6/14/4 4/16/4 2/15/4 +f 7/17/5 8/18/5 1/19/5 +f 8/18/5 2/20/5 1/19/5 +f 3/21/6 4/22/6 5/23/6 +f 4/22/6 6/24/6 5/23/6 +o cube.000 +v -0.557648 1.157260 -0.469259 +v -1.158450 0.761055 -1.070062 +v -0.389552 0.647461 -0.301164 +v -0.990355 0.251257 -0.901967 +v -0.301164 0.647461 -0.389552 +v -0.901967 0.251257 -0.990355 +v -0.469259 1.157260 -0.557647 +v -1.070062 0.761055 -1.158450 +vt 0.000061 0.546814 +vt 0.000061 0.488342 +vt 0.035095 0.546814 +vt 0.035095 0.488342 +vt 0.043030 0.546814 +vt 0.043030 0.488342 +vt 0.078064 0.546814 +vt 0.078064 0.488342 +vt 0.042908 0.546936 +vt 0.042908 0.581970 +vt 0.035217 0.546936 +vt 0.035217 0.581970 +vt 0.050720 0.581970 +vt 0.050720 0.546936 +vt 0.043030 0.581970 +vt 0.043030 0.546936 +vt 0.078186 0.546814 +vt 0.078186 0.488342 +vt 0.085876 0.546814 +vt 0.085876 0.488342 +vt 0.035217 0.546814 +vt 0.035217 0.488342 +vt 0.042908 0.546814 +vt 0.042908 0.488342 +vn -0.7071 0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.6409 0.4226 0.6409 +vn -0.6409 -0.4226 -0.6409 +vn -0.2988 0.9063 -0.2988 +vn 0.2988 -0.9063 0.2988 +usemtl m_0 +s 1 +f 9/25/7 10/26/7 11/27/7 +f 10/26/7 12/28/7 11/27/7 +f 13/29/8 14/30/8 15/31/8 +f 14/30/8 16/32/8 15/31/8 +f 13/33/9 15/34/9 11/35/9 +f 15/34/9 9/36/9 11/35/9 +f 16/37/10 14/38/10 10/39/10 +f 14/38/10 12/40/10 10/39/10 +f 15/41/11 16/42/11 9/43/11 +f 16/42/11 10/44/11 9/43/11 +f 11/45/12 12/46/12 13/47/12 +f 12/46/12 14/48/12 13/47/12 +o cube.001 +v -1.211549 1.000000 -1.034772 +v -1.211549 -0.062500 -1.034772 +v -1.034772 1.000000 -0.857995 +v -1.034772 -0.062500 -0.857995 +v -0.857995 1.000000 -1.034772 +v -0.857995 -0.062500 -1.034772 +v -1.034772 1.000000 -1.211548 +v -1.034772 -0.062500 -1.211549 +vt 0.000061 0.472595 +vt 0.000061 0.406311 +vt 0.015564 0.472595 +vt 0.015564 0.406311 +vt 0.031311 0.472595 +vt 0.031311 0.406311 +vt 0.046814 0.472595 +vt 0.046814 0.406311 +vt 0.031189 0.472717 +vt 0.031189 0.488220 +vt 0.015686 0.472717 +vt 0.015686 0.488220 +vt 0.046814 0.488220 +vt 0.046814 0.472717 +vt 0.031311 0.488220 +vt 0.031311 0.472717 +vt 0.046936 0.472595 +vt 0.046936 0.406311 +vt 0.062439 0.472595 +vt 0.062439 0.406311 +vt 0.015686 0.472595 +vt 0.015686 0.406311 +vt 0.031189 0.472595 +vt 0.031189 0.406311 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +usemtl m_0 +s 1 +f 17/49/13 18/50/13 19/51/13 +f 18/50/13 20/52/13 19/51/13 +f 21/53/14 22/54/14 23/55/14 +f 22/54/14 24/56/14 23/55/14 +f 21/57/15 23/58/15 19/59/15 +f 23/58/15 17/60/15 19/59/15 +f 24/61/16 22/62/16 18/63/16 +f 22/62/16 20/64/16 18/63/16 +f 23/65/17 24/66/17 17/67/17 +f 24/66/17 18/68/17 17/67/17 +f 19/69/18 20/70/18 21/71/18 +f 20/70/18 22/72/18 21/71/18 +o cube.002 +v -0.469259 1.157259 0.557648 +v -1.070062 0.761055 1.158450 +v -0.301164 0.647461 0.389552 +v -0.901967 0.251257 0.990355 +v -0.389552 0.647461 0.301164 +v -0.990355 0.251257 0.901967 +v -0.557648 1.157259 0.469259 +v -1.158450 0.761055 1.070062 +vt 0.000061 0.546814 +vt 0.000061 0.488342 +vt 0.035095 0.546814 +vt 0.035095 0.488342 +vt 0.043030 0.546814 +vt 0.043030 0.488342 +vt 0.078064 0.546814 +vt 0.078064 0.488342 +vt 0.042908 0.546936 +vt 0.042908 0.581970 +vt 0.035217 0.546936 +vt 0.035217 0.581970 +vt 0.050720 0.581970 +vt 0.050720 0.546936 +vt 0.043030 0.581970 +vt 0.043030 0.546936 +vt 0.078186 0.546814 +vt 0.078186 0.488342 +vt 0.085876 0.546814 +vt 0.085876 0.488342 +vt 0.035217 0.546814 +vt 0.035217 0.488342 +vt 0.042908 0.546814 +vt 0.042908 0.488342 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.6409 0.4226 -0.6409 +vn -0.6409 -0.4226 0.6409 +vn -0.2988 0.9063 0.2988 +vn 0.2988 -0.9063 -0.2988 +usemtl m_0 +s 1 +f 25/73/19 26/74/19 27/75/19 +f 26/74/19 28/76/19 27/75/19 +f 29/77/20 30/78/20 31/79/20 +f 30/78/20 32/80/20 31/79/20 +f 29/81/21 31/82/21 27/83/21 +f 31/82/21 25/84/21 27/83/21 +f 32/85/22 30/86/22 26/87/22 +f 30/86/22 28/88/22 26/87/22 +f 31/89/23 32/90/23 25/91/23 +f 32/90/23 26/92/23 25/91/23 +f 27/93/24 28/94/24 29/95/24 +f 28/94/24 30/96/24 29/95/24 +o cube.003 +v -1.034772 1.000000 1.211549 +v -1.034772 -0.062500 1.211549 +v -0.857995 1.000000 1.034772 +v -0.857995 -0.062500 1.034772 +v -1.034772 1.000000 0.857995 +v -1.034772 -0.062500 0.857995 +v -1.211549 1.000000 1.034772 +v -1.211549 -0.062500 1.034772 +vt 0.000061 0.472595 +vt 0.000061 0.406311 +vt 0.015564 0.472595 +vt 0.015564 0.406311 +vt 0.031311 0.472595 +vt 0.031311 0.406311 +vt 0.046814 0.472595 +vt 0.046814 0.406311 +vt 0.031189 0.472717 +vt 0.031189 0.488220 +vt 0.015686 0.472717 +vt 0.015686 0.488220 +vt 0.046814 0.488220 +vt 0.046814 0.472717 +vt 0.031311 0.488220 +vt 0.031311 0.472717 +vt 0.046936 0.472595 +vt 0.046936 0.406311 +vt 0.062439 0.472595 +vt 0.062439 0.406311 +vt 0.015686 0.472595 +vt 0.015686 0.406311 +vt 0.031189 0.472595 +vt 0.031189 0.406311 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +usemtl m_0 +s 1 +f 33/97/25 34/98/25 35/99/25 +f 34/98/25 36/100/25 35/99/25 +f 37/101/26 38/102/26 39/103/26 +f 38/102/26 40/104/26 39/103/26 +f 37/105/27 39/106/27 35/107/27 +f 39/106/27 33/108/27 35/107/27 +f 40/109/28 38/110/28 34/111/28 +f 38/110/28 36/112/28 34/111/28 +f 39/113/29 40/114/29 33/115/29 +f 40/114/29 34/116/29 33/115/29 +f 35/117/30 36/118/30 37/119/30 +f 36/118/30 38/120/30 37/119/30 +o cube.004 +v 0.469259 1.157260 -0.557647 +v 1.070062 0.761055 -1.158450 +v 0.301164 0.647461 -0.389552 +v 0.901967 0.251257 -0.990355 +v 0.389552 0.647461 -0.301164 +v 0.990355 0.251257 -0.901967 +v 0.557648 1.157260 -0.469259 +v 1.158450 0.761055 -1.070062 +vt 0.000061 0.546814 +vt 0.000061 0.488342 +vt 0.035095 0.546814 +vt 0.035095 0.488342 +vt 0.043030 0.546814 +vt 0.043030 0.488342 +vt 0.078064 0.546814 +vt 0.078064 0.488342 +vt 0.042908 0.546936 +vt 0.042908 0.581970 +vt 0.035217 0.546936 +vt 0.035217 0.581970 +vt 0.050720 0.581970 +vt 0.050720 0.546936 +vt 0.043030 0.581970 +vt 0.043030 0.546936 +vt 0.078186 0.546814 +vt 0.078186 0.488342 +vt 0.085876 0.546814 +vt 0.085876 0.488342 +vt 0.035217 0.546814 +vt 0.035217 0.488342 +vt 0.042908 0.546814 +vt 0.042908 0.488342 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +vn -0.6409 0.4226 0.6409 +vn 0.6409 -0.4226 -0.6409 +vn 0.2988 0.9063 -0.2988 +vn -0.2988 -0.9063 0.2988 +usemtl m_0 +s 1 +f 41/121/31 42/122/31 43/123/31 +f 42/122/31 44/124/31 43/123/31 +f 45/125/32 46/126/32 47/127/32 +f 46/126/32 48/128/32 47/127/32 +f 45/129/33 47/130/33 43/131/33 +f 47/130/33 41/132/33 43/131/33 +f 48/133/34 46/134/34 42/135/34 +f 46/134/34 44/136/34 42/135/34 +f 47/137/35 48/138/35 41/139/35 +f 48/138/35 42/140/35 41/139/35 +f 43/141/36 44/142/36 45/143/36 +f 44/142/36 46/144/36 45/143/36 +o cube.005 +v 1.034772 1.000000 -1.211548 +v 1.034772 -0.062500 -1.211549 +v 0.857995 1.000000 -1.034772 +v 0.857995 -0.062500 -1.034772 +v 1.034772 1.000000 -0.857995 +v 1.034772 -0.062500 -0.857995 +v 1.211549 1.000000 -1.034772 +v 1.211549 -0.062500 -1.034772 +vt 0.000061 0.472595 +vt 0.000061 0.406311 +vt 0.015564 0.472595 +vt 0.015564 0.406311 +vt 0.031311 0.472595 +vt 0.031311 0.406311 +vt 0.046814 0.472595 +vt 0.046814 0.406311 +vt 0.031189 0.472717 +vt 0.031189 0.488220 +vt 0.015686 0.472717 +vt 0.015686 0.488220 +vt 0.046814 0.488220 +vt 0.046814 0.472717 +vt 0.031311 0.488220 +vt 0.031311 0.472717 +vt 0.046936 0.472595 +vt 0.046936 0.406311 +vt 0.062439 0.472595 +vt 0.062439 0.406311 +vt 0.015686 0.472595 +vt 0.015686 0.406311 +vt 0.031189 0.472595 +vt 0.031189 0.406311 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +vn 0.0000 1.0000 0.0000 +vn -0.0000 -1.0000 -0.0000 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 -0.0000 0.7071 +usemtl m_0 +s 1 +f 49/145/37 50/146/37 51/147/37 +f 50/146/37 52/148/37 51/147/37 +f 53/149/38 54/150/38 55/151/38 +f 54/150/38 56/152/38 55/151/38 +f 53/153/39 55/154/39 51/155/39 +f 55/154/39 49/156/39 51/155/39 +f 56/157/40 54/158/40 50/159/40 +f 54/158/40 52/160/40 50/159/40 +f 55/161/41 56/162/41 49/163/41 +f 56/162/41 50/164/41 49/163/41 +f 51/165/42 52/166/42 53/167/42 +f 52/166/42 54/168/42 53/167/42 +o cube.006 +v 0.557648 1.157259 0.469259 +v 1.158450 0.761055 1.070062 +v 0.389552 0.647461 0.301164 +v 0.990355 0.251257 0.901967 +v 0.301164 0.647461 0.389552 +v 0.901967 0.251257 0.990355 +v 0.469259 1.157259 0.557648 +v 1.070062 0.761055 1.158450 +vt 0.000061 0.546814 +vt 0.000061 0.488342 +vt 0.035095 0.546814 +vt 0.035095 0.488342 +vt 0.043030 0.546814 +vt 0.043030 0.488342 +vt 0.078064 0.546814 +vt 0.078064 0.488342 +vt 0.042908 0.546936 +vt 0.042908 0.581970 +vt 0.035217 0.546936 +vt 0.035217 0.581970 +vt 0.050720 0.581970 +vt 0.050720 0.546936 +vt 0.043030 0.581970 +vt 0.043030 0.546936 +vt 0.078186 0.546814 +vt 0.078186 0.488342 +vt 0.085876 0.546814 +vt 0.085876 0.488342 +vt 0.035217 0.546814 +vt 0.035217 0.488342 +vt 0.042908 0.546814 +vt 0.042908 0.488342 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 -0.0000 0.7071 +vn -0.6409 0.4226 -0.6409 +vn 0.6409 -0.4226 0.6409 +vn 0.2988 0.9063 0.2988 +vn -0.2988 -0.9063 -0.2988 +usemtl m_0 +s 1 +f 57/169/43 58/170/43 59/171/43 +f 58/170/43 60/172/43 59/171/43 +f 61/173/44 62/174/44 63/175/44 +f 62/174/44 64/176/44 63/175/44 +f 61/177/45 63/178/45 59/179/45 +f 63/178/45 57/180/45 59/179/45 +f 64/181/46 62/182/46 58/183/46 +f 62/182/46 60/184/46 58/183/46 +f 63/185/47 64/186/47 57/187/47 +f 64/186/47 58/188/47 57/187/47 +f 59/189/48 60/190/48 61/191/48 +f 60/190/48 62/192/48 61/191/48 +o cube.007 +v 1.211549 1.000000 1.034772 +v 1.211549 -0.062500 1.034772 +v 1.034772 1.000000 0.857995 +v 1.034772 -0.062500 0.857995 +v 0.857995 1.000000 1.034772 +v 0.857995 -0.062500 1.034772 +v 1.034772 1.000000 1.211549 +v 1.034772 -0.062500 1.211549 +vt 0.000061 0.472595 +vt 0.000061 0.406311 +vt 0.015564 0.472595 +vt 0.015564 0.406311 +vt 0.031311 0.472595 +vt 0.031311 0.406311 +vt 0.046814 0.472595 +vt 0.046814 0.406311 +vt 0.031189 0.472717 +vt 0.031189 0.488220 +vt 0.015686 0.472717 +vt 0.015686 0.488220 +vt 0.046814 0.488220 +vt 0.046814 0.472717 +vt 0.031311 0.488220 +vt 0.031311 0.472717 +vt 0.046936 0.472595 +vt 0.046936 0.406311 +vt 0.062439 0.472595 +vt 0.062439 0.406311 +vt 0.015686 0.472595 +vt 0.015686 0.406311 +vt 0.031189 0.472595 +vt 0.031189 0.406311 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 0.7071 +vn -0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.7071 -0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +usemtl m_0 +s 1 +f 65/193/49 66/194/49 67/195/49 +f 66/194/49 68/196/49 67/195/49 +f 69/197/50 70/198/50 71/199/50 +f 70/198/50 72/200/50 71/199/50 +f 69/201/51 71/202/51 67/203/51 +f 71/202/51 65/204/51 67/203/51 +f 72/205/52 70/206/52 66/207/52 +f 70/206/52 68/208/52 66/207/52 +f 71/209/53 72/210/53 65/211/53 +f 72/210/53 66/212/53 65/211/53 +f 67/213/54 68/214/54 69/215/54 +f 68/214/54 70/216/54 69/215/54 +o cube.008 +v 0.500000 4.591195 0.055675 +v 0.500000 3.181656 0.568705 +v 0.500000 4.591174 0.055616 +v 0.500000 3.181635 0.568646 +v -0.500000 4.591174 0.055616 +v -0.500000 3.181635 0.568646 +v -0.500000 4.591195 0.055675 +v -0.500000 3.181656 0.568705 +vt 0.000061 0.999939 +vt 0.000061 0.906311 +vt -0.000061 0.999939 +vt -0.000061 0.906311 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.062439 0.999939 +vt 0.062439 0.906311 +vt 0.062439 0.999939 +vt 0.062439 1.000061 +vt 0.000061 0.999939 +vt 0.000061 1.000061 +vt 0.124939 0.999939 +vt 0.124939 1.000061 +vt 0.062561 0.999939 +vt 0.062561 1.000061 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.124939 0.999939 +vt 0.124939 0.906311 +vt 0.000061 0.906311 +vt 0.062439 0.906311 +vn 1.0000 0.0006 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0006 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.9397 -0.3420 +vn 0.0000 -0.9397 0.3420 +vn 0.0000 -0.9397 0.3421 +vn 0.0000 0.3420 0.9397 +vn 0.0000 -0.3420 -0.9397 +usemtl m_0 +s 1 +f 73/217/55 74/218/56 75/219/55 +f 74/218/56 76/220/56 75/219/55 +f 77/221/57 78/222/58 79/223/57 +f 78/222/58 80/224/58 79/223/57 +f 77/225/59 79/226/59 75/227/59 +f 79/226/59 73/228/59 75/227/59 +f 80/229/60 78/230/61 74/231/61 +f 78/230/61 76/232/60 74/231/61 +f 79/233/62 80/234/62 73/235/62 +f 80/234/62 74/236/62 73/235/62 +f 75/227/63 76/237/63 77/225/63 +f 76/237/63 78/238/63 77/225/63 +o cube.009 +v 0.055674 4.591195 -0.499999 +v 0.568705 3.181656 -0.499999 +v 0.055616 4.591174 -0.499999 +v 0.568646 3.181635 -0.499999 +v 0.055616 4.591174 0.500001 +v 0.568646 3.181635 0.500001 +v 0.055674 4.591195 0.500001 +v 0.568705 3.181656 0.500001 +vt 0.000061 0.999939 +vt 0.000061 0.906311 +vt -0.000061 0.999939 +vt -0.000061 0.906311 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.062439 0.999939 +vt 0.062439 0.906311 +vt 0.062439 0.999939 +vt 0.062439 1.000061 +vt 0.000061 0.999939 +vt 0.000061 1.000061 +vt 0.124939 0.999939 +vt 0.124939 1.000061 +vt 0.062561 0.999939 +vt 0.062561 1.000061 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.124939 0.999939 +vt 0.124939 0.906311 +vt 0.000061 0.906311 +vt 0.062439 0.906311 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +vn -0.3420 0.9397 0.0000 +vn 0.3421 -0.9397 0.0000 +vn 0.3420 -0.9397 -0.0000 +vn 0.9397 0.3420 0.0000 +vn -0.9397 -0.3420 0.0000 +usemtl m_0 +s 1 +f 81/239/64 82/240/64 83/241/64 +f 82/240/64 84/242/64 83/241/64 +f 85/243/65 86/244/65 87/245/65 +f 86/244/65 88/246/65 87/245/65 +f 85/247/66 87/248/66 83/249/66 +f 87/248/66 81/250/66 83/249/66 +f 88/251/67 86/252/67 82/253/68 +f 86/252/67 84/254/68 82/253/68 +f 87/255/69 88/256/69 81/257/69 +f 88/256/69 82/258/69 81/257/69 +f 83/249/70 84/259/70 85/247/70 +f 84/259/70 86/260/70 85/247/70 +o cube.010 +v -0.500000 4.591195 -0.055674 +v -0.500000 3.181656 -0.568704 +v -0.500000 4.591174 -0.055615 +v -0.500000 3.181635 -0.568645 +v 0.500000 4.591174 -0.055615 +v 0.500000 3.181635 -0.568645 +v 0.500000 4.591195 -0.055674 +v 0.500000 3.181656 -0.568704 +vt 0.000061 0.999939 +vt 0.000061 0.906311 +vt -0.000061 0.999939 +vt -0.000061 0.906311 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.062439 0.999939 +vt 0.062439 0.906311 +vt 0.062439 0.999939 +vt 0.062439 1.000061 +vt 0.000061 0.999939 +vt 0.000061 1.000061 +vt 0.124939 0.999939 +vt 0.124939 1.000061 +vt 0.062561 0.999939 +vt 0.062561 1.000061 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.124939 0.999939 +vt 0.124939 0.906311 +vt 0.000061 0.906311 +vt 0.062439 0.906311 +vn -1.0000 0.0006 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0006 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.9397 0.3420 +vn 0.0000 -0.9397 -0.3420 +vn -0.0000 -0.9397 -0.3421 +vn 0.0000 0.3420 -0.9397 +vn 0.0000 -0.3420 0.9397 +usemtl m_0 +s 1 +f 89/261/71 90/262/72 91/263/71 +f 90/262/72 92/264/72 91/263/71 +f 93/265/73 94/266/74 95/267/73 +f 94/266/74 96/268/74 95/267/73 +f 93/269/75 95/270/75 91/271/75 +f 95/270/75 89/272/75 91/271/75 +f 96/273/76 94/274/77 90/275/77 +f 94/274/77 92/276/76 90/275/77 +f 95/277/78 96/278/78 89/279/78 +f 96/278/78 90/280/78 89/279/78 +f 91/271/79 92/281/79 93/269/79 +f 92/281/79 94/282/79 93/269/79 +o cube.011 +v -0.055674 4.591195 0.500001 +v -0.568705 3.181656 0.500001 +v -0.055616 4.591174 0.500001 +v -0.568646 3.181635 0.500001 +v -0.055616 4.591174 -0.499999 +v -0.568646 3.181635 -0.499999 +v -0.055674 4.591195 -0.499999 +v -0.568705 3.181656 -0.499999 +vt 0.000061 0.999939 +vt 0.000061 0.906311 +vt -0.000061 0.999939 +vt -0.000061 0.906311 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.062439 0.999939 +vt 0.062439 0.906311 +vt 0.062439 0.999939 +vt 0.062439 1.000061 +vt 0.000061 0.999939 +vt 0.000061 1.000061 +vt 0.124939 0.999939 +vt 0.124939 1.000061 +vt 0.062561 0.999939 +vt 0.062561 1.000061 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.124939 0.999939 +vt 0.124939 0.906311 +vt 0.000061 0.906311 +vt 0.062439 0.906311 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.3420 0.9397 0.0000 +vn -0.3421 -0.9397 0.0000 +vn -0.3420 -0.9397 0.0000 +vn -0.9397 0.3420 0.0000 +vn 0.9397 -0.3420 0.0000 +usemtl m_0 +s 1 +f 97/283/80 98/284/80 99/285/80 +f 98/284/80 100/286/80 99/285/80 +f 101/287/81 102/288/81 103/289/81 +f 102/288/81 104/290/81 103/289/81 +f 101/291/82 103/292/82 99/293/82 +f 103/292/82 97/294/82 99/293/82 +f 104/295/83 102/296/83 98/297/84 +f 102/296/83 100/298/84 98/297/84 +f 103/299/85 104/300/85 97/301/85 +f 104/300/85 98/302/85 97/301/85 +f 99/293/86 100/303/86 101/291/86 +f 100/303/86 102/304/86 101/291/86 +o cube.012 +v 0.096017 4.645963 0.007629 +v -0.454961 3.149132 -0.543349 +v 0.017615 4.703682 -0.070772 +v -0.533363 3.206851 -0.621750 +v -0.070773 4.703682 0.017616 +v -0.621751 3.206851 -0.533362 +v 0.007629 4.645963 0.096018 +v -0.543350 3.149132 -0.454961 +vt 0.000061 0.898376 +vt 0.000061 0.793030 +vt 0.007751 0.898376 +vt 0.007751 0.793030 +vt 0.015686 0.898376 +vt 0.015686 0.793030 +vt 0.023376 0.898376 +vt 0.023376 0.793030 +vt 0.015564 0.898499 +vt 0.015564 0.906189 +vt 0.007874 0.898499 +vt 0.007874 0.906189 +vt 0.023376 0.906189 +vt 0.023376 0.898499 +vt 0.015686 0.906189 +vt 0.015686 0.898499 +vt 0.023499 0.898376 +vt 0.023499 0.793030 +vt 0.031189 0.898376 +vt 0.031189 0.793030 +vt 0.007874 0.898376 +vt 0.007874 0.793030 +vt 0.015564 0.898376 +vt 0.015564 0.793030 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 -0.0000 0.7071 +vn 0.3265 0.8870 0.3265 +vn -0.3265 -0.8870 -0.3265 +vn 0.6272 -0.4617 0.6272 +vn -0.6272 0.4617 -0.6272 +usemtl m_0 +s 1 +f 105/305/87 106/306/87 107/307/87 +f 106/306/87 108/308/87 107/307/87 +f 109/309/88 110/310/88 111/311/88 +f 110/310/88 112/312/88 111/311/88 +f 109/313/89 111/314/89 107/315/89 +f 111/314/89 105/316/89 107/315/89 +f 112/317/90 110/318/90 106/319/90 +f 110/318/90 108/320/90 106/319/90 +f 111/321/91 112/322/91 105/323/91 +f 112/322/91 106/324/91 105/323/91 +f 107/325/92 108/326/92 109/327/92 +f 108/326/92 110/328/92 109/327/92 +o cube.013 +v -0.096017 4.645963 -0.007628 +v 0.454961 3.149132 0.543350 +v -0.017615 4.703682 0.070774 +v 0.533363 3.206851 0.621752 +v 0.070773 4.703682 -0.017615 +v 0.621751 3.206851 0.533363 +v -0.007629 4.645963 -0.096016 +v 0.543350 3.149132 0.454962 +vt 0.000061 0.898376 +vt 0.000061 0.793030 +vt 0.007751 0.898376 +vt 0.007751 0.793030 +vt 0.015686 0.898376 +vt 0.015686 0.793030 +vt 0.023376 0.898376 +vt 0.023376 0.793030 +vt 0.015564 0.898499 +vt 0.015564 0.906189 +vt 0.007874 0.898499 +vt 0.007874 0.906189 +vt 0.023376 0.906189 +vt 0.023376 0.898499 +vt 0.015686 0.906189 +vt 0.015686 0.898499 +vt 0.023499 0.898376 +vt 0.023499 0.793030 +vt 0.031189 0.898376 +vt 0.031189 0.793030 +vt 0.007874 0.898376 +vt 0.007874 0.793030 +vt 0.015564 0.898376 +vt 0.015564 0.793030 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn -0.3265 0.8870 -0.3265 +vn 0.3265 -0.8870 0.3265 +vn -0.6272 -0.4617 -0.6272 +vn 0.6272 0.4617 0.6272 +usemtl m_0 +s 1 +f 113/329/93 114/330/93 115/331/93 +f 114/330/93 116/332/93 115/331/93 +f 117/333/94 118/334/94 119/335/94 +f 118/334/94 120/336/94 119/335/94 +f 117/337/95 119/338/95 115/339/95 +f 119/338/95 113/340/95 115/339/95 +f 120/341/96 118/342/96 114/343/96 +f 118/342/96 116/344/96 114/343/96 +f 119/345/97 120/346/97 113/347/97 +f 120/346/97 114/348/97 113/347/97 +f 115/349/98 116/350/98 117/351/98 +f 116/350/98 118/352/98 117/351/98 +o cube.014 +v 0.007629 4.645963 -0.096016 +v -0.543350 3.149132 0.454962 +v -0.070773 4.703682 -0.017615 +v -0.621751 3.206851 0.533363 +v 0.017615 4.703682 0.070774 +v -0.533363 3.206851 0.621752 +v 0.096017 4.645963 -0.007628 +v -0.454961 3.149132 0.543350 +vt 0.000061 0.898376 +vt 0.000061 0.793030 +vt 0.007751 0.898376 +vt 0.007751 0.793030 +vt 0.015686 0.898376 +vt 0.015686 0.793030 +vt 0.023376 0.898376 +vt 0.023376 0.793030 +vt 0.015564 0.898499 +vt 0.015564 0.906189 +vt 0.007874 0.898499 +vt 0.007874 0.906189 +vt 0.023376 0.906189 +vt 0.023376 0.898499 +vt 0.015686 0.906189 +vt 0.015686 0.898499 +vt 0.023499 0.898376 +vt 0.023499 0.793030 +vt 0.031189 0.898376 +vt 0.031189 0.793030 +vt 0.007874 0.898376 +vt 0.007874 0.793030 +vt 0.015564 0.898376 +vt 0.015564 0.793030 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +vn 0.3265 0.8870 -0.3265 +vn -0.3265 -0.8870 0.3265 +vn 0.6272 -0.4617 -0.6272 +vn -0.6272 0.4617 0.6272 +usemtl m_0 +s 1 +f 121/353/99 122/354/99 123/355/99 +f 122/354/99 124/356/99 123/355/99 +f 125/357/100 126/358/100 127/359/100 +f 126/358/100 128/360/100 127/359/100 +f 125/361/101 127/362/101 123/363/101 +f 127/362/101 121/364/101 123/363/101 +f 128/365/102 126/366/102 122/367/102 +f 126/366/102 124/368/102 122/367/102 +f 127/369/103 128/370/103 121/371/103 +f 128/370/103 122/372/103 121/371/103 +f 123/373/104 124/374/104 125/375/104 +f 124/374/104 126/376/104 125/375/104 +o cube.015 +v -0.007629 4.645963 0.096018 +v 0.543350 3.149132 -0.454961 +v 0.070773 4.703682 0.017616 +v 0.621751 3.206851 -0.533362 +v -0.017615 4.703682 -0.070772 +v 0.533363 3.206851 -0.621750 +v -0.096017 4.645963 0.007629 +v 0.454961 3.149132 -0.543349 +vt 0.000061 0.898376 +vt 0.000061 0.793030 +vt 0.007751 0.898376 +vt 0.007751 0.793030 +vt 0.015686 0.898376 +vt 0.015686 0.793030 +vt 0.023376 0.898376 +vt 0.023376 0.793030 +vt 0.015564 0.898499 +vt 0.015564 0.906189 +vt 0.007874 0.898499 +vt 0.007874 0.906189 +vt 0.023376 0.906189 +vt 0.023376 0.898499 +vt 0.015686 0.906189 +vt 0.015686 0.898499 +vt 0.023499 0.898376 +vt 0.023499 0.793030 +vt 0.031189 0.898376 +vt 0.031189 0.793030 +vt 0.007874 0.898376 +vt 0.007874 0.793030 +vt 0.015564 0.898376 +vt 0.015564 0.793030 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn -0.3265 0.8870 0.3265 +vn 0.3265 -0.8870 -0.3265 +vn -0.6272 -0.4617 0.6272 +vn 0.6272 0.4617 -0.6272 +usemtl m_0 +s 1 +f 129/377/105 130/378/105 131/379/105 +f 130/378/105 132/380/105 131/379/105 +f 133/381/106 134/382/106 135/383/106 +f 134/382/106 136/384/106 135/383/106 +f 133/385/107 135/386/107 131/387/107 +f 135/386/107 129/388/107 131/387/107 +f 136/389/108 134/390/108 130/391/108 +f 134/390/108 132/392/108 130/391/108 +f 135/393/109 136/394/109 129/395/109 +f 136/394/109 130/396/109 129/395/109 +f 131/397/110 132/398/110 133/399/110 +f 132/398/110 134/400/110 133/399/110 +o cube.016 +v 0.125000 4.812500 0.125001 +v 0.125000 4.687500 0.125001 +v 0.125000 4.812500 -0.124999 +v 0.125000 4.687500 -0.124999 +v -0.125000 4.812500 -0.124999 +v -0.125000 4.687500 -0.124999 +v -0.125000 4.812500 0.125001 +v -0.125000 4.687500 0.125001 +vt 0.140686 0.894470 +vt 0.140686 0.886780 +vt 0.156189 0.894470 +vt 0.156189 0.886780 +vt 0.171936 0.894470 +vt 0.171936 0.886780 +vt 0.187439 0.894470 +vt 0.187439 0.886780 +vt 0.171814 0.894592 +vt 0.171814 0.910095 +vt 0.156311 0.894592 +vt 0.156311 0.910095 +vt 0.187439 0.910095 +vt 0.187439 0.894592 +vt 0.171936 0.910095 +vt 0.171936 0.894592 +vt 0.187561 0.894470 +vt 0.187561 0.886780 +vt 0.203064 0.894470 +vt 0.203064 0.886780 +vt 0.156311 0.894470 +vt 0.156311 0.886780 +vt 0.171814 0.894470 +vt 0.171814 0.886780 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 137/401/111 138/402/111 139/403/111 +f 138/402/111 140/404/111 139/403/111 +f 141/405/112 142/406/112 143/407/112 +f 142/406/112 144/408/112 143/407/112 +f 141/409/113 143/410/113 139/411/113 +f 143/410/113 137/412/113 139/411/113 +f 144/413/114 142/414/114 138/415/114 +f 142/414/114 140/416/114 138/415/114 +f 143/417/115 144/418/115 137/419/115 +f 144/418/115 138/420/115 137/419/115 +f 139/421/116 140/422/116 141/423/116 +f 140/422/116 142/424/116 141/423/116 +o cube.017 +v 0.101562 5.601562 0.101563 +v 0.101562 5.398438 0.101563 +v 0.101562 5.601562 -0.101562 +v 0.101562 5.398438 -0.101562 +v -0.101562 5.601562 -0.101562 +v -0.101562 5.398438 -0.101562 +v -0.101562 5.601562 0.101563 +v -0.101562 5.398438 0.101563 +vt 0.140686 0.984314 +vt 0.140686 0.968811 +vt 0.156189 0.984314 +vt 0.156189 0.968811 +vt 0.171936 0.984314 +vt 0.171936 0.968811 +vt 0.187439 0.984314 +vt 0.187439 0.968811 +vt 0.171814 0.984436 +vt 0.171814 0.999939 +vt 0.156311 0.984436 +vt 0.156311 0.999939 +vt 0.187439 0.999939 +vt 0.187439 0.984436 +vt 0.171936 0.999939 +vt 0.171936 0.984436 +vt 0.187561 0.984314 +vt 0.187561 0.968811 +vt 0.203064 0.984314 +vt 0.203064 0.968811 +vt 0.156311 0.984314 +vt 0.156311 0.968811 +vt 0.171814 0.984314 +vt 0.171814 0.968811 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 145/425/117 146/426/117 147/427/117 +f 146/426/117 148/428/117 147/427/117 +f 149/429/118 150/430/118 151/431/118 +f 150/430/118 152/432/118 151/431/118 +f 149/433/119 151/434/119 147/435/119 +f 151/434/119 145/436/119 147/435/119 +f 152/437/120 150/438/120 146/439/120 +f 150/438/120 148/440/120 146/439/120 +f 151/441/121 152/442/121 145/443/121 +f 152/442/121 146/444/121 145/443/121 +f 147/445/122 148/446/122 149/447/122 +f 148/446/122 150/448/122 149/447/122 +o cube.018 +v 0.062500 5.562500 0.062501 +v 0.062500 4.750000 0.062501 +v 0.062500 5.562500 -0.062499 +v 0.062500 4.750000 -0.062499 +v -0.062500 5.562500 -0.062499 +v -0.062500 4.750000 -0.062499 +v -0.062500 5.562500 0.062501 +v -0.062500 4.750000 0.062501 +vt 0.140686 0.960876 +vt 0.140686 0.910217 +vt 0.148376 0.960876 +vt 0.148376 0.910217 +vt 0.156311 0.960876 +vt 0.156311 0.910217 +vt 0.164001 0.960876 +vt 0.164001 0.910217 +vt 0.156189 0.960999 +vt 0.156189 0.968689 +vt 0.148499 0.960999 +vt 0.148499 0.968689 +vt 0.164001 0.968689 +vt 0.164001 0.960999 +vt 0.156311 0.968689 +vt 0.156311 0.960999 +vt 0.164124 0.960876 +vt 0.164124 0.910217 +vt 0.171814 0.960876 +vt 0.171814 0.910217 +vt 0.148499 0.960876 +vt 0.148499 0.910217 +vt 0.156189 0.960876 +vt 0.156189 0.910217 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 153/449/123 154/450/123 155/451/123 +f 154/450/123 156/452/123 155/451/123 +f 157/453/124 158/454/124 159/455/124 +f 158/454/124 160/456/124 159/455/124 +f 157/457/125 159/458/125 155/459/125 +f 159/458/125 153/460/125 155/459/125 +f 160/461/126 158/462/126 154/463/126 +f 158/462/126 156/464/126 154/463/126 +f 159/465/127 160/466/127 153/467/127 +f 160/466/127 154/468/127 153/467/127 +f 155/469/128 156/470/128 157/471/128 +f 156/470/128 158/472/128 157/471/128 +o cube.019 +v 0.187500 4.687500 0.187501 +v 0.187500 4.187500 0.187501 +v 0.187500 4.687500 -0.187499 +v 0.187500 4.187500 -0.187499 +v -0.187500 4.687500 -0.187499 +v -0.187500 4.187500 -0.187499 +v -0.187500 4.687500 0.187501 +v -0.187500 4.187500 0.187501 +vt 0.140686 0.863220 +vt 0.140686 0.832092 +vt 0.164001 0.863220 +vt 0.164001 0.832092 +vt 0.187561 0.863220 +vt 0.187561 0.832092 +vt 0.210876 0.863220 +vt 0.210876 0.832092 +vt 0.187439 0.863342 +vt 0.187439 0.886658 +vt 0.164124 0.863342 +vt 0.164124 0.886658 +vt 0.210876 0.886658 +vt 0.210876 0.863342 +vt 0.187561 0.886658 +vt 0.187561 0.863342 +vt 0.210999 0.863220 +vt 0.210999 0.832092 +vt 0.234314 0.863220 +vt 0.234314 0.832092 +vt 0.164124 0.863220 +vt 0.164124 0.832092 +vt 0.187439 0.863220 +vt 0.187439 0.832092 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 161/473/129 162/474/129 163/475/129 +f 162/474/129 164/476/129 163/475/129 +f 165/477/130 166/478/130 167/479/130 +f 166/478/130 168/480/130 167/479/130 +f 165/481/131 167/482/131 163/483/131 +f 167/482/131 161/484/131 163/483/131 +f 168/485/132 166/486/132 162/487/132 +f 166/486/132 164/488/132 162/487/132 +f 167/489/133 168/490/133 161/491/133 +f 168/490/133 162/492/133 161/491/133 +f 163/493/134 164/494/134 165/495/134 +f 164/494/134 166/496/134 165/495/134 +o cube.020 +v 0.375000 0.250000 -0.374937 +v 0.375000 0.125000 -0.374937 +v 0.375000 0.250000 -0.375000 +v 0.375000 0.125000 -0.375000 +v -0.375000 0.250000 -0.375000 +v -0.375000 0.125000 -0.375000 +v -0.375000 0.250000 -0.374937 +v -0.375000 0.125000 -0.374937 +vt 0.085999 0.453064 +vt 0.085999 0.445374 +vt 0.085876 0.453064 +vt 0.085876 0.445374 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.453186 +vt 0.085999 0.453064 +vt 0.085999 0.453186 +vt 0.179626 0.453064 +vt 0.179626 0.453186 +vt 0.132874 0.453064 +vt 0.132874 0.453186 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.179626 0.453064 +vt 0.179626 0.445374 +vt 0.085999 0.445374 +vt 0.132751 0.445374 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 169/497/135 170/498/135 171/499/135 +f 170/498/135 172/500/135 171/499/135 +f 173/501/136 174/502/136 175/503/136 +f 174/502/136 176/504/136 175/503/136 +f 173/505/137 175/506/137 171/507/137 +f 175/506/137 169/508/137 171/507/137 +f 176/509/138 174/510/138 170/511/138 +f 174/510/138 172/512/138 170/511/138 +f 175/513/139 176/514/139 169/515/139 +f 176/514/139 170/516/139 169/515/139 +f 171/507/140 172/517/140 173/505/140 +f 172/517/140 174/518/140 173/505/140 +o cube.021 +v 0.625000 0.750000 0.625000 +v 0.625000 0.625000 0.625000 +v 0.625000 0.750000 -0.625000 +v 0.625000 0.625000 -0.625000 +v -0.625000 0.750000 -0.625000 +v -0.625000 0.625000 -0.625000 +v -0.625000 0.750000 0.625000 +v -0.625000 0.625000 0.625000 +vt 0.000061 0.589783 +vt 0.000061 0.582092 +vt 0.078064 0.589783 +vt 0.078064 0.582092 +vt 0.156311 0.589783 +vt 0.156311 0.582092 +vt 0.234314 0.589783 +vt 0.234314 0.582092 +vt 0.156189 0.589905 +vt 0.156189 0.667908 +vt 0.078186 0.589905 +vt 0.078186 0.667908 +vt 0.234314 0.667908 +vt 0.234314 0.589905 +vt 0.156311 0.667908 +vt 0.156311 0.589905 +vt 0.234436 0.589783 +vt 0.234436 0.582092 +vt 0.312439 0.589783 +vt 0.312439 0.582092 +vt 0.078186 0.589783 +vt 0.078186 0.582092 +vt 0.156189 0.589783 +vt 0.156189 0.582092 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 177/519/141 178/520/141 179/521/141 +f 178/520/141 180/522/141 179/521/141 +f 181/523/142 182/524/142 183/525/142 +f 182/524/142 184/526/142 183/525/142 +f 181/527/143 183/528/143 179/529/143 +f 183/528/143 177/530/143 179/529/143 +f 184/531/144 182/532/144 178/533/144 +f 182/532/144 180/534/144 178/533/144 +f 183/535/145 184/536/145 177/537/145 +f 184/536/145 178/538/145 177/537/145 +f 179/539/146 180/540/146 181/541/146 +f 180/540/146 182/542/146 181/541/146 +o cube.022 +v 0.625000 0.937500 0.625000 +v 0.625000 0.812500 0.625000 +v 0.625000 0.937500 -0.625000 +v 0.625000 0.812500 -0.625000 +v -0.625000 0.937500 -0.625000 +v -0.625000 0.812500 -0.625000 +v -0.625000 0.937500 0.625000 +v -0.625000 0.812500 0.625000 +vt 0.000061 0.589783 +vt 0.000061 0.582092 +vt 0.078064 0.589783 +vt 0.078064 0.582092 +vt 0.156311 0.589783 +vt 0.156311 0.582092 +vt 0.234314 0.589783 +vt 0.234314 0.582092 +vt 0.156189 0.589905 +vt 0.156189 0.667908 +vt 0.078186 0.589905 +vt 0.078186 0.667908 +vt 0.234314 0.667908 +vt 0.234314 0.589905 +vt 0.156311 0.667908 +vt 0.156311 0.589905 +vt 0.234436 0.589783 +vt 0.234436 0.582092 +vt 0.312439 0.589783 +vt 0.312439 0.582092 +vt 0.078186 0.589783 +vt 0.078186 0.582092 +vt 0.156189 0.589783 +vt 0.156189 0.582092 +vn 1.0000 0.0000 0.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 185/543/147 186/544/147 187/545/147 +f 186/544/147 188/546/147 187/545/147 +f 189/547/148 190/548/148 191/549/148 +f 190/548/148 192/550/148 191/549/148 +f 189/551/149 191/552/149 187/553/149 +f 191/552/149 185/554/149 187/553/149 +f 192/555/150 190/556/150 186/557/150 +f 190/556/150 188/558/150 186/557/150 +f 191/559/151 192/560/151 185/561/151 +f 192/560/151 186/562/151 185/561/151 +f 187/563/152 188/564/152 189/565/152 +f 188/564/152 190/566/152 189/565/152 +o cube.023 +v -0.312438 0.375000 0.312500 +v -0.312438 0.250000 0.312500 +v -0.312438 0.375000 -0.312500 +v -0.312438 0.250000 -0.312500 +v -0.312500 0.375000 -0.312500 +v -0.312500 0.250000 -0.312500 +v -0.312500 0.375000 0.312500 +v -0.312500 0.250000 0.312500 +vt 0.085999 0.507751 +vt 0.085999 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.500061 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.164001 0.507751 +vt 0.164001 0.500061 +vt 0.125061 0.507874 +vt 0.125061 0.546814 +vt 0.124939 0.507874 +vt 0.124939 0.546814 +vt 0.125061 0.546814 +vt 0.125061 0.507874 +vt 0.124939 0.546814 +vt 0.124939 0.507874 +vt 0.164124 0.507751 +vt 0.164124 0.500061 +vt 0.164001 0.507751 +vt 0.164001 0.500061 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.500061 +vn 1.0000 -0.0000 0.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 193/567/153 194/568/153 195/569/153 +f 194/568/153 196/570/153 195/569/153 +f 197/571/154 198/572/154 199/573/154 +f 198/572/154 200/574/154 199/573/154 +f 197/575/155 199/576/155 195/577/155 +f 199/576/155 193/578/155 195/577/155 +f 200/579/156 198/580/156 194/581/156 +f 198/580/156 196/582/156 194/581/156 +f 199/583/157 200/584/157 193/585/157 +f 200/584/157 194/586/157 193/585/157 +f 195/587/158 196/588/158 197/589/158 +f 196/588/158 198/590/158 197/589/158 +o cube.024 +v 0.375000 2.625000 -0.531250 +v 0.375000 1.875000 -0.531250 +v 0.375000 2.625000 -0.593750 +v 0.375000 1.875000 -0.593750 +v -0.375000 2.625000 -0.593750 +v -0.375000 1.875000 -0.593750 +v -0.375000 2.625000 -0.531250 +v -0.375000 1.875000 -0.531250 +vt 0.898499 0.652283 +vt 0.898499 0.605530 +vt 0.902283 0.652283 +vt 0.902283 0.605530 +vt 0.949280 0.652283 +vt 0.949280 0.605530 +vt 0.953064 0.652283 +vt 0.953064 0.605530 +vt 0.949158 0.652405 +vt 0.949158 0.656189 +vt 0.902405 0.652405 +vt 0.902405 0.656189 +vt 0.996033 0.656189 +vt 0.996033 0.652405 +vt 0.949280 0.656189 +vt 0.949280 0.652405 +vt 0.953186 0.652283 +vt 0.953186 0.605530 +vt 0.999939 0.652283 +vt 0.999939 0.605530 +vt 0.902405 0.652283 +vt 0.902405 0.605530 +vt 0.949158 0.652283 +vt 0.949158 0.605530 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 201/591/159 202/592/159 203/593/159 +f 202/592/159 204/594/159 203/593/159 +f 205/595/160 206/596/160 207/597/160 +f 206/596/160 208/598/160 207/597/160 +f 205/599/161 207/600/161 203/601/161 +f 207/600/161 201/602/161 203/601/161 +f 208/603/162 206/604/162 202/605/162 +f 206/604/162 204/606/162 202/605/162 +f 207/607/163 208/608/163 201/609/163 +f 208/608/163 202/610/163 201/609/163 +f 203/611/164 204/612/164 205/613/164 +f 204/612/164 206/614/164 205/613/164 +o cube.025 +v 0.812500 1.062500 0.187500 +v 0.812500 0.500000 0.187500 +v 0.812500 1.062500 -0.187500 +v 0.812500 0.500000 -0.187500 +v 0.562500 1.062500 -0.187500 +v 0.562500 0.500000 -0.187500 +v 0.562500 1.062500 0.187500 +v 0.562500 0.500000 0.187500 +vt 0.000061 0.382751 +vt 0.000061 0.347717 +vt 0.023376 0.382751 +vt 0.023376 0.347717 +vt 0.039124 0.382751 +vt 0.039124 0.347717 +vt 0.062439 0.382751 +vt 0.062439 0.347717 +vt 0.039001 0.382874 +vt 0.039001 0.406189 +vt 0.023499 0.382874 +vt 0.023499 0.406189 +vt 0.054626 0.406189 +vt 0.054626 0.382874 +vt 0.039124 0.406189 +vt 0.039124 0.382874 +vt 0.062561 0.382751 +vt 0.062561 0.347717 +vt 0.078064 0.382751 +vt 0.078064 0.347717 +vt 0.023499 0.382751 +vt 0.023499 0.347717 +vt 0.039001 0.382751 +vt 0.039001 0.347717 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 209/615/165 210/616/165 211/617/165 +f 210/616/165 212/618/165 211/617/165 +f 213/619/166 214/620/166 215/621/166 +f 214/620/166 216/622/166 215/621/166 +f 213/623/167 215/624/167 211/625/167 +f 215/624/167 209/626/167 211/625/167 +f 216/627/168 214/628/168 210/629/168 +f 214/628/168 212/630/168 210/629/168 +f 215/631/169 216/632/169 209/633/169 +f 216/632/169 210/634/169 209/633/169 +f 211/635/170 212/636/170 213/637/170 +f 212/636/170 214/638/170 213/637/170 +o cube.026 +v -0.812500 1.062500 -0.187500 +v -0.812500 0.500000 -0.187500 +v -0.812500 1.062500 0.187500 +v -0.812500 0.500000 0.187500 +v -0.562500 1.062500 0.187500 +v -0.562500 0.500000 0.187500 +v -0.562500 1.062500 -0.187500 +v -0.562500 0.500000 -0.187500 +vt 0.000061 0.382751 +vt 0.000061 0.347717 +vt 0.023376 0.382751 +vt 0.023376 0.347717 +vt 0.039124 0.382751 +vt 0.039124 0.347717 +vt 0.062439 0.382751 +vt 0.062439 0.347717 +vt 0.039001 0.382874 +vt 0.039001 0.406189 +vt 0.023499 0.382874 +vt 0.023499 0.406189 +vt 0.054626 0.406189 +vt 0.054626 0.382874 +vt 0.039124 0.406189 +vt 0.039124 0.382874 +vt 0.062561 0.382751 +vt 0.062561 0.347717 +vt 0.078064 0.382751 +vt 0.078064 0.347717 +vt 0.023499 0.382751 +vt 0.023499 0.347717 +vt 0.039001 0.382751 +vt 0.039001 0.347717 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +usemtl m_0 +s 1 +f 217/639/171 218/640/171 219/641/171 +f 218/640/171 220/642/171 219/641/171 +f 221/643/172 222/644/172 223/645/172 +f 222/644/172 224/646/172 223/645/172 +f 221/647/173 223/648/173 219/649/173 +f 223/648/173 217/650/173 219/649/173 +f 224/651/174 222/652/174 218/653/174 +f 222/652/174 220/654/174 218/653/174 +f 223/655/175 224/656/175 217/657/175 +f 224/656/175 218/658/175 217/657/175 +f 219/659/176 220/660/176 221/661/176 +f 220/660/176 222/662/176 221/661/176 +o cube.027 +v 0.750000 1.250000 0.062500 +v 0.750000 1.062500 0.062500 +v 0.750000 1.250000 -0.062500 +v 0.750000 1.062500 -0.062500 +v 0.562500 1.250000 -0.062500 +v 0.562500 1.062500 -0.062500 +v 0.562500 1.250000 0.062500 +v 0.562500 1.062500 0.062500 +vt 0.000061 0.339783 +vt 0.000061 0.328186 +vt 0.007751 0.339783 +vt 0.007751 0.328186 +vt 0.019592 0.339783 +vt 0.019592 0.328186 +vt 0.027283 0.339783 +vt 0.027283 0.328186 +vt 0.019470 0.339905 +vt 0.019470 0.347595 +vt 0.007874 0.339905 +vt 0.007874 0.347595 +vt 0.031189 0.347595 +vt 0.031189 0.339905 +vt 0.019592 0.347595 +vt 0.019592 0.339905 +vt 0.027405 0.339783 +vt 0.027405 0.328186 +vt 0.039001 0.339783 +vt 0.039001 0.328186 +vt 0.007874 0.339783 +vt 0.007874 0.328186 +vt 0.019470 0.339783 +vt 0.019470 0.328186 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 225/663/177 226/664/177 227/665/177 +f 226/664/177 228/666/177 227/665/177 +f 229/667/178 230/668/178 231/669/178 +f 230/668/178 232/670/178 231/669/178 +f 229/671/179 231/672/179 227/673/179 +f 231/672/179 225/674/179 227/673/179 +f 232/675/180 230/676/180 226/677/180 +f 230/676/180 228/678/180 226/677/180 +f 231/679/181 232/680/181 225/681/181 +f 232/680/181 226/682/181 225/681/181 +f 227/683/182 228/684/182 229/685/182 +f 228/684/182 230/686/182 229/685/182 +o cube.028 +v -1.273420 1.043750 -1.034772 +v -1.273420 0.768750 -1.034772 +v -1.034772 1.043750 -0.796123 +v -1.034772 0.768750 -0.796123 +v -0.796123 1.043750 -1.034772 +v -0.796123 0.768750 -1.034772 +v -1.034772 1.043750 -1.273420 +v -1.034772 0.768750 -1.273420 +vt 0.078186 0.421814 +vt 0.078186 0.402405 +vt 0.101501 0.421814 +vt 0.101501 0.402405 +vt 0.125061 0.421814 +vt 0.125061 0.402405 +vt 0.148376 0.421814 +vt 0.148376 0.402405 +vt 0.124939 0.421936 +vt 0.124939 0.445251 +vt 0.101624 0.421936 +vt 0.101624 0.445251 +vt 0.148376 0.445251 +vt 0.148376 0.421936 +vt 0.125061 0.445251 +vt 0.125061 0.421936 +vt 0.148499 0.421814 +vt 0.148499 0.402405 +vt 0.171814 0.421814 +vt 0.171814 0.402405 +vt 0.101624 0.421814 +vt 0.101624 0.402405 +vt 0.124939 0.421814 +vt 0.124939 0.402405 +vn -0.7071 0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +usemtl m_0 +s 1 +f 233/687/183 234/688/183 235/689/183 +f 234/688/183 236/690/183 235/689/183 +f 237/691/184 238/692/184 239/693/184 +f 238/692/184 240/694/184 239/693/184 +f 237/695/185 239/696/185 235/697/185 +f 239/696/185 233/698/185 235/697/185 +f 240/699/186 238/700/186 234/701/186 +f 238/700/186 236/702/186 234/701/186 +f 239/703/187 240/704/187 233/705/187 +f 240/704/187 234/706/187 233/705/187 +f 235/707/188 236/708/188 237/709/188 +f 236/708/188 238/710/188 237/709/188 +o cube.029 +v -1.034772 1.043750 1.273420 +v -1.034772 0.768750 1.273420 +v -0.796123 1.043750 1.034772 +v -0.796123 0.768750 1.034772 +v -1.034772 1.043750 0.796123 +v -1.034772 0.768750 0.796123 +v -1.273420 1.043750 1.034772 +v -1.273420 0.768750 1.034772 +vt 0.078186 0.421814 +vt 0.078186 0.402405 +vt 0.101501 0.421814 +vt 0.101501 0.402405 +vt 0.125061 0.421814 +vt 0.125061 0.402405 +vt 0.148376 0.421814 +vt 0.148376 0.402405 +vt 0.124939 0.421936 +vt 0.124939 0.445251 +vt 0.101624 0.421936 +vt 0.101624 0.445251 +vt 0.148376 0.445251 +vt 0.148376 0.421936 +vt 0.125061 0.445251 +vt 0.125061 0.421936 +vt 0.148499 0.421814 +vt 0.148499 0.402405 +vt 0.171814 0.421814 +vt 0.171814 0.402405 +vt 0.101624 0.421814 +vt 0.101624 0.402405 +vt 0.124939 0.421814 +vt 0.124939 0.402405 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.7071 0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +usemtl m_0 +s 1 +f 241/711/189 242/712/189 243/713/189 +f 242/712/189 244/714/189 243/713/189 +f 245/715/190 246/716/190 247/717/190 +f 246/716/190 248/718/190 247/717/190 +f 245/719/191 247/720/191 243/721/191 +f 247/720/191 241/722/191 243/721/191 +f 248/723/192 246/724/192 242/725/192 +f 246/724/192 244/726/192 242/725/192 +f 247/727/193 248/728/193 241/729/193 +f 248/728/193 242/730/193 241/729/193 +f 243/731/194 244/732/194 245/733/194 +f 244/732/194 246/734/194 245/733/194 +o cube.030 +v 1.034772 1.043750 -1.273420 +v 1.034772 0.768750 -1.273420 +v 0.796123 1.043750 -1.034772 +v 0.796123 0.768750 -1.034772 +v 1.034772 1.043750 -0.796123 +v 1.034772 0.768750 -0.796123 +v 1.273420 1.043750 -1.034772 +v 1.273420 0.768750 -1.034772 +vt 0.078186 0.421814 +vt 0.078186 0.402405 +vt 0.101501 0.421814 +vt 0.101501 0.402405 +vt 0.125061 0.421814 +vt 0.125061 0.402405 +vt 0.148376 0.421814 +vt 0.148376 0.402405 +vt 0.124939 0.421936 +vt 0.124939 0.445251 +vt 0.101624 0.421936 +vt 0.101624 0.445251 +vt 0.148376 0.445251 +vt 0.148376 0.421936 +vt 0.125061 0.445251 +vt 0.125061 0.421936 +vt 0.148499 0.421814 +vt 0.148499 0.402405 +vt 0.171814 0.421814 +vt 0.171814 0.402405 +vt 0.101624 0.421814 +vt 0.101624 0.402405 +vt 0.124939 0.421814 +vt 0.124939 0.402405 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 0.7071 +usemtl m_0 +s 1 +f 249/735/195 250/736/195 251/737/195 +f 250/736/195 252/738/195 251/737/195 +f 253/739/196 254/740/196 255/741/196 +f 254/740/196 256/742/196 255/741/196 +f 253/743/197 255/744/197 251/745/197 +f 255/744/197 249/746/197 251/745/197 +f 256/747/198 254/748/198 250/749/198 +f 254/748/198 252/750/198 250/749/198 +f 255/751/199 256/752/199 249/753/199 +f 256/752/199 250/754/199 249/753/199 +f 251/755/200 252/756/200 253/757/200 +f 252/756/200 254/758/200 253/757/200 +o cube.031 +v 1.273420 1.043750 1.034772 +v 1.273420 0.768750 1.034772 +v 1.034772 1.043750 0.796123 +v 1.034772 0.768750 0.796123 +v 0.796123 1.043750 1.034772 +v 0.796123 0.768750 1.034772 +v 1.034772 1.043750 1.273420 +v 1.034772 0.768750 1.273420 +vt 0.078186 0.421814 +vt 0.078186 0.402405 +vt 0.101501 0.421814 +vt 0.101501 0.402405 +vt 0.125061 0.421814 +vt 0.125061 0.402405 +vt 0.148376 0.421814 +vt 0.148376 0.402405 +vt 0.124939 0.421936 +vt 0.124939 0.445251 +vt 0.101624 0.421936 +vt 0.101624 0.445251 +vt 0.148376 0.445251 +vt 0.148376 0.421936 +vt 0.125061 0.445251 +vt 0.125061 0.421936 +vt 0.148499 0.421814 +vt 0.148499 0.402405 +vt 0.171814 0.421814 +vt 0.171814 0.402405 +vt 0.101624 0.421814 +vt 0.101624 0.402405 +vt 0.124939 0.421814 +vt 0.124939 0.402405 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +usemtl m_0 +s 1 +f 257/759/201 258/760/201 259/761/201 +f 258/760/201 260/762/201 259/761/201 +f 261/763/202 262/764/202 263/765/202 +f 262/764/202 264/766/202 263/765/202 +f 261/767/203 263/768/203 259/769/203 +f 263/768/203 257/770/203 259/769/203 +f 264/771/204 262/772/204 258/773/204 +f 262/772/204 260/774/204 258/773/204 +f 263/775/205 264/776/205 257/777/205 +f 264/776/205 258/778/205 257/777/205 +f 259/779/206 260/780/206 261/781/206 +f 260/780/206 262/782/206 261/781/206 +o cube.032 +v 0.250000 2.000062 -0.531250 +v 0.250000 2.000000 -0.531250 +v 0.250000 2.000062 -0.593750 +v 0.250000 2.000000 -0.593750 +v -0.250000 2.000062 -0.593750 +v -0.250000 2.000000 -0.593750 +v -0.250000 2.000062 -0.531250 +v -0.250000 2.000000 -0.531250 +vt 0.902405 0.574158 +vt 0.902405 0.574280 +vt 0.906189 0.574158 +vt 0.906189 0.574280 +vt 0.937561 0.574158 +vt 0.937561 0.574280 +vt 0.941345 0.574158 +vt 0.941345 0.574280 +vt 0.937439 0.574280 +vt 0.937439 0.578064 +vt 0.906311 0.574280 +vt 0.906311 0.578064 +vt 0.968689 0.578064 +vt 0.968689 0.574280 +vt 0.937561 0.578064 +vt 0.937561 0.574280 +vt 0.941467 0.574158 +vt 0.941467 0.574280 +vt 0.972595 0.574158 +vt 0.972595 0.574280 +vt 0.906311 0.574158 +vt 0.906311 0.574280 +vt 0.937439 0.574158 +vt 0.937439 0.574280 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 265/783/207 266/784/207 267/785/207 +f 266/784/207 268/786/207 267/785/207 +f 269/787/208 270/788/208 271/789/208 +f 270/788/208 272/790/208 271/789/208 +f 269/791/209 271/792/209 267/793/209 +f 271/792/209 265/794/209 267/793/209 +f 272/795/210 270/796/210 266/797/210 +f 270/796/210 268/798/210 266/797/210 +f 271/799/211 272/800/211 265/801/211 +f 272/800/211 266/802/211 265/801/211 +f 267/803/212 268/804/212 269/805/212 +f 268/804/212 270/806/212 269/805/212 +o body +v 0.562500 0.562500 0.562500 +v 0.562500 0.437500 0.562500 +v 0.562500 0.562500 -0.562500 +v 0.562500 0.437500 -0.562500 +v -0.562500 0.562500 -0.562500 +v -0.562500 0.437500 -0.562500 +v -0.562500 0.562500 0.562500 +v -0.562500 0.437500 0.562500 +vt 0.718811 0.687439 +vt 0.718811 0.679749 +vt 0.789001 0.687439 +vt 0.789001 0.679749 +vt 0.859436 0.687439 +vt 0.859436 0.679749 +vt 0.929626 0.687439 +vt 0.929626 0.679749 +vt 0.859314 0.687561 +vt 0.859314 0.757751 +vt 0.789124 0.687561 +vt 0.789124 0.757751 +vt 0.929626 0.757751 +vt 0.929626 0.687561 +vt 0.859436 0.757751 +vt 0.859436 0.687561 +vt 0.929749 0.687439 +vt 0.929749 0.679749 +vt 0.999939 0.687439 +vt 0.999939 0.679749 +vt 0.789124 0.687439 +vt 0.789124 0.679749 +vt 0.859314 0.687439 +vt 0.859314 0.679749 +vn 1.0000 0.0000 0.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 273/807/213 274/808/213 275/809/213 +f 274/808/213 276/810/213 275/809/213 +f 277/811/214 278/812/214 279/813/214 +f 278/812/214 280/814/214 279/813/214 +f 277/815/215 279/816/215 275/817/215 +f 279/816/215 273/818/215 275/817/215 +f 280/819/216 278/820/216 274/821/216 +f 278/820/216 276/822/216 274/821/216 +f 279/823/217 280/824/217 273/825/217 +f 280/824/217 274/826/217 273/825/217 +f 275/827/218 276/828/218 277/829/218 +f 276/828/218 278/830/218 277/829/218 +o body.000 +v 0.562500 3.187500 -0.562437 +v 0.562500 0.437500 -0.562437 +v 0.562500 3.187500 -0.562499 +v 0.562500 0.437500 -0.562500 +v -0.562500 3.187500 -0.562499 +v -0.562500 0.437500 -0.562500 +v -0.562500 3.187500 -0.562437 +v -0.562500 0.437500 -0.562437 +vt 0.718811 0.929626 +vt 0.718811 0.757874 +vt 0.718689 0.929626 +vt 0.718689 0.757874 +vt 0.789124 0.929626 +vt 0.789124 0.757874 +vt 0.789001 0.929626 +vt 0.789001 0.757874 +vt 0.789001 0.929626 +vt 0.789001 0.929749 +vt 0.718811 0.929626 +vt 0.718811 0.929749 +vt 0.859314 0.929626 +vt 0.859314 0.929749 +vt 0.789124 0.929626 +vt 0.789124 0.929749 +vt 0.789124 0.929626 +vt 0.789124 0.757874 +vt 0.859314 0.929626 +vt 0.859314 0.757874 +vt 0.718811 0.757874 +vt 0.789001 0.757874 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 281/831/219 282/832/219 283/833/219 +f 282/832/219 284/834/219 283/833/219 +f 285/835/220 286/836/220 287/837/220 +f 286/836/220 288/838/220 287/837/220 +f 285/839/221 287/840/221 283/841/221 +f 287/840/221 281/842/221 283/841/221 +f 288/843/222 286/844/222 282/845/222 +f 286/844/222 284/846/222 282/845/222 +f 287/847/223 288/848/223 281/849/223 +f 288/848/223 282/850/223 281/849/223 +f 283/841/224 284/851/224 285/839/224 +f 284/851/224 286/852/224 285/839/224 +o body.001 +v -0.562437 3.187500 0.562501 +v -0.562437 0.437500 0.562500 +v -0.562437 3.187500 -0.562499 +v -0.562437 0.437500 -0.562500 +v -0.562500 3.187500 -0.562499 +v -0.562500 0.437500 -0.562500 +v -0.562500 3.187500 0.562501 +v -0.562500 0.437500 0.562500 +vt 0.859436 0.929626 +vt 0.859436 0.757874 +vt 0.929626 0.929626 +vt 0.929626 0.757874 +vt 0.929749 0.929626 +vt 0.929749 0.757874 +vt 0.999939 0.929626 +vt 0.999939 0.757874 +vt 0.929749 0.929749 +vt 0.929749 0.999939 +vt 0.929626 0.929749 +vt 0.929626 0.999939 +vt 0.929749 0.999939 +vt 0.929749 0.929749 +vt 0.929626 0.999939 +vt 0.929626 0.929749 +vt 1.000061 0.929626 +vt 1.000061 0.757874 +vt 0.999939 0.929626 +vt 0.999939 0.757874 +vt 0.929749 0.929626 +vt 0.929749 0.757874 +vt 0.929626 0.929626 +vt 0.929626 0.757874 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 289/853/225 290/854/225 291/855/225 +f 290/854/225 292/856/225 291/855/225 +f 293/857/226 294/858/226 295/859/226 +f 294/858/226 296/860/226 295/859/226 +f 293/861/227 295/862/227 291/863/227 +f 295/862/227 289/864/227 291/863/227 +f 296/865/228 294/866/228 290/867/228 +f 294/866/228 292/868/228 290/867/228 +f 295/869/229 296/870/229 289/871/229 +f 296/870/229 290/872/229 289/871/229 +f 291/873/230 292/874/230 293/875/230 +f 292/874/230 294/876/230 293/875/230 +o body.002 +v 0.562500 3.187500 0.562563 +v 0.562500 0.437500 0.562563 +v 0.562500 3.187500 0.562501 +v 0.562500 0.437500 0.562500 +v -0.562500 3.187500 0.562501 +v -0.562500 0.437500 0.562500 +v -0.562500 3.187500 0.562563 +v -0.562500 0.437500 0.562563 +vt 0.859436 0.929626 +vt 0.859436 0.757874 +vt 0.859314 0.929626 +vt 0.859314 0.757874 +vt 0.929749 0.929626 +vt 0.929749 0.757874 +vt 0.929626 0.929626 +vt 0.929626 0.757874 +vt 0.929626 0.929626 +vt 0.929626 0.929749 +vt 0.859436 0.929626 +vt 0.859436 0.929749 +vt 0.999939 0.929626 +vt 0.999939 0.929749 +vt 0.929749 0.929626 +vt 0.929749 0.929749 +vt 0.929749 0.929626 +vt 0.929749 0.757874 +vt 0.999939 0.929626 +vt 0.999939 0.757874 +vt 0.859436 0.757874 +vt 0.929626 0.757874 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 297/877/231 298/878/231 299/879/231 +f 298/878/231 300/880/231 299/879/231 +f 301/881/232 302/882/232 303/883/232 +f 302/882/232 304/884/232 303/883/232 +f 301/885/233 303/886/233 299/887/233 +f 303/886/233 297/888/233 299/887/233 +f 304/889/234 302/890/234 298/891/234 +f 302/890/234 300/892/234 298/891/234 +f 303/893/235 304/894/235 297/895/235 +f 304/894/235 298/896/235 297/895/235 +f 299/887/236 300/897/236 301/885/236 +f 300/897/236 302/898/236 301/885/236 +o body.003 +v 0.562563 3.187500 0.562501 +v 0.562563 0.437500 0.562500 +v 0.562563 3.187500 -0.562499 +v 0.562563 0.437500 -0.562500 +v 0.562500 3.187500 -0.562499 +v 0.562500 0.437500 -0.562500 +v 0.562500 3.187500 0.562501 +v 0.562500 0.437500 0.562500 +vt 0.859436 0.929626 +vt 0.859436 0.757874 +vt 0.929626 0.929626 +vt 0.929626 0.757874 +vt 0.929749 0.929626 +vt 0.929749 0.757874 +vt 0.999939 0.929626 +vt 0.999939 0.757874 +vt 0.929749 0.929749 +vt 0.929749 0.999939 +vt 0.929626 0.929749 +vt 0.929626 0.999939 +vt 0.929749 0.999939 +vt 0.929749 0.929749 +vt 0.929626 0.999939 +vt 0.929626 0.929749 +vt 1.000061 0.929626 +vt 1.000061 0.757874 +vt 0.999939 0.929626 +vt 0.999939 0.757874 +vt 0.929749 0.929626 +vt 0.929749 0.757874 +vt 0.929626 0.929626 +vt 0.929626 0.757874 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 305/899/237 306/900/237 307/901/237 +f 306/900/237 308/902/237 307/901/237 +f 309/903/238 310/904/238 311/905/238 +f 310/904/238 312/906/238 311/905/238 +f 309/907/239 311/908/239 307/909/239 +f 311/908/239 305/910/239 307/909/239 +f 312/911/240 310/912/240 306/913/240 +f 310/912/240 308/914/240 306/913/240 +f 311/915/241 312/916/241 305/917/241 +f 312/916/241 306/918/241 305/917/241 +f 307/919/242 308/920/242 309/921/242 +f 308/920/242 310/922/242 309/921/242 +o cube.033 +v -0.249938 2.500000 -0.531250 +v -0.249938 2.000000 -0.531250 +v -0.249938 2.500000 -0.593750 +v -0.249938 2.000000 -0.593750 +v -0.250000 2.500000 -0.593750 +v -0.250000 2.000000 -0.593750 +v -0.250000 2.500000 -0.531250 +v -0.250000 2.000000 -0.531250 +vt 0.898499 0.605408 +vt 0.898499 0.574280 +vt 0.902283 0.605408 +vt 0.902283 0.574280 +vt 0.902405 0.605408 +vt 0.902405 0.574280 +vt 0.906189 0.605408 +vt 0.906189 0.574280 +vt 0.902405 0.605530 +vt 0.902405 0.609314 +vt 0.902283 0.605530 +vt 0.902283 0.609314 +vt 0.902405 0.609314 +vt 0.902405 0.605530 +vt 0.902283 0.609314 +vt 0.902283 0.605530 +vt 0.906311 0.605408 +vt 0.906311 0.574280 +vt 0.906189 0.605408 +vt 0.906189 0.574280 +vt 0.902405 0.605408 +vt 0.902405 0.574280 +vt 0.902283 0.605408 +vt 0.902283 0.574280 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 313/923/243 314/924/243 315/925/243 +f 314/924/243 316/926/243 315/925/243 +f 317/927/244 318/928/244 319/929/244 +f 318/928/244 320/930/244 319/929/244 +f 317/931/245 319/932/245 315/933/245 +f 319/932/245 313/934/245 315/933/245 +f 320/935/246 318/936/246 314/937/246 +f 318/936/246 316/938/246 314/937/246 +f 319/939/247 320/940/247 313/941/247 +f 320/940/247 314/942/247 313/941/247 +f 315/943/248 316/944/248 317/945/248 +f 316/944/248 318/946/248 317/945/248 +o cube.034 +v 0.250062 2.500000 -0.531250 +v 0.250062 2.000000 -0.531250 +v 0.250062 2.500000 -0.593750 +v 0.250062 2.000000 -0.593750 +v 0.250000 2.500000 -0.593750 +v 0.250000 2.000000 -0.593750 +v 0.250000 2.500000 -0.531250 +v 0.250000 2.000000 -0.531250 +vt 0.898499 0.605408 +vt 0.898499 0.574280 +vt 0.902283 0.605408 +vt 0.902283 0.574280 +vt 0.902405 0.605408 +vt 0.902405 0.574280 +vt 0.906189 0.605408 +vt 0.906189 0.574280 +vt 0.902405 0.605530 +vt 0.902405 0.609314 +vt 0.902283 0.605530 +vt 0.902283 0.609314 +vt 0.902405 0.609314 +vt 0.902405 0.605530 +vt 0.902283 0.609314 +vt 0.902283 0.605530 +vt 0.906311 0.605408 +vt 0.906311 0.574280 +vt 0.906189 0.605408 +vt 0.906189 0.574280 +vt 0.902405 0.605408 +vt 0.902405 0.574280 +vt 0.902283 0.605408 +vt 0.902283 0.574280 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 321/947/249 322/948/249 323/949/249 +f 322/948/249 324/950/249 323/949/249 +f 325/951/250 326/952/250 327/953/250 +f 326/952/250 328/954/250 327/953/250 +f 325/955/251 327/956/251 323/957/251 +f 327/956/251 321/958/251 323/957/251 +f 328/959/252 326/960/252 322/961/252 +f 326/960/252 324/962/252 322/961/252 +f 327/963/253 328/964/253 321/965/253 +f 328/964/253 322/966/253 321/965/253 +f 323/967/254 324/968/254 325/969/254 +f 324/968/254 326/970/254 325/969/254 +o cube.035 +v 0.250000 2.500062 -0.531250 +v 0.250000 2.500000 -0.531250 +v 0.250000 2.500062 -0.593750 +v 0.250000 2.500000 -0.593750 +v -0.250000 2.500062 -0.593750 +v -0.250000 2.500000 -0.593750 +v -0.250000 2.500062 -0.531250 +v -0.250000 2.500000 -0.531250 +vt 0.902405 0.574158 +vt 0.902405 0.574280 +vt 0.906189 0.574158 +vt 0.906189 0.574280 +vt 0.937561 0.574158 +vt 0.937561 0.574280 +vt 0.941345 0.574158 +vt 0.941345 0.574280 +vt 0.937439 0.574280 +vt 0.937439 0.578064 +vt 0.906311 0.574280 +vt 0.906311 0.578064 +vt 0.968689 0.578064 +vt 0.968689 0.574280 +vt 0.937561 0.578064 +vt 0.937561 0.574280 +vt 0.941467 0.574158 +vt 0.941467 0.574280 +vt 0.972595 0.574158 +vt 0.972595 0.574280 +vt 0.906311 0.574158 +vt 0.906311 0.574280 +vt 0.937439 0.574158 +vt 0.937439 0.574280 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 329/971/255 330/972/255 331/973/255 +f 330/972/255 332/974/255 331/973/255 +f 333/975/256 334/976/256 335/977/256 +f 334/976/256 336/978/256 335/977/256 +f 333/979/257 335/980/257 331/981/257 +f 335/980/257 329/982/257 331/981/257 +f 336/983/258 334/984/258 330/985/258 +f 334/984/258 332/986/258 330/985/258 +f 335/987/259 336/988/259 329/989/259 +f 336/988/259 330/990/259 329/989/259 +f 331/991/260 332/992/260 333/993/260 +f 332/992/260 334/994/260 333/993/260 +o cube.036 +v -0.374938 0.250000 0.375000 +v -0.374938 0.125000 0.375000 +v -0.374938 0.250000 -0.375000 +v -0.374938 0.125000 -0.375000 +v -0.375000 0.250000 -0.375000 +v -0.375000 0.125000 -0.375000 +v -0.375000 0.250000 0.375000 +v -0.375000 0.125000 0.375000 +vt 0.085999 0.453064 +vt 0.085999 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.445374 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.179626 0.453064 +vt 0.179626 0.445374 +vt 0.132874 0.453186 +vt 0.132874 0.499939 +vt 0.132751 0.453186 +vt 0.132751 0.499939 +vt 0.132874 0.499939 +vt 0.132874 0.453186 +vt 0.132751 0.499939 +vt 0.132751 0.453186 +vt 0.179749 0.453064 +vt 0.179749 0.445374 +vt 0.179626 0.453064 +vt 0.179626 0.445374 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.445374 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 337/995/261 338/996/261 339/997/261 +f 338/996/261 340/998/261 339/997/261 +f 341/999/262 342/1000/262 343/1001/262 +f 342/1000/262 344/1002/262 343/1001/262 +f 341/1003/263 343/1004/263 339/1005/263 +f 343/1004/263 337/1006/263 339/1005/263 +f 344/1007/264 342/1008/264 338/1009/264 +f 342/1008/264 340/1010/264 338/1009/264 +f 343/1011/265 344/1012/265 337/1013/265 +f 344/1012/265 338/1014/265 337/1013/265 +f 339/1015/266 340/1016/266 341/1017/266 +f 340/1016/266 342/1018/266 341/1017/266 +o cube.037 +v 0.375062 0.250000 0.375000 +v 0.375062 0.125000 0.375000 +v 0.375062 0.250000 -0.375000 +v 0.375062 0.125000 -0.375000 +v 0.375000 0.250000 -0.375000 +v 0.375000 0.125000 -0.375000 +v 0.375000 0.250000 0.375000 +v 0.375000 0.125000 0.375000 +vt 0.085999 0.453064 +vt 0.085999 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.445374 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.179626 0.453064 +vt 0.179626 0.445374 +vt 0.132874 0.453186 +vt 0.132874 0.499939 +vt 0.132751 0.453186 +vt 0.132751 0.499939 +vt 0.132874 0.499939 +vt 0.132874 0.453186 +vt 0.132751 0.499939 +vt 0.132751 0.453186 +vt 0.179749 0.453064 +vt 0.179749 0.445374 +vt 0.179626 0.453064 +vt 0.179626 0.445374 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.445374 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 345/1019/267 346/1020/267 347/1021/267 +f 346/1020/267 348/1022/267 347/1021/267 +f 349/1023/268 350/1024/268 351/1025/268 +f 350/1024/268 352/1026/268 351/1025/268 +f 349/1027/269 351/1028/269 347/1029/269 +f 351/1028/269 345/1030/269 347/1029/269 +f 352/1031/270 350/1032/270 346/1033/270 +f 350/1032/270 348/1034/270 346/1033/270 +f 351/1035/271 352/1036/271 345/1037/271 +f 352/1036/271 346/1038/271 345/1037/271 +f 347/1039/272 348/1040/272 349/1041/272 +f 348/1040/272 350/1042/272 349/1041/272 +o cube.038 +v 0.375000 0.250000 0.375063 +v 0.375000 0.125000 0.375063 +v 0.375000 0.250000 0.375000 +v 0.375000 0.125000 0.375000 +v -0.375000 0.250000 0.375000 +v -0.375000 0.125000 0.375000 +v -0.375000 0.250000 0.375063 +v -0.375000 0.125000 0.375063 +vt 0.085999 0.453064 +vt 0.085999 0.445374 +vt 0.085876 0.453064 +vt 0.085876 0.445374 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.453186 +vt 0.085999 0.453064 +vt 0.085999 0.453186 +vt 0.179626 0.453064 +vt 0.179626 0.453186 +vt 0.132874 0.453064 +vt 0.132874 0.453186 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.179626 0.453064 +vt 0.179626 0.445374 +vt 0.085999 0.445374 +vt 0.132751 0.445374 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 353/1043/273 354/1044/273 355/1045/273 +f 354/1044/273 356/1046/273 355/1045/273 +f 357/1047/274 358/1048/274 359/1049/274 +f 358/1048/274 360/1050/274 359/1049/274 +f 357/1051/275 359/1052/275 355/1053/275 +f 359/1052/275 353/1054/275 355/1053/275 +f 360/1055/276 358/1056/276 354/1057/276 +f 358/1056/276 356/1058/276 354/1057/276 +f 359/1059/277 360/1060/277 353/1061/277 +f 360/1060/277 354/1062/277 353/1061/277 +f 355/1053/278 356/1063/278 357/1051/278 +f 356/1063/278 358/1064/278 357/1051/278 +o cube.039 +v 0.312500 0.375000 -0.312437 +v 0.312500 0.250000 -0.312437 +v 0.312500 0.375000 -0.312500 +v 0.312500 0.250000 -0.312500 +v -0.312500 0.375000 -0.312500 +v -0.312500 0.250000 -0.312500 +v -0.312500 0.375000 -0.312437 +v -0.312500 0.250000 -0.312437 +vt 0.085999 0.507751 +vt 0.085999 0.500061 +vt 0.085876 0.507751 +vt 0.085876 0.500061 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.507874 +vt 0.085999 0.507751 +vt 0.085999 0.507874 +vt 0.164001 0.507751 +vt 0.164001 0.507874 +vt 0.125061 0.507751 +vt 0.125061 0.507874 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.164001 0.507751 +vt 0.164001 0.500061 +vt 0.085999 0.500061 +vt 0.124939 0.500061 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 361/1065/279 362/1066/279 363/1067/279 +f 362/1066/279 364/1068/279 363/1067/279 +f 365/1069/280 366/1070/280 367/1071/280 +f 366/1070/280 368/1072/280 367/1071/280 +f 365/1073/281 367/1074/281 363/1075/281 +f 367/1074/281 361/1076/281 363/1075/281 +f 368/1077/282 366/1078/282 362/1079/282 +f 366/1078/282 364/1080/282 362/1079/282 +f 367/1081/283 368/1082/283 361/1083/283 +f 368/1082/283 362/1084/283 361/1083/283 +f 363/1075/284 364/1085/284 365/1073/284 +f 364/1085/284 366/1086/284 365/1073/284 +o cube.040 +v 0.312500 0.375000 0.312563 +v 0.312500 0.250000 0.312563 +v 0.312500 0.375000 0.312500 +v 0.312500 0.250000 0.312500 +v -0.312500 0.375000 0.312500 +v -0.312500 0.250000 0.312500 +v -0.312500 0.375000 0.312563 +v -0.312500 0.250000 0.312563 +vt 0.085999 0.507751 +vt 0.085999 0.500061 +vt 0.085876 0.507751 +vt 0.085876 0.500061 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.507874 +vt 0.085999 0.507751 +vt 0.085999 0.507874 +vt 0.164001 0.507751 +vt 0.164001 0.507874 +vt 0.125061 0.507751 +vt 0.125061 0.507874 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.164001 0.507751 +vt 0.164001 0.500061 +vt 0.085999 0.500061 +vt 0.124939 0.500061 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 369/1087/285 370/1088/285 371/1089/285 +f 370/1088/285 372/1090/285 371/1089/285 +f 373/1091/286 374/1092/286 375/1093/286 +f 374/1092/286 376/1094/286 375/1093/286 +f 373/1095/287 375/1096/287 371/1097/287 +f 375/1096/287 369/1098/287 371/1097/287 +f 376/1099/288 374/1100/288 370/1101/288 +f 374/1100/288 372/1102/288 370/1101/288 +f 375/1103/289 376/1104/289 369/1105/289 +f 376/1104/289 370/1106/289 369/1105/289 +f 371/1097/290 372/1107/290 373/1095/290 +f 372/1107/290 374/1108/290 373/1095/290 +o cube.041 +v 0.312562 0.375000 0.312500 +v 0.312562 0.250000 0.312500 +v 0.312562 0.375000 -0.312500 +v 0.312562 0.250000 -0.312500 +v 0.312500 0.375000 -0.312500 +v 0.312500 0.250000 -0.312500 +v 0.312500 0.375000 0.312500 +v 0.312500 0.250000 0.312500 +vt 0.085999 0.507751 +vt 0.085999 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.500061 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.164001 0.507751 +vt 0.164001 0.500061 +vt 0.125061 0.507874 +vt 0.125061 0.546814 +vt 0.124939 0.507874 +vt 0.124939 0.546814 +vt 0.125061 0.546814 +vt 0.125061 0.507874 +vt 0.124939 0.546814 +vt 0.124939 0.507874 +vt 0.164124 0.507751 +vt 0.164124 0.500061 +vt 0.164001 0.507751 +vt 0.164001 0.500061 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.500061 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 377/1109/291 378/1110/291 379/1111/291 +f 378/1110/291 380/1112/291 379/1111/291 +f 381/1113/292 382/1114/292 383/1115/292 +f 382/1114/292 384/1116/292 383/1115/292 +f 381/1117/293 383/1118/293 379/1119/293 +f 383/1118/293 377/1120/293 379/1119/293 +f 384/1121/294 382/1122/294 378/1123/294 +f 382/1122/294 380/1124/294 378/1123/294 +f 383/1125/295 384/1126/295 377/1127/295 +f 384/1126/295 378/1128/295 377/1127/295 +f 379/1129/296 380/1130/296 381/1131/296 +f 380/1130/296 382/1132/296 381/1131/296 +o cube.042 +v 0.250000 0.437500 -0.249937 +v 0.250000 0.375000 -0.249937 +v 0.250000 0.437500 -0.250000 +v 0.250000 0.375000 -0.250000 +v -0.250000 0.437500 -0.250000 +v -0.250000 0.375000 -0.250000 +v -0.250000 0.437500 -0.249937 +v -0.250000 0.375000 -0.249937 +vt 0.085999 0.550720 +vt 0.085999 0.546936 +vt 0.085876 0.550720 +vt 0.085876 0.546936 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.550842 +vt 0.085999 0.550720 +vt 0.085999 0.550842 +vt 0.148376 0.550720 +vt 0.148376 0.550842 +vt 0.117249 0.550720 +vt 0.117249 0.550842 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.148376 0.550720 +vt 0.148376 0.546936 +vt 0.085999 0.546936 +vt 0.117126 0.546936 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 385/1133/297 386/1134/297 387/1135/297 +f 386/1134/297 388/1136/297 387/1135/297 +f 389/1137/298 390/1138/298 391/1139/298 +f 390/1138/298 392/1140/298 391/1139/298 +f 389/1141/299 391/1142/299 387/1143/299 +f 391/1142/299 385/1144/299 387/1143/299 +f 392/1145/300 390/1146/300 386/1147/300 +f 390/1146/300 388/1148/300 386/1147/300 +f 391/1149/301 392/1150/301 385/1151/301 +f 392/1150/301 386/1152/301 385/1151/301 +f 387/1143/302 388/1153/302 389/1141/302 +f 388/1153/302 390/1154/302 389/1141/302 +o cube.043 +v 0.250000 0.437500 0.250063 +v 0.250000 0.375000 0.250063 +v 0.250000 0.437500 0.250000 +v 0.250000 0.375000 0.250000 +v -0.250000 0.437500 0.250000 +v -0.250000 0.375000 0.250000 +v -0.250000 0.437500 0.250063 +v -0.250000 0.375000 0.250063 +vt 0.085999 0.550720 +vt 0.085999 0.546936 +vt 0.085876 0.550720 +vt 0.085876 0.546936 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.550842 +vt 0.085999 0.550720 +vt 0.085999 0.550842 +vt 0.148376 0.550720 +vt 0.148376 0.550842 +vt 0.117249 0.550720 +vt 0.117249 0.550842 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.148376 0.550720 +vt 0.148376 0.546936 +vt 0.085999 0.546936 +vt 0.117126 0.546936 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 393/1155/303 394/1156/303 395/1157/303 +f 394/1156/303 396/1158/303 395/1157/303 +f 397/1159/304 398/1160/304 399/1161/304 +f 398/1160/304 400/1162/304 399/1161/304 +f 397/1163/305 399/1164/305 395/1165/305 +f 399/1164/305 393/1166/305 395/1165/305 +f 400/1167/306 398/1168/306 394/1169/306 +f 398/1168/306 396/1170/306 394/1169/306 +f 399/1171/307 400/1172/307 393/1173/307 +f 400/1172/307 394/1174/307 393/1173/307 +f 395/1165/308 396/1175/308 397/1163/308 +f 396/1175/308 398/1176/308 397/1163/308 +o cube.044 +v -0.249938 0.437500 0.250000 +v -0.249938 0.375000 0.250000 +v -0.249938 0.437500 -0.250000 +v -0.249938 0.375000 -0.250000 +v -0.250000 0.437500 -0.250000 +v -0.250000 0.375000 -0.250000 +v -0.250000 0.437500 0.250000 +v -0.250000 0.375000 0.250000 +vt 0.085999 0.550720 +vt 0.085999 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.546936 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.148376 0.550720 +vt 0.148376 0.546936 +vt 0.117249 0.550842 +vt 0.117249 0.581970 +vt 0.117126 0.550842 +vt 0.117126 0.581970 +vt 0.117249 0.581970 +vt 0.117249 0.550842 +vt 0.117126 0.581970 +vt 0.117126 0.550842 +vt 0.148499 0.550720 +vt 0.148499 0.546936 +vt 0.148376 0.550720 +vt 0.148376 0.546936 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.546936 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 401/1177/309 402/1178/309 403/1179/309 +f 402/1178/309 404/1180/309 403/1179/309 +f 405/1181/310 406/1182/310 407/1183/310 +f 406/1182/310 408/1184/310 407/1183/310 +f 405/1185/311 407/1186/311 403/1187/311 +f 407/1186/311 401/1188/311 403/1187/311 +f 408/1189/312 406/1190/312 402/1191/312 +f 406/1190/312 404/1192/312 402/1191/312 +f 407/1193/313 408/1194/313 401/1195/313 +f 408/1194/313 402/1196/313 401/1195/313 +f 403/1197/314 404/1198/314 405/1199/314 +f 404/1198/314 406/1200/314 405/1199/314 +o cube.045 +v 0.250062 0.437500 0.250000 +v 0.250062 0.375000 0.250000 +v 0.250062 0.437500 -0.250000 +v 0.250062 0.375000 -0.250000 +v 0.250000 0.437500 -0.250000 +v 0.250000 0.375000 -0.250000 +v 0.250000 0.437500 0.250000 +v 0.250000 0.375000 0.250000 +vt 0.085999 0.550720 +vt 0.085999 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.546936 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.148376 0.550720 +vt 0.148376 0.546936 +vt 0.117249 0.550842 +vt 0.117249 0.581970 +vt 0.117126 0.550842 +vt 0.117126 0.581970 +vt 0.117249 0.581970 +vt 0.117249 0.550842 +vt 0.117126 0.581970 +vt 0.117126 0.550842 +vt 0.148499 0.550720 +vt 0.148499 0.546936 +vt 0.148376 0.550720 +vt 0.148376 0.546936 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.546936 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 409/1201/315 410/1202/315 411/1203/315 +f 410/1202/315 412/1204/315 411/1203/315 +f 413/1205/316 414/1206/316 415/1207/316 +f 414/1206/316 416/1208/316 415/1207/316 +f 413/1209/317 415/1210/317 411/1211/317 +f 415/1210/317 409/1212/317 411/1211/317 +f 416/1213/318 414/1214/318 410/1215/318 +f 414/1214/318 412/1216/318 410/1215/318 +f 415/1217/319 416/1218/319 409/1219/319 +f 416/1218/319 410/1220/319 409/1219/319 +f 411/1221/320 412/1222/320 413/1223/320 +f 412/1222/320 414/1224/320 413/1223/320 +o cube.046 +v 0.375000 0.250062 0.375000 +v 0.375000 0.250000 0.375000 +v 0.375000 0.250063 -0.375000 +v 0.375000 0.250000 -0.375000 +v -0.375000 0.250063 -0.375000 +v -0.375000 0.250000 -0.375000 +v -0.375000 0.250062 0.375000 +v -0.375000 0.250000 0.375000 +vt 0.039124 0.453064 +vt 0.039124 0.453186 +vt 0.085876 0.453064 +vt 0.085876 0.453186 +vt 0.132874 0.453064 +vt 0.132874 0.453186 +vt 0.179626 0.453064 +vt 0.179626 0.453186 +vt 0.132751 0.453186 +vt 0.132751 0.499939 +vt 0.085999 0.453186 +vt 0.085999 0.499939 +vt 0.179626 0.499939 +vt 0.179626 0.453186 +vt 0.132874 0.499939 +vt 0.132874 0.453186 +vt 0.179749 0.453064 +vt 0.179749 0.453186 +vt 0.226501 0.453064 +vt 0.226501 0.453186 +vt 0.085999 0.453064 +vt 0.085999 0.453186 +vt 0.132751 0.453064 +vt 0.132751 0.453186 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 417/1225/321 418/1226/321 419/1227/321 +f 418/1226/321 420/1228/321 419/1227/321 +f 421/1229/322 422/1230/322 423/1231/322 +f 422/1230/322 424/1232/322 423/1231/322 +f 421/1233/323 423/1234/323 419/1235/323 +f 423/1234/323 417/1236/323 419/1235/323 +f 424/1237/324 422/1238/324 418/1239/324 +f 422/1238/324 420/1240/324 418/1239/324 +f 423/1241/325 424/1242/325 417/1243/325 +f 424/1242/325 418/1244/325 417/1243/325 +f 419/1245/326 420/1246/326 421/1247/326 +f 420/1246/326 422/1248/326 421/1247/326 +o cube.047 +v 0.312500 0.375062 0.312500 +v 0.312500 0.375000 0.312500 +v 0.312500 0.375063 -0.312500 +v 0.312500 0.375000 -0.312500 +v -0.312500 0.375063 -0.312500 +v -0.312500 0.375000 -0.312500 +v -0.312500 0.375062 0.312500 +v -0.312500 0.375000 0.312500 +vt 0.046936 0.507751 +vt 0.046936 0.507874 +vt 0.085876 0.507751 +vt 0.085876 0.507874 +vt 0.125061 0.507751 +vt 0.125061 0.507874 +vt 0.164001 0.507751 +vt 0.164001 0.507874 +vt 0.124939 0.507874 +vt 0.124939 0.546814 +vt 0.085999 0.507874 +vt 0.085999 0.546814 +vt 0.164001 0.546814 +vt 0.164001 0.507874 +vt 0.125061 0.546814 +vt 0.125061 0.507874 +vt 0.164124 0.507751 +vt 0.164124 0.507874 +vt 0.203064 0.507751 +vt 0.203064 0.507874 +vt 0.085999 0.507751 +vt 0.085999 0.507874 +vt 0.124939 0.507751 +vt 0.124939 0.507874 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 425/1249/327 426/1250/327 427/1251/327 +f 426/1250/327 428/1252/327 427/1251/327 +f 429/1253/328 430/1254/328 431/1255/328 +f 430/1254/328 432/1256/328 431/1255/328 +f 429/1257/329 431/1258/329 427/1259/329 +f 431/1258/329 425/1260/329 427/1259/329 +f 432/1261/330 430/1262/330 426/1263/330 +f 430/1262/330 428/1264/330 426/1263/330 +f 431/1265/331 432/1266/331 425/1267/331 +f 432/1266/331 426/1268/331 425/1267/331 +f 427/1269/332 428/1270/332 429/1271/332 +f 428/1270/332 430/1272/332 429/1271/332 diff --git a/src/main/resources/assets/boss_tools/models/item/rocket_t2.json b/src/main/resources/assets/boss_tools/models/item/rocket_t2.json new file mode 100644 index 000000000..46fb25325 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/rocket_t2.json @@ -0,0 +1,134 @@ +{ + "forge_marker": 1, + "parent": "forge:item/default", + "loader": "forge:obj", + "flip-v": true, + "model": "boss_tools:models/item/rocket_t2.obj", + "display": { + "thirdperson_righthand": { + "rotation": [ + -90, + 0, + -90 + ], + "translation": [ + -25, + 4.5, + -1 + ], + "scale": [ + 0.8, + 0.8, + 0.8 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + -90, + 0, + -90 + ], + "translation": [ + -25, + 4.5, + -13.5 + ], + "scale": [ + 0.8, + 0.8, + 0.8 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 0, + 90 + ], + "translation": [ + 3, + 25, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 0, + 90 + ], + "translation": [ + 3, + 15, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "ground": { + "translation": [ + 2, + 2, + 2 + ], + "scale": [ + 0.2, + 0.2, + 0.2 + ] + }, + "gui": { + "rotation": [ + -41, + -170, + -26 + ], + "translation": [ + -0.5, + -4.8, + 0 + ], + "scale": [ + 0.2, + 0.2, + 0.2 + ] + }, + "fixed": { + "translation": [ + 1, + -2.5, + 0 + ], + "scale": [ + 0.2, + 0.2, + 0.2 + ] + }, + "head": { + "translation": [ + 2.5, + 9, + 2.25 + ], + "scale": [ + 0.3, + 0.3, + 0.3 + ] + } + }, + "textures": { + "m_0": "boss_tools:vehicle_items/rocket_t2", + "particle": "boss_tools:vehicle_items/rocket_t2" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/rocket_t2.mtl b/src/main/resources/assets/boss_tools/models/item/rocket_t2.mtl new file mode 100644 index 000000000..414f07ecf --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/rocket_t2.mtl @@ -0,0 +1,7 @@ +newmtl m_0 +Ka 0.0 0.0 0.0 +Kd 0.8 0.8 0.8 +Ks 0.0 0.0 0.0 +map_Kd boss_tools:vehicle_items/rocket_t2 +Ns 0.0 +d 1.0 \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/rocket_t2.obj b/src/main/resources/assets/boss_tools/models/item/rocket_t2.obj new file mode 100644 index 000000000..718616b0b --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/rocket_t2.obj @@ -0,0 +1,3108 @@ +mtllib rocket_t2.mtl +o cube +v -0.750000 1.250000 -0.062500 +v -0.750000 1.062500 -0.062500 +v -0.750000 1.250000 0.062500 +v -0.750000 1.062500 0.062500 +v -0.562500 1.250000 0.062500 +v -0.562500 1.062500 0.062500 +v -0.562500 1.250000 -0.062500 +v -0.562500 1.062500 -0.062500 +vt 0.000061 0.339783 +vt 0.000061 0.328186 +vt 0.007751 0.339783 +vt 0.007751 0.328186 +vt 0.019592 0.339783 +vt 0.019592 0.328186 +vt 0.027283 0.339783 +vt 0.027283 0.328186 +vt 0.019470 0.339905 +vt 0.019470 0.347595 +vt 0.007874 0.339905 +vt 0.007874 0.347595 +vt 0.031189 0.347595 +vt 0.031189 0.339905 +vt 0.019592 0.347595 +vt 0.019592 0.339905 +vt 0.027405 0.339783 +vt 0.027405 0.328186 +vt 0.039001 0.339783 +vt 0.039001 0.328186 +vt 0.007874 0.339783 +vt 0.007874 0.328186 +vt 0.019470 0.339783 +vt 0.019470 0.328186 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +usemtl m_0 +s 1 +f 1/1/1 2/2/1 3/3/1 +f 2/2/1 4/4/1 3/3/1 +f 5/5/2 6/6/2 7/7/2 +f 6/6/2 8/8/2 7/7/2 +f 5/9/3 7/10/3 3/11/3 +f 7/10/3 1/12/3 3/11/3 +f 8/13/4 6/14/4 2/15/4 +f 6/14/4 4/16/4 2/15/4 +f 7/17/5 8/18/5 1/19/5 +f 8/18/5 2/20/5 1/19/5 +f 3/21/6 4/22/6 5/23/6 +f 4/22/6 6/24/6 5/23/6 +o body +v -0.562437 3.375000 0.562501 +v -0.562437 0.437500 0.562500 +v -0.562437 3.375000 -0.562499 +v -0.562437 0.437500 -0.562500 +v -0.562500 3.375000 -0.562499 +v -0.562500 0.437500 -0.562500 +v -0.562500 3.375000 0.562501 +v -0.562500 0.437500 0.562500 +vt 0.859436 0.929626 +vt 0.859436 0.746155 +vt 0.929626 0.929626 +vt 0.929626 0.746155 +vt 0.929749 0.929626 +vt 0.929749 0.746155 +vt 0.999939 0.929626 +vt 0.999939 0.746155 +vt 0.929749 0.929749 +vt 0.929749 0.999939 +vt 0.929626 0.929749 +vt 0.929626 0.999939 +vt 0.929749 0.999939 +vt 0.929749 0.929749 +vt 0.929626 0.999939 +vt 0.929626 0.929749 +vt 1.000061 0.929626 +vt 1.000061 0.746155 +vt 0.999939 0.929626 +vt 0.999939 0.746155 +vt 0.929749 0.929626 +vt 0.929749 0.746155 +vt 0.929626 0.929626 +vt 0.929626 0.746155 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 9/25/7 10/26/7 11/27/7 +f 10/26/7 12/28/7 11/27/7 +f 13/29/8 14/30/8 15/31/8 +f 14/30/8 16/32/8 15/31/8 +f 13/33/9 15/34/9 11/35/9 +f 15/34/9 9/36/9 11/35/9 +f 16/37/10 14/38/10 10/39/10 +f 14/38/10 12/40/10 10/39/10 +f 15/41/11 16/42/11 9/43/11 +f 16/42/11 10/44/11 9/43/11 +f 11/45/12 12/46/12 13/47/12 +f 12/46/12 14/48/12 13/47/12 +o cube.000 +v -0.557648 1.157260 -0.469259 +v -1.158450 0.761055 -1.070062 +v -0.389552 0.647461 -0.301164 +v -0.990355 0.251257 -0.901967 +v -0.301164 0.647461 -0.389552 +v -0.901967 0.251257 -0.990355 +v -0.469259 1.157260 -0.557647 +v -1.070062 0.761055 -1.158450 +vt 0.000061 0.546814 +vt 0.000061 0.488342 +vt 0.035095 0.546814 +vt 0.035095 0.488342 +vt 0.043030 0.546814 +vt 0.043030 0.488342 +vt 0.078064 0.546814 +vt 0.078064 0.488342 +vt 0.042908 0.546936 +vt 0.042908 0.581970 +vt 0.035217 0.546936 +vt 0.035217 0.581970 +vt 0.050720 0.581970 +vt 0.050720 0.546936 +vt 0.043030 0.581970 +vt 0.043030 0.546936 +vt 0.078186 0.546814 +vt 0.078186 0.488342 +vt 0.085876 0.546814 +vt 0.085876 0.488342 +vt 0.035217 0.546814 +vt 0.035217 0.488342 +vt 0.042908 0.546814 +vt 0.042908 0.488342 +vn -0.7071 0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.6409 0.4226 0.6409 +vn -0.6409 -0.4226 -0.6409 +vn -0.2988 0.9063 -0.2988 +vn 0.2988 -0.9063 0.2988 +usemtl m_0 +s 1 +f 17/49/13 18/50/13 19/51/13 +f 18/50/13 20/52/13 19/51/13 +f 21/53/14 22/54/14 23/55/14 +f 22/54/14 24/56/14 23/55/14 +f 21/57/15 23/58/15 19/59/15 +f 23/58/15 17/60/15 19/59/15 +f 24/61/16 22/62/16 18/63/16 +f 22/62/16 20/64/16 18/63/16 +f 23/65/17 24/66/17 17/67/17 +f 24/66/17 18/68/17 17/67/17 +f 19/69/18 20/70/18 21/71/18 +f 20/70/18 22/72/18 21/71/18 +o cube.001 +v -1.211549 1.000000 -1.034772 +v -1.211549 -0.062500 -1.034772 +v -1.034772 1.000000 -0.857995 +v -1.034772 -0.062500 -0.857995 +v -0.857995 1.000000 -1.034772 +v -0.857995 -0.062500 -1.034772 +v -1.034772 1.000000 -1.211548 +v -1.034772 -0.062500 -1.211549 +vt 0.000061 0.472595 +vt 0.000061 0.406311 +vt 0.015564 0.472595 +vt 0.015564 0.406311 +vt 0.031311 0.472595 +vt 0.031311 0.406311 +vt 0.046814 0.472595 +vt 0.046814 0.406311 +vt 0.031189 0.472717 +vt 0.031189 0.488220 +vt 0.015686 0.472717 +vt 0.015686 0.488220 +vt 0.046814 0.488220 +vt 0.046814 0.472717 +vt 0.031311 0.488220 +vt 0.031311 0.472717 +vt 0.046936 0.472595 +vt 0.046936 0.406311 +vt 0.062439 0.472595 +vt 0.062439 0.406311 +vt 0.015686 0.472595 +vt 0.015686 0.406311 +vt 0.031189 0.472595 +vt 0.031189 0.406311 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +usemtl m_0 +s 1 +f 25/73/19 26/74/19 27/75/19 +f 26/74/19 28/76/19 27/75/19 +f 29/77/20 30/78/20 31/79/20 +f 30/78/20 32/80/20 31/79/20 +f 29/81/21 31/82/21 27/83/21 +f 31/82/21 25/84/21 27/83/21 +f 32/85/22 30/86/22 26/87/22 +f 30/86/22 28/88/22 26/87/22 +f 31/89/23 32/90/23 25/91/23 +f 32/90/23 26/92/23 25/91/23 +f 27/93/24 28/94/24 29/95/24 +f 28/94/24 30/96/24 29/95/24 +o cube.002 +v -0.469259 1.157259 0.557648 +v -1.070062 0.761055 1.158450 +v -0.301164 0.647461 0.389552 +v -0.901967 0.251257 0.990355 +v -0.389552 0.647461 0.301164 +v -0.990355 0.251257 0.901967 +v -0.557648 1.157259 0.469259 +v -1.158450 0.761055 1.070062 +vt 0.000061 0.546814 +vt 0.000061 0.488342 +vt 0.035095 0.546814 +vt 0.035095 0.488342 +vt 0.043030 0.546814 +vt 0.043030 0.488342 +vt 0.078064 0.546814 +vt 0.078064 0.488342 +vt 0.042908 0.546936 +vt 0.042908 0.581970 +vt 0.035217 0.546936 +vt 0.035217 0.581970 +vt 0.050720 0.581970 +vt 0.050720 0.546936 +vt 0.043030 0.581970 +vt 0.043030 0.546936 +vt 0.078186 0.546814 +vt 0.078186 0.488342 +vt 0.085876 0.546814 +vt 0.085876 0.488342 +vt 0.035217 0.546814 +vt 0.035217 0.488342 +vt 0.042908 0.546814 +vt 0.042908 0.488342 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.6409 0.4226 -0.6409 +vn -0.6409 -0.4226 0.6409 +vn -0.2988 0.9063 0.2988 +vn 0.2988 -0.9063 -0.2988 +usemtl m_0 +s 1 +f 33/97/25 34/98/25 35/99/25 +f 34/98/25 36/100/25 35/99/25 +f 37/101/26 38/102/26 39/103/26 +f 38/102/26 40/104/26 39/103/26 +f 37/105/27 39/106/27 35/107/27 +f 39/106/27 33/108/27 35/107/27 +f 40/109/28 38/110/28 34/111/28 +f 38/110/28 36/112/28 34/111/28 +f 39/113/29 40/114/29 33/115/29 +f 40/114/29 34/116/29 33/115/29 +f 35/117/30 36/118/30 37/119/30 +f 36/118/30 38/120/30 37/119/30 +o cube.003 +v -1.034772 1.000000 1.211549 +v -1.034772 -0.062500 1.211549 +v -0.857995 1.000000 1.034772 +v -0.857995 -0.062500 1.034772 +v -1.034772 1.000000 0.857995 +v -1.034772 -0.062500 0.857995 +v -1.211549 1.000000 1.034772 +v -1.211549 -0.062500 1.034772 +vt 0.000061 0.472595 +vt 0.000061 0.406311 +vt 0.015564 0.472595 +vt 0.015564 0.406311 +vt 0.031311 0.472595 +vt 0.031311 0.406311 +vt 0.046814 0.472595 +vt 0.046814 0.406311 +vt 0.031189 0.472717 +vt 0.031189 0.488220 +vt 0.015686 0.472717 +vt 0.015686 0.488220 +vt 0.046814 0.488220 +vt 0.046814 0.472717 +vt 0.031311 0.488220 +vt 0.031311 0.472717 +vt 0.046936 0.472595 +vt 0.046936 0.406311 +vt 0.062439 0.472595 +vt 0.062439 0.406311 +vt 0.015686 0.472595 +vt 0.015686 0.406311 +vt 0.031189 0.472595 +vt 0.031189 0.406311 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +usemtl m_0 +s 1 +f 41/121/31 42/122/31 43/123/31 +f 42/122/31 44/124/31 43/123/31 +f 45/125/32 46/126/32 47/127/32 +f 46/126/32 48/128/32 47/127/32 +f 45/129/33 47/130/33 43/131/33 +f 47/130/33 41/132/33 43/131/33 +f 48/133/34 46/134/34 42/135/34 +f 46/134/34 44/136/34 42/135/34 +f 47/137/35 48/138/35 41/139/35 +f 48/138/35 42/140/35 41/139/35 +f 43/141/36 44/142/36 45/143/36 +f 44/142/36 46/144/36 45/143/36 +o cube.004 +v 0.469259 1.157260 -0.557647 +v 1.070062 0.761055 -1.158450 +v 0.301164 0.647461 -0.389552 +v 0.901967 0.251257 -0.990355 +v 0.389552 0.647461 -0.301164 +v 0.990355 0.251257 -0.901967 +v 0.557648 1.157260 -0.469259 +v 1.158450 0.761055 -1.070062 +vt 0.000061 0.546814 +vt 0.000061 0.488342 +vt 0.035095 0.546814 +vt 0.035095 0.488342 +vt 0.043030 0.546814 +vt 0.043030 0.488342 +vt 0.078064 0.546814 +vt 0.078064 0.488342 +vt 0.042908 0.546936 +vt 0.042908 0.581970 +vt 0.035217 0.546936 +vt 0.035217 0.581970 +vt 0.050720 0.581970 +vt 0.050720 0.546936 +vt 0.043030 0.581970 +vt 0.043030 0.546936 +vt 0.078186 0.546814 +vt 0.078186 0.488342 +vt 0.085876 0.546814 +vt 0.085876 0.488342 +vt 0.035217 0.546814 +vt 0.035217 0.488342 +vt 0.042908 0.546814 +vt 0.042908 0.488342 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +vn -0.6409 0.4226 0.6409 +vn 0.6409 -0.4226 -0.6409 +vn 0.2988 0.9063 -0.2988 +vn -0.2988 -0.9063 0.2988 +usemtl m_0 +s 1 +f 49/145/37 50/146/37 51/147/37 +f 50/146/37 52/148/37 51/147/37 +f 53/149/38 54/150/38 55/151/38 +f 54/150/38 56/152/38 55/151/38 +f 53/153/39 55/154/39 51/155/39 +f 55/154/39 49/156/39 51/155/39 +f 56/157/40 54/158/40 50/159/40 +f 54/158/40 52/160/40 50/159/40 +f 55/161/41 56/162/41 49/163/41 +f 56/162/41 50/164/41 49/163/41 +f 51/165/42 52/166/42 53/167/42 +f 52/166/42 54/168/42 53/167/42 +o cube.005 +v 1.034772 1.000000 -1.211548 +v 1.034772 -0.062500 -1.211549 +v 0.857995 1.000000 -1.034772 +v 0.857995 -0.062500 -1.034772 +v 1.034772 1.000000 -0.857995 +v 1.034772 -0.062500 -0.857995 +v 1.211549 1.000000 -1.034772 +v 1.211549 -0.062500 -1.034772 +vt 0.000061 0.472595 +vt 0.000061 0.406311 +vt 0.015564 0.472595 +vt 0.015564 0.406311 +vt 0.031311 0.472595 +vt 0.031311 0.406311 +vt 0.046814 0.472595 +vt 0.046814 0.406311 +vt 0.031189 0.472717 +vt 0.031189 0.488220 +vt 0.015686 0.472717 +vt 0.015686 0.488220 +vt 0.046814 0.488220 +vt 0.046814 0.472717 +vt 0.031311 0.488220 +vt 0.031311 0.472717 +vt 0.046936 0.472595 +vt 0.046936 0.406311 +vt 0.062439 0.472595 +vt 0.062439 0.406311 +vt 0.015686 0.472595 +vt 0.015686 0.406311 +vt 0.031189 0.472595 +vt 0.031189 0.406311 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +vn 0.0000 1.0000 0.0000 +vn -0.0000 -1.0000 -0.0000 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 -0.0000 0.7071 +usemtl m_0 +s 1 +f 57/169/43 58/170/43 59/171/43 +f 58/170/43 60/172/43 59/171/43 +f 61/173/44 62/174/44 63/175/44 +f 62/174/44 64/176/44 63/175/44 +f 61/177/45 63/178/45 59/179/45 +f 63/178/45 57/180/45 59/179/45 +f 64/181/46 62/182/46 58/183/46 +f 62/182/46 60/184/46 58/183/46 +f 63/185/47 64/186/47 57/187/47 +f 64/186/47 58/188/47 57/187/47 +f 59/189/48 60/190/48 61/191/48 +f 60/190/48 62/192/48 61/191/48 +o cube.006 +v 0.557648 1.157259 0.469259 +v 1.158450 0.761055 1.070062 +v 0.389552 0.647461 0.301164 +v 0.990355 0.251257 0.901967 +v 0.301164 0.647461 0.389552 +v 0.901967 0.251257 0.990355 +v 0.469259 1.157259 0.557648 +v 1.070062 0.761055 1.158450 +vt 0.000061 0.546814 +vt 0.000061 0.488342 +vt 0.035095 0.546814 +vt 0.035095 0.488342 +vt 0.043030 0.546814 +vt 0.043030 0.488342 +vt 0.078064 0.546814 +vt 0.078064 0.488342 +vt 0.042908 0.546936 +vt 0.042908 0.581970 +vt 0.035217 0.546936 +vt 0.035217 0.581970 +vt 0.050720 0.581970 +vt 0.050720 0.546936 +vt 0.043030 0.581970 +vt 0.043030 0.546936 +vt 0.078186 0.546814 +vt 0.078186 0.488342 +vt 0.085876 0.546814 +vt 0.085876 0.488342 +vt 0.035217 0.546814 +vt 0.035217 0.488342 +vt 0.042908 0.546814 +vt 0.042908 0.488342 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 -0.0000 0.7071 +vn -0.6409 0.4226 -0.6409 +vn 0.6409 -0.4226 0.6409 +vn 0.2988 0.9063 0.2988 +vn -0.2988 -0.9063 -0.2988 +usemtl m_0 +s 1 +f 65/193/49 66/194/49 67/195/49 +f 66/194/49 68/196/49 67/195/49 +f 69/197/50 70/198/50 71/199/50 +f 70/198/50 72/200/50 71/199/50 +f 69/201/51 71/202/51 67/203/51 +f 71/202/51 65/204/51 67/203/51 +f 72/205/52 70/206/52 66/207/52 +f 70/206/52 68/208/52 66/207/52 +f 71/209/53 72/210/53 65/211/53 +f 72/210/53 66/212/53 65/211/53 +f 67/213/54 68/214/54 69/215/54 +f 68/214/54 70/216/54 69/215/54 +o cube.007 +v 1.211549 1.000000 1.034772 +v 1.211549 -0.062500 1.034772 +v 1.034772 1.000000 0.857995 +v 1.034772 -0.062500 0.857995 +v 0.857995 1.000000 1.034772 +v 0.857995 -0.062500 1.034772 +v 1.034772 1.000000 1.211549 +v 1.034772 -0.062500 1.211549 +vt 0.000061 0.472595 +vt 0.000061 0.406311 +vt 0.015564 0.472595 +vt 0.015564 0.406311 +vt 0.031311 0.472595 +vt 0.031311 0.406311 +vt 0.046814 0.472595 +vt 0.046814 0.406311 +vt 0.031189 0.472717 +vt 0.031189 0.488220 +vt 0.015686 0.472717 +vt 0.015686 0.488220 +vt 0.046814 0.488220 +vt 0.046814 0.472717 +vt 0.031311 0.488220 +vt 0.031311 0.472717 +vt 0.046936 0.472595 +vt 0.046936 0.406311 +vt 0.062439 0.472595 +vt 0.062439 0.406311 +vt 0.015686 0.472595 +vt 0.015686 0.406311 +vt 0.031189 0.472595 +vt 0.031189 0.406311 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 0.7071 +vn -0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.7071 -0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +usemtl m_0 +s 1 +f 73/217/55 74/218/55 75/219/55 +f 74/218/55 76/220/55 75/219/55 +f 77/221/56 78/222/56 79/223/56 +f 78/222/56 80/224/56 79/223/56 +f 77/225/57 79/226/57 75/227/57 +f 79/226/57 73/228/57 75/227/57 +f 80/229/58 78/230/58 74/231/58 +f 78/230/58 76/232/58 74/231/58 +f 79/233/59 80/234/59 73/235/59 +f 80/234/59 74/236/59 73/235/59 +f 75/237/60 76/238/60 77/239/60 +f 76/238/60 78/240/60 77/239/60 +o cube.008 +v 0.500000 4.778695 0.055675 +v 0.500000 3.369156 0.568705 +v 0.500000 4.778674 0.055616 +v 0.500000 3.369135 0.568646 +v -0.500000 4.778674 0.055616 +v -0.500000 3.369135 0.568646 +v -0.500000 4.778695 0.055675 +v -0.500000 3.369156 0.568705 +vt 0.000061 0.999939 +vt 0.000061 0.906311 +vt -0.000061 0.999939 +vt -0.000061 0.906311 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.062439 0.999939 +vt 0.062439 0.906311 +vt 0.062439 0.999939 +vt 0.062439 1.000061 +vt 0.000061 0.999939 +vt 0.000061 1.000061 +vt 0.124939 0.999939 +vt 0.124939 1.000061 +vt 0.062561 0.999939 +vt 0.062561 1.000061 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.124939 0.999939 +vt 0.124939 0.906311 +vt 0.000061 0.906311 +vt 0.062439 0.906311 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.9397 -0.3420 +vn 0.0000 -0.9397 0.3420 +vn 0.0000 -0.9397 0.3421 +vn 0.0000 0.3420 0.9397 +vn 0.0000 -0.3420 -0.9397 +usemtl m_0 +s 1 +f 81/241/61 82/242/61 83/243/61 +f 82/242/61 84/244/61 83/243/61 +f 85/245/62 86/246/62 87/247/62 +f 86/246/62 88/248/62 87/247/62 +f 85/249/63 87/250/63 83/251/63 +f 87/250/63 81/252/63 83/251/63 +f 88/253/64 86/254/65 82/255/65 +f 86/254/65 84/256/64 82/255/65 +f 87/257/66 88/258/66 81/259/66 +f 88/258/66 82/260/66 81/259/66 +f 83/251/67 84/261/67 85/249/67 +f 84/261/67 86/262/67 85/249/67 +o cube.009 +v 0.055674 4.778695 -0.499999 +v 0.568705 3.369156 -0.499999 +v 0.055616 4.778674 -0.499999 +v 0.568646 3.369135 -0.499999 +v 0.055616 4.778674 0.500001 +v 0.568646 3.369135 0.500001 +v 0.055674 4.778695 0.500001 +v 0.568705 3.369156 0.500001 +vt 0.000061 0.999939 +vt 0.000061 0.906311 +vt -0.000061 0.999939 +vt -0.000061 0.906311 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.062439 0.999939 +vt 0.062439 0.906311 +vt 0.062439 0.999939 +vt 0.062439 1.000061 +vt 0.000061 0.999939 +vt 0.000061 1.000061 +vt 0.124939 0.999939 +vt 0.124939 1.000061 +vt 0.062561 0.999939 +vt 0.062561 1.000061 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.124939 0.999939 +vt 0.124939 0.906311 +vt 0.000061 0.906311 +vt 0.062439 0.906311 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +vn -0.3420 0.9397 0.0000 +vn 0.3421 -0.9397 0.0000 +vn 0.3420 -0.9397 -0.0000 +vn 0.9397 0.3420 0.0000 +vn -0.9397 -0.3420 0.0000 +usemtl m_0 +s 1 +f 89/263/68 90/264/68 91/265/68 +f 90/264/68 92/266/68 91/265/68 +f 93/267/69 94/268/69 95/269/69 +f 94/268/69 96/270/69 95/269/69 +f 93/271/70 95/272/70 91/273/70 +f 95/272/70 89/274/70 91/273/70 +f 96/275/71 94/276/71 90/277/72 +f 94/276/71 92/278/72 90/277/72 +f 95/279/73 96/280/73 89/281/73 +f 96/280/73 90/282/73 89/281/73 +f 91/273/74 92/283/74 93/271/74 +f 92/283/74 94/284/74 93/271/74 +o cube.010 +v -0.500000 4.778695 -0.055674 +v -0.500000 3.369156 -0.568704 +v -0.500000 4.778674 -0.055615 +v -0.500000 3.369135 -0.568645 +v 0.500000 4.778674 -0.055615 +v 0.500000 3.369135 -0.568645 +v 0.500000 4.778695 -0.055674 +v 0.500000 3.369156 -0.568704 +vt 0.000061 0.999939 +vt 0.000061 0.906311 +vt -0.000061 0.999939 +vt -0.000061 0.906311 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.062439 0.999939 +vt 0.062439 0.906311 +vt 0.062439 0.999939 +vt 0.062439 1.000061 +vt 0.000061 0.999939 +vt 0.000061 1.000061 +vt 0.124939 0.999939 +vt 0.124939 1.000061 +vt 0.062561 0.999939 +vt 0.062561 1.000061 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.124939 0.999939 +vt 0.124939 0.906311 +vt 0.000061 0.906311 +vt 0.062439 0.906311 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.9397 0.3420 +vn 0.0000 -0.9397 -0.3420 +vn -0.0000 -0.9397 -0.3421 +vn 0.0000 0.3420 -0.9397 +vn 0.0000 -0.3420 0.9397 +usemtl m_0 +s 1 +f 97/285/75 98/286/75 99/287/75 +f 98/286/75 100/288/75 99/287/75 +f 101/289/76 102/290/76 103/291/76 +f 102/290/76 104/292/76 103/291/76 +f 101/293/77 103/294/77 99/295/77 +f 103/294/77 97/296/77 99/295/77 +f 104/297/78 102/298/79 98/299/79 +f 102/298/79 100/300/78 98/299/79 +f 103/301/80 104/302/80 97/303/80 +f 104/302/80 98/304/80 97/303/80 +f 99/295/81 100/305/81 101/293/81 +f 100/305/81 102/306/81 101/293/81 +o cube.011 +v -0.055674 4.778695 0.500001 +v -0.568705 3.369156 0.500001 +v -0.055616 4.778674 0.500001 +v -0.568646 3.369135 0.500001 +v -0.055616 4.778674 -0.499999 +v -0.568646 3.369135 -0.499999 +v -0.055674 4.778695 -0.499999 +v -0.568705 3.369156 -0.499999 +vt 0.000061 0.999939 +vt 0.000061 0.906311 +vt -0.000061 0.999939 +vt -0.000061 0.906311 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.062439 0.999939 +vt 0.062439 0.906311 +vt 0.062439 0.999939 +vt 0.062439 1.000061 +vt 0.000061 0.999939 +vt 0.000061 1.000061 +vt 0.124939 0.999939 +vt 0.124939 1.000061 +vt 0.062561 0.999939 +vt 0.062561 1.000061 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.124939 0.999939 +vt 0.124939 0.906311 +vt 0.000061 0.906311 +vt 0.062439 0.906311 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.3420 0.9397 0.0000 +vn -0.3421 -0.9397 0.0000 +vn -0.3420 -0.9397 0.0000 +vn -0.9397 0.3420 0.0000 +vn 0.9397 -0.3420 0.0000 +usemtl m_0 +s 1 +f 105/307/82 106/308/82 107/309/82 +f 106/308/82 108/310/82 107/309/82 +f 109/311/83 110/312/83 111/313/83 +f 110/312/83 112/314/83 111/313/83 +f 109/315/84 111/316/84 107/317/84 +f 111/316/84 105/318/84 107/317/84 +f 112/319/85 110/320/85 106/321/86 +f 110/320/85 108/322/86 106/321/86 +f 111/323/87 112/324/87 105/325/87 +f 112/324/87 106/326/87 105/325/87 +f 107/317/88 108/327/88 109/315/88 +f 108/327/88 110/328/88 109/315/88 +o cube.012 +v 0.096017 4.833463 0.007629 +v -0.454961 3.336632 -0.543349 +v 0.017615 4.891182 -0.070772 +v -0.533363 3.394351 -0.621750 +v -0.070773 4.891182 0.017616 +v -0.621751 3.394351 -0.533362 +v 0.007629 4.833463 0.096018 +v -0.543350 3.336632 -0.454961 +vt 0.000061 0.898376 +vt 0.000061 0.793030 +vt 0.007751 0.898376 +vt 0.007751 0.793030 +vt 0.015686 0.898376 +vt 0.015686 0.793030 +vt 0.023376 0.898376 +vt 0.023376 0.793030 +vt 0.015564 0.898499 +vt 0.015564 0.906189 +vt 0.007874 0.898499 +vt 0.007874 0.906189 +vt 0.023376 0.906189 +vt 0.023376 0.898499 +vt 0.015686 0.906189 +vt 0.015686 0.898499 +vt 0.023499 0.898376 +vt 0.023499 0.793030 +vt 0.031189 0.898376 +vt 0.031189 0.793030 +vt 0.007874 0.898376 +vt 0.007874 0.793030 +vt 0.015564 0.898376 +vt 0.015564 0.793030 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 0.7071 +vn 0.3265 0.8870 0.3265 +vn -0.3265 -0.8870 -0.3265 +vn 0.6272 -0.4617 0.6272 +vn -0.6272 0.4617 -0.6272 +usemtl m_0 +s 1 +f 113/329/89 114/330/89 115/331/89 +f 114/330/89 116/332/89 115/331/89 +f 117/333/90 118/334/90 119/335/90 +f 118/334/90 120/336/90 119/335/90 +f 117/337/91 119/338/91 115/339/91 +f 119/338/91 113/340/91 115/339/91 +f 120/341/92 118/342/92 114/343/92 +f 118/342/92 116/344/92 114/343/92 +f 119/345/93 120/346/93 113/347/93 +f 120/346/93 114/348/93 113/347/93 +f 115/349/94 116/350/94 117/351/94 +f 116/350/94 118/352/94 117/351/94 +o cube.013 +v -0.096017 4.833463 -0.007628 +v 0.454961 3.336632 0.543350 +v -0.017615 4.891182 0.070774 +v 0.533363 3.394351 0.621752 +v 0.070773 4.891182 -0.017615 +v 0.621751 3.394351 0.533363 +v -0.007629 4.833463 -0.096016 +v 0.543350 3.336632 0.454962 +vt 0.000061 0.898376 +vt 0.000061 0.793030 +vt 0.007751 0.898376 +vt 0.007751 0.793030 +vt 0.015686 0.898376 +vt 0.015686 0.793030 +vt 0.023376 0.898376 +vt 0.023376 0.793030 +vt 0.015564 0.898499 +vt 0.015564 0.906189 +vt 0.007874 0.898499 +vt 0.007874 0.906189 +vt 0.023376 0.906189 +vt 0.023376 0.898499 +vt 0.015686 0.906189 +vt 0.015686 0.898499 +vt 0.023499 0.898376 +vt 0.023499 0.793030 +vt 0.031189 0.898376 +vt 0.031189 0.793030 +vt 0.007874 0.898376 +vt 0.007874 0.793030 +vt 0.015564 0.898376 +vt 0.015564 0.793030 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn -0.3265 0.8870 -0.3265 +vn 0.3265 -0.8870 0.3265 +vn -0.6272 -0.4617 -0.6272 +vn 0.6272 0.4617 0.6272 +usemtl m_0 +s 1 +f 121/353/95 122/354/95 123/355/95 +f 122/354/95 124/356/95 123/355/95 +f 125/357/96 126/358/96 127/359/96 +f 126/358/96 128/360/96 127/359/96 +f 125/361/97 127/362/97 123/363/97 +f 127/362/97 121/364/97 123/363/97 +f 128/365/98 126/366/98 122/367/98 +f 126/366/98 124/368/98 122/367/98 +f 127/369/99 128/370/99 121/371/99 +f 128/370/99 122/372/99 121/371/99 +f 123/373/100 124/374/100 125/375/100 +f 124/374/100 126/376/100 125/375/100 +o cube.014 +v 0.007629 4.833463 -0.096016 +v -0.543350 3.336632 0.454962 +v -0.070773 4.891182 -0.017615 +v -0.621751 3.394351 0.533363 +v 0.017615 4.891182 0.070774 +v -0.533363 3.394351 0.621752 +v 0.096017 4.833463 -0.007628 +v -0.454961 3.336632 0.543350 +vt 0.000061 0.898376 +vt 0.000061 0.793030 +vt 0.007751 0.898376 +vt 0.007751 0.793030 +vt 0.015686 0.898376 +vt 0.015686 0.793030 +vt 0.023376 0.898376 +vt 0.023376 0.793030 +vt 0.015564 0.898499 +vt 0.015564 0.906189 +vt 0.007874 0.898499 +vt 0.007874 0.906189 +vt 0.023376 0.906189 +vt 0.023376 0.898499 +vt 0.015686 0.906189 +vt 0.015686 0.898499 +vt 0.023499 0.898376 +vt 0.023499 0.793030 +vt 0.031189 0.898376 +vt 0.031189 0.793030 +vt 0.007874 0.898376 +vt 0.007874 0.793030 +vt 0.015564 0.898376 +vt 0.015564 0.793030 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +vn 0.3265 0.8870 -0.3265 +vn -0.3265 -0.8870 0.3265 +vn 0.6272 -0.4617 -0.6272 +vn -0.6272 0.4617 0.6272 +usemtl m_0 +s 1 +f 129/377/101 130/378/101 131/379/101 +f 130/378/101 132/380/101 131/379/101 +f 133/381/102 134/382/102 135/383/102 +f 134/382/102 136/384/102 135/383/102 +f 133/385/103 135/386/103 131/387/103 +f 135/386/103 129/388/103 131/387/103 +f 136/389/104 134/390/104 130/391/104 +f 134/390/104 132/392/104 130/391/104 +f 135/393/105 136/394/105 129/395/105 +f 136/394/105 130/396/105 129/395/105 +f 131/397/106 132/398/106 133/399/106 +f 132/398/106 134/400/106 133/399/106 +o cube.015 +v -0.007629 4.833463 0.096018 +v 0.543350 3.336632 -0.454961 +v 0.070773 4.891182 0.017616 +v 0.621751 3.394351 -0.533362 +v -0.017615 4.891182 -0.070772 +v 0.533363 3.394351 -0.621750 +v -0.096017 4.833463 0.007629 +v 0.454961 3.336632 -0.543349 +vt 0.000061 0.898376 +vt 0.000061 0.793030 +vt 0.007751 0.898376 +vt 0.007751 0.793030 +vt 0.015686 0.898376 +vt 0.015686 0.793030 +vt 0.023376 0.898376 +vt 0.023376 0.793030 +vt 0.015564 0.898499 +vt 0.015564 0.906189 +vt 0.007874 0.898499 +vt 0.007874 0.906189 +vt 0.023376 0.906189 +vt 0.023376 0.898499 +vt 0.015686 0.906189 +vt 0.015686 0.898499 +vt 0.023499 0.898376 +vt 0.023499 0.793030 +vt 0.031189 0.898376 +vt 0.031189 0.793030 +vt 0.007874 0.898376 +vt 0.007874 0.793030 +vt 0.015564 0.898376 +vt 0.015564 0.793030 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn -0.3265 0.8870 0.3265 +vn 0.3265 -0.8870 -0.3265 +vn -0.6272 -0.4617 0.6272 +vn 0.6272 0.4617 -0.6272 +usemtl m_0 +s 1 +f 137/401/107 138/402/107 139/403/107 +f 138/402/107 140/404/107 139/403/107 +f 141/405/108 142/406/108 143/407/108 +f 142/406/108 144/408/108 143/407/108 +f 141/409/109 143/410/109 139/411/109 +f 143/410/109 137/412/109 139/411/109 +f 144/413/110 142/414/110 138/415/110 +f 142/414/110 140/416/110 138/415/110 +f 143/417/111 144/418/111 137/419/111 +f 144/418/111 138/420/111 137/419/111 +f 139/421/112 140/422/112 141/423/112 +f 140/422/112 142/424/112 141/423/112 +o cube.016 +v 0.125000 5.000000 0.125001 +v 0.125000 4.875000 0.125001 +v 0.125000 5.000000 -0.124999 +v 0.125000 4.875000 -0.124999 +v -0.125000 5.000000 -0.124999 +v -0.125000 4.875000 -0.124999 +v -0.125000 5.000000 0.125001 +v -0.125000 4.875000 0.125001 +vt 0.140686 0.894470 +vt 0.140686 0.886780 +vt 0.156189 0.894470 +vt 0.156189 0.886780 +vt 0.171936 0.894470 +vt 0.171936 0.886780 +vt 0.187439 0.894470 +vt 0.187439 0.886780 +vt 0.171814 0.894592 +vt 0.171814 0.910095 +vt 0.156311 0.894592 +vt 0.156311 0.910095 +vt 0.187439 0.910095 +vt 0.187439 0.894592 +vt 0.171936 0.910095 +vt 0.171936 0.894592 +vt 0.187561 0.894470 +vt 0.187561 0.886780 +vt 0.203064 0.894470 +vt 0.203064 0.886780 +vt 0.156311 0.894470 +vt 0.156311 0.886780 +vt 0.171814 0.894470 +vt 0.171814 0.886780 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 145/425/113 146/426/113 147/427/113 +f 146/426/113 148/428/113 147/427/113 +f 149/429/114 150/430/114 151/431/114 +f 150/430/114 152/432/114 151/431/114 +f 149/433/115 151/434/115 147/435/115 +f 151/434/115 145/436/115 147/435/115 +f 152/437/116 150/438/116 146/439/116 +f 150/438/116 148/440/116 146/439/116 +f 151/441/117 152/442/117 145/443/117 +f 152/442/117 146/444/117 145/443/117 +f 147/445/118 148/446/118 149/447/118 +f 148/446/118 150/448/118 149/447/118 +o cube.017 +v 0.101562 5.789062 0.101563 +v 0.101562 5.585938 0.101563 +v 0.101562 5.789062 -0.101562 +v 0.101562 5.585938 -0.101562 +v -0.101562 5.789062 -0.101562 +v -0.101562 5.585938 -0.101562 +v -0.101562 5.789062 0.101563 +v -0.101562 5.585938 0.101563 +vt 0.140686 0.984314 +vt 0.140686 0.968811 +vt 0.156189 0.984314 +vt 0.156189 0.968811 +vt 0.171936 0.984314 +vt 0.171936 0.968811 +vt 0.187439 0.984314 +vt 0.187439 0.968811 +vt 0.171814 0.984436 +vt 0.171814 0.999939 +vt 0.156311 0.984436 +vt 0.156311 0.999939 +vt 0.187439 0.999939 +vt 0.187439 0.984436 +vt 0.171936 0.999939 +vt 0.171936 0.984436 +vt 0.187561 0.984314 +vt 0.187561 0.968811 +vt 0.203064 0.984314 +vt 0.203064 0.968811 +vt 0.156311 0.984314 +vt 0.156311 0.968811 +vt 0.171814 0.984314 +vt 0.171814 0.968811 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 153/449/119 154/450/119 155/451/119 +f 154/450/119 156/452/119 155/451/119 +f 157/453/120 158/454/120 159/455/120 +f 158/454/120 160/456/120 159/455/120 +f 157/457/121 159/458/121 155/459/121 +f 159/458/121 153/460/121 155/459/121 +f 160/461/122 158/462/122 154/463/122 +f 158/462/122 156/464/122 154/463/122 +f 159/465/123 160/466/123 153/467/123 +f 160/466/123 154/468/123 153/467/123 +f 155/469/124 156/470/124 157/471/124 +f 156/470/124 158/472/124 157/471/124 +o cube.018 +v 0.062500 5.750000 0.062501 +v 0.062500 4.937500 0.062501 +v 0.062500 5.750000 -0.062499 +v 0.062500 4.937500 -0.062499 +v -0.062500 5.750000 -0.062499 +v -0.062500 4.937500 -0.062499 +v -0.062500 5.750000 0.062501 +v -0.062500 4.937500 0.062501 +vt 0.140686 0.960876 +vt 0.140686 0.910217 +vt 0.148376 0.960876 +vt 0.148376 0.910217 +vt 0.156311 0.960876 +vt 0.156311 0.910217 +vt 0.164001 0.960876 +vt 0.164001 0.910217 +vt 0.156189 0.960999 +vt 0.156189 0.968689 +vt 0.148499 0.960999 +vt 0.148499 0.968689 +vt 0.164001 0.968689 +vt 0.164001 0.960999 +vt 0.156311 0.968689 +vt 0.156311 0.960999 +vt 0.164124 0.960876 +vt 0.164124 0.910217 +vt 0.171814 0.960876 +vt 0.171814 0.910217 +vt 0.148499 0.960876 +vt 0.148499 0.910217 +vt 0.156189 0.960876 +vt 0.156189 0.910217 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 161/473/125 162/474/125 163/475/125 +f 162/474/125 164/476/125 163/475/125 +f 165/477/126 166/478/126 167/479/126 +f 166/478/126 168/480/126 167/479/126 +f 165/481/127 167/482/127 163/483/127 +f 167/482/127 161/484/127 163/483/127 +f 168/485/128 166/486/128 162/487/128 +f 166/486/128 164/488/128 162/487/128 +f 167/489/129 168/490/129 161/491/129 +f 168/490/129 162/492/129 161/491/129 +f 163/493/130 164/494/130 165/495/130 +f 164/494/130 166/496/130 165/495/130 +o cube.019 +v 0.187500 4.875000 0.187501 +v 0.187500 4.375000 0.187501 +v 0.187500 4.875000 -0.187499 +v 0.187500 4.375000 -0.187499 +v -0.187500 4.875000 -0.187499 +v -0.187500 4.375000 -0.187499 +v -0.187500 4.875000 0.187501 +v -0.187500 4.375000 0.187501 +vt 0.140686 0.863220 +vt 0.140686 0.832092 +vt 0.164001 0.863220 +vt 0.164001 0.832092 +vt 0.187561 0.863220 +vt 0.187561 0.832092 +vt 0.210876 0.863220 +vt 0.210876 0.832092 +vt 0.187439 0.863342 +vt 0.187439 0.886658 +vt 0.164124 0.863342 +vt 0.164124 0.886658 +vt 0.210876 0.886658 +vt 0.210876 0.863342 +vt 0.187561 0.886658 +vt 0.187561 0.863342 +vt 0.210999 0.863220 +vt 0.210999 0.832092 +vt 0.234314 0.863220 +vt 0.234314 0.832092 +vt 0.164124 0.863220 +vt 0.164124 0.832092 +vt 0.187439 0.863220 +vt 0.187439 0.832092 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 169/497/131 170/498/131 171/499/131 +f 170/498/131 172/500/131 171/499/131 +f 173/501/132 174/502/132 175/503/132 +f 174/502/132 176/504/132 175/503/132 +f 173/505/133 175/506/133 171/507/133 +f 175/506/133 169/508/133 171/507/133 +f 176/509/134 174/510/134 170/511/134 +f 174/510/134 172/512/134 170/511/134 +f 175/513/135 176/514/135 169/515/135 +f 176/514/135 170/516/135 169/515/135 +f 171/517/136 172/518/136 173/519/136 +f 172/518/136 174/520/136 173/519/136 +o cube.020 +v 0.625000 0.750000 0.625000 +v 0.625000 0.625000 0.625000 +v 0.625000 0.750000 -0.625000 +v 0.625000 0.625000 -0.625000 +v -0.625000 0.750000 -0.625000 +v -0.625000 0.625000 -0.625000 +v -0.625000 0.750000 0.625000 +v -0.625000 0.625000 0.625000 +vt 0.000061 0.589783 +vt 0.000061 0.582092 +vt 0.078064 0.589783 +vt 0.078064 0.582092 +vt 0.156311 0.589783 +vt 0.156311 0.582092 +vt 0.234314 0.589783 +vt 0.234314 0.582092 +vt 0.156189 0.589905 +vt 0.156189 0.667908 +vt 0.078186 0.589905 +vt 0.078186 0.667908 +vt 0.234314 0.667908 +vt 0.234314 0.589905 +vt 0.156311 0.667908 +vt 0.156311 0.589905 +vt 0.234436 0.589783 +vt 0.234436 0.582092 +vt 0.312439 0.589783 +vt 0.312439 0.582092 +vt 0.078186 0.589783 +vt 0.078186 0.582092 +vt 0.156189 0.589783 +vt 0.156189 0.582092 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 177/521/137 178/522/137 179/523/137 +f 178/522/137 180/524/137 179/523/137 +f 181/525/138 182/526/138 183/527/138 +f 182/526/138 184/528/138 183/527/138 +f 181/529/139 183/530/139 179/531/139 +f 183/530/139 177/532/139 179/531/139 +f 184/533/140 182/534/140 178/535/140 +f 182/534/140 180/536/140 178/535/140 +f 183/537/141 184/538/141 177/539/141 +f 184/538/141 178/540/141 177/539/141 +f 179/541/142 180/542/142 181/543/142 +f 180/542/142 182/544/142 181/543/142 +o cube.021 +v 0.625000 0.937500 0.625000 +v 0.625000 0.812500 0.625000 +v 0.625000 0.937500 -0.625000 +v 0.625000 0.812500 -0.625000 +v -0.625000 0.937500 -0.625000 +v -0.625000 0.812500 -0.625000 +v -0.625000 0.937500 0.625000 +v -0.625000 0.812500 0.625000 +vt 0.000061 0.589783 +vt 0.000061 0.582092 +vt 0.078064 0.589783 +vt 0.078064 0.582092 +vt 0.156311 0.589783 +vt 0.156311 0.582092 +vt 0.234314 0.589783 +vt 0.234314 0.582092 +vt 0.156189 0.589905 +vt 0.156189 0.667908 +vt 0.078186 0.589905 +vt 0.078186 0.667908 +vt 0.234314 0.667908 +vt 0.234314 0.589905 +vt 0.156311 0.667908 +vt 0.156311 0.589905 +vt 0.234436 0.589783 +vt 0.234436 0.582092 +vt 0.312439 0.589783 +vt 0.312439 0.582092 +vt 0.078186 0.589783 +vt 0.078186 0.582092 +vt 0.156189 0.589783 +vt 0.156189 0.582092 +vn 1.0000 0.0000 0.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 185/545/143 186/546/143 187/547/143 +f 186/546/143 188/548/143 187/547/143 +f 189/549/144 190/550/144 191/551/144 +f 190/550/144 192/552/144 191/551/144 +f 189/553/145 191/554/145 187/555/145 +f 191/554/145 185/556/145 187/555/145 +f 192/557/146 190/558/146 186/559/146 +f 190/558/146 188/560/146 186/559/146 +f 191/561/147 192/562/147 185/563/147 +f 192/562/147 186/564/147 185/563/147 +f 187/565/148 188/566/148 189/567/148 +f 188/566/148 190/568/148 189/567/148 +o cube.022 +v 0.375000 2.625000 -0.531250 +v 0.375000 1.875000 -0.531250 +v 0.375000 2.625000 -0.593750 +v 0.375000 1.875000 -0.593750 +v -0.375000 2.625000 -0.593750 +v -0.375000 1.875000 -0.593750 +v -0.375000 2.625000 -0.531250 +v -0.375000 1.875000 -0.531250 +vt 0.898499 0.652283 +vt 0.898499 0.605530 +vt 0.902283 0.652283 +vt 0.902283 0.605530 +vt 0.949280 0.652283 +vt 0.949280 0.605530 +vt 0.953064 0.652283 +vt 0.953064 0.605530 +vt 0.949158 0.652405 +vt 0.949158 0.656189 +vt 0.902405 0.652405 +vt 0.902405 0.656189 +vt 0.996033 0.656189 +vt 0.996033 0.652405 +vt 0.949280 0.656189 +vt 0.949280 0.652405 +vt 0.953186 0.652283 +vt 0.953186 0.605530 +vt 0.999939 0.652283 +vt 0.999939 0.605530 +vt 0.902405 0.652283 +vt 0.902405 0.605530 +vt 0.949158 0.652283 +vt 0.949158 0.605530 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 193/569/149 194/570/149 195/571/149 +f 194/570/149 196/572/149 195/571/149 +f 197/573/150 198/574/150 199/575/150 +f 198/574/150 200/576/150 199/575/150 +f 197/577/151 199/578/151 195/579/151 +f 199/578/151 193/580/151 195/579/151 +f 200/581/152 198/582/152 194/583/152 +f 198/582/152 196/584/152 194/583/152 +f 199/585/153 200/586/153 193/587/153 +f 200/586/153 194/588/153 193/587/153 +f 195/589/154 196/590/154 197/591/154 +f 196/590/154 198/592/154 197/591/154 +o cube.023 +v 0.812500 1.062500 0.187500 +v 0.812500 0.500000 0.187500 +v 0.812500 1.062500 -0.187500 +v 0.812500 0.500000 -0.187500 +v 0.562500 1.062500 -0.187500 +v 0.562500 0.500000 -0.187500 +v 0.562500 1.062500 0.187500 +v 0.562500 0.500000 0.187500 +vt 0.000061 0.382751 +vt 0.000061 0.347717 +vt 0.023376 0.382751 +vt 0.023376 0.347717 +vt 0.039124 0.382751 +vt 0.039124 0.347717 +vt 0.062439 0.382751 +vt 0.062439 0.347717 +vt 0.039001 0.382874 +vt 0.039001 0.406189 +vt 0.023499 0.382874 +vt 0.023499 0.406189 +vt 0.054626 0.406189 +vt 0.054626 0.382874 +vt 0.039124 0.406189 +vt 0.039124 0.382874 +vt 0.062561 0.382751 +vt 0.062561 0.347717 +vt 0.078064 0.382751 +vt 0.078064 0.347717 +vt 0.023499 0.382751 +vt 0.023499 0.347717 +vt 0.039001 0.382751 +vt 0.039001 0.347717 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 201/593/155 202/594/155 203/595/155 +f 202/594/155 204/596/155 203/595/155 +f 205/597/156 206/598/156 207/599/156 +f 206/598/156 208/600/156 207/599/156 +f 205/601/157 207/602/157 203/603/157 +f 207/602/157 201/604/157 203/603/157 +f 208/605/158 206/606/158 202/607/158 +f 206/606/158 204/608/158 202/607/158 +f 207/609/159 208/610/159 201/611/159 +f 208/610/159 202/612/159 201/611/159 +f 203/613/160 204/614/160 205/615/160 +f 204/614/160 206/616/160 205/615/160 +o cube.024 +v -0.812500 1.062500 -0.187500 +v -0.812500 0.500000 -0.187500 +v -0.812500 1.062500 0.187500 +v -0.812500 0.500000 0.187500 +v -0.562500 1.062500 0.187500 +v -0.562500 0.500000 0.187500 +v -0.562500 1.062500 -0.187500 +v -0.562500 0.500000 -0.187500 +vt 0.000061 0.382751 +vt 0.000061 0.347717 +vt 0.023376 0.382751 +vt 0.023376 0.347717 +vt 0.039124 0.382751 +vt 0.039124 0.347717 +vt 0.062439 0.382751 +vt 0.062439 0.347717 +vt 0.039001 0.382874 +vt 0.039001 0.406189 +vt 0.023499 0.382874 +vt 0.023499 0.406189 +vt 0.054626 0.406189 +vt 0.054626 0.382874 +vt 0.039124 0.406189 +vt 0.039124 0.382874 +vt 0.062561 0.382751 +vt 0.062561 0.347717 +vt 0.078064 0.382751 +vt 0.078064 0.347717 +vt 0.023499 0.382751 +vt 0.023499 0.347717 +vt 0.039001 0.382751 +vt 0.039001 0.347717 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +usemtl m_0 +s 1 +f 209/617/161 210/618/161 211/619/161 +f 210/618/161 212/620/161 211/619/161 +f 213/621/162 214/622/162 215/623/162 +f 214/622/162 216/624/162 215/623/162 +f 213/625/163 215/626/163 211/627/163 +f 215/626/163 209/628/163 211/627/163 +f 216/629/164 214/630/164 210/631/164 +f 214/630/164 212/632/164 210/631/164 +f 215/633/165 216/634/165 209/635/165 +f 216/634/165 210/636/165 209/635/165 +f 211/637/166 212/638/166 213/639/166 +f 212/638/166 214/640/166 213/639/166 +o cube.025 +v 0.750000 1.250000 0.062500 +v 0.750000 1.062500 0.062500 +v 0.750000 1.250000 -0.062500 +v 0.750000 1.062500 -0.062500 +v 0.562500 1.250000 -0.062500 +v 0.562500 1.062500 -0.062500 +v 0.562500 1.250000 0.062500 +v 0.562500 1.062500 0.062500 +vt 0.000061 0.339783 +vt 0.000061 0.328186 +vt 0.007751 0.339783 +vt 0.007751 0.328186 +vt 0.019592 0.339783 +vt 0.019592 0.328186 +vt 0.027283 0.339783 +vt 0.027283 0.328186 +vt 0.019470 0.339905 +vt 0.019470 0.347595 +vt 0.007874 0.339905 +vt 0.007874 0.347595 +vt 0.031189 0.347595 +vt 0.031189 0.339905 +vt 0.019592 0.347595 +vt 0.019592 0.339905 +vt 0.027405 0.339783 +vt 0.027405 0.328186 +vt 0.039001 0.339783 +vt 0.039001 0.328186 +vt 0.007874 0.339783 +vt 0.007874 0.328186 +vt 0.019470 0.339783 +vt 0.019470 0.328186 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 217/641/167 218/642/167 219/643/167 +f 218/642/167 220/644/167 219/643/167 +f 221/645/168 222/646/168 223/647/168 +f 222/646/168 224/648/168 223/647/168 +f 221/649/169 223/650/169 219/651/169 +f 223/650/169 217/652/169 219/651/169 +f 224/653/170 222/654/170 218/655/170 +f 222/654/170 220/656/170 218/655/170 +f 223/657/171 224/658/171 217/659/171 +f 224/658/171 218/660/171 217/659/171 +f 219/661/172 220/662/172 221/663/172 +f 220/662/172 222/664/172 221/663/172 +o cube.026 +v -1.273420 1.043750 -1.034772 +v -1.273420 0.768750 -1.034772 +v -1.034772 1.043750 -0.796123 +v -1.034772 0.768750 -0.796123 +v -0.796123 1.043750 -1.034772 +v -0.796123 0.768750 -1.034772 +v -1.034772 1.043750 -1.273420 +v -1.034772 0.768750 -1.273420 +vt 0.078186 0.421814 +vt 0.078186 0.402405 +vt 0.101501 0.421814 +vt 0.101501 0.402405 +vt 0.125061 0.421814 +vt 0.125061 0.402405 +vt 0.148376 0.421814 +vt 0.148376 0.402405 +vt 0.124939 0.421936 +vt 0.124939 0.445251 +vt 0.101624 0.421936 +vt 0.101624 0.445251 +vt 0.148376 0.445251 +vt 0.148376 0.421936 +vt 0.125061 0.445251 +vt 0.125061 0.421936 +vt 0.148499 0.421814 +vt 0.148499 0.402405 +vt 0.171814 0.421814 +vt 0.171814 0.402405 +vt 0.101624 0.421814 +vt 0.101624 0.402405 +vt 0.124939 0.421814 +vt 0.124939 0.402405 +vn -0.7071 0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +usemtl m_0 +s 1 +f 225/665/173 226/666/173 227/667/173 +f 226/666/173 228/668/173 227/667/173 +f 229/669/174 230/670/174 231/671/174 +f 230/670/174 232/672/174 231/671/174 +f 229/673/175 231/674/175 227/675/175 +f 231/674/175 225/676/175 227/675/175 +f 232/677/176 230/678/176 226/679/176 +f 230/678/176 228/680/176 226/679/176 +f 231/681/177 232/682/177 225/683/177 +f 232/682/177 226/684/177 225/683/177 +f 227/685/178 228/686/178 229/687/178 +f 228/686/178 230/688/178 229/687/178 +o cube.027 +v -1.034772 1.043750 1.273420 +v -1.034772 0.768750 1.273420 +v -0.796123 1.043750 1.034772 +v -0.796123 0.768750 1.034772 +v -1.034772 1.043750 0.796123 +v -1.034772 0.768750 0.796123 +v -1.273420 1.043750 1.034772 +v -1.273420 0.768750 1.034772 +vt 0.078186 0.421814 +vt 0.078186 0.402405 +vt 0.101501 0.421814 +vt 0.101501 0.402405 +vt 0.125061 0.421814 +vt 0.125061 0.402405 +vt 0.148376 0.421814 +vt 0.148376 0.402405 +vt 0.124939 0.421936 +vt 0.124939 0.445251 +vt 0.101624 0.421936 +vt 0.101624 0.445251 +vt 0.148376 0.445251 +vt 0.148376 0.421936 +vt 0.125061 0.445251 +vt 0.125061 0.421936 +vt 0.148499 0.421814 +vt 0.148499 0.402405 +vt 0.171814 0.421814 +vt 0.171814 0.402405 +vt 0.101624 0.421814 +vt 0.101624 0.402405 +vt 0.124939 0.421814 +vt 0.124939 0.402405 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.7071 0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +usemtl m_0 +s 1 +f 233/689/179 234/690/179 235/691/179 +f 234/690/179 236/692/179 235/691/179 +f 237/693/180 238/694/180 239/695/180 +f 238/694/180 240/696/180 239/695/180 +f 237/697/181 239/698/181 235/699/181 +f 239/698/181 233/700/181 235/699/181 +f 240/701/182 238/702/182 234/703/182 +f 238/702/182 236/704/182 234/703/182 +f 239/705/183 240/706/183 233/707/183 +f 240/706/183 234/708/183 233/707/183 +f 235/709/184 236/710/184 237/711/184 +f 236/710/184 238/712/184 237/711/184 +o cube.028 +v 1.034772 1.043750 -1.273420 +v 1.034772 0.768750 -1.273420 +v 0.796123 1.043750 -1.034772 +v 0.796123 0.768750 -1.034772 +v 1.034772 1.043750 -0.796123 +v 1.034772 0.768750 -0.796123 +v 1.273420 1.043750 -1.034772 +v 1.273420 0.768750 -1.034772 +vt 0.078186 0.421814 +vt 0.078186 0.402405 +vt 0.101501 0.421814 +vt 0.101501 0.402405 +vt 0.125061 0.421814 +vt 0.125061 0.402405 +vt 0.148376 0.421814 +vt 0.148376 0.402405 +vt 0.124939 0.421936 +vt 0.124939 0.445251 +vt 0.101624 0.421936 +vt 0.101624 0.445251 +vt 0.148376 0.445251 +vt 0.148376 0.421936 +vt 0.125061 0.445251 +vt 0.125061 0.421936 +vt 0.148499 0.421814 +vt 0.148499 0.402405 +vt 0.171814 0.421814 +vt 0.171814 0.402405 +vt 0.101624 0.421814 +vt 0.101624 0.402405 +vt 0.124939 0.421814 +vt 0.124939 0.402405 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 0.7071 +usemtl m_0 +s 1 +f 241/713/185 242/714/185 243/715/185 +f 242/714/185 244/716/185 243/715/185 +f 245/717/186 246/718/186 247/719/186 +f 246/718/186 248/720/186 247/719/186 +f 245/721/187 247/722/187 243/723/187 +f 247/722/187 241/724/187 243/723/187 +f 248/725/188 246/726/188 242/727/188 +f 246/726/188 244/728/188 242/727/188 +f 247/729/189 248/730/189 241/731/189 +f 248/730/189 242/732/189 241/731/189 +f 243/733/190 244/734/190 245/735/190 +f 244/734/190 246/736/190 245/735/190 +o cube.029 +v 1.273420 1.043750 1.034772 +v 1.273420 0.768750 1.034772 +v 1.034772 1.043750 0.796123 +v 1.034772 0.768750 0.796123 +v 0.796123 1.043750 1.034772 +v 0.796123 0.768750 1.034772 +v 1.034772 1.043750 1.273420 +v 1.034772 0.768750 1.273420 +vt 0.078186 0.421814 +vt 0.078186 0.402405 +vt 0.101501 0.421814 +vt 0.101501 0.402405 +vt 0.125061 0.421814 +vt 0.125061 0.402405 +vt 0.148376 0.421814 +vt 0.148376 0.402405 +vt 0.124939 0.421936 +vt 0.124939 0.445251 +vt 0.101624 0.421936 +vt 0.101624 0.445251 +vt 0.148376 0.445251 +vt 0.148376 0.421936 +vt 0.125061 0.445251 +vt 0.125061 0.421936 +vt 0.148499 0.421814 +vt 0.148499 0.402405 +vt 0.171814 0.421814 +vt 0.171814 0.402405 +vt 0.101624 0.421814 +vt 0.101624 0.402405 +vt 0.124939 0.421814 +vt 0.124939 0.402405 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +usemtl m_0 +s 1 +f 249/737/191 250/738/191 251/739/191 +f 250/738/191 252/740/191 251/739/191 +f 253/741/192 254/742/192 255/743/192 +f 254/742/192 256/744/192 255/743/192 +f 253/745/193 255/746/193 251/747/193 +f 255/746/193 249/748/193 251/747/193 +f 256/749/194 254/750/194 250/751/194 +f 254/750/194 252/752/194 250/751/194 +f 255/753/195 256/754/195 249/755/195 +f 256/754/195 250/756/195 249/755/195 +f 251/757/196 252/758/196 253/759/196 +f 252/758/196 254/760/196 253/759/196 +o cube.030 +v 0.250000 2.000062 -0.531250 +v 0.250000 2.000000 -0.531250 +v 0.250000 2.000062 -0.593750 +v 0.250000 2.000000 -0.593750 +v -0.250000 2.000062 -0.593750 +v -0.250000 2.000000 -0.593750 +v -0.250000 2.000062 -0.531250 +v -0.250000 2.000000 -0.531250 +vt 0.902405 0.574158 +vt 0.902405 0.574280 +vt 0.906189 0.574158 +vt 0.906189 0.574280 +vt 0.937561 0.574158 +vt 0.937561 0.574280 +vt 0.941345 0.574158 +vt 0.941345 0.574280 +vt 0.937439 0.574280 +vt 0.937439 0.578064 +vt 0.906311 0.574280 +vt 0.906311 0.578064 +vt 0.968689 0.578064 +vt 0.968689 0.574280 +vt 0.937561 0.578064 +vt 0.937561 0.574280 +vt 0.941467 0.574158 +vt 0.941467 0.574280 +vt 0.972595 0.574158 +vt 0.972595 0.574280 +vt 0.906311 0.574158 +vt 0.906311 0.574280 +vt 0.937439 0.574158 +vt 0.937439 0.574280 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 257/761/197 258/762/197 259/763/197 +f 258/762/197 260/764/197 259/763/197 +f 261/765/198 262/766/198 263/767/198 +f 262/766/198 264/768/198 263/767/198 +f 261/769/199 263/770/199 259/771/199 +f 263/770/199 257/772/199 259/771/199 +f 264/773/200 262/774/200 258/775/200 +f 262/774/200 260/776/200 258/775/200 +f 263/777/201 264/778/201 257/779/201 +f 264/778/201 258/780/201 257/779/201 +f 259/781/202 260/782/202 261/783/202 +f 260/782/202 262/784/202 261/783/202 +o body.000 +v 0.562500 0.562500 0.562500 +v 0.562500 0.437500 0.562500 +v 0.562500 0.562500 -0.562500 +v 0.562500 0.437500 -0.562500 +v -0.562500 0.562500 -0.562500 +v -0.562500 0.437500 -0.562500 +v -0.562500 0.562500 0.562500 +v -0.562500 0.437500 0.562500 +vt 0.718811 0.675720 +vt 0.718811 0.668030 +vt 0.789001 0.675720 +vt 0.789001 0.668030 +vt 0.859436 0.675720 +vt 0.859436 0.668030 +vt 0.929626 0.675720 +vt 0.929626 0.668030 +vt 0.859314 0.675842 +vt 0.859314 0.746033 +vt 0.789124 0.675842 +vt 0.789124 0.746033 +vt 0.929626 0.746033 +vt 0.929626 0.675842 +vt 0.859436 0.746033 +vt 0.859436 0.675842 +vt 0.929749 0.675720 +vt 0.929749 0.668030 +vt 0.999939 0.675720 +vt 0.999939 0.668030 +vt 0.789124 0.675720 +vt 0.789124 0.668030 +vt 0.859314 0.675720 +vt 0.859314 0.668030 +vn 1.0000 0.0000 0.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 265/785/203 266/786/203 267/787/203 +f 266/786/203 268/788/203 267/787/203 +f 269/789/204 270/790/204 271/791/204 +f 270/790/204 272/792/204 271/791/204 +f 269/793/205 271/794/205 267/795/205 +f 271/794/205 265/796/205 267/795/205 +f 272/797/206 270/798/206 266/799/206 +f 270/798/206 268/800/206 266/799/206 +f 271/801/207 272/802/207 265/803/207 +f 272/802/207 266/804/207 265/803/207 +f 267/805/208 268/806/208 269/807/208 +f 268/806/208 270/808/208 269/807/208 +o cube.031 +v 0.625000 3.437500 0.625001 +v 0.625000 3.312500 0.625001 +v 0.625000 3.437500 -0.624999 +v 0.625000 3.312500 -0.624999 +v -0.625000 3.437500 -0.624999 +v -0.625000 3.312500 -0.624999 +v -0.625000 3.437500 0.625001 +v -0.625000 3.312500 0.625001 +vt 0.000061 0.589783 +vt 0.000061 0.582092 +vt 0.078064 0.589783 +vt 0.078064 0.582092 +vt 0.156311 0.589783 +vt 0.156311 0.582092 +vt 0.234314 0.589783 +vt 0.234314 0.582092 +vt 0.156189 0.589905 +vt 0.156189 0.667908 +vt 0.078186 0.589905 +vt 0.078186 0.667908 +vt 0.234314 0.667908 +vt 0.234314 0.589905 +vt 0.156311 0.667908 +vt 0.156311 0.589905 +vt 0.234436 0.589783 +vt 0.234436 0.582092 +vt 0.312439 0.589783 +vt 0.312439 0.582092 +vt 0.078186 0.589783 +vt 0.078186 0.582092 +vt 0.156189 0.589783 +vt 0.156189 0.582092 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 273/809/209 274/810/209 275/811/209 +f 274/810/209 276/812/209 275/811/209 +f 277/813/210 278/814/210 279/815/210 +f 278/814/210 280/816/210 279/815/210 +f 277/817/211 279/818/211 275/819/211 +f 279/818/211 273/820/211 275/819/211 +f 280/821/212 278/822/212 274/823/212 +f 278/822/212 276/824/212 274/823/212 +f 279/825/213 280/826/213 273/827/213 +f 280/826/213 274/828/213 273/827/213 +f 275/829/214 276/830/214 277/831/214 +f 276/830/214 278/832/214 277/831/214 +o cube.032 +v 0.062500 1.250000 -0.750000 +v 0.062500 1.062500 -0.750000 +v -0.062500 1.250000 -0.750000 +v -0.062500 1.062500 -0.750000 +v -0.062500 1.250000 -0.562500 +v -0.062500 1.062500 -0.562500 +v 0.062500 1.250000 -0.562500 +v 0.062500 1.062500 -0.562500 +vt 0.000061 0.339783 +vt 0.000061 0.328186 +vt 0.007751 0.339783 +vt 0.007751 0.328186 +vt 0.019592 0.339783 +vt 0.019592 0.328186 +vt 0.027283 0.339783 +vt 0.027283 0.328186 +vt 0.019470 0.339905 +vt 0.019470 0.347595 +vt 0.007874 0.339905 +vt 0.007874 0.347595 +vt 0.031189 0.347595 +vt 0.031189 0.339905 +vt 0.019592 0.347595 +vt 0.019592 0.339905 +vt 0.027405 0.339783 +vt 0.027405 0.328186 +vt 0.039001 0.339783 +vt 0.039001 0.328186 +vt 0.007874 0.339783 +vt 0.007874 0.328186 +vt 0.019470 0.339783 +vt 0.019470 0.328186 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +usemtl m_0 +s 1 +f 281/833/215 282/834/215 283/835/215 +f 282/834/215 284/836/215 283/835/215 +f 285/837/216 286/838/216 287/839/216 +f 286/838/216 288/840/216 287/839/216 +f 285/841/217 287/842/217 283/843/217 +f 287/842/217 281/844/217 283/843/217 +f 288/845/218 286/846/218 282/847/218 +f 286/846/218 284/848/218 282/847/218 +f 287/849/219 288/850/219 281/851/219 +f 288/850/219 282/852/219 281/851/219 +f 283/853/220 284/854/220 285/855/220 +f 284/854/220 286/856/220 285/855/220 +o cube.033 +v 0.187500 1.062500 -0.812500 +v 0.187500 0.500000 -0.812500 +v -0.187500 1.062500 -0.812500 +v -0.187500 0.500000 -0.812500 +v -0.187500 1.062500 -0.562500 +v -0.187500 0.500000 -0.562500 +v 0.187500 1.062500 -0.562500 +v 0.187500 0.500000 -0.562500 +vt 0.000061 0.382751 +vt 0.000061 0.347717 +vt 0.023376 0.382751 +vt 0.023376 0.347717 +vt 0.039124 0.382751 +vt 0.039124 0.347717 +vt 0.062439 0.382751 +vt 0.062439 0.347717 +vt 0.039001 0.382874 +vt 0.039001 0.406189 +vt 0.023499 0.382874 +vt 0.023499 0.406189 +vt 0.054626 0.406189 +vt 0.054626 0.382874 +vt 0.039124 0.406189 +vt 0.039124 0.382874 +vt 0.062561 0.382751 +vt 0.062561 0.347717 +vt 0.078064 0.382751 +vt 0.078064 0.347717 +vt 0.023499 0.382751 +vt 0.023499 0.347717 +vt 0.039001 0.382751 +vt 0.039001 0.347717 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +usemtl m_0 +s 1 +f 289/857/221 290/858/221 291/859/221 +f 290/858/221 292/860/221 291/859/221 +f 293/861/222 294/862/222 295/863/222 +f 294/862/222 296/864/222 295/863/222 +f 293/865/223 295/866/223 291/867/223 +f 295/866/223 289/868/223 291/867/223 +f 296/869/224 294/870/224 290/871/224 +f 294/870/224 292/872/224 290/871/224 +f 295/873/225 296/874/225 289/875/225 +f 296/874/225 290/876/225 289/875/225 +f 291/877/226 292/878/226 293/879/226 +f 292/878/226 294/880/226 293/879/226 +o cube.034 +v -0.062500 1.250000 0.750000 +v -0.062500 1.062500 0.750000 +v 0.062500 1.250000 0.750000 +v 0.062500 1.062500 0.750000 +v 0.062500 1.250000 0.562500 +v 0.062500 1.062500 0.562500 +v -0.062500 1.250000 0.562500 +v -0.062500 1.062500 0.562500 +vt 0.000061 0.339783 +vt 0.000061 0.328186 +vt 0.007751 0.339783 +vt 0.007751 0.328186 +vt 0.019592 0.339783 +vt 0.019592 0.328186 +vt 0.027283 0.339783 +vt 0.027283 0.328186 +vt 0.019470 0.339905 +vt 0.019470 0.347595 +vt 0.007874 0.339905 +vt 0.007874 0.347595 +vt 0.031189 0.347595 +vt 0.031189 0.339905 +vt 0.019592 0.347595 +vt 0.019592 0.339905 +vt 0.027405 0.339783 +vt 0.027405 0.328186 +vt 0.039001 0.339783 +vt 0.039001 0.328186 +vt 0.007874 0.339783 +vt 0.007874 0.328186 +vt 0.019470 0.339783 +vt 0.019470 0.328186 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +usemtl m_0 +s 1 +f 297/881/227 298/882/227 299/883/227 +f 298/882/227 300/884/227 299/883/227 +f 301/885/228 302/886/228 303/887/228 +f 302/886/228 304/888/228 303/887/228 +f 301/889/229 303/890/229 299/891/229 +f 303/890/229 297/892/229 299/891/229 +f 304/893/230 302/894/230 298/895/230 +f 302/894/230 300/896/230 298/895/230 +f 303/897/231 304/898/231 297/899/231 +f 304/898/231 298/900/231 297/899/231 +f 299/901/232 300/902/232 301/903/232 +f 300/902/232 302/904/232 301/903/232 +o cube.035 +v -0.187500 1.062500 0.812500 +v -0.187500 0.500000 0.812500 +v 0.187500 1.062500 0.812500 +v 0.187500 0.500000 0.812500 +v 0.187500 1.062500 0.562500 +v 0.187500 0.500000 0.562500 +v -0.187500 1.062500 0.562500 +v -0.187500 0.500000 0.562500 +vt 0.000061 0.382751 +vt 0.000061 0.347717 +vt 0.023376 0.382751 +vt 0.023376 0.347717 +vt 0.039124 0.382751 +vt 0.039124 0.347717 +vt 0.062439 0.382751 +vt 0.062439 0.347717 +vt 0.039001 0.382874 +vt 0.039001 0.406189 +vt 0.023499 0.382874 +vt 0.023499 0.406189 +vt 0.054626 0.406189 +vt 0.054626 0.382874 +vt 0.039124 0.406189 +vt 0.039124 0.382874 +vt 0.062561 0.382751 +vt 0.062561 0.347717 +vt 0.078064 0.382751 +vt 0.078064 0.347717 +vt 0.023499 0.382751 +vt 0.023499 0.347717 +vt 0.039001 0.382751 +vt 0.039001 0.347717 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +usemtl m_0 +s 1 +f 305/905/233 306/906/233 307/907/233 +f 306/906/233 308/908/233 307/907/233 +f 309/909/234 310/910/234 311/911/234 +f 310/910/234 312/912/234 311/911/234 +f 309/913/235 311/914/235 307/915/235 +f 311/914/235 305/916/235 307/915/235 +f 312/917/236 310/918/236 306/919/236 +f 310/918/236 308/920/236 306/919/236 +f 311/921/237 312/922/237 305/923/237 +f 312/922/237 306/924/237 305/923/237 +f 307/925/238 308/926/238 309/927/238 +f 308/926/238 310/928/238 309/927/238 +o body.001 +v 0.562500 3.375000 -0.562437 +v 0.562500 0.437500 -0.562437 +v 0.562500 3.375000 -0.562499 +v 0.562500 0.437500 -0.562500 +v -0.562500 3.375000 -0.562499 +v -0.562500 0.437500 -0.562500 +v -0.562500 3.375000 -0.562437 +v -0.562500 0.437500 -0.562437 +vt 0.718811 0.929626 +vt 0.718811 0.746155 +vt 0.718689 0.929626 +vt 0.718689 0.746155 +vt 0.789124 0.929626 +vt 0.789124 0.746155 +vt 0.789001 0.929626 +vt 0.789001 0.746155 +vt 0.789001 0.929626 +vt 0.789001 0.929749 +vt 0.718811 0.929626 +vt 0.718811 0.929749 +vt 0.859314 0.929626 +vt 0.859314 0.929749 +vt 0.789124 0.929626 +vt 0.789124 0.929749 +vt 0.789124 0.929626 +vt 0.789124 0.746155 +vt 0.859314 0.929626 +vt 0.859314 0.746155 +vt 0.718811 0.746155 +vt 0.789001 0.746155 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 313/929/239 314/930/239 315/931/239 +f 314/930/239 316/932/239 315/931/239 +f 317/933/240 318/934/240 319/935/240 +f 318/934/240 320/936/240 319/935/240 +f 317/937/241 319/938/241 315/939/241 +f 319/938/241 313/940/241 315/939/241 +f 320/941/242 318/942/242 314/943/242 +f 318/942/242 316/944/242 314/943/242 +f 319/945/243 320/946/243 313/947/243 +f 320/946/243 314/948/243 313/947/243 +f 315/939/244 316/949/244 317/937/244 +f 316/949/244 318/950/244 317/937/244 +o body.002 +v 0.562563 3.375000 0.562501 +v 0.562563 0.437500 0.562500 +v 0.562563 3.375000 -0.562499 +v 0.562563 0.437500 -0.562500 +v 0.562500 3.375000 -0.562499 +v 0.562500 0.437500 -0.562500 +v 0.562500 3.375000 0.562501 +v 0.562500 0.437500 0.562500 +vt 0.859436 0.929626 +vt 0.859436 0.746155 +vt 0.929626 0.929626 +vt 0.929626 0.746155 +vt 0.929749 0.929626 +vt 0.929749 0.746155 +vt 0.999939 0.929626 +vt 0.999939 0.746155 +vt 0.929749 0.929749 +vt 0.929749 0.999939 +vt 0.929626 0.929749 +vt 0.929626 0.999939 +vt 0.929749 0.999939 +vt 0.929749 0.929749 +vt 0.929626 0.999939 +vt 0.929626 0.929749 +vt 1.000061 0.929626 +vt 1.000061 0.746155 +vt 0.999939 0.929626 +vt 0.999939 0.746155 +vt 0.929749 0.929626 +vt 0.929749 0.746155 +vt 0.929626 0.929626 +vt 0.929626 0.746155 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 321/951/245 322/952/245 323/953/245 +f 322/952/245 324/954/245 323/953/245 +f 325/955/246 326/956/246 327/957/246 +f 326/956/246 328/958/246 327/957/246 +f 325/959/247 327/960/247 323/961/247 +f 327/960/247 321/962/247 323/961/247 +f 328/963/248 326/964/248 322/965/248 +f 326/964/248 324/966/248 322/965/248 +f 327/967/249 328/968/249 321/969/249 +f 328/968/249 322/970/249 321/969/249 +f 323/971/250 324/972/250 325/973/250 +f 324/972/250 326/974/250 325/973/250 +o body.003 +v 0.562500 3.375000 0.562563 +v 0.562500 0.437500 0.562563 +v 0.562500 3.375000 0.562501 +v 0.562500 0.437500 0.562500 +v -0.562500 3.375000 0.562501 +v -0.562500 0.437500 0.562500 +v -0.562500 3.375000 0.562563 +v -0.562500 0.437500 0.562563 +vt 0.859436 0.929626 +vt 0.859436 0.746155 +vt 0.859314 0.929626 +vt 0.859314 0.746155 +vt 0.929749 0.929626 +vt 0.929749 0.746155 +vt 0.929626 0.929626 +vt 0.929626 0.746155 +vt 0.929626 0.929626 +vt 0.929626 0.929749 +vt 0.859436 0.929626 +vt 0.859436 0.929749 +vt 0.999939 0.929626 +vt 0.999939 0.929749 +vt 0.929749 0.929626 +vt 0.929749 0.929749 +vt 0.929749 0.929626 +vt 0.929749 0.746155 +vt 0.999939 0.929626 +vt 0.999939 0.746155 +vt 0.859436 0.746155 +vt 0.929626 0.746155 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 329/975/251 330/976/251 331/977/251 +f 330/976/251 332/978/251 331/977/251 +f 333/979/252 334/980/252 335/981/252 +f 334/980/252 336/982/252 335/981/252 +f 333/983/253 335/984/253 331/985/253 +f 335/984/253 329/986/253 331/985/253 +f 336/987/254 334/988/254 330/989/254 +f 334/988/254 332/990/254 330/989/254 +f 335/991/255 336/992/255 329/993/255 +f 336/992/255 330/994/255 329/993/255 +f 331/985/256 332/995/256 333/983/256 +f 332/995/256 334/996/256 333/983/256 +o cube.036 +v -0.249938 2.500000 -0.531250 +v -0.249938 2.000000 -0.531250 +v -0.249938 2.500000 -0.593750 +v -0.249938 2.000000 -0.593750 +v -0.250000 2.500000 -0.593750 +v -0.250000 2.000000 -0.593750 +v -0.250000 2.500000 -0.531250 +v -0.250000 2.000000 -0.531250 +vt 0.898499 0.605408 +vt 0.898499 0.574280 +vt 0.902283 0.605408 +vt 0.902283 0.574280 +vt 0.902405 0.605408 +vt 0.902405 0.574280 +vt 0.906189 0.605408 +vt 0.906189 0.574280 +vt 0.902405 0.605530 +vt 0.902405 0.609314 +vt 0.902283 0.605530 +vt 0.902283 0.609314 +vt 0.902405 0.609314 +vt 0.902405 0.605530 +vt 0.902283 0.609314 +vt 0.902283 0.605530 +vt 0.906311 0.605408 +vt 0.906311 0.574280 +vt 0.906189 0.605408 +vt 0.906189 0.574280 +vt 0.902405 0.605408 +vt 0.902405 0.574280 +vt 0.902283 0.605408 +vt 0.902283 0.574280 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 337/997/257 338/998/257 339/999/257 +f 338/998/257 340/1000/257 339/999/257 +f 341/1001/258 342/1002/258 343/1003/258 +f 342/1002/258 344/1004/258 343/1003/258 +f 341/1005/259 343/1006/259 339/1007/259 +f 343/1006/259 337/1008/259 339/1007/259 +f 344/1009/260 342/1010/260 338/1011/260 +f 342/1010/260 340/1012/260 338/1011/260 +f 343/1013/261 344/1014/261 337/1015/261 +f 344/1014/261 338/1016/261 337/1015/261 +f 339/1017/262 340/1018/262 341/1019/262 +f 340/1018/262 342/1020/262 341/1019/262 +o cube.037 +v 0.250062 2.500000 -0.531250 +v 0.250062 2.000000 -0.531250 +v 0.250062 2.500000 -0.593750 +v 0.250062 2.000000 -0.593750 +v 0.250000 2.500000 -0.593750 +v 0.250000 2.000000 -0.593750 +v 0.250000 2.500000 -0.531250 +v 0.250000 2.000000 -0.531250 +vt 0.898499 0.605408 +vt 0.898499 0.574280 +vt 0.902283 0.605408 +vt 0.902283 0.574280 +vt 0.902405 0.605408 +vt 0.902405 0.574280 +vt 0.906189 0.605408 +vt 0.906189 0.574280 +vt 0.902405 0.605530 +vt 0.902405 0.609314 +vt 0.902283 0.605530 +vt 0.902283 0.609314 +vt 0.902405 0.609314 +vt 0.902405 0.605530 +vt 0.902283 0.609314 +vt 0.902283 0.605530 +vt 0.906311 0.605408 +vt 0.906311 0.574280 +vt 0.906189 0.605408 +vt 0.906189 0.574280 +vt 0.902405 0.605408 +vt 0.902405 0.574280 +vt 0.902283 0.605408 +vt 0.902283 0.574280 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 345/1021/263 346/1022/263 347/1023/263 +f 346/1022/263 348/1024/263 347/1023/263 +f 349/1025/264 350/1026/264 351/1027/264 +f 350/1026/264 352/1028/264 351/1027/264 +f 349/1029/265 351/1030/265 347/1031/265 +f 351/1030/265 345/1032/265 347/1031/265 +f 352/1033/266 350/1034/266 346/1035/266 +f 350/1034/266 348/1036/266 346/1035/266 +f 351/1037/267 352/1038/267 345/1039/267 +f 352/1038/267 346/1040/267 345/1039/267 +f 347/1041/268 348/1042/268 349/1043/268 +f 348/1042/268 350/1044/268 349/1043/268 +o cube.038 +v 0.250000 2.500062 -0.531250 +v 0.250000 2.500000 -0.531250 +v 0.250000 2.500062 -0.593750 +v 0.250000 2.500000 -0.593750 +v -0.250000 2.500062 -0.593750 +v -0.250000 2.500000 -0.593750 +v -0.250000 2.500062 -0.531250 +v -0.250000 2.500000 -0.531250 +vt 0.902405 0.574158 +vt 0.902405 0.574280 +vt 0.906189 0.574158 +vt 0.906189 0.574280 +vt 0.937561 0.574158 +vt 0.937561 0.574280 +vt 0.941345 0.574158 +vt 0.941345 0.574280 +vt 0.937439 0.574280 +vt 0.937439 0.578064 +vt 0.906311 0.574280 +vt 0.906311 0.578064 +vt 0.968689 0.578064 +vt 0.968689 0.574280 +vt 0.937561 0.578064 +vt 0.937561 0.574280 +vt 0.941467 0.574158 +vt 0.941467 0.574280 +vt 0.972595 0.574158 +vt 0.972595 0.574280 +vt 0.906311 0.574158 +vt 0.906311 0.574280 +vt 0.937439 0.574158 +vt 0.937439 0.574280 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 353/1045/269 354/1046/269 355/1047/269 +f 354/1046/269 356/1048/269 355/1047/269 +f 357/1049/270 358/1050/270 359/1051/270 +f 358/1050/270 360/1052/270 359/1051/270 +f 357/1053/271 359/1054/271 355/1055/271 +f 359/1054/271 353/1056/271 355/1055/271 +f 360/1057/272 358/1058/272 354/1059/272 +f 358/1058/272 356/1060/272 354/1059/272 +f 359/1061/273 360/1062/273 353/1063/273 +f 360/1062/273 354/1064/273 353/1063/273 +f 355/1065/274 356/1066/274 357/1067/274 +f 356/1066/274 358/1068/274 357/1067/274 +o cube.039 +v 0.375000 0.250000 -0.374937 +v 0.375000 0.125000 -0.374937 +v 0.375000 0.250000 -0.375000 +v 0.375000 0.125000 -0.375000 +v -0.375000 0.250000 -0.375000 +v -0.375000 0.125000 -0.375000 +v -0.375000 0.250000 -0.374937 +v -0.375000 0.125000 -0.374937 +vt 0.085999 0.453064 +vt 0.085999 0.445374 +vt 0.085876 0.453064 +vt 0.085876 0.445374 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.453186 +vt 0.085999 0.453064 +vt 0.085999 0.453186 +vt 0.179626 0.453064 +vt 0.179626 0.453186 +vt 0.132874 0.453064 +vt 0.132874 0.453186 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.179626 0.453064 +vt 0.179626 0.445374 +vt 0.085999 0.445374 +vt 0.132751 0.445374 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 361/1069/275 362/1070/275 363/1071/275 +f 362/1070/275 364/1072/275 363/1071/275 +f 365/1073/276 366/1074/276 367/1075/276 +f 366/1074/276 368/1076/276 367/1075/276 +f 365/1077/277 367/1078/277 363/1079/277 +f 367/1078/277 361/1080/277 363/1079/277 +f 368/1081/278 366/1082/278 362/1083/278 +f 366/1082/278 364/1084/278 362/1083/278 +f 367/1085/279 368/1086/279 361/1087/279 +f 368/1086/279 362/1088/279 361/1087/279 +f 363/1079/280 364/1089/280 365/1077/280 +f 364/1089/280 366/1090/280 365/1077/280 +o cube.040 +v -0.312438 0.375000 0.312500 +v -0.312438 0.250000 0.312500 +v -0.312438 0.375000 -0.312500 +v -0.312438 0.250000 -0.312500 +v -0.312500 0.375000 -0.312500 +v -0.312500 0.250000 -0.312500 +v -0.312500 0.375000 0.312500 +v -0.312500 0.250000 0.312500 +vt 0.085999 0.507751 +vt 0.085999 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.500061 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.164001 0.507751 +vt 0.164001 0.500061 +vt 0.125061 0.507874 +vt 0.125061 0.546814 +vt 0.124939 0.507874 +vt 0.124939 0.546814 +vt 0.125061 0.546814 +vt 0.125061 0.507874 +vt 0.124939 0.546814 +vt 0.124939 0.507874 +vt 0.164124 0.507751 +vt 0.164124 0.500061 +vt 0.164001 0.507751 +vt 0.164001 0.500061 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.500061 +vn 1.0000 -0.0000 0.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 369/1091/281 370/1092/281 371/1093/281 +f 370/1092/281 372/1094/281 371/1093/281 +f 373/1095/282 374/1096/282 375/1097/282 +f 374/1096/282 376/1098/282 375/1097/282 +f 373/1099/283 375/1100/283 371/1101/283 +f 375/1100/283 369/1102/283 371/1101/283 +f 376/1103/284 374/1104/284 370/1105/284 +f 374/1104/284 372/1106/284 370/1105/284 +f 375/1107/285 376/1108/285 369/1109/285 +f 376/1108/285 370/1110/285 369/1109/285 +f 371/1111/286 372/1112/286 373/1113/286 +f 372/1112/286 374/1114/286 373/1113/286 +o cube.041 +v -0.249938 0.437500 0.250000 +v -0.249938 0.375000 0.250000 +v -0.249938 0.437500 -0.250000 +v -0.249938 0.375000 -0.250000 +v -0.250000 0.437500 -0.250000 +v -0.250000 0.375000 -0.250000 +v -0.250000 0.437500 0.250000 +v -0.250000 0.375000 0.250000 +vt 0.085999 0.550720 +vt 0.085999 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.546936 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.148376 0.550720 +vt 0.148376 0.546936 +vt 0.117249 0.550842 +vt 0.117249 0.581970 +vt 0.117126 0.550842 +vt 0.117126 0.581970 +vt 0.117249 0.581970 +vt 0.117249 0.550842 +vt 0.117126 0.581970 +vt 0.117126 0.550842 +vt 0.148499 0.550720 +vt 0.148499 0.546936 +vt 0.148376 0.550720 +vt 0.148376 0.546936 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.546936 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 377/1115/287 378/1116/287 379/1117/287 +f 378/1116/287 380/1118/287 379/1117/287 +f 381/1119/288 382/1120/288 383/1121/288 +f 382/1120/288 384/1122/288 383/1121/288 +f 381/1123/289 383/1124/289 379/1125/289 +f 383/1124/289 377/1126/289 379/1125/289 +f 384/1127/290 382/1128/290 378/1129/290 +f 382/1128/290 380/1130/290 378/1129/290 +f 383/1131/291 384/1132/291 377/1133/291 +f 384/1132/291 378/1134/291 377/1133/291 +f 379/1135/292 380/1136/292 381/1137/292 +f 380/1136/292 382/1138/292 381/1137/292 +o cube.042 +v -0.374938 0.250000 0.375000 +v -0.374938 0.125000 0.375000 +v -0.374938 0.250000 -0.375000 +v -0.374938 0.125000 -0.375000 +v -0.375000 0.250000 -0.375000 +v -0.375000 0.125000 -0.375000 +v -0.375000 0.250000 0.375000 +v -0.375000 0.125000 0.375000 +vt 0.085999 0.453064 +vt 0.085999 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.445374 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.179626 0.453064 +vt 0.179626 0.445374 +vt 0.132874 0.453186 +vt 0.132874 0.499939 +vt 0.132751 0.453186 +vt 0.132751 0.499939 +vt 0.132874 0.499939 +vt 0.132874 0.453186 +vt 0.132751 0.499939 +vt 0.132751 0.453186 +vt 0.179749 0.453064 +vt 0.179749 0.445374 +vt 0.179626 0.453064 +vt 0.179626 0.445374 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.445374 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 385/1139/293 386/1140/293 387/1141/293 +f 386/1140/293 388/1142/293 387/1141/293 +f 389/1143/294 390/1144/294 391/1145/294 +f 390/1144/294 392/1146/294 391/1145/294 +f 389/1147/295 391/1148/295 387/1149/295 +f 391/1148/295 385/1150/295 387/1149/295 +f 392/1151/296 390/1152/296 386/1153/296 +f 390/1152/296 388/1154/296 386/1153/296 +f 391/1155/297 392/1156/297 385/1157/297 +f 392/1156/297 386/1158/297 385/1157/297 +f 387/1159/298 388/1160/298 389/1161/298 +f 388/1160/298 390/1162/298 389/1161/298 +o cube.043 +v 0.375062 0.250000 0.375000 +v 0.375062 0.125000 0.375000 +v 0.375062 0.250000 -0.375000 +v 0.375062 0.125000 -0.375000 +v 0.375000 0.250000 -0.375000 +v 0.375000 0.125000 -0.375000 +v 0.375000 0.250000 0.375000 +v 0.375000 0.125000 0.375000 +vt 0.085999 0.453064 +vt 0.085999 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.445374 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.179626 0.453064 +vt 0.179626 0.445374 +vt 0.132874 0.453186 +vt 0.132874 0.499939 +vt 0.132751 0.453186 +vt 0.132751 0.499939 +vt 0.132874 0.499939 +vt 0.132874 0.453186 +vt 0.132751 0.499939 +vt 0.132751 0.453186 +vt 0.179749 0.453064 +vt 0.179749 0.445374 +vt 0.179626 0.453064 +vt 0.179626 0.445374 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.445374 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 393/1163/299 394/1164/299 395/1165/299 +f 394/1164/299 396/1166/299 395/1165/299 +f 397/1167/300 398/1168/300 399/1169/300 +f 398/1168/300 400/1170/300 399/1169/300 +f 397/1171/301 399/1172/301 395/1173/301 +f 399/1172/301 393/1174/301 395/1173/301 +f 400/1175/302 398/1176/302 394/1177/302 +f 398/1176/302 396/1178/302 394/1177/302 +f 399/1179/303 400/1180/303 393/1181/303 +f 400/1180/303 394/1182/303 393/1181/303 +f 395/1183/304 396/1184/304 397/1185/304 +f 396/1184/304 398/1186/304 397/1185/304 +o cube.044 +v 0.375000 0.250000 0.375063 +v 0.375000 0.125000 0.375063 +v 0.375000 0.250000 0.375000 +v 0.375000 0.125000 0.375000 +v -0.375000 0.250000 0.375000 +v -0.375000 0.125000 0.375000 +v -0.375000 0.250000 0.375063 +v -0.375000 0.125000 0.375063 +vt 0.085999 0.453064 +vt 0.085999 0.445374 +vt 0.085876 0.453064 +vt 0.085876 0.445374 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.453186 +vt 0.085999 0.453064 +vt 0.085999 0.453186 +vt 0.179626 0.453064 +vt 0.179626 0.453186 +vt 0.132874 0.453064 +vt 0.132874 0.453186 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.179626 0.453064 +vt 0.179626 0.445374 +vt 0.085999 0.445374 +vt 0.132751 0.445374 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 401/1187/305 402/1188/305 403/1189/305 +f 402/1188/305 404/1190/305 403/1189/305 +f 405/1191/306 406/1192/306 407/1193/306 +f 406/1192/306 408/1194/306 407/1193/306 +f 405/1195/307 407/1196/307 403/1197/307 +f 407/1196/307 401/1198/307 403/1197/307 +f 408/1199/308 406/1200/308 402/1201/308 +f 406/1200/308 404/1202/308 402/1201/308 +f 407/1203/309 408/1204/309 401/1205/309 +f 408/1204/309 402/1206/309 401/1205/309 +f 403/1197/310 404/1207/310 405/1195/310 +f 404/1207/310 406/1208/310 405/1195/310 +o cube.045 +v 0.312500 0.375000 -0.312437 +v 0.312500 0.250000 -0.312437 +v 0.312500 0.375000 -0.312500 +v 0.312500 0.250000 -0.312500 +v -0.312500 0.375000 -0.312500 +v -0.312500 0.250000 -0.312500 +v -0.312500 0.375000 -0.312437 +v -0.312500 0.250000 -0.312437 +vt 0.085999 0.507751 +vt 0.085999 0.500061 +vt 0.085876 0.507751 +vt 0.085876 0.500061 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.507874 +vt 0.085999 0.507751 +vt 0.085999 0.507874 +vt 0.164001 0.507751 +vt 0.164001 0.507874 +vt 0.125061 0.507751 +vt 0.125061 0.507874 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.164001 0.507751 +vt 0.164001 0.500061 +vt 0.085999 0.500061 +vt 0.124939 0.500061 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 409/1209/311 410/1210/311 411/1211/311 +f 410/1210/311 412/1212/311 411/1211/311 +f 413/1213/312 414/1214/312 415/1215/312 +f 414/1214/312 416/1216/312 415/1215/312 +f 413/1217/313 415/1218/313 411/1219/313 +f 415/1218/313 409/1220/313 411/1219/313 +f 416/1221/314 414/1222/314 410/1223/314 +f 414/1222/314 412/1224/314 410/1223/314 +f 415/1225/315 416/1226/315 409/1227/315 +f 416/1226/315 410/1228/315 409/1227/315 +f 411/1219/316 412/1229/316 413/1217/316 +f 412/1229/316 414/1230/316 413/1217/316 +o cube.046 +v 0.312500 0.375000 0.312563 +v 0.312500 0.250000 0.312563 +v 0.312500 0.375000 0.312500 +v 0.312500 0.250000 0.312500 +v -0.312500 0.375000 0.312500 +v -0.312500 0.250000 0.312500 +v -0.312500 0.375000 0.312563 +v -0.312500 0.250000 0.312563 +vt 0.085999 0.507751 +vt 0.085999 0.500061 +vt 0.085876 0.507751 +vt 0.085876 0.500061 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.507874 +vt 0.085999 0.507751 +vt 0.085999 0.507874 +vt 0.164001 0.507751 +vt 0.164001 0.507874 +vt 0.125061 0.507751 +vt 0.125061 0.507874 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.164001 0.507751 +vt 0.164001 0.500061 +vt 0.085999 0.500061 +vt 0.124939 0.500061 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 417/1231/317 418/1232/317 419/1233/317 +f 418/1232/317 420/1234/317 419/1233/317 +f 421/1235/318 422/1236/318 423/1237/318 +f 422/1236/318 424/1238/318 423/1237/318 +f 421/1239/319 423/1240/319 419/1241/319 +f 423/1240/319 417/1242/319 419/1241/319 +f 424/1243/320 422/1244/320 418/1245/320 +f 422/1244/320 420/1246/320 418/1245/320 +f 423/1247/321 424/1248/321 417/1249/321 +f 424/1248/321 418/1250/321 417/1249/321 +f 419/1241/322 420/1251/322 421/1239/322 +f 420/1251/322 422/1252/322 421/1239/322 +o cube.047 +v 0.312562 0.375000 0.312500 +v 0.312562 0.250000 0.312500 +v 0.312562 0.375000 -0.312500 +v 0.312562 0.250000 -0.312500 +v 0.312500 0.375000 -0.312500 +v 0.312500 0.250000 -0.312500 +v 0.312500 0.375000 0.312500 +v 0.312500 0.250000 0.312500 +vt 0.085999 0.507751 +vt 0.085999 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.500061 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.164001 0.507751 +vt 0.164001 0.500061 +vt 0.125061 0.507874 +vt 0.125061 0.546814 +vt 0.124939 0.507874 +vt 0.124939 0.546814 +vt 0.125061 0.546814 +vt 0.125061 0.507874 +vt 0.124939 0.546814 +vt 0.124939 0.507874 +vt 0.164124 0.507751 +vt 0.164124 0.500061 +vt 0.164001 0.507751 +vt 0.164001 0.500061 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.500061 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 425/1253/323 426/1254/323 427/1255/323 +f 426/1254/323 428/1256/323 427/1255/323 +f 429/1257/324 430/1258/324 431/1259/324 +f 430/1258/324 432/1260/324 431/1259/324 +f 429/1261/325 431/1262/325 427/1263/325 +f 431/1262/325 425/1264/325 427/1263/325 +f 432/1265/326 430/1266/326 426/1267/326 +f 430/1266/326 428/1268/326 426/1267/326 +f 431/1269/327 432/1270/327 425/1271/327 +f 432/1270/327 426/1272/327 425/1271/327 +f 427/1273/328 428/1274/328 429/1275/328 +f 428/1274/328 430/1276/328 429/1275/328 +o cube.048 +v 0.250000 0.437500 -0.249937 +v 0.250000 0.375000 -0.249937 +v 0.250000 0.437500 -0.250000 +v 0.250000 0.375000 -0.250000 +v -0.250000 0.437500 -0.250000 +v -0.250000 0.375000 -0.250000 +v -0.250000 0.437500 -0.249937 +v -0.250000 0.375000 -0.249937 +vt 0.085999 0.550720 +vt 0.085999 0.546936 +vt 0.085876 0.550720 +vt 0.085876 0.546936 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.550842 +vt 0.085999 0.550720 +vt 0.085999 0.550842 +vt 0.148376 0.550720 +vt 0.148376 0.550842 +vt 0.117249 0.550720 +vt 0.117249 0.550842 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.148376 0.550720 +vt 0.148376 0.546936 +vt 0.085999 0.546936 +vt 0.117126 0.546936 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 433/1277/329 434/1278/329 435/1279/329 +f 434/1278/329 436/1280/329 435/1279/329 +f 437/1281/330 438/1282/330 439/1283/330 +f 438/1282/330 440/1284/330 439/1283/330 +f 437/1285/331 439/1286/331 435/1287/331 +f 439/1286/331 433/1288/331 435/1287/331 +f 440/1289/332 438/1290/332 434/1291/332 +f 438/1290/332 436/1292/332 434/1291/332 +f 439/1293/333 440/1294/333 433/1295/333 +f 440/1294/333 434/1296/333 433/1295/333 +f 435/1287/334 436/1297/334 437/1285/334 +f 436/1297/334 438/1298/334 437/1285/334 +o cube.049 +v 0.250000 0.437500 0.250063 +v 0.250000 0.375000 0.250063 +v 0.250000 0.437500 0.250000 +v 0.250000 0.375000 0.250000 +v -0.250000 0.437500 0.250000 +v -0.250000 0.375000 0.250000 +v -0.250000 0.437500 0.250063 +v -0.250000 0.375000 0.250063 +vt 0.085999 0.550720 +vt 0.085999 0.546936 +vt 0.085876 0.550720 +vt 0.085876 0.546936 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.550842 +vt 0.085999 0.550720 +vt 0.085999 0.550842 +vt 0.148376 0.550720 +vt 0.148376 0.550842 +vt 0.117249 0.550720 +vt 0.117249 0.550842 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.148376 0.550720 +vt 0.148376 0.546936 +vt 0.085999 0.546936 +vt 0.117126 0.546936 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 441/1299/335 442/1300/335 443/1301/335 +f 442/1300/335 444/1302/335 443/1301/335 +f 445/1303/336 446/1304/336 447/1305/336 +f 446/1304/336 448/1306/336 447/1305/336 +f 445/1307/337 447/1308/337 443/1309/337 +f 447/1308/337 441/1310/337 443/1309/337 +f 448/1311/338 446/1312/338 442/1313/338 +f 446/1312/338 444/1314/338 442/1313/338 +f 447/1315/339 448/1316/339 441/1317/339 +f 448/1316/339 442/1318/339 441/1317/339 +f 443/1309/340 444/1319/340 445/1307/340 +f 444/1319/340 446/1320/340 445/1307/340 +o cube.050 +v 0.250062 0.437500 0.250000 +v 0.250062 0.375000 0.250000 +v 0.250062 0.437500 -0.250000 +v 0.250062 0.375000 -0.250000 +v 0.250000 0.437500 -0.250000 +v 0.250000 0.375000 -0.250000 +v 0.250000 0.437500 0.250000 +v 0.250000 0.375000 0.250000 +vt 0.085999 0.550720 +vt 0.085999 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.546936 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.148376 0.550720 +vt 0.148376 0.546936 +vt 0.117249 0.550842 +vt 0.117249 0.581970 +vt 0.117126 0.550842 +vt 0.117126 0.581970 +vt 0.117249 0.581970 +vt 0.117249 0.550842 +vt 0.117126 0.581970 +vt 0.117126 0.550842 +vt 0.148499 0.550720 +vt 0.148499 0.546936 +vt 0.148376 0.550720 +vt 0.148376 0.546936 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.546936 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 449/1321/341 450/1322/341 451/1323/341 +f 450/1322/341 452/1324/341 451/1323/341 +f 453/1325/342 454/1326/342 455/1327/342 +f 454/1326/342 456/1328/342 455/1327/342 +f 453/1329/343 455/1330/343 451/1331/343 +f 455/1330/343 449/1332/343 451/1331/343 +f 456/1333/344 454/1334/344 450/1335/344 +f 454/1334/344 452/1336/344 450/1335/344 +f 455/1337/345 456/1338/345 449/1339/345 +f 456/1338/345 450/1340/345 449/1339/345 +f 451/1341/346 452/1342/346 453/1343/346 +f 452/1342/346 454/1344/346 453/1343/346 +o cube.051 +v 0.375000 0.250062 0.375000 +v 0.375000 0.250000 0.375000 +v 0.375000 0.250063 -0.375000 +v 0.375000 0.250000 -0.375000 +v -0.375000 0.250063 -0.375000 +v -0.375000 0.250000 -0.375000 +v -0.375000 0.250062 0.375000 +v -0.375000 0.250000 0.375000 +vt 0.039124 0.453064 +vt 0.039124 0.453186 +vt 0.085876 0.453064 +vt 0.085876 0.453186 +vt 0.132874 0.453064 +vt 0.132874 0.453186 +vt 0.179626 0.453064 +vt 0.179626 0.453186 +vt 0.132751 0.453186 +vt 0.132751 0.499939 +vt 0.085999 0.453186 +vt 0.085999 0.499939 +vt 0.179626 0.499939 +vt 0.179626 0.453186 +vt 0.132874 0.499939 +vt 0.132874 0.453186 +vt 0.179749 0.453064 +vt 0.179749 0.453186 +vt 0.226501 0.453064 +vt 0.226501 0.453186 +vt 0.085999 0.453064 +vt 0.085999 0.453186 +vt 0.132751 0.453064 +vt 0.132751 0.453186 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 457/1345/347 458/1346/347 459/1347/347 +f 458/1346/347 460/1348/347 459/1347/347 +f 461/1349/348 462/1350/348 463/1351/348 +f 462/1350/348 464/1352/348 463/1351/348 +f 461/1353/349 463/1354/349 459/1355/349 +f 463/1354/349 457/1356/349 459/1355/349 +f 464/1357/350 462/1358/350 458/1359/350 +f 462/1358/350 460/1360/350 458/1359/350 +f 463/1361/351 464/1362/351 457/1363/351 +f 464/1362/351 458/1364/351 457/1363/351 +f 459/1365/352 460/1366/352 461/1367/352 +f 460/1366/352 462/1368/352 461/1367/352 +o cube.052 +v 0.312500 0.375062 0.312500 +v 0.312500 0.375000 0.312500 +v 0.312500 0.375063 -0.312500 +v 0.312500 0.375000 -0.312500 +v -0.312500 0.375063 -0.312500 +v -0.312500 0.375000 -0.312500 +v -0.312500 0.375062 0.312500 +v -0.312500 0.375000 0.312500 +vt 0.046936 0.507751 +vt 0.046936 0.507874 +vt 0.085876 0.507751 +vt 0.085876 0.507874 +vt 0.125061 0.507751 +vt 0.125061 0.507874 +vt 0.164001 0.507751 +vt 0.164001 0.507874 +vt 0.124939 0.507874 +vt 0.124939 0.546814 +vt 0.085999 0.507874 +vt 0.085999 0.546814 +vt 0.164001 0.546814 +vt 0.164001 0.507874 +vt 0.125061 0.546814 +vt 0.125061 0.507874 +vt 0.164124 0.507751 +vt 0.164124 0.507874 +vt 0.203064 0.507751 +vt 0.203064 0.507874 +vt 0.085999 0.507751 +vt 0.085999 0.507874 +vt 0.124939 0.507751 +vt 0.124939 0.507874 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 465/1369/353 466/1370/353 467/1371/353 +f 466/1370/353 468/1372/353 467/1371/353 +f 469/1373/354 470/1374/354 471/1375/354 +f 470/1374/354 472/1376/354 471/1375/354 +f 469/1377/355 471/1378/355 467/1379/355 +f 471/1378/355 465/1380/355 467/1379/355 +f 472/1381/356 470/1382/356 466/1383/356 +f 470/1382/356 468/1384/356 466/1383/356 +f 471/1385/357 472/1386/357 465/1387/357 +f 472/1386/357 466/1388/357 465/1387/357 +f 467/1389/358 468/1390/358 469/1391/358 +f 468/1390/358 470/1392/358 469/1391/358 diff --git a/src/main/resources/assets/boss_tools/models/item/rocket_t3.json b/src/main/resources/assets/boss_tools/models/item/rocket_t3.json new file mode 100644 index 000000000..5d42673e3 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/rocket_t3.json @@ -0,0 +1,134 @@ +{ + "forge_marker": 1, + "parent": "forge:item/default", + "loader": "forge:obj", + "flip-v": true, + "model": "boss_tools:models/item/rocket_t3.obj", + "display": { + "thirdperson_righthand": { + "rotation": [ + -90, + 0, + -90 + ], + "translation": [ + -25, + 4.5, + -1 + ], + "scale": [ + 0.8, + 0.8, + 0.8 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + -90, + 0, + -90 + ], + "translation": [ + -25, + 4.5, + -13.5 + ], + "scale": [ + 0.8, + 0.8, + 0.8 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 0, + 90 + ], + "translation": [ + 3, + 25, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 0, + 90 + ], + "translation": [ + 3, + 15, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "ground": { + "translation": [ + 2, + 2, + 2 + ], + "scale": [ + 0.2, + 0.2, + 0.2 + ] + }, + "gui": { + "rotation": [ + -41, + -170, + -26 + ], + "translation": [ + -0.5, + -4.8, + 0 + ], + "scale": [ + 0.2, + 0.2, + 0.2 + ] + }, + "fixed": { + "translation": [ + 1, + -2.5, + 0 + ], + "scale": [ + 0.2, + 0.2, + 0.2 + ] + }, + "head": { + "translation": [ + 2.5, + 9, + 2.25 + ], + "scale": [ + 0.3, + 0.3, + 0.3 + ] + } + }, + "textures": { + "m_0": "boss_tools:vehicle_items/rocket_t3", + "particle": "boss_tools:vehicle_items/rocket_t3" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/rocket_t3.mtl b/src/main/resources/assets/boss_tools/models/item/rocket_t3.mtl new file mode 100644 index 000000000..12b150577 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/rocket_t3.mtl @@ -0,0 +1,7 @@ +newmtl m_0 +Ka 0.0 0.0 0.0 +Kd 0.8 0.8 0.8 +Ks 0.0 0.0 0.0 +map_Kd boss_tools:vehicle_items/rocket_t3 +Ns 0.0 +d 1.0 \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/rocket_t3.obj b/src/main/resources/assets/boss_tools/models/item/rocket_t3.obj new file mode 100644 index 000000000..d7c9fa4f6 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/rocket_t3.obj @@ -0,0 +1,4119 @@ +mtllib rocket_t3.mtl +o body +v -0.562437 3.562500 0.562501 +v -0.562437 0.437500 0.562500 +v -0.562437 3.562500 -0.562499 +v -0.562437 0.437500 -0.562500 +v -0.562500 3.562500 -0.562499 +v -0.562500 0.437500 -0.562500 +v -0.562500 3.562500 0.562501 +v -0.562500 0.437500 0.562500 +vt 0.859436 0.929626 +vt 0.859436 0.734436 +vt 0.929626 0.929626 +vt 0.929626 0.734436 +vt 0.929749 0.929626 +vt 0.929749 0.734436 +vt 0.999939 0.929626 +vt 0.999939 0.734436 +vt 0.929749 0.929749 +vt 0.929749 0.999939 +vt 0.929626 0.929749 +vt 0.929626 0.999939 +vt 0.929749 0.999939 +vt 0.929749 0.929749 +vt 0.929626 0.999939 +vt 0.929626 0.929749 +vt 1.000061 0.929626 +vt 1.000061 0.734436 +vt 0.999939 0.929626 +vt 0.999939 0.734436 +vt 0.929749 0.929626 +vt 0.929749 0.734436 +vt 0.929626 0.929626 +vt 0.929626 0.734436 +vn 1.0000 0.0000 0.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 1/1/1 2/2/1 3/3/1 +f 2/2/1 4/4/1 3/3/1 +f 5/5/2 6/6/2 7/7/2 +f 6/6/2 8/8/2 7/7/2 +f 5/9/3 7/10/3 3/11/3 +f 7/10/3 1/12/3 3/11/3 +f 8/13/4 6/14/4 2/15/4 +f 6/14/4 4/16/4 2/15/4 +f 7/17/5 8/18/5 1/19/5 +f 8/18/5 2/20/5 1/19/5 +f 3/21/6 4/22/6 5/23/6 +f 4/22/6 6/24/6 5/23/6 +o cube +v -0.557648 1.157260 -0.469259 +v -1.158450 0.761055 -1.070062 +v -0.389552 0.647461 -0.301164 +v -0.990355 0.251257 -0.901967 +v -0.301164 0.647461 -0.389552 +v -0.901967 0.251257 -0.990355 +v -0.469259 1.157260 -0.557647 +v -1.070062 0.761055 -1.158450 +vt 0.000061 0.546814 +vt 0.000061 0.488342 +vt 0.035095 0.546814 +vt 0.035095 0.488342 +vt 0.043030 0.546814 +vt 0.043030 0.488342 +vt 0.078064 0.546814 +vt 0.078064 0.488342 +vt 0.042908 0.546936 +vt 0.042908 0.581970 +vt 0.035217 0.546936 +vt 0.035217 0.581970 +vt 0.050720 0.581970 +vt 0.050720 0.546936 +vt 0.043030 0.581970 +vt 0.043030 0.546936 +vt 0.078186 0.546814 +vt 0.078186 0.488342 +vt 0.085876 0.546814 +vt 0.085876 0.488342 +vt 0.035217 0.546814 +vt 0.035217 0.488342 +vt 0.042908 0.546814 +vt 0.042908 0.488342 +vn -0.7071 0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.6409 0.4226 0.6409 +vn -0.6409 -0.4226 -0.6409 +vn -0.2988 0.9063 -0.2988 +vn 0.2988 -0.9063 0.2988 +usemtl m_0 +s 1 +f 9/25/7 10/26/7 11/27/7 +f 10/26/7 12/28/7 11/27/7 +f 13/29/8 14/30/8 15/31/8 +f 14/30/8 16/32/8 15/31/8 +f 13/33/9 15/34/9 11/35/9 +f 15/34/9 9/36/9 11/35/9 +f 16/37/10 14/38/10 10/39/10 +f 14/38/10 12/40/10 10/39/10 +f 15/41/11 16/42/11 9/43/11 +f 16/42/11 10/44/11 9/43/11 +f 11/45/12 12/46/12 13/47/12 +f 12/46/12 14/48/12 13/47/12 +o cube.000 +v -1.211549 1.000000 -1.034772 +v -1.211549 -0.062500 -1.034772 +v -1.034772 1.000000 -0.857995 +v -1.034772 -0.062500 -0.857995 +v -0.857995 1.000000 -1.034772 +v -0.857995 -0.062500 -1.034772 +v -1.034772 1.000000 -1.211548 +v -1.034772 -0.062500 -1.211549 +vt 0.000061 0.472595 +vt 0.000061 0.406311 +vt 0.015564 0.472595 +vt 0.015564 0.406311 +vt 0.031311 0.472595 +vt 0.031311 0.406311 +vt 0.046814 0.472595 +vt 0.046814 0.406311 +vt 0.031189 0.472717 +vt 0.031189 0.488220 +vt 0.015686 0.472717 +vt 0.015686 0.488220 +vt 0.046814 0.488220 +vt 0.046814 0.472717 +vt 0.031311 0.488220 +vt 0.031311 0.472717 +vt 0.046936 0.472595 +vt 0.046936 0.406311 +vt 0.062439 0.472595 +vt 0.062439 0.406311 +vt 0.015686 0.472595 +vt 0.015686 0.406311 +vt 0.031189 0.472595 +vt 0.031189 0.406311 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +usemtl m_0 +s 1 +f 17/49/13 18/50/13 19/51/13 +f 18/50/13 20/52/13 19/51/13 +f 21/53/14 22/54/14 23/55/14 +f 22/54/14 24/56/14 23/55/14 +f 21/57/15 23/58/15 19/59/15 +f 23/58/15 17/60/15 19/59/15 +f 24/61/16 22/62/16 18/63/16 +f 22/62/16 20/64/16 18/63/16 +f 23/65/17 24/66/17 17/67/17 +f 24/66/17 18/68/17 17/67/17 +f 19/69/18 20/70/18 21/71/18 +f 20/70/18 22/72/18 21/71/18 +o cube.001 +v -0.469259 1.157259 0.557648 +v -1.070062 0.761055 1.158450 +v -0.301164 0.647461 0.389552 +v -0.901967 0.251257 0.990355 +v -0.389552 0.647461 0.301164 +v -0.990355 0.251257 0.901967 +v -0.557648 1.157259 0.469259 +v -1.158450 0.761055 1.070062 +vt 0.000061 0.546814 +vt 0.000061 0.488342 +vt 0.035095 0.546814 +vt 0.035095 0.488342 +vt 0.043030 0.546814 +vt 0.043030 0.488342 +vt 0.078064 0.546814 +vt 0.078064 0.488342 +vt 0.042908 0.546936 +vt 0.042908 0.581970 +vt 0.035217 0.546936 +vt 0.035217 0.581970 +vt 0.050720 0.581970 +vt 0.050720 0.546936 +vt 0.043030 0.581970 +vt 0.043030 0.546936 +vt 0.078186 0.546814 +vt 0.078186 0.488342 +vt 0.085876 0.546814 +vt 0.085876 0.488342 +vt 0.035217 0.546814 +vt 0.035217 0.488342 +vt 0.042908 0.546814 +vt 0.042908 0.488342 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.6409 0.4226 -0.6409 +vn -0.6409 -0.4226 0.6409 +vn -0.2988 0.9063 0.2988 +vn 0.2988 -0.9063 -0.2988 +usemtl m_0 +s 1 +f 25/73/19 26/74/19 27/75/19 +f 26/74/19 28/76/19 27/75/19 +f 29/77/20 30/78/20 31/79/20 +f 30/78/20 32/80/20 31/79/20 +f 29/81/21 31/82/21 27/83/21 +f 31/82/21 25/84/21 27/83/21 +f 32/85/22 30/86/22 26/87/22 +f 30/86/22 28/88/22 26/87/22 +f 31/89/23 32/90/23 25/91/23 +f 32/90/23 26/92/23 25/91/23 +f 27/93/24 28/94/24 29/95/24 +f 28/94/24 30/96/24 29/95/24 +o cube.002 +v -1.034772 1.000000 1.211549 +v -1.034772 -0.062500 1.211549 +v -0.857995 1.000000 1.034772 +v -0.857995 -0.062500 1.034772 +v -1.034772 1.000000 0.857995 +v -1.034772 -0.062500 0.857995 +v -1.211549 1.000000 1.034772 +v -1.211549 -0.062500 1.034772 +vt 0.000061 0.472595 +vt 0.000061 0.406311 +vt 0.015564 0.472595 +vt 0.015564 0.406311 +vt 0.031311 0.472595 +vt 0.031311 0.406311 +vt 0.046814 0.472595 +vt 0.046814 0.406311 +vt 0.031189 0.472717 +vt 0.031189 0.488220 +vt 0.015686 0.472717 +vt 0.015686 0.488220 +vt 0.046814 0.488220 +vt 0.046814 0.472717 +vt 0.031311 0.488220 +vt 0.031311 0.472717 +vt 0.046936 0.472595 +vt 0.046936 0.406311 +vt 0.062439 0.472595 +vt 0.062439 0.406311 +vt 0.015686 0.472595 +vt 0.015686 0.406311 +vt 0.031189 0.472595 +vt 0.031189 0.406311 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +usemtl m_0 +s 1 +f 33/97/25 34/98/25 35/99/25 +f 34/98/25 36/100/25 35/99/25 +f 37/101/26 38/102/26 39/103/26 +f 38/102/26 40/104/26 39/103/26 +f 37/105/27 39/106/27 35/107/27 +f 39/106/27 33/108/27 35/107/27 +f 40/109/28 38/110/28 34/111/28 +f 38/110/28 36/112/28 34/111/28 +f 39/113/29 40/114/29 33/115/29 +f 40/114/29 34/116/29 33/115/29 +f 35/117/30 36/118/30 37/119/30 +f 36/118/30 38/120/30 37/119/30 +o cube.003 +v 0.469259 1.157260 -0.557647 +v 1.070062 0.761055 -1.158450 +v 0.301164 0.647461 -0.389552 +v 0.901967 0.251257 -0.990355 +v 0.389552 0.647461 -0.301164 +v 0.990355 0.251257 -0.901967 +v 0.557648 1.157260 -0.469259 +v 1.158450 0.761055 -1.070062 +vt 0.000061 0.546814 +vt 0.000061 0.488342 +vt 0.035095 0.546814 +vt 0.035095 0.488342 +vt 0.043030 0.546814 +vt 0.043030 0.488342 +vt 0.078064 0.546814 +vt 0.078064 0.488342 +vt 0.042908 0.546936 +vt 0.042908 0.581970 +vt 0.035217 0.546936 +vt 0.035217 0.581970 +vt 0.050720 0.581970 +vt 0.050720 0.546936 +vt 0.043030 0.581970 +vt 0.043030 0.546936 +vt 0.078186 0.546814 +vt 0.078186 0.488342 +vt 0.085876 0.546814 +vt 0.085876 0.488342 +vt 0.035217 0.546814 +vt 0.035217 0.488342 +vt 0.042908 0.546814 +vt 0.042908 0.488342 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +vn -0.6409 0.4226 0.6409 +vn 0.6409 -0.4226 -0.6409 +vn 0.2988 0.9063 -0.2988 +vn -0.2988 -0.9063 0.2988 +usemtl m_0 +s 1 +f 41/121/31 42/122/31 43/123/31 +f 42/122/31 44/124/31 43/123/31 +f 45/125/32 46/126/32 47/127/32 +f 46/126/32 48/128/32 47/127/32 +f 45/129/33 47/130/33 43/131/33 +f 47/130/33 41/132/33 43/131/33 +f 48/133/34 46/134/34 42/135/34 +f 46/134/34 44/136/34 42/135/34 +f 47/137/35 48/138/35 41/139/35 +f 48/138/35 42/140/35 41/139/35 +f 43/141/36 44/142/36 45/143/36 +f 44/142/36 46/144/36 45/143/36 +o cube.004 +v 1.034772 1.000000 -1.211548 +v 1.034772 -0.062500 -1.211549 +v 0.857995 1.000000 -1.034772 +v 0.857995 -0.062500 -1.034772 +v 1.034772 1.000000 -0.857995 +v 1.034772 -0.062500 -0.857995 +v 1.211549 1.000000 -1.034772 +v 1.211549 -0.062500 -1.034772 +vt 0.000061 0.472595 +vt 0.000061 0.406311 +vt 0.015564 0.472595 +vt 0.015564 0.406311 +vt 0.031311 0.472595 +vt 0.031311 0.406311 +vt 0.046814 0.472595 +vt 0.046814 0.406311 +vt 0.031189 0.472717 +vt 0.031189 0.488220 +vt 0.015686 0.472717 +vt 0.015686 0.488220 +vt 0.046814 0.488220 +vt 0.046814 0.472717 +vt 0.031311 0.488220 +vt 0.031311 0.472717 +vt 0.046936 0.472595 +vt 0.046936 0.406311 +vt 0.062439 0.472595 +vt 0.062439 0.406311 +vt 0.015686 0.472595 +vt 0.015686 0.406311 +vt 0.031189 0.472595 +vt 0.031189 0.406311 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +vn 0.0000 1.0000 0.0000 +vn -0.0000 -1.0000 -0.0000 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 -0.0000 0.7071 +usemtl m_0 +s 1 +f 49/145/37 50/146/37 51/147/37 +f 50/146/37 52/148/37 51/147/37 +f 53/149/38 54/150/38 55/151/38 +f 54/150/38 56/152/38 55/151/38 +f 53/153/39 55/154/39 51/155/39 +f 55/154/39 49/156/39 51/155/39 +f 56/157/40 54/158/40 50/159/40 +f 54/158/40 52/160/40 50/159/40 +f 55/161/41 56/162/41 49/163/41 +f 56/162/41 50/164/41 49/163/41 +f 51/165/42 52/166/42 53/167/42 +f 52/166/42 54/168/42 53/167/42 +o cube.005 +v 0.557648 1.157259 0.469259 +v 1.158450 0.761055 1.070062 +v 0.389552 0.647461 0.301164 +v 0.990355 0.251257 0.901967 +v 0.301164 0.647461 0.389552 +v 0.901967 0.251257 0.990355 +v 0.469259 1.157259 0.557648 +v 1.070062 0.761055 1.158450 +vt 0.000061 0.546814 +vt 0.000061 0.488342 +vt 0.035095 0.546814 +vt 0.035095 0.488342 +vt 0.043030 0.546814 +vt 0.043030 0.488342 +vt 0.078064 0.546814 +vt 0.078064 0.488342 +vt 0.042908 0.546936 +vt 0.042908 0.581970 +vt 0.035217 0.546936 +vt 0.035217 0.581970 +vt 0.050720 0.581970 +vt 0.050720 0.546936 +vt 0.043030 0.581970 +vt 0.043030 0.546936 +vt 0.078186 0.546814 +vt 0.078186 0.488342 +vt 0.085876 0.546814 +vt 0.085876 0.488342 +vt 0.035217 0.546814 +vt 0.035217 0.488342 +vt 0.042908 0.546814 +vt 0.042908 0.488342 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 -0.0000 0.7071 +vn -0.6409 0.4226 -0.6409 +vn 0.6409 -0.4226 0.6409 +vn 0.2988 0.9063 0.2988 +vn -0.2988 -0.9063 -0.2988 +usemtl m_0 +s 1 +f 57/169/43 58/170/43 59/171/43 +f 58/170/43 60/172/43 59/171/43 +f 61/173/44 62/174/44 63/175/44 +f 62/174/44 64/176/44 63/175/44 +f 61/177/45 63/178/45 59/179/45 +f 63/178/45 57/180/45 59/179/45 +f 64/181/46 62/182/46 58/183/46 +f 62/182/46 60/184/46 58/183/46 +f 63/185/47 64/186/47 57/187/47 +f 64/186/47 58/188/47 57/187/47 +f 59/189/48 60/190/48 61/191/48 +f 60/190/48 62/192/48 61/191/48 +o cube.006 +v 1.211549 1.000000 1.034772 +v 1.211549 -0.062500 1.034772 +v 1.034772 1.000000 0.857995 +v 1.034772 -0.062500 0.857995 +v 0.857995 1.000000 1.034772 +v 0.857995 -0.062500 1.034772 +v 1.034772 1.000000 1.211549 +v 1.034772 -0.062500 1.211549 +vt 0.000061 0.472595 +vt 0.000061 0.406311 +vt 0.015564 0.472595 +vt 0.015564 0.406311 +vt 0.031311 0.472595 +vt 0.031311 0.406311 +vt 0.046814 0.472595 +vt 0.046814 0.406311 +vt 0.031189 0.472717 +vt 0.031189 0.488220 +vt 0.015686 0.472717 +vt 0.015686 0.488220 +vt 0.046814 0.488220 +vt 0.046814 0.472717 +vt 0.031311 0.488220 +vt 0.031311 0.472717 +vt 0.046936 0.472595 +vt 0.046936 0.406311 +vt 0.062439 0.472595 +vt 0.062439 0.406311 +vt 0.015686 0.472595 +vt 0.015686 0.406311 +vt 0.031189 0.472595 +vt 0.031189 0.406311 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 0.7071 +vn -0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.7071 -0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +usemtl m_0 +s 1 +f 65/193/49 66/194/49 67/195/49 +f 66/194/49 68/196/49 67/195/49 +f 69/197/50 70/198/50 71/199/50 +f 70/198/50 72/200/50 71/199/50 +f 69/201/51 71/202/51 67/203/51 +f 71/202/51 65/204/51 67/203/51 +f 72/205/52 70/206/52 66/207/52 +f 70/206/52 68/208/52 66/207/52 +f 71/209/53 72/210/53 65/211/53 +f 72/210/53 66/212/53 65/211/53 +f 67/213/54 68/214/54 69/215/54 +f 68/214/54 70/216/54 69/215/54 +o cube.007 +v 0.500000 4.966195 0.055675 +v 0.500000 3.556656 0.568705 +v 0.500000 4.966174 0.055617 +v 0.500000 3.556635 0.568647 +v -0.500000 4.966174 0.055617 +v -0.500000 3.556635 0.568647 +v -0.500000 4.966195 0.055675 +v -0.500000 3.556656 0.568705 +vt 0.000061 0.999939 +vt 0.000061 0.906311 +vt -0.000061 0.999939 +vt -0.000061 0.906311 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.062439 0.999939 +vt 0.062439 0.906311 +vt 0.062439 0.999939 +vt 0.062439 1.000061 +vt 0.000061 0.999939 +vt 0.000061 1.000061 +vt 0.124939 0.999939 +vt 0.124939 1.000061 +vt 0.062561 0.999939 +vt 0.062561 1.000061 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.124939 0.999939 +vt 0.124939 0.906311 +vt 0.000061 0.906311 +vt 0.062439 0.906311 +vn 1.0000 0.0006 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0006 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.9397 -0.3420 +vn 0.0000 -0.9397 0.3420 +vn 0.0000 -0.9397 0.3421 +vn 0.0000 0.3420 0.9397 +vn 0.0000 -0.3420 -0.9397 +usemtl m_0 +s 1 +f 73/217/55 74/218/56 75/219/55 +f 74/218/56 76/220/56 75/219/55 +f 77/221/57 78/222/58 79/223/57 +f 78/222/58 80/224/58 79/223/57 +f 77/225/59 79/226/59 75/227/59 +f 79/226/59 73/228/59 75/227/59 +f 80/229/60 78/230/61 74/231/61 +f 78/230/61 76/232/60 74/231/61 +f 79/233/62 80/234/62 73/235/62 +f 80/234/62 74/236/62 73/235/62 +f 75/227/63 76/237/63 77/225/63 +f 76/237/63 78/238/63 77/225/63 +o cube.008 +v 0.055674 4.966195 -0.499999 +v 0.568705 3.556656 -0.499999 +v 0.055616 4.966174 -0.499999 +v 0.568646 3.556635 -0.499999 +v 0.055616 4.966174 0.500001 +v 0.568646 3.556635 0.500001 +v 0.055674 4.966195 0.500001 +v 0.568705 3.556656 0.500001 +vt 0.000061 0.999939 +vt 0.000061 0.906311 +vt -0.000061 0.999939 +vt -0.000061 0.906311 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.062439 0.999939 +vt 0.062439 0.906311 +vt 0.062439 0.999939 +vt 0.062439 1.000061 +vt 0.000061 0.999939 +vt 0.000061 1.000061 +vt 0.124939 0.999939 +vt 0.124939 1.000061 +vt 0.062561 0.999939 +vt 0.062561 1.000061 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.124939 0.999939 +vt 0.124939 0.906311 +vt 0.000061 0.906311 +vt 0.062439 0.906311 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +vn -0.3420 0.9397 0.0000 +vn 0.3421 -0.9397 0.0000 +vn 0.3420 -0.9397 -0.0000 +vn 0.9397 0.3420 0.0000 +vn -0.9397 -0.3420 0.0000 +usemtl m_0 +s 1 +f 81/239/64 82/240/64 83/241/64 +f 82/240/64 84/242/64 83/241/64 +f 85/243/65 86/244/65 87/245/65 +f 86/244/65 88/246/65 87/245/65 +f 85/247/66 87/248/66 83/249/66 +f 87/248/66 81/250/66 83/249/66 +f 88/251/67 86/252/67 82/253/68 +f 86/252/67 84/254/68 82/253/68 +f 87/255/69 88/256/69 81/257/69 +f 88/256/69 82/258/69 81/257/69 +f 83/249/70 84/259/70 85/247/70 +f 84/259/70 86/260/70 85/247/70 +o cube.009 +v -0.500000 4.966195 -0.055674 +v -0.500000 3.556656 -0.568704 +v -0.500000 4.966174 -0.055615 +v -0.500000 3.556635 -0.568645 +v 0.500000 4.966174 -0.055615 +v 0.500000 3.556635 -0.568645 +v 0.500000 4.966195 -0.055674 +v 0.500000 3.556656 -0.568704 +vt 0.000061 0.999939 +vt 0.000061 0.906311 +vt -0.000061 0.999939 +vt -0.000061 0.906311 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.062439 0.999939 +vt 0.062439 0.906311 +vt 0.062439 0.999939 +vt 0.062439 1.000061 +vt 0.000061 0.999939 +vt 0.000061 1.000061 +vt 0.124939 0.999939 +vt 0.124939 1.000061 +vt 0.062561 0.999939 +vt 0.062561 1.000061 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.124939 0.999939 +vt 0.124939 0.906311 +vt 0.000061 0.906311 +vt 0.062439 0.906311 +vn -1.0000 0.0006 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0006 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.9397 0.3420 +vn 0.0000 -0.9397 -0.3420 +vn -0.0000 -0.9397 -0.3421 +vn 0.0000 0.3420 -0.9397 +vn 0.0000 -0.3420 0.9397 +usemtl m_0 +s 1 +f 89/261/71 90/262/72 91/263/71 +f 90/262/72 92/264/72 91/263/71 +f 93/265/73 94/266/74 95/267/73 +f 94/266/74 96/268/74 95/267/73 +f 93/269/75 95/270/75 91/271/75 +f 95/270/75 89/272/75 91/271/75 +f 96/273/76 94/274/77 90/275/77 +f 94/274/77 92/276/76 90/275/77 +f 95/277/78 96/278/78 89/279/78 +f 96/278/78 90/280/78 89/279/78 +f 91/271/79 92/281/79 93/269/79 +f 92/281/79 94/282/79 93/269/79 +o cube.010 +v -0.055674 4.966195 0.500001 +v -0.568705 3.556656 0.500001 +v -0.055616 4.966174 0.500001 +v -0.568646 3.556635 0.500001 +v -0.055616 4.966174 -0.499999 +v -0.568646 3.556635 -0.499999 +v -0.055674 4.966195 -0.499999 +v -0.568705 3.556656 -0.499999 +vt 0.000061 0.999939 +vt 0.000061 0.906311 +vt -0.000061 0.999939 +vt -0.000061 0.906311 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.062439 0.999939 +vt 0.062439 0.906311 +vt 0.062439 0.999939 +vt 0.062439 1.000061 +vt 0.000061 0.999939 +vt 0.000061 1.000061 +vt 0.124939 0.999939 +vt 0.124939 1.000061 +vt 0.062561 0.999939 +vt 0.062561 1.000061 +vt 0.062561 0.999939 +vt 0.062561 0.906311 +vt 0.124939 0.999939 +vt 0.124939 0.906311 +vt 0.000061 0.906311 +vt 0.062439 0.906311 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.3420 0.9397 0.0000 +vn -0.3421 -0.9397 0.0000 +vn -0.3420 -0.9397 0.0000 +vn -0.9397 0.3420 0.0000 +vn 0.9397 -0.3420 0.0000 +usemtl m_0 +s 1 +f 97/283/80 98/284/80 99/285/80 +f 98/284/80 100/286/80 99/285/80 +f 101/287/81 102/288/81 103/289/81 +f 102/288/81 104/290/81 103/289/81 +f 101/291/82 103/292/82 99/293/82 +f 103/292/82 97/294/82 99/293/82 +f 104/295/83 102/296/83 98/297/84 +f 102/296/83 100/298/84 98/297/84 +f 103/299/85 104/300/85 97/301/85 +f 104/300/85 98/302/85 97/301/85 +f 99/293/86 100/303/86 101/291/86 +f 100/303/86 102/304/86 101/291/86 +o cube.011 +v 0.096017 5.020963 0.007629 +v -0.454961 3.524132 -0.543349 +v 0.017615 5.078682 -0.070772 +v -0.533363 3.581851 -0.621750 +v -0.070773 5.078682 0.017616 +v -0.621751 3.581851 -0.533362 +v 0.007629 5.020963 0.096018 +v -0.543350 3.524132 -0.454961 +vt 0.000061 0.898376 +vt 0.000061 0.793030 +vt 0.007751 0.898376 +vt 0.007751 0.793030 +vt 0.015686 0.898376 +vt 0.015686 0.793030 +vt 0.023376 0.898376 +vt 0.023376 0.793030 +vt 0.015564 0.898499 +vt 0.015564 0.906189 +vt 0.007874 0.898499 +vt 0.007874 0.906189 +vt 0.023376 0.906189 +vt 0.023376 0.898499 +vt 0.015686 0.906189 +vt 0.015686 0.898499 +vt 0.023499 0.898376 +vt 0.023499 0.793030 +vt 0.031189 0.898376 +vt 0.031189 0.793030 +vt 0.007874 0.898376 +vt 0.007874 0.793030 +vt 0.015564 0.898376 +vt 0.015564 0.793030 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 -0.0000 0.7071 +vn 0.3265 0.8870 0.3265 +vn -0.3265 -0.8870 -0.3265 +vn 0.6272 -0.4617 0.6272 +vn -0.6272 0.4617 -0.6272 +usemtl m_0 +s 1 +f 105/305/87 106/306/87 107/307/87 +f 106/306/87 108/308/87 107/307/87 +f 109/309/88 110/310/88 111/311/88 +f 110/310/88 112/312/88 111/311/88 +f 109/313/89 111/314/89 107/315/89 +f 111/314/89 105/316/89 107/315/89 +f 112/317/90 110/318/90 106/319/90 +f 110/318/90 108/320/90 106/319/90 +f 111/321/91 112/322/91 105/323/91 +f 112/322/91 106/324/91 105/323/91 +f 107/325/92 108/326/92 109/327/92 +f 108/326/92 110/328/92 109/327/92 +o cube.012 +v -0.096017 5.020963 -0.007628 +v 0.454961 3.524132 0.543350 +v -0.017615 5.078682 0.070774 +v 0.533363 3.581851 0.621752 +v 0.070773 5.078682 -0.017615 +v 0.621751 3.581851 0.533363 +v -0.007629 5.020963 -0.096016 +v 0.543350 3.524132 0.454962 +vt 0.000061 0.898376 +vt 0.000061 0.793030 +vt 0.007751 0.898376 +vt 0.007751 0.793030 +vt 0.015686 0.898376 +vt 0.015686 0.793030 +vt 0.023376 0.898376 +vt 0.023376 0.793030 +vt 0.015564 0.898499 +vt 0.015564 0.906189 +vt 0.007874 0.898499 +vt 0.007874 0.906189 +vt 0.023376 0.906189 +vt 0.023376 0.898499 +vt 0.015686 0.906189 +vt 0.015686 0.898499 +vt 0.023499 0.898376 +vt 0.023499 0.793030 +vt 0.031189 0.898376 +vt 0.031189 0.793030 +vt 0.007874 0.898376 +vt 0.007874 0.793030 +vt 0.015564 0.898376 +vt 0.015564 0.793030 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn -0.3265 0.8870 -0.3265 +vn 0.3265 -0.8870 0.3265 +vn -0.6272 -0.4617 -0.6272 +vn 0.6272 0.4617 0.6272 +usemtl m_0 +s 1 +f 113/329/93 114/330/93 115/331/93 +f 114/330/93 116/332/93 115/331/93 +f 117/333/94 118/334/94 119/335/94 +f 118/334/94 120/336/94 119/335/94 +f 117/337/95 119/338/95 115/339/95 +f 119/338/95 113/340/95 115/339/95 +f 120/341/96 118/342/96 114/343/96 +f 118/342/96 116/344/96 114/343/96 +f 119/345/97 120/346/97 113/347/97 +f 120/346/97 114/348/97 113/347/97 +f 115/349/98 116/350/98 117/351/98 +f 116/350/98 118/352/98 117/351/98 +o cube.013 +v 0.007629 5.020963 -0.096016 +v -0.543350 3.524132 0.454962 +v -0.070773 5.078682 -0.017615 +v -0.621751 3.581851 0.533363 +v 0.017615 5.078682 0.070774 +v -0.533363 3.581851 0.621752 +v 0.096017 5.020963 -0.007628 +v -0.454961 3.524132 0.543350 +vt 0.000061 0.898376 +vt 0.000061 0.793030 +vt 0.007751 0.898376 +vt 0.007751 0.793030 +vt 0.015686 0.898376 +vt 0.015686 0.793030 +vt 0.023376 0.898376 +vt 0.023376 0.793030 +vt 0.015564 0.898499 +vt 0.015564 0.906189 +vt 0.007874 0.898499 +vt 0.007874 0.906189 +vt 0.023376 0.906189 +vt 0.023376 0.898499 +vt 0.015686 0.906189 +vt 0.015686 0.898499 +vt 0.023499 0.898376 +vt 0.023499 0.793030 +vt 0.031189 0.898376 +vt 0.031189 0.793030 +vt 0.007874 0.898376 +vt 0.007874 0.793030 +vt 0.015564 0.898376 +vt 0.015564 0.793030 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +vn 0.3265 0.8870 -0.3265 +vn -0.3265 -0.8870 0.3265 +vn 0.6272 -0.4617 -0.6272 +vn -0.6272 0.4617 0.6272 +usemtl m_0 +s 1 +f 121/353/99 122/354/99 123/355/99 +f 122/354/99 124/356/99 123/355/99 +f 125/357/100 126/358/100 127/359/100 +f 126/358/100 128/360/100 127/359/100 +f 125/361/101 127/362/101 123/363/101 +f 127/362/101 121/364/101 123/363/101 +f 128/365/102 126/366/102 122/367/102 +f 126/366/102 124/368/102 122/367/102 +f 127/369/103 128/370/103 121/371/103 +f 128/370/103 122/372/103 121/371/103 +f 123/373/104 124/374/104 125/375/104 +f 124/374/104 126/376/104 125/375/104 +o cube.014 +v -0.007629 5.020963 0.096018 +v 0.543350 3.524132 -0.454961 +v 0.070773 5.078682 0.017616 +v 0.621751 3.581851 -0.533362 +v -0.017615 5.078682 -0.070772 +v 0.533363 3.581851 -0.621750 +v -0.096017 5.020963 0.007629 +v 0.454961 3.524132 -0.543349 +vt 0.000061 0.898376 +vt 0.000061 0.793030 +vt 0.007751 0.898376 +vt 0.007751 0.793030 +vt 0.015686 0.898376 +vt 0.015686 0.793030 +vt 0.023376 0.898376 +vt 0.023376 0.793030 +vt 0.015564 0.898499 +vt 0.015564 0.906189 +vt 0.007874 0.898499 +vt 0.007874 0.906189 +vt 0.023376 0.906189 +vt 0.023376 0.898499 +vt 0.015686 0.906189 +vt 0.015686 0.898499 +vt 0.023499 0.898376 +vt 0.023499 0.793030 +vt 0.031189 0.898376 +vt 0.031189 0.793030 +vt 0.007874 0.898376 +vt 0.007874 0.793030 +vt 0.015564 0.898376 +vt 0.015564 0.793030 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn -0.3265 0.8870 0.3265 +vn 0.3265 -0.8870 -0.3265 +vn -0.6272 -0.4617 0.6272 +vn 0.6272 0.4617 -0.6272 +usemtl m_0 +s 1 +f 129/377/105 130/378/105 131/379/105 +f 130/378/105 132/380/105 131/379/105 +f 133/381/106 134/382/106 135/383/106 +f 134/382/106 136/384/106 135/383/106 +f 133/385/107 135/386/107 131/387/107 +f 135/386/107 129/388/107 131/387/107 +f 136/389/108 134/390/108 130/391/108 +f 134/390/108 132/392/108 130/391/108 +f 135/393/109 136/394/109 129/395/109 +f 136/394/109 130/396/109 129/395/109 +f 131/397/110 132/398/110 133/399/110 +f 132/398/110 134/400/110 133/399/110 +o cube.015 +v 0.125000 5.187500 0.125001 +v 0.125000 5.062500 0.125001 +v 0.125000 5.187500 -0.124999 +v 0.125000 5.062500 -0.124999 +v -0.125000 5.187500 -0.124999 +v -0.125000 5.062500 -0.124999 +v -0.125000 5.187500 0.125001 +v -0.125000 5.062500 0.125001 +vt 0.140686 0.886658 +vt 0.140686 0.878967 +vt 0.156189 0.886658 +vt 0.156189 0.878967 +vt 0.171936 0.886658 +vt 0.171936 0.878967 +vt 0.187439 0.886658 +vt 0.187439 0.878967 +vt 0.171814 0.886780 +vt 0.171814 0.902283 +vt 0.156311 0.886780 +vt 0.156311 0.902283 +vt 0.187439 0.902283 +vt 0.187439 0.886780 +vt 0.171936 0.902283 +vt 0.171936 0.886780 +vt 0.187561 0.886658 +vt 0.187561 0.878967 +vt 0.203064 0.886658 +vt 0.203064 0.878967 +vt 0.156311 0.886658 +vt 0.156311 0.878967 +vt 0.171814 0.886658 +vt 0.171814 0.878967 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 137/401/111 138/402/111 139/403/111 +f 138/402/111 140/404/111 139/403/111 +f 141/405/112 142/406/112 143/407/112 +f 142/406/112 144/408/112 143/407/112 +f 141/409/113 143/410/113 139/411/113 +f 143/410/113 137/412/113 139/411/113 +f 144/413/114 142/414/114 138/415/114 +f 142/414/114 140/416/114 138/415/114 +f 143/417/115 144/418/115 137/419/115 +f 144/418/115 138/420/115 137/419/115 +f 139/421/116 140/422/116 141/423/116 +f 140/422/116 142/424/116 141/423/116 +o cube.016 +v 0.101562 6.226562 0.101564 +v 0.101562 6.023438 0.101563 +v 0.101562 6.226562 -0.101561 +v 0.101562 6.023438 -0.101562 +v -0.101562 6.226562 -0.101561 +v -0.101562 6.023438 -0.101562 +v -0.101562 6.226562 0.101564 +v -0.101562 6.023438 0.101563 +vt 0.140686 0.984314 +vt 0.140686 0.968811 +vt 0.156189 0.984314 +vt 0.156189 0.968811 +vt 0.171936 0.984314 +vt 0.171936 0.968811 +vt 0.187439 0.984314 +vt 0.187439 0.968811 +vt 0.171814 0.984436 +vt 0.171814 0.999939 +vt 0.156311 0.984436 +vt 0.156311 0.999939 +vt 0.187439 0.999939 +vt 0.187439 0.984436 +vt 0.171936 0.999939 +vt 0.171936 0.984436 +vt 0.187561 0.984314 +vt 0.187561 0.968811 +vt 0.203064 0.984314 +vt 0.203064 0.968811 +vt 0.156311 0.984314 +vt 0.156311 0.968811 +vt 0.171814 0.984314 +vt 0.171814 0.968811 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 145/425/117 146/426/117 147/427/117 +f 146/426/117 148/428/117 147/427/117 +f 149/429/118 150/430/118 151/431/118 +f 150/430/118 152/432/118 151/431/118 +f 149/433/119 151/434/119 147/435/119 +f 151/434/119 145/436/119 147/435/119 +f 152/437/120 150/438/120 146/439/120 +f 150/438/120 148/440/120 146/439/120 +f 151/441/121 152/442/121 145/443/121 +f 152/442/121 146/444/121 145/443/121 +f 147/445/122 148/446/122 149/447/122 +f 148/446/122 150/448/122 149/447/122 +o cube.017 +v 0.062500 6.062500 0.062501 +v 0.062500 5.125000 0.062501 +v 0.062500 6.062500 -0.062499 +v 0.062500 5.125000 -0.062499 +v -0.062500 6.062500 -0.062499 +v -0.062500 5.125000 -0.062499 +v -0.062500 6.062500 0.062501 +v -0.062500 5.125000 0.062501 +vt 0.140686 0.960876 +vt 0.140686 0.902405 +vt 0.148376 0.960876 +vt 0.148376 0.902405 +vt 0.156311 0.960876 +vt 0.156311 0.902405 +vt 0.164001 0.960876 +vt 0.164001 0.902405 +vt 0.156189 0.960999 +vt 0.156189 0.968689 +vt 0.148499 0.960999 +vt 0.148499 0.968689 +vt 0.164001 0.968689 +vt 0.164001 0.960999 +vt 0.156311 0.968689 +vt 0.156311 0.960999 +vt 0.164124 0.960876 +vt 0.164124 0.902405 +vt 0.171814 0.960876 +vt 0.171814 0.902405 +vt 0.148499 0.960876 +vt 0.148499 0.902405 +vt 0.156189 0.960876 +vt 0.156189 0.902405 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 153/449/123 154/450/123 155/451/123 +f 154/450/123 156/452/123 155/451/123 +f 157/453/124 158/454/124 159/455/124 +f 158/454/124 160/456/124 159/455/124 +f 157/457/125 159/458/125 155/459/125 +f 159/458/125 153/460/125 155/459/125 +f 160/461/126 158/462/126 154/463/126 +f 158/462/126 156/464/126 154/463/126 +f 159/465/127 160/466/127 153/467/127 +f 160/466/127 154/468/127 153/467/127 +f 155/469/128 156/470/128 157/471/128 +f 156/470/128 158/472/128 157/471/128 +o cube.018 +v 0.187500 5.062500 0.187501 +v 0.187500 4.562500 0.187501 +v 0.187500 5.062500 -0.187499 +v 0.187500 4.562500 -0.187499 +v -0.187500 5.062500 -0.187499 +v -0.187500 4.562500 -0.187499 +v -0.187500 5.062500 0.187501 +v -0.187500 4.562500 0.187501 +vt 0.140686 0.855408 +vt 0.140686 0.824280 +vt 0.164001 0.855408 +vt 0.164001 0.824280 +vt 0.187561 0.855408 +vt 0.187561 0.824280 +vt 0.210876 0.855408 +vt 0.210876 0.824280 +vt 0.187439 0.855530 +vt 0.187439 0.878845 +vt 0.164124 0.855530 +vt 0.164124 0.878845 +vt 0.210876 0.878845 +vt 0.210876 0.855530 +vt 0.187561 0.878845 +vt 0.187561 0.855530 +vt 0.210999 0.855408 +vt 0.210999 0.824280 +vt 0.234314 0.855408 +vt 0.234314 0.824280 +vt 0.164124 0.855408 +vt 0.164124 0.824280 +vt 0.187439 0.855408 +vt 0.187439 0.824280 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 161/473/129 162/474/129 163/475/129 +f 162/474/129 164/476/129 163/475/129 +f 165/477/130 166/478/130 167/479/130 +f 166/478/130 168/480/130 167/479/130 +f 165/481/131 167/482/131 163/483/131 +f 167/482/131 161/484/131 163/483/131 +f 168/485/132 166/486/132 162/487/132 +f 166/486/132 164/488/132 162/487/132 +f 167/489/133 168/490/133 161/491/133 +f 168/490/133 162/492/133 161/491/133 +f 163/493/134 164/494/134 165/495/134 +f 164/494/134 166/496/134 165/495/134 +o cube.019 +v 0.625000 0.750000 0.625000 +v 0.625000 0.625000 0.625000 +v 0.625000 0.750000 -0.625000 +v 0.625000 0.625000 -0.625000 +v -0.625000 0.750000 -0.625000 +v -0.625000 0.625000 -0.625000 +v -0.625000 0.750000 0.625000 +v -0.625000 0.625000 0.625000 +vt 0.000061 0.589783 +vt 0.000061 0.582092 +vt 0.078064 0.589783 +vt 0.078064 0.582092 +vt 0.156311 0.589783 +vt 0.156311 0.582092 +vt 0.234314 0.589783 +vt 0.234314 0.582092 +vt 0.156189 0.589905 +vt 0.156189 0.667908 +vt 0.078186 0.589905 +vt 0.078186 0.667908 +vt 0.234314 0.667908 +vt 0.234314 0.589905 +vt 0.156311 0.667908 +vt 0.156311 0.589905 +vt 0.234436 0.589783 +vt 0.234436 0.582092 +vt 0.312439 0.589783 +vt 0.312439 0.582092 +vt 0.078186 0.589783 +vt 0.078186 0.582092 +vt 0.156189 0.589783 +vt 0.156189 0.582092 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 169/497/135 170/498/135 171/499/135 +f 170/498/135 172/500/135 171/499/135 +f 173/501/136 174/502/136 175/503/136 +f 174/502/136 176/504/136 175/503/136 +f 173/505/137 175/506/137 171/507/137 +f 175/506/137 169/508/137 171/507/137 +f 176/509/138 174/510/138 170/511/138 +f 174/510/138 172/512/138 170/511/138 +f 175/513/139 176/514/139 169/515/139 +f 176/514/139 170/516/139 169/515/139 +f 171/517/140 172/518/140 173/519/140 +f 172/518/140 174/520/140 173/519/140 +o cube.020 +v 0.625000 0.937500 0.625000 +v 0.625000 0.812500 0.625000 +v 0.625000 0.937500 -0.625000 +v 0.625000 0.812500 -0.625000 +v -0.625000 0.937500 -0.625000 +v -0.625000 0.812500 -0.625000 +v -0.625000 0.937500 0.625000 +v -0.625000 0.812500 0.625000 +vt 0.000061 0.589783 +vt 0.000061 0.582092 +vt 0.078064 0.589783 +vt 0.078064 0.582092 +vt 0.156311 0.589783 +vt 0.156311 0.582092 +vt 0.234314 0.589783 +vt 0.234314 0.582092 +vt 0.156189 0.589905 +vt 0.156189 0.667908 +vt 0.078186 0.589905 +vt 0.078186 0.667908 +vt 0.234314 0.667908 +vt 0.234314 0.589905 +vt 0.156311 0.667908 +vt 0.156311 0.589905 +vt 0.234436 0.589783 +vt 0.234436 0.582092 +vt 0.312439 0.589783 +vt 0.312439 0.582092 +vt 0.078186 0.589783 +vt 0.078186 0.582092 +vt 0.156189 0.589783 +vt 0.156189 0.582092 +vn 1.0000 0.0000 0.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 177/521/141 178/522/141 179/523/141 +f 178/522/141 180/524/141 179/523/141 +f 181/525/142 182/526/142 183/527/142 +f 182/526/142 184/528/142 183/527/142 +f 181/529/143 183/530/143 179/531/143 +f 183/530/143 177/532/143 179/531/143 +f 184/533/144 182/534/144 178/535/144 +f 182/534/144 180/536/144 178/535/144 +f 183/537/145 184/538/145 177/539/145 +f 184/538/145 178/540/145 177/539/145 +f 179/541/146 180/542/146 181/543/146 +f 180/542/146 182/544/146 181/543/146 +o cube.021 +v 0.375000 2.625000 -0.531250 +v 0.375000 1.875000 -0.531250 +v 0.375000 2.625000 -0.593750 +v 0.375000 1.875000 -0.593750 +v -0.375000 2.625000 -0.593750 +v -0.375000 1.875000 -0.593750 +v -0.375000 2.625000 -0.531250 +v -0.375000 1.875000 -0.531250 +vt 0.898499 0.652283 +vt 0.898499 0.605530 +vt 0.902283 0.652283 +vt 0.902283 0.605530 +vt 0.949280 0.652283 +vt 0.949280 0.605530 +vt 0.953064 0.652283 +vt 0.953064 0.605530 +vt 0.949158 0.652405 +vt 0.949158 0.656189 +vt 0.902405 0.652405 +vt 0.902405 0.656189 +vt 0.996033 0.656189 +vt 0.996033 0.652405 +vt 0.949280 0.656189 +vt 0.949280 0.652405 +vt 0.953186 0.652283 +vt 0.953186 0.605530 +vt 0.999939 0.652283 +vt 0.999939 0.605530 +vt 0.902405 0.652283 +vt 0.902405 0.605530 +vt 0.949158 0.652283 +vt 0.949158 0.605530 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 185/545/147 186/546/147 187/547/147 +f 186/546/147 188/548/147 187/547/147 +f 189/549/148 190/550/148 191/551/148 +f 190/550/148 192/552/148 191/551/148 +f 189/553/149 191/554/149 187/555/149 +f 191/554/149 185/556/149 187/555/149 +f 192/557/150 190/558/150 186/559/150 +f 190/558/150 188/560/150 186/559/150 +f 191/561/151 192/562/151 185/563/151 +f 192/562/151 186/564/151 185/563/151 +f 187/565/152 188/566/152 189/567/152 +f 188/566/152 190/568/152 189/567/152 +o cube.022 +v -1.273420 1.043750 -1.034772 +v -1.273420 0.768750 -1.034772 +v -1.034772 1.043750 -0.796123 +v -1.034772 0.768750 -0.796123 +v -0.796123 1.043750 -1.034772 +v -0.796123 0.768750 -1.034772 +v -1.034772 1.043750 -1.273420 +v -1.034772 0.768750 -1.273420 +vt 0.078186 0.421814 +vt 0.078186 0.402405 +vt 0.101501 0.421814 +vt 0.101501 0.402405 +vt 0.125061 0.421814 +vt 0.125061 0.402405 +vt 0.148376 0.421814 +vt 0.148376 0.402405 +vt 0.124939 0.421936 +vt 0.124939 0.445251 +vt 0.101624 0.421936 +vt 0.101624 0.445251 +vt 0.148376 0.445251 +vt 0.148376 0.421936 +vt 0.125061 0.445251 +vt 0.125061 0.421936 +vt 0.148499 0.421814 +vt 0.148499 0.402405 +vt 0.171814 0.421814 +vt 0.171814 0.402405 +vt 0.101624 0.421814 +vt 0.101624 0.402405 +vt 0.124939 0.421814 +vt 0.124939 0.402405 +vn -0.7071 0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +usemtl m_0 +s 1 +f 193/569/153 194/570/153 195/571/153 +f 194/570/153 196/572/153 195/571/153 +f 197/573/154 198/574/154 199/575/154 +f 198/574/154 200/576/154 199/575/154 +f 197/577/155 199/578/155 195/579/155 +f 199/578/155 193/580/155 195/579/155 +f 200/581/156 198/582/156 194/583/156 +f 198/582/156 196/584/156 194/583/156 +f 199/585/157 200/586/157 193/587/157 +f 200/586/157 194/588/157 193/587/157 +f 195/589/158 196/590/158 197/591/158 +f 196/590/158 198/592/158 197/591/158 +o cube.023 +v -1.034772 1.043750 1.273420 +v -1.034772 0.768750 1.273420 +v -0.796123 1.043750 1.034772 +v -0.796123 0.768750 1.034772 +v -1.034772 1.043750 0.796123 +v -1.034772 0.768750 0.796123 +v -1.273420 1.043750 1.034772 +v -1.273420 0.768750 1.034772 +vt 0.078186 0.421814 +vt 0.078186 0.402405 +vt 0.101501 0.421814 +vt 0.101501 0.402405 +vt 0.125061 0.421814 +vt 0.125061 0.402405 +vt 0.148376 0.421814 +vt 0.148376 0.402405 +vt 0.124939 0.421936 +vt 0.124939 0.445251 +vt 0.101624 0.421936 +vt 0.101624 0.445251 +vt 0.148376 0.445251 +vt 0.148376 0.421936 +vt 0.125061 0.445251 +vt 0.125061 0.421936 +vt 0.148499 0.421814 +vt 0.148499 0.402405 +vt 0.171814 0.421814 +vt 0.171814 0.402405 +vt 0.101624 0.421814 +vt 0.101624 0.402405 +vt 0.124939 0.421814 +vt 0.124939 0.402405 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.7071 0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +usemtl m_0 +s 1 +f 201/593/159 202/594/159 203/595/159 +f 202/594/159 204/596/159 203/595/159 +f 205/597/160 206/598/160 207/599/160 +f 206/598/160 208/600/160 207/599/160 +f 205/601/161 207/602/161 203/603/161 +f 207/602/161 201/604/161 203/603/161 +f 208/605/162 206/606/162 202/607/162 +f 206/606/162 204/608/162 202/607/162 +f 207/609/163 208/610/163 201/611/163 +f 208/610/163 202/612/163 201/611/163 +f 203/613/164 204/614/164 205/615/164 +f 204/614/164 206/616/164 205/615/164 +o cube.024 +v 1.034772 1.043750 -1.273420 +v 1.034772 0.768750 -1.273420 +v 0.796123 1.043750 -1.034772 +v 0.796123 0.768750 -1.034772 +v 1.034772 1.043750 -0.796123 +v 1.034772 0.768750 -0.796123 +v 1.273420 1.043750 -1.034772 +v 1.273420 0.768750 -1.034772 +vt 0.078186 0.421814 +vt 0.078186 0.402405 +vt 0.101501 0.421814 +vt 0.101501 0.402405 +vt 0.125061 0.421814 +vt 0.125061 0.402405 +vt 0.148376 0.421814 +vt 0.148376 0.402405 +vt 0.124939 0.421936 +vt 0.124939 0.445251 +vt 0.101624 0.421936 +vt 0.101624 0.445251 +vt 0.148376 0.445251 +vt 0.148376 0.421936 +vt 0.125061 0.445251 +vt 0.125061 0.421936 +vt 0.148499 0.421814 +vt 0.148499 0.402405 +vt 0.171814 0.421814 +vt 0.171814 0.402405 +vt 0.101624 0.421814 +vt 0.101624 0.402405 +vt 0.124939 0.421814 +vt 0.124939 0.402405 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 0.7071 +usemtl m_0 +s 1 +f 209/617/165 210/618/165 211/619/165 +f 210/618/165 212/620/165 211/619/165 +f 213/621/166 214/622/166 215/623/166 +f 214/622/166 216/624/166 215/623/166 +f 213/625/167 215/626/167 211/627/167 +f 215/626/167 209/628/167 211/627/167 +f 216/629/168 214/630/168 210/631/168 +f 214/630/168 212/632/168 210/631/168 +f 215/633/169 216/634/169 209/635/169 +f 216/634/169 210/636/169 209/635/169 +f 211/637/170 212/638/170 213/639/170 +f 212/638/170 214/640/170 213/639/170 +o cube.025 +v 1.273420 1.043750 1.034772 +v 1.273420 0.768750 1.034772 +v 1.034772 1.043750 0.796123 +v 1.034772 0.768750 0.796123 +v 0.796123 1.043750 1.034772 +v 0.796123 0.768750 1.034772 +v 1.034772 1.043750 1.273420 +v 1.034772 0.768750 1.273420 +vt 0.078186 0.421814 +vt 0.078186 0.402405 +vt 0.101501 0.421814 +vt 0.101501 0.402405 +vt 0.125061 0.421814 +vt 0.125061 0.402405 +vt 0.148376 0.421814 +vt 0.148376 0.402405 +vt 0.124939 0.421936 +vt 0.124939 0.445251 +vt 0.101624 0.421936 +vt 0.101624 0.445251 +vt 0.148376 0.445251 +vt 0.148376 0.421936 +vt 0.125061 0.445251 +vt 0.125061 0.421936 +vt 0.148499 0.421814 +vt 0.148499 0.402405 +vt 0.171814 0.421814 +vt 0.171814 0.402405 +vt 0.101624 0.421814 +vt 0.101624 0.402405 +vt 0.124939 0.421814 +vt 0.124939 0.402405 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +usemtl m_0 +s 1 +f 217/641/171 218/642/171 219/643/171 +f 218/642/171 220/644/171 219/643/171 +f 221/645/172 222/646/172 223/647/172 +f 222/646/172 224/648/172 223/647/172 +f 221/649/173 223/650/173 219/651/173 +f 223/650/173 217/652/173 219/651/173 +f 224/653/174 222/654/174 218/655/174 +f 222/654/174 220/656/174 218/655/174 +f 223/657/175 224/658/175 217/659/175 +f 224/658/175 218/660/175 217/659/175 +f 219/661/176 220/662/176 221/663/176 +f 220/662/176 222/664/176 221/663/176 +o cube.026 +v 0.625000 3.625000 0.625001 +v 0.625000 3.500000 0.625001 +v 0.625000 3.625000 -0.624999 +v 0.625000 3.500000 -0.624999 +v -0.625000 3.625000 -0.624999 +v -0.625000 3.500000 -0.624999 +v -0.625000 3.625000 0.625001 +v -0.625000 3.500000 0.625001 +vt 0.000061 0.589783 +vt 0.000061 0.582092 +vt 0.078064 0.589783 +vt 0.078064 0.582092 +vt 0.156311 0.589783 +vt 0.156311 0.582092 +vt 0.234314 0.589783 +vt 0.234314 0.582092 +vt 0.156189 0.589905 +vt 0.156189 0.667908 +vt 0.078186 0.589905 +vt 0.078186 0.667908 +vt 0.234314 0.667908 +vt 0.234314 0.589905 +vt 0.156311 0.667908 +vt 0.156311 0.589905 +vt 0.234436 0.589783 +vt 0.234436 0.582092 +vt 0.312439 0.589783 +vt 0.312439 0.582092 +vt 0.078186 0.589783 +vt 0.078186 0.582092 +vt 0.156189 0.589783 +vt 0.156189 0.582092 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 225/665/177 226/666/177 227/667/177 +f 226/666/177 228/668/177 227/667/177 +f 229/669/178 230/670/178 231/671/178 +f 230/670/178 232/672/178 231/671/178 +f 229/673/179 231/674/179 227/675/179 +f 231/674/179 225/676/179 227/675/179 +f 232/677/180 230/678/180 226/679/180 +f 230/678/180 228/680/180 226/679/180 +f 231/681/181 232/682/181 225/683/181 +f 232/682/181 226/684/181 225/683/181 +f 227/685/182 228/686/182 229/687/182 +f 228/686/182 230/688/182 229/687/182 +o cube.027 +v 0.062500 1.250000 -0.750000 +v 0.062500 1.062500 -0.750000 +v -0.062500 1.250000 -0.750000 +v -0.062500 1.062500 -0.750000 +v -0.062500 1.250000 -0.562500 +v -0.062500 1.062500 -0.562500 +v 0.062500 1.250000 -0.562500 +v 0.062500 1.062500 -0.562500 +vt 0.000061 0.331970 +vt 0.000061 0.320374 +vt 0.007751 0.331970 +vt 0.007751 0.320374 +vt 0.019592 0.331970 +vt 0.019592 0.320374 +vt 0.027283 0.331970 +vt 0.027283 0.320374 +vt 0.019470 0.332092 +vt 0.019470 0.339783 +vt 0.007874 0.332092 +vt 0.007874 0.339783 +vt 0.031189 0.339783 +vt 0.031189 0.332092 +vt 0.019592 0.339783 +vt 0.019592 0.332092 +vt 0.027405 0.331970 +vt 0.027405 0.320374 +vt 0.039001 0.331970 +vt 0.039001 0.320374 +vt 0.007874 0.331970 +vt 0.007874 0.320374 +vt 0.019470 0.331970 +vt 0.019470 0.320374 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +usemtl m_0 +s 1 +f 233/689/183 234/690/183 235/691/183 +f 234/690/183 236/692/183 235/691/183 +f 237/693/184 238/694/184 239/695/184 +f 238/694/184 240/696/184 239/695/184 +f 237/697/185 239/698/185 235/699/185 +f 239/698/185 233/700/185 235/699/185 +f 240/701/186 238/702/186 234/703/186 +f 238/702/186 236/704/186 234/703/186 +f 239/705/187 240/706/187 233/707/187 +f 240/706/187 234/708/187 233/707/187 +f 235/709/188 236/710/188 237/711/188 +f 236/710/188 238/712/188 237/711/188 +o cube.028 +v 0.187500 1.062500 -0.812500 +v 0.187500 0.375000 -0.812500 +v -0.187500 1.062500 -0.812500 +v -0.187500 0.375000 -0.812500 +v -0.187500 1.062500 -0.562500 +v -0.187500 0.375000 -0.562500 +v 0.187500 1.062500 -0.562500 +v 0.187500 0.375000 -0.562500 +vt 0.000061 0.382751 +vt 0.000061 0.339905 +vt 0.023376 0.382751 +vt 0.023376 0.339905 +vt 0.039124 0.382751 +vt 0.039124 0.339905 +vt 0.062439 0.382751 +vt 0.062439 0.339905 +vt 0.039001 0.382874 +vt 0.039001 0.406189 +vt 0.023499 0.382874 +vt 0.023499 0.406189 +vt 0.054626 0.406189 +vt 0.054626 0.382874 +vt 0.039124 0.406189 +vt 0.039124 0.382874 +vt 0.062561 0.382751 +vt 0.062561 0.339905 +vt 0.078064 0.382751 +vt 0.078064 0.339905 +vt 0.023499 0.382751 +vt 0.023499 0.339905 +vt 0.039001 0.382751 +vt 0.039001 0.339905 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +usemtl m_0 +s 1 +f 241/713/189 242/714/189 243/715/189 +f 242/714/189 244/716/189 243/715/189 +f 245/717/190 246/718/190 247/719/190 +f 246/718/190 248/720/190 247/719/190 +f 245/721/191 247/722/191 243/723/191 +f 247/722/191 241/724/191 243/723/191 +f 248/725/192 246/726/192 242/727/192 +f 246/726/192 244/728/192 242/727/192 +f 247/729/193 248/730/193 241/731/193 +f 248/730/193 242/732/193 241/731/193 +f 243/733/194 244/734/194 245/735/194 +f 244/734/194 246/736/194 245/735/194 +o cube.029 +v -0.812500 1.062500 -0.187500 +v -0.812500 0.375000 -0.187500 +v -0.812500 1.062500 0.187500 +v -0.812500 0.375000 0.187500 +v -0.562500 1.062500 0.187500 +v -0.562500 0.375000 0.187500 +v -0.562500 1.062500 -0.187500 +v -0.562500 0.375000 -0.187500 +vt 0.000061 0.382751 +vt 0.000061 0.339905 +vt 0.023376 0.382751 +vt 0.023376 0.339905 +vt 0.039124 0.382751 +vt 0.039124 0.339905 +vt 0.062439 0.382751 +vt 0.062439 0.339905 +vt 0.039001 0.382874 +vt 0.039001 0.406189 +vt 0.023499 0.382874 +vt 0.023499 0.406189 +vt 0.054626 0.406189 +vt 0.054626 0.382874 +vt 0.039124 0.406189 +vt 0.039124 0.382874 +vt 0.062561 0.382751 +vt 0.062561 0.339905 +vt 0.078064 0.382751 +vt 0.078064 0.339905 +vt 0.023499 0.382751 +vt 0.023499 0.339905 +vt 0.039001 0.382751 +vt 0.039001 0.339905 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +usemtl m_0 +s 1 +f 249/737/195 250/738/195 251/739/195 +f 250/738/195 252/740/195 251/739/195 +f 253/741/196 254/742/196 255/743/196 +f 254/742/196 256/744/196 255/743/196 +f 253/745/197 255/746/197 251/747/197 +f 255/746/197 249/748/197 251/747/197 +f 256/749/198 254/750/198 250/751/198 +f 254/750/198 252/752/198 250/751/198 +f 255/753/199 256/754/199 249/755/199 +f 256/754/199 250/756/199 249/755/199 +f 251/757/200 252/758/200 253/759/200 +f 252/758/200 254/760/200 253/759/200 +o cube.030 +v -0.750000 1.250000 -0.062500 +v -0.750000 1.062500 -0.062500 +v -0.750000 1.250000 0.062500 +v -0.750000 1.062500 0.062500 +v -0.562500 1.250000 0.062500 +v -0.562500 1.062500 0.062500 +v -0.562500 1.250000 -0.062500 +v -0.562500 1.062500 -0.062500 +vt 0.000061 0.331970 +vt 0.000061 0.320374 +vt 0.007751 0.331970 +vt 0.007751 0.320374 +vt 0.019592 0.331970 +vt 0.019592 0.320374 +vt 0.027283 0.331970 +vt 0.027283 0.320374 +vt 0.019470 0.332092 +vt 0.019470 0.339783 +vt 0.007874 0.332092 +vt 0.007874 0.339783 +vt 0.031189 0.339783 +vt 0.031189 0.332092 +vt 0.019592 0.339783 +vt 0.019592 0.332092 +vt 0.027405 0.331970 +vt 0.027405 0.320374 +vt 0.039001 0.331970 +vt 0.039001 0.320374 +vt 0.007874 0.331970 +vt 0.007874 0.320374 +vt 0.019470 0.331970 +vt 0.019470 0.320374 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +usemtl m_0 +s 1 +f 257/761/201 258/762/201 259/763/201 +f 258/762/201 260/764/201 259/763/201 +f 261/765/202 262/766/202 263/767/202 +f 262/766/202 264/768/202 263/767/202 +f 261/769/203 263/770/203 259/771/203 +f 263/770/203 257/772/203 259/771/203 +f 264/773/204 262/774/204 258/775/204 +f 262/774/204 260/776/204 258/775/204 +f 263/777/205 264/778/205 257/779/205 +f 264/778/205 258/780/205 257/779/205 +f 259/781/206 260/782/206 261/783/206 +f 260/782/206 262/784/206 261/783/206 +o cube.031 +v -0.062500 1.250000 0.750000 +v -0.062500 1.062500 0.750000 +v 0.062500 1.250000 0.750000 +v 0.062500 1.062500 0.750000 +v 0.062500 1.250000 0.562500 +v 0.062500 1.062500 0.562500 +v -0.062500 1.250000 0.562500 +v -0.062500 1.062500 0.562500 +vt 0.000061 0.331970 +vt 0.000061 0.320374 +vt 0.007751 0.331970 +vt 0.007751 0.320374 +vt 0.019592 0.331970 +vt 0.019592 0.320374 +vt 0.027283 0.331970 +vt 0.027283 0.320374 +vt 0.019470 0.332092 +vt 0.019470 0.339783 +vt 0.007874 0.332092 +vt 0.007874 0.339783 +vt 0.031189 0.339783 +vt 0.031189 0.332092 +vt 0.019592 0.339783 +vt 0.019592 0.332092 +vt 0.027405 0.331970 +vt 0.027405 0.320374 +vt 0.039001 0.331970 +vt 0.039001 0.320374 +vt 0.007874 0.331970 +vt 0.007874 0.320374 +vt 0.019470 0.331970 +vt 0.019470 0.320374 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +usemtl m_0 +s 1 +f 265/785/207 266/786/207 267/787/207 +f 266/786/207 268/788/207 267/787/207 +f 269/789/208 270/790/208 271/791/208 +f 270/790/208 272/792/208 271/791/208 +f 269/793/209 271/794/209 267/795/209 +f 271/794/209 265/796/209 267/795/209 +f 272/797/210 270/798/210 266/799/210 +f 270/798/210 268/800/210 266/799/210 +f 271/801/211 272/802/211 265/803/211 +f 272/802/211 266/804/211 265/803/211 +f 267/805/212 268/806/212 269/807/212 +f 268/806/212 270/808/212 269/807/212 +o cube.032 +v -0.187500 1.062500 0.812500 +v -0.187500 0.375000 0.812500 +v 0.187500 1.062500 0.812500 +v 0.187500 0.375000 0.812500 +v 0.187500 1.062500 0.562500 +v 0.187500 0.375000 0.562500 +v -0.187500 1.062500 0.562500 +v -0.187500 0.375000 0.562500 +vt 0.000061 0.382751 +vt 0.000061 0.339905 +vt 0.023376 0.382751 +vt 0.023376 0.339905 +vt 0.039124 0.382751 +vt 0.039124 0.339905 +vt 0.062439 0.382751 +vt 0.062439 0.339905 +vt 0.039001 0.382874 +vt 0.039001 0.406189 +vt 0.023499 0.382874 +vt 0.023499 0.406189 +vt 0.054626 0.406189 +vt 0.054626 0.382874 +vt 0.039124 0.406189 +vt 0.039124 0.382874 +vt 0.062561 0.382751 +vt 0.062561 0.339905 +vt 0.078064 0.382751 +vt 0.078064 0.339905 +vt 0.023499 0.382751 +vt 0.023499 0.339905 +vt 0.039001 0.382751 +vt 0.039001 0.339905 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +usemtl m_0 +s 1 +f 273/809/213 274/810/213 275/811/213 +f 274/810/213 276/812/213 275/811/213 +f 277/813/214 278/814/214 279/815/214 +f 278/814/214 280/816/214 279/815/214 +f 277/817/215 279/818/215 275/819/215 +f 279/818/215 273/820/215 275/819/215 +f 280/821/216 278/822/216 274/823/216 +f 278/822/216 276/824/216 274/823/216 +f 279/825/217 280/826/217 273/827/217 +f 280/826/217 274/828/217 273/827/217 +f 275/829/218 276/830/218 277/831/218 +f 276/830/218 278/832/218 277/831/218 +o cube.033 +v 0.812500 1.062500 0.187500 +v 0.812500 0.375000 0.187500 +v 0.812500 1.062500 -0.187500 +v 0.812500 0.375000 -0.187500 +v 0.562500 1.062500 -0.187500 +v 0.562500 0.375000 -0.187500 +v 0.562500 1.062500 0.187500 +v 0.562500 0.375000 0.187500 +vt 0.000061 0.382751 +vt 0.000061 0.339905 +vt 0.023376 0.382751 +vt 0.023376 0.339905 +vt 0.039124 0.382751 +vt 0.039124 0.339905 +vt 0.062439 0.382751 +vt 0.062439 0.339905 +vt 0.039001 0.382874 +vt 0.039001 0.406189 +vt 0.023499 0.382874 +vt 0.023499 0.406189 +vt 0.054626 0.406189 +vt 0.054626 0.382874 +vt 0.039124 0.406189 +vt 0.039124 0.382874 +vt 0.062561 0.382751 +vt 0.062561 0.339905 +vt 0.078064 0.382751 +vt 0.078064 0.339905 +vt 0.023499 0.382751 +vt 0.023499 0.339905 +vt 0.039001 0.382751 +vt 0.039001 0.339905 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 281/833/219 282/834/219 283/835/219 +f 282/834/219 284/836/219 283/835/219 +f 285/837/220 286/838/220 287/839/220 +f 286/838/220 288/840/220 287/839/220 +f 285/841/221 287/842/221 283/843/221 +f 287/842/221 281/844/221 283/843/221 +f 288/845/222 286/846/222 282/847/222 +f 286/846/222 284/848/222 282/847/222 +f 287/849/223 288/850/223 281/851/223 +f 288/850/223 282/852/223 281/851/223 +f 283/853/224 284/854/224 285/855/224 +f 284/854/224 286/856/224 285/855/224 +o cube.034 +v 0.750000 1.250000 0.062500 +v 0.750000 1.062500 0.062500 +v 0.750000 1.250000 -0.062500 +v 0.750000 1.062500 -0.062500 +v 0.562500 1.250000 -0.062500 +v 0.562500 1.062500 -0.062500 +v 0.562500 1.250000 0.062500 +v 0.562500 1.062500 0.062500 +vt 0.000061 0.331970 +vt 0.000061 0.320374 +vt 0.007751 0.331970 +vt 0.007751 0.320374 +vt 0.019592 0.331970 +vt 0.019592 0.320374 +vt 0.027283 0.331970 +vt 0.027283 0.320374 +vt 0.019470 0.332092 +vt 0.019470 0.339783 +vt 0.007874 0.332092 +vt 0.007874 0.339783 +vt 0.031189 0.339783 +vt 0.031189 0.332092 +vt 0.019592 0.339783 +vt 0.019592 0.332092 +vt 0.027405 0.331970 +vt 0.027405 0.320374 +vt 0.039001 0.331970 +vt 0.039001 0.320374 +vt 0.007874 0.331970 +vt 0.007874 0.320374 +vt 0.019470 0.331970 +vt 0.019470 0.320374 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 289/857/225 290/858/225 291/859/225 +f 290/858/225 292/860/225 291/859/225 +f 293/861/226 294/862/226 295/863/226 +f 294/862/226 296/864/226 295/863/226 +f 293/865/227 295/866/227 291/867/227 +f 295/866/227 289/868/227 291/867/227 +f 296/869/228 294/870/228 290/871/228 +f 294/870/228 292/872/228 290/871/228 +f 295/873/229 296/874/229 289/875/229 +f 296/874/229 290/876/229 289/875/229 +f 291/877/230 292/878/230 293/879/230 +f 292/878/230 294/880/230 293/879/230 +o cube.035 +v 0.625000 3.375000 0.625001 +v 0.625000 3.250000 0.625001 +v 0.625000 3.375000 -0.624999 +v 0.625000 3.250000 -0.624999 +v -0.625000 3.375000 -0.624999 +v -0.625000 3.250000 -0.624999 +v -0.625000 3.375000 0.625001 +v -0.625000 3.250000 0.625001 +vt 0.000061 0.589783 +vt 0.000061 0.582092 +vt 0.078064 0.589783 +vt 0.078064 0.582092 +vt 0.156311 0.589783 +vt 0.156311 0.582092 +vt 0.234314 0.589783 +vt 0.234314 0.582092 +vt 0.156189 0.589905 +vt 0.156189 0.667908 +vt 0.078186 0.589905 +vt 0.078186 0.667908 +vt 0.234314 0.667908 +vt 0.234314 0.589905 +vt 0.156311 0.667908 +vt 0.156311 0.589905 +vt 0.234436 0.589783 +vt 0.234436 0.582092 +vt 0.312439 0.589783 +vt 0.312439 0.582092 +vt 0.078186 0.589783 +vt 0.078186 0.582092 +vt 0.156189 0.589783 +vt 0.156189 0.582092 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 297/881/231 298/882/231 299/883/231 +f 298/882/231 300/884/231 299/883/231 +f 301/885/232 302/886/232 303/887/232 +f 302/886/232 304/888/232 303/887/232 +f 301/889/233 303/890/233 299/891/233 +f 303/890/233 297/892/233 299/891/233 +f 304/893/234 302/894/234 298/895/234 +f 302/894/234 300/896/234 298/895/234 +f 303/897/235 304/898/235 297/899/235 +f 304/898/235 298/900/235 297/899/235 +f 299/901/236 300/902/236 301/903/236 +f 300/902/236 302/904/236 301/903/236 +o cube.036 +v 0.625000 2.687500 0.625000 +v 0.625000 2.562500 0.625000 +v 0.625000 2.687500 -0.625000 +v 0.625000 2.562500 -0.625000 +v -0.625000 2.687500 -0.625000 +v -0.625000 2.562500 -0.625000 +v -0.625000 2.687500 0.625000 +v -0.625000 2.562500 0.625000 +vt 0.000061 0.589783 +vt 0.000061 0.582092 +vt 0.078064 0.589783 +vt 0.078064 0.582092 +vt 0.156311 0.589783 +vt 0.156311 0.582092 +vt 0.234314 0.589783 +vt 0.234314 0.582092 +vt 0.156189 0.589905 +vt 0.156189 0.667908 +vt 0.078186 0.589905 +vt 0.078186 0.667908 +vt 0.234314 0.667908 +vt 0.234314 0.589905 +vt 0.156311 0.667908 +vt 0.156311 0.589905 +vt 0.234436 0.589783 +vt 0.234436 0.582092 +vt 0.312439 0.589783 +vt 0.312439 0.582092 +vt 0.078186 0.589783 +vt 0.078186 0.582092 +vt 0.156189 0.589783 +vt 0.156189 0.582092 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 305/905/237 306/906/237 307/907/237 +f 306/906/237 308/908/237 307/907/237 +f 309/909/238 310/910/238 311/911/238 +f 310/910/238 312/912/238 311/911/238 +f 309/913/239 311/914/239 307/915/239 +f 311/914/239 305/916/239 307/915/239 +f 312/917/240 310/918/240 306/919/240 +f 310/918/240 308/920/240 306/919/240 +f 311/921/241 312/922/241 305/923/241 +f 312/922/241 306/924/241 305/923/241 +f 307/925/242 308/926/242 309/927/242 +f 308/926/242 310/928/242 309/927/242 +o cube.037 +v 0.625000 1.937500 0.625000 +v 0.625000 1.812500 0.625000 +v 0.625000 1.937500 -0.625000 +v 0.625000 1.812500 -0.625000 +v -0.625000 1.937500 -0.625000 +v -0.625000 1.812500 -0.625000 +v -0.625000 1.937500 0.625000 +v -0.625000 1.812500 0.625000 +vt 0.000061 0.589783 +vt 0.000061 0.582092 +vt 0.078064 0.589783 +vt 0.078064 0.582092 +vt 0.156311 0.589783 +vt 0.156311 0.582092 +vt 0.234314 0.589783 +vt 0.234314 0.582092 +vt 0.156189 0.589905 +vt 0.156189 0.667908 +vt 0.078186 0.589905 +vt 0.078186 0.667908 +vt 0.234314 0.667908 +vt 0.234314 0.589905 +vt 0.156311 0.667908 +vt 0.156311 0.589905 +vt 0.234436 0.589783 +vt 0.234436 0.582092 +vt 0.312439 0.589783 +vt 0.312439 0.582092 +vt 0.078186 0.589783 +vt 0.078186 0.582092 +vt 0.156189 0.589783 +vt 0.156189 0.582092 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 313/929/243 314/930/243 315/931/243 +f 314/930/243 316/932/243 315/931/243 +f 317/933/244 318/934/244 319/935/244 +f 318/934/244 320/936/244 319/935/244 +f 317/937/245 319/938/245 315/939/245 +f 319/938/245 313/940/245 315/939/245 +f 320/941/246 318/942/246 314/943/246 +f 318/942/246 316/944/246 314/943/246 +f 319/945/247 320/946/247 313/947/247 +f 320/946/247 314/948/247 313/947/247 +f 315/949/248 316/950/248 317/951/248 +f 316/950/248 318/952/248 317/951/248 +o cube.038 +v -0.531250 2.625000 0.250000 +v -0.531250 1.875000 0.250000 +v -0.593750 2.625000 0.250000 +v -0.593750 1.875000 0.250000 +v -0.593750 2.625000 0.375000 +v -0.593750 1.875000 0.375000 +v -0.531250 2.625000 0.375000 +v -0.531250 1.875000 0.375000 +vt 0.875061 0.652283 +vt 0.875061 0.605530 +vt 0.878845 0.652283 +vt 0.878845 0.605530 +vt 0.886780 0.652283 +vt 0.886780 0.605530 +vt 0.890564 0.652283 +vt 0.890564 0.605530 +vt 0.886658 0.652405 +vt 0.886658 0.656189 +vt 0.878967 0.652405 +vt 0.878967 0.656189 +vt 0.894470 0.656189 +vt 0.894470 0.652405 +vt 0.886780 0.656189 +vt 0.886780 0.652405 +vt 0.890686 0.652283 +vt 0.890686 0.605530 +vt 0.898376 0.652283 +vt 0.898376 0.605530 +vt 0.878967 0.652283 +vt 0.878967 0.605530 +vt 0.886658 0.652283 +vt 0.886658 0.605530 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +usemtl m_0 +s 1 +f 321/953/249 322/954/249 323/955/249 +f 322/954/249 324/956/249 323/955/249 +f 325/957/250 326/958/250 327/959/250 +f 326/958/250 328/960/250 327/959/250 +f 325/961/251 327/962/251 323/963/251 +f 327/962/251 321/964/251 323/963/251 +f 328/965/252 326/966/252 322/967/252 +f 326/966/252 324/968/252 322/967/252 +f 327/969/253 328/970/253 321/971/253 +f 328/970/253 322/972/253 321/971/253 +f 323/973/254 324/974/254 325/975/254 +f 324/974/254 326/976/254 325/975/254 +o cube.039 +v -0.531250 2.625000 -0.375000 +v -0.531250 1.875000 -0.375000 +v -0.593750 2.625000 -0.375000 +v -0.593750 1.875000 -0.375000 +v -0.593750 2.625000 -0.250000 +v -0.593750 1.875000 -0.250000 +v -0.531250 2.625000 -0.250000 +v -0.531250 1.875000 -0.250000 +vt 0.875061 0.652283 +vt 0.875061 0.605530 +vt 0.878845 0.652283 +vt 0.878845 0.605530 +vt 0.886780 0.652283 +vt 0.886780 0.605530 +vt 0.890564 0.652283 +vt 0.890564 0.605530 +vt 0.886658 0.652405 +vt 0.886658 0.656189 +vt 0.878967 0.652405 +vt 0.878967 0.656189 +vt 0.894470 0.656189 +vt 0.894470 0.652405 +vt 0.886780 0.656189 +vt 0.886780 0.652405 +vt 0.890686 0.652283 +vt 0.890686 0.605530 +vt 0.898376 0.652283 +vt 0.898376 0.605530 +vt 0.878967 0.652283 +vt 0.878967 0.605530 +vt 0.886658 0.652283 +vt 0.886658 0.605530 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 -0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +usemtl m_0 +s 1 +f 329/977/255 330/978/255 331/979/255 +f 330/978/255 332/980/255 331/979/255 +f 333/981/256 334/982/256 335/983/256 +f 334/982/256 336/984/256 335/983/256 +f 333/985/257 335/986/257 331/987/257 +f 335/986/257 329/988/257 331/987/257 +f 336/989/258 334/990/258 330/991/258 +f 334/990/258 332/992/258 330/991/258 +f 335/993/259 336/994/259 329/995/259 +f 336/994/259 330/996/259 329/995/259 +f 331/997/260 332/998/260 333/999/260 +f 332/998/260 334/1000/260 333/999/260 +o cube.040 +v 0.250000 2.625000 0.531250 +v 0.250000 1.875000 0.531250 +v 0.250000 2.625000 0.593750 +v 0.250000 1.875000 0.593750 +v 0.375000 2.625000 0.593750 +v 0.375000 1.875000 0.593750 +v 0.375000 2.625000 0.531250 +v 0.375000 1.875000 0.531250 +vt 0.875061 0.652283 +vt 0.875061 0.605530 +vt 0.878845 0.652283 +vt 0.878845 0.605530 +vt 0.886780 0.652283 +vt 0.886780 0.605530 +vt 0.890564 0.652283 +vt 0.890564 0.605530 +vt 0.886658 0.652405 +vt 0.886658 0.656189 +vt 0.878967 0.652405 +vt 0.878967 0.656189 +vt 0.894470 0.656189 +vt 0.894470 0.652405 +vt 0.886780 0.656189 +vt 0.886780 0.652405 +vt 0.890686 0.652283 +vt 0.890686 0.605530 +vt 0.898376 0.652283 +vt 0.898376 0.605530 +vt 0.878967 0.652283 +vt 0.878967 0.605530 +vt 0.886658 0.652283 +vt 0.886658 0.605530 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +usemtl m_0 +s 1 +f 337/1001/261 338/1002/261 339/1003/261 +f 338/1002/261 340/1004/261 339/1003/261 +f 341/1005/262 342/1006/262 343/1007/262 +f 342/1006/262 344/1008/262 343/1007/262 +f 341/1009/263 343/1010/263 339/1011/263 +f 343/1010/263 337/1012/263 339/1011/263 +f 344/1013/264 342/1014/264 338/1015/264 +f 342/1014/264 340/1016/264 338/1015/264 +f 343/1017/265 344/1018/265 337/1019/265 +f 344/1018/265 338/1020/265 337/1019/265 +f 339/1021/266 340/1022/266 341/1023/266 +f 340/1022/266 342/1024/266 341/1023/266 +o cube.041 +v -0.375000 2.625000 0.531250 +v -0.375000 1.875000 0.531250 +v -0.375000 2.625000 0.593750 +v -0.375000 1.875000 0.593750 +v -0.250000 2.625000 0.593750 +v -0.250000 1.875000 0.593750 +v -0.250000 2.625000 0.531250 +v -0.250000 1.875000 0.531250 +vt 0.875061 0.652283 +vt 0.875061 0.605530 +vt 0.878845 0.652283 +vt 0.878845 0.605530 +vt 0.886780 0.652283 +vt 0.886780 0.605530 +vt 0.890564 0.652283 +vt 0.890564 0.605530 +vt 0.886658 0.652405 +vt 0.886658 0.656189 +vt 0.878967 0.652405 +vt 0.878967 0.656189 +vt 0.894470 0.656189 +vt 0.894470 0.652405 +vt 0.886780 0.656189 +vt 0.886780 0.652405 +vt 0.890686 0.652283 +vt 0.890686 0.605530 +vt 0.898376 0.652283 +vt 0.898376 0.605530 +vt 0.878967 0.652283 +vt 0.878967 0.605530 +vt 0.886658 0.652283 +vt 0.886658 0.605530 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +usemtl m_0 +s 1 +f 345/1025/267 346/1026/267 347/1027/267 +f 346/1026/267 348/1028/267 347/1027/267 +f 349/1029/268 350/1030/268 351/1031/268 +f 350/1030/268 352/1032/268 351/1031/268 +f 349/1033/269 351/1034/269 347/1035/269 +f 351/1034/269 345/1036/269 347/1035/269 +f 352/1037/270 350/1038/270 346/1039/270 +f 350/1038/270 348/1040/270 346/1039/270 +f 351/1041/271 352/1042/271 345/1043/271 +f 352/1042/271 346/1044/271 345/1043/271 +f 347/1045/272 348/1046/272 349/1047/272 +f 348/1046/272 350/1048/272 349/1047/272 +o cube.042 +v 0.531250 2.625000 -0.250000 +v 0.531250 1.875000 -0.250000 +v 0.593750 2.625000 -0.250000 +v 0.593750 1.875000 -0.250000 +v 0.593750 2.625000 -0.375000 +v 0.593750 1.875000 -0.375000 +v 0.531250 2.625000 -0.375000 +v 0.531250 1.875000 -0.375000 +vt 0.875061 0.652283 +vt 0.875061 0.605530 +vt 0.878845 0.652283 +vt 0.878845 0.605530 +vt 0.886780 0.652283 +vt 0.886780 0.605530 +vt 0.890564 0.652283 +vt 0.890564 0.605530 +vt 0.886658 0.652405 +vt 0.886658 0.656189 +vt 0.878967 0.652405 +vt 0.878967 0.656189 +vt 0.894470 0.656189 +vt 0.894470 0.652405 +vt 0.886780 0.656189 +vt 0.886780 0.652405 +vt 0.890686 0.652283 +vt 0.890686 0.605530 +vt 0.898376 0.652283 +vt 0.898376 0.605530 +vt 0.878967 0.652283 +vt 0.878967 0.605530 +vt 0.886658 0.652283 +vt 0.886658 0.605530 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +usemtl m_0 +s 1 +f 353/1049/273 354/1050/273 355/1051/273 +f 354/1050/273 356/1052/273 355/1051/273 +f 357/1053/274 358/1054/274 359/1055/274 +f 358/1054/274 360/1056/274 359/1055/274 +f 357/1057/275 359/1058/275 355/1059/275 +f 359/1058/275 353/1060/275 355/1059/275 +f 360/1061/276 358/1062/276 354/1063/276 +f 358/1062/276 356/1064/276 354/1063/276 +f 359/1065/277 360/1066/277 353/1067/277 +f 360/1066/277 354/1068/277 353/1067/277 +f 355/1069/278 356/1070/278 357/1071/278 +f 356/1070/278 358/1072/278 357/1071/278 +o cube.043 +v 0.531250 2.625000 0.375000 +v 0.531250 1.875000 0.375000 +v 0.593750 2.625000 0.375000 +v 0.593750 1.875000 0.375000 +v 0.593750 2.625000 0.250000 +v 0.593750 1.875000 0.250000 +v 0.531250 2.625000 0.250000 +v 0.531250 1.875000 0.250000 +vt 0.875061 0.652283 +vt 0.875061 0.605530 +vt 0.878845 0.652283 +vt 0.878845 0.605530 +vt 0.886780 0.652283 +vt 0.886780 0.605530 +vt 0.890564 0.652283 +vt 0.890564 0.605530 +vt 0.886658 0.652405 +vt 0.886658 0.656189 +vt 0.878967 0.652405 +vt 0.878967 0.656189 +vt 0.894470 0.656189 +vt 0.894470 0.652405 +vt 0.886780 0.656189 +vt 0.886780 0.652405 +vt 0.890686 0.652283 +vt 0.890686 0.605530 +vt 0.898376 0.652283 +vt 0.898376 0.605530 +vt 0.878967 0.652283 +vt 0.878967 0.605530 +vt 0.886658 0.652283 +vt 0.886658 0.605530 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +usemtl m_0 +s 1 +f 361/1073/279 362/1074/279 363/1075/279 +f 362/1074/279 364/1076/279 363/1075/279 +f 365/1077/280 366/1078/280 367/1079/280 +f 366/1078/280 368/1080/280 367/1079/280 +f 365/1081/281 367/1082/281 363/1083/281 +f 367/1082/281 361/1084/281 363/1083/281 +f 368/1085/282 366/1086/282 362/1087/282 +f 366/1086/282 364/1088/282 362/1087/282 +f 367/1089/283 368/1090/283 361/1091/283 +f 368/1090/283 362/1092/283 361/1091/283 +f 363/1093/284 364/1094/284 365/1095/284 +f 364/1094/284 366/1096/284 365/1095/284 +o cube.044 +v 0.125000 5.562500 0.125001 +v 0.125000 5.437500 0.125001 +v 0.125000 5.562500 -0.124999 +v 0.125000 5.437500 -0.124999 +v -0.125000 5.562500 -0.124999 +v -0.125000 5.437500 -0.124999 +v -0.125000 5.562500 0.125001 +v -0.125000 5.437500 0.125001 +vt 0.140686 0.886658 +vt 0.140686 0.878967 +vt 0.156189 0.886658 +vt 0.156189 0.878967 +vt 0.171936 0.886658 +vt 0.171936 0.878967 +vt 0.187439 0.886658 +vt 0.187439 0.878967 +vt 0.171814 0.886780 +vt 0.171814 0.902283 +vt 0.156311 0.886780 +vt 0.156311 0.902283 +vt 0.187439 0.902283 +vt 0.187439 0.886780 +vt 0.171936 0.902283 +vt 0.171936 0.886780 +vt 0.187561 0.886658 +vt 0.187561 0.878967 +vt 0.203064 0.886658 +vt 0.203064 0.878967 +vt 0.156311 0.886658 +vt 0.156311 0.878967 +vt 0.171814 0.886658 +vt 0.171814 0.878967 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 369/1097/285 370/1098/285 371/1099/285 +f 370/1098/285 372/1100/285 371/1099/285 +f 373/1101/286 374/1102/286 375/1103/286 +f 374/1102/286 376/1104/286 375/1103/286 +f 373/1105/287 375/1106/287 371/1107/287 +f 375/1106/287 369/1108/287 371/1107/287 +f 376/1109/288 374/1110/288 370/1111/288 +f 374/1110/288 372/1112/288 370/1111/288 +f 375/1113/289 376/1114/289 369/1115/289 +f 376/1114/289 370/1116/289 369/1115/289 +f 371/1117/290 372/1118/290 373/1119/290 +f 372/1118/290 374/1120/290 373/1119/290 +o cube.045 +v 0.125000 5.375000 0.125001 +v 0.125000 5.250000 0.125001 +v 0.125000 5.375000 -0.124999 +v 0.125000 5.250000 -0.124999 +v -0.125000 5.375000 -0.124999 +v -0.125000 5.250000 -0.124999 +v -0.125000 5.375000 0.125001 +v -0.125000 5.250000 0.125001 +vt 0.140686 0.886658 +vt 0.140686 0.878967 +vt 0.156189 0.886658 +vt 0.156189 0.878967 +vt 0.171936 0.886658 +vt 0.171936 0.878967 +vt 0.187439 0.886658 +vt 0.187439 0.878967 +vt 0.171814 0.886780 +vt 0.171814 0.902283 +vt 0.156311 0.886780 +vt 0.156311 0.902283 +vt 0.187439 0.902283 +vt 0.187439 0.886780 +vt 0.171936 0.902283 +vt 0.171936 0.886780 +vt 0.187561 0.886658 +vt 0.187561 0.878967 +vt 0.203064 0.886658 +vt 0.203064 0.878967 +vt 0.156311 0.886658 +vt 0.156311 0.878967 +vt 0.171814 0.886658 +vt 0.171814 0.878967 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 377/1121/291 378/1122/291 379/1123/291 +f 378/1122/291 380/1124/291 379/1123/291 +f 381/1125/292 382/1126/292 383/1127/292 +f 382/1126/292 384/1128/292 383/1127/292 +f 381/1129/293 383/1130/293 379/1131/293 +f 383/1130/293 377/1132/293 379/1131/293 +f 384/1133/294 382/1134/294 378/1135/294 +f 382/1134/294 380/1136/294 378/1135/294 +f 383/1137/295 384/1138/295 377/1139/295 +f 384/1138/295 378/1140/295 377/1139/295 +f 379/1141/296 380/1142/296 381/1143/296 +f 380/1142/296 382/1144/296 381/1143/296 +o cube.046 +v -0.796123 0.737500 -0.725412 +v -0.796123 -0.050000 -0.725413 +v -0.725413 0.737500 -0.654702 +v -0.725413 -0.050000 -0.654702 +v -0.654702 0.737500 -0.725412 +v -0.654702 -0.050000 -0.725413 +v -0.725413 0.737500 -0.796123 +v -0.725413 -0.050000 -0.796123 +vt 0.140686 0.960876 +vt 0.140686 0.910217 +vt 0.148376 0.960876 +vt 0.148376 0.910217 +vt 0.156311 0.960876 +vt 0.156311 0.910217 +vt 0.164001 0.960876 +vt 0.164001 0.910217 +vt 0.156189 0.960999 +vt 0.156189 0.968689 +vt 0.148499 0.960999 +vt 0.148499 0.968689 +vt 0.164001 0.968689 +vt 0.164001 0.960999 +vt 0.156311 0.968689 +vt 0.156311 0.960999 +vt 0.164124 0.960876 +vt 0.164124 0.910217 +vt 0.171814 0.960876 +vt 0.171814 0.910217 +vt 0.148499 0.960876 +vt 0.148499 0.910217 +vt 0.156189 0.960876 +vt 0.156189 0.910217 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +usemtl m_0 +s 1 +f 385/1145/297 386/1146/297 387/1147/297 +f 386/1146/297 388/1148/297 387/1147/297 +f 389/1149/298 390/1150/298 391/1151/298 +f 390/1150/298 392/1152/298 391/1151/298 +f 389/1153/299 391/1154/299 387/1155/299 +f 391/1154/299 385/1156/299 387/1155/299 +f 392/1157/300 390/1158/300 386/1159/300 +f 390/1158/300 388/1160/300 386/1159/300 +f 391/1161/301 392/1162/301 385/1163/301 +f 392/1162/301 386/1164/301 385/1163/301 +f 387/1165/302 388/1166/302 389/1167/302 +f 388/1166/302 390/1168/302 389/1167/302 +o cube.047 +v -0.928706 0.737500 -0.857995 +v -0.928706 -0.050000 -0.857995 +v -0.857995 0.737500 -0.787284 +v -0.857995 -0.050000 -0.787284 +v -0.787284 0.737500 -0.857995 +v -0.787284 -0.050000 -0.857995 +v -0.857995 0.737500 -0.928706 +v -0.857995 -0.050000 -0.928706 +vt 0.140686 0.960876 +vt 0.140686 0.910217 +vt 0.148376 0.960876 +vt 0.148376 0.910217 +vt 0.156311 0.960876 +vt 0.156311 0.910217 +vt 0.164001 0.960876 +vt 0.164001 0.910217 +vt 0.156189 0.960999 +vt 0.156189 0.968689 +vt 0.148499 0.960999 +vt 0.148499 0.968689 +vt 0.164001 0.968689 +vt 0.164001 0.960999 +vt 0.156311 0.968689 +vt 0.156311 0.960999 +vt 0.164124 0.960876 +vt 0.164124 0.910217 +vt 0.171814 0.960876 +vt 0.171814 0.910217 +vt 0.148499 0.960876 +vt 0.148499 0.910217 +vt 0.156189 0.960876 +vt 0.156189 0.910217 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +usemtl m_0 +s 1 +f 393/1169/303 394/1170/303 395/1171/303 +f 394/1170/303 396/1172/303 395/1171/303 +f 397/1173/304 398/1174/304 399/1175/304 +f 398/1174/304 400/1176/304 399/1175/304 +f 397/1177/305 399/1178/305 395/1179/305 +f 399/1178/305 393/1180/305 395/1179/305 +f 400/1181/306 398/1182/306 394/1183/306 +f 398/1182/306 396/1184/306 394/1183/306 +f 399/1185/307 400/1186/307 393/1187/307 +f 400/1186/307 394/1188/307 393/1187/307 +f 395/1189/308 396/1190/308 397/1191/308 +f 396/1190/308 398/1192/308 397/1191/308 +o cube.048 +v -0.725413 0.737500 0.796123 +v -0.725413 -0.050000 0.796123 +v -0.654702 0.737500 0.725413 +v -0.654702 -0.050000 0.725413 +v -0.725413 0.737500 0.654702 +v -0.725413 -0.050000 0.654702 +v -0.796123 0.737500 0.725413 +v -0.796123 -0.050000 0.725413 +vt 0.140686 0.960876 +vt 0.140686 0.910217 +vt 0.148376 0.960876 +vt 0.148376 0.910217 +vt 0.156311 0.960876 +vt 0.156311 0.910217 +vt 0.164001 0.960876 +vt 0.164001 0.910217 +vt 0.156189 0.960999 +vt 0.156189 0.968689 +vt 0.148499 0.960999 +vt 0.148499 0.968689 +vt 0.164001 0.968689 +vt 0.164001 0.960999 +vt 0.156311 0.968689 +vt 0.156311 0.960999 +vt 0.164124 0.960876 +vt 0.164124 0.910217 +vt 0.171814 0.960876 +vt 0.171814 0.910217 +vt 0.148499 0.960876 +vt 0.148499 0.910217 +vt 0.156189 0.960876 +vt 0.156189 0.910217 +vn 0.7071 -0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +usemtl m_0 +s 1 +f 401/1193/309 402/1194/309 403/1195/309 +f 402/1194/309 404/1196/309 403/1195/309 +f 405/1197/310 406/1198/310 407/1199/310 +f 406/1198/310 408/1200/310 407/1199/310 +f 405/1201/311 407/1202/311 403/1203/311 +f 407/1202/311 401/1204/311 403/1203/311 +f 408/1205/312 406/1206/312 402/1207/312 +f 406/1206/312 404/1208/312 402/1207/312 +f 407/1209/313 408/1210/313 401/1211/313 +f 408/1210/313 402/1212/313 401/1211/313 +f 403/1213/314 404/1214/314 405/1215/314 +f 404/1214/314 406/1216/314 405/1215/314 +o cube.049 +v -0.857995 0.737500 0.928706 +v -0.857995 -0.050000 0.928706 +v -0.787284 0.737500 0.857995 +v -0.787284 -0.050000 0.857995 +v -0.857995 0.737500 0.787285 +v -0.857995 -0.050000 0.787284 +v -0.928706 0.737500 0.857995 +v -0.928706 -0.050000 0.857995 +vt 0.140686 0.960876 +vt 0.140686 0.910217 +vt 0.148376 0.960876 +vt 0.148376 0.910217 +vt 0.156311 0.960876 +vt 0.156311 0.910217 +vt 0.164001 0.960876 +vt 0.164001 0.910217 +vt 0.156189 0.960999 +vt 0.156189 0.968689 +vt 0.148499 0.960999 +vt 0.148499 0.968689 +vt 0.164001 0.968689 +vt 0.164001 0.960999 +vt 0.156311 0.968689 +vt 0.156311 0.960999 +vt 0.164124 0.960876 +vt 0.164124 0.910217 +vt 0.171814 0.960876 +vt 0.171814 0.910217 +vt 0.148499 0.960876 +vt 0.148499 0.910217 +vt 0.156189 0.960876 +vt 0.156189 0.910217 +vn 0.7071 -0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +usemtl m_0 +s 1 +f 409/1217/315 410/1218/315 411/1219/315 +f 410/1218/315 412/1220/315 411/1219/315 +f 413/1221/316 414/1222/316 415/1223/316 +f 414/1222/316 416/1224/316 415/1223/316 +f 413/1225/317 415/1226/317 411/1227/317 +f 415/1226/317 409/1228/317 411/1227/317 +f 416/1229/318 414/1230/318 410/1231/318 +f 414/1230/318 412/1232/318 410/1231/318 +f 415/1233/319 416/1234/319 409/1235/319 +f 416/1234/319 410/1236/319 409/1235/319 +f 411/1237/320 412/1238/320 413/1239/320 +f 412/1238/320 414/1240/320 413/1239/320 +o cube.050 +v 0.928706 0.737500 0.857995 +v 0.928706 -0.050000 0.857995 +v 0.857995 0.737500 0.787285 +v 0.857995 -0.050000 0.787284 +v 0.787284 0.737500 0.857995 +v 0.787284 -0.050000 0.857995 +v 0.857995 0.737500 0.928706 +v 0.857995 -0.050000 0.928706 +vt 0.140686 0.960876 +vt 0.140686 0.910217 +vt 0.148376 0.960876 +vt 0.148376 0.910217 +vt 0.156311 0.960876 +vt 0.156311 0.910217 +vt 0.164001 0.960876 +vt 0.164001 0.910217 +vt 0.156189 0.960999 +vt 0.156189 0.968689 +vt 0.148499 0.960999 +vt 0.148499 0.968689 +vt 0.164001 0.968689 +vt 0.164001 0.960999 +vt 0.156311 0.968689 +vt 0.156311 0.960999 +vt 0.164124 0.960876 +vt 0.164124 0.910217 +vt 0.171814 0.960876 +vt 0.171814 0.910217 +vt 0.148499 0.960876 +vt 0.148499 0.910217 +vt 0.156189 0.960876 +vt 0.156189 0.910217 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 -0.0000 0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.7071 -0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +usemtl m_0 +s 1 +f 417/1241/321 418/1242/321 419/1243/321 +f 418/1242/321 420/1244/321 419/1243/321 +f 421/1245/322 422/1246/322 423/1247/322 +f 422/1246/322 424/1248/322 423/1247/322 +f 421/1249/323 423/1250/323 419/1251/323 +f 423/1250/323 417/1252/323 419/1251/323 +f 424/1253/324 422/1254/324 418/1255/324 +f 422/1254/324 420/1256/324 418/1255/324 +f 423/1257/325 424/1258/325 417/1259/325 +f 424/1258/325 418/1260/325 417/1259/325 +f 419/1261/326 420/1262/326 421/1263/326 +f 420/1262/326 422/1264/326 421/1263/326 +o cube.051 +v 0.796123 0.737500 0.725413 +v 0.796123 -0.050000 0.725413 +v 0.725413 0.737500 0.654702 +v 0.725413 -0.050000 0.654702 +v 0.654702 0.737500 0.725413 +v 0.654702 -0.050000 0.725413 +v 0.725413 0.737500 0.796123 +v 0.725413 -0.050000 0.796123 +vt 0.140686 0.960876 +vt 0.140686 0.910217 +vt 0.148376 0.960876 +vt 0.148376 0.910217 +vt 0.156311 0.960876 +vt 0.156311 0.910217 +vt 0.164001 0.960876 +vt 0.164001 0.910217 +vt 0.156189 0.960999 +vt 0.156189 0.968689 +vt 0.148499 0.960999 +vt 0.148499 0.968689 +vt 0.164001 0.968689 +vt 0.164001 0.960999 +vt 0.156311 0.968689 +vt 0.156311 0.960999 +vt 0.164124 0.960876 +vt 0.164124 0.910217 +vt 0.171814 0.960876 +vt 0.171814 0.910217 +vt 0.148499 0.960876 +vt 0.148499 0.910217 +vt 0.156189 0.960876 +vt 0.156189 0.910217 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 -0.0000 0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.7071 -0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +usemtl m_0 +s 1 +f 425/1265/327 426/1266/327 427/1267/327 +f 426/1266/327 428/1268/327 427/1267/327 +f 429/1269/328 430/1270/328 431/1271/328 +f 430/1270/328 432/1272/328 431/1271/328 +f 429/1273/329 431/1274/329 427/1275/329 +f 431/1274/329 425/1276/329 427/1275/329 +f 432/1277/330 430/1278/330 426/1279/330 +f 430/1278/330 428/1280/330 426/1279/330 +f 431/1281/331 432/1282/331 425/1283/331 +f 432/1282/331 426/1284/331 425/1283/331 +f 427/1285/332 428/1286/332 429/1287/332 +f 428/1286/332 430/1288/332 429/1287/332 +o cube.052 +v 0.725413 0.737500 -0.796123 +v 0.725413 -0.050000 -0.796123 +v 0.654702 0.737500 -0.725412 +v 0.654702 -0.050000 -0.725413 +v 0.725413 0.737500 -0.654702 +v 0.725413 -0.050000 -0.654702 +v 0.796123 0.737500 -0.725412 +v 0.796123 -0.050000 -0.725413 +vt 0.140686 0.960876 +vt 0.140686 0.910217 +vt 0.148376 0.960876 +vt 0.148376 0.910217 +vt 0.156311 0.960876 +vt 0.156311 0.910217 +vt 0.164001 0.960876 +vt 0.164001 0.910217 +vt 0.156189 0.960999 +vt 0.156189 0.968689 +vt 0.148499 0.960999 +vt 0.148499 0.968689 +vt 0.164001 0.968689 +vt 0.164001 0.960999 +vt 0.156311 0.968689 +vt 0.156311 0.960999 +vt 0.164124 0.960876 +vt 0.164124 0.910217 +vt 0.171814 0.960876 +vt 0.171814 0.910217 +vt 0.148499 0.960876 +vt 0.148499 0.910217 +vt 0.156189 0.960876 +vt 0.156189 0.910217 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 -0.0000 0.7071 +usemtl m_0 +s 1 +f 433/1289/333 434/1290/333 435/1291/333 +f 434/1290/333 436/1292/333 435/1291/333 +f 437/1293/334 438/1294/334 439/1295/334 +f 438/1294/334 440/1296/334 439/1295/334 +f 437/1297/335 439/1298/335 435/1299/335 +f 439/1298/335 433/1300/335 435/1299/335 +f 440/1301/336 438/1302/336 434/1303/336 +f 438/1302/336 436/1304/336 434/1303/336 +f 439/1305/337 440/1306/337 433/1307/337 +f 440/1306/337 434/1308/337 433/1307/337 +f 435/1309/338 436/1310/338 437/1311/338 +f 436/1310/338 438/1312/338 437/1311/338 +o cube.053 +v 0.857995 0.737500 -0.928706 +v 0.857995 -0.050000 -0.928706 +v 0.787284 0.737500 -0.857995 +v 0.787284 -0.050000 -0.857995 +v 0.857995 0.737500 -0.787284 +v 0.857995 -0.050000 -0.787284 +v 0.928706 0.737500 -0.857995 +v 0.928706 -0.050000 -0.857995 +vt 0.140686 0.960876 +vt 0.140686 0.910217 +vt 0.148376 0.960876 +vt 0.148376 0.910217 +vt 0.156311 0.960876 +vt 0.156311 0.910217 +vt 0.164001 0.960876 +vt 0.164001 0.910217 +vt 0.156189 0.960999 +vt 0.156189 0.968689 +vt 0.148499 0.960999 +vt 0.148499 0.968689 +vt 0.164001 0.968689 +vt 0.164001 0.960999 +vt 0.156311 0.968689 +vt 0.156311 0.960999 +vt 0.164124 0.960876 +vt 0.164124 0.910217 +vt 0.171814 0.960876 +vt 0.171814 0.910217 +vt 0.148499 0.960876 +vt 0.148499 0.910217 +vt 0.156189 0.960876 +vt 0.156189 0.910217 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 -0.0000 0.7071 +usemtl m_0 +s 1 +f 441/1313/339 442/1314/339 443/1315/339 +f 442/1314/339 444/1316/339 443/1315/339 +f 445/1317/340 446/1318/340 447/1319/340 +f 446/1318/340 448/1320/340 447/1319/340 +f 445/1321/341 447/1322/341 443/1323/341 +f 447/1322/341 441/1324/341 443/1323/341 +f 448/1325/342 446/1326/342 442/1327/342 +f 446/1326/342 444/1328/342 442/1327/342 +f 447/1329/343 448/1330/343 441/1331/343 +f 448/1330/343 442/1332/343 441/1331/343 +f 443/1333/344 444/1334/344 445/1335/344 +f 444/1334/344 446/1336/344 445/1335/344 +o body.000 +v 0.562500 3.562500 -0.562437 +v 0.562500 0.437500 -0.562437 +v 0.562500 3.562500 -0.562499 +v 0.562500 0.437500 -0.562500 +v -0.562500 3.562500 -0.562499 +v -0.562500 0.437500 -0.562500 +v -0.562500 3.562500 -0.562437 +v -0.562500 0.437500 -0.562437 +vt 0.718811 0.929626 +vt 0.718811 0.734436 +vt 0.718689 0.929626 +vt 0.718689 0.734436 +vt 0.789124 0.929626 +vt 0.789124 0.734436 +vt 0.789001 0.929626 +vt 0.789001 0.734436 +vt 0.789001 0.929626 +vt 0.789001 0.929749 +vt 0.718811 0.929626 +vt 0.718811 0.929749 +vt 0.859314 0.929626 +vt 0.859314 0.929749 +vt 0.789124 0.929626 +vt 0.789124 0.929749 +vt 0.789124 0.929626 +vt 0.789124 0.734436 +vt 0.859314 0.929626 +vt 0.859314 0.734436 +vt 0.718811 0.734436 +vt 0.789001 0.734436 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 449/1337/345 450/1338/345 451/1339/345 +f 450/1338/345 452/1340/345 451/1339/345 +f 453/1341/346 454/1342/346 455/1343/346 +f 454/1342/346 456/1344/346 455/1343/346 +f 453/1345/347 455/1346/347 451/1347/347 +f 455/1346/347 449/1348/347 451/1347/347 +f 456/1349/348 454/1350/348 450/1351/348 +f 454/1350/348 452/1352/348 450/1351/348 +f 455/1353/349 456/1354/349 449/1355/349 +f 456/1354/349 450/1356/349 449/1355/349 +f 451/1347/350 452/1357/350 453/1345/350 +f 452/1357/350 454/1358/350 453/1345/350 +o body.001 +v 0.562563 3.562500 0.562501 +v 0.562563 0.437500 0.562500 +v 0.562563 3.562500 -0.562499 +v 0.562563 0.437500 -0.562500 +v 0.562500 3.562500 -0.562499 +v 0.562500 0.437500 -0.562500 +v 0.562500 3.562500 0.562501 +v 0.562500 0.437500 0.562500 +vt 0.859436 0.929626 +vt 0.859436 0.734436 +vt 0.929626 0.929626 +vt 0.929626 0.734436 +vt 0.929749 0.929626 +vt 0.929749 0.734436 +vt 0.999939 0.929626 +vt 0.999939 0.734436 +vt 0.929749 0.929749 +vt 0.929749 0.999939 +vt 0.929626 0.929749 +vt 0.929626 0.999939 +vt 0.929749 0.999939 +vt 0.929749 0.929749 +vt 0.929626 0.999939 +vt 0.929626 0.929749 +vt 1.000061 0.929626 +vt 1.000061 0.734436 +vt 0.999939 0.929626 +vt 0.999939 0.734436 +vt 0.929749 0.929626 +vt 0.929749 0.734436 +vt 0.929626 0.929626 +vt 0.929626 0.734436 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 457/1359/351 458/1360/351 459/1361/351 +f 458/1360/351 460/1362/351 459/1361/351 +f 461/1363/352 462/1364/352 463/1365/352 +f 462/1364/352 464/1366/352 463/1365/352 +f 461/1367/353 463/1368/353 459/1369/353 +f 463/1368/353 457/1370/353 459/1369/353 +f 464/1371/354 462/1372/354 458/1373/354 +f 462/1372/354 460/1374/354 458/1373/354 +f 463/1375/355 464/1376/355 457/1377/355 +f 464/1376/355 458/1378/355 457/1377/355 +f 459/1379/356 460/1380/356 461/1381/356 +f 460/1380/356 462/1382/356 461/1381/356 +o body.002 +v 0.562500 3.562500 0.562563 +v 0.562500 0.437500 0.562563 +v 0.562500 3.562500 0.562501 +v 0.562500 0.437500 0.562500 +v -0.562500 3.562500 0.562501 +v -0.562500 0.437500 0.562500 +v -0.562500 3.562500 0.562563 +v -0.562500 0.437500 0.562563 +vt 0.859436 0.929626 +vt 0.859436 0.734436 +vt 0.859314 0.929626 +vt 0.859314 0.734436 +vt 0.929749 0.929626 +vt 0.929749 0.734436 +vt 0.929626 0.929626 +vt 0.929626 0.734436 +vt 0.929626 0.929626 +vt 0.929626 0.929749 +vt 0.859436 0.929626 +vt 0.859436 0.929749 +vt 0.999939 0.929626 +vt 0.999939 0.929749 +vt 0.929749 0.929626 +vt 0.929749 0.929749 +vt 0.929749 0.929626 +vt 0.929749 0.734436 +vt 0.999939 0.929626 +vt 0.999939 0.734436 +vt 0.859436 0.734436 +vt 0.929626 0.734436 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 465/1383/357 466/1384/357 467/1385/357 +f 466/1384/357 468/1386/357 467/1385/357 +f 469/1387/358 470/1388/358 471/1389/358 +f 470/1388/358 472/1390/358 471/1389/358 +f 469/1391/359 471/1392/359 467/1393/359 +f 471/1392/359 465/1394/359 467/1393/359 +f 472/1395/360 470/1396/360 466/1397/360 +f 470/1396/360 468/1398/360 466/1397/360 +f 471/1399/361 472/1400/361 465/1401/361 +f 472/1400/361 466/1402/361 465/1401/361 +f 467/1393/362 468/1403/362 469/1391/362 +f 468/1403/362 470/1404/362 469/1391/362 +o cube.054 +v 0.375000 0.250000 -0.374937 +v 0.375000 0.125000 -0.374937 +v 0.375000 0.250000 -0.375000 +v 0.375000 0.125000 -0.375000 +v -0.375000 0.250000 -0.375000 +v -0.375000 0.125000 -0.375000 +v -0.375000 0.250000 -0.374937 +v -0.375000 0.125000 -0.374937 +vt 0.085999 0.453064 +vt 0.085999 0.445374 +vt 0.085876 0.453064 +vt 0.085876 0.445374 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.453186 +vt 0.085999 0.453064 +vt 0.085999 0.453186 +vt 0.179626 0.453064 +vt 0.179626 0.453186 +vt 0.132874 0.453064 +vt 0.132874 0.453186 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.179626 0.453064 +vt 0.179626 0.445374 +vt 0.085999 0.445374 +vt 0.132751 0.445374 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 473/1405/363 474/1406/363 475/1407/363 +f 474/1406/363 476/1408/363 475/1407/363 +f 477/1409/364 478/1410/364 479/1411/364 +f 478/1410/364 480/1412/364 479/1411/364 +f 477/1413/365 479/1414/365 475/1415/365 +f 479/1414/365 473/1416/365 475/1415/365 +f 480/1417/366 478/1418/366 474/1419/366 +f 478/1418/366 476/1420/366 474/1419/366 +f 479/1421/367 480/1422/367 473/1423/367 +f 480/1422/367 474/1424/367 473/1423/367 +f 475/1415/368 476/1425/368 477/1413/368 +f 476/1425/368 478/1426/368 477/1413/368 +o cube.055 +v -0.312438 0.375000 0.312500 +v -0.312438 0.250000 0.312500 +v -0.312438 0.375000 -0.312500 +v -0.312438 0.250000 -0.312500 +v -0.312500 0.375000 -0.312500 +v -0.312500 0.250000 -0.312500 +v -0.312500 0.375000 0.312500 +v -0.312500 0.250000 0.312500 +vt 0.085999 0.507751 +vt 0.085999 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.500061 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.164001 0.507751 +vt 0.164001 0.500061 +vt 0.125061 0.507874 +vt 0.125061 0.546814 +vt 0.124939 0.507874 +vt 0.124939 0.546814 +vt 0.125061 0.546814 +vt 0.125061 0.507874 +vt 0.124939 0.546814 +vt 0.124939 0.507874 +vt 0.164124 0.507751 +vt 0.164124 0.500061 +vt 0.164001 0.507751 +vt 0.164001 0.500061 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.500061 +vn 1.0000 -0.0000 0.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 481/1427/369 482/1428/369 483/1429/369 +f 482/1428/369 484/1430/369 483/1429/369 +f 485/1431/370 486/1432/370 487/1433/370 +f 486/1432/370 488/1434/370 487/1433/370 +f 485/1435/371 487/1436/371 483/1437/371 +f 487/1436/371 481/1438/371 483/1437/371 +f 488/1439/372 486/1440/372 482/1441/372 +f 486/1440/372 484/1442/372 482/1441/372 +f 487/1443/373 488/1444/373 481/1445/373 +f 488/1444/373 482/1446/373 481/1445/373 +f 483/1447/374 484/1448/374 485/1449/374 +f 484/1448/374 486/1450/374 485/1449/374 +o cube.056 +v -0.249938 0.437500 0.250000 +v -0.249938 0.375000 0.250000 +v -0.249938 0.437500 -0.250000 +v -0.249938 0.375000 -0.250000 +v -0.250000 0.437500 -0.250000 +v -0.250000 0.375000 -0.250000 +v -0.250000 0.437500 0.250000 +v -0.250000 0.375000 0.250000 +vt 0.085999 0.550720 +vt 0.085999 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.546936 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.148376 0.550720 +vt 0.148376 0.546936 +vt 0.117249 0.550842 +vt 0.117249 0.581970 +vt 0.117126 0.550842 +vt 0.117126 0.581970 +vt 0.117249 0.581970 +vt 0.117249 0.550842 +vt 0.117126 0.581970 +vt 0.117126 0.550842 +vt 0.148499 0.550720 +vt 0.148499 0.546936 +vt 0.148376 0.550720 +vt 0.148376 0.546936 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.546936 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 489/1451/375 490/1452/375 491/1453/375 +f 490/1452/375 492/1454/375 491/1453/375 +f 493/1455/376 494/1456/376 495/1457/376 +f 494/1456/376 496/1458/376 495/1457/376 +f 493/1459/377 495/1460/377 491/1461/377 +f 495/1460/377 489/1462/377 491/1461/377 +f 496/1463/378 494/1464/378 490/1465/378 +f 494/1464/378 492/1466/378 490/1465/378 +f 495/1467/379 496/1468/379 489/1469/379 +f 496/1468/379 490/1470/379 489/1469/379 +f 491/1471/380 492/1472/380 493/1473/380 +f 492/1472/380 494/1474/380 493/1473/380 +o cube.057 +v -0.374938 0.250000 0.375000 +v -0.374938 0.125000 0.375000 +v -0.374938 0.250000 -0.375000 +v -0.374938 0.125000 -0.375000 +v -0.375000 0.250000 -0.375000 +v -0.375000 0.125000 -0.375000 +v -0.375000 0.250000 0.375000 +v -0.375000 0.125000 0.375000 +vt 0.085999 0.453064 +vt 0.085999 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.445374 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.179626 0.453064 +vt 0.179626 0.445374 +vt 0.132874 0.453186 +vt 0.132874 0.499939 +vt 0.132751 0.453186 +vt 0.132751 0.499939 +vt 0.132874 0.499939 +vt 0.132874 0.453186 +vt 0.132751 0.499939 +vt 0.132751 0.453186 +vt 0.179749 0.453064 +vt 0.179749 0.445374 +vt 0.179626 0.453064 +vt 0.179626 0.445374 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.445374 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 497/1475/381 498/1476/381 499/1477/381 +f 498/1476/381 500/1478/381 499/1477/381 +f 501/1479/382 502/1480/382 503/1481/382 +f 502/1480/382 504/1482/382 503/1481/382 +f 501/1483/383 503/1484/383 499/1485/383 +f 503/1484/383 497/1486/383 499/1485/383 +f 504/1487/384 502/1488/384 498/1489/384 +f 502/1488/384 500/1490/384 498/1489/384 +f 503/1491/385 504/1492/385 497/1493/385 +f 504/1492/385 498/1494/385 497/1493/385 +f 499/1495/386 500/1496/386 501/1497/386 +f 500/1496/386 502/1498/386 501/1497/386 +o cube.058 +v 0.375062 0.250000 0.375000 +v 0.375062 0.125000 0.375000 +v 0.375062 0.250000 -0.375000 +v 0.375062 0.125000 -0.375000 +v 0.375000 0.250000 -0.375000 +v 0.375000 0.125000 -0.375000 +v 0.375000 0.250000 0.375000 +v 0.375000 0.125000 0.375000 +vt 0.085999 0.453064 +vt 0.085999 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.445374 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.179626 0.453064 +vt 0.179626 0.445374 +vt 0.132874 0.453186 +vt 0.132874 0.499939 +vt 0.132751 0.453186 +vt 0.132751 0.499939 +vt 0.132874 0.499939 +vt 0.132874 0.453186 +vt 0.132751 0.499939 +vt 0.132751 0.453186 +vt 0.179749 0.453064 +vt 0.179749 0.445374 +vt 0.179626 0.453064 +vt 0.179626 0.445374 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.445374 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 505/1499/387 506/1500/387 507/1501/387 +f 506/1500/387 508/1502/387 507/1501/387 +f 509/1503/388 510/1504/388 511/1505/388 +f 510/1504/388 512/1506/388 511/1505/388 +f 509/1507/389 511/1508/389 507/1509/389 +f 511/1508/389 505/1510/389 507/1509/389 +f 512/1511/390 510/1512/390 506/1513/390 +f 510/1512/390 508/1514/390 506/1513/390 +f 511/1515/391 512/1516/391 505/1517/391 +f 512/1516/391 506/1518/391 505/1517/391 +f 507/1519/392 508/1520/392 509/1521/392 +f 508/1520/392 510/1522/392 509/1521/392 +o cube.059 +v 0.375000 0.250000 0.375063 +v 0.375000 0.125000 0.375063 +v 0.375000 0.250000 0.375000 +v 0.375000 0.125000 0.375000 +v -0.375000 0.250000 0.375000 +v -0.375000 0.125000 0.375000 +v -0.375000 0.250000 0.375063 +v -0.375000 0.125000 0.375063 +vt 0.085999 0.453064 +vt 0.085999 0.445374 +vt 0.085876 0.453064 +vt 0.085876 0.445374 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.445374 +vt 0.132751 0.453064 +vt 0.132751 0.453186 +vt 0.085999 0.453064 +vt 0.085999 0.453186 +vt 0.179626 0.453064 +vt 0.179626 0.453186 +vt 0.132874 0.453064 +vt 0.132874 0.453186 +vt 0.132874 0.453064 +vt 0.132874 0.445374 +vt 0.179626 0.453064 +vt 0.179626 0.445374 +vt 0.085999 0.445374 +vt 0.132751 0.445374 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 513/1523/393 514/1524/393 515/1525/393 +f 514/1524/393 516/1526/393 515/1525/393 +f 517/1527/394 518/1528/394 519/1529/394 +f 518/1528/394 520/1530/394 519/1529/394 +f 517/1531/395 519/1532/395 515/1533/395 +f 519/1532/395 513/1534/395 515/1533/395 +f 520/1535/396 518/1536/396 514/1537/396 +f 518/1536/396 516/1538/396 514/1537/396 +f 519/1539/397 520/1540/397 513/1541/397 +f 520/1540/397 514/1542/397 513/1541/397 +f 515/1533/398 516/1543/398 517/1531/398 +f 516/1543/398 518/1544/398 517/1531/398 +o cube.060 +v 0.312500 0.375000 -0.312437 +v 0.312500 0.250000 -0.312437 +v 0.312500 0.375000 -0.312500 +v 0.312500 0.250000 -0.312500 +v -0.312500 0.375000 -0.312500 +v -0.312500 0.250000 -0.312500 +v -0.312500 0.375000 -0.312437 +v -0.312500 0.250000 -0.312437 +vt 0.085999 0.507751 +vt 0.085999 0.500061 +vt 0.085876 0.507751 +vt 0.085876 0.500061 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.507874 +vt 0.085999 0.507751 +vt 0.085999 0.507874 +vt 0.164001 0.507751 +vt 0.164001 0.507874 +vt 0.125061 0.507751 +vt 0.125061 0.507874 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.164001 0.507751 +vt 0.164001 0.500061 +vt 0.085999 0.500061 +vt 0.124939 0.500061 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 521/1545/399 522/1546/399 523/1547/399 +f 522/1546/399 524/1548/399 523/1547/399 +f 525/1549/400 526/1550/400 527/1551/400 +f 526/1550/400 528/1552/400 527/1551/400 +f 525/1553/401 527/1554/401 523/1555/401 +f 527/1554/401 521/1556/401 523/1555/401 +f 528/1557/402 526/1558/402 522/1559/402 +f 526/1558/402 524/1560/402 522/1559/402 +f 527/1561/403 528/1562/403 521/1563/403 +f 528/1562/403 522/1564/403 521/1563/403 +f 523/1555/404 524/1565/404 525/1553/404 +f 524/1565/404 526/1566/404 525/1553/404 +o cube.061 +v 0.312500 0.375000 0.312563 +v 0.312500 0.250000 0.312563 +v 0.312500 0.375000 0.312500 +v 0.312500 0.250000 0.312500 +v -0.312500 0.375000 0.312500 +v -0.312500 0.250000 0.312500 +v -0.312500 0.375000 0.312563 +v -0.312500 0.250000 0.312563 +vt 0.085999 0.507751 +vt 0.085999 0.500061 +vt 0.085876 0.507751 +vt 0.085876 0.500061 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.507874 +vt 0.085999 0.507751 +vt 0.085999 0.507874 +vt 0.164001 0.507751 +vt 0.164001 0.507874 +vt 0.125061 0.507751 +vt 0.125061 0.507874 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.164001 0.507751 +vt 0.164001 0.500061 +vt 0.085999 0.500061 +vt 0.124939 0.500061 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 529/1567/405 530/1568/405 531/1569/405 +f 530/1568/405 532/1570/405 531/1569/405 +f 533/1571/406 534/1572/406 535/1573/406 +f 534/1572/406 536/1574/406 535/1573/406 +f 533/1575/407 535/1576/407 531/1577/407 +f 535/1576/407 529/1578/407 531/1577/407 +f 536/1579/408 534/1580/408 530/1581/408 +f 534/1580/408 532/1582/408 530/1581/408 +f 535/1583/409 536/1584/409 529/1585/409 +f 536/1584/409 530/1586/409 529/1585/409 +f 531/1577/410 532/1587/410 533/1575/410 +f 532/1587/410 534/1588/410 533/1575/410 +o cube.062 +v 0.312562 0.375000 0.312500 +v 0.312562 0.250000 0.312500 +v 0.312562 0.375000 -0.312500 +v 0.312562 0.250000 -0.312500 +v 0.312500 0.375000 -0.312500 +v 0.312500 0.250000 -0.312500 +v 0.312500 0.375000 0.312500 +v 0.312500 0.250000 0.312500 +vt 0.085999 0.507751 +vt 0.085999 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.500061 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.164001 0.507751 +vt 0.164001 0.500061 +vt 0.125061 0.507874 +vt 0.125061 0.546814 +vt 0.124939 0.507874 +vt 0.124939 0.546814 +vt 0.125061 0.546814 +vt 0.125061 0.507874 +vt 0.124939 0.546814 +vt 0.124939 0.507874 +vt 0.164124 0.507751 +vt 0.164124 0.500061 +vt 0.164001 0.507751 +vt 0.164001 0.500061 +vt 0.125061 0.507751 +vt 0.125061 0.500061 +vt 0.124939 0.507751 +vt 0.124939 0.500061 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 537/1589/411 538/1590/411 539/1591/411 +f 538/1590/411 540/1592/411 539/1591/411 +f 541/1593/412 542/1594/412 543/1595/412 +f 542/1594/412 544/1596/412 543/1595/412 +f 541/1597/413 543/1598/413 539/1599/413 +f 543/1598/413 537/1600/413 539/1599/413 +f 544/1601/414 542/1602/414 538/1603/414 +f 542/1602/414 540/1604/414 538/1603/414 +f 543/1605/415 544/1606/415 537/1607/415 +f 544/1606/415 538/1608/415 537/1607/415 +f 539/1609/416 540/1610/416 541/1611/416 +f 540/1610/416 542/1612/416 541/1611/416 +o cube.063 +v 0.250000 0.437500 -0.249937 +v 0.250000 0.375000 -0.249937 +v 0.250000 0.437500 -0.250000 +v 0.250000 0.375000 -0.250000 +v -0.250000 0.437500 -0.250000 +v -0.250000 0.375000 -0.250000 +v -0.250000 0.437500 -0.249937 +v -0.250000 0.375000 -0.249937 +vt 0.085999 0.550720 +vt 0.085999 0.546936 +vt 0.085876 0.550720 +vt 0.085876 0.546936 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.550842 +vt 0.085999 0.550720 +vt 0.085999 0.550842 +vt 0.148376 0.550720 +vt 0.148376 0.550842 +vt 0.117249 0.550720 +vt 0.117249 0.550842 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.148376 0.550720 +vt 0.148376 0.546936 +vt 0.085999 0.546936 +vt 0.117126 0.546936 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 545/1613/417 546/1614/417 547/1615/417 +f 546/1614/417 548/1616/417 547/1615/417 +f 549/1617/418 550/1618/418 551/1619/418 +f 550/1618/418 552/1620/418 551/1619/418 +f 549/1621/419 551/1622/419 547/1623/419 +f 551/1622/419 545/1624/419 547/1623/419 +f 552/1625/420 550/1626/420 546/1627/420 +f 550/1626/420 548/1628/420 546/1627/420 +f 551/1629/421 552/1630/421 545/1631/421 +f 552/1630/421 546/1632/421 545/1631/421 +f 547/1623/422 548/1633/422 549/1621/422 +f 548/1633/422 550/1634/422 549/1621/422 +o cube.064 +v 0.250000 0.437500 0.250063 +v 0.250000 0.375000 0.250063 +v 0.250000 0.437500 0.250000 +v 0.250000 0.375000 0.250000 +v -0.250000 0.437500 0.250000 +v -0.250000 0.375000 0.250000 +v -0.250000 0.437500 0.250063 +v -0.250000 0.375000 0.250063 +vt 0.085999 0.550720 +vt 0.085999 0.546936 +vt 0.085876 0.550720 +vt 0.085876 0.546936 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.550842 +vt 0.085999 0.550720 +vt 0.085999 0.550842 +vt 0.148376 0.550720 +vt 0.148376 0.550842 +vt 0.117249 0.550720 +vt 0.117249 0.550842 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.148376 0.550720 +vt 0.148376 0.546936 +vt 0.085999 0.546936 +vt 0.117126 0.546936 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 553/1635/423 554/1636/423 555/1637/423 +f 554/1636/423 556/1638/423 555/1637/423 +f 557/1639/424 558/1640/424 559/1641/424 +f 558/1640/424 560/1642/424 559/1641/424 +f 557/1643/425 559/1644/425 555/1645/425 +f 559/1644/425 553/1646/425 555/1645/425 +f 560/1647/426 558/1648/426 554/1649/426 +f 558/1648/426 556/1650/426 554/1649/426 +f 559/1651/427 560/1652/427 553/1653/427 +f 560/1652/427 554/1654/427 553/1653/427 +f 555/1645/428 556/1655/428 557/1643/428 +f 556/1655/428 558/1656/428 557/1643/428 +o cube.065 +v 0.250062 0.437500 0.250000 +v 0.250062 0.375000 0.250000 +v 0.250062 0.437500 -0.250000 +v 0.250062 0.375000 -0.250000 +v 0.250000 0.437500 -0.250000 +v 0.250000 0.375000 -0.250000 +v 0.250000 0.437500 0.250000 +v 0.250000 0.375000 0.250000 +vt 0.085999 0.550720 +vt 0.085999 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.546936 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.148376 0.550720 +vt 0.148376 0.546936 +vt 0.117249 0.550842 +vt 0.117249 0.581970 +vt 0.117126 0.550842 +vt 0.117126 0.581970 +vt 0.117249 0.581970 +vt 0.117249 0.550842 +vt 0.117126 0.581970 +vt 0.117126 0.550842 +vt 0.148499 0.550720 +vt 0.148499 0.546936 +vt 0.148376 0.550720 +vt 0.148376 0.546936 +vt 0.117249 0.550720 +vt 0.117249 0.546936 +vt 0.117126 0.550720 +vt 0.117126 0.546936 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 561/1657/429 562/1658/429 563/1659/429 +f 562/1658/429 564/1660/429 563/1659/429 +f 565/1661/430 566/1662/430 567/1663/430 +f 566/1662/430 568/1664/430 567/1663/430 +f 565/1665/431 567/1666/431 563/1667/431 +f 567/1666/431 561/1668/431 563/1667/431 +f 568/1669/432 566/1670/432 562/1671/432 +f 566/1670/432 564/1672/432 562/1671/432 +f 567/1673/433 568/1674/433 561/1675/433 +f 568/1674/433 562/1676/433 561/1675/433 +f 563/1677/434 564/1678/434 565/1679/434 +f 564/1678/434 566/1680/434 565/1679/434 +o cube.066 +v 0.375000 0.250062 0.375000 +v 0.375000 0.250000 0.375000 +v 0.375000 0.250063 -0.375000 +v 0.375000 0.250000 -0.375000 +v -0.375000 0.250063 -0.375000 +v -0.375000 0.250000 -0.375000 +v -0.375000 0.250062 0.375000 +v -0.375000 0.250000 0.375000 +vt 0.039124 0.453064 +vt 0.039124 0.453186 +vt 0.085876 0.453064 +vt 0.085876 0.453186 +vt 0.132874 0.453064 +vt 0.132874 0.453186 +vt 0.179626 0.453064 +vt 0.179626 0.453186 +vt 0.132751 0.453186 +vt 0.132751 0.499939 +vt 0.085999 0.453186 +vt 0.085999 0.499939 +vt 0.179626 0.499939 +vt 0.179626 0.453186 +vt 0.132874 0.499939 +vt 0.132874 0.453186 +vt 0.179749 0.453064 +vt 0.179749 0.453186 +vt 0.226501 0.453064 +vt 0.226501 0.453186 +vt 0.085999 0.453064 +vt 0.085999 0.453186 +vt 0.132751 0.453064 +vt 0.132751 0.453186 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 569/1681/435 570/1682/435 571/1683/435 +f 570/1682/435 572/1684/435 571/1683/435 +f 573/1685/436 574/1686/436 575/1687/436 +f 574/1686/436 576/1688/436 575/1687/436 +f 573/1689/437 575/1690/437 571/1691/437 +f 575/1690/437 569/1692/437 571/1691/437 +f 576/1693/438 574/1694/438 570/1695/438 +f 574/1694/438 572/1696/438 570/1695/438 +f 575/1697/439 576/1698/439 569/1699/439 +f 576/1698/439 570/1700/439 569/1699/439 +f 571/1701/440 572/1702/440 573/1703/440 +f 572/1702/440 574/1704/440 573/1703/440 +o cube.067 +v 0.312500 0.375062 0.312500 +v 0.312500 0.375000 0.312500 +v 0.312500 0.375063 -0.312500 +v 0.312500 0.375000 -0.312500 +v -0.312500 0.375063 -0.312500 +v -0.312500 0.375000 -0.312500 +v -0.312500 0.375062 0.312500 +v -0.312500 0.375000 0.312500 +vt 0.046936 0.507751 +vt 0.046936 0.507874 +vt 0.085876 0.507751 +vt 0.085876 0.507874 +vt 0.125061 0.507751 +vt 0.125061 0.507874 +vt 0.164001 0.507751 +vt 0.164001 0.507874 +vt 0.124939 0.507874 +vt 0.124939 0.546814 +vt 0.085999 0.507874 +vt 0.085999 0.546814 +vt 0.164001 0.546814 +vt 0.164001 0.507874 +vt 0.125061 0.546814 +vt 0.125061 0.507874 +vt 0.164124 0.507751 +vt 0.164124 0.507874 +vt 0.203064 0.507751 +vt 0.203064 0.507874 +vt 0.085999 0.507751 +vt 0.085999 0.507874 +vt 0.124939 0.507751 +vt 0.124939 0.507874 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 577/1705/441 578/1706/441 579/1707/441 +f 578/1706/441 580/1708/441 579/1707/441 +f 581/1709/442 582/1710/442 583/1711/442 +f 582/1710/442 584/1712/442 583/1711/442 +f 581/1713/443 583/1714/443 579/1715/443 +f 583/1714/443 577/1716/443 579/1715/443 +f 584/1717/444 582/1718/444 578/1719/444 +f 582/1718/444 580/1720/444 578/1719/444 +f 583/1721/445 584/1722/445 577/1723/445 +f 584/1722/445 578/1724/445 577/1723/445 +f 579/1725/446 580/1726/446 581/1727/446 +f 580/1726/446 582/1728/446 581/1727/446 +o cube.068 +v -0.249938 2.500000 -0.531250 +v -0.249938 2.000000 -0.531250 +v -0.249938 2.500000 -0.593750 +v -0.249938 2.000000 -0.593750 +v -0.250000 2.500000 -0.593750 +v -0.250000 2.000000 -0.593750 +v -0.250000 2.500000 -0.531250 +v -0.250000 2.000000 -0.531250 +vt 0.898499 0.605408 +vt 0.898499 0.574280 +vt 0.902283 0.605408 +vt 0.902283 0.574280 +vt 0.902405 0.605408 +vt 0.902405 0.574280 +vt 0.906189 0.605408 +vt 0.906189 0.574280 +vt 0.902405 0.605530 +vt 0.902405 0.609314 +vt 0.902283 0.605530 +vt 0.902283 0.609314 +vt 0.902405 0.609314 +vt 0.902405 0.605530 +vt 0.902283 0.609314 +vt 0.902283 0.605530 +vt 0.906311 0.605408 +vt 0.906311 0.574280 +vt 0.906189 0.605408 +vt 0.906189 0.574280 +vt 0.902405 0.605408 +vt 0.902405 0.574280 +vt 0.902283 0.605408 +vt 0.902283 0.574280 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 585/1729/447 586/1730/447 587/1731/447 +f 586/1730/447 588/1732/447 587/1731/447 +f 589/1733/448 590/1734/448 591/1735/448 +f 590/1734/448 592/1736/448 591/1735/448 +f 589/1737/449 591/1738/449 587/1739/449 +f 591/1738/449 585/1740/449 587/1739/449 +f 592/1741/450 590/1742/450 586/1743/450 +f 590/1742/450 588/1744/450 586/1743/450 +f 591/1745/451 592/1746/451 585/1747/451 +f 592/1746/451 586/1748/451 585/1747/451 +f 587/1749/452 588/1750/452 589/1751/452 +f 588/1750/452 590/1752/452 589/1751/452 +o cube.069 +v 0.250062 2.500000 -0.531250 +v 0.250062 2.000000 -0.531250 +v 0.250062 2.500000 -0.593750 +v 0.250062 2.000000 -0.593750 +v 0.250000 2.500000 -0.593750 +v 0.250000 2.000000 -0.593750 +v 0.250000 2.500000 -0.531250 +v 0.250000 2.000000 -0.531250 +vt 0.898499 0.605408 +vt 0.898499 0.574280 +vt 0.902283 0.605408 +vt 0.902283 0.574280 +vt 0.902405 0.605408 +vt 0.902405 0.574280 +vt 0.906189 0.605408 +vt 0.906189 0.574280 +vt 0.902405 0.605530 +vt 0.902405 0.609314 +vt 0.902283 0.605530 +vt 0.902283 0.609314 +vt 0.902405 0.609314 +vt 0.902405 0.605530 +vt 0.902283 0.609314 +vt 0.902283 0.605530 +vt 0.906311 0.605408 +vt 0.906311 0.574280 +vt 0.906189 0.605408 +vt 0.906189 0.574280 +vt 0.902405 0.605408 +vt 0.902405 0.574280 +vt 0.902283 0.605408 +vt 0.902283 0.574280 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 593/1753/453 594/1754/453 595/1755/453 +f 594/1754/453 596/1756/453 595/1755/453 +f 597/1757/454 598/1758/454 599/1759/454 +f 598/1758/454 600/1760/454 599/1759/454 +f 597/1761/455 599/1762/455 595/1763/455 +f 599/1762/455 593/1764/455 595/1763/455 +f 600/1765/456 598/1766/456 594/1767/456 +f 598/1766/456 596/1768/456 594/1767/456 +f 599/1769/457 600/1770/457 593/1771/457 +f 600/1770/457 594/1772/457 593/1771/457 +f 595/1773/458 596/1774/458 597/1775/458 +f 596/1774/458 598/1776/458 597/1775/458 +o cube.070 +v 0.250000 2.000062 -0.531250 +v 0.250000 2.000000 -0.531250 +v 0.250000 2.000062 -0.593750 +v 0.250000 2.000000 -0.593750 +v -0.250000 2.000062 -0.593750 +v -0.250000 2.000000 -0.593750 +v -0.250000 2.000062 -0.531250 +v -0.250000 2.000000 -0.531250 +vt 0.902405 0.574158 +vt 0.902405 0.574280 +vt 0.906189 0.574158 +vt 0.906189 0.574280 +vt 0.937561 0.574158 +vt 0.937561 0.574280 +vt 0.941345 0.574158 +vt 0.941345 0.574280 +vt 0.937439 0.574280 +vt 0.937439 0.578064 +vt 0.906311 0.574280 +vt 0.906311 0.578064 +vt 0.968689 0.578064 +vt 0.968689 0.574280 +vt 0.937561 0.578064 +vt 0.937561 0.574280 +vt 0.941467 0.574158 +vt 0.941467 0.574280 +vt 0.972595 0.574158 +vt 0.972595 0.574280 +vt 0.906311 0.574158 +vt 0.906311 0.574280 +vt 0.937439 0.574158 +vt 0.937439 0.574280 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 601/1777/459 602/1778/459 603/1779/459 +f 602/1778/459 604/1780/459 603/1779/459 +f 605/1781/460 606/1782/460 607/1783/460 +f 606/1782/460 608/1784/460 607/1783/460 +f 605/1785/461 607/1786/461 603/1787/461 +f 607/1786/461 601/1788/461 603/1787/461 +f 608/1789/462 606/1790/462 602/1791/462 +f 606/1790/462 604/1792/462 602/1791/462 +f 607/1793/463 608/1794/463 601/1795/463 +f 608/1794/463 602/1796/463 601/1795/463 +f 603/1797/464 604/1798/464 605/1799/464 +f 604/1798/464 606/1800/464 605/1799/464 +o cube.071 +v 0.250000 2.500062 -0.531250 +v 0.250000 2.500000 -0.531250 +v 0.250000 2.500062 -0.593750 +v 0.250000 2.500000 -0.593750 +v -0.250000 2.500062 -0.593750 +v -0.250000 2.500000 -0.593750 +v -0.250000 2.500062 -0.531250 +v -0.250000 2.500000 -0.531250 +vt 0.902405 0.574158 +vt 0.902405 0.574280 +vt 0.906189 0.574158 +vt 0.906189 0.574280 +vt 0.937561 0.574158 +vt 0.937561 0.574280 +vt 0.941345 0.574158 +vt 0.941345 0.574280 +vt 0.937439 0.574280 +vt 0.937439 0.578064 +vt 0.906311 0.574280 +vt 0.906311 0.578064 +vt 0.968689 0.578064 +vt 0.968689 0.574280 +vt 0.937561 0.578064 +vt 0.937561 0.574280 +vt 0.941467 0.574158 +vt 0.941467 0.574280 +vt 0.972595 0.574158 +vt 0.972595 0.574280 +vt 0.906311 0.574158 +vt 0.906311 0.574280 +vt 0.937439 0.574158 +vt 0.937439 0.574280 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 609/1801/465 610/1802/465 611/1803/465 +f 610/1802/465 612/1804/465 611/1803/465 +f 613/1805/466 614/1806/466 615/1807/466 +f 614/1806/466 616/1808/466 615/1807/466 +f 613/1809/467 615/1810/467 611/1811/467 +f 615/1810/467 609/1812/467 611/1811/467 +f 616/1813/468 614/1814/468 610/1815/468 +f 614/1814/468 612/1816/468 610/1815/468 +f 615/1817/469 616/1818/469 609/1819/469 +f 616/1818/469 610/1820/469 609/1819/469 +f 611/1821/470 612/1822/470 613/1823/470 +f 612/1822/470 614/1824/470 613/1823/470 +o body.003 +v 0.562500 0.562500 0.562500 +v 0.562500 0.437500 0.562500 +v 0.562500 0.562500 -0.562500 +v 0.562500 0.437500 -0.562500 +v -0.562500 0.562500 -0.562500 +v -0.562500 0.437500 -0.562500 +v -0.562500 0.562500 0.562500 +v -0.562500 0.437500 0.562500 +vt 0.718811 0.664001 +vt 0.718811 0.656311 +vt 0.789001 0.664001 +vt 0.789001 0.656311 +vt 0.859436 0.664001 +vt 0.859436 0.656311 +vt 0.929626 0.664001 +vt 0.929626 0.656311 +vt 0.859314 0.664124 +vt 0.859314 0.734314 +vt 0.789124 0.664124 +vt 0.789124 0.734314 +vt 0.929626 0.734314 +vt 0.929626 0.664124 +vt 0.859436 0.734314 +vt 0.859436 0.664124 +vt 0.929749 0.664001 +vt 0.929749 0.656311 +vt 0.999939 0.664001 +vt 0.999939 0.656311 +vt 0.789124 0.664001 +vt 0.789124 0.656311 +vt 0.859314 0.664001 +vt 0.859314 0.656311 +vn 1.0000 0.0000 0.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +usemtl m_0 +s 1 +f 617/1825/471 618/1826/471 619/1827/471 +f 618/1826/471 620/1828/471 619/1827/471 +f 621/1829/472 622/1830/472 623/1831/472 +f 622/1830/472 624/1832/472 623/1831/472 +f 621/1833/473 623/1834/473 619/1835/473 +f 623/1834/473 617/1836/473 619/1835/473 +f 624/1837/474 622/1838/474 618/1839/474 +f 622/1838/474 620/1840/474 618/1839/474 +f 623/1841/475 624/1842/475 617/1843/475 +f 624/1842/475 618/1844/475 617/1843/475 +f 619/1845/476 620/1846/476 621/1847/476 +f 620/1846/476 622/1848/476 621/1847/476 diff --git a/src/main/resources/assets/boss_tools/models/item/rover.json b/src/main/resources/assets/boss_tools/models/item/rover.json new file mode 100644 index 000000000..942ea1a8a --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/rover.json @@ -0,0 +1,139 @@ +{ + "forge_marker": 1, + "parent": "forge:item/default", + "loader": "forge:obj", + "flip-v": true, + "model": "boss_tools:models/item/rover.obj", + "display": { + "thirdperson_righthand": { + "rotation": [ + -90, + -90, + 0 + ], + "translation": [ + -23, + 4, + 0 + ], + "scale": [ + 0.7, + 0.7, + 0.7 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + -90, + -90, + 0 + ], + "translation": [ + -23, + -7, + 0 + ], + "scale": [ + 0.7, + 0.7, + 0.7 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + 3, + 25, + -25 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + 3, + 24, + -15 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "ground": { + "translation": [ + 2, + 4, + 2 + ], + "scale": [ + 0.2, + 0.2, + 0.2 + ] + }, + "gui": { + "rotation": [ + 27, + -113, + 0 + ], + "translation": [ + -3.7, + -1.75, + 0 + ], + "scale": [ + 0.15, + 0.15, + 0.15 + ] + }, + "fixed": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + 5, + -2.5, + 0 + ], + "scale": [ + 0.2, + 0.2, + 0.2 + ] + }, + "head": { + "translation": [ + 2.5, + 9, + 2.25 + ], + "scale": [ + 0.3, + 0.3, + 0.3 + ] + } + }, + "textures": { + "m_0": "boss_tools:vehicle_items/rover", + "particle": "boss_tools:vehicle_items/rover" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/rover.mtl b/src/main/resources/assets/boss_tools/models/item/rover.mtl new file mode 100644 index 000000000..316319ccb --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/rover.mtl @@ -0,0 +1,7 @@ +newmtl m_0 +Ka 0.0 0.0 0.0 +Kd 0.8 0.8 0.8 +Ks 0.0 0.0 0.0 +map_Kd boss_tools:vehicle_items/rover +Ns 0.0 +d 1.0 \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/rover.obj b/src/main/resources/assets/boss_tools/models/item/rover.obj new file mode 100644 index 000000000..36c30034a --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/rover.obj @@ -0,0 +1,1405 @@ +mtllib rover.mtl +o cube +v -1.093750 0.000001 -3.281250 +v -1.406250 0.000001 -3.281250 +v -1.406250 0.812501 -3.281250 +v -1.093750 0.812501 -3.281250 +v -1.093750 0.000000 -2.468750 +v -1.093750 0.812500 -2.468750 +v -1.406250 0.000000 -2.468750 +v -1.406250 0.812500 -2.468750 +vt 0.500000 0.402344 +vt 0.519531 0.402344 +vt 0.519531 0.453125 +vt 0.500000 0.453125 +vt 0.449219 0.402344 +vt 0.449219 0.453125 +vt 0.570312 0.402344 +vt 0.589844 0.402344 +vt 0.589844 0.453125 +vt 0.570312 0.453125 +vt 0.519531 0.503906 +vt 0.500000 0.503906 +vt 0.539062 0.453125 +vt 0.519531 0.453125 +vt 0.519531 0.503906 +vt 0.539062 0.503906 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 1/1/2 4/4/2 6/6/2 +f 7/7/3 5/8/3 6/9/3 8/10/3 +f 2/2/4 7/7/4 8/10/4 3/3/4 +f 8/11/5 6/12/5 4/4/5 3/3/5 +f 2/13/6 1/14/6 5/15/6 7/16/6 +o cube.000 +v -1.093750 -0.000000 0.468750 +v -1.406250 -0.000000 0.468750 +v -1.406250 0.812500 0.468750 +v -1.093750 0.812500 0.468750 +v -1.093750 -0.000000 1.281250 +v -1.093750 0.812500 1.281250 +v -1.406250 -0.000000 1.281250 +v -1.406250 0.812500 1.281250 +vt 0.515625 0.503906 +vt 0.535156 0.503906 +vt 0.535156 0.554688 +vt 0.515625 0.554688 +vt 0.464844 0.503906 +vt 0.464844 0.554688 +vt 0.585938 0.503906 +vt 0.605469 0.503906 +vt 0.605469 0.554688 +vt 0.585938 0.554688 +vt 0.535156 0.605469 +vt 0.515625 0.605469 +vt 0.554688 0.554688 +vt 0.535156 0.554688 +vt 0.535156 0.605469 +vt 0.554688 0.605469 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 9/17/7 10/18/7 11/19/7 12/20/7 +f 13/21/8 9/17/8 12/20/8 14/22/8 +f 15/23/9 13/24/9 14/25/9 16/26/9 +f 10/18/10 15/23/10 16/26/10 11/19/10 +f 16/27/11 14/28/11 12/20/11 11/19/11 +f 10/29/12 9/30/12 13/31/12 15/32/12 +o cube.001 +v 1.406250 0.000001 -3.281250 +v 1.093750 0.000001 -3.281250 +v 1.093750 0.812501 -3.281250 +v 1.406250 0.812501 -3.281250 +v 1.406250 0.000000 -2.468750 +v 1.406250 0.812500 -2.468750 +v 1.093750 0.000000 -2.468750 +v 1.093750 0.812500 -2.468750 +vt 0.269531 0.453125 +vt 0.289062 0.453125 +vt 0.289062 0.503906 +vt 0.269531 0.503906 +vt 0.218750 0.453125 +vt 0.218750 0.503906 +vt 0.339844 0.453125 +vt 0.359375 0.453125 +vt 0.359375 0.503906 +vt 0.339844 0.503906 +vt 0.289062 0.554688 +vt 0.269531 0.554688 +vt 0.308594 0.503906 +vt 0.289062 0.503906 +vt 0.289062 0.554688 +vt 0.308594 0.554688 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 17/33/13 18/34/13 19/35/13 20/36/13 +f 21/37/14 17/33/14 20/36/14 22/38/14 +f 23/39/15 21/40/15 22/41/15 24/42/15 +f 18/34/16 23/39/16 24/42/16 19/35/16 +f 24/43/17 22/44/17 20/36/17 19/35/17 +f 18/45/18 17/46/18 21/47/18 23/48/18 +o cube.002 +v 1.406250 -0.000000 0.468750 +v 1.093750 -0.000000 0.468750 +v 1.093750 0.812500 0.468750 +v 1.406250 0.812500 0.468750 +v 1.406250 -0.000000 1.281250 +v 1.406250 0.812500 1.281250 +v 1.093750 -0.000000 1.281250 +v 1.093750 0.812500 1.281250 +vt 0.410156 0.453125 +vt 0.429688 0.453125 +vt 0.429688 0.503906 +vt 0.410156 0.503906 +vt 0.359375 0.453125 +vt 0.359375 0.503906 +vt 0.480469 0.453125 +vt 0.500000 0.453125 +vt 0.500000 0.503906 +vt 0.480469 0.503906 +vt 0.429688 0.554688 +vt 0.410156 0.554688 +vt 0.449219 0.503906 +vt 0.429688 0.503906 +vt 0.429688 0.554688 +vt 0.449219 0.554688 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 25/49/19 26/50/19 27/51/19 28/52/19 +f 29/53/20 25/49/20 28/52/20 30/54/20 +f 31/55/21 29/56/21 30/57/21 32/58/21 +f 26/50/22 31/55/22 32/58/22 27/51/22 +f 32/59/23 30/60/23 28/52/23 27/51/23 +f 26/61/24 25/62/24 29/63/24 31/64/24 +o cube.003 +v 0.187500 2.920380 -4.032475 +v -1.250000 2.920380 -4.032475 +v -1.250000 2.920380 -4.032475 +v 0.187500 2.920380 -4.032475 +v 0.187500 3.292432 -2.643957 +v 0.187500 3.292432 -2.643957 +v -1.250000 3.292432 -2.643957 +v -1.250000 3.292432 -2.643957 +vt 0.089844 0.910156 +vt 0.179688 0.910156 +vt 0.179688 0.910156 +vt 0.089844 0.910156 +vt 0.000000 0.910156 +vt 0.000000 0.910156 +vt 0.269531 0.910156 +vt 0.359375 0.910156 +vt 0.359375 0.910156 +vt 0.269531 0.910156 +vt 0.179688 1.000000 +vt 0.089844 1.000000 +vt 0.269531 0.910156 +vt 0.179688 0.910156 +vt 0.179688 1.000000 +vt 0.269531 1.000000 +vn 0.0000 -0.2588 -0.9659 +vn 0.0000 0.0000 -0.9659 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 0.0000 -0.0000 +vn -0.0000 0.2588 0.9659 +vn 0.0000 0.0000 0.9659 +vn -1.0000 -0.0000 -0.0000 +vn 0.0000 0.9659 -0.2588 +vn 0.0000 -0.9659 0.2588 +usemtl m_0 +s 1 +f 33/65/25 34/66/26 35/67/25 36/68/26 +f 37/69/27 33/65/28 36/68/27 38/70/28 +f 39/71/29 37/72/30 38/73/29 40/74/30 +f 34/66/31 39/71/28 40/74/31 35/67/28 +f 40/75/32 38/76/32 36/68/32 35/67/32 +f 34/77/33 33/78/33 37/79/33 39/80/33 +o cube.004 +v -0.437500 3.081056 -3.432053 +v -0.625000 3.081056 -3.432053 +v -0.625000 3.564019 -3.561463 +v -0.437500 3.564019 -3.561463 +v -0.437500 3.129585 -3.250942 +v -0.437500 3.612548 -3.380352 +v -0.625000 3.129585 -3.250942 +v -0.625000 3.612548 -3.380352 +vt 0.320312 0.511719 +vt 0.332031 0.511719 +vt 0.332031 0.542969 +vt 0.320312 0.542969 +vt 0.308594 0.511719 +vt 0.308594 0.542969 +vt 0.343750 0.511719 +vt 0.355469 0.511719 +vt 0.355469 0.542969 +vt 0.343750 0.542969 +vt 0.332031 0.554688 +vt 0.320312 0.554688 +vt 0.343750 0.542969 +vt 0.332031 0.542969 +vt 0.332031 0.554688 +vt 0.343750 0.554688 +vn 0.0000 -0.2588 -0.9659 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.2588 0.9659 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.9659 -0.2588 +vn 0.0000 -0.9659 0.2588 +usemtl m_0 +s 1 +f 41/81/34 42/82/34 43/83/34 44/84/34 +f 45/85/35 41/81/35 44/84/35 46/86/35 +f 47/87/36 45/88/36 46/89/36 48/90/36 +f 42/82/37 47/87/37 48/90/37 43/83/37 +f 48/91/38 46/92/38 44/84/38 43/83/38 +f 42/93/39 41/94/39 45/95/39 47/96/39 +o cube.005 +v 1.093750 0.468751 -3.281250 +v -1.093750 0.468751 -3.281250 +v -1.093750 0.656251 -3.281250 +v 1.093750 0.656251 -3.281250 +v 1.093750 0.468750 1.281250 +v 1.093750 0.656250 1.281250 +v -1.093750 0.468750 1.281250 +v -1.093750 0.656250 1.281250 +vt 0.285156 0.703125 +vt 0.421875 0.703125 +vt 0.421875 0.714844 +vt 0.285156 0.714844 +vt 0.000000 0.703125 +vt 0.000000 0.714844 +vt 0.707031 0.703125 +vt 0.843750 0.703125 +vt 0.843750 0.714844 +vt 0.707031 0.714844 +vt 0.421875 1.000000 +vt 0.285156 1.000000 +vt 0.558594 0.714844 +vt 0.421875 0.714844 +vt 0.421875 1.000000 +vt 0.558594 1.000000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 49/97/40 50/98/40 51/99/40 52/100/40 +f 53/101/41 49/97/41 52/100/41 54/102/41 +f 55/103/42 53/104/42 54/105/42 56/106/42 +f 50/98/43 55/103/43 56/106/43 51/99/43 +f 56/107/44 54/108/44 52/100/44 51/99/44 +f 50/109/45 49/110/45 53/111/45 55/112/45 +o cube.006 +v 0.937500 0.625000 -0.781250 +v -0.937500 0.625000 -0.781250 +v -0.937500 0.812500 -0.781250 +v 0.937500 0.812500 -0.781250 +v 0.937500 0.625000 0.656250 +v 0.937500 0.812500 0.656250 +v -0.937500 0.625000 0.656250 +v -0.937500 0.812500 0.656250 +vt 0.089844 0.601562 +vt 0.207031 0.601562 +vt 0.207031 0.613281 +vt 0.089844 0.613281 +vt 0.000000 0.601562 +vt 0.000000 0.613281 +vt 0.296875 0.601562 +vt 0.414062 0.601562 +vt 0.414062 0.613281 +vt 0.296875 0.613281 +vt 0.207031 0.703125 +vt 0.089844 0.703125 +vt 0.324219 0.613281 +vt 0.207031 0.613281 +vt 0.207031 0.703125 +vt 0.324219 0.703125 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 57/113/46 58/114/46 59/115/46 60/116/46 +f 61/117/47 57/113/47 60/116/47 62/118/47 +f 63/119/48 61/120/48 62/121/48 64/122/48 +f 58/114/49 63/119/49 64/122/49 59/115/49 +f 64/123/50 62/124/50 60/116/50 59/115/50 +f 58/125/51 57/126/51 61/127/51 63/128/51 +o cube.007 +v 0.937500 0.626337 0.604605 +v -0.937500 0.626337 0.604605 +v -0.937500 2.175469 0.808553 +v 0.937500 2.175469 0.808553 +v 0.937500 0.601863 0.790501 +v 0.937500 2.150995 0.994449 +v -0.937500 0.601863 0.790501 +v -0.937500 2.150995 0.994449 +vt 0.011719 0.800781 +vt 0.128906 0.800781 +vt 0.128906 0.898438 +vt 0.011719 0.898438 +vt 0.000000 0.800781 +vt 0.000000 0.898438 +vt 0.140625 0.800781 +vt 0.257812 0.800781 +vt 0.257812 0.898438 +vt 0.140625 0.898438 +vt 0.128906 0.910156 +vt 0.011719 0.910156 +vt 0.246094 0.898438 +vt 0.128906 0.898438 +vt 0.128906 0.910156 +vt 0.246094 0.910156 +vn 0.0000 0.1305 -0.9914 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.1305 0.9914 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.9914 0.1305 +vn 0.0000 -0.9914 -0.1305 +usemtl m_0 +s 1 +f 65/129/52 66/130/52 67/131/52 68/132/52 +f 69/133/53 65/129/53 68/132/53 70/134/53 +f 71/135/54 69/136/54 70/137/54 72/138/54 +f 66/130/55 71/135/55 72/138/55 67/131/55 +f 72/139/56 70/140/56 68/132/56 67/131/56 +f 66/141/57 65/142/57 69/143/57 71/144/57 +o cube.008 +v 0.781250 0.625000 1.093750 +v -0.781250 0.625000 1.093750 +v -0.781250 2.187500 1.093750 +v 0.781250 2.187500 1.093750 +v 0.781250 0.625000 1.281250 +v 0.781250 2.187500 1.281250 +v -0.781250 0.625000 1.281250 +v -0.781250 2.187500 1.281250 +vt 0.011719 0.492188 +vt 0.109375 0.492188 +vt 0.109375 0.589844 +vt 0.011719 0.589844 +vt 0.000000 0.492188 +vt 0.000000 0.589844 +vt 0.121094 0.492188 +vt 0.218750 0.492188 +vt 0.218750 0.589844 +vt 0.121094 0.589844 +vt 0.109375 0.601562 +vt 0.011719 0.601562 +vt 0.207031 0.589844 +vt 0.109375 0.589844 +vt 0.109375 0.601562 +vt 0.207031 0.601562 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 73/145/58 74/146/58 75/147/58 76/148/58 +f 77/149/59 73/145/59 76/148/59 78/150/59 +f 79/151/60 77/152/60 78/153/60 80/154/60 +f 74/146/61 79/151/61 80/154/61 75/147/61 +f 80/155/62 78/156/62 76/148/62 75/147/62 +f 74/157/63 73/158/63 77/159/63 79/160/63 +o cube.009 +v 0.156250 0.625001 -3.281250 +v -0.781250 0.625001 -3.281250 +v -0.781250 1.540278 -3.078338 +v 0.156250 1.540278 -3.078338 +v 0.156250 0.625001 -3.281250 +v 0.156250 1.540278 -3.078338 +v -0.781250 0.625001 -3.281250 +v -0.781250 1.540278 -3.078338 +vt 0.226562 0.394531 +vt 0.285156 0.394531 +vt 0.285156 0.453125 +vt 0.226562 0.453125 +vt 0.226562 0.394531 +vt 0.226562 0.453125 +vt 0.285156 0.394531 +vt 0.343750 0.394531 +vt 0.343750 0.453125 +vt 0.285156 0.453125 +vt 0.343750 0.453125 +vt 0.285156 0.453125 +vt 0.285156 0.453125 +vt 0.343750 0.453125 +vn 0.0000 0.2164 -0.9763 +vn 0.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.2164 0.9763 +vn -1.0000 -0.0000 0.0000 +vn -0.0000 0.9763 0.2164 +vn 0.0000 0.0000 0.2164 +vn 0.0000 -0.9763 -0.2164 +vn 0.0000 0.0000 -0.2164 +usemtl m_0 +s 1 +f 81/161/64 82/162/64 83/163/64 84/164/64 +f 85/165/65 81/161/66 84/164/65 86/166/66 +f 87/167/67 85/168/67 86/169/67 88/170/67 +f 82/162/65 87/167/68 88/170/65 83/163/68 +f 88/170/69 86/166/70 84/164/69 83/163/70 +f 82/171/71 81/172/72 85/173/71 87/174/72 +o cube.010 +v 0.781250 0.625001 -3.437500 +v 0.156250 0.625001 -3.437500 +v 0.156250 0.812501 -3.437500 +v 0.781250 0.812501 -3.437500 +v 0.781250 0.625000 -2.625000 +v 0.781250 0.812500 -2.625000 +v 0.156250 0.625000 -2.625000 +v 0.156250 0.812500 -2.625000 +vt 0.050781 0.429688 +vt 0.089844 0.429688 +vt 0.089844 0.441406 +vt 0.050781 0.441406 +vt 0.000000 0.429688 +vt 0.000000 0.441406 +vt 0.140625 0.429688 +vt 0.179688 0.429688 +vt 0.179688 0.441406 +vt 0.140625 0.441406 +vt 0.089844 0.492188 +vt 0.050781 0.492188 +vt 0.128906 0.441406 +vt 0.089844 0.441406 +vt 0.089844 0.492188 +vt 0.128906 0.492188 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 89/175/73 90/176/73 91/177/73 92/178/73 +f 93/179/74 89/175/74 92/178/74 94/180/74 +f 95/181/75 93/182/75 94/183/75 96/184/75 +f 90/176/76 95/181/76 96/184/76 91/177/76 +f 96/185/77 94/186/77 92/178/77 91/177/77 +f 90/187/78 89/188/78 93/189/78 95/190/78 +o cube.011 +v 0.656250 0.781251 -3.281250 +v 0.468750 0.781251 -3.281250 +v 0.468750 0.968751 -3.281250 +v 0.656250 0.968751 -3.281250 +v 0.656250 0.781250 -3.093750 +v 0.656250 0.968750 -3.093750 +v 0.468750 0.781250 -3.093750 +v 0.468750 0.968750 -3.093750 +vt 0.058594 0.718750 +vt 0.070312 0.718750 +vt 0.070312 0.730469 +vt 0.058594 0.730469 +vt 0.046875 0.718750 +vt 0.046875 0.730469 +vt 0.082031 0.718750 +vt 0.093750 0.718750 +vt 0.093750 0.730469 +vt 0.082031 0.730469 +vt 0.070312 0.742188 +vt 0.058594 0.742188 +vt 0.082031 0.730469 +vt 0.070312 0.730469 +vt 0.070312 0.742188 +vt 0.082031 0.742188 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 97/191/79 98/192/79 99/193/79 100/194/79 +f 101/195/80 97/191/80 100/194/80 102/196/80 +f 103/197/81 101/198/81 102/199/81 104/200/81 +f 98/192/82 103/197/82 104/200/82 99/193/82 +f 104/201/83 102/202/83 100/194/83 99/193/83 +f 98/203/84 97/204/84 101/205/84 103/206/84 +o cube.012 +v 0.812500 0.937501 -3.437500 +v 0.312500 0.937501 -3.437500 +v 0.312500 1.250001 -3.437500 +v 0.812500 1.250001 -3.437500 +v 0.812500 0.937500 -2.937500 +v 0.812500 1.250000 -2.937500 +v 0.312500 0.937500 -2.937500 +v 0.312500 1.250000 -2.937500 +vt 0.570312 0.453125 +vt 0.601562 0.453125 +vt 0.601562 0.472656 +vt 0.570312 0.472656 +vt 0.539062 0.453125 +vt 0.539062 0.472656 +vt 0.632812 0.453125 +vt 0.664062 0.453125 +vt 0.664062 0.472656 +vt 0.632812 0.472656 +vt 0.601562 0.503906 +vt 0.570312 0.503906 +vt 0.632812 0.472656 +vt 0.601562 0.472656 +vt 0.601562 0.503906 +vt 0.632812 0.503906 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 105/207/85 106/208/85 107/209/85 108/210/85 +f 109/211/86 105/207/86 108/210/86 110/212/86 +f 111/213/87 109/214/87 110/215/87 112/216/87 +f 106/208/88 111/213/88 112/216/88 107/209/88 +f 112/217/89 110/218/89 108/210/89 107/209/89 +f 106/219/90 105/220/90 109/221/90 111/222/90 +o cube.013 +v 0.812500 1.406251 -3.437500 +v 0.312500 1.406251 -3.437500 +v 0.312500 1.718751 -3.437500 +v 0.812500 1.718751 -3.437500 +v 0.812500 1.406250 -2.937500 +v 0.812500 1.718750 -2.937500 +v 0.312500 1.406250 -2.937500 +v 0.312500 1.718750 -2.937500 +vt 0.562500 0.652344 +vt 0.593750 0.652344 +vt 0.593750 0.671875 +vt 0.562500 0.671875 +vt 0.531250 0.652344 +vt 0.531250 0.671875 +vt 0.625000 0.652344 +vt 0.656250 0.652344 +vt 0.656250 0.671875 +vt 0.625000 0.671875 +vt 0.593750 0.703125 +vt 0.562500 0.703125 +vt 0.625000 0.671875 +vt 0.593750 0.671875 +vt 0.593750 0.703125 +vt 0.625000 0.703125 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 113/223/91 114/224/91 115/225/91 116/226/91 +f 117/227/92 113/223/92 116/226/92 118/228/92 +f 119/229/93 117/230/93 118/231/93 120/232/93 +f 114/224/94 119/229/94 120/232/94 115/225/94 +f 120/233/95 118/234/95 116/226/95 115/225/95 +f 114/235/96 113/236/96 117/237/96 119/238/96 +o cube.014 +v 0.656250 1.250000 -3.281250 +v 0.468750 1.250000 -3.281250 +v 0.468750 1.437500 -3.281250 +v 0.656250 1.437500 -3.281250 +v 0.656250 1.250000 -3.093750 +v 0.656250 1.437500 -3.093750 +v 0.468750 1.250000 -3.093750 +v 0.468750 1.437500 -3.093750 +vt 0.011719 0.718750 +vt 0.023438 0.718750 +vt 0.023438 0.730469 +vt 0.011719 0.730469 +vt 0.000000 0.718750 +vt 0.000000 0.730469 +vt 0.035156 0.718750 +vt 0.046875 0.718750 +vt 0.046875 0.730469 +vt 0.035156 0.730469 +vt 0.023438 0.742188 +vt 0.011719 0.742188 +vt 0.035156 0.730469 +vt 0.023438 0.730469 +vt 0.023438 0.742188 +vt 0.035156 0.742188 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +usemtl m_0 +s 1 +f 121/239/97 122/240/97 123/241/97 124/242/97 +f 125/243/98 121/239/98 124/242/98 126/244/98 +f 127/245/99 125/246/99 126/247/99 128/248/99 +f 122/240/100 127/245/100 128/248/100 123/241/100 +f 128/249/101 126/250/101 124/242/101 123/241/101 +f 122/251/102 121/252/102 125/253/102 127/254/102 +o cube.015 +v 0.468750 0.625001 -3.593750 +v -0.468750 0.625001 -3.593750 +v -0.468750 0.812501 -3.593750 +v 0.468750 0.812501 -3.593750 +v 0.468750 0.625001 -3.406250 +v 0.468750 0.812501 -3.406250 +v -0.468750 0.625001 -3.406250 +v -0.468750 0.812501 -3.406250 +vt 0.136719 0.726562 +vt 0.195312 0.726562 +vt 0.195312 0.738281 +vt 0.136719 0.738281 +vt 0.125000 0.726562 +vt 0.125000 0.738281 +vt 0.207031 0.726562 +vt 0.265625 0.726562 +vt 0.265625 0.738281 +vt 0.207031 0.738281 +vt 0.195312 0.750000 +vt 0.136719 0.750000 +vt 0.253906 0.738281 +vt 0.195312 0.738281 +vt 0.195312 0.750000 +vt 0.253906 0.750000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 129/255/103 130/256/103 131/257/103 132/258/103 +f 133/259/104 129/255/104 132/258/104 134/260/104 +f 135/261/105 133/262/105 134/263/105 136/264/105 +f 130/256/106 135/261/106 136/264/106 131/257/106 +f 136/265/107 134/266/107 132/258/107 131/257/107 +f 130/267/108 129/268/108 133/269/108 135/270/108 +o cube.016 +v 0.187500 0.625001 -3.437500 +v -0.312500 0.625001 -3.437500 +v -0.312500 0.812501 -3.437500 +v 0.187500 0.812501 -3.437500 +v 0.187500 0.625001 -3.250000 +v 0.187500 0.812501 -3.250000 +v -0.312500 0.625001 -3.250000 +v -0.312500 0.812501 -3.250000 +vt 0.011719 0.925781 +vt 0.042969 0.925781 +vt 0.042969 0.937500 +vt 0.011719 0.937500 +vt 0.000000 0.925781 +vt 0.000000 0.937500 +vt 0.054688 0.925781 +vt 0.085938 0.925781 +vt 0.085938 0.937500 +vt 0.054688 0.937500 +vt 0.042969 0.949219 +vt 0.011719 0.949219 +vt 0.074219 0.937500 +vt 0.042969 0.937500 +vt 0.042969 0.949219 +vt 0.074219 0.949219 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +usemtl m_0 +s 1 +f 137/271/109 138/272/109 139/273/109 140/274/109 +f 141/275/110 137/271/110 140/274/110 142/276/110 +f 143/277/111 141/278/111 142/279/111 144/280/111 +f 138/272/112 143/277/112 144/280/112 139/273/112 +f 144/281/113 142/282/113 140/274/113 139/273/113 +f 138/283/114 137/284/114 141/285/114 143/286/114 +o cube.017 +v 0.468750 0.613213 -3.857226 +v -0.468750 0.613213 -3.857226 +v -0.468750 0.613213 -3.857226 +v 0.468750 0.613213 -3.857226 +v 0.468750 0.781119 -3.593666 +v 0.468750 0.781119 -3.593666 +v -0.468750 0.781119 -3.593666 +v -0.468750 0.781119 -3.593666 +vt 0.019531 0.742188 +vt 0.078125 0.742188 +vt 0.078125 0.742188 +vt 0.019531 0.742188 +vt 0.000000 0.742188 +vt 0.000000 0.742188 +vt 0.097656 0.742188 +vt 0.156250 0.742188 +vt 0.156250 0.742188 +vt 0.097656 0.742188 +vt 0.078125 0.761719 +vt 0.019531 0.761719 +vt 0.136719 0.742188 +vt 0.078125 0.742188 +vt 0.078125 0.761719 +vt 0.136719 0.761719 +vn 0.0000 -0.5373 -0.8434 +vn 0.0000 0.0000 -0.8434 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 0.0000 0.0000 +vn -0.0000 0.5373 0.8434 +vn 0.0000 0.0000 0.8434 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 0.8434 -0.5373 +vn 0.0000 -0.8434 0.5373 +usemtl m_0 +s 1 +f 145/287/115 146/288/116 147/289/115 148/290/116 +f 149/291/117 145/287/118 148/290/117 150/292/118 +f 151/293/119 149/294/120 150/295/119 152/296/120 +f 146/288/121 151/293/118 152/296/121 147/289/118 +f 152/297/122 150/298/122 148/290/122 147/289/122 +f 146/299/123 145/300/123 149/301/123 151/302/123 +o cube.018 +v -0.437500 0.468751 -3.437500 +v -0.625000 0.468751 -3.437500 +v -0.625000 3.156250 -3.437500 +v -0.437500 3.156250 -3.437500 +v -0.437500 0.468751 -3.250000 +v -0.437500 3.156250 -3.250000 +v -0.625000 0.468751 -3.250000 +v -0.625000 3.156250 -3.250000 +vt 0.191406 0.285156 +vt 0.203125 0.285156 +vt 0.203125 0.453125 +vt 0.191406 0.453125 +vt 0.179688 0.285156 +vt 0.179688 0.453125 +vt 0.214844 0.285156 +vt 0.226562 0.285156 +vt 0.226562 0.453125 +vt 0.214844 0.453125 +vt 0.203125 0.464844 +vt 0.191406 0.464844 +vt 0.214844 0.453125 +vt 0.203125 0.453125 +vt 0.203125 0.464844 +vt 0.214844 0.464844 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +usemtl m_0 +s 1 +f 153/303/124 154/304/124 155/305/124 156/306/124 +f 157/307/125 153/303/125 156/306/125 158/308/125 +f 159/309/126 157/310/126 158/311/126 160/312/126 +f 154/304/127 159/309/127 160/312/127 155/305/127 +f 160/313/128 158/314/128 156/306/128 155/305/128 +f 154/315/129 153/316/129 157/317/129 159/318/129 +o cube.019 +v 0.625000 0.625000 -2.656250 +v -0.625000 0.625000 -2.656250 +v -0.625000 1.250000 -2.656250 +v 0.625000 1.250000 -2.656250 +v 0.625000 0.625000 -1.843750 +v 0.625000 1.250000 -1.843750 +v -0.625000 0.625000 -1.843750 +v -0.625000 1.250000 -1.843750 +vt 0.375000 0.613281 +vt 0.453125 0.613281 +vt 0.453125 0.652344 +vt 0.375000 0.652344 +vt 0.324219 0.613281 +vt 0.324219 0.652344 +vt 0.503906 0.613281 +vt 0.582031 0.613281 +vt 0.582031 0.652344 +vt 0.503906 0.652344 +vt 0.453125 0.703125 +vt 0.375000 0.703125 +vt 0.531250 0.652344 +vt 0.453125 0.652344 +vt 0.453125 0.703125 +vt 0.531250 0.703125 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 161/319/130 162/320/130 163/321/130 164/322/130 +f 165/323/131 161/319/131 164/322/131 166/324/131 +f 167/325/132 165/326/132 166/327/132 168/328/132 +f 162/320/133 167/325/133 168/328/133 163/321/133 +f 168/329/134 166/330/134 164/322/134 163/321/134 +f 162/331/135 161/332/135 165/333/135 167/334/135 +o cube.020 +v 1.093750 0.312500 0.781250 +v -1.093750 0.312500 0.781250 +v -1.093750 0.500000 0.781250 +v 1.093750 0.500000 0.781250 +v 1.093750 0.312500 0.968750 +v 1.093750 0.500000 0.968750 +v -1.093750 0.312500 0.968750 +v -1.093750 0.500000 0.968750 +vt 0.230469 0.554688 +vt 0.367188 0.554688 +vt 0.367188 0.566406 +vt 0.230469 0.566406 +vt 0.218750 0.554688 +vt 0.218750 0.566406 +vt 0.378906 0.554688 +vt 0.515625 0.554688 +vt 0.515625 0.566406 +vt 0.378906 0.566406 +vt 0.367188 0.578125 +vt 0.230469 0.578125 +vt 0.503906 0.566406 +vt 0.367188 0.566406 +vt 0.367188 0.578125 +vt 0.503906 0.578125 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 169/335/136 170/336/136 171/337/136 172/338/136 +f 173/339/137 169/335/137 172/338/137 174/340/137 +f 175/341/138 173/342/138 174/343/138 176/344/138 +f 170/336/139 175/341/139 176/344/139 171/337/139 +f 176/345/140 174/346/140 172/338/140 171/337/140 +f 170/347/141 169/348/141 173/349/141 175/350/141 +o cube.021 +v 1.093750 0.312500 -2.968750 +v -1.093750 0.312500 -2.968750 +v -1.093750 0.500000 -2.968750 +v 1.093750 0.500000 -2.968750 +v 1.093750 0.312500 -2.781250 +v 1.093750 0.500000 -2.781250 +v -1.093750 0.312500 -2.781250 +v -1.093750 0.500000 -2.781250 +vt 0.230469 0.578125 +vt 0.367188 0.578125 +vt 0.367188 0.589844 +vt 0.230469 0.589844 +vt 0.218750 0.578125 +vt 0.218750 0.589844 +vt 0.378906 0.578125 +vt 0.515625 0.578125 +vt 0.515625 0.589844 +vt 0.378906 0.589844 +vt 0.367188 0.601562 +vt 0.230469 0.601562 +vt 0.503906 0.589844 +vt 0.367188 0.589844 +vt 0.367188 0.601562 +vt 0.503906 0.601562 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 177/351/142 178/352/142 179/353/142 180/354/142 +f 181/355/143 177/351/143 180/354/143 182/356/143 +f 183/357/144 181/358/144 182/359/144 184/360/144 +f 178/352/145 183/357/145 184/360/145 179/353/145 +f 184/361/146 182/362/146 180/354/146 179/353/146 +f 178/363/147 177/364/147 181/365/147 183/366/147 +o cube.022 +v -1.093750 0.976563 -3.117187 +v -1.406250 0.976563 -3.117187 +v -1.406250 0.976563 -3.117187 +v -1.093750 0.976563 -3.117187 +v -1.093750 0.976563 -2.304687 +v -1.093750 0.976563 -2.304687 +v -1.406250 0.976563 -2.304687 +v -1.406250 0.976563 -2.304687 +vt 0.050781 0.652344 +vt 0.070312 0.652344 +vt 0.070312 0.652344 +vt 0.050781 0.652344 +vt 0.000000 0.652344 +vt 0.000000 0.652344 +vt 0.121094 0.652344 +vt 0.140625 0.652344 +vt 0.140625 0.652344 +vt 0.121094 0.652344 +vt 0.070312 0.703125 +vt 0.050781 0.703125 +vt 0.089844 0.652344 +vt 0.070312 0.652344 +vt 0.070312 0.703125 +vt 0.089844 0.703125 +vn 0.0000 -0.0000 -1.0000 +vn 0.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 185/367/148 186/368/148 187/369/148 188/370/148 +f 189/371/149 185/367/149 188/370/149 190/372/149 +f 191/373/150 189/374/150 190/375/150 192/376/150 +f 186/368/149 191/373/149 192/376/149 187/369/149 +f 192/377/151 190/378/151 188/370/151 187/369/151 +f 186/379/152 185/380/152 189/381/152 191/382/152 +o cube.023 +v -1.093750 0.164063 -2.304688 +v -1.406250 0.164063 -2.304688 +v -1.406250 0.976563 -2.304687 +v -1.093750 0.976563 -2.304687 +v -1.093750 0.164063 -2.304688 +v -1.093750 0.976563 -2.304687 +v -1.406250 0.164063 -2.304688 +v -1.406250 0.976563 -2.304687 +vt 0.218750 0.503906 +vt 0.238281 0.503906 +vt 0.238281 0.554688 +vt 0.218750 0.554688 +vt 0.218750 0.503906 +vt 0.218750 0.554688 +vt 0.238281 0.503906 +vt 0.257812 0.503906 +vt 0.257812 0.554688 +vt 0.238281 0.554688 +vt 0.257812 0.554688 +vt 0.238281 0.554688 +vt 0.238281 0.554688 +vt 0.257812 0.554688 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn -1.0000 -0.0000 0.0000 +vn -0.0000 1.0000 -0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 193/383/153 194/384/153 195/385/153 196/386/153 +f 197/387/154 193/383/155 196/386/154 198/388/155 +f 199/389/156 197/390/156 198/391/156 200/392/156 +f 194/384/154 199/389/157 200/392/154 195/385/157 +f 200/392/158 198/388/154 196/386/158 195/385/154 +f 194/393/159 193/394/154 197/395/159 199/396/154 +o cube.024 +v -1.093750 0.976562 0.632813 +v -1.406250 0.976562 0.632813 +v -1.406250 0.976562 0.632813 +v -1.093750 0.976562 0.632813 +v -1.093750 0.976562 1.445313 +v -1.093750 0.976562 1.445313 +v -1.406250 0.976562 1.445313 +v -1.406250 0.976562 1.445313 +vt 0.234375 0.750000 +vt 0.253906 0.750000 +vt 0.253906 0.750000 +vt 0.234375 0.750000 +vt 0.183594 0.750000 +vt 0.183594 0.750000 +vt 0.304688 0.750000 +vt 0.324219 0.750000 +vt 0.324219 0.750000 +vt 0.304688 0.750000 +vt 0.253906 0.800781 +vt 0.234375 0.800781 +vt 0.273438 0.750000 +vt 0.253906 0.750000 +vt 0.253906 0.800781 +vt 0.273438 0.800781 +vn 0.0000 -0.0000 -1.0000 +vn 0.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 201/397/160 202/398/160 203/399/160 204/400/160 +f 205/401/161 201/397/161 204/400/161 206/402/161 +f 207/403/162 205/404/162 206/405/162 208/406/162 +f 202/398/161 207/403/161 208/406/161 203/399/161 +f 208/407/163 206/408/163 204/400/163 203/399/163 +f 202/409/164 201/410/164 205/411/164 207/412/164 +o cube.025 +v -1.093750 0.164062 1.445312 +v -1.406250 0.164062 1.445312 +v -1.406250 0.976562 1.445313 +v -1.093750 0.976562 1.445313 +v -1.093750 0.164062 1.445312 +v -1.093750 0.976562 1.445313 +v -1.406250 0.164062 1.445312 +v -1.406250 0.976562 1.445313 +vt 0.324219 0.652344 +vt 0.343750 0.652344 +vt 0.343750 0.703125 +vt 0.324219 0.703125 +vt 0.324219 0.652344 +vt 0.324219 0.703125 +vt 0.343750 0.652344 +vt 0.363281 0.652344 +vt 0.363281 0.703125 +vt 0.343750 0.703125 +vt 0.363281 0.703125 +vt 0.343750 0.703125 +vt 0.343750 0.703125 +vt 0.363281 0.703125 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn -1.0000 -0.0000 0.0000 +vn -0.0000 1.0000 -0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 209/413/165 210/414/165 211/415/165 212/416/165 +f 213/417/166 209/413/167 212/416/166 214/418/167 +f 215/419/168 213/420/168 214/421/168 216/422/168 +f 210/414/166 215/419/169 216/422/166 211/415/169 +f 216/422/170 214/418/166 212/416/170 211/415/166 +f 210/423/171 209/424/166 213/425/171 215/426/166 +o cube.026 +v 1.406250 0.164062 1.445312 +v 1.093750 0.164062 1.445312 +v 1.093750 0.976562 1.445313 +v 1.406250 0.976562 1.445313 +v 1.406250 0.164062 1.445312 +v 1.406250 0.976562 1.445313 +v 1.093750 0.164062 1.445312 +v 1.093750 0.976562 1.445313 +vt 0.000000 0.652344 +vt 0.019531 0.652344 +vt 0.019531 0.703125 +vt 0.000000 0.703125 +vt 0.000000 0.652344 +vt 0.000000 0.703125 +vt 0.019531 0.652344 +vt 0.039062 0.652344 +vt 0.039062 0.703125 +vt 0.019531 0.703125 +vt 0.039062 0.703125 +vt 0.019531 0.703125 +vt 0.019531 0.703125 +vt 0.039062 0.703125 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn -1.0000 -0.0000 0.0000 +vn -0.0000 1.0000 -0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 217/427/172 218/428/172 219/429/172 220/430/172 +f 221/431/173 217/427/174 220/430/173 222/432/174 +f 223/433/175 221/434/175 222/435/175 224/436/175 +f 218/428/173 223/433/176 224/436/173 219/429/176 +f 224/436/177 222/432/173 220/430/177 219/429/173 +f 218/437/178 217/438/173 221/439/178 223/440/173 +o cube.027 +v 1.406250 0.976562 0.664063 +v 1.093750 0.976562 0.664063 +v 1.093750 0.976562 0.664063 +v 1.406250 0.976562 0.664063 +v 1.406250 0.976562 1.476563 +v 1.406250 0.976562 1.476563 +v 1.093750 0.976562 1.476563 +v 1.093750 0.976562 1.476563 +vt 0.195312 0.750000 +vt 0.214844 0.750000 +vt 0.214844 0.750000 +vt 0.195312 0.750000 +vt 0.144531 0.750000 +vt 0.144531 0.750000 +vt 0.265625 0.750000 +vt 0.285156 0.750000 +vt 0.285156 0.750000 +vt 0.265625 0.750000 +vt 0.214844 0.800781 +vt 0.195312 0.800781 +vt 0.234375 0.750000 +vt 0.214844 0.750000 +vt 0.214844 0.800781 +vt 0.234375 0.800781 +vn 0.0000 -0.0000 -1.0000 +vn 0.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 225/441/179 226/442/179 227/443/179 228/444/179 +f 229/445/180 225/441/180 228/444/180 230/446/180 +f 231/447/181 229/448/181 230/449/181 232/450/181 +f 226/442/180 231/447/180 232/450/180 227/443/180 +f 232/451/182 230/452/182 228/444/182 227/443/182 +f 226/453/183 225/454/183 229/455/183 231/456/183 +o cube.028 +v 1.406250 0.976563 -3.110937 +v 1.093750 0.976563 -3.110937 +v 1.093750 0.976563 -3.110937 +v 1.406250 0.976563 -3.110937 +v 1.406250 0.976563 -2.298437 +v 1.406250 0.976563 -2.298437 +v 1.093750 0.976563 -2.298437 +v 1.093750 0.976563 -2.298437 +vt 0.050781 0.949219 +vt 0.070312 0.949219 +vt 0.070312 0.949219 +vt 0.050781 0.949219 +vt 0.000000 0.949219 +vt 0.000000 0.949219 +vt 0.121094 0.949219 +vt 0.140625 0.949219 +vt 0.140625 0.949219 +vt 0.121094 0.949219 +vt 0.070312 1.000000 +vt 0.050781 1.000000 +vt 0.089844 0.949219 +vt 0.070312 0.949219 +vt 0.070312 1.000000 +vt 0.089844 1.000000 +vn 0.0000 -0.0000 -1.0000 +vn 0.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 233/457/184 234/458/184 235/459/184 236/460/184 +f 237/461/185 233/457/185 236/460/185 238/462/185 +f 239/463/186 237/464/186 238/465/186 240/466/186 +f 234/458/185 239/463/185 240/466/185 235/459/185 +f 240/467/187 238/468/187 236/460/187 235/459/187 +f 234/469/188 233/470/188 237/471/188 239/472/188 +o cube.029 +v 1.406250 0.164063 -2.304688 +v 1.093750 0.164063 -2.304688 +v 1.093750 0.976563 -2.304687 +v 1.406250 0.976563 -2.304687 +v 1.406250 0.164063 -2.304688 +v 1.406250 0.976563 -2.304687 +v 1.093750 0.164063 -2.304688 +v 1.093750 0.976563 -2.304687 +vt 0.000000 0.949219 +vt 0.019531 0.949219 +vt 0.019531 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.949219 +vt 0.000000 1.000000 +vt 0.019531 0.949219 +vt 0.039062 0.949219 +vt 0.039062 1.000000 +vt 0.019531 1.000000 +vt 0.039062 1.000000 +vt 0.019531 1.000000 +vt 0.019531 1.000000 +vt 0.039062 1.000000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn -1.0000 -0.0000 0.0000 +vn -0.0000 1.0000 -0.0000 +vn 0.0000 -1.0000 -0.0000 +usemtl m_0 +s 1 +f 241/473/189 242/474/189 243/475/189 244/476/189 +f 245/477/190 241/473/191 244/476/190 246/478/191 +f 247/479/192 245/480/192 246/481/192 248/482/192 +f 242/474/190 247/479/193 248/482/190 243/475/193 +f 248/482/194 246/478/190 244/476/194 243/475/190 +f 242/483/195 241/484/190 245/485/195 247/486/190 +o cube.030 +v -0.781250 0.625000 -2.343750 +v -0.781250 0.625000 -2.343750 +v -0.781250 0.937500 -2.343750 +v -0.781250 0.937500 -2.343750 +v -0.781250 0.625000 -0.781250 +v -0.781250 0.937500 -0.781250 +v -0.781250 0.625000 -0.781250 +v -0.781250 0.937500 -0.781250 +vt 0.097656 0.761719 +vt 0.097656 0.761719 +vt 0.097656 0.781250 +vt 0.097656 0.781250 +vt 0.000000 0.761719 +vt 0.000000 0.781250 +vt 0.195312 0.761719 +vt 0.195312 0.761719 +vt 0.195312 0.781250 +vt 0.195312 0.781250 +vt 0.097656 0.878906 +vt 0.097656 0.878906 +vt 0.097656 0.781250 +vt 0.097656 0.781250 +vt 0.097656 0.878906 +vt 0.097656 0.878906 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 0.0000 0.0000 +usemtl m_0 +s 1 +f 249/487/196 250/488/196 251/489/196 252/490/196 +f 253/491/197 249/487/197 252/490/197 254/492/197 +f 255/493/198 253/494/198 254/495/198 256/496/198 +f 250/488/199 255/493/199 256/496/199 251/489/199 +f 256/497/200 254/498/200 252/490/200 251/489/200 +f 250/499/200 249/500/200 253/501/200 255/502/200 +o cube.031 +v 0.781250 0.625000 -2.343750 +v 0.781250 0.625000 -2.343750 +v 0.781250 0.937500 -2.343750 +v 0.781250 0.937500 -2.343750 +v 0.781250 0.625000 -0.781250 +v 0.781250 0.937500 -0.781250 +v 0.781250 0.625000 -0.781250 +v 0.781250 0.937500 -0.781250 +vt 0.097656 0.781250 +vt 0.097656 0.781250 +vt 0.097656 0.800781 +vt 0.097656 0.800781 +vt 0.000000 0.781250 +vt 0.000000 0.800781 +vt 0.195312 0.781250 +vt 0.195312 0.781250 +vt 0.195312 0.800781 +vt 0.195312 0.800781 +vt 0.097656 0.898438 +vt 0.097656 0.898438 +vt 0.097656 0.800781 +vt 0.097656 0.800781 +vt 0.097656 0.898438 +vt 0.097656 0.898438 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 -0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 0.0000 +usemtl m_0 +s 1 +f 257/503/201 258/504/201 259/505/201 260/506/201 +f 261/507/202 257/503/202 260/506/202 262/508/202 +f 263/509/203 261/510/203 262/511/203 264/512/203 +f 258/504/204 263/509/204 264/512/204 259/505/204 +f 264/513/205 262/514/205 260/506/205 259/505/205 +f 258/515/205 257/516/205 261/517/205 263/518/205 +o cube.032 +v 0.156250 0.624324 -3.278199 +v -0.781250 0.624324 -3.278199 +v -0.781250 1.539602 -3.075287 +v 0.156250 1.539602 -3.075287 +v 0.156250 0.624324 -3.278199 +v 0.156250 1.539602 -3.075287 +v -0.781250 0.624324 -3.278199 +v -0.781250 1.539602 -3.075287 +vt 0.285156 0.394531 +vt 0.343750 0.394531 +vt 0.343750 0.453125 +vt 0.285156 0.453125 +vt 0.285156 0.394531 +vt 0.285156 0.453125 +vt 0.343750 0.394531 +vt 0.402344 0.394531 +vt 0.402344 0.453125 +vt 0.343750 0.453125 +vt 0.402344 0.453125 +vt 0.343750 0.453125 +vt 0.343750 0.453125 +vt 0.402344 0.453125 +vn 0.0000 0.2164 -0.9763 +vn 0.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.2164 0.9763 +vn -1.0000 -0.0000 0.0000 +vn -0.0000 0.9763 0.2164 +vn 0.0000 0.0000 0.2164 +vn 0.0000 -0.9763 -0.2164 +vn 0.0000 0.0000 -0.2164 +usemtl m_0 +s 1 +f 265/519/206 266/520/206 267/521/206 268/522/206 +f 269/523/207 265/519/208 268/522/207 270/524/208 +f 271/525/209 269/526/209 270/527/209 272/528/209 +f 266/520/207 271/525/210 272/528/207 267/521/210 +f 272/528/211 270/524/212 268/522/211 267/521/212 +f 266/529/213 265/530/214 269/531/213 271/532/214 +o cube.033 +v 0.937500 0.626337 0.604605 +v -0.937500 0.626337 0.604605 +v -0.937500 2.175469 0.808553 +v 0.937500 2.175469 0.808553 +v 0.937500 0.626337 0.604605 +v 0.937500 2.175469 0.808553 +v -0.937500 0.626337 0.604605 +v -0.937500 2.175469 0.808553 +vt 0.558594 0.902344 +vt 0.675781 0.902344 +vt 0.675781 1.000000 +vt 0.558594 1.000000 +vt 0.558594 0.902344 +vt 0.558594 1.000000 +vt 0.675781 0.902344 +vt 0.792969 0.902344 +vt 0.792969 1.000000 +vt 0.675781 1.000000 +vt 0.792969 1.000000 +vt 0.675781 1.000000 +vt 0.675781 1.000000 +vt 0.792969 1.000000 +vn 0.0000 0.1305 -0.9914 +vn 0.0000 0.0000 -0.0000 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 -0.1305 0.9914 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 0.9914 0.1305 +vn 0.0000 0.0000 0.1305 +vn 0.0000 -0.9914 -0.1305 +vn 0.0000 0.0000 -0.1305 +usemtl m_0 +s 1 +f 273/533/215 274/534/215 275/535/215 276/536/215 +f 277/537/216 273/533/217 276/536/216 278/538/217 +f 279/539/218 277/540/218 278/541/218 280/542/218 +f 274/534/216 279/539/219 280/542/216 275/535/219 +f 280/542/220 278/538/221 276/536/220 275/535/221 +f 274/543/222 273/544/223 277/545/222 279/546/223 +o cube.034 +v 0.937500 0.601863 0.790501 +v -0.937500 0.601863 0.790501 +v -0.937500 2.150995 0.994449 +v 0.937500 2.150995 0.994449 +v 0.937500 0.601863 0.790501 +v 0.937500 2.150995 0.994449 +v -0.937500 0.601863 0.790501 +v -0.937500 2.150995 0.994449 +vt 0.558594 0.902344 +vt 0.675781 0.902344 +vt 0.675781 1.000000 +vt 0.558594 1.000000 +vt 0.558594 0.902344 +vt 0.558594 1.000000 +vt 0.675781 0.902344 +vt 0.792969 0.902344 +vt 0.792969 1.000000 +vt 0.675781 1.000000 +vt 0.792969 1.000000 +vt 0.675781 1.000000 +vt 0.675781 1.000000 +vt 0.792969 1.000000 +vn 0.0000 0.1305 -0.9914 +vn 0.0000 0.0000 -0.0000 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 -0.1305 0.9914 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 0.9914 0.1305 +vn 0.0000 0.0000 0.1305 +vn 0.0000 -0.9914 -0.1305 +vn 0.0000 0.0000 -0.1305 +usemtl m_0 +s 1 +f 281/547/224 282/548/224 283/549/224 284/550/224 +f 285/551/225 281/547/226 284/550/225 286/552/226 +f 287/553/227 285/554/227 286/555/227 288/556/227 +f 282/548/225 287/553/228 288/556/225 283/549/228 +f 288/556/229 286/552/230 284/550/229 283/549/230 +f 282/557/231 281/558/232 285/559/231 287/560/232 diff --git a/src/main/resources/assets/boss_tools/models/item/rusted_iron_pillar_block.json b/src/main/resources/assets/boss_tools/models/item/rusted_iron_pillar_block.json new file mode 100644 index 000000000..edca12a85 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/rusted_iron_pillar_block.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/rusted_iron_pillar_block", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/rusted_iron_plating_block.json b/src/main/resources/assets/boss_tools/models/item/rusted_iron_plating_block.json new file mode 100644 index 000000000..efa37f5ef --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/rusted_iron_plating_block.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/rusted_iron_plating_block", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/silicon_block.json b/src/main/resources/assets/boss_tools/models/item/silicon_block.json new file mode 100644 index 000000000..472e60190 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/silicon_block.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/silicon_block", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/silicon_ingot.json b/src/main/resources/assets/boss_tools/models/item/silicon_ingot.json new file mode 100644 index 000000000..8772a14ec --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/silicon_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/item_silicon" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/silicon_nugget.json b/src/main/resources/assets/boss_tools/models/item/silicon_nugget.json new file mode 100644 index 000000000..560d45953 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/silicon_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/silicon_nugget" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/sky_stone.json b/src/main/resources/assets/boss_tools/models/item/sky_stone.json new file mode 100644 index 000000000..e8806623b --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/sky_stone.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/sky_stone", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/solar_panel.json b/src/main/resources/assets/boss_tools/models/item/solar_panel.json new file mode 100644 index 000000000..0da756e94 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/solar_panel.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/solar_panel", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/space_boots.json b/src/main/resources/assets/boss_tools/models/item/space_boots.json new file mode 100644 index 000000000..4dc1616be --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/space_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/space_boots" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/space_pants.json b/src/main/resources/assets/boss_tools/models/item/space_pants.json new file mode 100644 index 000000000..70e9d4b5f --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/space_pants.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/space_leggings" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/space_suit.json b/src/main/resources/assets/boss_tools/models/item/space_suit.json new file mode 100644 index 000000000..fcc1a2946 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/space_suit.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/space_suit" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/star_crawler_spawn_egg.json b/src/main/resources/assets/boss_tools/models/item/star_crawler_spawn_egg.json new file mode 100644 index 000000000..7a2c6da81 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/star_crawler_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/steel_axe.json b/src/main/resources/assets/boss_tools/models/item/steel_axe.json new file mode 100644 index 000000000..97d34daf0 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/steel_axe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "boss_tools:items/steel_axe" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/steel_block.json b/src/main/resources/assets/boss_tools/models/item/steel_block.json new file mode 100644 index 000000000..adaffc213 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/steel_block.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/steel_block", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/steel_hoe.json b/src/main/resources/assets/boss_tools/models/item/steel_hoe.json new file mode 100644 index 000000000..e7b720ed6 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/steel_hoe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "boss_tools:items/steel_hoe" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/steel_ingot.json b/src/main/resources/assets/boss_tools/models/item/steel_ingot.json new file mode 100644 index 000000000..cadc842f7 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/steel_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/item_steel" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/steel_nugget.json b/src/main/resources/assets/boss_tools/models/item/steel_nugget.json new file mode 100644 index 000000000..eb8fb310b --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/steel_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/steel_nugget" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/steel_pickaxe.json b/src/main/resources/assets/boss_tools/models/item/steel_pickaxe.json new file mode 100644 index 000000000..61602d120 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/steel_pickaxe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "boss_tools:items/steel_pickaxe" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/steel_shovel.json b/src/main/resources/assets/boss_tools/models/item/steel_shovel.json new file mode 100644 index 000000000..19f33edd2 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/steel_shovel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "boss_tools:items/steel_shovel" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/steel_sword.json b/src/main/resources/assets/boss_tools/models/item/steel_sword.json new file mode 100644 index 000000000..3b9eab603 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/steel_sword.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "boss_tools:items/steel_sword" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/venus_coal_ore.json b/src/main/resources/assets/boss_tools/models/item/venus_coal_ore.json new file mode 100644 index 000000000..b91b9f827 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/venus_coal_ore.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/venus_coal_ore", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/venus_diamond_ore.json b/src/main/resources/assets/boss_tools/models/item/venus_diamond_ore.json new file mode 100644 index 000000000..9fad8de76 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/venus_diamond_ore.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/venus_diamond_ore", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/venus_gold_ore.json b/src/main/resources/assets/boss_tools/models/item/venus_gold_ore.json new file mode 100644 index 000000000..83a825060 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/venus_gold_ore.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/venus_gold_ore", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/venus_sand.json b/src/main/resources/assets/boss_tools/models/item/venus_sand.json new file mode 100644 index 000000000..83c300539 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/venus_sand.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/venus_sand", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/venus_sandstone.json b/src/main/resources/assets/boss_tools/models/item/venus_sandstone.json new file mode 100644 index 000000000..95c4bbaae --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/venus_sandstone.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/venus_sandstone", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/venus_stone.json b/src/main/resources/assets/boss_tools/models/item/venus_stone.json new file mode 100644 index 000000000..a712556ce --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/venus_stone.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/venus_stone", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/wall_coal_torch.json b/src/main/resources/assets/boss_tools/models/item/wall_coal_torch.json new file mode 100644 index 000000000..6b49c1892 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/wall_coal_torch.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/torch" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/water_pump.json b/src/main/resources/assets/boss_tools/models/item/water_pump.json new file mode 100644 index 000000000..1fa17acef --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/water_pump.json @@ -0,0 +1,22 @@ +{ + "parent": "boss_tools:block/water_pump", + "display": { + "thirdperson": { + "rotation": [ + 10, + -45, + 170 + ], + "translation": [ + 0, + 1.5, + -2.75 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/models/item/wheel.json b/src/main/resources/assets/boss_tools/models/item/wheel.json new file mode 100644 index 000000000..3dcc6ccb9 --- /dev/null +++ b/src/main/resources/assets/boss_tools/models/item/wheel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "boss_tools:items/wheel" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/particles/large_flame.json b/src/main/resources/assets/boss_tools/particles/large_flame.json new file mode 100644 index 000000000..fe51b31b5 --- /dev/null +++ b/src/main/resources/assets/boss_tools/particles/large_flame.json @@ -0,0 +1,8 @@ +{ + "textures": [ + "boss_tools:large_flame_1", + "boss_tools:large_flame_2", + "boss_tools:large_flame_3", + "boss_tools:large_flame_4" + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/particles/smoke.json b/src/main/resources/assets/boss_tools/particles/smoke.json new file mode 100644 index 000000000..271261099 --- /dev/null +++ b/src/main/resources/assets/boss_tools/particles/smoke.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:generic_7", + "minecraft:generic_6", + "minecraft:generic_5", + "minecraft:generic_4", + "minecraft:generic_3", + "minecraft:generic_2", + "minecraft:generic_1", + "minecraft:generic_0" + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/particles/venus_rain.json b/src/main/resources/assets/boss_tools/particles/venus_rain.json new file mode 100644 index 000000000..aefbc6adb --- /dev/null +++ b/src/main/resources/assets/boss_tools/particles/venus_rain.json @@ -0,0 +1,8 @@ +{ + "textures": [ + "boss_tools:venus_rain_1", + "boss_tools:venus_rain_2", + "boss_tools:venus_rain_3", + "boss_tools:venus_rain_4" + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/sounds.json b/src/main/resources/assets/boss_tools/sounds.json new file mode 100644 index 000000000..b5e223a81 --- /dev/null +++ b/src/main/resources/assets/boss_tools/sounds.json @@ -0,0 +1,11 @@ +{ + "rocket_fly": { + "category": "neutral", + "sounds": [ + { + "name": "boss_tools:rocket_fly", + "stream": false + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/sounds/rocket_fly.ogg b/src/main/resources/assets/boss_tools/sounds/rocket_fly.ogg new file mode 100644 index 000000000..573c9bcd3 Binary files /dev/null and b/src/main/resources/assets/boss_tools/sounds/rocket_fly.ogg differ diff --git a/src/main/resources/assets/boss_tools/textures/animated_arrow_empty.png b/src/main/resources/assets/boss_tools/textures/animated_arrow_empty.png new file mode 100644 index 000000000..499582233 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/animated_arrow_empty.png differ diff --git a/src/main/resources/assets/boss_tools/textures/animated_arrow_full.png b/src/main/resources/assets/boss_tools/textures/animated_arrow_full.png new file mode 100644 index 000000000..0021dcf37 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/animated_arrow_full.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/basic_electric_smelter_front_active.png b/src/main/resources/assets/boss_tools/textures/blocks/basic_electric_smelter_front_active.png new file mode 100644 index 000000000..94b97c38c Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/basic_electric_smelter_front_active.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/basic_electric_smelter_front_inactive.png b/src/main/resources/assets/boss_tools/textures/blocks/basic_electric_smelter_front_inactive.png new file mode 100644 index 000000000..8cc25dcca Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/basic_electric_smelter_front_inactive.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/block_solar_panel_side.png b/src/main/resources/assets/boss_tools/textures/blocks/block_solar_panel_side.png new file mode 100644 index 000000000..15b94bb5a Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/block_solar_panel_side.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/block_solar_panel_top.png b/src/main/resources/assets/boss_tools/textures/blocks/block_solar_panel_top.png new file mode 100644 index 000000000..fa76d8d5d Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/block_solar_panel_top.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/blue_iron_plating_block.png b/src/main/resources/assets/boss_tools/textures/blocks/blue_iron_plating_block.png new file mode 100644 index 000000000..5625176ce Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/blue_iron_plating_block.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/blue_iron_plating_block_top.png b/src/main/resources/assets/boss_tools/textures/blocks/blue_iron_plating_block_top.png new file mode 100644 index 000000000..bbcc8a788 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/blue_iron_plating_block_top.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/coal_lantern.png b/src/main/resources/assets/boss_tools/textures/blocks/coal_lantern.png new file mode 100644 index 000000000..0f556bf97 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/coal_lantern.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/coal_lantern.png.mcmeta b/src/main/resources/assets/boss_tools/textures/blocks/coal_lantern.png.mcmeta new file mode 100644 index 000000000..5169aabdc --- /dev/null +++ b/src/main/resources/assets/boss_tools/textures/blocks/coal_lantern.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/textures/blocks/coal_torch.png b/src/main/resources/assets/boss_tools/textures/blocks/coal_torch.png new file mode 100644 index 000000000..2505d9c77 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/coal_torch.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/compressorfront.png b/src/main/resources/assets/boss_tools/textures/blocks/compressorfront.png new file mode 100644 index 000000000..adb942924 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/compressorfront.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/compressorfront_inactive.png b/src/main/resources/assets/boss_tools/textures/blocks/compressorfront_inactive.png new file mode 100644 index 000000000..ca69d34b0 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/compressorfront_inactive.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/cracked_moon_bricks.png b/src/main/resources/assets/boss_tools/textures/blocks/cracked_moon_bricks.png new file mode 100644 index 000000000..663c777ff Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/cracked_moon_bricks.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/desh_block.png b/src/main/resources/assets/boss_tools/textures/blocks/desh_block.png new file mode 100644 index 000000000..5a222f60b Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/desh_block.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/flag_blue.png b/src/main/resources/assets/boss_tools/textures/blocks/flag_blue.png new file mode 100644 index 000000000..623563abc Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/flag_blue.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/flag_brown.png b/src/main/resources/assets/boss_tools/textures/blocks/flag_brown.png new file mode 100644 index 000000000..b45b85c92 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/flag_brown.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/flag_cyan.png b/src/main/resources/assets/boss_tools/textures/blocks/flag_cyan.png new file mode 100644 index 000000000..037b642cb Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/flag_cyan.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/flag_gray.png b/src/main/resources/assets/boss_tools/textures/blocks/flag_gray.png new file mode 100644 index 000000000..9d0464d30 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/flag_gray.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/flag_green.png b/src/main/resources/assets/boss_tools/textures/blocks/flag_green.png new file mode 100644 index 000000000..31db7580b Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/flag_green.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/flag_light_blue.png b/src/main/resources/assets/boss_tools/textures/blocks/flag_light_blue.png new file mode 100644 index 000000000..e3795eb26 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/flag_light_blue.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/flag_lime.png b/src/main/resources/assets/boss_tools/textures/blocks/flag_lime.png new file mode 100644 index 000000000..c6efd7a62 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/flag_lime.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/flag_magenta.png b/src/main/resources/assets/boss_tools/textures/blocks/flag_magenta.png new file mode 100644 index 000000000..dfce002f1 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/flag_magenta.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/flag_orange.png b/src/main/resources/assets/boss_tools/textures/blocks/flag_orange.png new file mode 100644 index 000000000..aa98cdd8a Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/flag_orange.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/flag_pink.png b/src/main/resources/assets/boss_tools/textures/blocks/flag_pink.png new file mode 100644 index 000000000..f5f1def10 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/flag_pink.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/flag_purple.png b/src/main/resources/assets/boss_tools/textures/blocks/flag_purple.png new file mode 100644 index 000000000..f8e005a91 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/flag_purple.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/flag_red.png b/src/main/resources/assets/boss_tools/textures/blocks/flag_red.png new file mode 100644 index 000000000..fec88ddeb Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/flag_red.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/flag_white.png b/src/main/resources/assets/boss_tools/textures/blocks/flag_white.png new file mode 100644 index 000000000..e44317be3 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/flag_white.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/flag_yellow.png b/src/main/resources/assets/boss_tools/textures/blocks/flag_yellow.png new file mode 100644 index 000000000..7a037758e Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/flag_yellow.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/fluid_fuel_flow.png b/src/main/resources/assets/boss_tools/textures/blocks/fluid_fuel_flow.png new file mode 100644 index 000000000..5f840b7ac Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/fluid_fuel_flow.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/fluid_fuel_flow.png.mcmeta b/src/main/resources/assets/boss_tools/textures/blocks/fluid_fuel_flow.png.mcmeta new file mode 100644 index 000000000..ac71c1db9 --- /dev/null +++ b/src/main/resources/assets/boss_tools/textures/blocks/fluid_fuel_flow.png.mcmeta @@ -0,0 +1,40 @@ +{ + "animation": { + "frametime": 2, + "interpolate": false, + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/textures/blocks/fluid_fuel_still.png b/src/main/resources/assets/boss_tools/textures/blocks/fluid_fuel_still.png new file mode 100644 index 000000000..d6eb73735 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/fluid_fuel_still.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/fluid_fuel_still.png.mcmeta b/src/main/resources/assets/boss_tools/textures/blocks/fluid_fuel_still.png.mcmeta new file mode 100644 index 000000000..ac71c1db9 --- /dev/null +++ b/src/main/resources/assets/boss_tools/textures/blocks/fluid_fuel_still.png.mcmeta @@ -0,0 +1,40 @@ +{ + "animation": { + "frametime": 2, + "interpolate": false, + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/textures/blocks/fluid_oil_flow.png b/src/main/resources/assets/boss_tools/textures/blocks/fluid_oil_flow.png new file mode 100644 index 000000000..69ffcd23b Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/fluid_oil_flow.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/fluid_oil_flow.png.mcmeta b/src/main/resources/assets/boss_tools/textures/blocks/fluid_oil_flow.png.mcmeta new file mode 100644 index 000000000..4f0718ac9 --- /dev/null +++ b/src/main/resources/assets/boss_tools/textures/blocks/fluid_oil_flow.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/boss_tools/textures/blocks/fluid_oil_still.png b/src/main/resources/assets/boss_tools/textures/blocks/fluid_oil_still.png new file mode 100644 index 000000000..c3e9d4bf1 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/fluid_oil_still.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/fluid_oil_still.png.mcmeta b/src/main/resources/assets/boss_tools/textures/blocks/fluid_oil_still.png.mcmeta new file mode 100644 index 000000000..0645f48c6 --- /dev/null +++ b/src/main/resources/assets/boss_tools/textures/blocks/fluid_oil_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/boss_tools/textures/blocks/fuelmaker.png b/src/main/resources/assets/boss_tools/textures/blocks/fuelmaker.png new file mode 100644 index 000000000..87aee714e Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/fuelmaker.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/fuelmaker_inactive.png b/src/main/resources/assets/boss_tools/textures/blocks/fuelmaker_inactive.png new file mode 100644 index 000000000..72584d4d2 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/fuelmaker_inactive.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/generator_front.png b/src/main/resources/assets/boss_tools/textures/blocks/generator_front.png new file mode 100644 index 000000000..4f897443e Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/generator_front.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/generator_front_inactive.png b/src/main/resources/assets/boss_tools/textures/blocks/generator_front_inactive.png new file mode 100644 index 000000000..10a92aa00 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/generator_front_inactive.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/generator_top.png b/src/main/resources/assets/boss_tools/textures/blocks/generator_top.png new file mode 100644 index 000000000..d77c6ef22 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/generator_top.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/infernal_spire_side.png b/src/main/resources/assets/boss_tools/textures/blocks/infernal_spire_side.png new file mode 100644 index 000000000..c684eaa44 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/infernal_spire_side.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/infernal_spire_top.png b/src/main/resources/assets/boss_tools/textures/blocks/infernal_spire_top.png new file mode 100644 index 000000000..67e1eb3f0 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/infernal_spire_top.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/iron_mark_bottom.png b/src/main/resources/assets/boss_tools/textures/blocks/iron_mark_bottom.png new file mode 100644 index 000000000..2dfe65ea9 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/iron_mark_bottom.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/iron_mark_side.png b/src/main/resources/assets/boss_tools/textures/blocks/iron_mark_side.png new file mode 100644 index 000000000..e5c183719 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/iron_mark_side.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/iron_plating_block.png b/src/main/resources/assets/boss_tools/textures/blocks/iron_plating_block.png new file mode 100644 index 000000000..e781b78bf Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/iron_plating_block.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/launch_pad.png b/src/main/resources/assets/boss_tools/textures/blocks/launch_pad.png new file mode 100644 index 000000000..591f7f9da Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/launch_pad.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/machineback.png b/src/main/resources/assets/boss_tools/textures/blocks/machineback.png new file mode 100644 index 000000000..119a3380a Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/machineback.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/machinedown.png b/src/main/resources/assets/boss_tools/textures/blocks/machinedown.png new file mode 100644 index 000000000..eeedda65d Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/machinedown.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/machineside.png b/src/main/resources/assets/boss_tools/textures/blocks/machineside.png new file mode 100644 index 000000000..f0953bdd0 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/machineside.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/mars_ore_diamond.png b/src/main/resources/assets/boss_tools/textures/blocks/mars_ore_diamond.png new file mode 100644 index 000000000..e85981e44 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/mars_ore_diamond.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/mars_ore_ice.png b/src/main/resources/assets/boss_tools/textures/blocks/mars_ore_ice.png new file mode 100644 index 000000000..f62070419 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/mars_ore_ice.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/mars_ore_iron.png b/src/main/resources/assets/boss_tools/textures/blocks/mars_ore_iron.png new file mode 100644 index 000000000..d24cb7fe6 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/mars_ore_iron.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/mars_ore_silicon.png b/src/main/resources/assets/boss_tools/textures/blocks/mars_ore_silicon.png new file mode 100644 index 000000000..7d1e24722 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/mars_ore_silicon.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/mars_sand.png b/src/main/resources/assets/boss_tools/textures/blocks/mars_sand.png new file mode 100644 index 000000000..8e102b0b2 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/mars_sand.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/mars_stone.png b/src/main/resources/assets/boss_tools/textures/blocks/mars_stone.png new file mode 100644 index 000000000..793b3e7a6 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/mars_stone.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/mercury_cobblestone.png b/src/main/resources/assets/boss_tools/textures/blocks/mercury_cobblestone.png new file mode 100644 index 000000000..c05b97fde Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/mercury_cobblestone.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/mercury_iron_ore.png b/src/main/resources/assets/boss_tools/textures/blocks/mercury_iron_ore.png new file mode 100644 index 000000000..5ff1d15bf Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/mercury_iron_ore.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/mercury_stone.png b/src/main/resources/assets/boss_tools/textures/blocks/mercury_stone.png new file mode 100644 index 000000000..d629e0202 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/mercury_stone.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/moon_bricks.png b/src/main/resources/assets/boss_tools/textures/blocks/moon_bricks.png new file mode 100644 index 000000000..dc80836df Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/moon_bricks.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/moon_glowstone_ore.png b/src/main/resources/assets/boss_tools/textures/blocks/moon_glowstone_ore.png new file mode 100644 index 000000000..d38412e5f Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/moon_glowstone_ore.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/moon_ore_chesse.png b/src/main/resources/assets/boss_tools/textures/blocks/moon_ore_chesse.png new file mode 100644 index 000000000..438a718c6 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/moon_ore_chesse.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/moon_ore_desh.png b/src/main/resources/assets/boss_tools/textures/blocks/moon_ore_desh.png new file mode 100644 index 000000000..1ee8a827b Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/moon_ore_desh.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/moon_ore_iron.png b/src/main/resources/assets/boss_tools/textures/blocks/moon_ore_iron.png new file mode 100644 index 000000000..a8f1f5d78 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/moon_ore_iron.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/moon_sand.png b/src/main/resources/assets/boss_tools/textures/blocks/moon_sand.png new file mode 100644 index 000000000..9e633f71a Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/moon_sand.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/moon_stone.png b/src/main/resources/assets/boss_tools/textures/blocks/moon_stone.png new file mode 100644 index 000000000..a5a5d0e14 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/moon_stone.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/nasa_workbench_main.png b/src/main/resources/assets/boss_tools/textures/blocks/nasa_workbench_main.png new file mode 100644 index 000000000..1d937705b Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/nasa_workbench_main.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/oxygengeneratorfront.png b/src/main/resources/assets/boss_tools/textures/blocks/oxygengeneratorfront.png new file mode 100644 index 000000000..cf4044a5a Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/oxygengeneratorfront.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/oxygengeneratorfront_1.png b/src/main/resources/assets/boss_tools/textures/blocks/oxygengeneratorfront_1.png new file mode 100644 index 000000000..ca2b83552 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/oxygengeneratorfront_1.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/oxygengeneratorfront_1_aktivated.png b/src/main/resources/assets/boss_tools/textures/blocks/oxygengeneratorfront_1_aktivated.png new file mode 100644 index 000000000..633adb4c0 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/oxygengeneratorfront_1_aktivated.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/oxygengeneratorfront_inactive.png b/src/main/resources/assets/boss_tools/textures/blocks/oxygengeneratorfront_inactive.png new file mode 100644 index 000000000..b026cf37f Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/oxygengeneratorfront_inactive.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/rusted_iron_pillar_block.png b/src/main/resources/assets/boss_tools/textures/blocks/rusted_iron_pillar_block.png new file mode 100644 index 000000000..64b1490bd Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/rusted_iron_pillar_block.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/rusted_iron_pillar_block_top.png b/src/main/resources/assets/boss_tools/textures/blocks/rusted_iron_pillar_block_top.png new file mode 100644 index 000000000..8cd0f938e Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/rusted_iron_pillar_block_top.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/rusted_iron_plating_block.png b/src/main/resources/assets/boss_tools/textures/blocks/rusted_iron_plating_block.png new file mode 100644 index 000000000..d1f911ffc Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/rusted_iron_plating_block.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/silicon_block.png b/src/main/resources/assets/boss_tools/textures/blocks/silicon_block.png new file mode 100644 index 000000000..a4159fbb4 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/silicon_block.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/sky_stone.png b/src/main/resources/assets/boss_tools/textures/blocks/sky_stone.png new file mode 100644 index 000000000..1dc241c57 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/sky_stone.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/steel_block.png b/src/main/resources/assets/boss_tools/textures/blocks/steel_block.png new file mode 100644 index 000000000..eca7a11a6 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/steel_block.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/vent_back.png b/src/main/resources/assets/boss_tools/textures/blocks/vent_back.png new file mode 100644 index 000000000..ef8cd93e6 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/vent_back.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/venus_coal_ore.png b/src/main/resources/assets/boss_tools/textures/blocks/venus_coal_ore.png new file mode 100644 index 000000000..e92cbdb20 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/venus_coal_ore.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/venus_diamond_ore.png b/src/main/resources/assets/boss_tools/textures/blocks/venus_diamond_ore.png new file mode 100644 index 000000000..ae0664004 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/venus_diamond_ore.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/venus_gold_ore.png b/src/main/resources/assets/boss_tools/textures/blocks/venus_gold_ore.png new file mode 100644 index 000000000..c45cae5b3 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/venus_gold_ore.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/venus_sand.png b/src/main/resources/assets/boss_tools/textures/blocks/venus_sand.png new file mode 100644 index 000000000..b2e70625c Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/venus_sand.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/venus_sand_stone.png b/src/main/resources/assets/boss_tools/textures/blocks/venus_sand_stone.png new file mode 100644 index 000000000..43ee54f79 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/venus_sand_stone.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/venus_stone.png b/src/main/resources/assets/boss_tools/textures/blocks/venus_stone.png new file mode 100644 index 000000000..b8b4d2b51 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/venus_stone.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/water_pump.png b/src/main/resources/assets/boss_tools/textures/blocks/water_pump.png new file mode 100644 index 000000000..01196968c Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/water_pump.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/workbench_nasa_holder.png b/src/main/resources/assets/boss_tools/textures/blocks/workbench_nasa_holder.png new file mode 100644 index 000000000..296651bf9 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/workbench_nasa_holder.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/workbench_nasa_side.png b/src/main/resources/assets/boss_tools/textures/blocks/workbench_nasa_side.png new file mode 100644 index 000000000..a5645ae5a Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/workbench_nasa_side.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/workbench_nasa_top.png b/src/main/resources/assets/boss_tools/textures/blocks/workbench_nasa_top.png new file mode 100644 index 000000000..5324db8c9 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/workbench_nasa_top.png differ diff --git a/src/main/resources/assets/boss_tools/textures/blocks/workbench_nasa_top_2.png b/src/main/resources/assets/boss_tools/textures/blocks/workbench_nasa_top_2.png new file mode 100644 index 000000000..a01464dfe Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/blocks/workbench_nasa_top_2.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/big_green_button.png b/src/main/resources/assets/boss_tools/textures/buttons/big_green_button.png new file mode 100644 index 000000000..3c491db6d Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/big_green_button.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/big_green_button_2.png b/src/main/resources/assets/boss_tools/textures/buttons/big_green_button_2.png new file mode 100644 index 000000000..8c2c24fcf Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/big_green_button_2.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/big_red_button.png b/src/main/resources/assets/boss_tools/textures/buttons/big_red_button.png new file mode 100644 index 000000000..87144f35a Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/big_red_button.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/big_red_button_2.png b/src/main/resources/assets/boss_tools/textures/buttons/big_red_button_2.png new file mode 100644 index 000000000..e76fa769a Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/big_red_button_2.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/blue_button.png b/src/main/resources/assets/boss_tools/textures/buttons/blue_button.png new file mode 100644 index 000000000..a1ae44048 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/blue_button.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/blue_button_2.png b/src/main/resources/assets/boss_tools/textures/buttons/blue_button_2.png new file mode 100644 index 000000000..73b0a951d Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/blue_button_2.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/dark_blue_button.png b/src/main/resources/assets/boss_tools/textures/buttons/dark_blue_button.png new file mode 100644 index 000000000..2df5be265 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/dark_blue_button.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/dark_blue_button_2.png b/src/main/resources/assets/boss_tools/textures/buttons/dark_blue_button_2.png new file mode 100644 index 000000000..18a63f12a Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/dark_blue_button_2.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/green_button.png b/src/main/resources/assets/boss_tools/textures/buttons/green_button.png new file mode 100644 index 000000000..675533676 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/green_button.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/green_button_2.png b/src/main/resources/assets/boss_tools/textures/buttons/green_button_2.png new file mode 100644 index 000000000..9f730074d Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/green_button_2.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/oxygen_range_layer.png b/src/main/resources/assets/boss_tools/textures/buttons/oxygen_range_layer.png new file mode 100644 index 000000000..49e50d2db Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/oxygen_range_layer.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/oxygen_range_small_layer.png b/src/main/resources/assets/boss_tools/textures/buttons/oxygen_range_small_layer.png new file mode 100644 index 000000000..ef0594072 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/oxygen_range_small_layer.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/red_button.png b/src/main/resources/assets/boss_tools/textures/buttons/red_button.png new file mode 100644 index 000000000..ae36bafcb Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/red_button.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/red_button_2.png b/src/main/resources/assets/boss_tools/textures/buttons/red_button_2.png new file mode 100644 index 000000000..0a5f5e9b5 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/red_button_2.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/small_blue_button.png b/src/main/resources/assets/boss_tools/textures/buttons/small_blue_button.png new file mode 100644 index 000000000..dee292151 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/small_blue_button.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/small_blue_button_2.png b/src/main/resources/assets/boss_tools/textures/buttons/small_blue_button_2.png new file mode 100644 index 000000000..6d8f74eb6 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/small_blue_button_2.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/technik_button.png b/src/main/resources/assets/boss_tools/textures/buttons/technik_button.png new file mode 100644 index 000000000..2027a810f Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/technik_button.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/technik_button_2.png b/src/main/resources/assets/boss_tools/textures/buttons/technik_button_2.png new file mode 100644 index 000000000..d398f9f84 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/technik_button_2.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/technik_button_minus.png b/src/main/resources/assets/boss_tools/textures/buttons/technik_button_minus.png new file mode 100644 index 000000000..6a2f82771 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/technik_button_minus.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/technik_button_minus_2.png b/src/main/resources/assets/boss_tools/textures/buttons/technik_button_minus_2.png new file mode 100644 index 000000000..7663f2b53 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/technik_button_minus_2.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/technik_button_plus.png b/src/main/resources/assets/boss_tools/textures/buttons/technik_button_plus.png new file mode 100644 index 000000000..7a9f4a036 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/technik_button_plus.png differ diff --git a/src/main/resources/assets/boss_tools/textures/buttons/technik_button_plus_2.png b/src/main/resources/assets/boss_tools/textures/buttons/technik_button_plus_2.png new file mode 100644 index 000000000..06dccb33f Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/buttons/technik_button_plus_2.png differ diff --git a/src/main/resources/assets/boss_tools/textures/energy_empty.png b/src/main/resources/assets/boss_tools/textures/energy_empty.png new file mode 100644 index 000000000..4e1310631 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/energy_empty.png differ diff --git a/src/main/resources/assets/boss_tools/textures/energy_full.png b/src/main/resources/assets/boss_tools/textures/energy_full.png new file mode 100644 index 000000000..125794236 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/energy_full.png differ diff --git a/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien.png b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien.png new file mode 100644 index 000000000..67096e46c Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien.png differ diff --git a/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien1.png b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien1.png new file mode 100644 index 000000000..9cab74483 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien1.png differ diff --git a/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien10.png b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien10.png new file mode 100644 index 000000000..f365bfd63 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien10.png differ diff --git a/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien11.png b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien11.png new file mode 100644 index 000000000..06981990d Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien11.png differ diff --git a/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien12.png b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien12.png new file mode 100644 index 000000000..857271e94 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien12.png differ diff --git a/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien13.png b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien13.png new file mode 100644 index 000000000..15da5f99b Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien13.png differ diff --git a/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien2.png b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien2.png new file mode 100644 index 000000000..88b1e3f2a Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien2.png differ diff --git a/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien3.png b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien3.png new file mode 100644 index 000000000..7504a40f1 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien3.png differ diff --git a/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien4.png b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien4.png new file mode 100644 index 000000000..28cc13c17 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien4.png differ diff --git a/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien5.png b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien5.png new file mode 100644 index 000000000..1fe4f73b6 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien5.png differ diff --git a/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien6.png b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien6.png new file mode 100644 index 000000000..fb6bd02af Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien6.png differ diff --git a/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien7.png b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien7.png new file mode 100644 index 000000000..ac33c99f5 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien7.png differ diff --git a/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien8.png b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien8.png new file mode 100644 index 000000000..57dab798c Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien8.png differ diff --git a/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien9.png b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien9.png new file mode 100644 index 000000000..4c5b5853b Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/entities/alien/entity_alien9.png differ diff --git a/src/main/resources/assets/boss_tools/textures/entities/alien_zombie.png b/src/main/resources/assets/boss_tools/textures/entities/alien_zombie.png new file mode 100644 index 000000000..e8b33e0e7 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/entities/alien_zombie.png differ diff --git a/src/main/resources/assets/boss_tools/textures/entities/mogler_entity.png b/src/main/resources/assets/boss_tools/textures/entities/mogler_entity.png new file mode 100644 index 000000000..afd366b06 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/entities/mogler_entity.png differ diff --git a/src/main/resources/assets/boss_tools/textures/entities/pygro.png b/src/main/resources/assets/boss_tools/textures/entities/pygro.png new file mode 100644 index 000000000..bd3b9c5d2 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/entities/pygro.png differ diff --git a/src/main/resources/assets/boss_tools/textures/entities/starfish.png b/src/main/resources/assets/boss_tools/textures/entities/starfish.png new file mode 100644 index 000000000..01c22e0f3 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/entities/starfish.png differ diff --git a/src/main/resources/assets/boss_tools/textures/entities/tile_entity_box_oxygen_generator.png b/src/main/resources/assets/boss_tools/textures/entities/tile_entity_box_oxygen_generator.png new file mode 100644 index 000000000..ab4760105 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/entities/tile_entity_box_oxygen_generator.png differ diff --git a/src/main/resources/assets/boss_tools/textures/fire_off.png b/src/main/resources/assets/boss_tools/textures/fire_off.png new file mode 100644 index 000000000..93893801e Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/fire_off.png differ diff --git a/src/main/resources/assets/boss_tools/textures/fire_on.png b/src/main/resources/assets/boss_tools/textures/fire_on.png new file mode 100644 index 000000000..4c83be13e Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/fire_on.png differ diff --git a/src/main/resources/assets/boss_tools/textures/fluid_tank_back.png b/src/main/resources/assets/boss_tools/textures/fluid_tank_back.png new file mode 100644 index 000000000..541abb975 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/fluid_tank_back.png differ diff --git a/src/main/resources/assets/boss_tools/textures/fluid_tank_fore.png b/src/main/resources/assets/boss_tools/textures/fluid_tank_fore.png new file mode 100644 index 000000000..1dfc9b23e Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/fluid_tank_fore.png differ diff --git a/src/main/resources/assets/boss_tools/textures/fuel_refinery_fuel.png b/src/main/resources/assets/boss_tools/textures/fuel_refinery_fuel.png new file mode 100644 index 000000000..a4ab84f99 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/fuel_refinery_fuel.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/coal_lantern.png b/src/main/resources/assets/boss_tools/textures/items/coal_lantern.png new file mode 100644 index 000000000..b4e7d62dc Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/coal_lantern.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/coal_torch.png b/src/main/resources/assets/boss_tools/textures/items/coal_torch.png new file mode 100644 index 000000000..2505d9c77 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/coal_torch.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/compressed_desh.png b/src/main/resources/assets/boss_tools/textures/items/compressed_desh.png new file mode 100644 index 000000000..0b2c32e00 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/compressed_desh.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/compressed_silicon.png b/src/main/resources/assets/boss_tools/textures/items/compressed_silicon.png new file mode 100644 index 000000000..2a6349542 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/compressed_silicon.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/compressed_steel.png b/src/main/resources/assets/boss_tools/textures/items/compressed_steel.png new file mode 100644 index 000000000..5b4d68412 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/compressed_steel.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/desh_nugget.png b/src/main/resources/assets/boss_tools/textures/items/desh_nugget.png new file mode 100644 index 000000000..0f44c2797 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/desh_nugget.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/desh_plate.png b/src/main/resources/assets/boss_tools/textures/items/desh_plate.png new file mode 100644 index 000000000..13252e3f6 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/desh_plate.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/engine_diamond.png b/src/main/resources/assets/boss_tools/textures/items/engine_diamond.png new file mode 100644 index 000000000..ffcd74fae Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/engine_diamond.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/engine_frame.png b/src/main/resources/assets/boss_tools/textures/items/engine_frame.png new file mode 100644 index 000000000..4b036ec48 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/engine_frame.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/engine_gold.png b/src/main/resources/assets/boss_tools/textures/items/engine_gold.png new file mode 100644 index 000000000..34e5937df Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/engine_gold.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/engine_iron.png b/src/main/resources/assets/boss_tools/textures/items/engine_iron.png new file mode 100644 index 000000000..d1138b89a Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/engine_iron.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/fan.png b/src/main/resources/assets/boss_tools/textures/items/fan.png new file mode 100644 index 000000000..a117993e8 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/fan.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/iron_plate.png b/src/main/resources/assets/boss_tools/textures/items/iron_plate.png new file mode 100644 index 000000000..94049217b Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/iron_plate.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/item_chesse.png b/src/main/resources/assets/boss_tools/textures/items/item_chesse.png new file mode 100644 index 000000000..bb3fc7a8d Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/item_chesse.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/item_desh.png b/src/main/resources/assets/boss_tools/textures/items/item_desh.png new file mode 100644 index 000000000..f51cbbb1d Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/item_desh.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/item_fin.png b/src/main/resources/assets/boss_tools/textures/items/item_fin.png new file mode 100644 index 000000000..a1dc0c916 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/item_fin.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/item_hammer.png b/src/main/resources/assets/boss_tools/textures/items/item_hammer.png new file mode 100644 index 000000000..9313b6af2 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/item_hammer.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/item_ice_shard.png b/src/main/resources/assets/boss_tools/textures/items/item_ice_shard.png new file mode 100644 index 000000000..658044136 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/item_ice_shard.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/item_iron_stick.png b/src/main/resources/assets/boss_tools/textures/items/item_iron_stick.png new file mode 100644 index 000000000..a32f81581 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/item_iron_stick.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/item_oxygen_gear.png b/src/main/resources/assets/boss_tools/textures/items/item_oxygen_gear.png new file mode 100644 index 000000000..3f24891d0 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/item_oxygen_gear.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/item_silicon.png b/src/main/resources/assets/boss_tools/textures/items/item_silicon.png new file mode 100644 index 000000000..ad8f2d734 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/item_silicon.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/item_steel.png b/src/main/resources/assets/boss_tools/textures/items/item_steel.png new file mode 100644 index 000000000..5bd8d6487 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/item_steel.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/item_tank_oxygen.png b/src/main/resources/assets/boss_tools/textures/items/item_tank_oxygen.png new file mode 100644 index 000000000..f4560da3c Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/item_tank_oxygen.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/netherite_oxygen_mask.png b/src/main/resources/assets/boss_tools/textures/items/netherite_oxygen_mask.png new file mode 100644 index 000000000..5e00fa2a0 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/netherite_oxygen_mask.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/netherite_space_boots.png b/src/main/resources/assets/boss_tools/textures/items/netherite_space_boots.png new file mode 100644 index 000000000..eafc99d77 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/netherite_space_boots.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/netherite_space_pants.png b/src/main/resources/assets/boss_tools/textures/items/netherite_space_pants.png new file mode 100644 index 000000000..57951fffc Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/netherite_space_pants.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/netherite_space_suit.png b/src/main/resources/assets/boss_tools/textures/items/netherite_space_suit.png new file mode 100644 index 000000000..df4f819ca Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/netherite_space_suit.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/oxygenmask3.png b/src/main/resources/assets/boss_tools/textures/items/oxygenmask3.png new file mode 100644 index 000000000..265cc90e9 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/oxygenmask3.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/rocket_nose_cone.png b/src/main/resources/assets/boss_tools/textures/items/rocket_nose_cone.png new file mode 100644 index 000000000..4847349cd Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/rocket_nose_cone.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/silicon_nugget.png b/src/main/resources/assets/boss_tools/textures/items/silicon_nugget.png new file mode 100644 index 000000000..d24fae78d Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/silicon_nugget.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/space_boots.png b/src/main/resources/assets/boss_tools/textures/items/space_boots.png new file mode 100644 index 000000000..df53073a2 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/space_boots.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/space_leggings.png b/src/main/resources/assets/boss_tools/textures/items/space_leggings.png new file mode 100644 index 000000000..b4b6a6c4c Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/space_leggings.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/space_suit.png b/src/main/resources/assets/boss_tools/textures/items/space_suit.png new file mode 100644 index 000000000..9c39ad721 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/space_suit.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/steel_axe.png b/src/main/resources/assets/boss_tools/textures/items/steel_axe.png new file mode 100644 index 000000000..16589922c Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/steel_axe.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/steel_hoe.png b/src/main/resources/assets/boss_tools/textures/items/steel_hoe.png new file mode 100644 index 000000000..dda03afd8 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/steel_hoe.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/steel_nugget.png b/src/main/resources/assets/boss_tools/textures/items/steel_nugget.png new file mode 100644 index 000000000..125e0d498 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/steel_nugget.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/steel_pickaxe.png b/src/main/resources/assets/boss_tools/textures/items/steel_pickaxe.png new file mode 100644 index 000000000..79856bcf1 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/steel_pickaxe.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/steel_shovel.png b/src/main/resources/assets/boss_tools/textures/items/steel_shovel.png new file mode 100644 index 000000000..d216eddfe Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/steel_shovel.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/steel_sword.png b/src/main/resources/assets/boss_tools/textures/items/steel_sword.png new file mode 100644 index 000000000..11a09a188 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/steel_sword.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/tank_diamond.png b/src/main/resources/assets/boss_tools/textures/items/tank_diamond.png new file mode 100644 index 000000000..6ed78edb8 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/tank_diamond.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/tank_gold.png b/src/main/resources/assets/boss_tools/textures/items/tank_gold.png new file mode 100644 index 000000000..8a1d2f194 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/tank_gold.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/tank_iron.png b/src/main/resources/assets/boss_tools/textures/items/tank_iron.png new file mode 100644 index 000000000..b19a9546b Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/tank_iron.png differ diff --git a/src/main/resources/assets/boss_tools/textures/items/wheel.png b/src/main/resources/assets/boss_tools/textures/items/wheel.png new file mode 100644 index 000000000..2c8d88cef Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/items/wheel.png differ diff --git a/src/main/resources/assets/boss_tools/textures/jei/blast_furnace_gui_jei.png b/src/main/resources/assets/boss_tools/textures/jei/blast_furnace_gui_jei.png new file mode 100644 index 000000000..b2728eacc Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/jei/blast_furnace_gui_jei.png differ diff --git a/src/main/resources/assets/boss_tools/textures/jei/coalgeneratortexture.png b/src/main/resources/assets/boss_tools/textures/jei/coalgeneratortexture.png new file mode 100644 index 000000000..d56f747a9 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/jei/coalgeneratortexture.png differ diff --git a/src/main/resources/assets/boss_tools/textures/jei/compressor_gui_jei.png b/src/main/resources/assets/boss_tools/textures/jei/compressor_gui_jei.png new file mode 100644 index 000000000..343917a07 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/jei/compressor_gui_jei.png differ diff --git a/src/main/resources/assets/boss_tools/textures/jei/fuel_refinery_jei.png b/src/main/resources/assets/boss_tools/textures/jei/fuel_refinery_jei.png new file mode 100644 index 000000000..e1d62f554 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/jei/fuel_refinery_jei.png differ diff --git a/src/main/resources/assets/boss_tools/textures/jei/generator_gui_jei.png b/src/main/resources/assets/boss_tools/textures/jei/generator_gui_jei.png new file mode 100644 index 000000000..a3102aab4 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/jei/generator_gui_jei.png differ diff --git a/src/main/resources/assets/boss_tools/textures/jei/nasaworkbenchjei.png b/src/main/resources/assets/boss_tools/textures/jei/nasaworkbenchjei.png new file mode 100644 index 000000000..f8f61aab3 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/jei/nasaworkbenchjei.png differ diff --git a/src/main/resources/assets/boss_tools/textures/jei/oxygen_bubble_distributor_jei.png b/src/main/resources/assets/boss_tools/textures/jei/oxygen_bubble_distributor_jei.png new file mode 100644 index 000000000..29cad799a Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/jei/oxygen_bubble_distributor_jei.png differ diff --git a/src/main/resources/assets/boss_tools/textures/jei/oxygen_loader_jei.png b/src/main/resources/assets/boss_tools/textures/jei/oxygen_loader_jei.png new file mode 100644 index 000000000..e1d62f554 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/jei/oxygen_loader_jei.png differ diff --git a/src/main/resources/assets/boss_tools/textures/jei/rocket_gui_jei.png b/src/main/resources/assets/boss_tools/textures/jei/rocket_gui_jei.png new file mode 100644 index 000000000..36099d457 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/jei/rocket_gui_jei.png differ diff --git a/src/main/resources/assets/boss_tools/textures/jei/rover_jei.png b/src/main/resources/assets/boss_tools/textures/jei/rover_jei.png new file mode 100644 index 000000000..0ee4cffa1 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/jei/rover_jei.png differ diff --git a/src/main/resources/assets/boss_tools/textures/looking_arrow.png b/src/main/resources/assets/boss_tools/textures/looking_arrow.png new file mode 100644 index 000000000..40cd43a47 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/looking_arrow.png differ diff --git a/src/main/resources/assets/boss_tools/textures/milky_way.png b/src/main/resources/assets/boss_tools/textures/milky_way.png new file mode 100644 index 000000000..fa6683a48 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/milky_way.png differ diff --git a/src/main/resources/assets/boss_tools/textures/mob_effect/oxygen_bubble_effect.png b/src/main/resources/assets/boss_tools/textures/mob_effect/oxygen_bubble_effect.png new file mode 100644 index 000000000..491f25a6e Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/mob_effect/oxygen_bubble_effect.png differ diff --git a/src/main/resources/assets/boss_tools/textures/models/armor/netherite_space_suit.png b/src/main/resources/assets/boss_tools/textures/models/armor/netherite_space_suit.png new file mode 100644 index 000000000..005cf722b Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/models/armor/netherite_space_suit.png differ diff --git a/src/main/resources/assets/boss_tools/textures/models/armor/netherite_space_suit_head.png b/src/main/resources/assets/boss_tools/textures/models/armor/netherite_space_suit_head.png new file mode 100644 index 000000000..2948ddbb3 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/models/armor/netherite_space_suit_head.png differ diff --git a/src/main/resources/assets/boss_tools/textures/models/armor/netherite_space_suit_legs.png b/src/main/resources/assets/boss_tools/textures/models/armor/netherite_space_suit_legs.png new file mode 100644 index 000000000..f0bce488b Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/models/armor/netherite_space_suit_legs.png differ diff --git a/src/main/resources/assets/boss_tools/textures/models/armor/space_suit.png b/src/main/resources/assets/boss_tools/textures/models/armor/space_suit.png new file mode 100644 index 000000000..d21a694cf Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/models/armor/space_suit.png differ diff --git a/src/main/resources/assets/boss_tools/textures/models/armor/space_suit_head.png b/src/main/resources/assets/boss_tools/textures/models/armor/space_suit_head.png new file mode 100644 index 000000000..c74505421 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/models/armor/space_suit_head.png differ diff --git a/src/main/resources/assets/boss_tools/textures/models/armor/space_suit_legs.png b/src/main/resources/assets/boss_tools/textures/models/armor/space_suit_legs.png new file mode 100644 index 000000000..ec2228b0d Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/models/armor/space_suit_legs.png differ diff --git a/src/main/resources/assets/boss_tools/textures/outputslot.png b/src/main/resources/assets/boss_tools/textures/outputslot.png new file mode 100644 index 000000000..6c21320cd Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/outputslot.png differ diff --git a/src/main/resources/assets/boss_tools/textures/overlay/oxygentankcheck_empty.png b/src/main/resources/assets/boss_tools/textures/overlay/oxygentankcheck_empty.png new file mode 100644 index 000000000..e0852f8ac Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/overlay/oxygentankcheck_empty.png differ diff --git a/src/main/resources/assets/boss_tools/textures/overlay/oxygentankcheck_full.png b/src/main/resources/assets/boss_tools/textures/overlay/oxygentankcheck_full.png new file mode 100644 index 000000000..8ae01eaa8 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/overlay/oxygentankcheck_full.png differ diff --git a/src/main/resources/assets/boss_tools/textures/overlay/warning.png b/src/main/resources/assets/boss_tools/textures/overlay/warning.png new file mode 100644 index 000000000..438f7e5f5 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/overlay/warning.png differ diff --git a/src/main/resources/assets/boss_tools/textures/oxygen.png b/src/main/resources/assets/boss_tools/textures/oxygen.png new file mode 100644 index 000000000..ca6994657 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/oxygen.png differ diff --git a/src/main/resources/assets/boss_tools/textures/painting/painting_earth.png b/src/main/resources/assets/boss_tools/textures/painting/painting_earth.png new file mode 100644 index 000000000..7bcdcd52d Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/painting/painting_earth.png differ diff --git a/src/main/resources/assets/boss_tools/textures/painting/painting_galaxy.png b/src/main/resources/assets/boss_tools/textures/painting/painting_galaxy.png new file mode 100644 index 000000000..216a5e017 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/painting/painting_galaxy.png differ diff --git a/src/main/resources/assets/boss_tools/textures/painting/painting_math.png b/src/main/resources/assets/boss_tools/textures/painting/painting_math.png new file mode 100644 index 000000000..85bfa945d Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/painting/painting_math.png differ diff --git a/src/main/resources/assets/boss_tools/textures/painting/painting_planet_math.png b/src/main/resources/assets/boss_tools/textures/painting/painting_planet_math.png new file mode 100644 index 000000000..f3aa4a88b Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/painting/painting_planet_math.png differ diff --git a/src/main/resources/assets/boss_tools/textures/painting/painting_venus.png b/src/main/resources/assets/boss_tools/textures/painting/painting_venus.png new file mode 100644 index 000000000..df0233218 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/painting/painting_venus.png differ diff --git a/src/main/resources/assets/boss_tools/textures/painting_earth.png b/src/main/resources/assets/boss_tools/textures/painting_earth.png new file mode 100644 index 000000000..7bcdcd52d Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/painting_earth.png differ diff --git a/src/main/resources/assets/boss_tools/textures/painting_galaxy.png b/src/main/resources/assets/boss_tools/textures/painting_galaxy.png new file mode 100644 index 000000000..216a5e017 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/painting_galaxy.png differ diff --git a/src/main/resources/assets/boss_tools/textures/painting_math.png b/src/main/resources/assets/boss_tools/textures/painting_math.png new file mode 100644 index 000000000..85bfa945d Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/painting_math.png differ diff --git a/src/main/resources/assets/boss_tools/textures/painting_planet_marth.png b/src/main/resources/assets/boss_tools/textures/painting_planet_marth.png new file mode 100644 index 000000000..f3aa4a88b Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/painting_planet_marth.png differ diff --git a/src/main/resources/assets/boss_tools/textures/painting_venus.png b/src/main/resources/assets/boss_tools/textures/painting_venus.png new file mode 100644 index 000000000..df0233218 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/painting_venus.png differ diff --git a/src/main/resources/assets/boss_tools/textures/particle/large_flame_1.png b/src/main/resources/assets/boss_tools/textures/particle/large_flame_1.png new file mode 100644 index 000000000..8c23e42df Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/particle/large_flame_1.png differ diff --git a/src/main/resources/assets/boss_tools/textures/particle/large_flame_2.png b/src/main/resources/assets/boss_tools/textures/particle/large_flame_2.png new file mode 100644 index 000000000..8cb6d6a8a Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/particle/large_flame_2.png differ diff --git a/src/main/resources/assets/boss_tools/textures/particle/large_flame_3.png b/src/main/resources/assets/boss_tools/textures/particle/large_flame_3.png new file mode 100644 index 000000000..7130414b6 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/particle/large_flame_3.png differ diff --git a/src/main/resources/assets/boss_tools/textures/particle/large_flame_4.png b/src/main/resources/assets/boss_tools/textures/particle/large_flame_4.png new file mode 100644 index 000000000..fbc425ec3 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/particle/large_flame_4.png differ diff --git a/src/main/resources/assets/boss_tools/textures/particle/venus_rain_1.png b/src/main/resources/assets/boss_tools/textures/particle/venus_rain_1.png new file mode 100644 index 000000000..9711882d5 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/particle/venus_rain_1.png differ diff --git a/src/main/resources/assets/boss_tools/textures/particle/venus_rain_2.png b/src/main/resources/assets/boss_tools/textures/particle/venus_rain_2.png new file mode 100644 index 000000000..aac40f672 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/particle/venus_rain_2.png differ diff --git a/src/main/resources/assets/boss_tools/textures/particle/venus_rain_3.png b/src/main/resources/assets/boss_tools/textures/particle/venus_rain_3.png new file mode 100644 index 000000000..e2d693bb2 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/particle/venus_rain_3.png differ diff --git a/src/main/resources/assets/boss_tools/textures/particle/venus_rain_4.png b/src/main/resources/assets/boss_tools/textures/particle/venus_rain_4.png new file mode 100644 index 000000000..51c2617b8 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/particle/venus_rain_4.png differ diff --git a/src/main/resources/assets/boss_tools/textures/planet_bar/rocket_y.png b/src/main/resources/assets/boss_tools/textures/planet_bar/rocket_y.png new file mode 100644 index 000000000..a214c53be Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/planet_bar/rocket_y.png differ diff --git a/src/main/resources/assets/boss_tools/textures/planet_bar/rocket_y_main_earth.png b/src/main/resources/assets/boss_tools/textures/planet_bar/rocket_y_main_earth.png new file mode 100644 index 000000000..30aafd6ce Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/planet_bar/rocket_y_main_earth.png differ diff --git a/src/main/resources/assets/boss_tools/textures/planet_bar/rocket_y_main_mars.png b/src/main/resources/assets/boss_tools/textures/planet_bar/rocket_y_main_mars.png new file mode 100644 index 000000000..e0dab6807 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/planet_bar/rocket_y_main_mars.png differ diff --git a/src/main/resources/assets/boss_tools/textures/planet_bar/rocket_y_main_mercury.png b/src/main/resources/assets/boss_tools/textures/planet_bar/rocket_y_main_mercury.png new file mode 100644 index 000000000..50524e936 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/planet_bar/rocket_y_main_mercury.png differ diff --git a/src/main/resources/assets/boss_tools/textures/planet_bar/rocket_y_main_moon.png b/src/main/resources/assets/boss_tools/textures/planet_bar/rocket_y_main_moon.png new file mode 100644 index 000000000..3efddfd1a Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/planet_bar/rocket_y_main_moon.png differ diff --git a/src/main/resources/assets/boss_tools/textures/planet_bar/rocket_y_main_orbit.png b/src/main/resources/assets/boss_tools/textures/planet_bar/rocket_y_main_orbit.png new file mode 100644 index 000000000..5524fac89 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/planet_bar/rocket_y_main_orbit.png differ diff --git a/src/main/resources/assets/boss_tools/textures/planet_bar/rocket_y_main_venus.png b/src/main/resources/assets/boss_tools/textures/planet_bar/rocket_y_main_venus.png new file mode 100644 index 000000000..cfee3fbfa Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/planet_bar/rocket_y_main_venus.png differ diff --git a/src/main/resources/assets/boss_tools/textures/rocket_menu_list.png b/src/main/resources/assets/boss_tools/textures/rocket_menu_list.png new file mode 100644 index 000000000..394f4edb5 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/rocket_menu_list.png differ diff --git a/src/main/resources/assets/boss_tools/textures/rocket_menu_list_2.png b/src/main/resources/assets/boss_tools/textures/rocket_menu_list_2.png new file mode 100644 index 000000000..c152a852a Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/rocket_menu_list_2.png differ diff --git a/src/main/resources/assets/boss_tools/textures/screens/blast_furnace_gui.png b/src/main/resources/assets/boss_tools/textures/screens/blast_furnace_gui.png new file mode 100644 index 000000000..48b358596 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/screens/blast_furnace_gui.png differ diff --git a/src/main/resources/assets/boss_tools/textures/screens/coal_generator_gui.png b/src/main/resources/assets/boss_tools/textures/screens/coal_generator_gui.png new file mode 100644 index 000000000..342649aba Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/screens/coal_generator_gui.png differ diff --git a/src/main/resources/assets/boss_tools/textures/screens/compressor_gui.png b/src/main/resources/assets/boss_tools/textures/screens/compressor_gui.png new file mode 100644 index 000000000..aaf353d9e Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/screens/compressor_gui.png differ diff --git a/src/main/resources/assets/boss_tools/textures/screens/fuel_refinery_gui.png b/src/main/resources/assets/boss_tools/textures/screens/fuel_refinery_gui.png new file mode 100644 index 000000000..e6463bbce Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/screens/fuel_refinery_gui.png differ diff --git a/src/main/resources/assets/boss_tools/textures/screens/lander_gui.png b/src/main/resources/assets/boss_tools/textures/screens/lander_gui.png new file mode 100644 index 000000000..505f0d3ec Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/screens/lander_gui.png differ diff --git a/src/main/resources/assets/boss_tools/textures/screens/nasa_workbench_gui.png b/src/main/resources/assets/boss_tools/textures/screens/nasa_workbench_gui.png new file mode 100644 index 000000000..9438d75a1 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/screens/nasa_workbench_gui.png differ diff --git a/src/main/resources/assets/boss_tools/textures/screens/oxygen_bubble_distributor_gui.png b/src/main/resources/assets/boss_tools/textures/screens/oxygen_bubble_distributor_gui.png new file mode 100644 index 000000000..c157af341 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/screens/oxygen_bubble_distributor_gui.png differ diff --git a/src/main/resources/assets/boss_tools/textures/screens/oxygen_loader_gui.png b/src/main/resources/assets/boss_tools/textures/screens/oxygen_loader_gui.png new file mode 100644 index 000000000..e6463bbce Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/screens/oxygen_loader_gui.png differ diff --git a/src/main/resources/assets/boss_tools/textures/screens/planet_selection_gui.png b/src/main/resources/assets/boss_tools/textures/screens/planet_selection_gui.png new file mode 100644 index 000000000..1f5905c1a Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/screens/planet_selection_gui.png differ diff --git a/src/main/resources/assets/boss_tools/textures/screens/rocket_gui.png b/src/main/resources/assets/boss_tools/textures/screens/rocket_gui.png new file mode 100644 index 000000000..c7e47af04 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/screens/rocket_gui.png differ diff --git a/src/main/resources/assets/boss_tools/textures/screens/rover_gui.png b/src/main/resources/assets/boss_tools/textures/screens/rover_gui.png new file mode 100644 index 000000000..d557d4569 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/screens/rover_gui.png differ diff --git a/src/main/resources/assets/boss_tools/textures/screens/solar_panel_gui.png b/src/main/resources/assets/boss_tools/textures/screens/solar_panel_gui.png new file mode 100644 index 000000000..605c12595 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/screens/solar_panel_gui.png differ diff --git a/src/main/resources/assets/boss_tools/textures/screens/water_pump_gui.png b/src/main/resources/assets/boss_tools/textures/screens/water_pump_gui.png new file mode 100644 index 000000000..ed8ff4cd0 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/screens/water_pump_gui.png differ diff --git a/src/main/resources/assets/boss_tools/textures/simplegaugevalue.png b/src/main/resources/assets/boss_tools/textures/simplegaugevalue.png new file mode 100644 index 000000000..dee54f46b Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/simplegaugevalue.png differ diff --git a/src/main/resources/assets/boss_tools/textures/sky/clouds.png b/src/main/resources/assets/boss_tools/textures/sky/clouds.png new file mode 100644 index 000000000..e515f9365 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/sky/clouds.png differ diff --git a/src/main/resources/assets/boss_tools/textures/sky/deimos.png b/src/main/resources/assets/boss_tools/textures/sky/deimos.png new file mode 100644 index 000000000..d38121df4 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/sky/deimos.png differ diff --git a/src/main/resources/assets/boss_tools/textures/sky/earth.png b/src/main/resources/assets/boss_tools/textures/sky/earth.png new file mode 100644 index 000000000..9921f7485 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/sky/earth.png differ diff --git a/src/main/resources/assets/boss_tools/textures/sky/earth_light.png b/src/main/resources/assets/boss_tools/textures/sky/earth_light.png new file mode 100644 index 000000000..6977976c9 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/sky/earth_light.png differ diff --git a/src/main/resources/assets/boss_tools/textures/sky/gui/earth.png b/src/main/resources/assets/boss_tools/textures/sky/gui/earth.png new file mode 100644 index 000000000..18b09cb9d Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/sky/gui/earth.png differ diff --git a/src/main/resources/assets/boss_tools/textures/sky/gui/mars.png b/src/main/resources/assets/boss_tools/textures/sky/gui/mars.png new file mode 100644 index 000000000..6a1b6c905 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/sky/gui/mars.png differ diff --git a/src/main/resources/assets/boss_tools/textures/sky/gui/mercury.png b/src/main/resources/assets/boss_tools/textures/sky/gui/mercury.png new file mode 100644 index 000000000..5658a760c Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/sky/gui/mercury.png differ diff --git a/src/main/resources/assets/boss_tools/textures/sky/gui/sun.png b/src/main/resources/assets/boss_tools/textures/sky/gui/sun.png new file mode 100644 index 000000000..585e27f0f Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/sky/gui/sun.png differ diff --git a/src/main/resources/assets/boss_tools/textures/sky/gui/venus.png b/src/main/resources/assets/boss_tools/textures/sky/gui/venus.png new file mode 100644 index 000000000..fca0096c2 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/sky/gui/venus.png differ diff --git a/src/main/resources/assets/boss_tools/textures/sky/mars.png b/src/main/resources/assets/boss_tools/textures/sky/mars.png new file mode 100644 index 000000000..05bcd9b77 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/sky/mars.png differ diff --git a/src/main/resources/assets/boss_tools/textures/sky/mercury.png b/src/main/resources/assets/boss_tools/textures/sky/mercury.png new file mode 100644 index 000000000..57828ac83 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/sky/mercury.png differ diff --git a/src/main/resources/assets/boss_tools/textures/sky/moon.png b/src/main/resources/assets/boss_tools/textures/sky/moon.png new file mode 100644 index 000000000..b55467013 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/sky/moon.png differ diff --git a/src/main/resources/assets/boss_tools/textures/sky/moon_phases.png b/src/main/resources/assets/boss_tools/textures/sky/moon_phases.png new file mode 100644 index 000000000..af8d04eaf Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/sky/moon_phases.png differ diff --git a/src/main/resources/assets/boss_tools/textures/sky/no_a_sun.png b/src/main/resources/assets/boss_tools/textures/sky/no_a_sun.png new file mode 100644 index 000000000..ab734322f Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/sky/no_a_sun.png differ diff --git a/src/main/resources/assets/boss_tools/textures/sky/phobos.png b/src/main/resources/assets/boss_tools/textures/sky/phobos.png new file mode 100644 index 000000000..fba00b3aa Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/sky/phobos.png differ diff --git a/src/main/resources/assets/boss_tools/textures/sky/rain.png b/src/main/resources/assets/boss_tools/textures/sky/rain.png new file mode 100644 index 000000000..12146a7cd Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/sky/rain.png differ diff --git a/src/main/resources/assets/boss_tools/textures/sky/sun.png b/src/main/resources/assets/boss_tools/textures/sky/sun.png new file mode 100644 index 000000000..9b0559e44 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/sky/sun.png differ diff --git a/src/main/resources/assets/boss_tools/textures/sky/venus.png b/src/main/resources/assets/boss_tools/textures/sky/venus.png new file mode 100644 index 000000000..b203777e5 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/sky/venus.png differ diff --git a/src/main/resources/assets/boss_tools/textures/space_bosstools_banner.png b/src/main/resources/assets/boss_tools/textures/space_bosstools_banner.png new file mode 100644 index 000000000..ba40dbe7e Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/space_bosstools_banner.png differ diff --git a/src/main/resources/assets/boss_tools/textures/timer/timer1.png b/src/main/resources/assets/boss_tools/textures/timer/timer1.png new file mode 100644 index 000000000..d275aa0ad Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/timer/timer1.png differ diff --git a/src/main/resources/assets/boss_tools/textures/timer/timer10.png b/src/main/resources/assets/boss_tools/textures/timer/timer10.png new file mode 100644 index 000000000..ca06247d8 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/timer/timer10.png differ diff --git a/src/main/resources/assets/boss_tools/textures/timer/timer2.png b/src/main/resources/assets/boss_tools/textures/timer/timer2.png new file mode 100644 index 000000000..c625af943 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/timer/timer2.png differ diff --git a/src/main/resources/assets/boss_tools/textures/timer/timer3.png b/src/main/resources/assets/boss_tools/textures/timer/timer3.png new file mode 100644 index 000000000..41d4728e0 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/timer/timer3.png differ diff --git a/src/main/resources/assets/boss_tools/textures/timer/timer4.png b/src/main/resources/assets/boss_tools/textures/timer/timer4.png new file mode 100644 index 000000000..1f5c43d19 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/timer/timer4.png differ diff --git a/src/main/resources/assets/boss_tools/textures/timer/timer5.png b/src/main/resources/assets/boss_tools/textures/timer/timer5.png new file mode 100644 index 000000000..31988fefe Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/timer/timer5.png differ diff --git a/src/main/resources/assets/boss_tools/textures/timer/timer6.png b/src/main/resources/assets/boss_tools/textures/timer/timer6.png new file mode 100644 index 000000000..17253823d Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/timer/timer6.png differ diff --git a/src/main/resources/assets/boss_tools/textures/timer/timer7.png b/src/main/resources/assets/boss_tools/textures/timer/timer7.png new file mode 100644 index 000000000..81a1bc393 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/timer/timer7.png differ diff --git a/src/main/resources/assets/boss_tools/textures/timer/timer8.png b/src/main/resources/assets/boss_tools/textures/timer/timer8.png new file mode 100644 index 000000000..cfb653c95 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/timer/timer8.png differ diff --git a/src/main/resources/assets/boss_tools/textures/timer/timer9.png b/src/main/resources/assets/boss_tools/textures/timer/timer9.png new file mode 100644 index 000000000..dd09abad9 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/timer/timer9.png differ diff --git a/src/main/resources/assets/boss_tools/textures/vehicle_items/rocket_t1.png b/src/main/resources/assets/boss_tools/textures/vehicle_items/rocket_t1.png new file mode 100644 index 000000000..caa1aec42 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/vehicle_items/rocket_t1.png differ diff --git a/src/main/resources/assets/boss_tools/textures/vehicle_items/rocket_t2.png b/src/main/resources/assets/boss_tools/textures/vehicle_items/rocket_t2.png new file mode 100644 index 000000000..5f81dcb9e Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/vehicle_items/rocket_t2.png differ diff --git a/src/main/resources/assets/boss_tools/textures/vehicle_items/rocket_t3.png b/src/main/resources/assets/boss_tools/textures/vehicle_items/rocket_t3.png new file mode 100644 index 000000000..425ef4748 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/vehicle_items/rocket_t3.png differ diff --git a/src/main/resources/assets/boss_tools/textures/vehicle_items/rover.png b/src/main/resources/assets/boss_tools/textures/vehicle_items/rover.png new file mode 100644 index 000000000..e14c3922c Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/vehicle_items/rover.png differ diff --git a/src/main/resources/assets/boss_tools/textures/vehicles/lander.png b/src/main/resources/assets/boss_tools/textures/vehicles/lander.png new file mode 100644 index 000000000..18d7cd6a1 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/vehicles/lander.png differ diff --git a/src/main/resources/assets/boss_tools/textures/vehicles/rocket_t1.png b/src/main/resources/assets/boss_tools/textures/vehicles/rocket_t1.png new file mode 100644 index 000000000..f1481f6df Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/vehicles/rocket_t1.png differ diff --git a/src/main/resources/assets/boss_tools/textures/vehicles/rocket_t2.png b/src/main/resources/assets/boss_tools/textures/vehicles/rocket_t2.png new file mode 100644 index 000000000..0c31f5a57 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/vehicles/rocket_t2.png differ diff --git a/src/main/resources/assets/boss_tools/textures/vehicles/rocket_t3.png b/src/main/resources/assets/boss_tools/textures/vehicles/rocket_t3.png new file mode 100644 index 000000000..605f2c7a5 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/vehicles/rocket_t3.png differ diff --git a/src/main/resources/assets/boss_tools/textures/vehicles/rover.png b/src/main/resources/assets/boss_tools/textures/vehicles/rover.png new file mode 100644 index 000000000..953631132 Binary files /dev/null and b/src/main/resources/assets/boss_tools/textures/vehicles/rover.png differ diff --git a/src/main/resources/boss_tools.mixin.json b/src/main/resources/boss_tools.mixin.json new file mode 100644 index 000000000..aef809f61 --- /dev/null +++ b/src/main/resources/boss_tools.mixin.json @@ -0,0 +1,17 @@ +{ + "required": true, + "package": "net.mrscauthd.boss_tools.mixin", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "MixinItemGravity" + ], + "client": [ + "ArmorTranslucent", + "SetupLivingBipedAnim", + "RenderHandItem" + ], + "injectors": { + "defaultRequire": 1 + }, + "refmap": "boss_tools.mixin-refmap.json" +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/advancements/moon_advancement.json b/src/main/resources/data/boss_tools/advancements/moon_advancement.json new file mode 100644 index 000000000..9a27b61c4 --- /dev/null +++ b/src/main/resources/data/boss_tools/advancements/moon_advancement.json @@ -0,0 +1,29 @@ +{ + "display": { + "icon": { + "item": "boss_tools:moon_stone" + }, + "title": { + "translate": "advancements.moon_advancement.title" + }, + "description": { + "translate": "advancements.moon_advancement.descr" + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "moon_advancement": { + "trigger": "minecraft:changed_dimension", + "conditions": { + "to": "boss_tools:moon" + } + } + }, + "rewards": { + "experience": 7 + }, + "parent": "boss_tools:rocket_advancement" +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/advancements/rocket_advancement.json b/src/main/resources/data/boss_tools/advancements/rocket_advancement.json new file mode 100644 index 000000000..18c64e93c --- /dev/null +++ b/src/main/resources/data/boss_tools/advancements/rocket_advancement.json @@ -0,0 +1,37 @@ +{ + "display": { + "background": "boss_tools:textures/blocks/iron_plating_block.png", + "icon": { + "item": "boss_tools:rocket_t1" + }, + "title": { + "translate": "advancements.rocket_advancement.title" + }, + "description": { + "translate": "advancements.rocket_advancement.descr" + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "rocket_advancement": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "boss_tools:rocket_t1", + "count": { + "min": 1, + "max": 1 + } + } + ] + } + } + }, + "rewards": { + "experience": 7 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/advancements/rocket_tier_2_advancement.json b/src/main/resources/data/boss_tools/advancements/rocket_tier_2_advancement.json new file mode 100644 index 000000000..3779c1a39 --- /dev/null +++ b/src/main/resources/data/boss_tools/advancements/rocket_tier_2_advancement.json @@ -0,0 +1,37 @@ +{ + "display": { + "icon": { + "item": "boss_tools:rocket_t2" + }, + "title": { + "translate": "advancements.rocket_tier_2_advancement.title" + }, + "description": { + "translate": "advancements.rocket_tier_2_advancement.descr" + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "rocket_tier_2_advancement": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "boss_tools:rocket_t2", + "count": { + "min": 1, + "max": 1 + } + } + ] + } + } + }, + "rewards": { + "experience": 7 + }, + "parent": "boss_tools:rocket_advancement" +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/advancements/rocket_tier_3_advancement.json b/src/main/resources/data/boss_tools/advancements/rocket_tier_3_advancement.json new file mode 100644 index 000000000..818707a99 --- /dev/null +++ b/src/main/resources/data/boss_tools/advancements/rocket_tier_3_advancement.json @@ -0,0 +1,37 @@ +{ + "display": { + "icon": { + "item": "boss_tools:rocket_t3" + }, + "title": { + "translate": "advancements.rocket_tier_3_advancement.title" + }, + "description": { + "translate": "advancements.rocket_tier_3_advancement.descr" + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "rocket_tier_3_advancement": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "boss_tools:rocket_t3", + "count": { + "min": 1, + "max": 1 + } + } + ] + } + } + }, + "rewards": { + "experience": 7 + }, + "parent": "boss_tools:rocket_advancement" +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/advancements/workbench_advancement.json b/src/main/resources/data/boss_tools/advancements/workbench_advancement.json new file mode 100644 index 000000000..20e584665 --- /dev/null +++ b/src/main/resources/data/boss_tools/advancements/workbench_advancement.json @@ -0,0 +1,37 @@ +{ + "display": { + "icon": { + "item": "boss_tools:nasa_workbench" + }, + "title": { + "translate": "advancements.workbench_advancement.title" + }, + "description": { + "translate": "advancements.workbench_advancement.descr" + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "workbench_advancement": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "boss_tools:nasa_workbench", + "count": { + "min": 1, + "max": 1 + } + } + ] + } + } + }, + "rewards": { + "experience": 7 + }, + "parent": "boss_tools:rocket_advancement" +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/dimension/mars.json b/src/main/resources/data/boss_tools/dimension/mars.json new file mode 100644 index 000000000..7fd95a489 --- /dev/null +++ b/src/main/resources/data/boss_tools/dimension/mars.json @@ -0,0 +1,105 @@ +{ + "type": "boss_tools:mars", + "generator": { + "type": "minecraft:noise", + "seed": 0, + "biome_source": { + "type": "minecraft:multi_noise", + "seed": 0, + "temperature_noise": { + "firstOctave": -5.32, + "amplitudes": [ + 2, + 2 + ] + }, + "humidity_noise": { + "firstOctave": -5.32, + "amplitudes": [ + 2, + 2 + ] + }, + "altitude_noise": { + "firstOctave": -5.32, + "amplitudes": [ + 2, + 2 + ] + }, + "weirdness_noise": { + "firstOctave": -5.32, + "amplitudes": [ + 2, + 2 + ] + }, + "biomes": [ + { + "biome": "boss_tools:mars", + "parameters": { + "temperature": -0.5, + "humidity": 0.0, + "altitude": 0.0, + "weirdness": 0.0, + "offset": 0.175 + } + }, + { + "biome": "boss_tools:mars_ice_spike", + "parameters": { + "temperature": 1, + "humidity": -1, + "altitude": 0.75, + "weirdness": -1.5, + "offset": 1 + } + } + ] + }, + "settings": { + "name": "boss_tools:mars", + "bedrock_roof_position": -10, + "bedrock_floor_position": 0, + "sea_level": 63, + "disable_mob_generation": true, + "default_block": { + "Name": "boss_tools:mars_stone" + }, + "default_fluid": { + "Name": "minecraft:air" + }, + "noise": { + "min_y": 0, + "height": 256, + "density_factor": 1, + "density_offset": -0.46875, + "size_horizontal": 1, + "size_vertical": 2, + "simplex_surface_noise": true, + "random_density_offset": true, + "island_noise_override": false, + "amplified": false, + "sampling": { + "xz_scale": 1, + "y_scale": 1, + "xz_factor": 80, + "y_factor": 160 + }, + "bottom_slide": { + "target": -30, + "size": 0, + "offset": 0 + }, + "top_slide": { + "target": -10, + "size": 3, + "offset": 0 + } + }, + "structures": { + "structures": {} + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/dimension/mars_orbit.json b/src/main/resources/data/boss_tools/dimension/mars_orbit.json new file mode 100644 index 000000000..ad47b74fe --- /dev/null +++ b/src/main/resources/data/boss_tools/dimension/mars_orbit.json @@ -0,0 +1,94 @@ +{ + "type": "boss_tools:mars_orbit", + "generator": { + "type": "minecraft:noise", + "seed": 0, + "biome_source": { + "type": "minecraft:multi_noise", + "seed": 0, + "temperature_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "humidity_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "altitude_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "weirdness_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "biomes": [ + { + "biome": "boss_tools:orbit", + "parameters": { + "temperature": 0, + "humidity": 0, + "altitude": 0, + "weirdness": 0, + "offset": 0 + } + } + ] + }, + "settings": { + "name": "boss_tools:mars_orbit", + "bedrock_roof_position": -10, + "bedrock_floor_position": -10, + "sea_level": 0, + "disable_mob_generation": true, + "default_block": { + "Name": "minecraft:air" + }, + "default_fluid": { + "Name": "minecraft:air" + }, + "noise": { + "density_factor": 0, + "density_offset": 0, + "simplex_surface_noise": true, + "random_density_offset": false, + "island_noise_override": true, + "amplified": false, + "size_horizontal": 2, + "size_vertical": 1, + "height": 128, + "sampling": { + "xz_scale": 2, + "y_scale": 1, + "xz_factor": 80, + "y_factor": 160 + }, + "bottom_slide": { + "target": -30, + "size": 7, + "offset": 1 + }, + "top_slide": { + "target": -3000, + "size": 64, + "offset": -46 + } + }, + "structures": { + "structures": {} + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/dimension/mercury.json b/src/main/resources/data/boss_tools/dimension/mercury.json new file mode 100644 index 000000000..4c43a5699 --- /dev/null +++ b/src/main/resources/data/boss_tools/dimension/mercury.json @@ -0,0 +1,105 @@ +{ + "type": "boss_tools:mercury", + "generator": { + "type": "minecraft:noise", + "seed": 0, + "biome_source": { + "type": "minecraft:multi_noise", + "seed": 0, + "temperature_noise": { + "firstOctave": -5.32, + "amplitudes": [ + 2, + 2 + ] + }, + "humidity_noise": { + "firstOctave": -5.32, + "amplitudes": [ + 2, + 2 + ] + }, + "altitude_noise": { + "firstOctave": -5.32, + "amplitudes": [ + 2, + 2 + ] + }, + "weirdness_noise": { + "firstOctave": -5.32, + "amplitudes": [ + 2, + 2 + ] + }, + "biomes": [ + { + "biome": "boss_tools:mercury", + "parameters": { + "temperature": 1, + "humidity": -1, + "altitude": 0.75, + "weirdness": -1.5, + "offset": 0 + } + }, + { + "biome": "boss_tools:mercury_magma", + "parameters": { + "temperature": -1, + "humidity": 1, + "altitude": -0.75, + "weirdness": 1.5, + "offset": 0 + } + } + ] + }, + "settings": { + "name": "boss_tools:mercury", + "bedrock_roof_position": -10, + "bedrock_floor_position": 0, + "sea_level": 63, + "disable_mob_generation": true, + "default_block": { + "Name": "boss_tools:mercury_stone" + }, + "default_fluid": { + "Name": "minecraft:air" + }, + "noise": { + "min_y": 0, + "height": 256, + "density_factor": 1, + "density_offset": -0.46875, + "size_horizontal": 1, + "size_vertical": 2, + "simplex_surface_noise": true, + "random_density_offset": true, + "island_noise_override": false, + "amplified": false, + "sampling": { + "xz_scale": 1, + "y_scale": 1, + "xz_factor": 80, + "y_factor": 160 + }, + "bottom_slide": { + "target": -30, + "size": 0, + "offset": 0 + }, + "top_slide": { + "target": -10, + "size": 3, + "offset": 0 + } + }, + "structures": { + "structures": {} + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/dimension/mercury_orbit.json b/src/main/resources/data/boss_tools/dimension/mercury_orbit.json new file mode 100644 index 000000000..bcde06f8c --- /dev/null +++ b/src/main/resources/data/boss_tools/dimension/mercury_orbit.json @@ -0,0 +1,94 @@ +{ + "type": "boss_tools:mercury_orbit", + "generator": { + "type": "minecraft:noise", + "seed": 0, + "biome_source": { + "type": "minecraft:multi_noise", + "seed": 0, + "temperature_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "humidity_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "altitude_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "weirdness_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "biomes": [ + { + "biome": "boss_tools:orbit", + "parameters": { + "temperature": 0, + "humidity": 0, + "altitude": 0, + "weirdness": 0, + "offset": 0 + } + } + ] + }, + "settings": { + "name": "boss_tools:mercury_orbit", + "bedrock_roof_position": -10, + "bedrock_floor_position": -10, + "sea_level": 0, + "disable_mob_generation": true, + "default_block": { + "Name": "minecraft:air" + }, + "default_fluid": { + "Name": "minecraft:air" + }, + "noise": { + "density_factor": 0, + "density_offset": 0, + "simplex_surface_noise": true, + "random_density_offset": false, + "island_noise_override": true, + "amplified": false, + "size_horizontal": 2, + "size_vertical": 1, + "height": 128, + "sampling": { + "xz_scale": 2, + "y_scale": 1, + "xz_factor": 80, + "y_factor": 160 + }, + "bottom_slide": { + "target": -30, + "size": 7, + "offset": 1 + }, + "top_slide": { + "target": -3000, + "size": 64, + "offset": -46 + } + }, + "structures": { + "structures": {} + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/dimension/moon.json b/src/main/resources/data/boss_tools/dimension/moon.json new file mode 100644 index 000000000..6f7bbfca3 --- /dev/null +++ b/src/main/resources/data/boss_tools/dimension/moon.json @@ -0,0 +1,95 @@ +{ + "type": "boss_tools:moon", + "generator": { + "type": "minecraft:noise", + "seed": 0, + "biome_source": { + "type": "minecraft:multi_noise", + "seed": 0, + "temperature_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "humidity_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "altitude_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "weirdness_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "biomes": [ + { + "biome": "boss_tools:moon", + "parameters": { + "temperature": 0, + "humidity": 0, + "altitude": 0, + "weirdness": 0, + "offset": 0 + } + } + ] + }, + "settings": { + "name": "boss_tools:moon", + "bedrock_roof_position": -10, + "bedrock_floor_position": 0, + "sea_level": 63, + "disable_mob_generation": true, + "default_block": { + "Name": "boss_tools:moon_stone" + }, + "default_fluid": { + "Name": "minecraft:air" + }, + "noise": { + "min_y": 0, + "height": 256, + "density_factor": 1, + "density_offset": -0.46875, + "size_horizontal": 1, + "size_vertical": 2, + "simplex_surface_noise": true, + "random_density_offset": true, + "island_noise_override": false, + "amplified": false, + "sampling": { + "xz_scale": 1, + "y_scale": 1, + "xz_factor": 80, + "y_factor": 160 + }, + "bottom_slide": { + "target": -30, + "size": 0, + "offset": 0 + }, + "top_slide": { + "target": -10, + "size": 3, + "offset": 0 + } + }, + "structures": { + "structures": {} + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/dimension/moon_orbit.json b/src/main/resources/data/boss_tools/dimension/moon_orbit.json new file mode 100644 index 000000000..cef016a64 --- /dev/null +++ b/src/main/resources/data/boss_tools/dimension/moon_orbit.json @@ -0,0 +1,94 @@ +{ + "type": "boss_tools:moon_orbit", + "generator": { + "type": "minecraft:noise", + "seed": 0, + "biome_source": { + "type": "minecraft:multi_noise", + "seed": 0, + "temperature_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "humidity_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "altitude_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "weirdness_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "biomes": [ + { + "biome": "boss_tools:orbit", + "parameters": { + "temperature": 0, + "humidity": 0, + "altitude": 0, + "weirdness": 0, + "offset": 0 + } + } + ] + }, + "settings": { + "name": "boss_tools:moon_orbit", + "bedrock_roof_position": -10, + "bedrock_floor_position": -10, + "sea_level": 0, + "disable_mob_generation": true, + "default_block": { + "Name": "minecraft:air" + }, + "default_fluid": { + "Name": "minecraft:air" + }, + "noise": { + "density_factor": 0, + "density_offset": 0, + "simplex_surface_noise": true, + "random_density_offset": false, + "island_noise_override": true, + "amplified": false, + "size_horizontal": 2, + "size_vertical": 1, + "height": 128, + "sampling": { + "xz_scale": 2, + "y_scale": 1, + "xz_factor": 80, + "y_factor": 160 + }, + "bottom_slide": { + "target": -30, + "size": 7, + "offset": 1 + }, + "top_slide": { + "target": -3000, + "size": 64, + "offset": -46 + } + }, + "structures": { + "structures": {} + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/dimension/overworld_orbit.json b/src/main/resources/data/boss_tools/dimension/overworld_orbit.json new file mode 100644 index 000000000..28ddc4fc8 --- /dev/null +++ b/src/main/resources/data/boss_tools/dimension/overworld_orbit.json @@ -0,0 +1,94 @@ +{ + "type": "boss_tools:overworld_orbit", + "generator": { + "type": "minecraft:noise", + "seed": 0, + "biome_source": { + "type": "minecraft:multi_noise", + "seed": 0, + "temperature_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "humidity_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "altitude_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "weirdness_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "biomes": [ + { + "biome": "boss_tools:orbit", + "parameters": { + "temperature": 0, + "humidity": 0, + "altitude": 0, + "weirdness": 0, + "offset": 0 + } + } + ] + }, + "settings": { + "name": "boss_tools:overworld_orbit", + "bedrock_roof_position": -10, + "bedrock_floor_position": -10, + "sea_level": 0, + "disable_mob_generation": true, + "default_block": { + "Name": "minecraft:air" + }, + "default_fluid": { + "Name": "minecraft:air" + }, + "noise": { + "density_factor": 0, + "density_offset": 0, + "simplex_surface_noise": true, + "random_density_offset": false, + "island_noise_override": true, + "amplified": false, + "size_horizontal": 2, + "size_vertical": 1, + "height": 128, + "sampling": { + "xz_scale": 2, + "y_scale": 1, + "xz_factor": 80, + "y_factor": 160 + }, + "bottom_slide": { + "target": -30, + "size": 7, + "offset": 1 + }, + "top_slide": { + "target": -3000, + "size": 64, + "offset": -46 + } + }, + "structures": { + "structures": {} + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/dimension/venus.json b/src/main/resources/data/boss_tools/dimension/venus.json new file mode 100644 index 000000000..76e346ed2 --- /dev/null +++ b/src/main/resources/data/boss_tools/dimension/venus.json @@ -0,0 +1,115 @@ +{ + "type": "boss_tools:venus", + "generator": { + "type": "minecraft:noise", + "seed": 0, + "biome_source": { + "type": "minecraft:multi_noise", + "seed": 0, + "temperature_noise": { + "firstOctave": -5.53, + "amplitudes": [ + 2, + 2 + ] + }, + "humidity_noise": { + "firstOctave": -5.53, + "amplitudes": [ + 2, + 2 + ] + }, + "altitude_noise": { + "firstOctave": -5.53, + "amplitudes": [ + 2, + 2 + ] + }, + "weirdness_noise": { + "firstOctave": -5.53, + "amplitudes": [ + 2, + 2 + ] + }, + "biomes": [ + { + "biome": "boss_tools:venus", + "parameters": { + "temperature": 1, + "humidity": -1, + "altitude": 0.3, + "weirdness": -0.5, + "offset": 0 + } + }, + { + "biome": "boss_tools:infernal_venus_barrens", + "parameters": { + "temperature": 0, + "humidity": 0, + "altitude": -0.65, + "weirdness": 1.3, + "offset": 0 + } + }, + { + "biome": "boss_tools:venus_hills", + "parameters": { + "temperature": -1, + "humidity": 0, + "altitude": -0.75, + "weirdness": -1.5, + "offset": 0 + } + } + ] + }, + "settings": { + "name": "boss_tools:venus", + "bedrock_roof_position": -10, + "bedrock_floor_position": 0, + "sea_level": 63, + "disable_mob_generation": true, + "default_block": { + "Name": "boss_tools:venus_stone" + }, + "default_fluid": { + "Name": "minecraft:air" + }, + "noise": { + "min_y": 0, + "height": 256, + "density_factor": 1, + "density_offset": -0.46875, + "size_horizontal": 1, + "size_vertical": 2, + "simplex_surface_noise": true, + "random_density_offset": true, + "island_noise_override": false, + "amplified": false, + "sampling": { + "xz_scale": 1, + "y_scale": 1, + "xz_factor": 80, + "y_factor": 160 + }, + "bottom_slide": { + "target": -30, + "size": 0, + "offset": 0 + }, + "top_slide": { + "target": -10, + "size": 3, + "offset": 0 + } + }, + "structures": { + "structures": {} + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/dimension/venus_orbit.json b/src/main/resources/data/boss_tools/dimension/venus_orbit.json new file mode 100644 index 000000000..d1b405978 --- /dev/null +++ b/src/main/resources/data/boss_tools/dimension/venus_orbit.json @@ -0,0 +1,94 @@ +{ + "type": "boss_tools:venus_orbit", + "generator": { + "type": "minecraft:noise", + "seed": 0, + "biome_source": { + "type": "minecraft:multi_noise", + "seed": 0, + "temperature_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "humidity_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "altitude_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "weirdness_noise": { + "firstOctave": -5.11, + "amplitudes": [ + 2, + 2 + ] + }, + "biomes": [ + { + "biome": "boss_tools:orbit", + "parameters": { + "temperature": 0, + "humidity": 0, + "altitude": 0, + "weirdness": 0, + "offset": 0 + } + } + ] + }, + "settings": { + "name": "boss_tools:venus_orbit", + "bedrock_roof_position": -10, + "bedrock_floor_position": -10, + "sea_level": 0, + "disable_mob_generation": true, + "default_block": { + "Name": "minecraft:air" + }, + "default_fluid": { + "Name": "minecraft:air" + }, + "noise": { + "density_factor": 0, + "density_offset": 0, + "simplex_surface_noise": true, + "random_density_offset": false, + "island_noise_override": true, + "amplified": false, + "size_horizontal": 2, + "size_vertical": 1, + "height": 128, + "sampling": { + "xz_scale": 2, + "y_scale": 1, + "xz_factor": 80, + "y_factor": 160 + }, + "bottom_slide": { + "target": -30, + "size": 7, + "offset": 1 + }, + "top_slide": { + "target": -3000, + "size": 64, + "offset": -46 + } + }, + "structures": { + "structures": {} + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/dimension_type/mars.json b/src/main/resources/data/boss_tools/dimension_type/mars.json new file mode 100644 index 000000000..ac86e9f87 --- /dev/null +++ b/src/main/resources/data/boss_tools/dimension_type/mars.json @@ -0,0 +1,17 @@ +{ + "ultrawarm": false, + "natural": false, + "piglin_safe": true, + "respawn_anchor_works": false, + "bed_works": true, + "has_raids": false, + "has_skylight": true, + "has_ceiling": false, + "coordinate_scale": 1, + "ambient_light": 0, + "logical_height": 256, + "infiniburn": "minecraft:infiniburn_overworld", + "min_y": 0, + "height": 256, + "effects": "boss_tools:mars" +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/dimension_type/mars_orbit.json b/src/main/resources/data/boss_tools/dimension_type/mars_orbit.json new file mode 100644 index 000000000..d39d96035 --- /dev/null +++ b/src/main/resources/data/boss_tools/dimension_type/mars_orbit.json @@ -0,0 +1,17 @@ +{ + "ultrawarm": false, + "natural": false, + "piglin_safe": false, + "respawn_anchor_works": false, + "bed_works": true, + "has_raids": false, + "has_skylight": true, + "has_ceiling": false, + "coordinate_scale": 1, + "ambient_light": 0, + "logical_height": 256, + "infiniburn": "minecraft:infiniburn_overworld", + "min_y": 0, + "height": 256, + "effects": "boss_tools:mars_orbit" +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/dimension_type/mercury.json b/src/main/resources/data/boss_tools/dimension_type/mercury.json new file mode 100644 index 000000000..0e8b1e2ae --- /dev/null +++ b/src/main/resources/data/boss_tools/dimension_type/mercury.json @@ -0,0 +1,17 @@ +{ + "ultrawarm": true, + "natural": false, + "piglin_safe": true, + "respawn_anchor_works": false, + "bed_works": true, + "has_raids": false, + "has_skylight": true, + "has_ceiling": false, + "coordinate_scale": 1, + "ambient_light": 0, + "logical_height": 256, + "infiniburn": "minecraft:infiniburn_overworld", + "min_y": 0, + "height": 256, + "effects": "boss_tools:mercury" +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/dimension_type/mercury_orbit.json b/src/main/resources/data/boss_tools/dimension_type/mercury_orbit.json new file mode 100644 index 000000000..a2e4ca339 --- /dev/null +++ b/src/main/resources/data/boss_tools/dimension_type/mercury_orbit.json @@ -0,0 +1,17 @@ +{ + "ultrawarm": true, + "natural": false, + "piglin_safe": false, + "respawn_anchor_works": false, + "bed_works": false, + "has_raids": false, + "has_skylight": true, + "has_ceiling": false, + "coordinate_scale": 1, + "ambient_light": 0, + "logical_height": 256, + "infiniburn": "minecraft:infiniburn_overworld", + "min_y": 0, + "height": 256, + "effects": "boss_tools:mercury_orbit" +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/dimension_type/moon.json b/src/main/resources/data/boss_tools/dimension_type/moon.json new file mode 100644 index 000000000..92480d93d --- /dev/null +++ b/src/main/resources/data/boss_tools/dimension_type/moon.json @@ -0,0 +1,17 @@ +{ + "ultrawarm": false, + "natural": false, + "piglin_safe": false, + "respawn_anchor_works": false, + "bed_works": true, + "has_raids": false, + "has_skylight": true, + "has_ceiling": false, + "coordinate_scale": 1, + "ambient_light": 0, + "logical_height": 256, + "infiniburn": "minecraft:infiniburn_overworld", + "min_y": 0, + "height": 256, + "effects": "boss_tools:moon" +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/dimension_type/moon_orbit.json b/src/main/resources/data/boss_tools/dimension_type/moon_orbit.json new file mode 100644 index 000000000..8db477850 --- /dev/null +++ b/src/main/resources/data/boss_tools/dimension_type/moon_orbit.json @@ -0,0 +1,17 @@ +{ + "ultrawarm": false, + "natural": false, + "piglin_safe": false, + "respawn_anchor_works": false, + "bed_works": true, + "has_raids": false, + "has_skylight": true, + "has_ceiling": false, + "coordinate_scale": 1, + "ambient_light": 0, + "logical_height": 256, + "infiniburn": "minecraft:infiniburn_overworld", + "min_y": 0, + "height": 256, + "effects": "boss_tools:moon_orbit" +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/dimension_type/overworld_orbit.json b/src/main/resources/data/boss_tools/dimension_type/overworld_orbit.json new file mode 100644 index 000000000..6ccb8aa5c --- /dev/null +++ b/src/main/resources/data/boss_tools/dimension_type/overworld_orbit.json @@ -0,0 +1,17 @@ +{ + "ultrawarm": false, + "natural": false, + "piglin_safe": false, + "respawn_anchor_works": false, + "bed_works": true, + "has_raids": false, + "has_skylight": true, + "has_ceiling": false, + "coordinate_scale": 1, + "ambient_light": 0, + "logical_height": 256, + "infiniburn": "minecraft:infiniburn_overworld", + "min_y": 0, + "height": 256, + "effects": "boss_tools:overworld_orbit" +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/dimension_type/venus.json b/src/main/resources/data/boss_tools/dimension_type/venus.json new file mode 100644 index 000000000..1421104d3 --- /dev/null +++ b/src/main/resources/data/boss_tools/dimension_type/venus.json @@ -0,0 +1,17 @@ +{ + "ultrawarm": true, + "natural": false, + "piglin_safe": true, + "respawn_anchor_works": false, + "bed_works": true, + "has_raids": false, + "has_skylight": true, + "has_ceiling": false, + "coordinate_scale": 1, + "ambient_light": 0, + "logical_height": 256, + "infiniburn": "minecraft:infiniburn_overworld", + "min_y": 0, + "height": 256, + "effects": "boss_tools:venus" +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/dimension_type/venus_orbit.json b/src/main/resources/data/boss_tools/dimension_type/venus_orbit.json new file mode 100644 index 000000000..ce7a93dab --- /dev/null +++ b/src/main/resources/data/boss_tools/dimension_type/venus_orbit.json @@ -0,0 +1,17 @@ +{ + "ultrawarm": true, + "natural": false, + "piglin_safe": false, + "respawn_anchor_works": false, + "bed_works": true, + "has_raids": false, + "has_skylight": true, + "has_ceiling": false, + "coordinate_scale": 1, + "ambient_light": 0, + "logical_height": 256, + "infiniburn": "minecraft:infiniburn_overworld", + "min_y": 0, + "height": 256, + "effects": "boss_tools:venus_orbit" +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/blue_iron_plating_block.json b/src/main/resources/data/boss_tools/loot_tables/blocks/blue_iron_plating_block.json new file mode 100644 index 000000000..34be0157b --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/blue_iron_plating_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:blue_iron_plating_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/coal_lantern.json b/src/main/resources/data/boss_tools/loot_tables/blocks/coal_lantern.json new file mode 100644 index 000000000..87e3f6c3c --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/coal_lantern.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:coal_lantern" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/coal_torch.json b/src/main/resources/data/boss_tools/loot_tables/blocks/coal_torch.json new file mode 100644 index 000000000..78b836ce0 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/coal_torch.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:coal_torch", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/cracked_moon_brick_slab.json b/src/main/resources/data/boss_tools/loot_tables/blocks/cracked_moon_brick_slab.json new file mode 100644 index 000000000..403b10f31 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/cracked_moon_brick_slab.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:cracked_moon_brick_slab" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/cracked_moon_brick_stairs.json b/src/main/resources/data/boss_tools/loot_tables/blocks/cracked_moon_brick_stairs.json new file mode 100644 index 000000000..c39d8a2db --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/cracked_moon_brick_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:cracked_moon_brick_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/cracked_moon_bricks.json b/src/main/resources/data/boss_tools/loot_tables/blocks/cracked_moon_bricks.json new file mode 100644 index 000000000..65c63e70c --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/cracked_moon_bricks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:cracked_moon_bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/desh_block.json b/src/main/resources/data/boss_tools/loot_tables/blocks/desh_block.json new file mode 100644 index 000000000..3b7f79bcb --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/desh_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:desh_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/flag.json b/src/main/resources/data/boss_tools/loot_tables/blocks/flag.json new file mode 100644 index 000000000..11a0863a5 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/flag.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "boss_tools:flag", + "properties": { + "half": "lower" + } + } + ], + "name": "boss_tools:flag" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/flag_blue.json b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_blue.json new file mode 100644 index 000000000..7816db4d6 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_blue.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "boss_tools:flag_blue", + "properties": { + "half": "lower" + } + } + ], + "name": "boss_tools:flag_blue" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/flag_brown.json b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_brown.json new file mode 100644 index 000000000..9269ac30d --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_brown.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "boss_tools:flag_brown", + "properties": { + "half": "lower" + } + } + ], + "name": "boss_tools:flag_brown" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/flag_cyan.json b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_cyan.json new file mode 100644 index 000000000..e807a1785 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_cyan.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "boss_tools:flag_cyan", + "properties": { + "half": "lower" + } + } + ], + "name": "boss_tools:flag_cyan" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/flag_gray.json b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_gray.json new file mode 100644 index 000000000..375278fa5 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_gray.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "boss_tools:flag_gray", + "properties": { + "half": "lower" + } + } + ], + "name": "boss_tools:flag_gray" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/flag_green.json b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_green.json new file mode 100644 index 000000000..9af915927 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_green.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "boss_tools:flag_green", + "properties": { + "half": "lower" + } + } + ], + "name": "boss_tools:flag_green" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/flag_light_blue.json b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_light_blue.json new file mode 100644 index 000000000..c55bc9a11 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_light_blue.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "boss_tools:flag_light_blue", + "properties": { + "half": "lower" + } + } + ], + "name": "boss_tools:flag_light_blue" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/flag_lime.json b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_lime.json new file mode 100644 index 000000000..49a42f39a --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_lime.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "boss_tools:flag_lime", + "properties": { + "half": "lower" + } + } + ], + "name": "boss_tools:flag_lime" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/flag_magenta.json b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_magenta.json new file mode 100644 index 000000000..4b91df13b --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_magenta.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "boss_tools:flag_magenta", + "properties": { + "half": "lower" + } + } + ], + "name": "boss_tools:flag_magenta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/flag_orange.json b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_orange.json new file mode 100644 index 000000000..2e8af39e7 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_orange.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "boss_tools:flag_orange", + "properties": { + "half": "lower" + } + } + ], + "name": "boss_tools:flag_orange" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/flag_pink.json b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_pink.json new file mode 100644 index 000000000..5a8c657e7 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_pink.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "boss_tools:flag_pink", + "properties": { + "half": "lower" + } + } + ], + "name": "boss_tools:flag_pink" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/flag_purple.json b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_purple.json new file mode 100644 index 000000000..2dbae3d70 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_purple.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "boss_tools:flag_purple", + "properties": { + "half": "lower" + } + } + ], + "name": "boss_tools:flag_purple" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/flag_red.json b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_red.json new file mode 100644 index 000000000..2fa8d01de --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_red.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "boss_tools:flag_red", + "properties": { + "half": "lower" + } + } + ], + "name": "boss_tools:flag_red" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/flag_yellow.json b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_yellow.json new file mode 100644 index 000000000..ef631e02d --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/flag_yellow.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "boss_tools:flag_yellow", + "properties": { + "half": "lower" + } + } + ], + "name": "boss_tools:flag_yellow" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/infernal_spire_block.json b/src/main/resources/data/boss_tools/loot_tables/blocks/infernal_spire_block.json new file mode 100644 index 000000000..0b4f078e4 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/infernal_spire_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:infernal_spire_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/iron_mark_block.json b/src/main/resources/data/boss_tools/loot_tables/blocks/iron_mark_block.json new file mode 100644 index 000000000..87a6f74b2 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/iron_mark_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:iron_mark_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/iron_plating_block.json b/src/main/resources/data/boss_tools/loot_tables/blocks/iron_plating_block.json new file mode 100644 index 000000000..2a8a0ad36 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/iron_plating_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:iron_plating_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/mars_diamond_ore.json b/src/main/resources/data/boss_tools/loot_tables/blocks/mars_diamond_ore.json new file mode 100644 index 000000000..20b97bbe9 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/mars_diamond_ore.json @@ -0,0 +1,92 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:mars_diamond_ore", + "weight": 1, + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:diamond", + "weight": 1, + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + ], + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + }, + { + "function": "enchant_with_levels", + "treasure": true, + "levels": { + "min": 1, + "max": 3 + } + }, + { + "function": "minecraft:explosion_decay" + }, + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/mars_ice_shard_ore.json b/src/main/resources/data/boss_tools/loot_tables/blocks/mars_ice_shard_ore.json new file mode 100644 index 000000000..f462004ca --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/mars_ice_shard_ore.json @@ -0,0 +1,88 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:mars_ice_shard_ore", + "weight": 1, + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": 1, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:ice_shard", + "weight": 3, + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + ], + "functions": [ + { + "function": "set_count", + "count": { + "min": 3, + "max": 3 + } + }, + { + "function": "enchant_with_levels", + "treasure": true, + "levels": { + "min": 1, + "max": 3 + } + }, + { + "function": "minecraft:explosion_decay" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/mars_iron_ore.json b/src/main/resources/data/boss_tools/loot_tables/blocks/mars_iron_ore.json new file mode 100644 index 000000000..5186054dd --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/mars_iron_ore.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:mars_iron_ore" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/mars_sand.json b/src/main/resources/data/boss_tools/loot_tables/blocks/mars_sand.json new file mode 100644 index 000000000..6c22c9303 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/mars_sand.json @@ -0,0 +1,20 @@ + +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:mars_sand" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/mars_silicon_ore.json b/src/main/resources/data/boss_tools/loot_tables/blocks/mars_silicon_ore.json new file mode 100644 index 000000000..6fcfe3399 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/mars_silicon_ore.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:mars_silicon_ore" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/mars_stone.json b/src/main/resources/data/boss_tools/loot_tables/blocks/mars_stone.json new file mode 100644 index 000000000..5e968696e --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/mars_stone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:mars_stone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/mercury_cobblestone.json b/src/main/resources/data/boss_tools/loot_tables/blocks/mercury_cobblestone.json new file mode 100644 index 000000000..afd9f0752 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/mercury_cobblestone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:mercury_cobblestone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/mercury_iron_ore.json b/src/main/resources/data/boss_tools/loot_tables/blocks/mercury_iron_ore.json new file mode 100644 index 000000000..3ed33d23d --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/mercury_iron_ore.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:mercury_iron_ore" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/mercury_stone.json b/src/main/resources/data/boss_tools/loot_tables/blocks/mercury_stone.json new file mode 100644 index 000000000..b4e45b98e --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/mercury_stone.json @@ -0,0 +1,76 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:mercury_stone", + "weight": 1, + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:mercury_cobblestone", + "weight": 1, + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + ], + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/moon_brick_slab.json b/src/main/resources/data/boss_tools/loot_tables/blocks/moon_brick_slab.json new file mode 100644 index 000000000..0cbdcbbc6 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/moon_brick_slab.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:moon_brick_slab" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/moon_brick_stairs.json b/src/main/resources/data/boss_tools/loot_tables/blocks/moon_brick_stairs.json new file mode 100644 index 000000000..4c3b0eb13 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/moon_brick_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:moon_brick_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/moon_bricks.json b/src/main/resources/data/boss_tools/loot_tables/blocks/moon_bricks.json new file mode 100644 index 000000000..455f18128 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/moon_bricks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:moon_bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/moon_cheese_ore.json b/src/main/resources/data/boss_tools/loot_tables/blocks/moon_cheese_ore.json new file mode 100644 index 000000000..9fa5f3d04 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/moon_cheese_ore.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:moon_cheese_ore" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/moon_desh_ore.json b/src/main/resources/data/boss_tools/loot_tables/blocks/moon_desh_ore.json new file mode 100644 index 000000000..5438ef66b --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/moon_desh_ore.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:moon_desh_ore" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/moon_glowstone_ore.json b/src/main/resources/data/boss_tools/loot_tables/blocks/moon_glowstone_ore.json new file mode 100644 index 000000000..603b8a357 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/moon_glowstone_ore.json @@ -0,0 +1,88 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:moon_glowstone_ore", + "weight": 1, + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": 1, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:glowstone_dust", + "weight": 3, + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + ], + "functions": [ + { + "function": "set_count", + "count": { + "min": 3, + "max": 3 + } + }, + { + "function": "enchant_with_levels", + "treasure": true, + "levels": { + "min": 1, + "max": 3 + } + }, + { + "function": "minecraft:explosion_decay" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/moon_iron_ore.json b/src/main/resources/data/boss_tools/loot_tables/blocks/moon_iron_ore.json new file mode 100644 index 000000000..153df72c5 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/moon_iron_ore.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:moon_iron_ore" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/moon_sand.json b/src/main/resources/data/boss_tools/loot_tables/blocks/moon_sand.json new file mode 100644 index 000000000..d484f6b24 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/moon_sand.json @@ -0,0 +1,20 @@ + +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:moon_sand" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/moon_stone.json b/src/main/resources/data/boss_tools/loot_tables/blocks/moon_stone.json new file mode 100644 index 000000000..7ff12ad4a --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/moon_stone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:moon_stone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/rocket_launch_pad.json b/src/main/resources/data/boss_tools/loot_tables/blocks/rocket_launch_pad.json new file mode 100644 index 000000000..87d5fe6b0 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/rocket_launch_pad.json @@ -0,0 +1,20 @@ + +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:rocket_launch_pad" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/rusted_iron_pillar_block.json b/src/main/resources/data/boss_tools/loot_tables/blocks/rusted_iron_pillar_block.json new file mode 100644 index 000000000..fd3464e47 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/rusted_iron_pillar_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:rusted_iron_pillar_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/rusted_iron_plating_block.json b/src/main/resources/data/boss_tools/loot_tables/blocks/rusted_iron_plating_block.json new file mode 100644 index 000000000..b684b92a5 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/rusted_iron_plating_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:rusted_iron_plating_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/silicon_block.json b/src/main/resources/data/boss_tools/loot_tables/blocks/silicon_block.json new file mode 100644 index 000000000..520d5ed96 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/silicon_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:silicon_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/sky_stone.json b/src/main/resources/data/boss_tools/loot_tables/blocks/sky_stone.json new file mode 100644 index 000000000..c1c67f2d4 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/sky_stone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:sky_stone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/steel_block.json b/src/main/resources/data/boss_tools/loot_tables/blocks/steel_block.json new file mode 100644 index 000000000..91fda4be1 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/steel_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:steel_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/venus_coal_ore.json b/src/main/resources/data/boss_tools/loot_tables/blocks/venus_coal_ore.json new file mode 100644 index 000000000..2c19c86fb --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/venus_coal_ore.json @@ -0,0 +1,99 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:venus_coal_ore", + "weight": 1, + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": { + "min": 1, + "max": 2 + }, + "bonus_rolls": { + "min": 0, + "max": 2 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:coal", + "weight": 1, + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + ], + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + }, + { + "function": "enchant_with_levels", + "treasure": true, + "levels": { + "min": 1, + "max": 3 + } + }, + { + "function": "minecraft:explosion_decay" + }, + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/venus_diamond_ore.json b/src/main/resources/data/boss_tools/loot_tables/blocks/venus_diamond_ore.json new file mode 100644 index 000000000..56f9b358b --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/venus_diamond_ore.json @@ -0,0 +1,92 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:venus_diamond_ore", + "weight": 1, + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:diamond", + "weight": 1, + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + ], + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + }, + { + "function": "enchant_with_levels", + "treasure": true, + "levels": { + "min": 1, + "max": 3 + } + }, + { + "function": "minecraft:explosion_decay" + }, + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/venus_gold_ore.json b/src/main/resources/data/boss_tools/loot_tables/blocks/venus_gold_ore.json new file mode 100644 index 000000000..77c62b256 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/venus_gold_ore.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:venus_gold_ore" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/venus_sand.json b/src/main/resources/data/boss_tools/loot_tables/blocks/venus_sand.json new file mode 100644 index 000000000..2547ffbaf --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/venus_sand.json @@ -0,0 +1,20 @@ + +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:venus_sand" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/venus_sandstone.json b/src/main/resources/data/boss_tools/loot_tables/blocks/venus_sandstone.json new file mode 100644 index 000000000..e63779e4e --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/venus_sandstone.json @@ -0,0 +1,20 @@ + +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:venus_sandstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/blocks/venus_stone.json b/src/main/resources/data/boss_tools/loot_tables/blocks/venus_stone.json new file mode 100644 index 000000000..b637a0a9e --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/blocks/venus_stone.json @@ -0,0 +1,20 @@ + +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "boss_tools:venus_stone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/entities/mogler.json b/src/main/resources/data/boss_tools/loot_tables/entities/mogler.json new file mode 100644 index 000000000..6e9c0f271 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/entities/mogler.json @@ -0,0 +1,71 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:furnace_smelt", + "conditions": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "flags": { + "is_on_fire": true + } + }, + "entity": "this" + } + ] + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:rotten_flesh" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:leather" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/loot_tables/entities/star_crawler.json b/src/main/resources/data/boss_tools/loot_tables/entities/star_crawler.json new file mode 100644 index 000000000..da1a89667 --- /dev/null +++ b/src/main/resources/data/boss_tools/loot_tables/entities/star_crawler.json @@ -0,0 +1,71 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:furnace_smelt", + "conditions": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "flags": { + "is_on_fire": true + } + }, + "entity": "this" + } + ] + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:rotten_flesh" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:diamond" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/blast_furnace.json b/src/main/resources/data/boss_tools/recipes/blast_furnace.json new file mode 100644 index 000000000..4c87b70e7 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/blast_furnace.json @@ -0,0 +1,42 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345", + "678" + ], + "key": { + "0": { + "item": "minecraft:brick" + }, + "1": { + "item": "minecraft:bricks" + }, + "2": { + "item": "minecraft:brick" + }, + "3": { + "item": "minecraft:bricks" + }, + "4": { + "item": "minecraft:furnace" + }, + "5": { + "item": "minecraft:bricks" + }, + "6": { + "item": "minecraft:brick" + }, + "7": { + "item": "minecraft:bricks" + }, + "8": { + "item": "minecraft:brick" + } + }, + "result": { + "item": "boss_tools:blast_furnace", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/blasting/steel_ingot.json b/src/main/resources/data/boss_tools/recipes/blasting/steel_ingot.json new file mode 100644 index 000000000..0ce8e4f36 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/blasting/steel_ingot.json @@ -0,0 +1,13 @@ +{ + "type":"boss_tools:blasting", + "input":{ + "ingredient":{ + "tag":"forge:ingots/iron" + } + }, + "output":{ + "item":"boss_tools:steel_ingot", + "count":1 + }, + "cookTime":200 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/blue_iron_plating_block.json b/src/main/resources/data/boss_tools/recipes/blue_iron_plating_block.json new file mode 100644 index 000000000..dfb831a3a --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/blue_iron_plating_block.json @@ -0,0 +1,42 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345", + "678" + ], + "key": { + "0": { + "tag": "forge:plates/iron" + }, + "1": { + "item": "minecraft:lapis_lazuli" + }, + "2": { + "tag": "forge:plates/iron" + }, + "3": { + "item": "minecraft:lapis_lazuli" + }, + "4": { + "item": "minecraft:iron_ingot" + }, + "5": { + "item": "minecraft:lapis_lazuli" + }, + "6": { + "tag": "forge:plates/iron" + }, + "7": { + "item": "minecraft:lapis_lazuli" + }, + "8": { + "tag": "forge:plates/iron" + } + }, + "result": { + "item": "boss_tools:blue_iron_plating_block", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/chesse.json b/src/main/resources/data/boss_tools/recipes/chesse.json new file mode 100644 index 000000000..8310a7772 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/chesse.json @@ -0,0 +1,12 @@ +{ + "group": "boss_tools", + "type": "minecraft:smelting", + "experience": 1, + "cookingtime": 150, + "ingredient": { + "item": "boss_tools:moon_cheese_ore" + }, + "result": { + "item": "boss_tools:chesse" + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/coal_generator.json b/src/main/resources/data/boss_tools/recipes/coal_generator.json new file mode 100644 index 000000000..50e20a042 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/coal_generator.json @@ -0,0 +1,42 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345", + "678" + ], + "key": { + "0": { + "tag": "forge:plates/iron" + }, + "1": { + "item": "minecraft:iron_ingot" + }, + "2": { + "tag": "forge:plates/iron" + }, + "3": { + "item": "minecraft:iron_ingot" + }, + "4": { + "item": "minecraft:furnace" + }, + "5": { + "item": "minecraft:iron_ingot" + }, + "6": { + "tag": "forge:plates/iron" + }, + "7": { + "item": "minecraft:redstone" + }, + "8": { + "tag": "forge:plates/iron" + } + }, + "result": { + "item": "boss_tools:coal_generator", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/coal_lantern.json b/src/main/resources/data/boss_tools/recipes/coal_lantern.json new file mode 100644 index 000000000..00ed290f2 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/coal_lantern.json @@ -0,0 +1,21 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "nnn", + "ntn", + "nnn" + ], + "key": { + "n": { + "tag": "forge:nuggets/iron" + }, + "t": { + "item": "boss_tools:coal_torch" + } + }, + "result": { + "item": "boss_tools:coal_lantern", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/coal_torch.json b/src/main/resources/data/boss_tools/recipes/coal_torch.json new file mode 100644 index 000000000..2f60f2feb --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/coal_torch.json @@ -0,0 +1,23 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01", + "2 " + ], + "key": { + "0": { + "tag": "minecraft:coals" + }, + "1": { + "item": "minecraft:paper" + }, + "2": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "boss_tools:coal_torch", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/compressing/compressed_desh.json b/src/main/resources/data/boss_tools/recipes/compressing/compressed_desh.json new file mode 100644 index 000000000..e3c1ae976 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/compressing/compressed_desh.json @@ -0,0 +1,13 @@ +{ + "type":"boss_tools:compressing", + "input":{ + "ingredient":{ + "tag":"forge:ingots/desh" + } + }, + "output":{ + "item":"boss_tools:compressed_desh", + "count":1 + }, + "cookTime":200 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/compressing/compressed_silicon.json b/src/main/resources/data/boss_tools/recipes/compressing/compressed_silicon.json new file mode 100644 index 000000000..9057eaeb2 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/compressing/compressed_silicon.json @@ -0,0 +1,13 @@ +{ + "type":"boss_tools:compressing", + "input":{ + "ingredient":{ + "tag":"forge:ingots/silicon" + } + }, + "output":{ + "item":"boss_tools:compressed_silicon", + "count":1 + }, + "cookTime":200 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/compressing/compressed_steel.json b/src/main/resources/data/boss_tools/recipes/compressing/compressed_steel.json new file mode 100644 index 000000000..0219f29a2 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/compressing/compressed_steel.json @@ -0,0 +1,13 @@ +{ + "type":"boss_tools:compressing", + "input":{ + "ingredient":{ + "tag":"forge:ingots/steel" + } + }, + "output":{ + "item":"boss_tools:compressed_steel", + "count":1 + }, + "cookTime":200 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/compressor.json b/src/main/resources/data/boss_tools/recipes/compressor.json new file mode 100644 index 000000000..c96641dcc --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/compressor.json @@ -0,0 +1,42 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345", + "678" + ], + "key": { + "0": { + "tag": "forge:ingots/steel" + }, + "1": { + "item": "minecraft:iron_ingot" + }, + "2": { + "tag": "forge:ingots/steel" + }, + "3": { + "item": "boss_tools:hammer" + }, + "4": { + "item": "minecraft:furnace" + }, + "5": { + "item": "boss_tools:hammer" + }, + "6": { + "tag": "forge:ingots/steel" + }, + "7": { + "item": "minecraft:redstone" + }, + "8": { + "tag": "forge:ingots/steel" + } + }, + "result": { + "item": "boss_tools:compressor", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/cracked_moon_brick_slab.json b/src/main/resources/data/boss_tools/recipes/cracked_moon_brick_slab.json new file mode 100644 index 000000000..21dedfe5d --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/cracked_moon_brick_slab.json @@ -0,0 +1,22 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012" + ], + "key": { + "0": { + "item": "boss_tools:cracked_moon_bricks" + }, + "1": { + "item": "boss_tools:cracked_moon_bricks" + }, + "2": { + "item": "boss_tools:cracked_moon_bricks" + } + }, + "result": { + "item": "boss_tools:cracked_moon_brick_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/cracked_moon_brick_stairs.json b/src/main/resources/data/boss_tools/recipes/cracked_moon_brick_stairs.json new file mode 100644 index 000000000..0e48b2623 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/cracked_moon_brick_stairs.json @@ -0,0 +1,33 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "0 ", + "34 ", + "678" + ], + "key": { + "0": { + "item": "boss_tools:cracked_moon_bricks" + }, + "3": { + "item": "boss_tools:cracked_moon_bricks" + }, + "4": { + "item": "boss_tools:cracked_moon_bricks" + }, + "6": { + "item": "boss_tools:cracked_moon_bricks" + }, + "7": { + "item": "boss_tools:cracked_moon_bricks" + }, + "8": { + "item": "boss_tools:cracked_moon_bricks" + } + }, + "result": { + "item": "boss_tools:cracked_moon_brick_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/cracked_moon_brick_stairs_furnace.json b/src/main/resources/data/boss_tools/recipes/cracked_moon_brick_stairs_furnace.json new file mode 100644 index 000000000..50fff6f5a --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/cracked_moon_brick_stairs_furnace.json @@ -0,0 +1,12 @@ +{ + "group": "boss_tools", + "type": "minecraft:smelting", + "experience": 1, + "cookingtime": 200, + "ingredient": { + "item": "boss_tools:moon_brick_stairs" + }, + "result": { + "item": "boss_tools:cracked_moon_brick_stairs" + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/cracked_moon_bricks.json b/src/main/resources/data/boss_tools/recipes/cracked_moon_bricks.json new file mode 100644 index 000000000..1ae5fcc55 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/cracked_moon_bricks.json @@ -0,0 +1,12 @@ +{ + "group": "boss_tools", + "type": "minecraft:smelting", + "experience": 1, + "cookingtime": 200, + "ingredient": { + "item": "boss_tools:moon_bricks" + }, + "result": { + "item": "boss_tools:cracked_moon_bricks" + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/cracked_moon_slab.json b/src/main/resources/data/boss_tools/recipes/cracked_moon_slab.json new file mode 100644 index 000000000..a7d79e961 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/cracked_moon_slab.json @@ -0,0 +1,12 @@ +{ + "group": "boss_tools", + "type": "minecraft:smelting", + "experience": 1, + "cookingtime": 200, + "ingredient": { + "item": "boss_tools:moon_brick_slab" + }, + "result": { + "item": "boss_tools:cracked_moon_brick_slab" + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/desh_block.json b/src/main/resources/data/boss_tools/recipes/desh_block.json new file mode 100644 index 000000000..ddc1b9d29 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/desh_block.json @@ -0,0 +1,42 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345", + "678" + ], + "key": { + "0": { + "item": "boss_tools:desh_ingot" + }, + "1": { + "item": "boss_tools:desh_ingot" + }, + "2": { + "item": "boss_tools:desh_ingot" + }, + "3": { + "item": "boss_tools:desh_ingot" + }, + "4": { + "item": "boss_tools:desh_ingot" + }, + "5": { + "item": "boss_tools:desh_ingot" + }, + "6": { + "item": "boss_tools:desh_ingot" + }, + "7": { + "item": "boss_tools:desh_ingot" + }, + "8": { + "item": "boss_tools:desh_ingot" + } + }, + "result": { + "item": "boss_tools:desh_block", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/desh_ingot.json b/src/main/resources/data/boss_tools/recipes/desh_ingot.json new file mode 100644 index 000000000..b5c7a94df --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/desh_ingot.json @@ -0,0 +1,16 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "0" + ], + "key": { + "0": { + "item": "boss_tools:desh_block" + } + }, + "result": { + "item": "boss_tools:desh_ingot", + "count": 9 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/desh_ingot_from_nugget.json b/src/main/resources/data/boss_tools/recipes/desh_ingot_from_nugget.json new file mode 100644 index 000000000..aa977e878 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/desh_ingot_from_nugget.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "boss_tools:desh_ingot", + "result": { + "item": "boss_tools:desh_ingot" + }, + "pattern": [ + "###", + "#*#", + "###" + ], + "key": { + "*": { + "item": "boss_tools:desh_nugget" + }, + "#": { + "tag": "forge:nuggets/desh" + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/desh_ingot_smelting.json b/src/main/resources/data/boss_tools/recipes/desh_ingot_smelting.json new file mode 100644 index 000000000..26b590051 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/desh_ingot_smelting.json @@ -0,0 +1,12 @@ +{ + "group": "boss_tools", + "type": "minecraft:smelting", + "experience": 1, + "cookingtime": 200, + "ingredient": { + "item": "boss_tools:moon_desh_ore" + }, + "result": { + "item": "boss_tools:desh_ingot" + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/desh_nugget_from_ingot.json b/src/main/resources/data/boss_tools/recipes/desh_nugget_from_ingot.json new file mode 100644 index 000000000..40cc019b5 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/desh_nugget_from_ingot.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "boss_tools:desh_nugget", + "result": { + "item": "boss_tools:desh_nugget", + "count": 9 + }, + "ingredients": [ + { + "item": "boss_tools:desh_ingot" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/desh_plate.json b/src/main/resources/data/boss_tools/recipes/desh_plate.json new file mode 100644 index 000000000..c5c8adf8b --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/desh_plate.json @@ -0,0 +1,19 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01" + ], + "key": { + "0": { + "item": "boss_tools:hammer" + }, + "1": { + "tag": "forge:ingots/desh" + } + }, + "result": { + "item": "boss_tools:desh_plate", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/diamond_engine.json b/src/main/resources/data/boss_tools/recipes/diamond_engine.json new file mode 100644 index 000000000..d4cae03dd --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/diamond_engine.json @@ -0,0 +1,42 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345", + "678" + ], + "key": { + "0": { + "tag": "forge:ingots/silicon" + }, + "1": { + "item": "minecraft:redstone" + }, + "2": { + "tag": "forge:ingots/steel" + }, + "3": { + "tag": "forge:plates/iron" + }, + "4": { + "item": "boss_tools:engine_fan" + }, + "5": { + "item": "boss_tools:engine_frame" + }, + "6": { + "tag": "forge:ingots/silicon" + }, + "7": { + "item": "minecraft:redstone" + }, + "8": { + "tag": "forge:plates/desh" + } + }, + "result": { + "item": "boss_tools:diamond_engine", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/diamond_tank.json b/src/main/resources/data/boss_tools/recipes/diamond_tank.json new file mode 100644 index 000000000..9059ae9c6 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/diamond_tank.json @@ -0,0 +1,39 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "3 5", + "678" + ], + "key": { + "0": { + "tag": "forge:ingots/silicon" + }, + "1": { + "tag": "forge:ingots/steel" + }, + "2": { + "tag": "forge:ingots/silicon" + }, + "3": { + "tag": "forge:ingots/steel" + }, + "5": { + "tag": "forge:ingots/steel" + }, + "6": { + "tag": "forge:ingots/silicon" + }, + "7": { + "tag": "forge:ingots/steel" + }, + "8": { + "tag": "forge:ingots/silicon" + } + }, + "result": { + "item": "boss_tools:diamond_tank", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/engine_fan.json b/src/main/resources/data/boss_tools/recipes/engine_fan.json new file mode 100644 index 000000000..53b818b1d --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/engine_fan.json @@ -0,0 +1,30 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "0 2", + " 4 ", + "6 8" + ], + "key": { + "0": { + "tag": "forge:ingots/steel" + }, + "2": { + "tag": "forge:ingots/steel" + }, + "4": { + "item": "minecraft:iron_ingot" + }, + "6": { + "tag": "forge:ingots/steel" + }, + "8": { + "tag": "forge:ingots/steel" + } + }, + "result": { + "item": "boss_tools:engine_fan", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/engine_frame.json b/src/main/resources/data/boss_tools/recipes/engine_frame.json new file mode 100644 index 000000000..a24056498 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/engine_frame.json @@ -0,0 +1,39 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "3 5", + "678" + ], + "key": { + "0": { + "tag": "forge:ingots/steel" + }, + "1": { + "item": "minecraft:iron_nugget" + }, + "2": { + "tag": "forge:ingots/steel" + }, + "3": { + "item": "minecraft:iron_nugget" + }, + "5": { + "item": "minecraft:iron_nugget" + }, + "6": { + "tag": "forge:ingots/steel" + }, + "7": { + "item": "minecraft:iron_nugget" + }, + "8": { + "tag": "forge:ingots/steel" + } + }, + "result": { + "item": "boss_tools:engine_frame", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/flag_blue.json b/src/main/resources/data/boss_tools/recipes/flag_blue.json new file mode 100644 index 000000000..9179a5871 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/flag_blue.json @@ -0,0 +1,19 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01" + ], + "key": { + "0": { + "tag": "forge:dyes/blue" + }, + "1": { + "tag": "boss_tools:flags" + } + }, + "result": { + "item": "boss_tools:flag_blue", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/flag_brown.json b/src/main/resources/data/boss_tools/recipes/flag_brown.json new file mode 100644 index 000000000..60808c763 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/flag_brown.json @@ -0,0 +1,19 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01" + ], + "key": { + "0": { + "tag": "forge:dyes/brown" + }, + "1": { + "tag": "boss_tools:flags" + } + }, + "result": { + "item": "boss_tools:flag_brown", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/flag_cyan.json b/src/main/resources/data/boss_tools/recipes/flag_cyan.json new file mode 100644 index 000000000..8ca8739a3 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/flag_cyan.json @@ -0,0 +1,19 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01" + ], + "key": { + "0": { + "tag": "forge:dyes/cyan" + }, + "1": { + "tag": "boss_tools:flags" + } + }, + "result": { + "item": "boss_tools:flag_cyan", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/flag_gray.json b/src/main/resources/data/boss_tools/recipes/flag_gray.json new file mode 100644 index 000000000..4081d611e --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/flag_gray.json @@ -0,0 +1,19 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01" + ], + "key": { + "0": { + "tag": "forge:dyes/gray" + }, + "1": { + "tag": "boss_tools:flags" + } + }, + "result": { + "item": "boss_tools:flag_gray", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/flag_green.json b/src/main/resources/data/boss_tools/recipes/flag_green.json new file mode 100644 index 000000000..325150a2d --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/flag_green.json @@ -0,0 +1,19 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01" + ], + "key": { + "0": { + "tag": "forge:dyes/green" + }, + "1": { + "tag": "boss_tools:flags" + } + }, + "result": { + "item": "boss_tools:flag_green", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/flag_light_blue.json b/src/main/resources/data/boss_tools/recipes/flag_light_blue.json new file mode 100644 index 000000000..2808547d9 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/flag_light_blue.json @@ -0,0 +1,19 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01" + ], + "key": { + "0": { + "tag": "forge:dyes/light_blue" + }, + "1": { + "tag": "boss_tools:flags" + } + }, + "result": { + "item": "boss_tools:flag_light_blue", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/flag_light_gray.json b/src/main/resources/data/boss_tools/recipes/flag_light_gray.json new file mode 100644 index 000000000..6b4d8c4b7 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/flag_light_gray.json @@ -0,0 +1,19 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01" + ], + "key": { + "0": { + "tag": "forge:dyes/light_gray" + }, + "1": { + "tag": "boss_tools:flags" + } + }, + "result": { + "item": "boss_tools:flag_gray", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/flag_lime.json b/src/main/resources/data/boss_tools/recipes/flag_lime.json new file mode 100644 index 000000000..9046b40d7 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/flag_lime.json @@ -0,0 +1,19 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01" + ], + "key": { + "0": { + "tag": "forge:dyes/lime" + }, + "1": { + "tag": "boss_tools:flags" + } + }, + "result": { + "item": "boss_tools:flag_lime", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/flag_magenta.json b/src/main/resources/data/boss_tools/recipes/flag_magenta.json new file mode 100644 index 000000000..491aeddd7 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/flag_magenta.json @@ -0,0 +1,19 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01" + ], + "key": { + "0": { + "tag": "forge:dyes/magenta" + }, + "1": { + "tag": "boss_tools:flags" + } + }, + "result": { + "item": "boss_tools:flag_magenta", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/flag_orange.json b/src/main/resources/data/boss_tools/recipes/flag_orange.json new file mode 100644 index 000000000..7052d0d20 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/flag_orange.json @@ -0,0 +1,19 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01" + ], + "key": { + "0": { + "tag": "forge:dyes/orange" + }, + "1": { + "tag": "boss_tools:flags" + } + }, + "result": { + "item": "boss_tools:flag_orange", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/flag_pink.json b/src/main/resources/data/boss_tools/recipes/flag_pink.json new file mode 100644 index 000000000..cdf77b6f7 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/flag_pink.json @@ -0,0 +1,19 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01" + ], + "key": { + "0": { + "tag": "forge:dyes/pink" + }, + "1": { + "tag": "boss_tools:flags" + } + }, + "result": { + "item": "boss_tools:flag_pink", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/flag_purple.json b/src/main/resources/data/boss_tools/recipes/flag_purple.json new file mode 100644 index 000000000..4fa225947 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/flag_purple.json @@ -0,0 +1,19 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01" + ], + "key": { + "0": { + "tag": "forge:dyes/purple" + }, + "1": { + "tag": "boss_tools:flags" + } + }, + "result": { + "item": "boss_tools:flag_purple", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/flag_red.json b/src/main/resources/data/boss_tools/recipes/flag_red.json new file mode 100644 index 000000000..cd40aa87c --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/flag_red.json @@ -0,0 +1,19 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01" + ], + "key": { + "0": { + "tag": "forge:dyes/red" + }, + "1": { + "tag": "boss_tools:flags" + } + }, + "result": { + "item": "boss_tools:flag_red", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/flag_white.json b/src/main/resources/data/boss_tools/recipes/flag_white.json new file mode 100644 index 000000000..d935082d3 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/flag_white.json @@ -0,0 +1,36 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345", + "6 " + ], + "key": { + "0": { + "tag": "forge:rods/iron" + }, + "1": { + "item": "minecraft:white_wool" + }, + "2": { + "item": "minecraft:white_wool" + }, + "3": { + "tag": "forge:rods/iron" + }, + "4": { + "item": "minecraft:white_wool" + }, + "5": { + "item": "minecraft:white_wool" + }, + "6": { + "tag": "forge:rods/iron" + } + }, + "result": { + "item": "boss_tools:flag", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/flag_white_dye.json b/src/main/resources/data/boss_tools/recipes/flag_white_dye.json new file mode 100644 index 000000000..e0d75f2fc --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/flag_white_dye.json @@ -0,0 +1,19 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01" + ], + "key": { + "0": { + "tag": "forge:dyes/white" + }, + "1": { + "tag": "boss_tools:flags" + } + }, + "result": { + "item": "boss_tools:flag", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/flag_yellow.json b/src/main/resources/data/boss_tools/recipes/flag_yellow.json new file mode 100644 index 000000000..9ffb1c314 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/flag_yellow.json @@ -0,0 +1,19 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01" + ], + "key": { + "0": { + "tag": "forge:dyes/yellow" + }, + "1": { + "tag": "boss_tools:flags" + } + }, + "result": { + "item": "boss_tools:flag_yellow", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/fuel_refinery.json b/src/main/resources/data/boss_tools/recipes/fuel_refinery.json new file mode 100644 index 000000000..5be717ee0 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/fuel_refinery.json @@ -0,0 +1,42 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345", + "678" + ], + "key": { + "0": { + "tag": "forge:ingots/steel" + }, + "1": { + "item": "minecraft:iron_ingot" + }, + "2": { + "tag": "forge:ingots/steel" + }, + "3": { + "item": "minecraft:bucket" + }, + "4": { + "item": "minecraft:furnace" + }, + "5": { + "item": "minecraft:bucket" + }, + "6": { + "tag": "forge:ingots/steel" + }, + "7": { + "item": "minecraft:redstone" + }, + "8": { + "tag": "forge:ingots/steel" + } + }, + "result": { + "item": "boss_tools:fuel_refinery", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/fuelrefining/fuel_from_oil.json b/src/main/resources/data/boss_tools/recipes/fuelrefining/fuel_from_oil.json new file mode 100644 index 000000000..eedf5e896 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/fuelrefining/fuel_from_oil.json @@ -0,0 +1,11 @@ +{ + "type":"boss_tools:fuelrefining", + "input":{ + "tag":"boss_tools:oil", + "amount":2 + }, + "output":{ + "name":"boss_tools:fuel", + "amount":2 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/generating/charcoal_block.json b/src/main/resources/data/boss_tools/recipes/generating/charcoal_block.json new file mode 100644 index 000000000..e8dd871e3 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/generating/charcoal_block.json @@ -0,0 +1,18 @@ +{ + "type":"boss_tools:generating", + "conditions": [ + { + "value": { + "tag": "forge:storage_blocks/charcoal", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "input":{ + "ingredient":{ + "tag":"forge:storage_blocks/charcoal" + } + }, + "burnTime":4000 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/generating/coal_block.json b/src/main/resources/data/boss_tools/recipes/generating/coal_block.json new file mode 100644 index 000000000..7814ff717 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/generating/coal_block.json @@ -0,0 +1,9 @@ +{ + "type":"boss_tools:generating", + "input":{ + "ingredient":{ + "tag":"forge:storage_blocks/coal" + } + }, + "burnTime":4000 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/generating/coal_coke.json b/src/main/resources/data/boss_tools/recipes/generating/coal_coke.json new file mode 100644 index 000000000..f35f31f77 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/generating/coal_coke.json @@ -0,0 +1,18 @@ +{ + "type":"boss_tools:generating", + "conditions": [ + { + "value": { + "tag": "forge:coal_coke", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "input":{ + "ingredient":{ + "tag":"forge:coal_coke" + } + }, + "burnTime":800 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/generating/coal_coke_block.json b/src/main/resources/data/boss_tools/recipes/generating/coal_coke_block.json new file mode 100644 index 000000000..82b8adbb2 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/generating/coal_coke_block.json @@ -0,0 +1,18 @@ +{ + "type":"boss_tools:generating", + "conditions": [ + { + "value": { + "tag": "forge:storage_blocks/coal_coke", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "input":{ + "ingredient":{ + "tag":"forge:storage_blocks/coal_coke" + } + }, + "burnTime":8000 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/generating/coals.json b/src/main/resources/data/boss_tools/recipes/generating/coals.json new file mode 100644 index 000000000..f09c39c66 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/generating/coals.json @@ -0,0 +1,9 @@ +{ + "type":"boss_tools:generating", + "input":{ + "ingredient":{ + "tag":"minecraft:coals" + } + }, + "burnTime":400 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/gold_ingot.json b/src/main/resources/data/boss_tools/recipes/gold_ingot.json new file mode 100644 index 000000000..575525495 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/gold_ingot.json @@ -0,0 +1,12 @@ +{ + "group": "boss_tools", + "type": "minecraft:smelting", + "experience": 1, + "cookingtime": 200, + "ingredient": { + "item": "boss_tools:venus_gold_ore" + }, + "result": { + "item": "minecraft:gold_ingot" + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/golden_engine.json b/src/main/resources/data/boss_tools/recipes/golden_engine.json new file mode 100644 index 000000000..6bd7528ac --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/golden_engine.json @@ -0,0 +1,42 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345", + "678" + ], + "key": { + "0": { + "tag": "forge:ingots/desh" + }, + "1": { + "item": "minecraft:redstone" + }, + "2": { + "tag": "forge:ingots/steel" + }, + "3": { + "tag": "forge:plates/iron" + }, + "4": { + "item": "boss_tools:engine_fan" + }, + "5": { + "item": "boss_tools:engine_frame" + }, + "6": { + "tag": "forge:ingots/desh" + }, + "7": { + "item": "minecraft:redstone" + }, + "8": { + "tag": "forge:plates/desh" + } + }, + "result": { + "item": "boss_tools:golden_engine", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/golden_tank.json b/src/main/resources/data/boss_tools/recipes/golden_tank.json new file mode 100644 index 000000000..9476925d1 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/golden_tank.json @@ -0,0 +1,39 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "3 5", + "678" + ], + "key": { + "0": { + "tag": "forge:ingots/desh" + }, + "1": { + "tag": "forge:ingots/steel" + }, + "2": { + "tag": "forge:ingots/desh" + }, + "3": { + "tag": "forge:ingots/steel" + }, + "5": { + "tag": "forge:ingots/steel" + }, + "6": { + "tag": "forge:ingots/desh" + }, + "7": { + "tag": "forge:ingots/steel" + }, + "8": { + "tag": "forge:ingots/desh" + } + }, + "result": { + "item": "boss_tools:golden_tank", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/hammer.json b/src/main/resources/data/boss_tools/recipes/hammer.json new file mode 100644 index 000000000..3ed2bddfb --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/hammer.json @@ -0,0 +1,30 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + " 4 ", + " 7 " + ], + "key": { + "0": { + "item": "minecraft:iron_nugget" + }, + "1": { + "item": "minecraft:iron_ingot" + }, + "2": { + "item": "minecraft:iron_nugget" + }, + "4": { + "item": "minecraft:stick" + }, + "7": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "boss_tools:hammer", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/iron_engine.json b/src/main/resources/data/boss_tools/recipes/iron_engine.json new file mode 100644 index 000000000..50a203010 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/iron_engine.json @@ -0,0 +1,42 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345", + "678" + ], + "key": { + "0": { + "tag": "forge:ingots/steel" + }, + "1": { + "item": "minecraft:redstone" + }, + "2": { + "tag": "forge:ingots/steel" + }, + "3": { + "tag": "forge:plates/iron" + }, + "4": { + "item": "boss_tools:engine_fan" + }, + "5": { + "item": "boss_tools:engine_frame" + }, + "6": { + "tag": "forge:ingots/steel" + }, + "7": { + "item": "minecraft:redstone" + }, + "8": { + "tag": "forge:plates/iron" + } + }, + "result": { + "item": "boss_tools:iron_engine", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/iron_ingot.json b/src/main/resources/data/boss_tools/recipes/iron_ingot.json new file mode 100644 index 000000000..7a56da59a --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/iron_ingot.json @@ -0,0 +1,12 @@ +{ + "group": "boss_tools", + "type": "minecraft:smelting", + "experience": 1, + "cookingtime": 200, + "ingredient": { + "item": "boss_tools:mars_iron_ore" + }, + "result": { + "item": "minecraft:iron_ingot" + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/iron_ingot_2.json b/src/main/resources/data/boss_tools/recipes/iron_ingot_2.json new file mode 100644 index 000000000..1838ea382 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/iron_ingot_2.json @@ -0,0 +1,12 @@ +{ + "group": "boss_tools", + "type": "minecraft:smelting", + "experience": 1, + "cookingtime": 200, + "ingredient": { + "item": "boss_tools:mercury_iron_ore" + }, + "result": { + "item": "minecraft:iron_ingot" + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/iron_ingot_3.json b/src/main/resources/data/boss_tools/recipes/iron_ingot_3.json new file mode 100644 index 000000000..b13193ba6 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/iron_ingot_3.json @@ -0,0 +1,12 @@ +{ + "group": "boss_tools", + "type": "minecraft:smelting", + "experience": 1, + "cookingtime": 200, + "ingredient": { + "item": "boss_tools:moon_iron_ore" + }, + "result": { + "item": "minecraft:iron_ingot" + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/iron_mark_block.json b/src/main/resources/data/boss_tools/recipes/iron_mark_block.json new file mode 100644 index 000000000..aa14167c1 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/iron_mark_block.json @@ -0,0 +1,42 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345", + "678" + ], + "key": { + "0": { + "item": "minecraft:iron_nugget" + }, + "1": { + "tag": "minecraft:coals" + }, + "2": { + "item": "minecraft:iron_nugget" + }, + "3": { + "tag": "minecraft:coals" + }, + "4": { + "item": "minecraft:iron_ingot" + }, + "5": { + "tag": "minecraft:coals" + }, + "6": { + "item": "minecraft:iron_nugget" + }, + "7": { + "tag": "minecraft:coals" + }, + "8": { + "item": "minecraft:iron_nugget" + } + }, + "result": { + "item": "boss_tools:iron_mark_block", + "count": 4 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/iron_plate.json b/src/main/resources/data/boss_tools/recipes/iron_plate.json new file mode 100644 index 000000000..4687c8264 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/iron_plate.json @@ -0,0 +1,19 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01" + ], + "key": { + "0": { + "item": "boss_tools:hammer" + }, + "1": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "boss_tools:iron_plate", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/iron_plating_block.json b/src/main/resources/data/boss_tools/recipes/iron_plating_block.json new file mode 100644 index 000000000..2b5e81f43 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/iron_plating_block.json @@ -0,0 +1,42 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345", + "678" + ], + "key": { + "0": { + "tag": "forge:plates/iron" + }, + "1": { + "item": "minecraft:iron_nugget" + }, + "2": { + "tag": "forge:plates/iron" + }, + "3": { + "item": "minecraft:iron_nugget" + }, + "4": { + "item": "minecraft:iron_ingot" + }, + "5": { + "item": "minecraft:iron_nugget" + }, + "6": { + "tag": "forge:plates/iron" + }, + "7": { + "item": "minecraft:iron_nugget" + }, + "8": { + "tag": "forge:plates/iron" + } + }, + "result": { + "item": "boss_tools:iron_plating_block", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/iron_stick.json b/src/main/resources/data/boss_tools/recipes/iron_stick.json new file mode 100644 index 000000000..f5d0074a5 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/iron_stick.json @@ -0,0 +1,24 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + " 2", + " 4 ", + "6 " + ], + "key": { + "2": { + "item": "minecraft:iron_ingot" + }, + "4": { + "item": "minecraft:iron_ingot" + }, + "6": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "boss_tools:iron_stick", + "count": 2 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/iron_tank.json b/src/main/resources/data/boss_tools/recipes/iron_tank.json new file mode 100644 index 000000000..676533b04 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/iron_tank.json @@ -0,0 +1,39 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "3 5", + "678" + ], + "key": { + "0": { + "item": "minecraft:iron_ingot" + }, + "1": { + "tag": "forge:ingots/steel" + }, + "2": { + "item": "minecraft:iron_ingot" + }, + "3": { + "tag": "forge:ingots/steel" + }, + "5": { + "tag": "forge:ingots/steel" + }, + "6": { + "item": "minecraft:iron_ingot" + }, + "7": { + "tag": "forge:ingots/steel" + }, + "8": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "boss_tools:iron_tank", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/mars_ice_shard_ore.json b/src/main/resources/data/boss_tools/recipes/mars_ice_shard_ore.json new file mode 100644 index 000000000..614d7f039 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/mars_ice_shard_ore.json @@ -0,0 +1,21 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + " D ", + "DSD", + " D " + ], + "key": { + "D": { + "item": "boss_tools:ice_shard" + }, + "S": { + "item": "boss_tools:mars_sand" + } + }, + "result": { + "item": "boss_tools:mars_ice_shard_ore", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/mercury_stone.json b/src/main/resources/data/boss_tools/recipes/mercury_stone.json new file mode 100644 index 000000000..a881debcc --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/mercury_stone.json @@ -0,0 +1,12 @@ +{ + "group": "boss_tools", + "type": "minecraft:smelting", + "experience": 1, + "cookingtime": 200, + "ingredient": { + "item": "boss_tools:mercury_cobblestone" + }, + "result": { + "item": "boss_tools:mercury_stone" + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/moon_brick_slabs.json b/src/main/resources/data/boss_tools/recipes/moon_brick_slabs.json new file mode 100644 index 000000000..877a7a000 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/moon_brick_slabs.json @@ -0,0 +1,22 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012" + ], + "key": { + "0": { + "item": "boss_tools:moon_bricks" + }, + "1": { + "item": "boss_tools:moon_bricks" + }, + "2": { + "item": "boss_tools:moon_bricks" + } + }, + "result": { + "item": "boss_tools:moon_brick_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/moon_brick_stairs.json b/src/main/resources/data/boss_tools/recipes/moon_brick_stairs.json new file mode 100644 index 000000000..dd2380572 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/moon_brick_stairs.json @@ -0,0 +1,33 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "0 ", + "34 ", + "678" + ], + "key": { + "0": { + "item": "boss_tools:moon_bricks" + }, + "3": { + "item": "boss_tools:moon_bricks" + }, + "4": { + "item": "boss_tools:moon_bricks" + }, + "6": { + "item": "boss_tools:moon_bricks" + }, + "7": { + "item": "boss_tools:moon_bricks" + }, + "8": { + "item": "boss_tools:moon_bricks" + } + }, + "result": { + "item": "boss_tools:moon_brick_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/moon_bricks.json b/src/main/resources/data/boss_tools/recipes/moon_bricks.json new file mode 100644 index 000000000..da536425e --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/moon_bricks.json @@ -0,0 +1,26 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01", + "23" + ], + "key": { + "0": { + "item": "boss_tools:moon_stone" + }, + "1": { + "item": "boss_tools:moon_stone" + }, + "2": { + "item": "boss_tools:moon_stone" + }, + "3": { + "item": "boss_tools:moon_stone" + } + }, + "result": { + "item": "boss_tools:moon_bricks", + "count": 4 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/moon_glowstone_ore.json b/src/main/resources/data/boss_tools/recipes/moon_glowstone_ore.json new file mode 100644 index 000000000..3926e94ff --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/moon_glowstone_ore.json @@ -0,0 +1,21 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + " D ", + "DSD", + " D " + ], + "key": { + "D": { + "item": "minecraft:glowstone_dust" + }, + "S": { + "item": "boss_tools:moon_sand" + } + }, + "result": { + "item": "boss_tools:moon_glowstone_ore", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/nasa_workbench.json b/src/main/resources/data/boss_tools/recipes/nasa_workbench.json new file mode 100644 index 000000000..57cd7d982 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/nasa_workbench.json @@ -0,0 +1,42 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345", + "678" + ], + "key": { + "0": { + "tag": "boss_tools:compresseds/steel" + }, + "1": { + "item": "minecraft:crafting_table" + }, + "2": { + "tag": "boss_tools:compresseds/steel" + }, + "3": { + "item": "minecraft:lever" + }, + "4": { + "tag": "forge:ingots/steel" + }, + "5": { + "item": "minecraft:lever" + }, + "6": { + "tag": "boss_tools:compresseds/steel" + }, + "7": { + "item": "minecraft:redstone_torch" + }, + "8": { + "tag": "boss_tools:compresseds/steel" + } + }, + "result": { + "item": "boss_tools:nasa_workbench", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/netherite_oxygen_mask.json b/src/main/resources/data/boss_tools/recipes/netherite_oxygen_mask.json new file mode 100644 index 000000000..e662feb10 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/netherite_oxygen_mask.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smithing", + "base": { + "item": "boss_tools:oxygen_mask" + }, + "addition": { + "item": "minecraft:netherite_ingot" + }, + "result": { + "item": "boss_tools:netherite_oxygen_mask" + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/netherite_space_boots.json b/src/main/resources/data/boss_tools/recipes/netherite_space_boots.json new file mode 100644 index 000000000..d924f72ad --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/netherite_space_boots.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smithing", + "base": { + "item": "boss_tools:space_boots" + }, + "addition": { + "item": "minecraft:netherite_ingot" + }, + "result": { + "item": "boss_tools:netherite_space_boots" + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/netherite_space_pants.json b/src/main/resources/data/boss_tools/recipes/netherite_space_pants.json new file mode 100644 index 000000000..09230ee4b --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/netherite_space_pants.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smithing", + "base": { + "item": "boss_tools:space_pants" + }, + "addition": { + "item": "minecraft:netherite_ingot" + }, + "result": { + "item": "boss_tools:netherite_space_pants" + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/netherite_space_suit.json b/src/main/resources/data/boss_tools/recipes/netherite_space_suit.json new file mode 100644 index 000000000..b1a129a9b --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/netherite_space_suit.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smithing", + "base": { + "item": "boss_tools:space_suit" + }, + "addition": { + "item": "minecraft:netherite_ingot" + }, + "result": { + "item": "boss_tools:netherite_space_suit" + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/oxygen_bubble_distributor.json b/src/main/resources/data/boss_tools/recipes/oxygen_bubble_distributor.json new file mode 100644 index 000000000..4eaaa2874 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/oxygen_bubble_distributor.json @@ -0,0 +1,20 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "0", + "1" + ], + "key": { + "0": { + "item": "boss_tools:engine_fan" + }, + "1": { + "item": "boss_tools:oxygen_loader" + } + }, + "result": { + "item": "boss_tools:oxygen_bubble_distributor", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/oxygen_gear.json b/src/main/resources/data/boss_tools/recipes/oxygen_gear.json new file mode 100644 index 000000000..69129bc09 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/oxygen_gear.json @@ -0,0 +1,33 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + " 1 ", + "345", + "6 8" + ], + "key": { + "1": { + "tag": "forge:ingots/steel" + }, + "3": { + "item": "minecraft:iron_nugget" + }, + "4": { + "tag": "forge:rods/iron" + }, + "5": { + "item": "minecraft:iron_nugget" + }, + "6": { + "tag": "forge:plates/iron" + }, + "8": { + "tag": "forge:plates/iron" + } + }, + "result": { + "item": "boss_tools:oxygen_gear", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/oxygen_loader.json b/src/main/resources/data/boss_tools/recipes/oxygen_loader.json new file mode 100644 index 000000000..5c1903330 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/oxygen_loader.json @@ -0,0 +1,42 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345", + "678" + ], + "key": { + "0": { + "item": "minecraft:iron_ingot" + }, + "1": { + "tag": "forge:plates/iron" + }, + "2": { + "item": "minecraft:iron_ingot" + }, + "3": { + "tag": "forge:plates/iron" + }, + "4": { + "item": "minecraft:furnace" + }, + "5": { + "tag": "forge:plates/iron" + }, + "6": { + "item": "minecraft:iron_ingot" + }, + "7": { + "item": "boss_tools:oxygen_tank" + }, + "8": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "boss_tools:oxygen_loader", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/oxygen_mask.json b/src/main/resources/data/boss_tools/recipes/oxygen_mask.json new file mode 100644 index 000000000..fce66ff6e --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/oxygen_mask.json @@ -0,0 +1,32 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345" + ], + "key": { + "0": { + "tag": "forge:plates/iron" + }, + "1": { + "item": "minecraft:iron_helmet" + }, + "2": { + "tag": "forge:plates/iron" + }, + "3": { + "tag": "forge:plates/iron" + }, + "4": { + "item": "minecraft:glass" + }, + "5": { + "tag": "forge:plates/iron" + } + }, + "result": { + "item": "boss_tools:oxygen_mask", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/oxygen_tank.json b/src/main/resources/data/boss_tools/recipes/oxygen_tank.json new file mode 100644 index 000000000..088c045ed --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/oxygen_tank.json @@ -0,0 +1,39 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "3 5", + "678" + ], + "key": { + "0": { + "item": "minecraft:red_wool" + }, + "1": { + "item": "minecraft:red_wool" + }, + "2": { + "item": "minecraft:red_wool" + }, + "3": { + "tag": "forge:plates/iron" + }, + "5": { + "tag": "forge:plates/iron" + }, + "6": { + "tag": "forge:plates/iron" + }, + "7": { + "item": "minecraft:iron_ingot" + }, + "8": { + "tag": "forge:plates/iron" + } + }, + "result": { + "item": "boss_tools:oxygen_tank", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/oxygenbubbledistributor/from_water.json b/src/main/resources/data/boss_tools/recipes/oxygenbubbledistributor/from_water.json new file mode 100644 index 000000000..897c28041 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/oxygenbubbledistributor/from_water.json @@ -0,0 +1,8 @@ +{ + "type": "boss_tools:oxygenbubbledistributor", + "input": { + "name": "minecraft:water", + "amount": 1 + }, + "oxygen": 4 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/oxygenloader/from_water.json b/src/main/resources/data/boss_tools/recipes/oxygenloader/from_water.json new file mode 100644 index 000000000..c16e3317b --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/oxygenloader/from_water.json @@ -0,0 +1,8 @@ +{ + "type": "boss_tools:oxygenloader", + "input": { + "name": "minecraft:water", + "amount": 5 + }, + "oxygen": 5 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/packed_ice.json b/src/main/resources/data/boss_tools/recipes/packed_ice.json new file mode 100644 index 000000000..22b6beb44 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/packed_ice.json @@ -0,0 +1,26 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01", + "23" + ], + "key": { + "0": { + "item": "boss_tools:ice_shard" + }, + "1": { + "item": "boss_tools:ice_shard" + }, + "2": { + "item": "boss_tools:ice_shard" + }, + "3": { + "item": "boss_tools:ice_shard" + } + }, + "result": { + "item": "minecraft:packed_ice", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/rocket_fins.json b/src/main/resources/data/boss_tools/recipes/rocket_fins.json new file mode 100644 index 000000000..8f835244b --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/rocket_fins.json @@ -0,0 +1,36 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + " 1 ", + "345", + "678" + ], + "key": { + "1": { + "tag": "forge:ingots/steel" + }, + "3": { + "tag": "forge:plates/iron" + }, + "4": { + "tag": "forge:ingots/steel" + }, + "5": { + "tag": "forge:plates/iron" + }, + "6": { + "tag": "boss_tools:compresseds/steel" + }, + "7": { + "tag": "forge:ingots/steel" + }, + "8": { + "tag": "boss_tools:compresseds/steel" + } + }, + "result": { + "item": "boss_tools:rocket_fin", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/rocket_launch_pad.json b/src/main/resources/data/boss_tools/recipes/rocket_launch_pad.json new file mode 100644 index 000000000..9aa360bfa --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/rocket_launch_pad.json @@ -0,0 +1,42 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345", + "678" + ], + "key": { + "0": { + "tag": "forge:ingots/steel" + }, + "1": { + "tag": "forge:plates/iron" + }, + "2": { + "tag": "forge:ingots/steel" + }, + "3": { + "tag": "forge:plates/iron" + }, + "4": { + "item": "minecraft:iron_ingot" + }, + "5": { + "tag": "forge:plates/iron" + }, + "6": { + "tag": "forge:ingots/steel" + }, + "7": { + "tag": "forge:plates/iron" + }, + "8": { + "tag": "forge:ingots/steel" + } + }, + "result": { + "item": "boss_tools:rocket_launch_pad", + "count": 9 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/rocket_nose_cone.json b/src/main/resources/data/boss_tools/recipes/rocket_nose_cone.json new file mode 100644 index 000000000..06349fe83 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/rocket_nose_cone.json @@ -0,0 +1,30 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + " 1 ", + " 4 ", + "678" + ], + "key": { + "1": { + "item": "minecraft:redstone_torch" + }, + "4": { + "tag": "forge:ingots/steel" + }, + "6": { + "tag": "forge:ingots/steel" + }, + "7": { + "tag": "boss_tools:compresseds/steel" + }, + "8": { + "tag": "forge:ingots/steel" + } + }, + "result": { + "item": "boss_tools:rocket_nose_cone", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/rover.json b/src/main/resources/data/boss_tools/recipes/rover.json new file mode 100644 index 000000000..aa2d9f876 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/rover.json @@ -0,0 +1,39 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "0 2", + "345", + "678" + ], + "key": { + "0": { + "item": "minecraft:lapis_lazuli" + }, + "2": { + "item": "minecraft:chest" + }, + "3": { + "tag": "forge:plates/iron" + }, + "4": { + "item": "minecraft:furnace" + }, + "5": { + "item": "minecraft:bucket" + }, + "6": { + "item": "boss_tools:wheel" + }, + "7": { + "tag": "forge:ingots/steel" + }, + "8": { + "item": "boss_tools:wheel" + } + }, + "result": { + "item": "boss_tools:rover", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/rusted_iron_pillar_block.json b/src/main/resources/data/boss_tools/recipes/rusted_iron_pillar_block.json new file mode 100644 index 000000000..95787ffee --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/rusted_iron_pillar_block.json @@ -0,0 +1,42 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345", + "678" + ], + "key": { + "0": { + "item": "minecraft:gold_ingot" + }, + "1": { + "item": "minecraft:quartz" + }, + "2": { + "item": "minecraft:gold_ingot" + }, + "3": { + "item": "minecraft:quartz" + }, + "4": { + "item": "minecraft:iron_ingot" + }, + "5": { + "item": "minecraft:quartz" + }, + "6": { + "item": "minecraft:gold_ingot" + }, + "7": { + "item": "minecraft:quartz" + }, + "8": { + "item": "minecraft:gold_ingot" + } + }, + "result": { + "item": "boss_tools:rusted_iron_pillar_block", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/rusted_iron_plating_block.json b/src/main/resources/data/boss_tools/recipes/rusted_iron_plating_block.json new file mode 100644 index 000000000..6e2a6d3ca --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/rusted_iron_plating_block.json @@ -0,0 +1,42 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345", + "678" + ], + "key": { + "0": { + "item": "minecraft:gold_ingot" + }, + "1": { + "item": "minecraft:gold_nugget" + }, + "2": { + "item": "minecraft:gold_ingot" + }, + "3": { + "item": "minecraft:gold_nugget" + }, + "4": { + "item": "minecraft:iron_ingot" + }, + "5": { + "item": "minecraft:gold_nugget" + }, + "6": { + "item": "minecraft:gold_ingot" + }, + "7": { + "item": "minecraft:gold_nugget" + }, + "8": { + "item": "minecraft:gold_ingot" + } + }, + "result": { + "item": "boss_tools:rusted_iron_plating_block", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/silicon_block.json b/src/main/resources/data/boss_tools/recipes/silicon_block.json new file mode 100644 index 000000000..ebd0dd8a6 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/silicon_block.json @@ -0,0 +1,42 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345", + "678" + ], + "key": { + "0": { + "item": "boss_tools:silicon_ingot" + }, + "1": { + "item": "boss_tools:silicon_ingot" + }, + "2": { + "item": "boss_tools:silicon_ingot" + }, + "3": { + "item": "boss_tools:silicon_ingot" + }, + "4": { + "item": "boss_tools:silicon_ingot" + }, + "5": { + "item": "boss_tools:silicon_ingot" + }, + "6": { + "item": "boss_tools:silicon_ingot" + }, + "7": { + "item": "boss_tools:silicon_ingot" + }, + "8": { + "item": "boss_tools:silicon_ingot" + } + }, + "result": { + "item": "boss_tools:silicon_block", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/silicon_ingot.json b/src/main/resources/data/boss_tools/recipes/silicon_ingot.json new file mode 100644 index 000000000..4ee0ff2a5 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/silicon_ingot.json @@ -0,0 +1,16 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "0" + ], + "key": { + "0": { + "item": "boss_tools:silicon_block" + } + }, + "result": { + "item": "boss_tools:silicon_ingot", + "count": 9 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/silicon_ingot_from_nugget.json b/src/main/resources/data/boss_tools/recipes/silicon_ingot_from_nugget.json new file mode 100644 index 000000000..874d6e00a --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/silicon_ingot_from_nugget.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "boss_tools:silicon_ingot", + "result": { + "item": "boss_tools:silicon_ingot" + }, + "pattern": [ + "###", + "#*#", + "###" + ], + "key": { + "*": { + "item": "boss_tools:silicon_nugget" + }, + "#": { + "tag": "forge:nuggets/silicon" + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/silicon_ingot_smelting.json b/src/main/resources/data/boss_tools/recipes/silicon_ingot_smelting.json new file mode 100644 index 000000000..3dde2ac94 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/silicon_ingot_smelting.json @@ -0,0 +1,12 @@ +{ + "group": "boss_tools", + "type": "minecraft:smelting", + "experience": 1, + "cookingtime": 200, + "ingredient": { + "item": "boss_tools:mars_silicon_ore" + }, + "result": { + "item": "boss_tools:silicon_ingot" + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/silicon_nugget_from_ingot.json b/src/main/resources/data/boss_tools/recipes/silicon_nugget_from_ingot.json new file mode 100644 index 000000000..16f101f58 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/silicon_nugget_from_ingot.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "boss_tools:silicon_nugget", + "result": { + "item": "boss_tools:silicon_nugget", + "count": 9 + }, + "ingredients": [ + { + "item": "boss_tools:silicon_ingot" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/block.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/block.json new file mode 100644 index 000000000..9acab2e2a --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/block.json @@ -0,0 +1,20 @@ +{ + "type": "tconstruct:casting_basin", + "conditions": [ + { + "value": { + "tag": "forge:storage_blocks/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "fluid": { + "name": "boss_tools:molten_desh", + "amount": 1296 + }, + "result": { + "tag": "forge:storage_blocks/desh" + }, + "cooling_time": 150 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/coin_gold_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/coin_gold_cast.json new file mode 100644 index 000000000..3d3d54a9c --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/coin_gold_cast.json @@ -0,0 +1,23 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:coins/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/multi_use/coin" + }, + "fluid": { + "tag": "boss_tools:molten_desh", + "amount": 48 + }, + "result": { + "tag": "forge:coins/desh" + }, + "cooling_time": 29 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/coin_sand_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/coin_sand_cast.json new file mode 100644 index 000000000..7c3fcb7d4 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/coin_sand_cast.json @@ -0,0 +1,24 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:coins/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/single_use/coin" + }, + "cast_consumed": true, + "fluid": { + "tag": "boss_tools:molten_desh", + "amount": 48 + }, + "result": { + "tag": "forge:coins/desh" + }, + "cooling_time": 29 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/gear_gold_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/gear_gold_cast.json new file mode 100644 index 000000000..e12509fd1 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/gear_gold_cast.json @@ -0,0 +1,23 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:gears/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/multi_use/gear" + }, + "fluid": { + "tag": "boss_tools:molten_desh", + "amount": 576 + }, + "result": { + "tag": "forge:gears/desh" + }, + "cooling_time": 100 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/gear_sand_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/gear_sand_cast.json new file mode 100644 index 000000000..8bf15228a --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/gear_sand_cast.json @@ -0,0 +1,24 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:gears/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/single_use/gear" + }, + "cast_consumed": true, + "fluid": { + "tag": "boss_tools:molten_desh", + "amount": 576 + }, + "result": { + "tag": "forge:gears/desh" + }, + "cooling_time": 100 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/ingot_gold_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/ingot_gold_cast.json new file mode 100644 index 000000000..2e6d6a68a --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/ingot_gold_cast.json @@ -0,0 +1,23 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:ingots/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/multi_use/ingot" + }, + "fluid": { + "tag": "boss_tools:molten_desh", + "amount": 144 + }, + "result": { + "tag": "forge:ingots/desh" + }, + "cooling_time": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/ingot_sand_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/ingot_sand_cast.json new file mode 100644 index 000000000..a143b4313 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/ingot_sand_cast.json @@ -0,0 +1,24 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:ingots/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/single_use/ingot" + }, + "cast_consumed": true, + "fluid": { + "tag": "boss_tools:molten_desh", + "amount": 144 + }, + "result": { + "tag": "forge:ingots/desh" + }, + "cooling_time": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/nugget_gold_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/nugget_gold_cast.json new file mode 100644 index 000000000..098e90dc8 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/nugget_gold_cast.json @@ -0,0 +1,23 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:nuggets/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/multi_use/nugget" + }, + "fluid": { + "tag": "boss_tools:molten_desh", + "amount": 16 + }, + "result": { + "tag": "forge:nuggets/desh" + }, + "cooling_time": 17 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/nugget_sand_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/nugget_sand_cast.json new file mode 100644 index 000000000..cc0f29d2c --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/nugget_sand_cast.json @@ -0,0 +1,24 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:nuggets/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/single_use/nugget" + }, + "cast_consumed": true, + "fluid": { + "tag": "boss_tools:molten_desh", + "amount": 16 + }, + "result": { + "tag": "forge:nuggets/desh" + }, + "cooling_time": 17 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/plate_gold_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/plate_gold_cast.json new file mode 100644 index 000000000..d91f618a0 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/plate_gold_cast.json @@ -0,0 +1,23 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:plates/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/multi_use/plate" + }, + "fluid": { + "tag": "boss_tools:molten_desh", + "amount": 144 + }, + "result": { + "tag": "forge:plates/desh" + }, + "cooling_time": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/plate_sand_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/plate_sand_cast.json new file mode 100644 index 000000000..a830f2a44 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/plate_sand_cast.json @@ -0,0 +1,24 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:plates/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/single_use/plate" + }, + "cast_consumed": true, + "fluid": { + "tag": "boss_tools:molten_desh", + "amount": 144 + }, + "result": { + "tag": "forge:plates/desh" + }, + "cooling_time": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/rod_gold_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/rod_gold_cast.json new file mode 100644 index 000000000..078c47031 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/rod_gold_cast.json @@ -0,0 +1,23 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:rods/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/multi_use/rod" + }, + "fluid": { + "tag": "boss_tools:molten_desh", + "amount": 72 + }, + "result": { + "tag": "forge:rods/desh" + }, + "cooling_time": 35 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/rod_sand_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/rod_sand_cast.json new file mode 100644 index 000000000..b73a26328 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/desh/rod_sand_cast.json @@ -0,0 +1,24 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:rods/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/single_use/rod" + }, + "cast_consumed": true, + "fluid": { + "tag": "boss_tools:molten_desh", + "amount": 72 + }, + "result": { + "tag": "forge:rods/desh" + }, + "cooling_time": 35 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/iron/coal_lantern.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/iron/coal_lantern.json new file mode 100644 index 000000000..397511bf2 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/iron/coal_lantern.json @@ -0,0 +1,13 @@ +{ + "type": "tconstruct:casting_table", + "cast": { + "item": "boss_tools:coal_torch" + }, + "cast_consumed": true, + "fluid": { + "tag": "forge:molten_iron", + "amount": 128 + }, + "result": "boss_tools:coal_lantern", + "cooling_time": 57 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/block.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/block.json new file mode 100644 index 000000000..9debe7066 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/block.json @@ -0,0 +1,20 @@ +{ + "type": "tconstruct:casting_basin", + "conditions": [ + { + "value": { + "tag": "forge:storage_blocks/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "fluid": { + "name": "boss_tools:molten_silicon", + "amount": 1296 + }, + "result": { + "tag": "forge:storage_blocks/silicon" + }, + "cooling_time": 150 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/coin_gold_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/coin_gold_cast.json new file mode 100644 index 000000000..cb5a51f9b --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/coin_gold_cast.json @@ -0,0 +1,23 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:coins/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/multi_use/coin" + }, + "fluid": { + "tag": "boss_tools:molten_silicon", + "amount": 48 + }, + "result": { + "tag": "forge:coins/silicon" + }, + "cooling_time": 29 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/coin_sand_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/coin_sand_cast.json new file mode 100644 index 000000000..c3db25e71 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/coin_sand_cast.json @@ -0,0 +1,24 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:coins/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/single_use/coin" + }, + "cast_consumed": true, + "fluid": { + "tag": "boss_tools:molten_silicon", + "amount": 48 + }, + "result": { + "tag": "forge:coins/silicon" + }, + "cooling_time": 29 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/gear_gold_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/gear_gold_cast.json new file mode 100644 index 000000000..dccb7175d --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/gear_gold_cast.json @@ -0,0 +1,23 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:gears/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/multi_use/gear" + }, + "fluid": { + "tag": "boss_tools:molten_silicon", + "amount": 576 + }, + "result": { + "tag": "forge:gears/silicon" + }, + "cooling_time": 100 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/gear_sand_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/gear_sand_cast.json new file mode 100644 index 000000000..58a137261 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/gear_sand_cast.json @@ -0,0 +1,24 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:gears/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/single_use/gear" + }, + "cast_consumed": true, + "fluid": { + "tag": "boss_tools:molten_silicon", + "amount": 576 + }, + "result": { + "tag": "forge:gears/silicon" + }, + "cooling_time": 100 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/ingot_gold_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/ingot_gold_cast.json new file mode 100644 index 000000000..5b38304c9 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/ingot_gold_cast.json @@ -0,0 +1,23 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:ingots/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/multi_use/ingot" + }, + "fluid": { + "tag": "boss_tools:molten_silicon", + "amount": 144 + }, + "result": { + "tag": "forge:ingots/silicon" + }, + "cooling_time": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/ingot_sand_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/ingot_sand_cast.json new file mode 100644 index 000000000..aa0b548bd --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/ingot_sand_cast.json @@ -0,0 +1,24 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:ingots/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/single_use/ingot" + }, + "cast_consumed": true, + "fluid": { + "tag": "boss_tools:molten_silicon", + "amount": 144 + }, + "result": { + "tag": "forge:ingots/silicon" + }, + "cooling_time": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/nugget_gold_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/nugget_gold_cast.json new file mode 100644 index 000000000..883ea846d --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/nugget_gold_cast.json @@ -0,0 +1,23 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:nuggets/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/multi_use/nugget" + }, + "fluid": { + "tag": "boss_tools:molten_silicon", + "amount": 16 + }, + "result": { + "tag": "forge:nuggets/silicon" + }, + "cooling_time": 17 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/nugget_sand_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/nugget_sand_cast.json new file mode 100644 index 000000000..a450b6d80 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/nugget_sand_cast.json @@ -0,0 +1,24 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:nuggets/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/single_use/nugget" + }, + "cast_consumed": true, + "fluid": { + "tag": "boss_tools:molten_silicon", + "amount": 16 + }, + "result": { + "tag": "forge:nuggets/silicon" + }, + "cooling_time": 17 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/plate_gold_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/plate_gold_cast.json new file mode 100644 index 000000000..10a99926c --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/plate_gold_cast.json @@ -0,0 +1,23 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:plates/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/multi_use/plate" + }, + "fluid": { + "tag": "boss_tools:molten_silicon", + "amount": 144 + }, + "result": { + "tag": "forge:plates/silicon" + }, + "cooling_time": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/plate_sand_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/plate_sand_cast.json new file mode 100644 index 000000000..df5c83bf7 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/plate_sand_cast.json @@ -0,0 +1,24 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:plates/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/single_use/plate" + }, + "cast_consumed": true, + "fluid": { + "tag": "boss_tools:molten_silicon", + "amount": 144 + }, + "result": { + "tag": "forge:plates/silicon" + }, + "cooling_time": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/rod_gold_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/rod_gold_cast.json new file mode 100644 index 000000000..091064577 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/rod_gold_cast.json @@ -0,0 +1,23 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:rods/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/multi_use/rod" + }, + "fluid": { + "tag": "boss_tools:molten_silicon", + "amount": 72 + }, + "result": { + "tag": "forge:rods/silicon" + }, + "cooling_time": 35 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/rod_sand_cast.json b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/rod_sand_cast.json new file mode 100644 index 000000000..f83b17040 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/casting/metal/silicon/rod_sand_cast.json @@ -0,0 +1,24 @@ +{ + "type": "tconstruct:casting_table", + "conditions": [ + { + "value": { + "tag": "forge:rods/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "cast": { + "tag": "tconstruct:casts/single_use/rod" + }, + "cast_consumed": true, + "fluid": { + "tag": "boss_tools:molten_silicon", + "amount": 72 + }, + "result": { + "tag": "forge:rods/silicon" + }, + "cooling_time": 35 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/block.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/block.json new file mode 100644 index 000000000..53f3afe96 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/block.json @@ -0,0 +1,21 @@ +{ + "type": "tconstruct:melting", + "conditions": [ + { + "value": { + "tag": "forge:storage_blocks/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "ingredient": { + "tag": "forge:storage_blocks/desh" + }, + "result": { + "fluid": "boss_tools:molten_desh", + "amount": 1296 + }, + "temperature": 500, + "time": 150 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/coin.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/coin.json new file mode 100644 index 000000000..f24318d41 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/coin.json @@ -0,0 +1,21 @@ +{ + "type": "tconstruct:melting", + "conditions": [ + { + "value": { + "tag": "forge:coins/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "ingredient": { + "tag": "forge:coins/desh" + }, + "result": { + "fluid": "boss_tools:molten_desh", + "amount": 48 + }, + "temperature": 500, + "time": 33 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/compressed.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/compressed.json new file mode 100644 index 000000000..64cededd2 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/compressed.json @@ -0,0 +1,12 @@ +{ + "type": "tconstruct:melting", + "ingredient": { + "tag": "boss_tools:compresseds/desh" + }, + "result": { + "fluid": "boss_tools:molten_desh", + "amount": 144 + }, + "temperature": 500, + "time": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/dust.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/dust.json new file mode 100644 index 000000000..4e1b316de --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/dust.json @@ -0,0 +1,21 @@ +{ + "type": "tconstruct:melting", + "conditions": [ + { + "value": { + "tag": "forge:dusts/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "ingredient": { + "tag": "forge:dusts/desh" + }, + "result": { + "fluid": "boss_tools:molten_desh", + "amount": 144 + }, + "temperature": 500, + "time": 37 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/gear.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/gear.json new file mode 100644 index 000000000..c215a61f2 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/gear.json @@ -0,0 +1,21 @@ +{ + "type": "tconstruct:melting", + "conditions": [ + { + "value": { + "tag": "forge:gears/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "ingredient": { + "tag": "forge:gears/desh" + }, + "result": { + "fluid": "boss_tools:molten_desh", + "amount": 576 + }, + "temperature": 500, + "time": 100 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/ingot.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/ingot.json new file mode 100644 index 000000000..549e7b2a3 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/ingot.json @@ -0,0 +1,21 @@ +{ + "type": "tconstruct:melting", + "conditions": [ + { + "value": { + "tag": "forge:ingots/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "ingredient": { + "tag": "forge:ingots/desh" + }, + "result": { + "fluid": "boss_tools:molten_desh", + "amount": 144 + }, + "temperature": 500, + "time": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/nugget.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/nugget.json new file mode 100644 index 000000000..9f01b5c6c --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/nugget.json @@ -0,0 +1,21 @@ +{ + "type": "tconstruct:melting", + "conditions": [ + { + "value": { + "tag": "forge:nuggets/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "ingredient": { + "tag": "forge:nuggets/desh" + }, + "result": { + "fluid": "boss_tools:molten_desh", + "amount": 16 + }, + "temperature": 500, + "time": 17 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/ore.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/ore.json new file mode 100644 index 000000000..3f3ea169f --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/ore.json @@ -0,0 +1,21 @@ +{ + "type": "tconstruct:ore_melting", + "conditions": [ + { + "value": { + "tag": "forge:ores/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "ingredient": { + "tag": "forge:ores/desh" + }, + "result": { + "fluid": "boss_tools:molten_desh", + "amount": 144 + }, + "temperature": 500, + "time": 75 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/plates.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/plates.json new file mode 100644 index 000000000..badd7949c --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/plates.json @@ -0,0 +1,21 @@ +{ + "type": "tconstruct:melting", + "conditions": [ + { + "value": { + "tag": "forge:plates/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "ingredient": { + "tag": "forge:plates/desh" + }, + "result": { + "fluid": "boss_tools:molten_desh", + "amount": 144 + }, + "temperature": 500, + "time": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/rod.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/rod.json new file mode 100644 index 000000000..da9b2ea7b --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/rod.json @@ -0,0 +1,21 @@ +{ + "type": "tconstruct:melting", + "conditions": [ + { + "value": { + "tag": "forge:rods/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "ingredient": { + "tag": "forge:rods/desh" + }, + "result": { + "fluid": "boss_tools:molten_desh", + "amount": 72 + }, + "temperature": 500, + "time": 10 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/sheetmetal.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/sheetmetal.json new file mode 100644 index 000000000..50c459b89 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/desh/sheetmetal.json @@ -0,0 +1,21 @@ +{ + "type": "tconstruct:melting", + "conditions": [ + { + "value": { + "tag": "forge:sheetmetals/desh", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "ingredient": { + "tag": "forge:sheetmetals/desh" + }, + "result": { + "fluid": "boss_tools:molten_desh", + "amount": 144 + }, + "temperature": 500, + "time": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/block.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/block.json new file mode 100644 index 000000000..7cb34eac9 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/block.json @@ -0,0 +1,21 @@ +{ + "type": "tconstruct:melting", + "conditions": [ + { + "value": { + "tag": "forge:storage_blocks/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "ingredient": { + "tag": "forge:storage_blocks/silicon" + }, + "result": { + "fluid": "boss_tools:molten_silicon", + "amount": 1296 + }, + "temperature": 500, + "time": 150 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/coin.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/coin.json new file mode 100644 index 000000000..b89e19511 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/coin.json @@ -0,0 +1,21 @@ +{ + "type": "tconstruct:melting", + "conditions": [ + { + "value": { + "tag": "forge:coins/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "ingredient": { + "tag": "forge:coins/silicon" + }, + "result": { + "fluid": "boss_tools:molten_silicon", + "amount": 48 + }, + "temperature": 500, + "time": 33 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/compressed.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/compressed.json new file mode 100644 index 000000000..babfa9318 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/compressed.json @@ -0,0 +1,12 @@ +{ + "type": "tconstruct:melting", + "ingredient": { + "tag": "boss_tools:compresseds/silicon" + }, + "result": { + "fluid": "boss_tools:molten_silicon", + "amount": 144 + }, + "temperature": 500, + "time": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/dust.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/dust.json new file mode 100644 index 000000000..c0ef82b04 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/dust.json @@ -0,0 +1,21 @@ +{ + "type": "tconstruct:melting", + "conditions": [ + { + "value": { + "tag": "forge:dusts/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "ingredient": { + "tag": "forge:dusts/silicon" + }, + "result": { + "fluid": "boss_tools:molten_silicon", + "amount": 144 + }, + "temperature": 500, + "time": 37 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/gear.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/gear.json new file mode 100644 index 000000000..bfa5cbaf4 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/gear.json @@ -0,0 +1,21 @@ +{ + "type": "tconstruct:melting", + "conditions": [ + { + "value": { + "tag": "forge:gears/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "ingredient": { + "tag": "forge:gears/silicon" + }, + "result": { + "fluid": "boss_tools:molten_silicon", + "amount": 576 + }, + "temperature": 500, + "time": 100 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/ingot.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/ingot.json new file mode 100644 index 000000000..bf92e8bad --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/ingot.json @@ -0,0 +1,21 @@ +{ + "type": "tconstruct:melting", + "conditions": [ + { + "value": { + "tag": "forge:ingots/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "ingredient": { + "tag": "forge:ingots/silicon" + }, + "result": { + "fluid": "boss_tools:molten_silicon", + "amount": 144 + }, + "temperature": 500, + "time": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/nugget.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/nugget.json new file mode 100644 index 000000000..8bb81c4d7 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/nugget.json @@ -0,0 +1,21 @@ +{ + "type": "tconstruct:melting", + "conditions": [ + { + "value": { + "tag": "forge:nuggets/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "ingredient": { + "tag": "forge:nuggets/silicon" + }, + "result": { + "fluid": "boss_tools:molten_silicon", + "amount": 16 + }, + "temperature": 500, + "time": 17 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/ore.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/ore.json new file mode 100644 index 000000000..c86b0a4b6 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/ore.json @@ -0,0 +1,21 @@ +{ + "type": "tconstruct:ore_melting", + "conditions": [ + { + "value": { + "tag": "forge:ores/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "ingredient": { + "tag": "forge:ores/silicon" + }, + "result": { + "fluid": "boss_tools:molten_silicon", + "amount": 144 + }, + "temperature": 500, + "time": 75 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/plates.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/plates.json new file mode 100644 index 000000000..ea02465c2 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/plates.json @@ -0,0 +1,21 @@ +{ + "type": "tconstruct:melting", + "conditions": [ + { + "value": { + "tag": "forge:plates/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "ingredient": { + "tag": "forge:plates/silicon" + }, + "result": { + "fluid": "boss_tools:molten_silicon", + "amount": 144 + }, + "temperature": 500, + "time": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/rod.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/rod.json new file mode 100644 index 000000000..89fff428e --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/rod.json @@ -0,0 +1,21 @@ +{ + "type": "tconstruct:melting", + "conditions": [ + { + "value": { + "tag": "forge:rods/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "ingredient": { + "tag": "forge:rods/silicon" + }, + "result": { + "fluid": "boss_tools:molten_silicon", + "amount": 72 + }, + "temperature": 500, + "time": 10 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/sheetmetal.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/sheetmetal.json new file mode 100644 index 000000000..ef6ca1977 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/silicon/sheetmetal.json @@ -0,0 +1,21 @@ +{ + "type": "tconstruct:melting", + "conditions": [ + { + "value": { + "tag": "forge:sheetmetals/silicon", + "type": "forge:tag_empty" + }, + "type": "forge:not" + } + ], + "ingredient": { + "tag": "forge:sheetmetals/silicon" + }, + "result": { + "fluid": "boss_tools:molten_silicon", + "amount": 144 + }, + "temperature": 500, + "time": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/steel/compressed.json b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/steel/compressed.json new file mode 100644 index 000000000..ec90b1fc4 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/smeltery/melting/metal/steel/compressed.json @@ -0,0 +1,12 @@ +{ + "type": "tconstruct:melting", + "ingredient": { + "tag": "boss_tools:compresseds/steel" + }, + "result": { + "fluid": "tconstruct:molten_steel", + "amount": 144 + }, + "temperature": 950, + "time": 65 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/solar_panel.json b/src/main/resources/data/boss_tools/recipes/solar_panel.json new file mode 100644 index 000000000..05ef8ae85 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/solar_panel.json @@ -0,0 +1,42 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345", + "678" + ], + "key": { + "0": { + "item": "minecraft:glass" + }, + "1": { + "item": "minecraft:glass" + }, + "2": { + "item": "minecraft:glass" + }, + "3": { + "tag": "forge:ingots/steel" + }, + "4": { + "item": "minecraft:lapis_lazuli" + }, + "5": { + "tag": "forge:ingots/steel" + }, + "6": { + "tag": "forge:plates/iron" + }, + "7": { + "item": "minecraft:redstone" + }, + "8": { + "tag": "forge:plates/iron" + } + }, + "result": { + "item": "boss_tools:solar_panel", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/space_boots.json b/src/main/resources/data/boss_tools/recipes/space_boots.json new file mode 100644 index 000000000..e8d88eca9 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/space_boots.json @@ -0,0 +1,26 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "0 2", + "3 5" + ], + "key": { + "0": { + "item": "minecraft:white_wool" + }, + "2": { + "item": "minecraft:white_wool" + }, + "3": { + "tag": "forge:plates/iron" + }, + "5": { + "tag": "forge:plates/iron" + } + }, + "result": { + "item": "boss_tools:space_boots", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/space_leggings.json b/src/main/resources/data/boss_tools/recipes/space_leggings.json new file mode 100644 index 000000000..0244e19c0 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/space_leggings.json @@ -0,0 +1,36 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "3 5", + "6 8" + ], + "key": { + "0": { + "tag": "forge:plates/iron" + }, + "1": { + "item": "minecraft:white_wool" + }, + "2": { + "tag": "forge:plates/iron" + }, + "3": { + "item": "minecraft:white_wool" + }, + "5": { + "item": "minecraft:white_wool" + }, + "6": { + "tag": "forge:plates/iron" + }, + "8": { + "tag": "forge:plates/iron" + } + }, + "result": { + "item": "boss_tools:space_pants", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/space_suit.json b/src/main/resources/data/boss_tools/recipes/space_suit.json new file mode 100644 index 000000000..19783cf1d --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/space_suit.json @@ -0,0 +1,39 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "0 2", + "345", + "678" + ], + "key": { + "0": { + "item": "minecraft:white_wool" + }, + "2": { + "item": "minecraft:white_wool" + }, + "3": { + "item": "boss_tools:oxygen_tank" + }, + "4": { + "item": "boss_tools:oxygen_gear" + }, + "5": { + "item": "boss_tools:oxygen_tank" + }, + "6": { + "tag": "forge:plates/iron" + }, + "7": { + "tag": "forge:ingots/steel" + }, + "8": { + "tag": "forge:plates/iron" + } + }, + "result": { + "item": "boss_tools:space_suit", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/steel_axe.json b/src/main/resources/data/boss_tools/recipes/steel_axe.json new file mode 100644 index 000000000..1938d075b --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/steel_axe.json @@ -0,0 +1,30 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01", + "23", + " 5" + ], + "key": { + "0": { + "tag": "forge:ingots/steel" + }, + "1": { + "tag": "forge:ingots/steel" + }, + "2": { + "tag": "forge:ingots/steel" + }, + "3": { + "item": "minecraft:stick" + }, + "5": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "boss_tools:steel_axe", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/steel_block.json b/src/main/resources/data/boss_tools/recipes/steel_block.json new file mode 100644 index 000000000..a0d251b88 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/steel_block.json @@ -0,0 +1,42 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345", + "678" + ], + "key": { + "0": { + "item": "boss_tools:steel_ingot" + }, + "1": { + "item": "boss_tools:steel_ingot" + }, + "2": { + "item": "boss_tools:steel_ingot" + }, + "3": { + "item": "boss_tools:steel_ingot" + }, + "4": { + "item": "boss_tools:steel_ingot" + }, + "5": { + "item": "boss_tools:steel_ingot" + }, + "6": { + "item": "boss_tools:steel_ingot" + }, + "7": { + "item": "boss_tools:steel_ingot" + }, + "8": { + "item": "boss_tools:steel_ingot" + } + }, + "result": { + "item": "boss_tools:steel_block", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/steel_hoe.json b/src/main/resources/data/boss_tools/recipes/steel_hoe.json new file mode 100644 index 000000000..05fd05138 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/steel_hoe.json @@ -0,0 +1,27 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "01", + " 3", + " 5" + ], + "key": { + "0": { + "tag": "forge:ingots/steel" + }, + "1": { + "tag": "forge:ingots/steel" + }, + "3": { + "item": "minecraft:stick" + }, + "5": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "boss_tools:steel_hoe", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/steel_ingot.json b/src/main/resources/data/boss_tools/recipes/steel_ingot.json new file mode 100644 index 000000000..921c403d7 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/steel_ingot.json @@ -0,0 +1,16 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "0" + ], + "key": { + "0": { + "item": "boss_tools:steel_block" + } + }, + "result": { + "item": "boss_tools:steel_ingot", + "count": 9 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/steel_ingot_from_nugget.json b/src/main/resources/data/boss_tools/recipes/steel_ingot_from_nugget.json new file mode 100644 index 000000000..3c21b20a1 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/steel_ingot_from_nugget.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "boss_tools:steel_ingot", + "result": { + "item": "boss_tools:steel_ingot" + }, + "pattern": [ + "###", + "#*#", + "###" + ], + "key": { + "*": { + "item": "boss_tools:steel_nugget" + }, + "#": { + "tag": "forge:nuggets/steel" + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/steel_nugget_from_ingot.json b/src/main/resources/data/boss_tools/recipes/steel_nugget_from_ingot.json new file mode 100644 index 000000000..3fadcfa89 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/steel_nugget_from_ingot.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "boss_tools:steel_nugget", + "result": { + "item": "boss_tools:steel_nugget", + "count": 9 + }, + "ingredients": [ + { + "item": "boss_tools:steel_ingot" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/steel_pickaxe.json b/src/main/resources/data/boss_tools/recipes/steel_pickaxe.json new file mode 100644 index 000000000..b6c12110f --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/steel_pickaxe.json @@ -0,0 +1,30 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + " 4 ", + " 7 " + ], + "key": { + "0": { + "tag": "forge:ingots/steel" + }, + "1": { + "tag": "forge:ingots/steel" + }, + "2": { + "tag": "forge:ingots/steel" + }, + "4": { + "item": "minecraft:stick" + }, + "7": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "boss_tools:steel_pickaxe", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/steel_shovel.json b/src/main/resources/data/boss_tools/recipes/steel_shovel.json new file mode 100644 index 000000000..3680642b2 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/steel_shovel.json @@ -0,0 +1,24 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "0", + "1", + "2" + ], + "key": { + "0": { + "tag": "forge:ingots/steel" + }, + "1": { + "item": "minecraft:stick" + }, + "2": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "boss_tools:steel_shovel", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/steel_sword.json b/src/main/resources/data/boss_tools/recipes/steel_sword.json new file mode 100644 index 000000000..440f22cb4 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/steel_sword.json @@ -0,0 +1,24 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + " 1 ", + " 4 ", + " 7 " + ], + "key": { + "1": { + "tag": "forge:ingots/steel" + }, + "4": { + "tag": "forge:ingots/steel" + }, + "7": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "boss_tools:steel_sword", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/stonecutting/cracked_moon_bricks/slabs.json b/src/main/resources/data/boss_tools/recipes/stonecutting/cracked_moon_bricks/slabs.json new file mode 100644 index 000000000..1961ad80a --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/stonecutting/cracked_moon_bricks/slabs.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "boss_tools:cracked_moon_bricks" + }, + "result": "boss_tools:cracked_moon_brick_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/stonecutting/cracked_moon_bricks/stairs.json b/src/main/resources/data/boss_tools/recipes/stonecutting/cracked_moon_bricks/stairs.json new file mode 100644 index 000000000..6a45ea7a7 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/stonecutting/cracked_moon_bricks/stairs.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "boss_tools:cracked_moon_bricks" + }, + "result": "boss_tools:cracked_moon_brick_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/stonecutting/moon_bricks/bricks_from_stone.json b/src/main/resources/data/boss_tools/recipes/stonecutting/moon_bricks/bricks_from_stone.json new file mode 100644 index 000000000..952f95e96 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/stonecutting/moon_bricks/bricks_from_stone.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "boss_tools:moon_stone" + }, + "result": "boss_tools:moon_bricks", + "count": 1 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/stonecutting/moon_bricks/slabs_from_bricks.json b/src/main/resources/data/boss_tools/recipes/stonecutting/moon_bricks/slabs_from_bricks.json new file mode 100644 index 000000000..301a902d6 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/stonecutting/moon_bricks/slabs_from_bricks.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "boss_tools:moon_bricks" + }, + "result": "boss_tools:moon_brick_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/stonecutting/moon_bricks/slabs_from_stone.json b/src/main/resources/data/boss_tools/recipes/stonecutting/moon_bricks/slabs_from_stone.json new file mode 100644 index 000000000..819a85834 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/stonecutting/moon_bricks/slabs_from_stone.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "boss_tools:moon_stone" + }, + "result": "boss_tools:moon_brick_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/stonecutting/moon_bricks/stairs_from_bricks.json b/src/main/resources/data/boss_tools/recipes/stonecutting/moon_bricks/stairs_from_bricks.json new file mode 100644 index 000000000..c4bf172bc --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/stonecutting/moon_bricks/stairs_from_bricks.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "boss_tools:moon_bricks" + }, + "result": "boss_tools:moon_brick_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/stonecutting/moon_bricks/stairs_from_stone.json b/src/main/resources/data/boss_tools/recipes/stonecutting/moon_bricks/stairs_from_stone.json new file mode 100644 index 000000000..8df584a4d --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/stonecutting/moon_bricks/stairs_from_stone.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "boss_tools:moon_stone" + }, + "result": "boss_tools:moon_brick_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/venus_sandstone.json b/src/main/resources/data/boss_tools/recipes/venus_sandstone.json new file mode 100644 index 000000000..779d071bb --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/venus_sandstone.json @@ -0,0 +1,15 @@ +{ + "type":"minecraft:crafting_shaped", + "result":{ + "item":"boss_tools:venus_sandstone" + }, + "pattern":[ + "SS", + "SS" + ], + "key":{ + "S":{ + "item":"boss_tools:venus_sand" + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/water_pump.json b/src/main/resources/data/boss_tools/recipes/water_pump.json new file mode 100644 index 000000000..7839f511a --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/water_pump.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "bbb", + "B#B", + " H " + ], + "key": { + "b": { + "tag": "forge:ingots/steel" + }, + "B": { + "tag": "forge:plates/iron" + }, + "#": { + "item": "minecraft:bucket" + }, + "H": { + "item": "minecraft:hopper" + } + }, + "result": { + "item": "boss_tools:water_pump", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/wheel.json b/src/main/resources/data/boss_tools/recipes/wheel.json new file mode 100644 index 000000000..c3dedfc15 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/wheel.json @@ -0,0 +1,42 @@ +{ + "group": "boss_tools", + "type": "minecraft:crafting_shaped", + "pattern": [ + "012", + "345", + "678" + ], + "key": { + "0": { + "item": "minecraft:black_dye" + }, + "1": { + "tag": "forge:slimeballs" + }, + "2": { + "item": "minecraft:black_dye" + }, + "3": { + "tag": "forge:slimeballs" + }, + "4": { + "tag": "forge:ingots/steel" + }, + "5": { + "tag": "forge:slimeballs" + }, + "6": { + "item": "minecraft:black_dye" + }, + "7": { + "tag": "forge:slimeballs" + }, + "8": { + "item": "minecraft:black_dye" + } + }, + "result": { + "item": "boss_tools:wheel", + "count": 2 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/workbenching/tier1.json b/src/main/resources/data/boss_tools/recipes/workbenching/tier1.json new file mode 100644 index 000000000..ddb2e9255 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/workbenching/tier1.json @@ -0,0 +1,65 @@ +{ + "type":"boss_tools:workbenching", + "input":{ + "parts":{ + "boss_tools:nose":[ + { + "item":"boss_tools:rocket_nose_cone" + } + ], + "boss_tools:body":[ + { + "tag":"boss_tools:compresseds/steel" + }, + { + "tag":"boss_tools:compresseds/steel" + }, + { + "tag":"boss_tools:compresseds/steel" + }, + { + "tag":"boss_tools:compresseds/steel" + }, + { + "tag":"boss_tools:compresseds/steel" + }, + { + "tag":"boss_tools:compresseds/steel" + } + ], + "boss_tools:tank":[ + { + "item":"boss_tools:iron_tank" + }, + { + "item":"boss_tools:iron_tank" + } + ], + "boss_tools:fin_left":[ + { + "item":"boss_tools:rocket_fin" + }, + { + "item":"boss_tools:rocket_fin" + } + ], + "boss_tools:fin_right":[ + { + "item":"boss_tools:rocket_fin" + }, + { + "item":"boss_tools:rocket_fin" + } + ], + "boss_tools:engine":[ + { + "item":"boss_tools:iron_engine" + } + ] + } + }, + "output":{ + "item":"boss_tools:rocket_t1", + "count":1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/workbenching/tier2.json b/src/main/resources/data/boss_tools/recipes/workbenching/tier2.json new file mode 100644 index 000000000..96c842399 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/workbenching/tier2.json @@ -0,0 +1,65 @@ +{ + "type":"boss_tools:workbenching", + "input":{ + "parts":{ + "boss_tools:nose":[ + { + "item":"boss_tools:rocket_nose_cone" + } + ], + "boss_tools:body":[ + { + "tag":"boss_tools:compresseds/desh" + }, + { + "tag":"boss_tools:compresseds/desh" + }, + { + "tag":"boss_tools:compresseds/desh" + }, + { + "tag":"boss_tools:compresseds/desh" + }, + { + "tag":"boss_tools:compresseds/desh" + }, + { + "tag":"boss_tools:compresseds/desh" + } + ], + "boss_tools:tank":[ + { + "item":"boss_tools:golden_tank" + }, + { + "item":"boss_tools:golden_tank" + } + ], + "boss_tools:fin_left":[ + { + "item":"boss_tools:oxygen_tank" + }, + { + "item":"boss_tools:rocket_fin" + } + ], + "boss_tools:fin_right":[ + { + "item":"boss_tools:oxygen_tank" + }, + { + "item":"boss_tools:rocket_fin" + } + ], + "boss_tools:engine":[ + { + "item":"boss_tools:golden_engine" + } + ] + } + }, + "output":{ + "item":"boss_tools:rocket_t2", + "count":1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/recipes/workbenching/tier3.json b/src/main/resources/data/boss_tools/recipes/workbenching/tier3.json new file mode 100644 index 000000000..0e405e546 --- /dev/null +++ b/src/main/resources/data/boss_tools/recipes/workbenching/tier3.json @@ -0,0 +1,65 @@ +{ + "type":"boss_tools:workbenching", + "input":{ + "parts":{ + "boss_tools:nose":[ + { + "item":"boss_tools:rocket_nose_cone" + } + ], + "boss_tools:body":[ + { + "tag":"boss_tools:compresseds/silicon" + }, + { + "tag":"boss_tools:compresseds/silicon" + }, + { + "tag":"boss_tools:compresseds/silicon" + }, + { + "tag":"boss_tools:compresseds/silicon" + }, + { + "tag":"boss_tools:compresseds/silicon" + }, + { + "tag":"boss_tools:compresseds/silicon" + } + ], + "boss_tools:tank":[ + { + "item":"boss_tools:diamond_tank" + }, + { + "item":"boss_tools:diamond_tank" + } + ], + "boss_tools:fin_left":[ + { + "item":"boss_tools:oxygen_tank" + }, + { + "item":"boss_tools:rocket_fin" + } + ], + "boss_tools:fin_right":[ + { + "item":"boss_tools:oxygen_tank" + }, + { + "item":"boss_tools:rocket_fin" + } + ], + "boss_tools:engine":[ + { + "item":"boss_tools:diamond_engine" + } + ] + } + }, + "output":{ + "item":"boss_tools:rocket_t3", + "count":1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/structures/alien_village1.nbt b/src/main/resources/data/boss_tools/structures/alien_village1.nbt new file mode 100644 index 000000000..65f4527c6 Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/alien_village1.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/alien_village10.nbt b/src/main/resources/data/boss_tools/structures/alien_village10.nbt new file mode 100644 index 000000000..a1b52d0ef Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/alien_village10.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/alien_village11.nbt b/src/main/resources/data/boss_tools/structures/alien_village11.nbt new file mode 100644 index 000000000..480abeca4 Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/alien_village11.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/alien_village12.nbt b/src/main/resources/data/boss_tools/structures/alien_village12.nbt new file mode 100644 index 000000000..d06bce804 Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/alien_village12.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/alien_village13.nbt b/src/main/resources/data/boss_tools/structures/alien_village13.nbt new file mode 100644 index 000000000..0a5bb0669 Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/alien_village13.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/alien_village14.nbt b/src/main/resources/data/boss_tools/structures/alien_village14.nbt new file mode 100644 index 000000000..a4ced4975 Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/alien_village14.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/alien_village15.nbt b/src/main/resources/data/boss_tools/structures/alien_village15.nbt new file mode 100644 index 000000000..64ad3d1a4 Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/alien_village15.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/alien_village16.nbt b/src/main/resources/data/boss_tools/structures/alien_village16.nbt new file mode 100644 index 000000000..cc064755b Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/alien_village16.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/alien_village17.nbt b/src/main/resources/data/boss_tools/structures/alien_village17.nbt new file mode 100644 index 000000000..c39e14a1c Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/alien_village17.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/alien_village2.nbt b/src/main/resources/data/boss_tools/structures/alien_village2.nbt new file mode 100644 index 000000000..4a1c27e79 Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/alien_village2.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/alien_village3.nbt b/src/main/resources/data/boss_tools/structures/alien_village3.nbt new file mode 100644 index 000000000..723a312db Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/alien_village3.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/alien_village4.nbt b/src/main/resources/data/boss_tools/structures/alien_village4.nbt new file mode 100644 index 000000000..bf8e78263 Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/alien_village4.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/alien_village5.nbt b/src/main/resources/data/boss_tools/structures/alien_village5.nbt new file mode 100644 index 000000000..63931078f Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/alien_village5.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/alien_village6.nbt b/src/main/resources/data/boss_tools/structures/alien_village6.nbt new file mode 100644 index 000000000..77c56f21b Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/alien_village6.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/alien_village7.nbt b/src/main/resources/data/boss_tools/structures/alien_village7.nbt new file mode 100644 index 000000000..069c3fedd Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/alien_village7.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/alien_village8.nbt b/src/main/resources/data/boss_tools/structures/alien_village8.nbt new file mode 100644 index 000000000..6754ba2e0 Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/alien_village8.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/alien_village9.nbt b/src/main/resources/data/boss_tools/structures/alien_village9.nbt new file mode 100644 index 000000000..faea75ced Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/alien_village9.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/crimson_rom_1.nbt b/src/main/resources/data/boss_tools/structures/crimson_rom_1.nbt new file mode 100644 index 000000000..a5b035019 Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/crimson_rom_1.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/crimson_rom_2.nbt b/src/main/resources/data/boss_tools/structures/crimson_rom_2.nbt new file mode 100644 index 000000000..21532bf68 Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/crimson_rom_2.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/crimson_rom_3.nbt b/src/main/resources/data/boss_tools/structures/crimson_rom_3.nbt new file mode 100644 index 000000000..b8e65e14b Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/crimson_rom_3.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/crimson_rom_4.nbt b/src/main/resources/data/boss_tools/structures/crimson_rom_4.nbt new file mode 100644 index 000000000..1f532cb2f Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/crimson_rom_4.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/crimson_rom_5.nbt b/src/main/resources/data/boss_tools/structures/crimson_rom_5.nbt new file mode 100644 index 000000000..366218611 Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/crimson_rom_5.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/crimson_tower_small.nbt b/src/main/resources/data/boss_tools/structures/crimson_tower_small.nbt new file mode 100644 index 000000000..a25988c36 Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/crimson_tower_small.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/crimson_way_1.nbt b/src/main/resources/data/boss_tools/structures/crimson_way_1.nbt new file mode 100644 index 000000000..a7aa07d80 Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/crimson_way_1.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/crimson_way_2.nbt b/src/main/resources/data/boss_tools/structures/crimson_way_2.nbt new file mode 100644 index 000000000..856f4fc9c Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/crimson_way_2.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/meteor1.nbt b/src/main/resources/data/boss_tools/structures/meteor1.nbt new file mode 100644 index 000000000..66cc76d02 Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/meteor1.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/meteor2.nbt b/src/main/resources/data/boss_tools/structures/meteor2.nbt new file mode 100644 index 000000000..47316b230 Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/meteor2.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/meteor3.nbt b/src/main/resources/data/boss_tools/structures/meteor3.nbt new file mode 100644 index 000000000..725b289db Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/meteor3.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/meteor4.nbt b/src/main/resources/data/boss_tools/structures/meteor4.nbt new file mode 100644 index 000000000..259401730 Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/meteor4.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/meteor5.nbt b/src/main/resources/data/boss_tools/structures/meteor5.nbt new file mode 100644 index 000000000..26d3829e3 Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/meteor5.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/meteor6.nbt b/src/main/resources/data/boss_tools/structures/meteor6.nbt new file mode 100644 index 000000000..ed6956a4b Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/meteor6.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/oil.nbt b/src/main/resources/data/boss_tools/structures/oil.nbt new file mode 100644 index 000000000..58ed5fc12 Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/oil.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/space_station.nbt b/src/main/resources/data/boss_tools/structures/space_station.nbt new file mode 100644 index 000000000..6ba6927ba Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/space_station.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/venus_bullet.nbt b/src/main/resources/data/boss_tools/structures/venus_bullet.nbt new file mode 100644 index 000000000..363ecb1db Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/venus_bullet.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/venus_tower.nbt b/src/main/resources/data/boss_tools/structures/venus_tower.nbt new file mode 100644 index 000000000..da27fa9df Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/venus_tower.nbt differ diff --git a/src/main/resources/data/boss_tools/structures/warped_watch_tower.nbt b/src/main/resources/data/boss_tools/structures/warped_watch_tower.nbt new file mode 100644 index 000000000..80d4ccd57 Binary files /dev/null and b/src/main/resources/data/boss_tools/structures/warped_watch_tower.nbt differ diff --git a/src/main/resources/data/boss_tools/tags/entity_types/entities/oxygen.json b/src/main/resources/data/boss_tools/tags/entity_types/entities/oxygen.json new file mode 100644 index 000000000..32cb87cec --- /dev/null +++ b/src/main/resources/data/boss_tools/tags/entity_types/entities/oxygen.json @@ -0,0 +1,28 @@ +{ + "replace": false, + "values": [ + "bat", + "bee", + "cat", + "chicken", + "cod", + "cow", + "donkey", + "dolphin", + "fox", + "horse", + "llama", + "mule", + "ocelot", + "panda", + "parrot", + "pig", + "polar_bear", + "rabbit", + "sheep", + "trader_llama", + "turtle", + "villager", + "wolf" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/tags/entity_types/entities/venus_fire.json b/src/main/resources/data/boss_tools/tags/entity_types/entities/venus_fire.json new file mode 100644 index 000000000..e702fbf6f --- /dev/null +++ b/src/main/resources/data/boss_tools/tags/entity_types/entities/venus_fire.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "boss_tools:pygro", + "boss_tools:mogler" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/tags/entity_types/entities/venus_rain.json b/src/main/resources/data/boss_tools/tags/entity_types/entities/venus_rain.json new file mode 100644 index 000000000..e702fbf6f --- /dev/null +++ b/src/main/resources/data/boss_tools/tags/entity_types/entities/venus_rain.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "boss_tools:pygro", + "boss_tools:mogler" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/tags/fluids/molten_desh.json b/src/main/resources/data/boss_tools/tags/fluids/molten_desh.json new file mode 100644 index 000000000..7ac6abce9 --- /dev/null +++ b/src/main/resources/data/boss_tools/tags/fluids/molten_desh.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "boss_tools:molten_desh", + "boss_tools:flowing_molten_desh" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/tags/fluids/molten_silicon.json b/src/main/resources/data/boss_tools/tags/fluids/molten_silicon.json new file mode 100644 index 000000000..89db68d46 --- /dev/null +++ b/src/main/resources/data/boss_tools/tags/fluids/molten_silicon.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "boss_tools:molten_silicon", + "boss_tools:flowing_molten_silicon" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/tags/fluids/oil.json b/src/main/resources/data/boss_tools/tags/fluids/oil.json new file mode 100644 index 000000000..1aa1824f7 --- /dev/null +++ b/src/main/resources/data/boss_tools/tags/fluids/oil.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "boss_tools:oil", + "boss_tools:flowing_oil" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/tags/fluids/vehicle_fuel.json b/src/main/resources/data/boss_tools/tags/fluids/vehicle_fuel.json new file mode 100644 index 000000000..34a901277 --- /dev/null +++ b/src/main/resources/data/boss_tools/tags/fluids/vehicle_fuel.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "boss_tools:fuel", + "boss_tools:flowing_fuel" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/tags/items/compresseds.json b/src/main/resources/data/boss_tools/tags/items/compresseds.json new file mode 100644 index 000000000..fa2beeaf7 --- /dev/null +++ b/src/main/resources/data/boss_tools/tags/items/compresseds.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "#boss_tools:compresseds/steel", + "#boss_tools:compresseds/desh", + "#boss_tools:compresseds/silicon" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/tags/items/compresseds/desh.json b/src/main/resources/data/boss_tools/tags/items/compresseds/desh.json new file mode 100644 index 000000000..ad6f8ab7c --- /dev/null +++ b/src/main/resources/data/boss_tools/tags/items/compresseds/desh.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:compressed_desh" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/tags/items/compresseds/silicon.json b/src/main/resources/data/boss_tools/tags/items/compresseds/silicon.json new file mode 100644 index 000000000..dc700a714 --- /dev/null +++ b/src/main/resources/data/boss_tools/tags/items/compresseds/silicon.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:compressed_silicon" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/tags/items/compresseds/steel.json b/src/main/resources/data/boss_tools/tags/items/compresseds/steel.json new file mode 100644 index 000000000..90b56e029 --- /dev/null +++ b/src/main/resources/data/boss_tools/tags/items/compresseds/steel.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:compressed_steel" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/tags/items/flags.json b/src/main/resources/data/boss_tools/tags/items/flags.json new file mode 100644 index 000000000..0852a32fe --- /dev/null +++ b/src/main/resources/data/boss_tools/tags/items/flags.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "boss_tools:flag", + "#boss_tools:flags/colors" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/tags/items/flags/colors.json b/src/main/resources/data/boss_tools/tags/items/flags/colors.json new file mode 100644 index 000000000..1153276d5 --- /dev/null +++ b/src/main/resources/data/boss_tools/tags/items/flags/colors.json @@ -0,0 +1,18 @@ +{ + "replace":false, + "values":[ + "boss_tools:flag_blue", + "boss_tools:flag_brown", + "boss_tools:flag_cyan", + "boss_tools:flag_gray", + "boss_tools:flag_green", + "boss_tools:flag_light_blue", + "boss_tools:flag_lime", + "boss_tools:flag_magenta", + "boss_tools:flag_orange", + "boss_tools:flag_pink", + "boss_tools:flag_purple", + "boss_tools:flag_red", + "boss_tools:flag_yellow" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/worldgen/template_pool/crimson_village/crimson_start.json b/src/main/resources/data/boss_tools/worldgen/template_pool/crimson_village/crimson_start.json new file mode 100644 index 000000000..7a8e638de --- /dev/null +++ b/src/main/resources/data/boss_tools/worldgen/template_pool/crimson_village/crimson_start.json @@ -0,0 +1,15 @@ +{ + "name": "boss_tools:crimson_village/crimson_start", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 100, + "element": { + "location": "boss_tools:warped_watch_tower", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/worldgen/template_pool/crimson_village/hallway.json b/src/main/resources/data/boss_tools/worldgen/template_pool/crimson_village/hallway.json new file mode 100644 index 000000000..c53e85a24 --- /dev/null +++ b/src/main/resources/data/boss_tools/worldgen/template_pool/crimson_village/hallway.json @@ -0,0 +1,24 @@ +{ + "name": "boss_tools:crimson_village/hallway", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 50, + "element": { + "location": "boss_tools:crimson_way_1", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:crimson_way_2", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/worldgen/template_pool/crimson_village/side.json b/src/main/resources/data/boss_tools/worldgen/template_pool/crimson_village/side.json new file mode 100644 index 000000000..bbcd26b18 --- /dev/null +++ b/src/main/resources/data/boss_tools/worldgen/template_pool/crimson_village/side.json @@ -0,0 +1,60 @@ +{ + "name": "boss_tools:crimson_village/side", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 50, + "element": { + "location": "boss_tools:crimson_rom_1", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:crimson_rom_2", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:crimson_rom_3", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:crimson_rom_4", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:crimson_rom_5", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:crimson_tower_small", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/worldgen/template_pool/run_alien_village/side_alien.json b/src/main/resources/data/boss_tools/worldgen/template_pool/run_alien_village/side_alien.json new file mode 100644 index 000000000..f2e7a8b22 --- /dev/null +++ b/src/main/resources/data/boss_tools/worldgen/template_pool/run_alien_village/side_alien.json @@ -0,0 +1,105 @@ +{ + "name": "boss_tools:run_alien_village/side_alien", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 50, + "element": { + "location": "boss_tools:alien_village10", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:alien_village9", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:alien_village8", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:alien_village7", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:alien_village6", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:alien_village12", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:alien_village13", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:alien_village14", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:alien_village15", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:alien_village16", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:alien_village17", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/worldgen/template_pool/run_alien_village/side_alien_hallway.json b/src/main/resources/data/boss_tools/worldgen/template_pool/run_alien_village/side_alien_hallway.json new file mode 100644 index 000000000..0a51754fb --- /dev/null +++ b/src/main/resources/data/boss_tools/worldgen/template_pool/run_alien_village/side_alien_hallway.json @@ -0,0 +1,33 @@ +{ + "name": "boss_tools:run_alien_village/side_alien_hallway", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 50, + "element": { + "location": "boss_tools:alien_village2", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:alien_village2", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:alien_village5", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/worldgen/template_pool/run_alien_village/side_alien_start.json b/src/main/resources/data/boss_tools/worldgen/template_pool/run_alien_village/side_alien_start.json new file mode 100644 index 000000000..8c5b82c3a --- /dev/null +++ b/src/main/resources/data/boss_tools/worldgen/template_pool/run_alien_village/side_alien_start.json @@ -0,0 +1,15 @@ +{ + "name": "boss_tools:run_alien_village/side_alien_start", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 100, + "element": { + "location": "boss_tools:alien_village1", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/worldgen/template_pool/run_alien_village/side_pool.json b/src/main/resources/data/boss_tools/worldgen/template_pool/run_alien_village/side_pool.json new file mode 100644 index 000000000..97dd74c72 --- /dev/null +++ b/src/main/resources/data/boss_tools/worldgen/template_pool/run_alien_village/side_pool.json @@ -0,0 +1,41 @@ +{ + // More info on template pools can be found here: https://minecraft.gamepedia.com/Custom_world_generation#JSON_format_8" + // Yes, worldgen json files can have comments. Minecraft does "lenient" parsing of these json files. + + "name": "boss_tools:run_alien_village/side_pool", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 50, + "element": { + + // This side piece will only spawn if this piece is entirely outside or inside the calling piece's bounding box" + // Intersecting pieces is not allowed in Jigsaw structures so plan accordingly!" + // To spawn a piece entirely outside a calling piece, make sure the Jigsaw block of the calling" + // piece is facing outward on the edge of its bounding box. To spawn a piece entirely contained" + // inside a calling piece, have the jigsaw block face inward and that there is enough space in" + // the calling piece's boundaries to spawn a smaller inner piece." + + // Also, heads up, the structure_tutorial:run_down_house_left_side piece has a Jigsaw Block" + // that is targeting this pool directly. Be sure to change that Jigsaw Block's target pool" + // to make this side pool spawn in your own mod." + "location": "boss_tools:run_down_house_right_side", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + + // A second entry here means the starting piece's Jigsaw Block has a 50% chance of spawning" + // this golden right side piece instead of the regular right side. Think of it like a lottery." + "weight": 100, + "element": { + "location": "boss_tools:run_down_house_right_side_golden", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/worldgen/template_pool/run_alien_village/side_test.json b/src/main/resources/data/boss_tools/worldgen/template_pool/run_alien_village/side_test.json new file mode 100644 index 000000000..1ade89f06 --- /dev/null +++ b/src/main/resources/data/boss_tools/worldgen/template_pool/run_alien_village/side_test.json @@ -0,0 +1,49 @@ +{ + // More info on template pools can be found here: https://minecraft.gamepedia.com/Custom_world_generation#JSON_format_8" + // Yes, worldgen json files can have comments. Minecraft does "lenient" parsing of these json files. + + "name": "boss_tools:run_alien_village/side_test", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 50, + "element": { + + // This side piece will only spawn if this piece is entirely outside or inside the calling piece's bounding box" + // Intersecting pieces is not allowed in Jigsaw structures so plan accordingly!" + // To spawn a piece entirely outside a calling piece, make sure the Jigsaw block of the calling" + // piece is facing outward on the edge of its bounding box. To spawn a piece entirely contained" + // inside a calling piece, have the jigsaw block face inward and that there is enough space in" + // the calling piece's boundaries to spawn a smaller inner piece." + + // Also, heads up, the structure_tutorial:run_down_house_left_side piece has a Jigsaw Block" + // that is targeting this pool directly. Be sure to change that Jigsaw Block's target pool" + // to make this side pool spawn in your own mod." + "location": "boss_tools:test", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 100, + "element": { + + // This side piece will only spawn if this piece is entirely outside or inside the calling piece's bounding box" + // Intersecting pieces is not allowed in Jigsaw structures so plan accordingly!" + // To spawn a piece entirely outside a calling piece, make sure the Jigsaw block of the calling" + // piece is facing outward on the edge of its bounding box. To spawn a piece entirely contained" + // inside a calling piece, have the jigsaw block face inward and that there is enough space in" + // the calling piece's boundaries to spawn a smaller inner piece." + + // Also, heads up, the structure_tutorial:run_down_house_left_side piece has a Jigsaw Block" + // that is targeting this pool directly. Be sure to change that Jigsaw Block's target pool" + // to make this side pool spawn in your own mod." + "location": "boss_tools:test", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/worldgen/template_pool/run_alien_village/start_pool.json b/src/main/resources/data/boss_tools/worldgen/template_pool/run_alien_village/start_pool.json new file mode 100644 index 000000000..9a1d022b3 --- /dev/null +++ b/src/main/resources/data/boss_tools/worldgen/template_pool/run_alien_village/start_pool.json @@ -0,0 +1,41 @@ +{ + // More info on template pools can be found here: https://minecraft.gamepedia.com/Custom_world_generation#JSON_format_8 + // Yes, worldgen json files can have comments. Minecraft does "lenient" parsing of these json files. + + // This is the name of the template pool itself. I tend to just put the file path and file name here with modid." + "name": "repurposed_structures:run_down_house/start_pool", + + // The template pool to refer to if the entries in 'elements' fails to generate." + "fallback": "minecraft:empty", + + // Here you can list as many nbt files or configured features to spawn." + // Do note that configured features needs a special element entry stuff." + "elements": [ + { + + // How likely out of all the element for this one to be chosen." + "weight": 100, + "element": { + + // The Identifier of the nbt file itself of the structure piece." + // Note, this will automatically check into the 'structures' folder for the nbt file." + // The final path would look like 'resources/data/structure_tutorial/structures/run_down_house_left_side.nbt'" + // The Jigsaw block in the structure will point to side_pool.json to spawn the other half of the house." + "location": "structure_tutorial:run_down_house_left_side", + + // Processor JSON files can be used to randomize or replace blocks dynamically. Here, we don't do any of that." + "processors": "minecraft:empty", + + // If set to 'terrain_matching', the house would be deformed to fit the change in land." + // That's best for roads so lets stay 'rigid' for now." + "projection": "rigid", + + // The kind of element we are spawning. This one is most likely what you want." + // There's 'minecraft:legacy_single_pool_element' but that swaps the behavior of" + // Air and Structure Void in your piece as well as change the attachment mechanism." + // It's only for old Vanilla Jigsaw Structures so don't use it. Stick with non-legacy." + "element_type": "minecraft:single_pool_element" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/worldgen/template_pool/run_mateor_dungeon/side_meteor_1.json b/src/main/resources/data/boss_tools/worldgen/template_pool/run_mateor_dungeon/side_meteor_1.json new file mode 100644 index 000000000..fcccfb90d --- /dev/null +++ b/src/main/resources/data/boss_tools/worldgen/template_pool/run_mateor_dungeon/side_meteor_1.json @@ -0,0 +1,15 @@ +{ + "name": "boss_tools:run_mateor_dungeon/side_meteor_1", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 100, + "element": { + "location": "boss_tools:meteor_dungeon_1", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/worldgen/template_pool/run_mateor_dungeon/side_meteor_2.json b/src/main/resources/data/boss_tools/worldgen/template_pool/run_mateor_dungeon/side_meteor_2.json new file mode 100644 index 000000000..07ea57edc --- /dev/null +++ b/src/main/resources/data/boss_tools/worldgen/template_pool/run_mateor_dungeon/side_meteor_2.json @@ -0,0 +1,15 @@ +{ + "name": "boss_tools:run_mateor_dungeon/side_meteor_2", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 100, + "element": { + "location": "boss_tools:meteor_dungeon_8", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/worldgen/template_pool/run_mateor_dungeon/side_meteor_3.json b/src/main/resources/data/boss_tools/worldgen/template_pool/run_mateor_dungeon/side_meteor_3.json new file mode 100644 index 000000000..ad41b5e30 --- /dev/null +++ b/src/main/resources/data/boss_tools/worldgen/template_pool/run_mateor_dungeon/side_meteor_3.json @@ -0,0 +1,15 @@ +{ + "name": "boss_tools:run_mateor_dungeon/side_meteor_3", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 100, + "element": { + "location": "boss_tools:meteor_dungeon_3", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/worldgen/template_pool/run_mateor_dungeon/side_meteor_4.json b/src/main/resources/data/boss_tools/worldgen/template_pool/run_mateor_dungeon/side_meteor_4.json new file mode 100644 index 000000000..adb6527b7 --- /dev/null +++ b/src/main/resources/data/boss_tools/worldgen/template_pool/run_mateor_dungeon/side_meteor_4.json @@ -0,0 +1,15 @@ +{ + "name": "boss_tools:run_mateor_dungeon/side_meteor_4", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 100, + "element": { + "location": "boss_tools:meteor_structure", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/worldgen/template_pool/run_meteor/side_meteor_start.json b/src/main/resources/data/boss_tools/worldgen/template_pool/run_meteor/side_meteor_start.json new file mode 100644 index 000000000..09a4fbea1 --- /dev/null +++ b/src/main/resources/data/boss_tools/worldgen/template_pool/run_meteor/side_meteor_start.json @@ -0,0 +1,60 @@ +{ + "name": "boss_tools:run_meteor/side_meteor_start", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 50, + "element": { + "location": "boss_tools:meteor1", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:meteor2", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:meteor3", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:meteor4", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:meteor5", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 50, + "element": { + "location": "boss_tools:meteor6", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/worldgen/template_pool/run_oil/side_oil_start.json b/src/main/resources/data/boss_tools/worldgen/template_pool/run_oil/side_oil_start.json new file mode 100644 index 000000000..902e53b5d --- /dev/null +++ b/src/main/resources/data/boss_tools/worldgen/template_pool/run_oil/side_oil_start.json @@ -0,0 +1,15 @@ +{ + "name": "boss_tools:run_oil/side_oil_start", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 100, + "element": { + "location": "boss_tools:oil", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/worldgen/template_pool/run_venus_bullet/side_venus_bullet_start.json b/src/main/resources/data/boss_tools/worldgen/template_pool/run_venus_bullet/side_venus_bullet_start.json new file mode 100644 index 000000000..ae9ea94cd --- /dev/null +++ b/src/main/resources/data/boss_tools/worldgen/template_pool/run_venus_bullet/side_venus_bullet_start.json @@ -0,0 +1,15 @@ +{ + "name": "boss_tools:run_venus_bullet/side_venus_bullet_start", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 100, + "element": { + "location": "boss_tools:venus_bullet", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/boss_tools/worldgen/template_pool/run_venus_tower/side_venus_tower_start.json b/src/main/resources/data/boss_tools/worldgen/template_pool/run_venus_tower/side_venus_tower_start.json new file mode 100644 index 000000000..ae1ef164f --- /dev/null +++ b/src/main/resources/data/boss_tools/worldgen/template_pool/run_venus_tower/side_venus_tower_start.json @@ -0,0 +1,15 @@ +{ + "name": "boss_tools:run_venus_tower/side_venus_tower_start", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 100, + "element": { + "location": "boss_tools:venus_tower", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/blocks/ores.json b/src/main/resources/data/forge/tags/blocks/ores.json new file mode 100644 index 000000000..25528ff93 --- /dev/null +++ b/src/main/resources/data/forge/tags/blocks/ores.json @@ -0,0 +1,17 @@ +{ + "replace": false, + "values": [ + "boss_tools:moon_desh_ore", + "boss_tools:mars_diamond_ore", + "boss_tools:mars_iron_ore", + "boss_tools:moon_cheese_ore", + "boss_tools:mercury_iron_ore", + "boss_tools:mars_silicon_ore", + "boss_tools:mars_ice_shard_ore", + "boss_tools:moon_iron_ore", + "boss_tools:moon_glowstone_ore", + "boss_tools:venus_coal_ore", + "boss_tools:venus_diamond_ore", + "boss_tools:venus_gold_ore" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/blocks/ores/chesse.json b/src/main/resources/data/forge/tags/blocks/ores/chesse.json new file mode 100644 index 000000000..02864aa9a --- /dev/null +++ b/src/main/resources/data/forge/tags/blocks/ores/chesse.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:moon_cheese_ore" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/blocks/ores/coal.json b/src/main/resources/data/forge/tags/blocks/ores/coal.json new file mode 100644 index 000000000..5d4feec12 --- /dev/null +++ b/src/main/resources/data/forge/tags/blocks/ores/coal.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:venus_coal_ore" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/blocks/ores/desh.json b/src/main/resources/data/forge/tags/blocks/ores/desh.json new file mode 100644 index 000000000..b3938a997 --- /dev/null +++ b/src/main/resources/data/forge/tags/blocks/ores/desh.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:moon_desh_ore" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/blocks/ores/diamond.json b/src/main/resources/data/forge/tags/blocks/ores/diamond.json new file mode 100644 index 000000000..49c573f14 --- /dev/null +++ b/src/main/resources/data/forge/tags/blocks/ores/diamond.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "boss_tools:mars_diamond_ore", + "boss_tools:venus_diamond_ore" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/blocks/ores/gold.json b/src/main/resources/data/forge/tags/blocks/ores/gold.json new file mode 100644 index 000000000..7eda65d5a --- /dev/null +++ b/src/main/resources/data/forge/tags/blocks/ores/gold.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:venus_gold_ore" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/blocks/ores/iron.json b/src/main/resources/data/forge/tags/blocks/ores/iron.json new file mode 100644 index 000000000..e912c7441 --- /dev/null +++ b/src/main/resources/data/forge/tags/blocks/ores/iron.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "boss_tools:mars_iron_ore", + "boss_tools:mercury_iron_ore", + "boss_tools:moon_iron_ore" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/blocks/ores/silicon.json b/src/main/resources/data/forge/tags/blocks/ores/silicon.json new file mode 100644 index 000000000..0c74dfbdd --- /dev/null +++ b/src/main/resources/data/forge/tags/blocks/ores/silicon.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:mars_silicon_ore" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/blocks/storage_blocks.json b/src/main/resources/data/forge/tags/blocks/storage_blocks.json new file mode 100644 index 000000000..e5e0f6fc7 --- /dev/null +++ b/src/main/resources/data/forge/tags/blocks/storage_blocks.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "#forge:storage_blocks/desh", + "#forge:storage_blocks/silicon", + "#forge:storage_blocks/steel" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/blocks/storage_blocks/desh.json b/src/main/resources/data/forge/tags/blocks/storage_blocks/desh.json new file mode 100644 index 000000000..fc12c67e9 --- /dev/null +++ b/src/main/resources/data/forge/tags/blocks/storage_blocks/desh.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:desh_block" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/blocks/storage_blocks/silicon.json b/src/main/resources/data/forge/tags/blocks/storage_blocks/silicon.json new file mode 100644 index 000000000..a43e871c5 --- /dev/null +++ b/src/main/resources/data/forge/tags/blocks/storage_blocks/silicon.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:silicon_block" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/blocks/storage_blocks/steel.json b/src/main/resources/data/forge/tags/blocks/storage_blocks/steel.json new file mode 100644 index 000000000..09f00612f --- /dev/null +++ b/src/main/resources/data/forge/tags/blocks/storage_blocks/steel.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:steel_block" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/fluids/molten_desh.json b/src/main/resources/data/forge/tags/fluids/molten_desh.json new file mode 100644 index 000000000..32df963a0 --- /dev/null +++ b/src/main/resources/data/forge/tags/fluids/molten_desh.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "#boss_tools:molten_desh" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/fluids/molten_silicon.json b/src/main/resources/data/forge/tags/fluids/molten_silicon.json new file mode 100644 index 000000000..7dca9d0ac --- /dev/null +++ b/src/main/resources/data/forge/tags/fluids/molten_silicon.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "#boss_tools:molten_silicon" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/cheese/cheese.json b/src/main/resources/data/forge/tags/items/cheese/cheese.json new file mode 100644 index 000000000..ac3fecbcd --- /dev/null +++ b/src/main/resources/data/forge/tags/items/cheese/cheese.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:chesse" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/ingots.json b/src/main/resources/data/forge/tags/items/ingots.json new file mode 100644 index 000000000..03f1cd942 --- /dev/null +++ b/src/main/resources/data/forge/tags/items/ingots.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "#forge:ingots/desh", + "#forge:ingots/silicon", + "#forge:ingots/steel" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/ingots/desh.json b/src/main/resources/data/forge/tags/items/ingots/desh.json new file mode 100644 index 000000000..91320dd2f --- /dev/null +++ b/src/main/resources/data/forge/tags/items/ingots/desh.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:desh_ingot" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/ingots/silicon.json b/src/main/resources/data/forge/tags/items/ingots/silicon.json new file mode 100644 index 000000000..e084df9e1 --- /dev/null +++ b/src/main/resources/data/forge/tags/items/ingots/silicon.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:silicon_ingot" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/ingots/steel.json b/src/main/resources/data/forge/tags/items/ingots/steel.json new file mode 100644 index 000000000..1f32b33ff --- /dev/null +++ b/src/main/resources/data/forge/tags/items/ingots/steel.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:steel_ingot" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/nuggets.json b/src/main/resources/data/forge/tags/items/nuggets.json new file mode 100644 index 000000000..f2013d7e3 --- /dev/null +++ b/src/main/resources/data/forge/tags/items/nuggets.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "#forge:nuggets/desh", + "#forge:nuggets/silicon", + "#forge:nuggets/steel" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/nuggets/desh.json b/src/main/resources/data/forge/tags/items/nuggets/desh.json new file mode 100644 index 000000000..883f5a1a0 --- /dev/null +++ b/src/main/resources/data/forge/tags/items/nuggets/desh.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:desh_nugget" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/nuggets/silicon.json b/src/main/resources/data/forge/tags/items/nuggets/silicon.json new file mode 100644 index 000000000..178290f1e --- /dev/null +++ b/src/main/resources/data/forge/tags/items/nuggets/silicon.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:silicon_nugget" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/nuggets/steel.json b/src/main/resources/data/forge/tags/items/nuggets/steel.json new file mode 100644 index 000000000..23b6d5984 --- /dev/null +++ b/src/main/resources/data/forge/tags/items/nuggets/steel.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:steel_nugget" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/ores.json b/src/main/resources/data/forge/tags/items/ores.json new file mode 100644 index 000000000..25528ff93 --- /dev/null +++ b/src/main/resources/data/forge/tags/items/ores.json @@ -0,0 +1,17 @@ +{ + "replace": false, + "values": [ + "boss_tools:moon_desh_ore", + "boss_tools:mars_diamond_ore", + "boss_tools:mars_iron_ore", + "boss_tools:moon_cheese_ore", + "boss_tools:mercury_iron_ore", + "boss_tools:mars_silicon_ore", + "boss_tools:mars_ice_shard_ore", + "boss_tools:moon_iron_ore", + "boss_tools:moon_glowstone_ore", + "boss_tools:venus_coal_ore", + "boss_tools:venus_diamond_ore", + "boss_tools:venus_gold_ore" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/ores/chesse.json b/src/main/resources/data/forge/tags/items/ores/chesse.json new file mode 100644 index 000000000..02864aa9a --- /dev/null +++ b/src/main/resources/data/forge/tags/items/ores/chesse.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:moon_cheese_ore" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/ores/coal.json b/src/main/resources/data/forge/tags/items/ores/coal.json new file mode 100644 index 000000000..5d4feec12 --- /dev/null +++ b/src/main/resources/data/forge/tags/items/ores/coal.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:venus_coal_ore" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/ores/desh.json b/src/main/resources/data/forge/tags/items/ores/desh.json new file mode 100644 index 000000000..b3938a997 --- /dev/null +++ b/src/main/resources/data/forge/tags/items/ores/desh.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:moon_desh_ore" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/ores/diamond.json b/src/main/resources/data/forge/tags/items/ores/diamond.json new file mode 100644 index 000000000..49c573f14 --- /dev/null +++ b/src/main/resources/data/forge/tags/items/ores/diamond.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "boss_tools:mars_diamond_ore", + "boss_tools:venus_diamond_ore" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/ores/gold.json b/src/main/resources/data/forge/tags/items/ores/gold.json new file mode 100644 index 000000000..7eda65d5a --- /dev/null +++ b/src/main/resources/data/forge/tags/items/ores/gold.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:venus_gold_ore" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/ores/iron.json b/src/main/resources/data/forge/tags/items/ores/iron.json new file mode 100644 index 000000000..e912c7441 --- /dev/null +++ b/src/main/resources/data/forge/tags/items/ores/iron.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "boss_tools:mars_iron_ore", + "boss_tools:mercury_iron_ore", + "boss_tools:moon_iron_ore" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/ores/silicon.json b/src/main/resources/data/forge/tags/items/ores/silicon.json new file mode 100644 index 000000000..0c74dfbdd --- /dev/null +++ b/src/main/resources/data/forge/tags/items/ores/silicon.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:mars_silicon_ore" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/plates.json b/src/main/resources/data/forge/tags/items/plates.json new file mode 100644 index 000000000..18e99b8f8 --- /dev/null +++ b/src/main/resources/data/forge/tags/items/plates.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#forge:plates/desh", + "#forge:plates/iron" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/plates/desh.json b/src/main/resources/data/forge/tags/items/plates/desh.json new file mode 100644 index 000000000..a8323e3d2 --- /dev/null +++ b/src/main/resources/data/forge/tags/items/plates/desh.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:desh_plate" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/plates/iron.json b/src/main/resources/data/forge/tags/items/plates/iron.json new file mode 100644 index 000000000..34fa73e1e --- /dev/null +++ b/src/main/resources/data/forge/tags/items/plates/iron.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:iron_plate" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/rods.json b/src/main/resources/data/forge/tags/items/rods.json new file mode 100644 index 000000000..06f2dca56 --- /dev/null +++ b/src/main/resources/data/forge/tags/items/rods.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "#forge:rods/iron" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/rods/iron.json b/src/main/resources/data/forge/tags/items/rods/iron.json new file mode 100644 index 000000000..8800cddc2 --- /dev/null +++ b/src/main/resources/data/forge/tags/items/rods/iron.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:iron_stick" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/storage_blocks.json b/src/main/resources/data/forge/tags/items/storage_blocks.json new file mode 100644 index 000000000..e5e0f6fc7 --- /dev/null +++ b/src/main/resources/data/forge/tags/items/storage_blocks.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "#forge:storage_blocks/desh", + "#forge:storage_blocks/silicon", + "#forge:storage_blocks/steel" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/storage_blocks/desh.json b/src/main/resources/data/forge/tags/items/storage_blocks/desh.json new file mode 100644 index 000000000..fc12c67e9 --- /dev/null +++ b/src/main/resources/data/forge/tags/items/storage_blocks/desh.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:desh_block" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/storage_blocks/silicon.json b/src/main/resources/data/forge/tags/items/storage_blocks/silicon.json new file mode 100644 index 000000000..a43e871c5 --- /dev/null +++ b/src/main/resources/data/forge/tags/items/storage_blocks/silicon.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:silicon_block" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/storage_blocks/steel.json b/src/main/resources/data/forge/tags/items/storage_blocks/steel.json new file mode 100644 index 000000000..09f00612f --- /dev/null +++ b/src/main/resources/data/forge/tags/items/storage_blocks/steel.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:steel_block" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/loot_tables/loot.json b/src/main/resources/data/minecraft/loot_tables/loot.json new file mode 100644 index 000000000..8ad6a94ef --- /dev/null +++ b/src/main/resources/data/minecraft/loot_tables/loot.json @@ -0,0 +1,281 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 5, + "max": 10 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:emerald", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:quartz", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:iron_ingot", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:gold_nugget", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:cobweb", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": { + "min": 5, + "max": 10 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:iron_ingot", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:iron_nugget", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:gold_nugget", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:gold_ingot", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "boss_tools:steel_ingot", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "boss_tools:moon_sand", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": { + "min": 5, + "max": 10 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:diamond", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:emerald", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:gold_nugget", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "boss_tools:steel_ingot", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:redstone", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:cobweb", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:iron_ingot", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/beacon_base_blocks.json b/src/main/resources/data/minecraft/tags/blocks/beacon_base_blocks.json new file mode 100644 index 000000000..2b5af82de --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/beacon_base_blocks.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "boss_tools:steel_block", + "boss_tools:desh_block", + "boss_tools:silicon_block" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/slabs.json b/src/main/resources/data/minecraft/tags/blocks/slabs.json new file mode 100644 index 000000000..e472c74aa --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/slabs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "boss_tools:moon_brick_slab", + "boss_tools:cracked_moon_brick_slab" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/stairs.json b/src/main/resources/data/minecraft/tags/blocks/stairs.json new file mode 100644 index 000000000..4d070fd18 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/stairs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "boss_tools:moon_brick_stairs", + "boss_tools:cracked_moon_brick_stairs" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/wall_post_override.json b/src/main/resources/data/minecraft/tags/blocks/wall_post_override.json new file mode 100644 index 000000000..63042ca5c --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/wall_post_override.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "boss_tools:coal_torch" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/fluids/water.json b/src/main/resources/data/minecraft/tags/fluids/water.json new file mode 100644 index 000000000..9318a1d01 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/fluids/water.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "boss_tools:fuel", + "boss_tools:flowing_fuel", + "boss_tools:oil", + "boss_tools:flowing_oil" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/beacon_payment_items.json b/src/main/resources/data/minecraft/tags/items/beacon_payment_items.json new file mode 100644 index 000000000..03f1cd942 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/beacon_payment_items.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "#forge:ingots/desh", + "#forge:ingots/silicon", + "#forge:ingots/steel" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/slabs.json b/src/main/resources/data/minecraft/tags/items/slabs.json new file mode 100644 index 000000000..e472c74aa --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/slabs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "boss_tools:moon_brick_slab", + "boss_tools:cracked_moon_brick_slab" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/stairs.json b/src/main/resources/data/minecraft/tags/items/stairs.json new file mode 100644 index 000000000..4d070fd18 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/stairs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "boss_tools:moon_brick_stairs", + "boss_tools:cracked_moon_brick_stairs" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/tconstruct/tags/fluids/metal_like.json b/src/main/resources/data/tconstruct/tags/fluids/metal_like.json new file mode 100644 index 000000000..f5fe1bf73 --- /dev/null +++ b/src/main/resources/data/tconstruct/tags/fluids/metal_like.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#forge:molten_desh", + "#forge:molten_silicon" + ] +} \ No newline at end of file diff --git a/src/main/resources/logo.png b/src/main/resources/logo.png new file mode 100644 index 000000000..ba40dbe7e Binary files /dev/null and b/src/main/resources/logo.png differ diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta new file mode 100644 index 000000000..e5af8e626 --- /dev/null +++ b/src/main/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "boss_tools mod resources", + "pack_format": 6 + } +} \ No newline at end of file